PlaceDesign

Summary

Package:

Xilinx

Doc-string:

documented

File

Expected

Covered

Uncovered

Coverage

PlaceDesign.py

178

30

148

16.9%

Source

pyEDAA.OutputFilter/Xilinx/PlaceDesign.pydocumentedundocumentedignoredexcludednot counted
31"""A filtering anc classification processor for AMD/Xilinx Vivado Synthesis outputs."""
...
41
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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	)