OptimizeDesign.py
Summary
- Lines:
129 of 129 covered (100.0%)
- Coverage:
100.0%
- Directory:
Source
pyEDAA/OutputFilter/Xilinx/OptimizeDesign.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 Task, TaskWithPhases, TaskWithSubTasks, SubTask
38from pyEDAA.OutputFilter.Xilinx import Phase, SubPhase, PhaseWithChildren
39from pyEDAA.OutputFilter.Xilinx import MAJOR, MAJOR_MINOR
40
41
42@export
43class Phase_Retarget(Phase):
44 """
45 *Retarget* phase.
46
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:"
53
54
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):"
60
61
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):"
67
68
69@export
70class Phase_Initialization(PhaseWithChildren):
71 """
72 *Initialization* phase.
73
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
80
81 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
82 SubPhase_CoreGenerationAndDesignSetup,
83 SubPhase_SetupConstraintsAndSortNetlist
84 )
85
86
87@export
88class Phase_ConstantPropagation(Phase):
89 """
90 *Constant propagation* phase.
91
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:"
98
99
100@export
101class SubPhase_DetectIfminReqCacheNeeded(SubPhase):
102 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Detect if minReqCache needed")
103 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Detect if minReqCache needed | Checksum:"
104 _TIME: ClassVar[str] = "Time (s):"
105
106
107@export
108class SubPhase_TimerUpdate(SubPhase):
109 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Timer Update")
110 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Timer Update | Checksum:"
111 _TIME: ClassVar[str] = "Time (s):"
112
113
114@export
115class SubPhase_TimingDataCollection(SubPhase):
116 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Timing Data Collection")
117 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Timing Data Collection | Checksum:"
118 _TIME: ClassVar[str] = "Time (s):"
119
120
121@export
122class Phase_TimerUpdateAndTimingDataCollection(PhaseWithChildren):
123 """
124 *Timer Update And Timing Data Collection* phase.
125
126 Used by task :class:`LogicOptimizationTask`.
127 """
128 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Timer Update And Timing Data Collection")
129 _FINISH: ClassVar[str] = "Phase {phaseIndex} Timer Update And Timing Data Collection | Checksum:"
130 _TIME: ClassVar[str] = "Time (s):"
131 _FINAL: ClassVar[str] = None
132
133 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
134 SubPhase_DetectIfminReqCacheNeeded,
135 SubPhase_TimerUpdate,
136 SubPhase_TimingDataCollection
137 )
138
139
140@export
141class Phase_Sweep(Phase):
142 """
143 *Sweep* phase.
144
145 Used by task :class:`LogicOptimizationTask`.
146 """
147 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Sweep")
148 _FINISH: ClassVar[str] = "Phase {phaseIndex} Sweep | Checksum:"
149 _TIME: ClassVar[str] = "Time (s):"
150 _FINAL: ClassVar[str] = "Sweep | Checksum:"
151
152
153@export
154class Phase_BUFGOptimization(Phase):
155 """
156 *BUFG optimization* phase.
157
158 Used by task :class:`LogicOptimizationTask`.
159 """
160 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} BUFG optimization")
161 _FINISH: ClassVar[str] = "Phase {phaseIndex} BUFG optimization | Checksum:"
162 _TIME: ClassVar[str] = "Time (s):"
163 _FINAL: ClassVar[str] = "BUFG optimization | Checksum:"
164
165
166@export
167class Phase_ShiftRegisterOptimization(Phase):
168 """
169 *Shift Register Optimization* phase.
170
171 Used by task :class:`LogicOptimizationTask`.
172 """
173 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Shift Register Optimization")
174 _FINISH: ClassVar[str] = "Phase {phaseIndex} Shift Register Optimization | Checksum:"
175 _TIME: ClassVar[str] = "Time (s):"
176 _FINAL: ClassVar[str] = "Shift Register Optimization | Checksum:"
177
178
179@export
180class Phase_PostProcessingNetlist(Phase):
181 """
182 *Post Processing Netlist* phase.
183
184 Used by task :class:`LogicOptimizationTask`.
185 """
186 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Post Processing Netlist")
187 _FINISH: ClassVar[str] = "Phase {phaseIndex} Post Processing Netlist | Checksum:"
188 _TIME: ClassVar[str] = "Time (s):"
189 _FINAL: ClassVar[str] = "Post Processing Netlist | Checksum:"
190
191
192@export
193class SubPhase_FinalizingDesignCoresAndUpdatingShapes(SubPhase):
194 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Finalizing Design Cores and Updating Shapes")
195 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Finalizing Design Cores and Updating Shapes | Checksum:"
196 _TIME: ClassVar[str] = "Time (s):"
197
198
199@export
200class SubPhase_VerifyingNetlistConnectivity(SubPhase):
201 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR} Verifying Netlist Connectivity")
202 _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex} Verifying Netlist Connectivity | Checksum:"
203 _TIME: ClassVar[str] = "Time (s):"
204
205
206@export
207class Phase_Finalization(PhaseWithChildren):
208 """
209 *Finalization* phase.
210
211 Used by task :class:`LogicOptimizationTask`.
212 """
213 _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR} Finalization")
214 _FINISH: ClassVar[str] = "Phase {phaseIndex} Finalization | Checksum:"
215 _TIME: ClassVar[str] = "Time (s):"
216 _FINAL: ClassVar[str] = None
217
218 _PARSERS: ClassVar[Tuple[Type[SubPhase], ...]] = (
219 SubPhase_FinalizingDesignCoresAndUpdatingShapes,
220 SubPhase_VerifyingNetlistConnectivity
221 )
222
223
224@export
225class DRCTask(Task):
226 _START: ClassVar[str] = "Starting DRC Task"
227 _FINISH: ClassVar[str] = "Time (s):"
228
229
230@export
231class CacheTimingInformationTask(Task):
232 _START: ClassVar[str] = "Starting Cache Timing Information Task"
233 _FINISH: ClassVar[str] = "Ending Cache Timing Information Task"
234
235
236@export
237class LogicOptimizationTask(TaskWithPhases):
238 """
239 *Logic Optimization* task.
240
241 Used by Vivado command :class:`~pyEDAA.OutputFilter.Xilinx.Commands.OptimizeDesign`.
242 """
243 _START: ClassVar[str] = "Starting Logic Optimization Task"
244 _FINISH: ClassVar[str] = "Ending Logic Optimization Task"
245
246 _PARSERS: ClassVar[Tuple[Type[Phase], ...]] = (
247 Phase_Initialization,
248 Phase_TimerUpdateAndTimingDataCollection,
249 Phase_Retarget,
250 Phase_ConstantPropagation,
251 Phase_Sweep,
252 Phase_BUFGOptimization,
253 Phase_ShiftRegisterOptimization,
254 Phase_PostProcessingNetlist,
255 Phase_Finalization
256 )
257
258
259@export
260class PowerOptPatchEnablesTask(SubTask):
261 _START: ClassVar[str] = "Starting PowerOpt Patch Enables Task"
262 _FINISH: ClassVar[str] = "Ending PowerOpt Patch Enables Task"
263
264
265@export
266class PowerOptimizationTask(TaskWithSubTasks):
267 _START: ClassVar[str] = "Starting Power Optimization Task"
268 _FINISH: ClassVar[str] = "Ending Power Optimization Task"
269
270 _PARSERS: ClassVar[Tuple[Type[SubTask], ...]] = (
271 PowerOptPatchEnablesTask,
272 )
273
274
275@export
276class FinalCleanupTask(TaskWithSubTasks):
277 _START: ClassVar[str] = "Starting Final Cleanup Task"
278 _FINISH: ClassVar[str] = "Ending Final Cleanup Task"
279
280 _PARSERS: ClassVar[Tuple[Type[SubTask], ...]] = (
281 LogicOptimizationTask,
282 )
283
284
285@export
286class NetlistObfuscationTask(Task):
287 _START: ClassVar[str] = "Starting Netlist Obfuscation Task"
288 _FINISH: ClassVar[str] = "Ending Netlist Obfuscation Task"