| diff --git a/src/sta/network/ConcreteNetwork.cc b/src/sta/network/ConcreteNetwork.cc |
| index 6f8b842..8096f2e 100644 |
| --- a/src/sta/network/ConcreteNetwork.cc |
| +++ b/src/sta/network/ConcreteNetwork.cc |
| @@ -1180,11 +1180,14 @@ ConcreteNetwork::replaceCell(Instance *inst, |
| ConcreteCell *ccell = reinterpret_cast<ConcreteCell*>(cell); |
| int port_count = ccell->portBitCount(); |
| ConcreteInstance *cinst = reinterpret_cast<ConcreteInstance*>(inst); |
| + // Port count picked from Instance instead of Target cells-Dinesh A |
| + ConcreteCell *instcell = reinterpret_cast<ConcreteCell*>(cinst->cell()); |
| + int inst_port_count = instcell->portBitCount(); |
| ConcretePin **pins = cinst->pins_; |
| ConcretePin **rpins = new ConcretePin*[port_count]; |
| - for (int i = 0; i < port_count; i++) |
| - rpins[i] = nullptr; |
| - for (int i = 0; i < port_count; i++) { |
| + for (int i = 0; i < port_count; i++) |
| + rpins[i] = pins[inst_port_count-1]; |
| + for (int i = 0; i < inst_port_count; i++) { |
| ConcretePin *cpin = pins[i]; |
| if (cpin) { |
| ConcretePort *pin_cport = reinterpret_cast<ConcretePort*>(cpin->port()); |
| diff --git a/src/sta/tcl/NetworkEdit.tcl b/src/sta/tcl/NetworkEdit.tcl |
| index 5ce616b..bdd4057 100644 |
| --- a/src/sta/tcl/NetworkEdit.tcl |
| +++ b/src/sta/tcl/NetworkEdit.tcl |
| @@ -236,6 +236,21 @@ proc replace_cell { instance lib_cell } { |
| } |
| } |
| |
| +proc replace_to_scan_cell { instance } { |
| + set inst [get_instance_error "instance" $instance] |
| + set inst_cell [get_full_name [$inst liberty_cell]] |
| + #Target scan cell __d to __sd |
| + #example sky130_fd_sc_hd__dfrtp_2 to sky130_fd_sc_hd__sdfrtp_2 |
| + set inst_scell [regsub -all "__d" $inst_cell "__sd"] |
| + puts "Info: Scan Swapping => Instance:$instance From:$inst_cell to:$inst_scell"; |
| + if { $inst_cell == "NULL"} { |
| + return 0 |
| + } |
| + set scell [get_lib_cell_warn "lib_cell" $inst_scell] |
| + replace_cell_cmd $inst $scell |
| + return 1 |
| +} |
| + |
| proc path_regexp {} { |
| global hierarchy_separator |
| set id_regexp "\[^${hierarchy_separator}\]+" |
| diff --git a/src/sta/tcl/Sta.tcl b/src/sta/tcl/Sta.tcl |
| index f3de994..a6e8e34 100644 |
| --- a/src/sta/tcl/Sta.tcl |
| +++ b/src/sta/tcl/Sta.tcl |
| @@ -623,6 +623,7 @@ define_cmd_args "make_instance" {inst_path lib_cell} |
| define_cmd_args "make_net" {} |
| |
| define_cmd_args "replace_cell" {instance lib_cell} |
| +define_cmd_args "replace_to_scan_cell" {instance} |
| |
| define_cmd_args "insert_buffer" {buffer_name buffer_cell net load_pins\ |
| buffer_out_net_name} |