Coverage for pyEDAA/OutputFilter/Xilinx/RouteDesign.py: 100%
230 statements
« prev ^ index » next coverage.py v7.14.3, created at 2026-06-26 23:00 +0000
« prev ^ index » next coverage.py v7.14.3, created at 2026-06-26 23:00 +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 import TaskWithPhases, Phase, SubPhase, PhaseWithChildren, SubPhaseWithChildren
38from pyEDAA.OutputFilter.Xilinx 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):"
52 _FINAL: ClassVar[str] = None
55@export
56class SubPhase_CreateTimer(SubPhase):
57 """
58 *Create Timer* subphase.
60 Used by phase :class:`Phase_RouterInitialization`.
61 """
62 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Create Timer")
63 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Create Timer | Checksum:"
64 _TIME: ClassVar[str] = "Time (s):"
67@export
68class SubPhase_FixTopologyConstraints(SubPhase):
69 """
70 *Fix Topology Constraints* subphase.
72 Used by phase :class:`Phase_RouterInitialization`.
73 """
74 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Fix Topology Constraints")
75 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Fix Topology Constraints | Checksum:"
76 _TIME: ClassVar[str] = "Time (s):"
79@export
80class SubPhase_PreRouteCleanup(SubPhase):
81 """
82 *Pre Route Cleanup* subphase.
84 Used by phase :class:`Phase_RouterInitialization`.
85 """
86 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Pre Route Cleanup")
87 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Pre Route Cleanup | Checksum:"
88 _TIME: ClassVar[str] = "Time (s):"
91@export
92class SubPhase_GlobalClockNetRouting(SubPhase):
93 """
94 *Global Clock Net Routing* subphase.
96 Used by phase :class:`Phase_RouterInitialization`.
97 """
98 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Clock Net Routing")
99 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Clock Net Routing | Checksum:"
100 _TIME: ClassVar[str] = "Time (s):"
103@export
104class SubPhase_UpdateTiming(SubPhase):
105 """
106 *Update Timing* subphase.
108 Used by phase :class:`Phase_RouterInitialization`.
109 """
110 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Update Timing")
111 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Update Timing | Checksum:"
112 _TIME: ClassVar[str] = "Time (s):"
115@export
116class SubPhase_SoftConstraintPins_FastBudgeting(SubPhase):
117 """
118 *Soft Constraint Pins - Fast Budgeting* subphase.
120 Used by phase :class:`Phase_RouterInitialization`.
121 """
122 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Soft Constraint Pins - Fast Budgeting")
123 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Soft Constraint Pins - Fast Budgeting | Checksum:"
124 _TIME: ClassVar[str] = "Time (s):"
127@export
128class SubSubPhase_UpdateTiming(SubSubPhase):
129 """
130 *Update Timing - Fast Budgeting* sub-subphase.
132 Used by phase :class:`SubPhase_UpdateTimingForBusSkew`.
133 """
134 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} Update Timing")
135 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} Update Timing | Checksum:"
136 _TIME: ClassVar[str] = "Time (s):"
139@export
140class SubPhase_UpdateTimingForBusSkew(SubPhaseWithChildren):
141 """
142 *Update Timing for Bus Skew* subphase.
144 .. rubric:: Uses
146 * :class:`SubSubPhase_UpdateTiming`
148 Used by phase :class:`Phase_RouterInitialization`.
149 """
150 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Update Timing for Bus Skew")
151 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Update Timing for Bus Skew | Checksum:"
152 _TIME: ClassVar[str] = "Time (s):"
154 _PARSERS: ClassVar[Tuple[Type[SubSubPhase], ...]] = (
155 SubSubPhase_UpdateTiming,
156 )
159@export
160class Phase_RouterInitialization(PhaseWithChildren):
161 """
162 *Router Initialization* phase.
164 .. rubric:: Uses
166 * :class:`SubPhase_CreateTimer`
167 * :class:`SubPhase_FixTopologyConstraints`
168 * :class:`SubPhase_PreRouteCleanup`
169 * :class:`SubPhase_GlobalClockNetRouting`
170 * :class:`SubPhase_UpdateTiming`
171 * :class:`SubPhase_UpdateTimingForBusSkew`
172 * :class:`SubPhase_SoftConstraintPins_FastBudgeting`
174 Used by task :class:`RoutingTask`.
175 """
176 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Router Initialization")
177 _FINISH: ClassVar[str] = "Phase {phaseIndex} Router Initialization | Checksum:"
178 _TIME: ClassVar[str] = "Time (s):"
179 _FINAL: ClassVar[str] = None
181 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
182 SubPhase_CreateTimer,
183 SubPhase_FixTopologyConstraints,
184 SubPhase_PreRouteCleanup,
185 SubPhase_GlobalClockNetRouting,
186 SubPhase_UpdateTiming,
187 SubPhase_UpdateTimingForBusSkew,
188 SubPhase_SoftConstraintPins_FastBudgeting
189 )
192@export
193class SubPhase_GlobalRouting(SubPhase):
194 """
195 *Global Routing* subphase.
197 Used by phase :class:`Phase_Initial_Routing`.
198 """
199 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Routing")
200 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Routing | Checksum:"
201 _TIME: ClassVar[str] = "Time (s):"
204@export
205class SubPhase_InitialNetRouting(SubPhase):
206 """
207 *Initial Net Routing* subphase.
209 Used by phase :class:`Phase_Initial_Routing`.
210 """
211 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Initial Net Routing")
212 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Initial Net Routing | Checksum:"
213 _TIME: ClassVar[str] = "Time (s):"
216@export
217class Phase_Initial_Routing(PhaseWithChildren):
218 """
219 *Initial Routing* phase.
221 .. rubric:: Uses
223 * :class:`SubPhase_GlobalRouting`
224 * :class:`SubPhase_InitialNetRouting`
226 Used by task :class:`RoutingTask`.
227 """
228 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Initial Routing")
229 _FINISH: ClassVar[str] = "Phase {phaseIndex} Initial Routing | Checksum:"
230 _TIME: ClassVar[str] = "Time (s):"
231 _FINAL: ClassVar[str] = None
233 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
234 SubPhase_GlobalRouting,
235 SubPhase_InitialNetRouting
236 )
239@export
240class Phase_GlobalRouting(Phase):
241 """
242 *Global Routing* phase.
244 Used by task :class:`RoutingTask`.
245 """
246 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Global Routing")
247 _FINISH: ClassVar[str] = "Phase {phaseIndex} Global Routing | Checksum:"
248 _TIME: ClassVar[str] = "Time (s):"
249 _FINAL: ClassVar[str] = None
252@export
253class SubPhase_GlobalIteration0(SubPhase):
254 """
255 *Global Iteration 0* subphase.
257 Used by phase :class:`Phase_RipUpAndReroute`.
258 """
259 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Iteration 0")
260 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Iteration 0 | Checksum:"
261 _TIME: ClassVar[str] = "Time (s):"
264@export
265class SubPhase_AdditionalIterationForHold(SubPhase):
266 """
267 *Additional Iteration for Hold* subphase.
269 Used by phase :class:`Phase_RipUpAndReroute`.
270 """
271 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Additional Iteration for Hold")
272 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Additional Iteration for Hold | Checksum:"
273 _TIME: ClassVar[str] = "Time (s):"
276@export
277class SubPhase_GlobalIteration1(SubPhase):
278 """
279 *Global Iteration 1* subphase.
281 Used by phase :class:`Phase_RipUpAndReroute`.
282 """
283 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Iteration 1")
284 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Iteration 1 | Checksum:"
285 _TIME: ClassVar[str] = "Time (s):"
288@export
289class SubPhase_GlobalIteration2(SubPhase):
290 """
291 *Global Iteration 2* subphase.
293 Used by phase :class:`Phase_RipUpAndReroute`.
294 """
295 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Iteration 2")
296 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Iteration 2 | Checksum:"
297 _TIME: ClassVar[str] = "Time (s):"
300@export
301class Phase_RipUpAndReroute(PhaseWithChildren):
302 """
303 *Rip-up And Reroute* phase.
305 .. rubric:: Uses
307 * :class:`SubPhase_GlobalIteration0`
308 * :class:`SubPhase_AdditionalIterationForHold`
309 * :class:`SubPhase_GlobalIteration1`
310 * :class:`SubPhase_GlobalIteration2`
312 Used by task :class:`RoutingTask`.
313 """
314 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Rip-up And Reroute")
315 _FINISH: ClassVar[str] = "Phase {phaseIndex} Rip-up And Reroute | Checksum:"
316 _TIME: ClassVar[str] = "Time (s):"
317 _FINAL: ClassVar[str] = None
319 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
320 SubPhase_GlobalIteration0,
321 SubPhase_AdditionalIterationForHold,
322 SubPhase_GlobalIteration1,
323 SubPhase_GlobalIteration2
324 )
327@export
328class SubPhase_InitialNetRoutingPass(SubPhase):
329 """
330 *Initial Net Routing Pass* subphase.
332 Used by phase :class:`Phase_InitialRouting`.
333 """
334 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Initial Net Routing Pass")
335 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Initial Net Routing Pass | Checksum:"
336 _TIME: ClassVar[str] = "Time (s):"
339@export
340class Phase_InitialRouting(PhaseWithChildren):
341 """
342 *Initial Routing* phase.
344 .. rubric:: Uses
346 * :class:`SubPhase_InitialNetRoutingPass`
347 * :class:`SubPhase_GlobalRouting`
348 * :class:`SubPhase_InitialNetRouting`
350 Used by task :class:`RoutingTask`.
351 """
352 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Initial Routing")
353 _FINISH: ClassVar[str] = "Phase {phaseIndex} Initial Routing | Checksum:"
354 _TIME: ClassVar[str] = "Time (s):"
355 _FINAL: ClassVar[str] = None
357 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
358 SubPhase_InitialNetRoutingPass,
359 SubPhase_GlobalRouting,
360 SubPhase_InitialNetRouting
361 )
364@export
365class SubPhase_DelayCleanUp(SubPhase):
366 """
367 *Delay CleanUp* subphase.
369 Used by phase :class:`Phase_DelayAndSkewOptimization`.
370 """
371 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Delay CleanUp")
372 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Delay CleanUp | Checksum:"
373 _TIME: ClassVar[str] = "Time (s):"
376@export
377class SubPhase_ClockSkewOptimization(SubPhase):
378 """
379 *Clock Skew Optimization* subphase.
381 Used by phase :class:`Phase_DelayAndSkewOptimization`.
382 """
383 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Clock Skew Optimization")
384 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Clock Skew Optimization | Checksum:"
385 _TIME: ClassVar[str] = "Time (s):"
388@export
389class Phase_DelayAndSkewOptimization(PhaseWithChildren):
390 """
391 *Delay and Skew Optimization* phase.
393 .. rubric:: Uses
395 * :class:`SubPhase_DelayCleanUp`
396 * :class:`SubPhase_ClockSkewOptimization`
398 Used by task :class:`RoutingTask`.
399 """
400 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Delay and Skew Optimization")
401 _FINISH: ClassVar[str] = "Phase {phaseIndex} Delay and Skew Optimization | Checksum:"
402 _TIME: ClassVar[str] = "Time (s):"
403 _FINAL: ClassVar[str] = None
405 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
406 SubPhase_DelayCleanUp,
407 SubPhase_ClockSkewOptimization
408 )
411@export
412class SubPhase_HoldFixIter(SubPhase):
413 """
414 *Hold Fix Iter* subphase.
416 Used by phase :class:`Phase_PostHoldFix`.
417 """
418 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Hold Fix Iter")
419 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Hold Fix Iter | Checksum:"
420 _TIME: ClassVar[str] = "Time (s):"
423@export
424class Phase_PostHoldFix(PhaseWithChildren):
425 """
426 *Post Hold Fix* phase.
428 Used by task :class:`RoutingTask`.
429 """
430 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Post Hold Fix")
431 _FINISH: ClassVar[str] = "Phase {phaseIndex} Post Hold Fix | Checksum:"
432 _TIME: ClassVar[str] = "Time (s):"
433 _FINAL: ClassVar[str] = None
435 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
436 SubPhase_HoldFixIter,
437 )
440@export
441class Phase_DelayAndSkewOptimization(PhaseWithChildren):
442 """
443 *Delay and Skew Optimization* phase.
445 .. rubric:: Uses
447 * :class:`SubPhase_DelayCleanUp`
448 * :class:`SubPhase_ClockSkewOptimization`
450 Used by task :class:`RoutingTask`.
451 """
452 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Delay and Skew Optimization")
453 _FINISH: ClassVar[str] = "Phase {phaseIndex} Delay and Skew Optimization | Checksum:"
454 _TIME: ClassVar[str] = "Time (s):"
455 _FINAL: ClassVar[str] = None
457 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
458 SubPhase_DelayCleanUp,
459 SubPhase_ClockSkewOptimization
460 )
463@export
464class Phase_RouteFinalize_1(Phase): # todo: remove duplicates
465 """
466 *Route finalize* phase.
468 Used by task :class:`RoutingTask`.
469 """
470 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Route finalize")
471 _FINISH: ClassVar[str] = "Phase {phaseIndex} Route finalize | Checksum:"
472 _TIME: ClassVar[str] = "Time (s):"
473 _FINAL: ClassVar[str] = None
476@export
477class Phase_RouteFinalize_2(Phase): # todo: remove duplicates
478 """
479 *Route finalize* phase.
481 Used by task :class:`RoutingTask`.
482 """
483 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Route finalize")
484 _FINISH: ClassVar[str] = "Phase {phaseIndex} Route finalize | Checksum:"
485 _TIME: ClassVar[str] = "Time (s):"
486 _FINAL: ClassVar[str] = None
489@export
490class Phase_PostHoldFix(PhaseWithChildren):
491 """
492 *Post Hold Fix* phase.
494 Used by task :class:`RoutingTask`.
495 """
496 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Post Hold Fix")
497 _FINISH: ClassVar[str] = "Phase {phaseIndex} Post Hold Fix | Checksum:"
498 _TIME: ClassVar[str] = "Time (s):"
499 _FINAL: ClassVar[str] = None
501 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
502 SubPhase_HoldFixIter,
503 )
506@export
507class Phase_VerifyingRoutedNets(Phase):
508 """
509 *Verifying routed nets* phase.
511 Used by task :class:`RoutingTask`.
512 """
513 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Verifying routed nets")
514 _FINISH: ClassVar[str] = "Phase {phaseIndex} Verifying routed nets | Checksum:"
515 _TIME: ClassVar[str] = "Time (s):"
516 _FINAL: ClassVar[str] = None
519@export
520class Phase_DepositingRoutes(Phase):
521 """
522 *Depositing Routes* phase.
524 Used by task :class:`RoutingTask`.
525 """
526 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Depositing Routes")
527 _FINISH: ClassVar[str] = "Phase {phaseIndex} Depositing Routes | Checksum:"
528 _TIME: ClassVar[str] = "Time (s):"
529 _FINAL: ClassVar[str] = None
532@export
533class Phase_VerifyingRoutedNets(Phase):
534 """
535 *Verifying routed nets* phase.
537 Used by task :class:`RoutingTask`.
538 """
539 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Verifying routed nets")
540 _FINISH: ClassVar[str] = "Phase {phaseIndex} Verifying routed nets | Checksum:"
541 _TIME: ClassVar[str] = "Time (s):"
542 _FINAL: ClassVar[str] = None
545@export
546class Phase_ResolveXTalk(Phase):
547 """
548 *Resolve XTalk* phase.
550 Used by task :class:`RoutingTask`.
551 """
552 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Resolve XTalk")
553 _FINISH: ClassVar[str] = "Phase {phaseIndex} Resolve XTalk | Checksum:"
554 _TIME: ClassVar[str] = "Time (s):"
555 _FINAL: ClassVar[str] = None
558@export
559class Phase_DepositingRoutes(Phase):
560 """
561 *Depositing Routes* phase.
563 Used by task :class:`RoutingTask`.
564 """
565 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Depositing Routes")
566 _FINISH: ClassVar[str] = "Phase {phaseIndex} Depositing Routes | Checksum:"
567 _TIME: ClassVar[str] = "Time (s):"
568 _FINAL: ClassVar[str] = None
571@export
572class Phase_PostProcessRouting(Phase):
573 """
574 *Post Process Routing* phase.
576 Used by task :class:`RoutingTask`.
577 """
578 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Post Process Routing")
579 _FINISH: ClassVar[str] = "Phase {phaseIndex} Post Process Routing | Checksum:"
580 _TIME: ClassVar[str] = "Time (s):"
581 _FINAL: ClassVar[str] = None
584@export
585class Phase_PostRouterTiming(Phase):
586 """
587 *Post Router Timing* phase.
589 Used by task :class:`RoutingTask`.
590 """
591 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Post Router Timing")
592 _FINISH: ClassVar[str] = "Phase {phaseIndex} Post Router Timing | Checksum:"
593 _TIME: ClassVar[str] = "Time (s):"
594 _FINAL: ClassVar[str] = None
597@export
598class Phase_PostRouteEventProcessing(Phase):
599 """
600 *Post-Route Event Processing* phase.
602 Used by task :class:`RoutingTask`.
603 """
604 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Post-Route Event Processing")
605 _FINISH: ClassVar[str] = "Phase {phaseIndex} Post-Route Event Processing | Checksum:"
606 _TIME: ClassVar[str] = "Time (s):"
607 _FINAL: ClassVar[str] = None
610@export
611class RoutingTask(TaskWithPhases):
612 """
613 *Routing* task.
615 .. rubric:: Uses
617 * :class:`Phase_BuildRTDesign`
618 * :class:`Phase_RouterInitialization`
619 * :class:`Phase_GlobalRouting`
620 * :class:`Phase_InitialRouting`
621 * :class:`Phase_RipUpAndReroute`
622 * :class:`Phase_DelayAndSkewOptimization`
623 * :class:`Phase_PostHoldFix`
624 * :class:`Phase_RouteFinalize_1`
625 * :class:`Phase_VerifyingRoutedNets`
626 * :class:`Phase_DepositingRoutes`
627 * :class:`Phase_ResolveXTalk`
628 * :class:`Phase_RouteFinalize_2`
629 * :class:`Phase_PostRouterTiming`
630 * :class:`Phase_PostProcessRouting`
631 * :class:`Phase_PostRouterTiming`
632 * :class:`Phase_PostRouteEventProcessing`
634 Used by Vivado command :class:`~pyEDAA.OutputFilter.Xilinx.Commands.RouteDesign`.
635 """
636 _START: ClassVar[str] = "Starting Routing Task"
637 _FINISH: ClassVar[str] = "Ending Routing Task"
639 _PARSERS: ClassVar[Tuple[Type[Phase], ...]] = (
640 Phase_BuildRTDesign,
641 Phase_RouterInitialization,
642 Phase_GlobalRouting,
643 Phase_InitialRouting,
644 Phase_RipUpAndReroute,
645 Phase_DelayAndSkewOptimization,
646 Phase_PostHoldFix,
647 Phase_RouteFinalize_1,
648 Phase_VerifyingRoutedNets,
649 Phase_DepositingRoutes,
650 Phase_ResolveXTalk,
651 Phase_RouteFinalize_2,
652 Phase_PostRouterTiming,
653 Phase_PostProcessRouting,
654 Phase_PostRouterTiming, # FIXME: duplicate
655 Phase_PostRouteEventProcessing
656 )