Skip to content

Commit 606571b

Browse files
authored
Merge pull request #10580 from tnguy19/auto-detect-power-ground
ram: auto-detect power and ground pin names
2 parents 065077a + 4bc0528 commit 606571b

10 files changed

Lines changed: 27 additions & 43 deletions

File tree

src/ram/README.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ generate_ram [-mask_size bits]
4141
[-storage_cell name]
4242
[-tristate_cell name]
4343
[-inv_cell name]
44-
-power_pin name
45-
-ground_pin name
4644
[-power_net_name name]
4745
[-ground_net_name name]
4846
-routing_layer config
@@ -66,8 +64,6 @@ generate_ram [-mask_size bits]
6664
| `-storage_cell` | Name of the master to use for the storage device (i.e. a flip-flop). Must be positive-edge triggered. Default: auto-select from the loaded cell library. |
6765
| `-tristate_cell` | Name of the master to use for the tristate device (i.e. a tristate inverter). It is currently assumed that the device is inverting. Default: auto-select from the loaded cell library. |
6866
| `-inv_cell` | Name of the master to use for inverters. Default: auto-select from the loaded cell library. |
69-
| `-power_pin` | Name of the power pin in each standard cell used. Only one name is currently supported. |
70-
| `-ground_pin` | Name of the ground pin in each standard cell used. Only one name is currently supported. |
7167
| `-routing_layer` | A list of the metal layer and metal width (in microns) for generating standard cell power tracks (followpins). Example: `{met1 0.48}`. |
7268
| `-power_net_name` | Name of the power net to create. Default: `VDD`. |
7369
| `-ground_net_name` | Name of the ground net to create. Default: `VSS`. |

src/ram/include/ram/ram.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <functional>
88
#include <map>
99
#include <memory>
10+
#include <set>
1011
#include <string>
1112
#include <utility>
1213
#include <vector>
@@ -99,9 +100,7 @@ class RamGen
99100
odb::dbMaster* tapcell,
100101
int max_tap_dist);
101102

102-
void ramPdngen(const char* power_pin,
103-
const char* ground_pin,
104-
const char* power_net_name,
103+
void ramPdngen(const char* power_net_name,
105104
const char* ground_net_name,
106105
const char* route_name,
107106
int route_width,
@@ -203,6 +202,9 @@ class RamGen
203202
odb::dbMaster* latch_cell_{nullptr};
204203
odb::dbMaster* tapcell_{nullptr};
205204

205+
std::set<std::string> power_pin_names_;
206+
std::set<std::string> ground_pin_names_;
207+
206208
std::map<PortRole, std::string> storage_ports_;
207209
std::map<PortRole, std::string> tristate_ports_;
208210
std::map<PortRole, std::string> inv_ports_;

src/ram/src/ram.cpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,14 @@ std::map<PortRole, std::string> RamGen::buildPortMap(dbMaster* master)
582582
ground_count);
583583
}
584584

585+
for (auto& [role, name] : pin_map) {
586+
if (role.type == PortRoleType::Power) {
587+
power_pin_names_.insert(name);
588+
} else if (role.type == PortRoleType::Ground) {
589+
ground_pin_names_.insert(name);
590+
}
591+
}
592+
585593
return pin_map;
586594
}
587595

@@ -846,9 +854,7 @@ void RamGen::findMasters()
846854
}
847855
}
848856

