Mitch Bailey
03/01/2021, 11:38 PMcontrol_logic_r
had no hierarchy in the layout and text from original sub-cells had been merged and shorted. Renamed the nets in the extracted spice to match the netlist.
3. Added commands to flatten all cells in the control_logic_r
block of the netlist.
4. precharge_array
contained a VSUBS connection in the extracted spice that wasn't in the netlist, so I flattened those cells in the netlist and removed the VSUBS connection from the extracted spice.
5. In replica_column
, I changed the bl0, bl1, br0, br1 nets in the netlist to bl0_0, bl1_0, br0_0, br1_0 to match the extracted spice.
6. In the flattened control_logic_r
, I replaced the flattened delta_chain
, with a subckt call in the extracted spice.
I noticed there were no port statements in the ext files for anything in the sram subcells.Mitch Bailey
03/03/2021, 2:37 PMinput [7:0] mgmt_addr;
input [7:0] mgmt_addr_ro;
input mgmt_clk;
input [1:0] mgmt_ena;
input mgmt_ena_ro;
output [63:0] mgmt_rdata;
output [31:0] mgmt_rdata_ro;
input [31:0] mgmt_wdata;
input [1:0] mgmt_wen;
input [7:0] mgmt_wen_mask;
...
sram_1rw1r_32_256_8_sky130 SRAM_0 (
.addr0(mgmt_addr),
.addr1(mgmt_addr_ro),
.clk0(mgmt_clk),
.clk1(mgmt_clk),
.csb0(mgmt_ena[0]),
.csb1(mgmt_ena_ro),
.din0(mgmt_wdata),
.dout0(mgmt_rdata[31:0]),
.dout1(mgmt_rdata_ro),
.gnd(VGND),
.vdd(VPWR),
.web0(mgmt_wen[0]),
.wmask0(mgmt_wen_mask[3:0])
);
sram_1rw1r_32_256_8_sky130 SRAM_1 (
.addr0(mgmt_addr),
.addr1({ _NC1, _NC2, _NC3, _NC4, _NC5, _NC6, _NC7, _NC8 }),
.clk0(mgmt_clk),
.csb0(mgmt_ena[1]),
.din0(mgmt_wdata),
.dout0(mgmt_rdata[63:32]),
.dout1({ _NC9, _NC10, _NC11, _NC12, _NC13, _NC14, _NC15, _NC16, _NC17, _NC18, _NC19, _NC20, _NC21, _NC22, _NC23, _NC24, _NC25, _NC26, _NC27, _NC28, _NC29, _NC30, _NC31, _NC32, _NC33, _NC34, _NC35, _NC36, _NC37, _NC38, _NC39, _NC40 }),
.gnd(VGND),
.vdd(VPWR),
.web0(mgmt_wen[1]),
.wmask0(mgmt_wen_mask[7:4])
);
In summary, the spice - verilog mapping requires the bus indices to be in ascending order (or flattened buses). I'm going to flip the buses and try again.Tim Edwards
03/03/2021, 3:02 PMMitch Bailey
03/03/2021, 3:34 PMMatthew Guthaus
03/03/2021, 3:44 PMMatthew Guthaus
03/03/2021, 3:45 PMTim Edwards
03/03/2021, 3:47 PM.addr0(mgmt_addr)
is mapping input [7:0] mgmt_addr
into addr0
and will assume the same order of pins, which is to say, addr0[7:0]
. Apparently that is not happening.Tim Edwards
03/03/2021, 3:52 PMsram_1rw1r_32_256_8_sky130
? I realized last week that it does not exist anywhere that I know of outside of https://github.com/efabless/sky130_sram_macros . Late last week I added that repository to the list of repos that open_pdks
will download and install as part of the make
process. But I also discovered that the netlist has references to old s8 device names and uses M instead of X for transistors. I pushed that correction this morning.Mitch Bailey
03/03/2021, 4:02 PM4.3.1 Specifying vectors
The range specification gives addresses to the individual bits in a multibit net or reg. The most significant bit specified by the msb constant expression is the left-hand value in the range, and the least significant bit specified by the lsb constant expression is the right-hand value in the range.
So it may be possible to assume that the undefined verilog subcircuit buses should be mapped in descending order (and not necessarily the order of the bus in the instance).
As for the sram netlist, a week ago @Ahmed Ghazy posted this:
https://github.com/efabless/sky130_sram_macros/blob/sky130_name_mapping/sram_1rw1r_32_256_8_sky130/sram_1rw1r_32_256_8_sky130.lvs.converted.sp
It's on a different branch.Matthew Guthaus
03/03/2021, 7:39 PMMitch Bailey
03/03/2021, 11:26 PMThe lsb value may be greater than, equal to, or less than the msb value.
Mitch Bailey
03/04/2021, 1:34 AMTim Edwards
03/04/2021, 1:44 AMMitch Bailey
03/04/2021, 1:44 AMTim Edwards
03/04/2021, 1:45 AMMitch Bailey
03/04/2021, 1:46 AM