Coverage for pyEDAA/OutputFilter/Xilinx/OptimizeDesign.py: 100%
124 statements
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-05 22:59 +0000
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-05 22:59 +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.Common2 import Task, TaskWithPhases, TaskWithSubTasks, SubTask
38from pyEDAA.OutputFilter.Xilinx.Common2 import Phase, SubPhase, PhaseWithChildren
39from pyEDAA.OutputFilter.Xilinx.Common2 import MAJOR, MAJOR_MINOR
42@export
43class Phase_Retarget(Phase):
44 """
45 *Retarget* phase.
47 Used by task :class:`LogicOptimizationTask`.
48 """
49 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Retarget")
50 _FINISH: ClassVar[str] = "Phase {phaseIndex} Retarget | Checksum:"
51 _TIME: ClassVar[str] = "Time (s):"
52 _FINAL: ClassVar[str] = "Retarget | Checksum:"
55@export
56class SubPhase_CoreGenerationAndDesignSetup(SubPhase):
57 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Core Generation And Design Setup")
58 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Core Generation And Design Setup | Checksum:"
59 _TIME: ClassVar[str] = "Time (s):"
62@export
63class SubPhase_SetupConstraintsAndSortNetlist(SubPhase):
64 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Setup Constraints And Sort Netlist")
65 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Setup Constraints And Sort Netlist | Checksum:"
66 _TIME: ClassVar[str] = "Time (s):"
69@export
70class Phase_Initialization(PhaseWithChildren):
71 """
72 *Initialization* phase.
74 Used by task :class:`LogicOptimizationTask`.
75 """
76 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Initialization")
77 _FINISH: ClassVar[str] = "Phase {phaseIndex} Initialization | Checksum:"
78 _TIME: ClassVar[str] = "Time (s):"
79 _FINAL: ClassVar[str] = None
81 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
82 SubPhase_CoreGenerationAndDesignSetup,
83 SubPhase_SetupConstraintsAndSortNetlist
84 )
87@export
88class Phase_ConstantPropagation(Phase):
89 """
90 *Constant propagation* phase.
92 Used by task :class:`LogicOptimizationTask`.
93 """
94 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Constant propagation")
95 _FINISH: ClassVar[str] = "Phase {phaseIndex} Constant propagation | Checksum:"
96 _TIME: ClassVar[str] = "Time (s):"
97 _FINAL: ClassVar[str] = "Constant propagation | Checksum:"
100@export
101class SubPhase_TimerUpdate(SubPhase):
102 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Timer Update")
103 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Timer Update | Checksum:"
104 _TIME: ClassVar[str] = "Time (s):"
107@export
108class SubPhase_TimingDataCollection(SubPhase):
109 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Timing Data Collection")
110 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Timing Data Collection | Checksum:"
111 _TIME: ClassVar[str] = "Time (s):"
114@export
115class Phase_TimerUpdateAndTimingDataCollection(PhaseWithChildren):
116 """
117 *Timer Update And Timing Data Collection* phase.
119 Used by task :class:`LogicOptimizationTask`.
120 """
121 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Timer Update And Timing Data Collection")
122 _FINISH: ClassVar[str] = "Phase {phaseIndex} Timer Update And Timing Data Collection | Checksum:"
123 _TIME: ClassVar[str] = "Time (s):"
124 _FINAL: ClassVar[str] = None
126 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
127 SubPhase_TimerUpdate,
128 SubPhase_TimingDataCollection
129 )
132@export
133class Phase_Sweep(Phase):
134 """
135 *Sweep* phase.
137 Used by task :class:`LogicOptimizationTask`.
138 """
139 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Sweep")
140 _FINISH: ClassVar[str] = "Phase {phaseIndex} Sweep | Checksum:"
141 _TIME: ClassVar[str] = "Time (s):"
142 _FINAL: ClassVar[str] = "Sweep | Checksum:"
145@export
146class Phase_BUFGOptimization(Phase):
147 """
148 *BUFG optimization* phase.
150 Used by task :class:`LogicOptimizationTask`.
151 """
152 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} BUFG optimization")
153 _FINISH: ClassVar[str] = "Phase {phaseIndex} BUFG optimization | Checksum:"
154 _TIME: ClassVar[str] = "Time (s):"
155 _FINAL: ClassVar[str] = "BUFG optimization | Checksum:"
158@export
159class Phase_ShiftRegisterOptimization(Phase):
160 """
161 *Shift Register Optimization* phase.
163 Used by task :class:`LogicOptimizationTask`.
164 """
165 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Shift Register Optimization")
166 _FINISH: ClassVar[str] = "Phase {phaseIndex} Shift Register Optimization | Checksum:"
167 _TIME: ClassVar[str] = "Time (s):"
168 _FINAL: ClassVar[str] = "Shift Register Optimization | Checksum:"
171@export
172class Phase_PostProcessingNetlist(Phase):
173 """
174 *Post Processing Netlist* phase.
176 Used by task :class:`LogicOptimizationTask`.
177 """
178 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Post Processing Netlist")
179 _FINISH: ClassVar[str] = "Phase {phaseIndex} Post Processing Netlist | Checksum:"
180 _TIME: ClassVar[str] = "Time (s):"
181 _FINAL: ClassVar[str] = "Post Processing Netlist | Checksum:"
184@export
185class SubPhase_FinalizingDesignCoresAndUpdatingShapes(SubPhase):
186 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Finalizing Design Cores and Updating Shapes")
187 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Finalizing Design Cores and Updating Shapes | Checksum:"
188 _TIME: ClassVar[str] = "Time (s):"
191@export
192class SubPhase_VerifyingNetlistConnectivity(SubPhase):
193 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Verifying Netlist Connectivity")
194 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Verifying Netlist Connectivity | Checksum:"
195 _TIME: ClassVar[str] = "Time (s):"
198@export
199class Phase_Finalization(PhaseWithChildren):
200 """
201 *Finalization* phase.
203 Used by task :class:`LogicOptimizationTask`.
204 """
205 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Finalization")
206 _FINISH: ClassVar[str] = "Phase {phaseIndex} Finalization | Checksum:"
207 _TIME: ClassVar[str] = "Time (s):"
208 _FINAL: ClassVar[str] = None
210 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
211 SubPhase_FinalizingDesignCoresAndUpdatingShapes,
212 SubPhase_VerifyingNetlistConnectivity
213 )
216@export
217class DRCTask(Task):
218 _START: ClassVar[str] = "Starting DRC Task"
219 _FINISH: ClassVar[str] = "Time (s):"
222@export
223class CacheTimingInformationTask(Task):
224 _START: ClassVar[str] = "Starting Cache Timing Information Task"
225 _FINISH: ClassVar[str] = "Ending Cache Timing Information Task"
228@export
229class LogicOptimizationTask(TaskWithPhases):
230 """
231 *Logic Optimization* task.
233 Used by Vivado command :class:`~pyEDAA.OutputFilter.Xilinx.Commands.OptimizeDesign`.
234 """
235 _START: ClassVar[str] = "Starting Logic Optimization Task"
236 _FINISH: ClassVar[str] = "Ending Logic Optimization Task"
238 _PARSERS: ClassVar[Tuple[Type[Phase], ...]] = (
239 Phase_Initialization,
240 Phase_TimerUpdateAndTimingDataCollection,
241 Phase_Retarget,
242 Phase_ConstantPropagation,
243 Phase_Sweep,
244 Phase_BUFGOptimization,
245 Phase_ShiftRegisterOptimization,
246 Phase_PostProcessingNetlist,
247 Phase_Finalization
248 )
251@export
252class PowerOptPatchEnablesTask(SubTask):
253 _START: ClassVar[str] = "Starting PowerOpt Patch Enables Task"
254 _FINISH: ClassVar[str] = "Ending PowerOpt Patch Enables Task"
257@export
258class PowerOptimizationTask(TaskWithSubTasks):
259 _START: ClassVar[str] = "Starting Power Optimization Task"
260 _FINISH: ClassVar[str] = "Ending Power Optimization Task"
262 _PARSERS: ClassVar[Tuple[Type[SubTask], ...]] = (
263 PowerOptPatchEnablesTask,
264 )
267@export
268class FinalCleanupTask(TaskWithSubTasks):
269 _START: ClassVar[str] = "Starting Final Cleanup Task"
270 _FINISH: ClassVar[str] = "Ending Final Cleanup Task"
272 _PARSERS: ClassVar[Tuple[Type[SubTask], ...]] = (
273 LogicOptimizationTask,
274 )
277@export
278class NetlistObfuscationTask(Task):
279 _START: ClassVar[str] = "Starting Netlist Obfuscation Task"
280 _FINISH: ClassVar[str] = "Ending Netlist Obfuscation Task"