849-
void RamGen::ramPdngen(const char* power_pin,
850-
const char* ground_pin,
851-
const char* power_net_name,
857+
void RamGen::ramPdngen(const char* power_net_name,
852858
const char* ground_net_name,
853859
const char* route_name,
854860
int route_width,
@@ -913,8 +919,13 @@ void RamGen::ramPdngen(const char* power_pin,
913919
ground_net->setSpecial();
914920
ground_net->setSigType(odb::dbSigType::GROUND);
915921

916-
block_->addGlobalConnect(nullptr, ".*", power_pin, power_net, true);
917-
block_->addGlobalConnect(nullptr, ".*", ground_pin, ground_net, true);
922+
for (const auto& pin_name : power_pin_names_) {
923+
block_->addGlobalConnect(nullptr, ".*", pin_name.c_str(), power_net, true);
924+
}
925+
926+
for (const auto& pin_name : ground_pin_names_) {
927+
block_->addGlobalConnect(nullptr, ".*", pin_name.c_str(), ground_net, true);
928+
}
918929

919930
block_->globalConnect(false, false);
920931

src/ram/src/ram.i

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,13 @@ generate_ram_netlist_cmd(int mask_size,
9494
max_tap_dist);
9595
}
9696

97-
void ram_pdngen(const char* power_pin, const char* ground_pin,
98-
const char* power_net_name, const char* ground_net_name,
97+
void ram_pdngen(const char* power_net_name, const char* ground_net_name,
9998
const char* route_name, int route_width,
10099
const char* ver_name, int ver_width, int ver_pitch,
101100
const char* hor_name, int hor_width, int hor_pitch)
102101
{
103102
RamGen* ram_gen = ord::getRamGen();
104-
ram_gen->ramPdngen(power_pin, ground_pin, power_net_name, ground_net_name,
103+
ram_gen->ramPdngen(power_net_name, ground_net_name,
105104
route_name, route_width,
106105
ver_name, ver_width, ver_pitch,
107106
hor_name, hor_width, hor_pitch);

src/ram/src/ram.tcl

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,6 @@ sta::define_cmd_args "generate_ram" {[-mask_size bits]
101101
[-storage_cell name]
102102
[-tristate_cell name]
103103
[-inv_cell name]
104-
-power_pin name
105-
-ground_pin name
106104
[-power_net_name name]
107105
[-ground_net_name name]
108106
-routing_layer config
@@ -120,9 +118,9 @@ proc generate_ram { args } {
120118
sta::parse_key_args "generate_ram" args \
121119
keys { -mask_size -word_size -num_words -column_mux_ratio
122120
-storage_cell -tristate_cell -inv_cell -read_ports -use_latch
123-
-power_pin -ground_pin -power_net_name -ground_net_name
124-
-routing_layer -ver_layer -hor_layer -filler_cells
125-
-tapcell -max_tap_dist -write_behavioral_verilog } flags {}
121+
-power_net_name -ground_net_name -routing_layer -ver_layer
122+
-hor_layer -filler_cells -tapcell -max_tap_dist
123+
-write_behavioral_verilog } flags {}
126124

127125
sta::check_argc_eq0 "generate_ram" $args
128126

@@ -180,18 +178,6 @@ proc generate_ram { args } {
180178

181179
ord::design_created
182180

183-
if { [info exists keys(-power_pin)] } {
184-
set power_pin $keys(-power_pin)
185-
} else {
186-
utl::error RAM 5 "The -power_pin argument must be specified."
187-
}
188-
189-
if { [info exists keys(-ground_pin)] } {
190-
set ground_pin $keys(-ground_pin)
191-
} else {
192-
utl::error RAM 6 "The -ground_pin argument must be specified."
193-
}
194-
195181
set power_net_name "VDD"
196182
if { [info exists keys(-power_net_name)] } {
197183
set power_net_name $keys(-power_net_name)
@@ -259,7 +245,7 @@ proc generate_ram { args } {
259245
utl::error RAM 18 "The -filler_cells argument must be specified."
260246
}
261247

262-
ram::ram_pdngen $power_pin $ground_pin $power_net_name $ground_net_name \
248+
ram::ram_pdngen $power_net_name $ground_net_name \
263249
$route_name $route_width \
264250
$ver_name $ver_width $ver_pitch $hor_name $hor_width $hor_pitch
265251

src/ram/test/make_7x7_nangate45.tcl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ generate_ram \
2323
-num_words 7 \
2424
-read_ports 1 \
2525
-storage_cell DFF_X1 \
26-
-power_pin VDD \
27-
-ground_pin VSS \
2826
-routing_layer {metal1 0.08} \
2927
-ver_layer {metal4 0.14 9} \
3028
-hor_layer {metal3 0.08 8} \

src/ram/test/make_8x8_latch_sky130.tcl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ generate_ram \
1515
-num_words 8 \
1616
-read_ports 1 \
1717
-use_latch 1 \
18-
-power_pin VPWR \
19-
-ground_pin VGND \
2018
-routing_layer {met1 0.48} \
2119
-ver_layer {met2 0.48 40} \
2220
-hor_layer {met3 0.48 20} \

src/ram/test/make_8x8_mux2_sky130.tcl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ generate_ram \
1111
-column_mux_ratio 2 \
1212
-read_ports 1 \
1313
-storage_cell sky130_fd_sc_hd__dfxtp_1 \
14-
-power_pin VPWR \
15-
-ground_pin VGND \
1614
-routing_layer {met1 0.48} \
1715
-ver_layer {met2 0.48 20} \
1816
-hor_layer {met3 0.48 10} \

src/ram/test/make_8x8_mux4_sky130.tcl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ generate_ram \
1616
-column_mux_ratio 4 \
1717
-read_ports 1 \
1818
-storage_cell sky130_fd_sc_hd__dfxtp_1 \
19-
-power_pin VPWR \
20-
-ground_pin VGND \
2119
-routing_layer {met1 0.48} \
2220
-ver_layer {met2 0.48 10} \
2321
-hor_layer {met3 0.48 7} \

src/ram/test/make_8x8_sky130.tcl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ generate_ram \
1515
-num_words 8 \
1616
-read_ports 1 \
1717
-storage_cell sky130_fd_sc_hd__dfxtp_1 \
18-
-power_pin VPWR \
19-
-ground_pin VGND \
2018
-routing_layer {met1 0.48} \
2119
-ver_layer {met2 0.48 40} \
2220
-hor_layer {met3 0.48 20} \

0 commit comments

Comments
 (0)