From e2ea20021f87abadbc158e79cec94ae6e3a8daa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Sun, 4 Oct 2026 15:51:52 +0200 Subject: [PATCH 1/2] mpl: each rtl_macro_placer call starts from a fresh hierarchy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A completed rtl_macro_placer run releases its PhysicalHierarchy in clear(). The tree is only created in the constructor, so a second call in the same session handed a null tree to the ClusteringEngine and crashed in setFloorplanShape() with signal 11. ORFS hits this when a MACRO_PLACEMENT_TCL script places some macros with rtl_macro_placer and the macro step then calls it again. A call that finds no unfixed macro sets skip_macro_placement_, and nothing reset it: every later call in the session skipped placement, printed "Skipping macro placement." and left its unfixed macros where they were. init() now creates the hierarchy and clears the flag for each call. Every setter that writes to the tree runs after init(). rerun1 calls rtl_macro_placer three times on fixed_macros1: with every macro fixed, with one macro to place, and with it to place again after that completed run. Before this change the last two calls skip the macro, which stays at ( 0 0 ); the crash is reached once the flag is reset. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Øyvind Harboe --- src/mpl/src/hier_rtlmp.cpp | 5 + src/mpl/test/BUILD | 5 + src/mpl/test/CMakeLists.txt | 1 + src/mpl/test/rerun1.defok | 347 ++++++++++++++++++++++++++++++++++++ src/mpl/test/rerun1.ok | 41 +++++ src/mpl/test/rerun1.tcl | 30 ++++ 6 files changed, 429 insertions(+) create mode 100644 src/mpl/test/rerun1.defok create mode 100644 src/mpl/test/rerun1.ok create mode 100644 src/mpl/test/rerun1.tcl diff --git a/src/mpl/src/hier_rtlmp.cpp b/src/mpl/src/hier_rtlmp.cpp index 1512bc545f0..8b4a6a1ff72 100644 --- a/src/mpl/src/hier_rtlmp.cpp +++ b/src/mpl/src/hier_rtlmp.cpp @@ -294,6 +294,11 @@ void HierRTLMP::blockMacroChannels() void HierRTLMP::init() { block_ = db_->getChip()->getBlock(); + // Each rtl_macro_placer call starts from a fresh hierarchy: a completed + // run releases the previous one in clear(), and a call that found no + // macro to place must not skip placement in the next one. + tree_ = std::make_unique(); + skip_macro_placement_ = false; clustering_engine_ = std::make_unique( block_, logger_, tritonpart_, graphics_.get()); diff --git a/src/mpl/test/BUILD b/src/mpl/test/BUILD index f9d21dce41a..7fa34973229 100644 --- a/src/mpl/test/BUILD +++ b/src/mpl/test/BUILD @@ -48,6 +48,7 @@ COMPULSORY_TESTS = [ "orientation_improve3", "place_macro_right_angle_rotation", "placement_blockages1", + "rerun1", "unfixed_cells_dont_fit_in_core", ] @@ -243,6 +244,10 @@ filegroup( "testcases/macro_only.lef", "testcases/placement_blockages1.def", ], + "rerun1": [ + "testcases/fixed_macros1.def", + "testcases/orientation_improve1.lef", + ], "unfixed_cells_dont_fit_in_core": [ "testcases/macro_only.lef", "testcases/unfixed_cells_dont_fit_in_core.def", diff --git a/src/mpl/test/CMakeLists.txt b/src/mpl/test/CMakeLists.txt index 27ab6943cd9..07d1fc76a8d 100644 --- a/src/mpl/test/CMakeLists.txt +++ b/src/mpl/test/CMakeLists.txt @@ -29,6 +29,7 @@ or_integration_tests( keep_clustering_data2 fixed_macros1 fixed_macros2 + rerun1 fixed_covers macros_without_pins1 unfixed_cells_dont_fit_in_core diff --git a/src/mpl/test/rerun1.defok b/src/mpl/test/rerun1.defok new file mode 100644 index 00000000000..76c5ae5068c --- /dev/null +++ b/src/mpl/test/rerun1.defok @@ -0,0 +1,347 @@ +VERSION 5.8 ; +DIVIDERCHAR "/" ; +BUSBITCHARS "[]" ; +DESIGN boundary_push1 ; +UNITS DISTANCE MICRONS 2000 ; +DIEAREA ( 0 0 ) ( 440040 442400 ) ; +ROW ROW_0 FreePDK45_38x28_10R_NP_162NW_34O 0 0 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_1 FreePDK45_38x28_10R_NP_162NW_34O 0 2800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_2 FreePDK45_38x28_10R_NP_162NW_34O 0 5600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_3 FreePDK45_38x28_10R_NP_162NW_34O 0 8400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_4 FreePDK45_38x28_10R_NP_162NW_34O 0 11200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_5 FreePDK45_38x28_10R_NP_162NW_34O 0 14000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_6 FreePDK45_38x28_10R_NP_162NW_34O 0 16800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_7 FreePDK45_38x28_10R_NP_162NW_34O 0 19600 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_8 FreePDK45_38x28_10R_NP_162NW_34O 0 22400 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_9 FreePDK45_38x28_10R_NP_162NW_34O 0 25200 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_10 FreePDK45_38x28_10R_NP_162NW_34O 0 28000 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_11 FreePDK45_38x28_10R_NP_162NW_34O 0 30800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_12 FreePDK45_38x28_10R_NP_162NW_34O 0 33600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_13 FreePDK45_38x28_10R_NP_162NW_34O 0 36400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_14 FreePDK45_38x28_10R_NP_162NW_34O 0 39200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_15 FreePDK45_38x28_10R_NP_162NW_34O 0 42000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_16 FreePDK45_38x28_10R_NP_162NW_34O 0 44800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_17 FreePDK45_38x28_10R_NP_162NW_34O 0 47600 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_18 FreePDK45_38x28_10R_NP_162NW_34O 0 50400 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_19 FreePDK45_38x28_10R_NP_162NW_34O 0 53200 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_20 FreePDK45_38x28_10R_NP_162NW_34O 0 56000 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_21 FreePDK45_38x28_10R_NP_162NW_34O 0 58800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_22 FreePDK45_38x28_10R_NP_162NW_34O 0 61600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_23 FreePDK45_38x28_10R_NP_162NW_34O 0 64400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_24 FreePDK45_38x28_10R_NP_162NW_34O 0 67200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_25 FreePDK45_38x28_10R_NP_162NW_34O 0 70000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_26 FreePDK45_38x28_10R_NP_162NW_34O 0 72800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_27 FreePDK45_38x28_10R_NP_162NW_34O 0 75600 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_28 FreePDK45_38x28_10R_NP_162NW_34O 0 78400 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_29 FreePDK45_38x28_10R_NP_162NW_34O 0 81200 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_30 FreePDK45_38x28_10R_NP_162NW_34O 0 84000 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_31 FreePDK45_38x28_10R_NP_162NW_34O 0 86800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_32 FreePDK45_38x28_10R_NP_162NW_34O 0 89600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_33 FreePDK45_38x28_10R_NP_162NW_34O 0 92400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_34 FreePDK45_38x28_10R_NP_162NW_34O 0 95200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_35 FreePDK45_38x28_10R_NP_162NW_34O 0 98000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_36 FreePDK45_38x28_10R_NP_162NW_34O 0 100800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_37 FreePDK45_38x28_10R_NP_162NW_34O 0 103600 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_38 FreePDK45_38x28_10R_NP_162NW_34O 0 106400 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_39 FreePDK45_38x28_10R_NP_162NW_34O 0 109200 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_40 FreePDK45_38x28_10R_NP_162NW_34O 0 112000 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_41 FreePDK45_38x28_10R_NP_162NW_34O 0 114800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_42 FreePDK45_38x28_10R_NP_162NW_34O 0 117600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_43 FreePDK45_38x28_10R_NP_162NW_34O 0 120400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_44 FreePDK45_38x28_10R_NP_162NW_34O 0 123200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_45 FreePDK45_38x28_10R_NP_162NW_34O 0 126000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_46 FreePDK45_38x28_10R_NP_162NW_34O 0 128800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_47 FreePDK45_38x28_10R_NP_162NW_34O 0 131600 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_48 FreePDK45_38x28_10R_NP_162NW_34O 0 134400 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_49 FreePDK45_38x28_10R_NP_162NW_34O 0 137200 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_50 FreePDK45_38x28_10R_NP_162NW_34O 0 140000 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_51 FreePDK45_38x28_10R_NP_162NW_34O 0 142800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_52 FreePDK45_38x28_10R_NP_162NW_34O 0 145600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_53 FreePDK45_38x28_10R_NP_162NW_34O 0 148400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_54 FreePDK45_38x28_10R_NP_162NW_34O 0 151200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_55 FreePDK45_38x28_10R_NP_162NW_34O 0 154000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_56 FreePDK45_38x28_10R_NP_162NW_34O 0 156800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_57 FreePDK45_38x28_10R_NP_162NW_34O 0 159600 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_58 FreePDK45_38x28_10R_NP_162NW_34O 0 162400 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_59 FreePDK45_38x28_10R_NP_162NW_34O 0 165200 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_60 FreePDK45_38x28_10R_NP_162NW_34O 0 168000 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_61 FreePDK45_38x28_10R_NP_162NW_34O 0 170800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_62 FreePDK45_38x28_10R_NP_162NW_34O 0 173600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_63 FreePDK45_38x28_10R_NP_162NW_34O 0 176400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_64 FreePDK45_38x28_10R_NP_162NW_34O 0 179200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_65 FreePDK45_38x28_10R_NP_162NW_34O 0 182000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_66 FreePDK45_38x28_10R_NP_162NW_34O 0 184800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_67 FreePDK45_38x28_10R_NP_162NW_34O 0 187600 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_68 FreePDK45_38x28_10R_NP_162NW_34O 0 190400 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_69 FreePDK45_38x28_10R_NP_162NW_34O 0 193200 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_70 FreePDK45_38x28_10R_NP_162NW_34O 0 196000 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_71 FreePDK45_38x28_10R_NP_162NW_34O 0 198800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_72 FreePDK45_38x28_10R_NP_162NW_34O 0 201600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_73 FreePDK45_38x28_10R_NP_162NW_34O 0 204400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_74 FreePDK45_38x28_10R_NP_162NW_34O 0 207200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_75 FreePDK45_38x28_10R_NP_162NW_34O 0 210000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_76 FreePDK45_38x28_10R_NP_162NW_34O 0 212800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_77 FreePDK45_38x28_10R_NP_162NW_34O 0 215600 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_78 FreePDK45_38x28_10R_NP_162NW_34O 0 218400 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_79 FreePDK45_38x28_10R_NP_162NW_34O 0 221200 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_80 FreePDK45_38x28_10R_NP_162NW_34O 0 224000 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_81 FreePDK45_38x28_10R_NP_162NW_34O 0 226800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_82 FreePDK45_38x28_10R_NP_162NW_34O 0 229600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_83 FreePDK45_38x28_10R_NP_162NW_34O 0 232400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_84 FreePDK45_38x28_10R_NP_162NW_34O 0 235200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_85 FreePDK45_38x28_10R_NP_162NW_34O 0 238000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_86 FreePDK45_38x28_10R_NP_162NW_34O 0 240800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_87 FreePDK45_38x28_10R_NP_162NW_34O 0 243600 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_88 FreePDK45_38x28_10R_NP_162NW_34O 0 246400 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_89 FreePDK45_38x28_10R_NP_162NW_34O 0 249200 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_90 FreePDK45_38x28_10R_NP_162NW_34O 0 252000 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_91 FreePDK45_38x28_10R_NP_162NW_34O 0 254800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_92 FreePDK45_38x28_10R_NP_162NW_34O 0 257600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_93 FreePDK45_38x28_10R_NP_162NW_34O 0 260400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_94 FreePDK45_38x28_10R_NP_162NW_34O 0 263200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_95 FreePDK45_38x28_10R_NP_162NW_34O 0 266000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_96 FreePDK45_38x28_10R_NP_162NW_34O 0 268800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_97 FreePDK45_38x28_10R_NP_162NW_34O 0 271600 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_98 FreePDK45_38x28_10R_NP_162NW_34O 0 274400 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_99 FreePDK45_38x28_10R_NP_162NW_34O 0 277200 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_100 FreePDK45_38x28_10R_NP_162NW_34O 0 280000 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_101 FreePDK45_38x28_10R_NP_162NW_34O 0 282800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_102 FreePDK45_38x28_10R_NP_162NW_34O 0 285600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_103 FreePDK45_38x28_10R_NP_162NW_34O 0 288400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_104 FreePDK45_38x28_10R_NP_162NW_34O 0 291200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_105 FreePDK45_38x28_10R_NP_162NW_34O 0 294000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_106 FreePDK45_38x28_10R_NP_162NW_34O 0 296800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_107 FreePDK45_38x28_10R_NP_162NW_34O 0 299600 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_108 FreePDK45_38x28_10R_NP_162NW_34O 0 302400 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_109 FreePDK45_38x28_10R_NP_162NW_34O 0 305200 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_110 FreePDK45_38x28_10R_NP_162NW_34O 0 308000 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_111 FreePDK45_38x28_10R_NP_162NW_34O 0 310800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_112 FreePDK45_38x28_10R_NP_162NW_34O 0 313600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_113 FreePDK45_38x28_10R_NP_162NW_34O 0 316400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_114 FreePDK45_38x28_10R_NP_162NW_34O 0 319200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_115 FreePDK45_38x28_10R_NP_162NW_34O 0 322000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_116 FreePDK45_38x28_10R_NP_162NW_34O 0 324800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_117 FreePDK45_38x28_10R_NP_162NW_34O 0 327600 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_118 FreePDK45_38x28_10R_NP_162NW_34O 0 330400 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_119 FreePDK45_38x28_10R_NP_162NW_34O 0 333200 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_120 FreePDK45_38x28_10R_NP_162NW_34O 0 336000 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_121 FreePDK45_38x28_10R_NP_162NW_34O 0 338800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_122 FreePDK45_38x28_10R_NP_162NW_34O 0 341600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_123 FreePDK45_38x28_10R_NP_162NW_34O 0 344400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_124 FreePDK45_38x28_10R_NP_162NW_34O 0 347200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_125 FreePDK45_38x28_10R_NP_162NW_34O 0 350000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_126 FreePDK45_38x28_10R_NP_162NW_34O 0 352800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_127 FreePDK45_38x28_10R_NP_162NW_34O 0 355600 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_128 FreePDK45_38x28_10R_NP_162NW_34O 0 358400 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_129 FreePDK45_38x28_10R_NP_162NW_34O 0 361200 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_130 FreePDK45_38x28_10R_NP_162NW_34O 0 364000 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_131 FreePDK45_38x28_10R_NP_162NW_34O 0 366800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_132 FreePDK45_38x28_10R_NP_162NW_34O 0 369600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_133 FreePDK45_38x28_10R_NP_162NW_34O 0 372400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_134 FreePDK45_38x28_10R_NP_162NW_34O 0 375200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_135 FreePDK45_38x28_10R_NP_162NW_34O 0 378000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_136 FreePDK45_38x28_10R_NP_162NW_34O 0 380800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_137 FreePDK45_38x28_10R_NP_162NW_34O 0 383600 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_138 FreePDK45_38x28_10R_NP_162NW_34O 0 386400 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_139 FreePDK45_38x28_10R_NP_162NW_34O 0 389200 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_140 FreePDK45_38x28_10R_NP_162NW_34O 0 392000 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_141 FreePDK45_38x28_10R_NP_162NW_34O 0 394800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_142 FreePDK45_38x28_10R_NP_162NW_34O 0 397600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_143 FreePDK45_38x28_10R_NP_162NW_34O 0 400400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_144 FreePDK45_38x28_10R_NP_162NW_34O 0 403200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_145 FreePDK45_38x28_10R_NP_162NW_34O 0 406000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_146 FreePDK45_38x28_10R_NP_162NW_34O 0 408800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_147 FreePDK45_38x28_10R_NP_162NW_34O 0 411600 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_148 FreePDK45_38x28_10R_NP_162NW_34O 0 414400 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_149 FreePDK45_38x28_10R_NP_162NW_34O 0 417200 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_150 FreePDK45_38x28_10R_NP_162NW_34O 0 420000 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_151 FreePDK45_38x28_10R_NP_162NW_34O 0 422800 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_152 FreePDK45_38x28_10R_NP_162NW_34O 0 425600 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_153 FreePDK45_38x28_10R_NP_162NW_34O 0 428400 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_154 FreePDK45_38x28_10R_NP_162NW_34O 0 431200 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_155 FreePDK45_38x28_10R_NP_162NW_34O 0 434000 FS DO 1158 BY 1 STEP 380 0 ; +ROW ROW_156 FreePDK45_38x28_10R_NP_162NW_34O 0 436800 N DO 1158 BY 1 STEP 380 0 ; +ROW ROW_157 FreePDK45_38x28_10R_NP_162NW_34O 0 439600 FS DO 1158 BY 1 STEP 380 0 ; +TRACKS X 190 DO 2368 STEP 380 LAYER metal1 ; +TRACKS Y 140 DO 3214 STEP 280 LAYER metal1 ; +TRACKS X 190 DO 2368 STEP 380 LAYER metal2 ; +TRACKS Y 140 DO 3214 STEP 280 LAYER metal2 ; +TRACKS X 190 DO 2368 STEP 380 LAYER metal3 ; +TRACKS Y 140 DO 3214 STEP 280 LAYER metal3 ; +TRACKS X 190 DO 1607 STEP 560 LAYER metal4 ; +TRACKS Y 140 DO 1607 STEP 560 LAYER metal4 ; +TRACKS X 190 DO 1607 STEP 560 LAYER metal5 ; +TRACKS Y 140 DO 1607 STEP 560 LAYER metal5 ; +TRACKS X 190 DO 1607 STEP 560 LAYER metal6 ; +TRACKS Y 140 DO 1607 STEP 560 LAYER metal6 ; +TRACKS X 190 DO 563 STEP 1600 LAYER metal7 ; +TRACKS Y 140 DO 563 STEP 1600 LAYER metal7 ; +TRACKS X 190 DO 563 STEP 1600 LAYER metal8 ; +TRACKS Y 140 DO 563 STEP 1600 LAYER metal8 ; +TRACKS X 190 DO 282 STEP 3200 LAYER metal9 ; +TRACKS Y 140 DO 282 STEP 3200 LAYER metal9 ; +TRACKS X 190 DO 282 STEP 3200 LAYER metal10 ; +TRACKS Y 140 DO 282 STEP 3200 LAYER metal10 ; +COMPONENTS 152 ; + - MACRO_1 HM_100x100_1x1 + FIXED ( 160000 220000 ) N ; + - MACRO_2 HM_100x100_1x1 + FIXED ( 239900 330 ) S ; + - _001_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _002_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _003_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _004_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _005_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _006_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _007_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _008_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _009_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _010_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _011_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _012_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _013_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _014_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _015_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _016_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _017_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _018_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _019_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _020_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _021_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _022_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _023_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _024_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _025_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _026_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _027_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _028_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _029_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _030_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _031_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _032_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _033_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _034_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _035_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _036_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _037_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _038_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _039_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _040_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _041_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _042_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _043_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _044_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _045_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _046_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _047_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _048_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _049_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _050_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _051_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _052_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _053_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _054_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _055_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _056_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _057_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _058_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _059_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _060_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _061_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _062_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _063_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _064_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _065_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _066_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _067_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _068_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _069_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _070_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _071_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _072_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _073_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _074_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _075_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _076_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _077_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _078_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _079_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _080_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _081_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _082_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _083_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _084_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _085_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _086_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _087_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _088_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _089_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _090_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _091_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _092_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _093_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _094_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _095_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _096_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _097_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _098_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _099_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _100_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _101_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _102_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _103_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _104_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _105_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _106_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _107_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _108_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _109_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _110_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _111_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _112_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _113_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _114_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _115_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _116_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _117_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _118_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _119_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _120_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _121_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _122_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _123_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _124_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _125_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _126_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _127_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _128_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _129_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _130_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _131_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _132_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _133_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _134_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _135_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _136_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _137_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _138_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _139_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _140_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _141_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _142_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _143_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _144_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _145_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _146_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _147_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _148_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _149_ DFF_X1 + PLACED ( 396860 325505 ) N ; + - _150_ DFF_X1 + PLACED ( 396860 325505 ) N ; +END COMPONENTS +BLOCKAGES 4 ; + - PLACEMENT + SOFT + COMPONENT MACRO_2 RECT ( 0 190 ) ( 200280 200470 ) ; + - PLACEMENT + SOFT + COMPONENT MACRO_1 RECT ( 159860 219860 ) ( 360140 420140 ) ; + - PLACEMENT + SOFT + COMPONENT MACRO_1 RECT ( 159860 219860 ) ( 360140 420140 ) ; + - PLACEMENT + SOFT + COMPONENT MACRO_2 RECT ( 239760 190 ) ( 440040 200470 ) ; +END BLOCKAGES +NETS 0 ; +END NETS +END DESIGN diff --git a/src/mpl/test/rerun1.ok b/src/mpl/test/rerun1.ok new file mode 100644 index 00000000000..5c0953832a2 --- /dev/null +++ b/src/mpl/test/rerun1.ok @@ -0,0 +1,41 @@ +[INFO ODB-0227] LEF file: ./Nangate45/Nangate45.lef, created 22 layers, 27 vias, 135 library cells +[INFO ODB-0227] LEF file: ./testcases/orientation_improve1.lef, created 10 library cells +[INFO ODB-0128] Design: boundary_push1 +[INFO ODB-0131] Created 152 components and 904 component-terminals. +[INFO MPL-0062] Found fixed macro MACRO_1. +[INFO MPL-0062] Found fixed macro MACRO_2. +[INFO MPL-0017] No unfixed macros. +[INFO MPL-0013] Skipping macro placement. +[INFO MPL-0062] Found fixed macro MACRO_1. +Die Area: (0.00, 0.00) (220.02, 221.20), Floorplan Area: (0.00, 0.00) (220.02, 221.20) + Number of std cell instances: 150 + Area of std cell instances: 678.30 + Number of macros: 2 + Macros to be placed: 1 + Area of macros: 20000.00 + Minimum channel (Width, Height): (0.00, 0.00) + Area of macros with halos: 10028.02 + Area of std cell instances + Area of macros: 20678.30 + Floorplan area: 48668.42 + Design Utilization: 0.42 + Floorplan Utilization: 0.02 + Manufacturing Grid: 10 + +[WARNING MPL-0026] Design has no IO pins! +[INFO MPL-0062] Found fixed macro MACRO_1. +Die Area: (0.00, 0.00) (220.02, 221.20), Floorplan Area: (0.00, 0.00) (220.02, 221.20) + Number of std cell instances: 150 + Area of std cell instances: 678.30 + Number of macros: 2 + Macros to be placed: 1 + Area of macros: 20000.00 + Minimum channel (Width, Height): (0.00, 0.00) + Area of macros with halos: 10028.02 + Area of std cell instances + Area of macros: 20678.30 + Floorplan area: 48668.42 + Design Utilization: 0.42 + Floorplan Utilization: 0.02 + Manufacturing Grid: 10 + +[WARNING MPL-0026] Design has no IO pins! +No differences found. diff --git a/src/mpl/test/rerun1.tcl b/src/mpl/test/rerun1.tcl new file mode 100644 index 00000000000..9b3f2c14b2b --- /dev/null +++ b/src/mpl/test/rerun1.tcl @@ -0,0 +1,30 @@ +# rtl_macro_placer called more than once in one session. A call that finds +# every macro fixed must not make the next call skip placement, and a call +# after a completed run must start from a fresh hierarchy. +source "helpers.tcl" + +read_lef "./Nangate45/Nangate45.lef" +read_lef "./testcases/orientation_improve1.lef" + +read_def "./testcases/fixed_macros1.def" + +set_thread_count 0 +set block [ord::get_db_block] +set macro [$block findInst MACRO_2] + +# Nothing to place. +$macro setPlacementStatus FIRM +rtl_macro_placer -report_directory [make_result_dir] + +# One macro to place. +$macro setPlacementStatus PLACED +rtl_macro_placer -report_directory [make_result_dir] + +# The same again, after a completed run. +$macro setPlacementStatus PLACED +rtl_macro_placer -report_directory [make_result_dir] + +set def_file [make_result_file rerun1.def] +write_def $def_file + +diff_files rerun1.defok $def_file From 62d42adf05f3f30e891e9111c102f31edcc3619d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Sun, 4 Oct 2026 15:57:42 +0200 Subject: [PATCH 2/2] mpl: rerun1 checks that the macro is placed, not a golden log MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The test asserts what the fix is for: after a call that found every macro fixed, and again after a completed run, the unfixed macro is placed (LOCKED). Golden .ok/.defok files would have pinned the rest of the output as well, including the soft blockages that accumulate over reruns. rerun1 is a PASSFAIL test in Bazel and CMake. On master the first check fails ("Expected LOCKED, got PLACED"); with the first call left out, the second call crashes with signal 11. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Øyvind Harboe --- src/mpl/test/BUILD | 7 + src/mpl/test/CMakeLists.txt | 3 +- src/mpl/test/rerun1.defok | 347 ------------------------------------ src/mpl/test/rerun1.ok | 41 ----- src/mpl/test/rerun1.tcl | 20 +-- 5 files changed, 17 insertions(+), 401 deletions(-) delete mode 100644 src/mpl/test/rerun1.defok delete mode 100644 src/mpl/test/rerun1.ok diff --git a/src/mpl/test/BUILD b/src/mpl/test/BUILD index 7fa34973229..a10b27a0131 100644 --- a/src/mpl/test/BUILD +++ b/src/mpl/test/BUILD @@ -54,6 +54,11 @@ COMPULSORY_TESTS = [ ALL_TESTS = COMPULSORY_TESTS +# Self-checking: the script reports pass/fail, no golden log. +PASSFAIL_TESTS = [ + "rerun1", +] + filegroup( name = "regression_resources", # Dependencies could be specified more narrowly per test case, @@ -261,6 +266,8 @@ filegroup( [ regression_test( name = test_name, + check_log = test_name not in PASSFAIL_TESTS, + check_passfail = test_name in PASSFAIL_TESTS, data = [":" + test_name + "_resources"], tags = [] if test_name in COMPULSORY_TESTS else ["manual"], visibility = ["//visibility:public"], diff --git a/src/mpl/test/CMakeLists.txt b/src/mpl/test/CMakeLists.txt index 07d1fc76a8d..c8f9650244d 100644 --- a/src/mpl/test/CMakeLists.txt +++ b/src/mpl/test/CMakeLists.txt @@ -29,7 +29,6 @@ or_integration_tests( keep_clustering_data2 fixed_macros1 fixed_macros2 - rerun1 fixed_covers macros_without_pins1 unfixed_cells_dont_fit_in_core @@ -39,6 +38,8 @@ or_integration_tests( halos2 halos3 halos4 + PASSFAIL_TESTS + rerun1 ) diff --git a/src/mpl/test/rerun1.defok b/src/mpl/test/rerun1.defok deleted file mode 100644 index 76c5ae5068c..00000000000 --- a/src/mpl/test/rerun1.defok +++ /dev/null @@ -1,347 +0,0 @@ -VERSION 5.8 ; -DIVIDERCHAR "/" ; -BUSBITCHARS "[]" ; -DESIGN boundary_push1 ; -UNITS DISTANCE MICRONS 2000 ; -DIEAREA ( 0 0 ) ( 440040 442400 ) ; -ROW ROW_0 FreePDK45_38x28_10R_NP_162NW_34O 0 0 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_1 FreePDK45_38x28_10R_NP_162NW_34O 0 2800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_2 FreePDK45_38x28_10R_NP_162NW_34O 0 5600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_3 FreePDK45_38x28_10R_NP_162NW_34O 0 8400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_4 FreePDK45_38x28_10R_NP_162NW_34O 0 11200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_5 FreePDK45_38x28_10R_NP_162NW_34O 0 14000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_6 FreePDK45_38x28_10R_NP_162NW_34O 0 16800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_7 FreePDK45_38x28_10R_NP_162NW_34O 0 19600 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_8 FreePDK45_38x28_10R_NP_162NW_34O 0 22400 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_9 FreePDK45_38x28_10R_NP_162NW_34O 0 25200 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_10 FreePDK45_38x28_10R_NP_162NW_34O 0 28000 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_11 FreePDK45_38x28_10R_NP_162NW_34O 0 30800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_12 FreePDK45_38x28_10R_NP_162NW_34O 0 33600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_13 FreePDK45_38x28_10R_NP_162NW_34O 0 36400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_14 FreePDK45_38x28_10R_NP_162NW_34O 0 39200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_15 FreePDK45_38x28_10R_NP_162NW_34O 0 42000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_16 FreePDK45_38x28_10R_NP_162NW_34O 0 44800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_17 FreePDK45_38x28_10R_NP_162NW_34O 0 47600 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_18 FreePDK45_38x28_10R_NP_162NW_34O 0 50400 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_19 FreePDK45_38x28_10R_NP_162NW_34O 0 53200 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_20 FreePDK45_38x28_10R_NP_162NW_34O 0 56000 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_21 FreePDK45_38x28_10R_NP_162NW_34O 0 58800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_22 FreePDK45_38x28_10R_NP_162NW_34O 0 61600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_23 FreePDK45_38x28_10R_NP_162NW_34O 0 64400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_24 FreePDK45_38x28_10R_NP_162NW_34O 0 67200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_25 FreePDK45_38x28_10R_NP_162NW_34O 0 70000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_26 FreePDK45_38x28_10R_NP_162NW_34O 0 72800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_27 FreePDK45_38x28_10R_NP_162NW_34O 0 75600 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_28 FreePDK45_38x28_10R_NP_162NW_34O 0 78400 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_29 FreePDK45_38x28_10R_NP_162NW_34O 0 81200 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_30 FreePDK45_38x28_10R_NP_162NW_34O 0 84000 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_31 FreePDK45_38x28_10R_NP_162NW_34O 0 86800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_32 FreePDK45_38x28_10R_NP_162NW_34O 0 89600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_33 FreePDK45_38x28_10R_NP_162NW_34O 0 92400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_34 FreePDK45_38x28_10R_NP_162NW_34O 0 95200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_35 FreePDK45_38x28_10R_NP_162NW_34O 0 98000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_36 FreePDK45_38x28_10R_NP_162NW_34O 0 100800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_37 FreePDK45_38x28_10R_NP_162NW_34O 0 103600 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_38 FreePDK45_38x28_10R_NP_162NW_34O 0 106400 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_39 FreePDK45_38x28_10R_NP_162NW_34O 0 109200 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_40 FreePDK45_38x28_10R_NP_162NW_34O 0 112000 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_41 FreePDK45_38x28_10R_NP_162NW_34O 0 114800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_42 FreePDK45_38x28_10R_NP_162NW_34O 0 117600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_43 FreePDK45_38x28_10R_NP_162NW_34O 0 120400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_44 FreePDK45_38x28_10R_NP_162NW_34O 0 123200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_45 FreePDK45_38x28_10R_NP_162NW_34O 0 126000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_46 FreePDK45_38x28_10R_NP_162NW_34O 0 128800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_47 FreePDK45_38x28_10R_NP_162NW_34O 0 131600 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_48 FreePDK45_38x28_10R_NP_162NW_34O 0 134400 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_49 FreePDK45_38x28_10R_NP_162NW_34O 0 137200 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_50 FreePDK45_38x28_10R_NP_162NW_34O 0 140000 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_51 FreePDK45_38x28_10R_NP_162NW_34O 0 142800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_52 FreePDK45_38x28_10R_NP_162NW_34O 0 145600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_53 FreePDK45_38x28_10R_NP_162NW_34O 0 148400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_54 FreePDK45_38x28_10R_NP_162NW_34O 0 151200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_55 FreePDK45_38x28_10R_NP_162NW_34O 0 154000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_56 FreePDK45_38x28_10R_NP_162NW_34O 0 156800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_57 FreePDK45_38x28_10R_NP_162NW_34O 0 159600 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_58 FreePDK45_38x28_10R_NP_162NW_34O 0 162400 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_59 FreePDK45_38x28_10R_NP_162NW_34O 0 165200 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_60 FreePDK45_38x28_10R_NP_162NW_34O 0 168000 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_61 FreePDK45_38x28_10R_NP_162NW_34O 0 170800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_62 FreePDK45_38x28_10R_NP_162NW_34O 0 173600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_63 FreePDK45_38x28_10R_NP_162NW_34O 0 176400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_64 FreePDK45_38x28_10R_NP_162NW_34O 0 179200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_65 FreePDK45_38x28_10R_NP_162NW_34O 0 182000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_66 FreePDK45_38x28_10R_NP_162NW_34O 0 184800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_67 FreePDK45_38x28_10R_NP_162NW_34O 0 187600 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_68 FreePDK45_38x28_10R_NP_162NW_34O 0 190400 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_69 FreePDK45_38x28_10R_NP_162NW_34O 0 193200 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_70 FreePDK45_38x28_10R_NP_162NW_34O 0 196000 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_71 FreePDK45_38x28_10R_NP_162NW_34O 0 198800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_72 FreePDK45_38x28_10R_NP_162NW_34O 0 201600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_73 FreePDK45_38x28_10R_NP_162NW_34O 0 204400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_74 FreePDK45_38x28_10R_NP_162NW_34O 0 207200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_75 FreePDK45_38x28_10R_NP_162NW_34O 0 210000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_76 FreePDK45_38x28_10R_NP_162NW_34O 0 212800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_77 FreePDK45_38x28_10R_NP_162NW_34O 0 215600 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_78 FreePDK45_38x28_10R_NP_162NW_34O 0 218400 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_79 FreePDK45_38x28_10R_NP_162NW_34O 0 221200 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_80 FreePDK45_38x28_10R_NP_162NW_34O 0 224000 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_81 FreePDK45_38x28_10R_NP_162NW_34O 0 226800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_82 FreePDK45_38x28_10R_NP_162NW_34O 0 229600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_83 FreePDK45_38x28_10R_NP_162NW_34O 0 232400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_84 FreePDK45_38x28_10R_NP_162NW_34O 0 235200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_85 FreePDK45_38x28_10R_NP_162NW_34O 0 238000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_86 FreePDK45_38x28_10R_NP_162NW_34O 0 240800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_87 FreePDK45_38x28_10R_NP_162NW_34O 0 243600 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_88 FreePDK45_38x28_10R_NP_162NW_34O 0 246400 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_89 FreePDK45_38x28_10R_NP_162NW_34O 0 249200 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_90 FreePDK45_38x28_10R_NP_162NW_34O 0 252000 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_91 FreePDK45_38x28_10R_NP_162NW_34O 0 254800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_92 FreePDK45_38x28_10R_NP_162NW_34O 0 257600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_93 FreePDK45_38x28_10R_NP_162NW_34O 0 260400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_94 FreePDK45_38x28_10R_NP_162NW_34O 0 263200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_95 FreePDK45_38x28_10R_NP_162NW_34O 0 266000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_96 FreePDK45_38x28_10R_NP_162NW_34O 0 268800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_97 FreePDK45_38x28_10R_NP_162NW_34O 0 271600 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_98 FreePDK45_38x28_10R_NP_162NW_34O 0 274400 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_99 FreePDK45_38x28_10R_NP_162NW_34O 0 277200 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_100 FreePDK45_38x28_10R_NP_162NW_34O 0 280000 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_101 FreePDK45_38x28_10R_NP_162NW_34O 0 282800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_102 FreePDK45_38x28_10R_NP_162NW_34O 0 285600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_103 FreePDK45_38x28_10R_NP_162NW_34O 0 288400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_104 FreePDK45_38x28_10R_NP_162NW_34O 0 291200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_105 FreePDK45_38x28_10R_NP_162NW_34O 0 294000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_106 FreePDK45_38x28_10R_NP_162NW_34O 0 296800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_107 FreePDK45_38x28_10R_NP_162NW_34O 0 299600 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_108 FreePDK45_38x28_10R_NP_162NW_34O 0 302400 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_109 FreePDK45_38x28_10R_NP_162NW_34O 0 305200 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_110 FreePDK45_38x28_10R_NP_162NW_34O 0 308000 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_111 FreePDK45_38x28_10R_NP_162NW_34O 0 310800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_112 FreePDK45_38x28_10R_NP_162NW_34O 0 313600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_113 FreePDK45_38x28_10R_NP_162NW_34O 0 316400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_114 FreePDK45_38x28_10R_NP_162NW_34O 0 319200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_115 FreePDK45_38x28_10R_NP_162NW_34O 0 322000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_116 FreePDK45_38x28_10R_NP_162NW_34O 0 324800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_117 FreePDK45_38x28_10R_NP_162NW_34O 0 327600 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_118 FreePDK45_38x28_10R_NP_162NW_34O 0 330400 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_119 FreePDK45_38x28_10R_NP_162NW_34O 0 333200 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_120 FreePDK45_38x28_10R_NP_162NW_34O 0 336000 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_121 FreePDK45_38x28_10R_NP_162NW_34O 0 338800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_122 FreePDK45_38x28_10R_NP_162NW_34O 0 341600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_123 FreePDK45_38x28_10R_NP_162NW_34O 0 344400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_124 FreePDK45_38x28_10R_NP_162NW_34O 0 347200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_125 FreePDK45_38x28_10R_NP_162NW_34O 0 350000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_126 FreePDK45_38x28_10R_NP_162NW_34O 0 352800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_127 FreePDK45_38x28_10R_NP_162NW_34O 0 355600 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_128 FreePDK45_38x28_10R_NP_162NW_34O 0 358400 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_129 FreePDK45_38x28_10R_NP_162NW_34O 0 361200 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_130 FreePDK45_38x28_10R_NP_162NW_34O 0 364000 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_131 FreePDK45_38x28_10R_NP_162NW_34O 0 366800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_132 FreePDK45_38x28_10R_NP_162NW_34O 0 369600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_133 FreePDK45_38x28_10R_NP_162NW_34O 0 372400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_134 FreePDK45_38x28_10R_NP_162NW_34O 0 375200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_135 FreePDK45_38x28_10R_NP_162NW_34O 0 378000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_136 FreePDK45_38x28_10R_NP_162NW_34O 0 380800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_137 FreePDK45_38x28_10R_NP_162NW_34O 0 383600 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_138 FreePDK45_38x28_10R_NP_162NW_34O 0 386400 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_139 FreePDK45_38x28_10R_NP_162NW_34O 0 389200 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_140 FreePDK45_38x28_10R_NP_162NW_34O 0 392000 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_141 FreePDK45_38x28_10R_NP_162NW_34O 0 394800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_142 FreePDK45_38x28_10R_NP_162NW_34O 0 397600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_143 FreePDK45_38x28_10R_NP_162NW_34O 0 400400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_144 FreePDK45_38x28_10R_NP_162NW_34O 0 403200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_145 FreePDK45_38x28_10R_NP_162NW_34O 0 406000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_146 FreePDK45_38x28_10R_NP_162NW_34O 0 408800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_147 FreePDK45_38x28_10R_NP_162NW_34O 0 411600 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_148 FreePDK45_38x28_10R_NP_162NW_34O 0 414400 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_149 FreePDK45_38x28_10R_NP_162NW_34O 0 417200 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_150 FreePDK45_38x28_10R_NP_162NW_34O 0 420000 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_151 FreePDK45_38x28_10R_NP_162NW_34O 0 422800 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_152 FreePDK45_38x28_10R_NP_162NW_34O 0 425600 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_153 FreePDK45_38x28_10R_NP_162NW_34O 0 428400 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_154 FreePDK45_38x28_10R_NP_162NW_34O 0 431200 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_155 FreePDK45_38x28_10R_NP_162NW_34O 0 434000 FS DO 1158 BY 1 STEP 380 0 ; -ROW ROW_156 FreePDK45_38x28_10R_NP_162NW_34O 0 436800 N DO 1158 BY 1 STEP 380 0 ; -ROW ROW_157 FreePDK45_38x28_10R_NP_162NW_34O 0 439600 FS DO 1158 BY 1 STEP 380 0 ; -TRACKS X 190 DO 2368 STEP 380 LAYER metal1 ; -TRACKS Y 140 DO 3214 STEP 280 LAYER metal1 ; -TRACKS X 190 DO 2368 STEP 380 LAYER metal2 ; -TRACKS Y 140 DO 3214 STEP 280 LAYER metal2 ; -TRACKS X 190 DO 2368 STEP 380 LAYER metal3 ; -TRACKS Y 140 DO 3214 STEP 280 LAYER metal3 ; -TRACKS X 190 DO 1607 STEP 560 LAYER metal4 ; -TRACKS Y 140 DO 1607 STEP 560 LAYER metal4 ; -TRACKS X 190 DO 1607 STEP 560 LAYER metal5 ; -TRACKS Y 140 DO 1607 STEP 560 LAYER metal5 ; -TRACKS X 190 DO 1607 STEP 560 LAYER metal6 ; -TRACKS Y 140 DO 1607 STEP 560 LAYER metal6 ; -TRACKS X 190 DO 563 STEP 1600 LAYER metal7 ; -TRACKS Y 140 DO 563 STEP 1600 LAYER metal7 ; -TRACKS X 190 DO 563 STEP 1600 LAYER metal8 ; -TRACKS Y 140 DO 563 STEP 1600 LAYER metal8 ; -TRACKS X 190 DO 282 STEP 3200 LAYER metal9 ; -TRACKS Y 140 DO 282 STEP 3200 LAYER metal9 ; -TRACKS X 190 DO 282 STEP 3200 LAYER metal10 ; -TRACKS Y 140 DO 282 STEP 3200 LAYER metal10 ; -COMPONENTS 152 ; - - MACRO_1 HM_100x100_1x1 + FIXED ( 160000 220000 ) N ; - - MACRO_2 HM_100x100_1x1 + FIXED ( 239900 330 ) S ; - - _001_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _002_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _003_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _004_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _005_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _006_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _007_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _008_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _009_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _010_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _011_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _012_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _013_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _014_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _015_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _016_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _017_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _018_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _019_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _020_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _021_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _022_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _023_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _024_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _025_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _026_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _027_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _028_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _029_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _030_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _031_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _032_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _033_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _034_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _035_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _036_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _037_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _038_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _039_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _040_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _041_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _042_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _043_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _044_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _045_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _046_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _047_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _048_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _049_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _050_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _051_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _052_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _053_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _054_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _055_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _056_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _057_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _058_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _059_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _060_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _061_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _062_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _063_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _064_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _065_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _066_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _067_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _068_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _069_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _070_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _071_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _072_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _073_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _074_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _075_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _076_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _077_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _078_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _079_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _080_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _081_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _082_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _083_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _084_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _085_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _086_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _087_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _088_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _089_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _090_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _091_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _092_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _093_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _094_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _095_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _096_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _097_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _098_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _099_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _100_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _101_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _102_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _103_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _104_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _105_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _106_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _107_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _108_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _109_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _110_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _111_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _112_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _113_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _114_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _115_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _116_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _117_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _118_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _119_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _120_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _121_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _122_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _123_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _124_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _125_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _126_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _127_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _128_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _129_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _130_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _131_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _132_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _133_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _134_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _135_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _136_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _137_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _138_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _139_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _140_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _141_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _142_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _143_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _144_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _145_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _146_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _147_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _148_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _149_ DFF_X1 + PLACED ( 396860 325505 ) N ; - - _150_ DFF_X1 + PLACED ( 396860 325505 ) N ; -END COMPONENTS -BLOCKAGES 4 ; - - PLACEMENT + SOFT + COMPONENT MACRO_2 RECT ( 0 190 ) ( 200280 200470 ) ; - - PLACEMENT + SOFT + COMPONENT MACRO_1 RECT ( 159860 219860 ) ( 360140 420140 ) ; - - PLACEMENT + SOFT + COMPONENT MACRO_1 RECT ( 159860 219860 ) ( 360140 420140 ) ; - - PLACEMENT + SOFT + COMPONENT MACRO_2 RECT ( 239760 190 ) ( 440040 200470 ) ; -END BLOCKAGES -NETS 0 ; -END NETS -END DESIGN diff --git a/src/mpl/test/rerun1.ok b/src/mpl/test/rerun1.ok deleted file mode 100644 index 5c0953832a2..00000000000 --- a/src/mpl/test/rerun1.ok +++ /dev/null @@ -1,41 +0,0 @@ -[INFO ODB-0227] LEF file: ./Nangate45/Nangate45.lef, created 22 layers, 27 vias, 135 library cells -[INFO ODB-0227] LEF file: ./testcases/orientation_improve1.lef, created 10 library cells -[INFO ODB-0128] Design: boundary_push1 -[INFO ODB-0131] Created 152 components and 904 component-terminals. -[INFO MPL-0062] Found fixed macro MACRO_1. -[INFO MPL-0062] Found fixed macro MACRO_2. -[INFO MPL-0017] No unfixed macros. -[INFO MPL-0013] Skipping macro placement. -[INFO MPL-0062] Found fixed macro MACRO_1. -Die Area: (0.00, 0.00) (220.02, 221.20), Floorplan Area: (0.00, 0.00) (220.02, 221.20) - Number of std cell instances: 150 - Area of std cell instances: 678.30 - Number of macros: 2 - Macros to be placed: 1 - Area of macros: 20000.00 - Minimum channel (Width, Height): (0.00, 0.00) - Area of macros with halos: 10028.02 - Area of std cell instances + Area of macros: 20678.30 - Floorplan area: 48668.42 - Design Utilization: 0.42 - Floorplan Utilization: 0.02 - Manufacturing Grid: 10 - -[WARNING MPL-0026] Design has no IO pins! -[INFO MPL-0062] Found fixed macro MACRO_1. -Die Area: (0.00, 0.00) (220.02, 221.20), Floorplan Area: (0.00, 0.00) (220.02, 221.20) - Number of std cell instances: 150 - Area of std cell instances: 678.30 - Number of macros: 2 - Macros to be placed: 1 - Area of macros: 20000.00 - Minimum channel (Width, Height): (0.00, 0.00) - Area of macros with halos: 10028.02 - Area of std cell instances + Area of macros: 20678.30 - Floorplan area: 48668.42 - Design Utilization: 0.42 - Floorplan Utilization: 0.02 - Manufacturing Grid: 10 - -[WARNING MPL-0026] Design has no IO pins! -No differences found. diff --git a/src/mpl/test/rerun1.tcl b/src/mpl/test/rerun1.tcl index 9b3f2c14b2b..e04c7e29200 100644 --- a/src/mpl/test/rerun1.tcl +++ b/src/mpl/test/rerun1.tcl @@ -1,6 +1,6 @@ -# rtl_macro_placer called more than once in one session. A call that finds -# every macro fixed must not make the next call skip placement, and a call -# after a completed run must start from a fresh hierarchy. +# rtl_macro_placer called more than once in one session places what is +# unfixed each time: after a call that found every macro fixed, and after +# a completed run. source "helpers.tcl" read_lef "./Nangate45/Nangate45.lef" @@ -9,22 +9,18 @@ read_lef "./testcases/orientation_improve1.lef" read_def "./testcases/fixed_macros1.def" set_thread_count 0 -set block [ord::get_db_block] -set macro [$block findInst MACRO_2] +set macro [[ord::get_db_block] findInst MACRO_2] -# Nothing to place. $macro setPlacementStatus FIRM rtl_macro_placer -report_directory [make_result_dir] -# One macro to place. $macro setPlacementStatus PLACED rtl_macro_placer -report_directory [make_result_dir] +check "placed after a call with nothing to place" \ + { $macro getPlacementStatus } LOCKED -# The same again, after a completed run. $macro setPlacementStatus PLACED rtl_macro_placer -report_directory [make_result_dir] +check "placed after a completed run" { $macro getPlacementStatus } LOCKED -set def_file [make_result_file rerun1.def] -write_def $def_file - -diff_files rerun1.defok $def_file +exit_summary