diff --git a/src/rsz/src/Resizer.cc b/src/rsz/src/Resizer.cc index f7009ba32d..ade1e8fda4 100644 --- a/src/rsz/src/Resizer.cc +++ b/src/rsz/src/Resizer.cc @@ -3331,6 +3331,22 @@ sta::Instance* Resizer::createNewTieCellForLoadPin(const sta::Pin* load_pin, new_tie_loc, odb::dbNameUniquifyType::IF_NEEDED_WITH_UNDERSCORE); + // If the load pin's instance is not placed, the computed location is + // meaningless; mark the new tie cell as unplaced + if (!db_network_->isPlaced(load_pin)) { + dbInst* new_tie_db_inst = db_network_->staToDb(new_tie_inst); + new_tie_db_inst->setPlacementStatus(odb::dbPlacementStatus::UNPLACED); + } + debugPrint(logger_, + RSZ, + "repair_tie_fanout", + 1, + "Created tie instance {} for load pin {} at location ({}, {})", + network_->name(new_tie_inst), + sdc_network_->pathName(load_pin), + dbuToMeters(new_tie_loc.getX()), + dbuToMeters(new_tie_loc.getY())); + // If the load pin is not in the top module, move the new tie instance sta::Instance* load_inst = network_->instance(load_pin); if (!network_->isTopInstance(load_inst)) { diff --git a/src/rsz/test/repair_tie10_hier.ok b/src/rsz/test/repair_tie10_hier.ok index 2c71afd1af..60840ab57c 100644 --- a/src/rsz/test/repair_tie10_hier.ok +++ b/src/rsz/test/repair_tie10_hier.ok @@ -60,7 +60,7 @@ Net gcd/ALU_16_0_16_0_16_unused_CO[14:0]_X_HAN_CARLSON/BI Number of pins: 2 Driver pins - _395__1/H output (TIEHIx1_ASAP7_75t_R) (0, 0) + _395__1/H output (TIEHIx1_ASAP7_75t_R) Load pins _395_/_087_/A input (BUFx2_ASAP7_75t_R) 0.44-0.58 @@ -77,7 +77,7 @@ Net gcd/ALU_16_0_16_0_16_unused_CO[14:0]_X_HAN_CARLSON/CI Number of pins: 2 Driver pins - _395__2/H output (TIEHIx1_ASAP7_75t_R) (0, 0) + _395__2/H output (TIEHIx1_ASAP7_75t_R) Load pins _395_/_153_/B input (FAx1_ASAP7_75t_R) 1.80-2.18 diff --git a/src/rsz/test/repair_tie11_hier.defok b/src/rsz/test/repair_tie11_hier.defok index 151d376f4e..6a48d94616 100644 --- a/src/rsz/test/repair_tie11_hier.defok +++ b/src/rsz/test/repair_tie11_hier.defok @@ -6,12 +6,12 @@ UNITS DISTANCE MICRONS 1000 ; COMPONENTS 8 ; - alu0/hier2/load1 BUFx2_ASAP7_75t_R ; - alu0/load2 BUFx2_ASAP7_75t_R ; - - alu0_1 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + PLACED ( 0 0 ) N ; + - alu0_1 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + UNPLACED ; - alu1/hier2/load1 BUFx2_ASAP7_75t_R ; - alu1/load2 BUFx2_ASAP7_75t_R ; - - alu1_2 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + PLACED ( 0 0 ) N ; + - alu1_2 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + UNPLACED ; - load0 BUFx2_ASAP7_75t_R ; - - load0_3 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + PLACED ( 36 135 ) N ; + - load0_3 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + UNPLACED ; END COMPONENTS PINS 1 ; - top_in + NET top_in + DIRECTION INPUT + USE SIGNAL ; diff --git a/src/rsz/test/repair_tie12_hier.defok b/src/rsz/test/repair_tie12_hier.defok index 2d59a131aa..8c058bfc01 100644 --- a/src/rsz/test/repair_tie12_hier.defok +++ b/src/rsz/test/repair_tie12_hier.defok @@ -6,12 +6,12 @@ UNITS DISTANCE MICRONS 1000 ; COMPONENTS 8 ; - alu0/hier2/load1 BUFx2_ASAP7_75t_R ; - alu0/load2 BUFx2_ASAP7_75t_R ; - - alu0_1 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + PLACED ( 0 0 ) N ; + - alu0_1 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + UNPLACED ; - hier3/alu1/hier2/load1 BUFx2_ASAP7_75t_R ; - hier3/alu1/load2 BUFx2_ASAP7_75t_R ; - - hier3/alu1_2 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + PLACED ( 0 0 ) N ; + - hier3/alu1_2 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + UNPLACED ; - load0 BUFx2_ASAP7_75t_R ; - - load0_3 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + PLACED ( 36 135 ) N ; + - load0_3 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + UNPLACED ; END COMPONENTS PINS 1 ; - top_in + NET top_in + DIRECTION INPUT + USE SIGNAL ; diff --git a/src/rsz/test/repair_tie9.defok b/src/rsz/test/repair_tie9.defok index 191f12d96e..705d721aaf 100644 --- a/src/rsz/test/repair_tie9.defok +++ b/src/rsz/test/repair_tie9.defok @@ -7,7 +7,7 @@ DIEAREA ( 0 0 ) ( 40000 40000 ) ; COMPONENTS 4 ; - t1 sky130_fd_sc_hd__conb_1 ; - u0 sky130_fd_sc_hd__buf_4 ; - - u0_1 sky130_fd_sc_hd__conb_1 + SOURCE TIMING + PLACED ( 280 1195 ) N ; + - u0_1 sky130_fd_sc_hd__conb_1 + SOURCE TIMING + UNPLACED ; - u1 sky130_fd_sc_hd__buf_4 ; END COMPONENTS NETS 2 ;