Coverage for pyEDAA/OutputFilter/Xilinx/PlaceDesign.py: 100%

224 statements  

« 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 

34 

35from pyTooling.Decorators import export 

36 

37from pyEDAA.OutputFilter.Xilinx.Common2 import TaskWithPhases, NestedPhase, NestedTaskWithPhases, SubSubSubPhaseWithTasks 

38from pyEDAA.OutputFilter.Xilinx.Common2 import Phase, SubPhase, SubSubPhase, SubSubSubPhase 

39from pyEDAA.OutputFilter.Xilinx.Common2 import PhaseWithChildren, SubPhaseWithChildren, SubSubPhaseWithChildren 

40from pyEDAA.OutputFilter.Xilinx.Common2 import MAJOR, MAJOR_MINOR, MAJOR_MINOR_MICRO, MAJOR_MINOR_MICRO_NANO 

41 

42 

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 

54 

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 

66 

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 

78 

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 

90 

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 

117 

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 

129 

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 

141 

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 

153 

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 

160 

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 

167 

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 

184 

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 

196 

197# @export 

198# class SubSubPhase_UpdateTimingBeforePhysicalSynthesis(SubSubPhase): 

199# _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} UpdateTiming Before Physical Synthesis") 

200# _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} UpdateTiming Before Physical Synthesis | Checksum:" 

201# _TIME: ClassVar[str] = "Time (s):" 

202 

203 

204# @export 

205# class SubSubPhase_PhysicalSynthesisInPlacer(SubSubPhase): 

206# _START: ClassVar[Pattern] = compile(f"^Phase {MAJOR_MINOR_MICRO} Physical Synthesis In Placer") 

207# _FINISH: ClassVar[str] = "Phase {phaseIndex}.{subPhaseIndex}.{subSubPhaseIndex} Physical Synthesis In Placer | Checksum:" 

208# _TIME: ClassVar[str] = "Time (s):" 

209 

210 

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 

227 

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 

258 

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 

270 

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 

282 

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 

289 

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 

296 

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 

307 

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 

324 

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 

336 

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 

348 

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 

360 

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 

372 

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 

384 

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 

396 

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 

408 

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 

447 

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 

454 

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 

465 

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 

476 

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 

483 

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 

495 

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 

511 

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 

523 

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 

530 

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 

546 

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 

558 

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 

585 

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 )