Source code for pyEDAA.OutputFilter.Xilinx.OptimizeDesign

# ==================================================================================================================== #
#               _____ ____    _        _      ___        _               _   _____ _ _ _                               #
#   _ __  _   _| ____|  _ \  / \      / \    / _ \ _   _| |_ _ __  _   _| |_|  ___(_) | |_ ___ _ __                    #
#  | '_ \| | | |  _| | | | |/ _ \    / _ \  | | | | | | | __| '_ \| | | | __| |_  | | | __/ _ \ '__|                   #
#  | |_) | |_| | |___| |_| / ___ \  / ___ \ | |_| | |_| | |_| |_) | |_| | |_|  _| | | | ||  __/ |                      #
#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)___/ \__,_|\__| .__/ \__,_|\__|_|   |_|_|\__\___|_|                      #
#  |_|    |___/                                             |_|                                                        #
# ==================================================================================================================== #
# 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 Task, TaskWithPhases, TaskWithSubTasks, SubTask
from pyEDAA.OutputFilter.Xilinx.Common2 import Phase, SubPhase, PhaseWithChildren
from pyEDAA.OutputFilter.Xilinx.Common2 import MAJOR, MAJOR_MINOR


[docs] @export class Phase_Retarget(Phase): """ *Retarget* phase. Used by task :class:`LogicOptimizationTask`. """ _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Retarget") _FINISH: ClassVar[str] = "Phase {phaseIndex} Retarget | Checksum:" _TIME: ClassVar[str] = "Time (s):" _FINAL: ClassVar[str] = "Retarget | Checksum:"
[docs] @export class SubPhase_CoreGenerationAndDesignSetup(SubPhase): _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Core Generation And Design Setup") _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Core Generation And Design Setup | Checksum:" _TIME: ClassVar[str] = "Time (s):"
[docs] @export class SubPhase_SetupConstraintsAndSortNetlist(SubPhase): _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Setup Constraints And Sort Netlist") _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Setup Constraints And Sort Netlist | Checksum:" _TIME: ClassVar[str] = "Time (s):"
[docs] @export class Phase_Initialization(PhaseWithChildren): """ *Initialization* phase. Used by task :class:`LogicOptimizationTask`. """ _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Initialization") _FINISH: ClassVar[str] = "Phase {phaseIndex} Initialization | Checksum:" _TIME: ClassVar[str] = "Time (s):" _FINAL: ClassVar[str] = None _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = ( SubPhase_CoreGenerationAndDesignSetup, SubPhase_SetupConstraintsAndSortNetlist )
[docs] @export class Phase_ConstantPropagation(Phase): """ *Constant propagation* phase. Used by task :class:`LogicOptimizationTask`. """ _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Constant propagation") _FINISH: ClassVar[str] = "Phase {phaseIndex} Constant propagation | Checksum:" _TIME: ClassVar[str] = "Time (s):" _FINAL: ClassVar[str] = "Constant propagation | Checksum:"
[docs] @export class SubPhase_TimerUpdate(SubPhase): _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Timer Update") _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Timer Update | Checksum:" _TIME: ClassVar[str] = "Time (s):"
[docs] @export class SubPhase_TimingDataCollection(SubPhase): _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Timing Data Collection") _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Timing Data Collection | Checksum:" _TIME: ClassVar[str] = "Time (s):"
[docs] @export class Phase_TimerUpdateAndTimingDataCollection(PhaseWithChildren): """ *Timer Update And Timing Data Collection* phase. Used by task :class:`LogicOptimizationTask`. """ _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Timer Update And Timing Data Collection") _FINISH: ClassVar[str] = "Phase {phaseIndex} Timer Update And Timing Data Collection | Checksum:" _TIME: ClassVar[str] = "Time (s):" _FINAL: ClassVar[str] = None _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = ( SubPhase_TimerUpdate, SubPhase_TimingDataCollection )
[docs] @export class Phase_Sweep(Phase): """ *Sweep* phase. Used by task :class:`LogicOptimizationTask`. """ _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Sweep") _FINISH: ClassVar[str] = "Phase {phaseIndex} Sweep | Checksum:" _TIME: ClassVar[str] = "Time (s):" _FINAL: ClassVar[str] = "Sweep | Checksum:"
[docs] @export class Phase_BUFGOptimization(Phase): """ *BUFG optimization* phase. Used by task :class:`LogicOptimizationTask`. """ _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} BUFG optimization") _FINISH: ClassVar[str] = "Phase {phaseIndex} BUFG optimization | Checksum:" _TIME: ClassVar[str] = "Time (s):" _FINAL: ClassVar[str] = "BUFG optimization | Checksum:"
[docs] @export class Phase_ShiftRegisterOptimization(Phase): """ *Shift Register Optimization* phase. Used by task :class:`LogicOptimizationTask`. """ _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Shift Register Optimization") _FINISH: ClassVar[str] = "Phase {phaseIndex} Shift Register Optimization | Checksum:" _TIME: ClassVar[str] = "Time (s):" _FINAL: ClassVar[str] = "Shift Register Optimization | Checksum:"
[docs] @export class Phase_PostProcessingNetlist(Phase): """ *Post Processing Netlist* phase. Used by task :class:`LogicOptimizationTask`. """ _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Post Processing Netlist") _FINISH: ClassVar[str] = "Phase {phaseIndex} Post Processing Netlist | Checksum:" _TIME: ClassVar[str] = "Time (s):" _FINAL: ClassVar[str] = "Post Processing Netlist | Checksum:"
[docs] @export class SubPhase_FinalizingDesignCoresAndUpdatingShapes(SubPhase): _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Finalizing Design Cores and Updating Shapes") _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Finalizing Design Cores and Updating Shapes | Checksum:" _TIME: ClassVar[str] = "Time (s):"
[docs] @export class SubPhase_VerifyingNetlistConnectivity(SubPhase): _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Verifying Netlist Connectivity") _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Verifying Netlist Connectivity | Checksum:" _TIME: ClassVar[str] = "Time (s):"
[docs] @export class Phase_Finalization(PhaseWithChildren): """ *Finalization* phase. Used by task :class:`LogicOptimizationTask`. """ _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Finalization") _FINISH: ClassVar[str] = "Phase {phaseIndex} Finalization | Checksum:" _TIME: ClassVar[str] = "Time (s):" _FINAL: ClassVar[str] = None _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = ( SubPhase_FinalizingDesignCoresAndUpdatingShapes, SubPhase_VerifyingNetlistConnectivity )
[docs] @export class DRCTask(Task): _START: ClassVar[str] = "Starting DRC Task" _FINISH: ClassVar[str] = "Time (s):"
[docs] @export class CacheTimingInformationTask(Task): _START: ClassVar[str] = "Starting Cache Timing Information Task" _FINISH: ClassVar[str] = "Ending Cache Timing Information Task"
[docs] @export class LogicOptimizationTask(TaskWithPhases): """ *Logic Optimization* task. Used by Vivado command :class:`~pyEDAA.OutputFilter.Xilinx.Commands.OptimizeDesign`. """ _START: ClassVar[str] = "Starting Logic Optimization Task" _FINISH: ClassVar[str] = "Ending Logic Optimization Task" _PARSERS: ClassVar[Tuple[Type[Phase], ...]] = ( Phase_Initialization, Phase_TimerUpdateAndTimingDataCollection, Phase_Retarget, Phase_ConstantPropagation, Phase_Sweep, Phase_BUFGOptimization, Phase_ShiftRegisterOptimization, Phase_PostProcessingNetlist, Phase_Finalization )
[docs] @export class PowerOptPatchEnablesTask(SubTask): _START: ClassVar[str] = "Starting PowerOpt Patch Enables Task" _FINISH: ClassVar[str] = "Ending PowerOpt Patch Enables Task"
[docs] @export class PowerOptimizationTask(TaskWithSubTasks): _START: ClassVar[str] = "Starting Power Optimization Task" _FINISH: ClassVar[str] = "Ending Power Optimization Task" _PARSERS: ClassVar[Tuple[Type[SubTask], ...]] = ( PowerOptPatchEnablesTask, )
[docs] @export class FinalCleanupTask(TaskWithSubTasks): _START: ClassVar[str] = "Starting Final Cleanup Task" _FINISH: ClassVar[str] = "Ending Final Cleanup Task" _PARSERS: ClassVar[Tuple[Type[SubTask], ...]] = ( LogicOptimizationTask, )
[docs] @export class NetlistObfuscationTask(Task): _START: ClassVar[str] = "Starting Netlist Obfuscation Task" _FINISH: ClassVar[str] = "Ending Netlist Obfuscation Task"