Coverage for pyEDAA/OutputFilter/Xilinx/RouteDesign.py: 100%
210 statements
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-05 22:59 +0000
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-05 22:59 +0000
1# ==================================================================================================================== #
2# _____ ____ _ _ ___ _ _ _____ _ _ _ #
3# _ __ _ _| ____| _ \ / \ / \ / _ \ _ _| |_ _ __ _ _| |_| ___(_) | |_ ___ _ __ #
4# | '_ \| | | | _| | | | |/ _ \ / _ \ | | | | | | | __| '_ \| | | | __| |_ | | | __/ _ \ '__| #
5# | |_) | |_| | |___| |_| / ___ \ / ___ \ | |_| | |_| | |_| |_) | |_| | |_| _| | | | || __/ | #
6# | .__/ \__, |_____|____/_/ \_\/_/ \_(_)___/ \__,_|\__| .__/ \__,_|\__|_| |_|_|\__\___|_| #
7# |_| |___/ |_| #
8# ==================================================================================================================== #
9# Authors: #
10# Patrick Lehmann #
11# #
12# License: #
13# ==================================================================================================================== #
14# Copyright 2025-2026 Electronic Design Automation Abstraction (EDA²) #
15# #
16# Licensed under the Apache License, Version 2.0 (the "License"); #
17# you may not use this file except in compliance with the License. #
18# You may obtain a copy of the License at #
19# #
20# http://www.apache.org/licenses/LICENSE-2.0 #
21# #
22# Unless required by applicable law or agreed to in writing, software #
23# distributed under the License is distributed on an "AS IS" BASIS, #
24# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
25# See the License for the specific language governing permissions and #
26# limitations under the License. #
27# #
28# SPDX-License-Identifier: Apache-2.0 #
29# ==================================================================================================================== #
30#
31"""A filtering anc classification processor for AMD/Xilinx Vivado Synthesis outputs."""
32from re import compile, Pattern
33from typing import ClassVar, Type, Tuple
35from pyTooling.Decorators import export
37from pyEDAA.OutputFilter.Xilinx.Common2 import TaskWithPhases, Phase, SubPhase, PhaseWithChildren, SubPhaseWithChildren
38from pyEDAA.OutputFilter.Xilinx.Common2 import MAJOR, MAJOR_MINOR, MAJOR_MINOR_MICRO
39from pyEDAA.OutputFilter.Xilinx.PlaceDesign import SubSubPhase
42@export
43class Phase_BuildRTDesign(Phase):
44 """
45 *Build RT Design* phase.
47 Used by task :class:`RoutingTask`.
48 """
49 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Build RT Design")
50 _FINISH: ClassVar[str] = "Phase {phaseIndex} Build RT Design | Checksum:"
51 _TIME: ClassVar[str] = "Time (s):"
54@export
55class SubPhase_CreateTimer(SubPhase):
56 """
57 *Create Timer* subphase.
59 Used by phase :class:`Phase_RouterInitialization`.
60 """
61 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Create Timer")
62 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Create Timer | Checksum:"
63 _TIME: ClassVar[str] = "Time (s):"
66@export
67class SubPhase_FixTopologyConstraints(SubPhase):
68 """
69 *Fix Topology Constraints* subphase.
71 Used by phase :class:`Phase_RouterInitialization`.
72 """
73 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Fix Topology Constraints")
74 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Fix Topology Constraints | Checksum:"
75 _TIME: ClassVar[str] = "Time (s):"
78@export
79class SubPhase_PreRouteCleanup(SubPhase):
80 """
81 *Pre Route Cleanup* subphase.
83 Used by phase :class:`Phase_RouterInitialization`.
84 """
85 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Pre Route Cleanup")
86 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Pre Route Cleanup | Checksum:"
87 _TIME: ClassVar[str] = "Time (s):"
90@export
91class SubPhase_GlobalClockNetRouting(SubPhase):
92 """
93 *Global Clock Net Routing* subphase.
95 Used by phase :class:`Phase_RouterInitialization`.
96 """
97 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Clock Net Routing")
98 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Clock Net Routing | Checksum:"
99 _TIME: ClassVar[str] = "Time (s):"
102@export
103class SubPhase_UpdateTiming(SubPhase):
104 """
105 *Update Timing* subphase.
107 Used by phase :class:`Phase_RouterInitialization`.
108 """
109 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Update Timing")
110 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Update Timing | Checksum:"
111 _TIME: ClassVar[str] = "Time (s):"
114@export
115class SubPhase_SoftConstraintPins_FastBudgeting(SubPhase):
116 """
117 *Soft Constraint Pins - Fast Budgeting* subphase.
119 Used by phase :class:`Phase_RouterInitialization`.
120 """
121 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Soft Constraint Pins - Fast Budgeting")
122 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Soft Constraint Pins - Fast Budgeting | Checksum:"
123 _TIME: ClassVar[str] = "Time (s):"
126@export
127class SubSubPhase_UpdateTiming(SubSubPhase):
128 """
129 *Update Timing - Fast Budgeting* sub-subphase.
131 Used by phase :class:`SubPhase_UpdateTimingForBusSkew`.
132 """
133 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} Update Timing")
134 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} Update Timing | Checksum:"
135 _TIME: ClassVar[str] = "Time (s):"
138@export
139class SubPhase_UpdateTimingForBusSkew(SubPhaseWithChildren):
140 """
141 *Update Timing for Bus Skew* subphase.
143 .. rubric:: Uses
145 * :class:`SubSubPhase_UpdateTiming`
147 Used by phase :class:`Phase_RouterInitialization`.
148 """
149 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Update Timing for Bus Skew")
150 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Update Timing for Bus Skew | Checksum:"
151 _TIME: ClassVar[str] = "Time (s):"
153 _PARSERS: ClassVar[Tuple[Type[SubSubPhase], ...]] = (
154 SubSubPhase_UpdateTiming,
155 )
158@export
159class Phase_RouterInitialization(PhaseWithChildren):
160 """
161 *Router Initialization* phase.
163 .. rubric:: Uses
165 * :class:`SubPhase_CreateTimer`
166 * :class:`SubPhase_FixTopologyConstraints`
167 * :class:`SubPhase_PreRouteCleanup`
168 * :class:`SubPhase_GlobalClockNetRouting`
169 * :class:`SubPhase_UpdateTiming`
170 * :class:`SubPhase_UpdateTimingForBusSkew`
171 * :class:`SubPhase_SoftConstraintPins_FastBudgeting`
173 Used by task :class:`RoutingTask`.
174 """
175 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Router Initialization")
176 _FINISH: ClassVar[str] = "Phase {phaseIndex} Router Initialization | Checksum:"
177 _TIME: ClassVar[str] = "Time (s):"
179 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
180 SubPhase_CreateTimer,
181 SubPhase_FixTopologyConstraints,
182 SubPhase_PreRouteCleanup,
183 SubPhase_GlobalClockNetRouting,
184 SubPhase_UpdateTiming,
185 SubPhase_UpdateTimingForBusSkew,
186 SubPhase_SoftConstraintPins_FastBudgeting
187 )
190@export
191class SubPhase_GlobalRouting(SubPhase):
192 """
193 *Global Routing* subphase.
195 Used by phase :class:`Phase_Initial_Routing`.
196 """
197 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Routing")
198 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Routing | Checksum:"
199 _TIME: ClassVar[str] = "Time (s):"
202@export
203class SubPhase_InitialNetRouting(SubPhase):
204 """
205 *Initial Net Routing* subphase.
207 Used by phase :class:`Phase_Initial_Routing`.
208 """
209 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Initial Net Routing")
210 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Initial Net Routing | Checksum:"
211 _TIME: ClassVar[str] = "Time (s):"
214@export
215class Phase_Initial_Routing(PhaseWithChildren):
216 """
217 *Initial Routing* phase.
219 .. rubric:: Uses
221 * :class:`SubPhase_GlobalRouting`
222 * :class:`SubPhase_InitialNetRouting`
224 Used by task :class:`RoutingTask`.
225 """
226 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Initial Routing")
227 _FINISH: ClassVar[str] = "Phase {phaseIndex} Initial Routing | Checksum:"
228 _TIME: ClassVar[str] = "Time (s):"
230 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
231 SubPhase_GlobalRouting,
232 SubPhase_InitialNetRouting
233 )
236@export
237class Phase_GlobalRouting(Phase):
238 """
239 *Global Routing* phase.
241 Used by task :class:`RoutingTask`.
242 """
243 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Global Routing")
244 _FINISH: ClassVar[str] = "Phase {phaseIndex} Global Routing | Checksum:"
245 _TIME: ClassVar[str] = "Time (s):"
248@export
249class SubPhase_GlobalIteration0(SubPhase):
250 """
251 *Global Iteration 0* subphase.
253 Used by phase :class:`Phase_RipUpAndReroute`.
254 """
255 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Iteration 0")
256 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Iteration 0 | Checksum:"
257 _TIME: ClassVar[str] = "Time (s):"
260@export
261class SubPhase_AdditionalIterationForHold(SubPhase):
262 """
263 *Additional Iteration for Hold* subphase.
265 Used by phase :class:`Phase_RipUpAndReroute`.
266 """
267 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Additional Iteration for Hold")
268 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Additional Iteration for Hold | Checksum:"
269 _TIME: ClassVar[str] = "Time (s):"
272@export
273class SubPhase_GlobalIteration1(SubPhase):
274 """
275 *Global Iteration 1* subphase.
277 Used by phase :class:`Phase_RipUpAndReroute`.
278 """
279 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Iteration 1")
280 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Iteration 1 | Checksum:"
281 _TIME: ClassVar[str] = "Time (s):"
284@export
285class SubPhase_GlobalIteration2(SubPhase):
286 """
287 *Global Iteration 2* subphase.
289 Used by phase :class:`Phase_RipUpAndReroute`.
290 """
291 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Iteration 2")
292 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Iteration 2 | Checksum:"
293 _TIME: ClassVar[str] = "Time (s):"
296@export
297class Phase_RipUpAndReroute(PhaseWithChildren):
298 """
299 *Rip-up And Reroute* phase.
301 .. rubric:: Uses
303 * :class:`SubPhase_GlobalIteration0`
304 * :class:`SubPhase_AdditionalIterationForHold`
305 * :class:`SubPhase_GlobalIteration1`
306 * :class:`SubPhase_GlobalIteration2`
308 Used by task :class:`RoutingTask`.
309 """
310 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Rip-up And Reroute")
311 _FINISH: ClassVar[str] = "Phase {phaseIndex} Rip-up And Reroute | Checksum:"
312 _TIME: ClassVar[str] = "Time (s):"
314 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
315 SubPhase_GlobalIteration0,
316 SubPhase_AdditionalIterationForHold,
317 SubPhase_GlobalIteration1,
318 SubPhase_GlobalIteration2
319 )
322@export
323class SubPhase_InitialNetRoutingPass(SubPhase):
324 """
325 *Initial Net Routing Pass* subphase.
327 Used by phase :class:`Phase_InitialRouting`.
328 """
329 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Initial Net Routing Pass")
330 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Initial Net Routing Pass | Checksum:"
331 _TIME: ClassVar[str] = "Time (s):"
334@export
335class Phase_InitialRouting(PhaseWithChildren):
336 """
337 *Initial Routing* phase.
339 .. rubric:: Uses
341 * :class:`SubPhase_InitialNetRoutingPass`
342 * :class:`SubPhase_GlobalRouting`
343 * :class:`SubPhase_InitialNetRouting`
345 Used by task :class:`RoutingTask`.
346 """
347 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Initial Routing")
348 _FINISH: ClassVar[str] = "Phase {phaseIndex} Initial Routing | Checksum:"
349 _TIME: ClassVar[str] = "Time (s):"
351 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
352 SubPhase_InitialNetRoutingPass,
353 SubPhase_GlobalRouting,
354 SubPhase_InitialNetRouting
355 )
358@export
359class SubPhase_DelayCleanUp(SubPhase):
360 """
361 *Delay CleanUp* subphase.
363 Used by phase :class:`Phase_DelayAndSkewOptimization`.
364 """
365 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Delay CleanUp")
366 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Delay CleanUp | Checksum:"
367 _TIME: ClassVar[str] = "Time (s):"
370@export
371class SubPhase_ClockSkewOptimization(SubPhase):
372 """
373 *Clock Skew Optimization* subphase.
375 Used by phase :class:`Phase_DelayAndSkewOptimization`.
376 """
377 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Clock Skew Optimization")
378 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Clock Skew Optimization | Checksum:"
379 _TIME: ClassVar[str] = "Time (s):"
382@export
383class Phase_DelayAndSkewOptimization(PhaseWithChildren):
384 """
385 *Delay and Skew Optimization* phase.
387 .. rubric:: Uses
389 * :class:`SubPhase_DelayCleanUp`
390 * :class:`SubPhase_ClockSkewOptimization`
392 Used by task :class:`RoutingTask`.
393 """
394 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Delay and Skew Optimization")
395 _FINISH: ClassVar[str] = "Phase {phaseIndex} Delay and Skew Optimization | Checksum:"
396 _TIME: ClassVar[str] = "Time (s):"
398 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
399 SubPhase_DelayCleanUp,
400 SubPhase_ClockSkewOptimization
401 )
404@export
405class SubPhase_HoldFixIter(SubPhase):
406 """
407 *Hold Fix Iter* subphase.
409 Used by phase :class:`Phase_PostHoldFix`.
410 """
411 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Hold Fix Iter")
412 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Hold Fix Iter | Checksum:"
413 _TIME: ClassVar[str] = "Time (s):"
416@export
417class Phase_PostHoldFix(PhaseWithChildren):
418 """
419 *Post Hold Fix* phase.
421 Used by task :class:`RoutingTask`.
422 """
423 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Post Hold Fix")
424 _FINISH: ClassVar[str] = "Phase {phaseIndex} Post Hold Fix | Checksum:"
425 _TIME: ClassVar[str] = "Time (s):"
427 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
428 SubPhase_HoldFixIter,
429 )
432@export
433class Phase_DelayAndSkewOptimization(PhaseWithChildren):
434 """
435 *Delay and Skew Optimization* phase.
437 .. rubric:: Uses
439 * :class:`SubPhase_DelayCleanUp`
440 * :class:`SubPhase_ClockSkewOptimization`
442 Used by task :class:`RoutingTask`.
443 """
444 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Delay and Skew Optimization")
445 _FINISH: ClassVar[str] = "Phase {phaseIndex} Delay and Skew Optimization | Checksum:"
446 _TIME: ClassVar[str] = "Time (s):"
448 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
449 SubPhase_DelayCleanUp,
450 SubPhase_ClockSkewOptimization
451 )
454@export
455class Phase_RouteFinalize_1(Phase):
456 """
457 *Route finalize* phase.
459 Used by task :class:`RoutingTask`.
460 """
461 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Route finalize")
462 _FINISH: ClassVar[str] = "Phase {phaseIndex} Route finalize | Checksum:"
463 _TIME: ClassVar[str] = "Time (s):"
466@export
467class Phase_RouteFinalize_2(Phase):
468 """
469 *Route finalize* phase.
471 Used by task :class:`RoutingTask`.
472 """
473 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Route finalize")
474 _FINISH: ClassVar[str] = "Phase {phaseIndex} Route finalize | Checksum:"
475 _TIME: ClassVar[str] = "Time (s):"
478@export
479class Phase_PostHoldFix(PhaseWithChildren):
480 """
481 *Post Hold Fix* phase.
483 Used by task :class:`RoutingTask`.
484 """
485 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Post Hold Fix")
486 _FINISH: ClassVar[str] = "Phase {phaseIndex} Post Hold Fix | Checksum:"
487 _TIME: ClassVar[str] = "Time (s):"
489 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
490 SubPhase_HoldFixIter,
491 )
494@export
495class Phase_VerifyingRoutedNets(Phase):
496 """
497 *Verifying routed nets* phase.
499 Used by task :class:`RoutingTask`.
500 """
501 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Verifying routed nets")
502 _FINISH: ClassVar[str] = "Phase {phaseIndex} Verifying routed nets | Checksum:"
503 _TIME: ClassVar[str] = "Time (s):"
506@export
507class Phase_DepositingRoutes(Phase):
508 """
509 *Depositing Routes* phase.
511 Used by task :class:`RoutingTask`.
512 """
513 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Depositing Routes")
514 _FINISH: ClassVar[str] = "Phase {phaseIndex} Depositing Routes | Checksum:"
515 _TIME: ClassVar[str] = "Time (s):"
518@export
519class Phase_VerifyingRoutedNets(Phase):
520 """
521 *Verifying routed nets* phase.
523 Used by task :class:`RoutingTask`.
524 """
525 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Verifying routed nets")
526 _FINISH: ClassVar[str] = "Phase {phaseIndex} Verifying routed nets | Checksum:"
527 _TIME: ClassVar[str] = "Time (s):"
530@export
531class Phase_ResolveXTalk(Phase):
532 """
533 *Resolve XTalk* phase.
535 Used by task :class:`RoutingTask`.
536 """
537 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Resolve XTalk")
538 _FINISH: ClassVar[str] = "Phase {phaseIndex} Resolve XTalk | Checksum:"
539 _TIME: ClassVar[str] = "Time (s):"
542@export
543class Phase_DepositingRoutes(Phase):
544 """
545 *Depositing Routes* phase.
547 Used by task :class:`RoutingTask`.
548 """
549 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Depositing Routes")
550 _FINISH: ClassVar[str] = "Phase {phaseIndex} Depositing Routes | Checksum:"
551 _TIME: ClassVar[str] = "Time (s):"
554@export
555class Phase_PostProcessRouting(Phase):
556 """
557 *Post Process Routing* phase.
559 Used by task :class:`RoutingTask`.
560 """
561 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Post Process Routing")
562 _FINISH: ClassVar[str] = "Phase {phaseIndex} Post Process Routing | Checksum:"
563 _TIME: ClassVar[str] = "Time (s):"
566@export
567class Phase_PostRouterTiming(Phase):
568 """
569 *Post Router Timing* phase.
571 Used by task :class:`RoutingTask`.
572 """
573 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Post Router Timing")
574 _FINISH: ClassVar[str] = "Phase {phaseIndex} Post Router Timing | Checksum:"
575 _TIME: ClassVar[str] = "Time (s):"
578@export
579class Phase_PostRouteEventProcessing(Phase):
580 """
581 *Post-Route Event Processing* phase.
583 Used by task :class:`RoutingTask`.
584 """
585 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Post-Route Event Processing")
586 _FINISH: ClassVar[str] = "Phase {phaseIndex} Post-Route Event Processing | Checksum:"
587 _TIME: ClassVar[str] = "Time (s):"
590@export
591class RoutingTask(TaskWithPhases):
592 """
593 *Routing* task.
595 .. rubric:: Uses
597 * :class:`Phase_BuildRTDesign`
598 * :class:`Phase_RouterInitialization`
599 * :class:`Phase_GlobalRouting`
600 * :class:`Phase_InitialRouting`
601 * :class:`Phase_RipUpAndReroute`
602 * :class:`Phase_DelayAndSkewOptimization`
603 * :class:`Phase_PostHoldFix`
604 * :class:`Phase_RouteFinalize_1`
605 * :class:`Phase_VerifyingRoutedNets`
606 * :class:`Phase_DepositingRoutes`
607 * :class:`Phase_ResolveXTalk`
608 * :class:`Phase_RouteFinalize_2`
609 * :class:`Phase_PostRouterTiming`
610 * :class:`Phase_PostProcessRouting`
611 * :class:`Phase_PostRouterTiming`
612 * :class:`Phase_PostRouteEventProcessing`
614 Used by Vivado command :class:`~pyEDAA.OutputFilter.Xilinx.Commands.RouteDesign`.
615 """
616 _START: ClassVar[str] = "Starting Routing Task"
617 _FINISH: ClassVar[str] = "Ending Routing Task"
619 _PARSERS: ClassVar[Tuple[Type[Phase], ...]] = (
620 Phase_BuildRTDesign,
621 Phase_RouterInitialization,
622 Phase_GlobalRouting,
623 Phase_InitialRouting,
624 Phase_RipUpAndReroute,
625 Phase_DelayAndSkewOptimization,
626 Phase_PostHoldFix,
627 Phase_RouteFinalize_1,
628 Phase_VerifyingRoutedNets,
629 Phase_DepositingRoutes,
630 Phase_ResolveXTalk,
631 Phase_RouteFinalize_2,
632 Phase_PostRouterTiming,
633 Phase_PostProcessRouting,
634 Phase_PostRouterTiming, # FIXME: duplicate
635 Phase_PostRouteEventProcessing
636 )