From ea3f676f00a2845e6d7ecfca950f15691b821df4 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 31 Mar 2026 19:13:49 +0000 Subject: [PATCH 1/2] rsz: set tie as unplaced if invalid location Signed-off-by: Augusto Berndt --- src/rsz/src/Resizer.cc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/rsz/src/Resizer.cc b/src/rsz/src/Resizer.cc index 4ce6396618..e9419f1d66 100644 --- a/src/rsz/src/Resizer.cc +++ b/src/rsz/src/Resizer.cc @@ -3359,6 +3359,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)) { From 1c8f65b188cec54420e870b8dfe9555c772e35b6 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Wed, 8 Apr 2026 09:45:48 +0000 Subject: [PATCH 2/2] rsz: update tests after fixing tie cells placement status Signed-off-by: Augusto Berndt --- src/rsz/test/repair_tie10_hier.ok | 4 ++-- src/rsz/test/repair_tie11_hier.ok | 4 +++- src/rsz/test/repair_tie12_hier.ok | 4 +++- src/rsz/test/repair_tie9.ok | 4 +++- 4 files changed, 11 insertions(+), 5 deletions(-) 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.ok b/src/rsz/test/repair_tie11_hier.ok index 6c4da77f3e..456da18bd5 100644 --- a/src/rsz/test/repair_tie11_hier.ok +++ b/src/rsz/test/repair_tie11_hier.ok @@ -41,4 +41,6 @@ Hierarchical pins 0.0 0.0 0.0 0.1 No differences found. -No differences found. +Differences found at line 9. + - alu0_1 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + PLACED ( 0 0 ) N ; + - alu0_1 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + UNPLACED ; diff --git a/src/rsz/test/repair_tie12_hier.ok b/src/rsz/test/repair_tie12_hier.ok index e2fbd5dc8c..c17f1088b6 100644 --- a/src/rsz/test/repair_tie12_hier.ok +++ b/src/rsz/test/repair_tie12_hier.ok @@ -42,4 +42,6 @@ Hierarchical pins 0.0 0.0 0.0 0.1 No differences found. -No differences found. +Differences found at line 9. + - alu0_1 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + PLACED ( 0 0 ) N ; + - alu0_1 TIEHIx1_ASAP7_75t_R + SOURCE TIMING + UNPLACED ; diff --git a/src/rsz/test/repair_tie9.ok b/src/rsz/test/repair_tie9.ok index 1d82f0722e..d93b9168ca 100644 --- a/src/rsz/test/repair_tie9.ok +++ b/src/rsz/test/repair_tie9.ok @@ -4,4 +4,6 @@ [INFO ODB-0131] Created 3 components and 12 component-terminals. [INFO ODB-0133] Created 1 nets and 3 connections. [INFO RSZ-0042] Inserted 1 tie sky130_fd_sc_hd__conb_1 instances. -No differences found. +Differences found at line 10. + - 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 ;