PlaceDesign.py
Summary
- Lines:
224 of 224 covered (100.0%)
- Coverage:
100.0%
- Directory:
Source
pyEDAA/OutputFilter/Xilinx/PlaceDesign.pycoveredpartialuncoveredexcludednot executable
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
34
35from pyTooling.Decorators import export
36
37from pyEDAA.OutputFilter.Xilinx import TaskWithPhases, NestedPhase, NestedTaskWithPhases, SubSubSubPhaseWithTasks
38from pyEDAA.OutputFilter.Xilinx import Phase, SubPhase, SubSubPhase, SubSubSubPhase
39from pyEDAA.OutputFilter.Xilinx import PhaseWithChildren, SubPhaseWithChildren, SubSubPhaseWithChildren
40from pyEDAA.OutputFilter.Xilinx import MAJOR, MAJOR_MINOR, MAJOR_MINOR_MICRO, MAJOR_MINOR_MICRO_NANO
41
42
43@export
44class SubPhase_PlacerInitializationNetlistSorting(SubPhase):
45 """
46 *Placer Initialization Netlist Sorting* subphase.
47
48 Used by phase :class:`Phase_PlacerInitialization`.
49 """
50 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Placer Initialization Netlist Sorting")
51 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Placer Initialization Netlist Sorting | Checksum:"
52 _TIME: ClassVar[str] = "Time (s):"
53
54
55@export
56class SubPhase_IOPlacement_ClockPlacement_BuildPlacerDevice(SubPhase):
57 """
58 *IO Placement/ Clock Placement/ Build Placer Device* subphase.
59
60 Used by phase :class:`Phase_PlacerInitialization`.
61 """
62 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} IO Placement/ Clock Placement/ Build Placer Device")
63 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} IO Placement/ Clock Placement/ Build Placer Device | Checksum:"
64 _TIME: ClassVar[str] = "Time (s):"
65
66
67@export
68class SubPhase_BuildPlacerNetlistModel(SubPhase):
69 """
70 *Build Placer Netlist Model* subphase.
71
72 Used by phase :class:`Phase_PlacerInitialization`.
73 """
74 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Build Placer Netlist Model")
75 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Build Placer Netlist Model | Checksum:"
76 _TIME: ClassVar[str] = "Time (s):"
77
78
79@export
80class SubPhase_ConstrainClocks_Macros(SubPhase):
81 """
82 *Constrain Clocks/Macros* subphase.
83
84 Used by phase :class:`Phase_PlacerInitialization`.
85 """
86 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Constrain Clocks/Macros")
87 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Constrain Clocks/Macros | Checksum:"
88 _TIME: ClassVar[str] = "Time (s):"
89
90
91@export
92class Phase_PlacerInitialization(PhaseWithChildren):
93 """
94 *Placer Initialization* phase.
95
96 .. rubric:: Uses
97
98 * :class:`SubPhase_PlacerInitializationNetlistSorting`
99 * :class:`SubPhase_IOPlacement_ClockPlacement_BuildPlacerDevice`
100 * :class:`SubPhase_BuildPlacerNetlistModel`
101 * :class:`SubPhase_ConstrainClocks_Macros`
102
103 Used by task :class:`PlacerTask`.
104 """
105 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Placer Initialization")
106 _FINISH: ClassVar[str] = "Phase {phaseIndex} Placer Initialization | Checksum:"
107 _TIME: ClassVar[str] = "Time (s):"
108 _FINAL: ClassVar[str] = None
109
110 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
111 SubPhase_PlacerInitializationNetlistSorting,
112 SubPhase_IOPlacement_ClockPlacement_BuildPlacerDevice,
113 SubPhase_BuildPlacerNetlistModel,
114 SubPhase_ConstrainClocks_Macros
115 )
116
117
118@export
119class SubPhase_Floorplanning(SubPhase):
120 """
121 *Floorplanning* subphase.
122
123 Used by phase :class:`Phase_GlobalPlacement`.
124 """
125 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Floorplanning")
126 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Floorplanning | Checksum:"
127 _TIME: ClassVar[str] = "Time (s):"
128
129
130@export
131class SubPhase_UpdateTimingBeforeSLRPathOpt(SubPhase):
132 """
133 *Update Timing before SLR Path Opt* subphase.
134
135 Used by phase :class:`Phase_GlobalPlacement`.
136 """
137 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Update Timing before SLR Path Opt")
138 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Update Timing before SLR Path Opt | Checksum:"
139 _TIME: ClassVar[str] = "Time (s):"
140
141
142@export
143class SubPhase_PostProcessingInFloorplanning(SubPhase):
144 """
145 *Post-Processing in Floorplanning* subphase.
146
147 Used by phase :class:`Phase_GlobalPlacement`.
148 """
149 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Post-Processing in Floorplanning")
150 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Post-Processing in Floorplanning | Checksum:"
151 _TIME: ClassVar[str] = "Time (s):"
152
153
154@export
155class SubSubPhase_UpdateTimingBeforePhysicalSynthesis(SubSubPhase):
156 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} UpdateTiming Before Physical Synthesis")
157 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} UpdateTiming Before Physical Synthesis | Checksum:"
158 _TIME: ClassVar[str] = "Time (s):"
159
160
161@export
162class SubSubPhase_PhysicalSynthesisInPlacer(SubSubPhase):
163 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} Physical Synthesis In Placer")
164 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} Physical Synthesis In Placer | Checksum:"
165 _TIME: ClassVar[str] = "Time (s):"
166
167
168@export
169class SubPhase_GlobalPlacementCore(SubPhaseWithChildren):
170 """
171 *Global Placement Core* subphase.
172
173 Used by phase :class:`Phase_GlobalPlacement`.
174 """
175 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Placement Core")
176 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Placement Core | Checksum:"
177 _TIME: ClassVar[str] = "Time (s):"
178
179 _PARSERS: ClassVar[Tuple[Type[SubSubPhase], ...]] = (
180 SubSubPhase_UpdateTimingBeforePhysicalSynthesis,
181 SubSubPhase_PhysicalSynthesisInPlacer
182 )
183
184
185@export
186class SubPhase_GlobalPlacePhase1(SubPhase):
187 """
188 *Global Place Phase1* subphase.
189
190 Used by phase :class:`Phase_GlobalPlacement`.
191 """
192 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Place Phase1")
193 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Place Phase1 | Checksum:"
194 _TIME: ClassVar[str] = "Time (s):"
195
196
197# @export
198# class SubSubPhase_UpdateTimingBeforePhysicalSynthesis(SubSubPhase):
199# _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} UpdateTiming Before Physical Synthesis")
200# _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} UpdateTiming Before Physical Synthesis | Checksum:"
201# _TIME: ClassVar[str] = "Time (s):"
202
203
204# @export
205# class SubSubPhase_PhysicalSynthesisInPlacer(SubSubPhase):
206# _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} Physical Synthesis In Placer")
207# _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} Physical Synthesis In Placer | Checksum:"
208# _TIME: ClassVar[str] = "Time (s):"
209
210
211@export
212class SubPhase_GlobalPlacePhase2(SubPhaseWithChildren):
213 """
214 *Global Place Phase2* subphase.
215
216 Used by phase :class:`Phase_GlobalPlacement`.
217 """
218 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Place Phase2")
219 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Place Phase2 | Checksum:"
220 _TIME: ClassVar[str] = "Time (s):"
221
222 _PARSERS: ClassVar[Tuple[Type[SubSubPhase], ...]] = (
223 SubSubPhase_UpdateTimingBeforePhysicalSynthesis,
224 SubSubPhase_PhysicalSynthesisInPlacer
225 )
226
227
228@export
229class Phase_GlobalPlacement(PhaseWithChildren):
230 """
231 *Global Placement* phase.
232
233 .. rubric:: Uses
234
235 * :class:`SubPhase_Floorplanning`
236 * :class:`SubPhase_UpdateTimingBeforeSLRPathOpt`
237 * :class:`SubPhase_PostProcessingInFloorplanning`
238 * :class:`SubPhase_GlobalPlacePhase1`
239 * :class:`SubPhase_GlobalPlacePhase2`
240 * :class:`SubPhase_GlobalPlacementCore`
241
242 Used by task :class:`PlacerTask`.
243 """
244 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Global Placement")
245 _FINISH: ClassVar[str] = "Phase {phaseIndex} Global Placement | Checksum:"
246 _TIME: ClassVar[str] = "Time (s):"
247 _FINAL: ClassVar[str] = None
248
249 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
250 SubPhase_Floorplanning,
251 SubPhase_UpdateTimingBeforeSLRPathOpt,
252 SubPhase_PostProcessingInFloorplanning,
253 SubPhase_GlobalPlacePhase1,
254 SubPhase_GlobalPlacePhase2,
255 SubPhase_GlobalPlacementCore
256 )
257
258
259@export
260class SubPhase_CommitMultiColumnMacros(SubPhase):
261 """
262 *Commit Multi Column Macros* subphase.
263
264 Used by phase :class:`Phase_DetailPlacement`.
265 """
266 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Commit Multi Column Macros")
267 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Commit Multi Column Macros | Checksum:"
268 _TIME: ClassVar[str] = "Time (s):"
269
270
271@export
272class SubPhase_CommitMostMacrosLUTRAMs(SubPhase):
273 """
274 *Commit Most Macros & LUTRAMs* subphase.
275
276 Used by phase :class:`Phase_DetailPlacement`.
277 """
278 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Commit Most Macros & LUTRAMs")
279 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Commit Most Macros & LUTRAMs | Checksum:"
280 _TIME: ClassVar[str] = "Time (s):"
281
282
283@export
284class SubSubPhase_SmallShapeClustering(SubSubPhase):
285 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} Small Shape Clustering")
286 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} Small Shape Clustering | Checksum:"
287 _TIME: ClassVar[str] = "Time (s):"
288
289
290@export
291class SubSubSubPhase_SliceAreaSwapInitial(SubSubSubPhase):
292 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO_NANO} Slice Area Swap Initial")
293 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex}.{subSubSubPhaseIndex} Slice Area Swap Initial | Checksum:"
294 _TIME: ClassVar[str] = "Time (s):"
295
296
297@export
298class SubSubPhase_SliceAreaSwap(SubSubPhaseWithChildren):
299 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} Slice Area Swap")
300 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} Slice Area Swap | Checksum:"
301 _TIME: ClassVar[str] = "Time (s):"
302
303 _PARSERS: ClassVar[Tuple[Type[SubSubSubPhase], ...]] = (
304 SubSubSubPhase_SliceAreaSwapInitial,
305 )
306
307
308@export
309class SubPhase_SmallShapeDP(SubPhaseWithChildren):
310 """
311 *Small Shape DP* subphase.
312
313 Used by phase :class:`Phase_DetailPlacement`.
314 """
315 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Small Shape DP")
316 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Small Shape DP | Checksum:"
317 _TIME: ClassVar[str] = "Time (s):"
318
319 _PARSERS: ClassVar[Tuple[Type[SubSubPhase], ...]] = (
320 SubSubPhase_SmallShapeClustering,
321 SubSubPhase_SliceAreaSwap
322 )
323
324
325@export
326class SubPhase_AreaSwapOptimization(SubPhase):
327 """
328 *Area Swap Optimization* subphase.
329
330 Used by phase :class:`Phase_DetailPlacement`.
331 """
332 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Area Swap Optimization")
333 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Area Swap Optimization | Checksum:"
334 _TIME: ClassVar[str] = "Time (s):"
335
336
337@export
338class SubPhase_ReassignLUTPins(SubPhase):
339 """
340 *Re-assign LUT pins* subphase.
341
342 Used by phase :class:`Phase_DetailPlacement`.
343 """
344 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Re-assign LUT pins")
345 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Re-assign LUT pins | Checksum:"
346 _TIME: ClassVar[str] = "Time (s):"
347
348
349@export
350class SubPhase_PipelineRegisterOptimization_1(SubPhase):
351 """
352 *Floorplanning* subphase.
353
354 Used by phase :class:`Phase_DetailPlacement`.
355 """
356 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Pipeline Register Optimization")
357 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Pipeline Register Optimization | Checksum:"
358 _TIME: ClassVar[str] = "Time (s):"
359
360
361@export
362class SubPhase_PipelineRegisterOptimization_2(SubPhase):
363 """
364 *Pipeline Register Optimization* subphase.
365
366 Used by phase :class:`Phase_DetailPlacement`.
367 """
368 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Pipeline Register Optimization")
369 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Pipeline Register Optimization | Checksum:"
370 _TIME: ClassVar[str] = "Time (s):"
371
372
373@export
374class SubPhase_FastOptimization_1(SubPhase):
375 """
376 *Fast Optimization* subphase.
377
378 Used by phase :class:`Phase_DetailPlacement`.
379 """
380 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Fast Optimization")
381 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Fast Optimization | Checksum:"
382 _TIME: ClassVar[str] = "Time (s):"
383
384
385@export
386class SubPhase_FastOptimization_2(SubPhase):
387 """
388 *Fast Optimization* subphase.
389
390 Used by phase :class:`Phase_DetailPlacement`.
391 """
392 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Fast Optimization")
393 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Fast Optimization | Checksum:"
394 _TIME: ClassVar[str] = "Time (s):"
395
396
397@export
398class SubPhase_SmallShapeDetailPlacement(SubPhase):
399 """
400 *Small Shape Detail Placement* subphase.
401
402 Used by phase :class:`Phase_DetailPlacement`.
403 """
404 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Small Shape Detail Placement")
405 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Small Shape Detail Placement | Checksum:"
406 _TIME: ClassVar[str] = "Time (s):"
407
408
409@export
410class Phase_DetailPlacement(PhaseWithChildren):
411 """
412 *Detail Placement* phase.
413
414 .. rubric:: Uses
415
416 * :class:`SubPhase_CommitMultiColumnMacros`
417 * :class:`SubPhase_CommitMostMacrosLUTRAMs`
418 * :class:`SubPhase_SmallShapeDP`
419 * :class:`SubPhase_AreaSwapOptimization`
420 * :class:`SubPhase_PipelineRegisterOptimization_1`
421 * :class:`SubPhase_PipelineRegisterOptimization_2`
422 * :class:`SubPhase_FastOptimization_1`
423 * :class:`SubPhase_FastOptimization_2`
424 * :class:`SubPhase_SmallShapeDetailPlacement`
425 * :class:`SubPhase_ReassignLUTPins`
426
427 Used by task :class:`PlacerTask`.
428 """
429 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Detail Placement")
430 _FINISH: ClassVar[str] = "Phase {phaseIndex} Detail Placement | Checksum:"
431 _TIME: ClassVar[str] = "Time (s):"
432 _FINAL: ClassVar[str] = None
433
434 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
435 SubPhase_CommitMultiColumnMacros,
436 SubPhase_CommitMostMacrosLUTRAMs,
437 SubPhase_SmallShapeDP,
438 SubPhase_AreaSwapOptimization,
439 SubPhase_PipelineRegisterOptimization_1,
440 SubPhase_PipelineRegisterOptimization_2,
441 SubPhase_FastOptimization_1,
442 SubPhase_FastOptimization_2,
443 SubPhase_SmallShapeDetailPlacement,
444 SubPhase_ReassignLUTPins
445 )
446
447
448@export
449class NestedPhase_PhysicalSynthesisInitialization(NestedPhase):
450 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Physical Synthesis Initialization")
451 _FINISH: ClassVar[str] = "Phase {phaseIndex} Physical Synthesis Initialization | Checksum:"
452 _TIME: ClassVar[str] = "Time (s):"
453
454
455@export
456class NestedTask_PhysicalSynthesis(NestedTaskWithPhases):
457 _START: ClassVar[str] = "Starting Physical Synthesis Task"
458 _FINISH: ClassVar[str] = "Ending Physical Synthesis Task | Checksum:"
459 _TIME: ClassVar[str] = "Time (s):"
460
461 _PARSERS: ClassVar[Tuple[Type[NestedPhase], ...]] = (
462 NestedPhase_PhysicalSynthesisInitialization,
463 )
464
465
466@export
467class SubSubSubPhase_BUFGInsertion(SubSubSubPhaseWithTasks):
468 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO_NANO} BUFG Insertion")
469 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex}.{subSubSubPhaseIndex} BUFG Insertion | Checksum:"
470 _TIME: ClassVar[str] = "Time (s):"
471
472 _PARSERS: ClassVar[Tuple[Type[NestedTaskWithPhases], ...]] = (
473 NestedTask_PhysicalSynthesis,
474 )
475
476
477@export
478class SubSubSubPhase_PostPlacementTimingOptimization(SubSubSubPhase):
479 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO_NANO} Post Placement Timing Optimization")
480 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex}.{subSubSubPhaseIndex} Post Placement Timing Optimization | Checksum:"
481 _TIME: ClassVar[str] = "Time (s):"
482
483
484@export
485class SubSubPhase_PostPlacementOptimization(SubSubPhaseWithChildren):
486 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} Post Placement Optimization")
487 _FINISH: ClassVar[str] = None # Phase 4.1.1 Post Placement Optimization | Checksum:"
488 _TIME: ClassVar[str] = "Time (s):"
489
490 _PARSERS: ClassVar[Tuple[Type[SubSubSubPhase], ...]] = (
491 SubSubSubPhase_BUFGInsertion,
492 SubSubSubPhase_PostPlacementTimingOptimization
493 )
494
495
496@export
497class SubPhase_PostCommitOptimization(SubPhaseWithChildren):
498 """
499 *Post Commit Optimization* subphase.
500
501 Used by phase :class:`Phase_PostPlacementOptimizationAndCleanUp`.
502 """
503 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Post Commit Optimization")
504 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Post Commit Optimization | Checksum:"
505 _TIME: ClassVar[str] = "Time (s):"
506
507 _PARSERS: ClassVar[Tuple[Type[SubSubPhase], ...]] = (
508 SubSubPhase_PostPlacementOptimization,
509 )
510
511
512@export
513class SubPhase_PostPlacementCleanup(SubPhase):
514 """
515 *Post Placement Cleanup* subphase.
516
517 Used by phase :class:`Phase_PostPlacementOptimizationAndCleanUp`.
518 """
519 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Post Placement Cleanup")
520 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Post Placement Cleanup | Checksum:"
521 _TIME: ClassVar[str] = "Time (s):"
522
523
524@export
525class SubSubPhase_PrintEstimatedCongestion(SubSubPhase):
526 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} Print Estimated Congestion")
527 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} Print Estimated Congestion | Checksum:"
528 _TIME: ClassVar[str] = "Time (s):"
529
530
531@export
532class SubPhase_PlacerReporting(SubPhaseWithChildren):
533 """
534 *Placer Reporting* subphase.
535
536 Used by phase :class:`Phase_PostPlacementOptimizationAndCleanUp`.
537 """
538 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Placer Reporting")
539 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Placer Reporting | Checksum:"
540 _TIME: ClassVar[str] = "Time (s):"
541
542 _PARSERS: ClassVar[Tuple[Type[SubSubPhase], ...]] = (
543 SubSubPhase_PrintEstimatedCongestion,
544 )
545
546
547@export
548class SubPhase_FinalPlacementCleanup(SubPhase):
549 """
550 *Final Placement Cleanup* subphase.
551
552 Used by phase :class:`Phase_PostPlacementOptimizationAndCleanUp`.
553 """
554 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Final Placement Cleanup")
555 _FINISH: ClassVar[str] = "Time (s):"
556 _TIME: ClassVar[str] = None
557
558
559@export
560class Phase_PostPlacementOptimizationAndCleanUp(PhaseWithChildren):
561 """
562 *Post Placement Optimization and Clean-Up* phase.
563
564 .. rubric:: Uses
565
566 * :class:`SubPhase_PostCommitOptimization`
567 * :class:`SubPhase_PostPlacementCleanup`
568 * :class:`SubPhase_PlacerReporting`
569 * :class:`SubPhase_FinalPlacementCleanup`
570
571 Used by task :class:`PlacerTask`.
572 """
573 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Post Placement Optimization and Clean-Up")
574 _FINISH: ClassVar[str] = "Phase {phaseIndex} Post Placement Optimization and Clean-Up | Checksum:"
575 _TIME: ClassVar[str] = "Time (s):"
576 _FINAL: ClassVar[str] = None
577
578 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
579 SubPhase_PostCommitOptimization,
580 SubPhase_PostPlacementCleanup,
581 SubPhase_PlacerReporting,
582 SubPhase_FinalPlacementCleanup
583 )
584
585
586@export
587class PlacerTask(TaskWithPhases):
588 """
589 *Placer* task.
590
591 .. rubric:: Uses
592
593 * :class:`Phase_PlacerInitialization`
594 * :class:`Phase_GlobalPlacement`
595 * :class:`Phase_DetailPlacement`
596 * :class:`Phase_PostPlacementOptimizationAndCleanUp`
597
598 Used by Vivado command :class:`~pyEDAA.OutputFilter.Xilinx.Commands.PlaceDesign`.
599 """
600 _START: ClassVar[str] = "Starting Placer Task"
601 _FINISH: ClassVar[str] = "Ending Placer Task"
602
603 _PARSERS: ClassVar[Tuple[Type[Phase], ...]] = (
604 Phase_PlacerInitialization,
605 Phase_GlobalPlacement,
606 Phase_DetailPlacement,
607 Phase_PostPlacementOptimizationAndCleanUp
608 )