# ==================================================================================================================== #
# _____ ____ _ _ ___ _ _ _____ _ _ _ #
# _ __ _ _| ____| _ \ / \ / \ / _ \ _ _| |_ _ __ _ _| |_| ___(_) | |_ ___ _ __ #
# | '_ \| | | | _| | | | |/ _ \ / _ \ | | | | | | | __| '_ \| | | | __| |_ | | | __/ _ \ '__| #
# | |_) | |_| | |___| |_| / ___ \ / ___ \ | |_| | |_| | |_| |_) | |_| | |_| _| | | | || __/ | #
# | .__/ \__, |_____|____/_/ \_\/_/ \_(_)___/ \__,_|\__| .__/ \__,_|\__|_| |_|_|\__\___|_| #
# |_| |___/ |_| #
# ==================================================================================================================== #
# Authors: #
# Patrick Lehmann #
# #
# License: #
# ==================================================================================================================== #
# Copyright 2025-2026 Electronic Design Automation Abstraction (EDA²) #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); #
# you may not use this file except in compliance with the License. #
# You may obtain a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
# #
# SPDX-License-Identifier: Apache-2.0 #
# ==================================================================================================================== #
#
"""A filtering anc classification processor for AMD/Xilinx Vivado Synthesis outputs."""
from re import compile, Pattern
from typing import ClassVar, Type, Tuple
from pyTooling.Decorators import export
from pyEDAA.OutputFilter.Xilinx.Common2 import TaskWithPhases, NestedPhase, NestedTaskWithPhases, SubSubSubPhaseWithTasks
from pyEDAA.OutputFilter.Xilinx.Common2 import Phase, SubPhase, SubSubPhase, SubSubSubPhase
from pyEDAA.OutputFilter.Xilinx.Common2 import PhaseWithChildren, SubPhaseWithChildren, SubSubPhaseWithChildren
from pyEDAA.OutputFilter.Xilinx.Common2 import MAJOR, MAJOR_MINOR, MAJOR_MINOR_MICRO, MAJOR_MINOR_MICRO_NANO
[docs]
@export
class SubPhase_PlacerInitializationNetlistSorting(SubPhase):
"""
*Placer Initialization Netlist Sorting* subphase.
Used by phase :class:`Phase_PlacerInitialization`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Placer Initialization Netlist Sorting")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Placer Initialization Netlist Sorting | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubPhase_IOPlacement_ClockPlacement_BuildPlacerDevice(SubPhase):
"""
*IO Placement/ Clock Placement/ Build Placer Device* subphase.
Used by phase :class:`Phase_PlacerInitialization`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} IO Placement/ Clock Placement/ Build Placer Device")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} IO Placement/ Clock Placement/ Build Placer Device | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubPhase_BuildPlacerNetlistModel(SubPhase):
"""
*Build Placer Netlist Model* subphase.
Used by phase :class:`Phase_PlacerInitialization`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Build Placer Netlist Model")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Build Placer Netlist Model | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubPhase_ConstrainClocks_Macros(SubPhase):
"""
*Constrain Clocks/Macros* subphase.
Used by phase :class:`Phase_PlacerInitialization`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Constrain Clocks/Macros")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Constrain Clocks/Macros | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class Phase_PlacerInitialization(PhaseWithChildren):
"""
*Placer Initialization* phase.
.. rubric:: Uses
* :class:`SubPhase_PlacerInitializationNetlistSorting`
* :class:`SubPhase_IOPlacement_ClockPlacement_BuildPlacerDevice`
* :class:`SubPhase_BuildPlacerNetlistModel`
* :class:`SubPhase_ConstrainClocks_Macros`
Used by task :class:`PlacerTask`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Placer Initialization")
_FINISH: ClassVar[str] = "Phase {phaseIndex} Placer Initialization | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
_FINAL: ClassVar[str] = None
_PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
SubPhase_PlacerInitializationNetlistSorting,
SubPhase_IOPlacement_ClockPlacement_BuildPlacerDevice,
SubPhase_BuildPlacerNetlistModel,
SubPhase_ConstrainClocks_Macros
)
[docs]
@export
class SubPhase_Floorplanning(SubPhase):
"""
*Floorplanning* subphase.
Used by phase :class:`Phase_GlobalPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Floorplanning")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Floorplanning | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubPhase_UpdateTimingBeforeSLRPathOpt(SubPhase):
"""
*Update Timing before SLR Path Opt* subphase.
Used by phase :class:`Phase_GlobalPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Update Timing before SLR Path Opt")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Update Timing before SLR Path Opt | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubPhase_PostProcessingInFloorplanning(SubPhase):
"""
*Post-Processing in Floorplanning* subphase.
Used by phase :class:`Phase_GlobalPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Post-Processing in Floorplanning")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Post-Processing in Floorplanning | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubSubPhase_UpdateTimingBeforePhysicalSynthesis(SubSubPhase):
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} UpdateTiming Before Physical Synthesis")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} UpdateTiming Before Physical Synthesis | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubSubPhase_PhysicalSynthesisInPlacer(SubSubPhase):
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} Physical Synthesis In Placer")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} Physical Synthesis In Placer | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubPhase_GlobalPlacementCore(SubPhaseWithChildren):
"""
*Global Placement Core* subphase.
Used by phase :class:`Phase_GlobalPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Placement Core")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Placement Core | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
_PARSERS: ClassVar[Tuple[Type[SubSubPhase], ...]] = (
SubSubPhase_UpdateTimingBeforePhysicalSynthesis,
SubSubPhase_PhysicalSynthesisInPlacer
)
[docs]
@export
class SubPhase_GlobalPlacePhase1(SubPhase):
"""
*Global Place Phase1* subphase.
Used by phase :class:`Phase_GlobalPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Place Phase1")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Place Phase1 | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
# @export
# class SubSubPhase_UpdateTimingBeforePhysicalSynthesis(SubSubPhase):
# _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} UpdateTiming Before Physical Synthesis")
# _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} UpdateTiming Before Physical Synthesis | Checksum:"
# _TIME: ClassVar[str] = "Time (s):"
# @export
# class SubSubPhase_PhysicalSynthesisInPlacer(SubSubPhase):
# _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} Physical Synthesis In Placer")
# _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} Physical Synthesis In Placer | Checksum:"
# _TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubPhase_GlobalPlacePhase2(SubPhaseWithChildren):
"""
*Global Place Phase2* subphase.
Used by phase :class:`Phase_GlobalPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Global Place Phase2")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Global Place Phase2 | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
_PARSERS: ClassVar[Tuple[Type[SubSubPhase], ...]] = (
SubSubPhase_UpdateTimingBeforePhysicalSynthesis,
SubSubPhase_PhysicalSynthesisInPlacer
)
[docs]
@export
class Phase_GlobalPlacement(PhaseWithChildren):
"""
*Global Placement* phase.
.. rubric:: Uses
* :class:`SubPhase_Floorplanning`
* :class:`SubPhase_UpdateTimingBeforeSLRPathOpt`
* :class:`SubPhase_PostProcessingInFloorplanning`
* :class:`SubPhase_GlobalPlacePhase1`
* :class:`SubPhase_GlobalPlacePhase2`
* :class:`SubPhase_GlobalPlacementCore`
Used by task :class:`PlacerTask`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Global Placement")
_FINISH: ClassVar[str] = "Phase {phaseIndex} Global Placement | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
_FINAL: ClassVar[str] = None
_PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
SubPhase_Floorplanning,
SubPhase_UpdateTimingBeforeSLRPathOpt,
SubPhase_PostProcessingInFloorplanning,
SubPhase_GlobalPlacePhase1,
SubPhase_GlobalPlacePhase2,
SubPhase_GlobalPlacementCore
)
[docs]
@export
class SubPhase_CommitMultiColumnMacros(SubPhase):
"""
*Commit Multi Column Macros* subphase.
Used by phase :class:`Phase_DetailPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Commit Multi Column Macros")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Commit Multi Column Macros | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubPhase_CommitMostMacrosLUTRAMs(SubPhase):
"""
*Commit Most Macros & LUTRAMs* subphase.
Used by phase :class:`Phase_DetailPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Commit Most Macros & LUTRAMs")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Commit Most Macros & LUTRAMs | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubSubPhase_SmallShapeClustering(SubSubPhase):
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} Small Shape Clustering")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} Small Shape Clustering | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubSubSubPhase_SliceAreaSwapInitial(SubSubSubPhase):
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO_NANO} Slice Area Swap Initial")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex}.{subSubSubPhaseIndex} Slice Area Swap Initial | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubSubPhase_SliceAreaSwap(SubSubPhaseWithChildren):
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} Slice Area Swap")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} Slice Area Swap | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
_PARSERS: ClassVar[Tuple[Type[SubSubSubPhase], ...]] = (
SubSubSubPhase_SliceAreaSwapInitial,
)
[docs]
@export
class SubPhase_SmallShapeDP(SubPhaseWithChildren):
"""
*Small Shape DP* subphase.
Used by phase :class:`Phase_DetailPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Small Shape DP")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Small Shape DP | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
_PARSERS: ClassVar[Tuple[Type[SubSubPhase], ...]] = (
SubSubPhase_SmallShapeClustering,
SubSubPhase_SliceAreaSwap
)
[docs]
@export
class SubPhase_AreaSwapOptimization(SubPhase):
"""
*Area Swap Optimization* subphase.
Used by phase :class:`Phase_DetailPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Area Swap Optimization")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Area Swap Optimization | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubPhase_ReassignLUTPins(SubPhase):
"""
*Re-assign LUT pins* subphase.
Used by phase :class:`Phase_DetailPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Re-assign LUT pins")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Re-assign LUT pins | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubPhase_PipelineRegisterOptimization_1(SubPhase):
"""
*Floorplanning* subphase.
Used by phase :class:`Phase_DetailPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Pipeline Register Optimization")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Pipeline Register Optimization | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubPhase_PipelineRegisterOptimization_2(SubPhase):
"""
*Pipeline Register Optimization* subphase.
Used by phase :class:`Phase_DetailPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Pipeline Register Optimization")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Pipeline Register Optimization | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubPhase_FastOptimization_1(SubPhase):
"""
*Fast Optimization* subphase.
Used by phase :class:`Phase_DetailPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Fast Optimization")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Fast Optimization | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubPhase_FastOptimization_2(SubPhase):
"""
*Fast Optimization* subphase.
Used by phase :class:`Phase_DetailPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Fast Optimization")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Fast Optimization | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubPhase_SmallShapeDetailPlacement(SubPhase):
"""
*Small Shape Detail Placement* subphase.
Used by phase :class:`Phase_DetailPlacement`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Small Shape Detail Placement")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Small Shape Detail Placement | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class Phase_DetailPlacement(PhaseWithChildren):
"""
*Detail Placement* phase.
.. rubric:: Uses
* :class:`SubPhase_CommitMultiColumnMacros`
* :class:`SubPhase_CommitMostMacrosLUTRAMs`
* :class:`SubPhase_SmallShapeDP`
* :class:`SubPhase_AreaSwapOptimization`
* :class:`SubPhase_PipelineRegisterOptimization_1`
* :class:`SubPhase_PipelineRegisterOptimization_2`
* :class:`SubPhase_FastOptimization_1`
* :class:`SubPhase_FastOptimization_2`
* :class:`SubPhase_SmallShapeDetailPlacement`
* :class:`SubPhase_ReassignLUTPins`
Used by task :class:`PlacerTask`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Detail Placement")
_FINISH: ClassVar[str] = "Phase {phaseIndex} Detail Placement | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
_FINAL: ClassVar[str] = None
_PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
SubPhase_CommitMultiColumnMacros,
SubPhase_CommitMostMacrosLUTRAMs,
SubPhase_SmallShapeDP,
SubPhase_AreaSwapOptimization,
SubPhase_PipelineRegisterOptimization_1,
SubPhase_PipelineRegisterOptimization_2,
SubPhase_FastOptimization_1,
SubPhase_FastOptimization_2,
SubPhase_SmallShapeDetailPlacement,
SubPhase_ReassignLUTPins
)
[docs]
@export
class NestedPhase_PhysicalSynthesisInitialization(NestedPhase):
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Physical Synthesis Initialization")
_FINISH: ClassVar[str] = "Phase {phaseIndex} Physical Synthesis Initialization | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class NestedTask_PhysicalSynthesis(NestedTaskWithPhases):
_START: ClassVar[str] = "Starting Physical Synthesis Task"
_FINISH: ClassVar[str] = "Ending Physical Synthesis Task | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
_PARSERS: ClassVar[Tuple[Type[NestedPhase], ...]] = (
NestedPhase_PhysicalSynthesisInitialization,
)
[docs]
@export
class SubSubSubPhase_BUFGInsertion(SubSubSubPhaseWithTasks):
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO_NANO} BUFG Insertion")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex}.{subSubSubPhaseIndex} BUFG Insertion | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
_PARSERS: ClassVar[Tuple[Type[NestedTaskWithPhases], ...]] = (
NestedTask_PhysicalSynthesis,
)
[docs]
@export
class SubSubSubPhase_PostPlacementTimingOptimization(SubSubSubPhase):
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO_NANO} Post Placement Timing Optimization")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex}.{subSubSubPhaseIndex} Post Placement Timing Optimization | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubSubPhase_PostPlacementOptimization(SubSubPhaseWithChildren):
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} Post Placement Optimization")
_FINISH: ClassVar[str] = None # Phase 4.1.1 Post Placement Optimization | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
_PARSERS: ClassVar[Tuple[Type[SubSubSubPhase], ...]] = (
SubSubSubPhase_BUFGInsertion,
SubSubSubPhase_PostPlacementTimingOptimization
)
[docs]
@export
class SubPhase_PostCommitOptimization(SubPhaseWithChildren):
"""
*Post Commit Optimization* subphase.
Used by phase :class:`Phase_PostPlacementOptimizationAndCleanUp`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Post Commit Optimization")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Post Commit Optimization | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
_PARSERS: ClassVar[Tuple[Type[SubSubPhase], ...]] = (
SubSubPhase_PostPlacementOptimization,
)
[docs]
@export
class SubPhase_PostPlacementCleanup(SubPhase):
"""
*Post Placement Cleanup* subphase.
Used by phase :class:`Phase_PostPlacementOptimizationAndCleanUp`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Post Placement Cleanup")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Post Placement Cleanup | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubSubPhase_PrintEstimatedCongestion(SubSubPhase):
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} Print Estimated Congestion")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} Print Estimated Congestion | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
[docs]
@export
class SubPhase_PlacerReporting(SubPhaseWithChildren):
"""
*Placer Reporting* subphase.
Used by phase :class:`Phase_PostPlacementOptimizationAndCleanUp`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Placer Reporting")
_FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Placer Reporting | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
_PARSERS: ClassVar[Tuple[Type[SubSubPhase], ...]] = (
SubSubPhase_PrintEstimatedCongestion,
)
[docs]
@export
class SubPhase_FinalPlacementCleanup(SubPhase):
"""
*Final Placement Cleanup* subphase.
Used by phase :class:`Phase_PostPlacementOptimizationAndCleanUp`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Final Placement Cleanup")
_FINISH: ClassVar[str] = "Time (s):"
_TIME: ClassVar[str] = None
[docs]
@export
class Phase_PostPlacementOptimizationAndCleanUp(PhaseWithChildren):
"""
*Post Placement Optimization and Clean-Up* phase.
.. rubric:: Uses
* :class:`SubPhase_PostCommitOptimization`
* :class:`SubPhase_PostPlacementCleanup`
* :class:`SubPhase_PlacerReporting`
* :class:`SubPhase_FinalPlacementCleanup`
Used by task :class:`PlacerTask`.
"""
_START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Post Placement Optimization and Clean-Up")
_FINISH: ClassVar[str] = "Phase {phaseIndex} Post Placement Optimization and Clean-Up | Checksum:"
_TIME: ClassVar[str] = "Time (s):"
_FINAL: ClassVar[str] = None
_PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
SubPhase_PostCommitOptimization,
SubPhase_PostPlacementCleanup,
SubPhase_PlacerReporting,
SubPhase_FinalPlacementCleanup
)
[docs]
@export
class PlacerTask(TaskWithPhases):
"""
*Placer* task.
.. rubric:: Uses
* :class:`Phase_PlacerInitialization`
* :class:`Phase_GlobalPlacement`
* :class:`Phase_DetailPlacement`
* :class:`Phase_PostPlacementOptimizationAndCleanUp`
Used by Vivado command :class:`~pyEDAA.OutputFilter.Xilinx.Commands.PlaceDesign`.
"""
_START: ClassVar[str] = "Starting Placer Task"
_FINISH: ClassVar[str] = "Ending Placer Task"
_PARSERS: ClassVar[Tuple[Type[Phase], ...]] = (
Phase_PlacerInitialization,
Phase_GlobalPlacement,
Phase_DetailPlacement,
Phase_PostPlacementOptimizationAndCleanUp
)