add gen parm for 16x12 or 32x12 subarray

master
openpowerwtf 1 year ago
parent 685d4a98c4
commit 2e11a03ffb

@ -1,24 +1,27 @@
[*] [*]
[*] GTKWave Analyzer v3.4.0 (w)1999-2022 BSI [*] GTKWave Analyzer v3.4.0 (w)1999-2022 BSI
[*] Tue Nov 15 19:51:18 2022 [*] Wed Nov 16 17:14:03 2022
[*] [*]
[dumpfile] "/data/projects/toy-sram/rtl/sim/coco/tb_ra_64x72.fst" [dumpfile] "/data/projects/toy-sram/rtl/sim/coco/tb_ra_64x72.fst"
[dumpfile_mtime] "Tue Nov 15 19:33:55 2022" [dumpfile_mtime] "Wed Nov 16 16:47:59 2022"
[dumpfile_size] 99807 [dumpfile_size] 13040
[savefile] "/data/projects/toy-sram/rtl/sim/coco/ra_shard_64x72_2r1w.gtkw" [savefile] "/data/projects/toy-sram/rtl/sim/coco/ra_shard_64x72_2r1w.gtkw"
[timestart] 0 [timestart] 86274
[size] 1699 1047 [size] 1699 1047
[pos] 188 267 [pos] 188 267
*-12.000000 1020 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 *-10.000000 90500 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[treeopen] tb_ra_64x72_2r1w. [treeopen] tb_ra_64x72_2r1w.
[treeopen] tb_ra_64x72_2r1w.lcb. [treeopen] tb_ra_64x72_2r1w.lcb.
[treeopen] tb_ra_64x72_2r1w.ra. [treeopen] tb_ra_64x72_2r1w.ra.
[treeopen] tb_ra_64x72_2r1w.ra.ra0. [treeopen] tb_ra_64x72_2r1w.ra.ra0.
[treeopen] tb_ra_64x72_2r1w.ra.ra0.r000. [treeopen] tb_ra_64x72_2r1w.ra.ra0.genblk1.
[treeopen] tb_ra_64x72_2r1w.ra.ra1.
[treeopen] tb_ra_64x72_2r1w.ra.ra2.
[treeopen] tb_ra_64x72_2r1w.ra.ra2.genblk1.
[sst_width] 242 [sst_width] 242
[signals_width] 257 [signals_width] 387
[sst_expanded] 1 [sst_expanded] 1
[sst_vpaned_height] 301 [sst_vpaned_height] 331
@28 @28
tb_ra_64x72_2r1w.clk tb_ra_64x72_2r1w.clk
tb_ra_64x72_2r1w.rd_enb_0 tb_ra_64x72_2r1w.rd_enb_0
@ -44,12 +47,7 @@ tb_ra_64x72_2r1w.cnfig.cfg[0:31]
-LCB -LCB
@22 @22
tb_ra_64x72_2r1w.lcb.tap1_sel_q[0:3] tb_ra_64x72_2r1w.lcb.tap1_sel_q[0:3]
@23
tb_ra_64x72_2r1w.lcb.tap1[0:3]
@28 @28
tb_ra_64x72_2r1w.lcb.tap1_b
tb_ra_64x72_2r1w.lcb.pulse1_b
tb_ra_64x72_2r1w.lcb.pulse2_b
tb_ra_64x72_2r1w.lcb.strobe tb_ra_64x72_2r1w.lcb.strobe
@200 @200
-RA -RA
@ -57,6 +55,21 @@ tb_ra_64x72_2r1w.lcb.strobe
tb_ra_64x72_2r1w.ra.rd_enb_0_q tb_ra_64x72_2r1w.ra.rd_enb_0_q
@22 @22
tb_ra_64x72_2r1w.ra.rd_adr_0_q[0:5] tb_ra_64x72_2r1w.ra.rd_adr_0_q[0:5]
@28
tb_ra_64x72_2r1w.rd_enb_0
@23
tb_ra_64x72_2r1w.ra.ra2.genblk1.r00.mem_30[0:11]
@22
tb_ra_64x72_2r1w.ra.ra2.genblk1.r01.mem_30[0:11]
tb_ra_64x72_2r1w.ra.ra2.genblk1.r00.RBL0[0:11]
tb_ra_64x72_2r1w.ra.ra2.genblk1.r01.RBL0[0:11]
tb_ra_64x72_2r1w.ra.ra2.rbl0_00_31_12_23[0:11]
tb_ra_64x72_2r1w.ra.ra2.rbl0_32_63_00_11[0:11]
tb_ra_64x72_2r1w.ra.ra2.rbl0_32_63_12_23[0:11]
tb_ra_64x72_2r1w.ra.ra0.rd0_dat[0:23]
tb_ra_64x72_2r1w.ra.ra1.rd0_dat[0:23]
tb_ra_64x72_2r1w.ra.ra2.rd0_dat[0:23]
tb_ra_64x72_2r1w.rd_dat_0[0:71]
tb_ra_64x72_2r1w.ra.rd_dat_0_q[0:71] tb_ra_64x72_2r1w.ra.rd_dat_0_q[0:71]
@28 @28
tb_ra_64x72_2r1w.ra.rd_enb_1_q tb_ra_64x72_2r1w.ra.rd_enb_1_q
@ -72,26 +85,13 @@ tb_ra_64x72_2r1w.ra.wr_dat_0_q[0:71]
-RA0 -RA0
@28 @28
tb_ra_64x72_2r1w.ra.ra0.rd1_c_a0 tb_ra_64x72_2r1w.ra.ra0.rd1_c_a0
tb_ra_64x72_2r1w.ra.ra0.rd1_c_a0_i
tb_ra_64x72_2r1w.ra.ra0.rd1_c_na0_i
@22
tb_ra_64x72_2r1w.ra.ra0.rbl1_000[0:11]
@200 @200
-R000 -R000
@22
tb_ra_64x72_2r1w.ra.ra0.r000.mem_00[0:11]
tb_ra_64x72_2r1w.ra.ra0.r000.RWL0[0:15]
tb_ra_64x72_2r1w.ra.ra0.r000.RWL1[0:15]
tb_ra_64x72_2r1w.ra.ra0.r000.RBL0[0:11]
tb_ra_64x72_2r1w.ra.ra0.r000.RBL1[0:11]
tb_ra_64x72_2r1w.ra.ra0.r000.WWL[0:15]
tb_ra_64x72_2r1w.ra.ra0.r000.WBL[0:11]
tb_ra_64x72_2r1w.ra.ra0.r000.WBLb[0:11]
@200
-Eval -Eval
@22 @22
tb_ra_64x72_2r1w.ra.ra0.eval_0x0.RBL1_L[0:11] tb_ra_64x72_2r1w.ra.ra0.genblk1.r00.mem_00[0:11]
tb_ra_64x72_2r1w.ra.ra0.eval_0x0.RBL1_R[0:11] tb_ra_64x72_2r1w.ra.ra0.genblk1.r01.mem_00[0:11]
tb_ra_64x72_2r1w.ra.ra0.eval_0x0.RBL1_O_b[0:11] tb_ra_64x72_2r1w.ra.ra0.genblk1.r10.mem_00[0:11]
tb_ra_64x72_2r1w.ra.ra0.genblk1.r11.mem_00[0:11]
[pattern_trace] 1 [pattern_trace] 1
[pattern_trace] 0 [pattern_trace] 0

@ -1,8 +1,6 @@
<testsuites name="results"> <testsuites name="results">
<testsuite name="all" package="all"> <testsuite name="all" package="all">
<property name="random_seed" value="1668540834" /> <property name="random_seed" value="1668630103" />
<testcase name="tb" classname="tb_ra_64x72" file="/data/projects/toy-sram/rtl/sim/coco/tb_ra_64x72.py" lineno="293" time="0.2973616123199463" sim_time_ns="107.001" ratio_time="359.8346106789072"> <testcase name="tb" classname="tb_ra_64x72" file="/data/projects/toy-sram/rtl/sim/coco/tb_ra_64x72.py" lineno="293" time="22.16532826423645" sim_time_ns="10089.001" ratio_time="455.1703850142616" />
<failure />
</testcase>
</testsuite> </testsuite>
</testsuites> </testsuites>

Binary file not shown.

@ -377,8 +377,10 @@ async def tb(dut):
# configure allowed ports/entries # configure allowed ports/entries
rangesRd = [(0,63), (0,63), (0,63), (0,63)] # full rangesRd = [(0,63), (0,63), (0,63), (0,63)] # full
#rangesRd = [(0,7), (0,7), (0,7), (0,7)] # hammer #rangesRd = [(0,7), (0,7), (0,7), (0,7)] # hammer
#rangesRd = [(0,0), (0,0), (0,0), (0,0)] # single
rangesWr = [(0,63), (0,63),(0,63), (0,63)] # full rangesWr = [(0,63), (0,63),(0,63), (0,63)] # full
#rangesWr = [(0,7), (0,7)] # hammer #rangesWr = [(0,7), (0,7)] # hammer
#rangesWr = [(0,0), (0,0)] # single
#rangesWr = [None, None] # none #rangesWr = [None, None] # none


verbose = True verbose = True

@ -22,9 +22,9 @@


`timescale 1 ps / 1 ps `timescale 1 ps / 1 ps


// 0: gen 8x 16x12 plus local eval 1: gen 4x 32x24 and no local eval // 0: gen 8x 16x12 plus local eval 1: gen 4x 32x12 and no local eval
module regfile_64x24_2r1w #( module regfile_64x24_2r1w #(
parameter integer RA_32x24 = 1 parameter integer RA_32x12 = 1
) ( ) (


input rd0_c_na0, input rd0_c_na0,
@ -71,8 +71,9 @@ module regfile_64x24_2r1w #(


); );


// word & bit selects // word & bit selects


// 16x12
wire [0:15] rwl0_00_15_00_11; wire [0:15] rwl0_00_15_00_11;
wire [0:15] rwl0_00_15_12_23; wire [0:15] rwl0_00_15_12_23;
wire [0:15] rwl1_00_15_00_11; wire [0:15] rwl1_00_15_00_11;
@ -125,7 +126,21 @@ wire [0:11] rbl1_48_63_12_23;
wire [0:11] wbl_48_63_00_11; wire [0:11] wbl_48_63_00_11;
wire [0:11] wbl_48_63_12_23; wire [0:11] wbl_48_63_12_23;


// 32x24 // 32x12
wire [0:31] rwl0_00_31_00_11;
wire [0:31] rwl0_00_31_12_23;
wire [0:31] rwl1_00_31_00_11;
wire [0:31] rwl1_00_31_12_23;
wire [0:31] wwl_00_31_00_11;
wire [0:31] wwl_00_31_12_23;

wire [0:31] rwl0_32_63_00_11;
wire [0:31] rwl0_32_63_12_23;
wire [0:31] rwl1_32_63_00_11;
wire [0:31] rwl1_32_63_12_23;
wire [0:31] wwl_32_63_00_11;
wire [0:31] wwl_32_63_12_23;

wire [0:11] rbl0_00_31_00_11; wire [0:11] rbl0_00_31_00_11;
wire [0:11] rbl0_00_31_12_23; wire [0:11] rbl0_00_31_12_23;
wire [0:11] rbl1_00_31_00_11; wire [0:11] rbl1_00_31_00_11;
@ -140,13 +155,17 @@ wire [0:11] rbl1_32_63_12_23;
wire [0:11] wbl_32_63_00_11; wire [0:11] wbl_32_63_00_11;
wire [0:11] wbl_32_63_12_23; wire [0:11] wbl_32_63_12_23;


genvar i;

// subarrays
generate generate


if (RA_32x24 == 0) begin if (RA_32x12 == 0) begin
// subarray cells; 4x2 16w/12b subarrays
// 4x2 16w/12b


// words 00:15 // words 00:15
toysram_16x12 r000 ( toysram_16x12 r000 (
.RWL0(rwl0_00_15_00_11), .RWL0(rwl0_00_15_00_11),
.RWL1(rwl1_00_15_00_11), .RWL1(rwl1_00_15_00_11),
.WWL(wwl_00_15_00_11), .WWL(wwl_00_15_00_11),
@ -154,8 +173,8 @@ toysram_16x12 r000 (
.RBL1(rbl1_00_15_00_11), .RBL1(rbl1_00_15_00_11),
.WBL(wbl_00_15_00_11), .WBL(wbl_00_15_00_11),
.WBLb(~wbl_00_15_00_11) .WBLb(~wbl_00_15_00_11)
); );
toysram_16x12 r001 ( toysram_16x12 r001 (
.RWL0(rwl0_00_15_12_23), .RWL0(rwl0_00_15_12_23),
.RWL1(rwl1_00_15_12_23), .RWL1(rwl1_00_15_12_23),
.WWL(wwl_00_15_12_23), .WWL(wwl_00_15_12_23),
@ -163,10 +182,10 @@ toysram_16x12 r001 (
.RBL1(rbl1_00_15_12_23), .RBL1(rbl1_00_15_12_23),
.WBL(wbl_00_15_12_23), .WBL(wbl_00_15_12_23),
.WBLb(~wbl_00_15_12_23) .WBLb(~wbl_00_15_12_23)
); );


// words 16:31 // words 16:31
toysram_16x12 r010 ( toysram_16x12 r010 (
.RWL0(rwl0_16_31_00_11), .RWL0(rwl0_16_31_00_11),
.RWL1(rwl1_16_31_00_11), .RWL1(rwl1_16_31_00_11),
.WWL(wwl_16_31_00_11), .WWL(wwl_16_31_00_11),
@ -174,8 +193,8 @@ toysram_16x12 r010 (
.RBL1(rbl1_16_31_00_11), .RBL1(rbl1_16_31_00_11),
.WBL(wbl_16_31_00_11), .WBL(wbl_16_31_00_11),
.WBLb(~wbl_16_31_00_11) .WBLb(~wbl_16_31_00_11)
); );
toysram_16x12 r011 ( toysram_16x12 r011 (
.RWL0(rwl0_16_31_12_23), .RWL0(rwl0_16_31_12_23),
.RWL1(rwl1_16_31_12_23), .RWL1(rwl1_16_31_12_23),
.WWL(wwl_16_31_12_23), .WWL(wwl_16_31_12_23),
@ -183,10 +202,10 @@ toysram_16x12 r011 (
.RBL1(rbl1_16_31_12_23), .RBL1(rbl1_16_31_12_23),
.WBL(wbl_16_31_12_23), .WBL(wbl_16_31_12_23),
.WBLb(~wbl_16_31_12_23) .WBLb(~wbl_16_31_12_23)
); );


// words 32:47 // words 32:47
toysram_16x12 r100 ( toysram_16x12 r100 (
.RWL0(rwl0_32_47_00_11), .RWL0(rwl0_32_47_00_11),
.RWL1(rwl1_32_47_00_11), .RWL1(rwl1_32_47_00_11),
.WWL(wwl_32_47_00_11), .WWL(wwl_32_47_00_11),
@ -194,8 +213,8 @@ toysram_16x12 r100 (
.RBL1(rbl1_32_47_00_11), .RBL1(rbl1_32_47_00_11),
.WBL(wbl_32_47_00_11), .WBL(wbl_32_47_00_11),
.WBLb(~wbl_32_47_00_11) .WBLb(~wbl_32_47_00_11)
); );
toysram_16x12 r101 ( toysram_16x12 r101 (
.RWL0(rwl0_32_47_12_23), .RWL0(rwl0_32_47_12_23),
.RWL1(rwl1_32_47_12_23), .RWL1(rwl1_32_47_12_23),
.WWL(wwl_32_47_12_23), .WWL(wwl_32_47_12_23),
@ -203,10 +222,10 @@ toysram_16x12 r101 (
.RBL1(rbl1_32_47_12_23), .RBL1(rbl1_32_47_12_23),
.WBL(wbl_32_47_12_23), .WBL(wbl_32_47_12_23),
.WBLb(~wbl_32_47_12_23) .WBLb(~wbl_32_47_12_23)
); );


// words 48:63 // words 48:63
toysram_16x12 r110 ( toysram_16x12 r110 (
.RWL0(rwl0_48_63_00_11), .RWL0(rwl0_48_63_00_11),
.RWL1(rwl1_48_63_00_11), .RWL1(rwl1_48_63_00_11),
.WWL(wwl_48_63_00_11), .WWL(wwl_48_63_00_11),
@ -214,8 +233,8 @@ toysram_16x12 r110 (
.RBL1(rbl1_48_63_00_11), .RBL1(rbl1_48_63_00_11),
.WBL(wbl_48_63_00_11), .WBL(wbl_48_63_00_11),
.WBLb(~wbl_48_63_00_11) .WBLb(~wbl_48_63_00_11)
); );
toysram_16x12 r111 ( toysram_16x12 r111 (
.RWL0(rwl0_48_63_12_23), .RWL0(rwl0_48_63_12_23),
.RWL1(rwl1_48_63_12_23), .RWL1(rwl1_48_63_12_23),
.WWL(wwl_48_63_12_23), .WWL(wwl_48_63_12_23),
@ -223,14 +242,14 @@ toysram_16x12 r111 (
.RBL1(rbl1_48_63_12_23), .RBL1(rbl1_48_63_12_23),
.WBL(wbl_48_63_12_23), .WBL(wbl_48_63_12_23),
.WBLb(~wbl_48_63_12_23) .WBLb(~wbl_48_63_12_23)
); );


end else begin end else begin


// subarray cells; 2x2 32w/24b subarrays w/local eval inside between pairs // 2x2 32w/24b w/local eval inside between pairs


// words 00:31 // words 00:31
toysram_32x12 r00 ( toysram_32x12 r00 (
.RWL0({rwl0_00_15_00_11,rwl0_16_31_00_11}), .RWL0({rwl0_00_15_00_11,rwl0_16_31_00_11}),
.RWL1({rwl1_00_15_00_11,rwl1_16_31_00_11}), .RWL1({rwl1_00_15_00_11,rwl1_16_31_00_11}),
.WWL({wwl_00_15_00_11,wwl_16_31_00_11}), .WWL({wwl_00_15_00_11,wwl_16_31_00_11}),
@ -238,9 +257,9 @@ toysram_32x12 r00 (
.RBL1(rbl1_00_31_00_11), .RBL1(rbl1_00_31_00_11),
.WBL(wbl_00_31_00_11), .WBL(wbl_00_31_00_11),
.WBLb(~wbl_00_31_00_11) .WBLb(~wbl_00_31_00_11)
); );


toysram_32x12 r01 ( toysram_32x12 r01 (
.RWL0({rwl0_00_15_12_23,rwl0_16_31_12_23}), .RWL0({rwl0_00_15_12_23,rwl0_16_31_12_23}),
.RWL1({rwl1_00_15_12_23,rwl1_16_31_12_23}), .RWL1({rwl1_00_15_12_23,rwl1_16_31_12_23}),
.WWL({wwl_00_15_12_23,wwl_16_31_12_23}), .WWL({wwl_00_15_12_23,wwl_16_31_12_23}),
@ -248,21 +267,21 @@ toysram_32x12 r01 (
.RBL1(rbl1_00_31_12_23), .RBL1(rbl1_00_31_12_23),
.WBL(wbl_00_31_12_23), .WBL(wbl_00_31_12_23),
.WBLb(~wbl_00_31_12_23) .WBLb(~wbl_00_31_12_23)
); );


// words 32:47 // words 32:47
toysram_32x12 r10 ( toysram_32x12 r10 (
.RWL0({rwl0_32_47_00_11,rwl0_48_31_00_11}), .RWL0({rwl0_32_47_00_11,rwl0_48_63_00_11}),
.RWL1({rwl1_32_47_00_11,rwl1_48_31_00_11}), .RWL1({rwl1_32_47_00_11,rwl1_48_63_00_11}),
.WWL({wwl_32_47_00_11,wwl_48_31_00_11}), .WWL({wwl_32_47_00_11,wwl_48_63_00_11}),
.RBL0(rbl0_32_63_00_11), .RBL0(rbl0_32_63_00_11),
.RBL1(rbl1_32_63_00_11), .RBL1(rbl1_32_63_00_11),
.WBL(wbl_32_63_00_11), .WBL(wbl_32_63_00_11),
.WBLb(~wbl_32_63_00_11) .WBLb(~wbl_32_63_00_11)
); );


// words 48:63 // words 48:63
toysram_32x12 r11 ( toysram_32x12 r11 (
.RWL0({rwl0_32_47_12_23,rwl0_48_63_12_23}), .RWL0({rwl0_32_47_12_23,rwl0_48_63_12_23}),
.RWL1({rwl1_32_47_12_23,rwl1_48_63_12_23}), .RWL1({rwl1_32_47_12_23,rwl1_48_63_12_23}),
.WWL({wwl_32_47_12_23,wwl_48_63_12_23}), .WWL({wwl_32_47_12_23,wwl_48_63_12_23}),
@ -270,7 +289,7 @@ toysram_32x12 r11 (
.RBL1(rbl1_32_63_12_23), .RBL1(rbl1_32_63_12_23),
.WBL(wbl_32_63_12_23), .WBL(wbl_32_63_12_23),
.WBLb(~wbl_32_63_12_23) .WBLb(~wbl_32_63_12_23)
); );


end end
endgenerate endgenerate
@ -549,31 +568,48 @@ assign rwl0_48_63_12_23 = rwl0_48_63_00_11;
assign rwl1_48_63_12_23 = rwl1_48_63_00_11; assign rwl1_48_63_12_23 = rwl1_48_63_00_11;
assign wwl_48_63_12_23 = wwl_48_63_00_11; assign wwl_48_63_12_23 = wwl_48_63_00_11;



// bit lines // bit lines

genvar i;
generate generate


for (i = 0; i < 12; i = i + 1) begin if (RA_32x12 == 0) begin

for (i = 0; i < 12; i = i + 1) begin
assign rd0_dat[i] = (~rbl0_00_15_00_11[i]) | (~rbl0_16_31_00_11[i]) | (~rbl0_32_47_00_11[i]) | (~rbl0_48_63_00_11[i]); assign rd0_dat[i] = (~rbl0_00_15_00_11[i]) | (~rbl0_16_31_00_11[i]) | (~rbl0_32_47_00_11[i]) | (~rbl0_48_63_00_11[i]);
assign rd1_dat[i] = (~rbl1_00_15_00_11[i]) | (~rbl1_16_31_00_11[i]) | (~rbl1_32_47_00_11[i]) | (~rbl1_48_63_00_11[i]); assign rd1_dat[i] = (~rbl1_00_15_00_11[i]) | (~rbl1_16_31_00_11[i]) | (~rbl1_32_47_00_11[i]) | (~rbl1_48_63_00_11[i]);
end end


for (i = 0; i < 12; i = i + 1) begin for (i = 0; i < 12; i = i + 1) begin
assign rd0_dat[i+12] = (~rbl0_00_15_12_23[i]) | (~rbl0_16_31_12_23[i]) | (~rbl0_32_47_12_23[i]) | (~rbl0_48_63_12_23[i]); assign rd0_dat[i+12] = (~rbl0_00_15_12_23[i]) | (~rbl0_16_31_12_23[i]) | (~rbl0_32_47_12_23[i]) | (~rbl0_48_63_12_23[i]);
assign rd1_dat[i+12] = (~rbl1_00_15_12_23[i]) | (~rbl1_16_31_12_23[i]) | (~rbl1_32_47_12_23[i]) | (~rbl1_48_63_12_23[i]); assign rd1_dat[i+12] = (~rbl1_00_15_12_23[i]) | (~rbl1_16_31_12_23[i]) | (~rbl1_32_47_12_23[i]) | (~rbl1_48_63_12_23[i]);
end end


endgenerate assign wbl_00_15_00_11 = wr0_dat[0:11];
assign wbl_00_15_12_23 = wr0_dat[12:23];
assign wbl_16_31_00_11 = wr0_dat[0:11];
assign wbl_16_31_12_23 = wr0_dat[12:23];
assign wbl_32_47_00_11 = wr0_dat[0:11];
assign wbl_32_47_12_23 = wr0_dat[12:23];
assign wbl_48_63_00_11 = wr0_dat[0:11];
assign wbl_48_63_12_23 = wr0_dat[12:23];


assign wbl_00_15_00_11 = wr0_dat[0:11]; end else begin
assign wbl_00_15_12_23 = wr0_dat[12:23];
assign wbl_16_31_00_11 = wr0_dat[0:11]; for (i = 0; i < 12; i = i + 1) begin
assign wbl_16_31_12_23 = wr0_dat[12:23]; assign rd0_dat[i] = rbl0_00_31_00_11[i] | rbl0_32_63_00_11[i];
assign wbl_32_47_00_11 = wr0_dat[0:11]; assign rd1_dat[i] = rbl1_00_31_00_11[i] | rbl1_32_63_00_11[i];
assign wbl_32_47_12_23 = wr0_dat[12:23]; end
assign wbl_48_63_00_11 = wr0_dat[0:11];
assign wbl_48_63_12_23 = wr0_dat[12:23]; for (i = 0; i < 12; i = i + 1) begin
assign rd0_dat[i+12] = rbl0_00_31_12_23[i] | rbl0_32_63_12_23[i];
assign rd1_dat[i+12] = rbl1_00_31_12_23[i] | rbl1_32_63_12_23[i];
end

assign wbl_00_31_00_11 = wr0_dat[0:11];
assign wbl_00_31_12_23 = wr0_dat[12:23];
assign wbl_32_63_00_11 = wr0_dat[0:11];
assign wbl_32_63_12_23 = wr0_dat[12:23];

end
endgenerate


endmodule endmodule

@ -88,67 +88,67 @@ assign RBL1 = ~(mem_00 & {12{RWL1[0]}}) &
~(mem_15 & {12{RWL1[15]}}); ~(mem_15 & {12{RWL1[15]}});


always @(posedge WWL[0]) begin always @(posedge WWL[0]) begin
mem_00 <= ~WBLb; mem_00 <= WBL | ~WBLb;
end end


always @(posedge WWL[1]) begin always @(posedge WWL[1]) begin
mem_01 <= ~WBLb; mem_01 <= WBL | ~WBLb;
end end


always @(posedge WWL[2]) begin always @(posedge WWL[2]) begin
mem_02 <= ~WBLb; mem_02 <= WBL | ~WBLb;
end end


always @(posedge WWL[3]) begin always @(posedge WWL[3]) begin
mem_03 <= ~WBLb; mem_03 <= WBL | ~WBLb;
end end


always @(posedge WWL[4]) begin always @(posedge WWL[4]) begin
mem_04 <= ~WBLb; mem_04 <= WBL | ~WBLb;
end end


always @(posedge WWL[5]) begin always @(posedge WWL[5]) begin
mem_05 <= ~WBLb; mem_05 <= WBL | ~WBLb;
end end


always @(posedge WWL[6]) begin always @(posedge WWL[6]) begin
mem_06 <= ~WBLb; mem_06 <= WBL | ~WBLb;
end end


always @(posedge WWL[7]) begin always @(posedge WWL[7]) begin
mem_07 <= ~WBLb; mem_07 <= WBL | ~WBLb;
end end


always @(posedge WWL[8]) begin always @(posedge WWL[8]) begin
mem_08 <= ~WBLb; mem_08 <= WBL | ~WBLb;
end end


always @(posedge WWL[9]) begin always @(posedge WWL[9]) begin
mem_09 <= ~WBLb; mem_09 <= WBL | ~WBLb;
end end


always @(posedge WWL[10]) begin always @(posedge WWL[10]) begin
mem_10 <= ~WBLb; mem_10 <= WBL | ~WBLb;
end end


always @(posedge WWL[11]) begin always @(posedge WWL[11]) begin
mem_11 <= ~WBLb; mem_11 <= WBL | ~WBLb;
end end


always @(posedge WWL[12]) begin always @(posedge WWL[12]) begin
mem_12 <= ~WBLb; mem_12 <= WBL | ~WBLb;
end end


always @(posedge WWL[13]) begin always @(posedge WWL[13]) begin
mem_13 <= ~WBLb; mem_13 <= WBL | ~WBLb;
end end


always @(posedge WWL[14]) begin always @(posedge WWL[14]) begin
mem_14 <= ~WBLb; mem_14 <= WBL | ~WBLb;
end end


always @(posedge WWL[15]) begin always @(posedge WWL[15]) begin
mem_15 <= ~WBLb; mem_15 <= WBL | ~WBLb;
end end


// assert errors (multiwrite, etc.) // assert errors (multiwrite, etc.)

@ -67,168 +67,167 @@ reg [0:11] mem_30;
reg [0:11] mem_31; reg [0:11] mem_31;


// word-select // word-select
// the bits are negative-active at this point in the 16x12 but // the local eval is done between subarray pairs, and bits are positive going out
// the local eval is done between subarray pairs, so bits are positive going out assign RBL0 = ((mem_00 & {12{RWL0[0]}}) | (mem_16 & {12{RWL0[16]}})) |
assign RBL0 = ~((mem_00 & {12{RWL0[0]}}) & (mem_16 & {12{RWL0[16]}})) & ((mem_01 & {12{RWL0[1]}}) | (mem_17 & {12{RWL0[17]}})) |
~((mem_01 & {12{RWL0[1]}}) & (mem_17 & {12{RWL0[17]}})) & ((mem_02 & {12{RWL0[2]}}) | (mem_18 & {12{RWL0[18]}})) |
~((mem_02 & {12{RWL0[2]}}) & (mem_18 & {12{RWL0[18]}})) & ((mem_03 & {12{RWL0[3]}}) | (mem_19 & {12{RWL0[19]}})) |
~((mem_03 & {12{RWL0[3]}}) & (mem_19 & {12{RWL0[19]}})) & ((mem_04 & {12{RWL0[4]}}) | (mem_20 & {12{RWL0[20]}})) |
~((mem_04 & {12{RWL0[4]}}) & (mem_20 & {12{RWL0[20]}})) & ((mem_05 & {12{RWL0[5]}}) | (mem_21 & {12{RWL0[21]}})) |
~((mem_05 & {12{RWL0[5]}}) & (mem_21 & {12{RWL0[21]}})) & ((mem_06 & {12{RWL0[6]}}) | (mem_22 & {12{RWL0[22]}})) |
~((mem_06 & {12{RWL0[6]}}) & (mem_22 & {12{RWL0[22]}})) & ((mem_07 & {12{RWL0[7]}}) | (mem_23 & {12{RWL0[23]}})) |
~((mem_07 & {12{RWL0[7]}}) & (mem_23 & {12{RWL0[23]}})) & ((mem_08 & {12{RWL0[8]}}) | (mem_24 & {12{RWL0[24]}})) |
~((mem_08 & {12{RWL0[8]}}) & (mem_24 & {12{RWL0[24]}})) & ((mem_09 & {12{RWL0[9]}}) | (mem_25 & {12{RWL0[25]}})) |
~((mem_09 & {12{RWL0[9]}}) & (mem_25 & {12{RWL0[25]}})) & ((mem_10 & {12{RWL0[10]}}) | (mem_26 & {12{RWL0[26]}})) |
~((mem_10 & {12{RWL0[10]}}) & (mem_26 & {12{RWL0[26]}})) & ((mem_11 & {12{RWL0[11]}}) | (mem_27 & {12{RWL0[27]}})) |
~((mem_11 & {12{RWL0[11]}}) & (mem_27 & {12{RWL0[27]}})) & ((mem_12 & {12{RWL0[12]}}) | (mem_28 & {12{RWL0[28]}})) |
~((mem_12 & {12{RWL0[12]}}) & (mem_28 & {12{RWL0[28]}})) & ((mem_13 & {12{RWL0[13]}}) | (mem_29 & {12{RWL0[29]}})) |
~((mem_13 & {12{RWL0[13]}}) & (mem_29 & {12{RWL0[29]}})) & ((mem_14 & {12{RWL0[14]}}) | (mem_30 & {12{RWL0[30]}})) |
~((mem_14 & {12{RWL0[14]}}) & (mem_30 & {12{RWL0[30]}})) & ((mem_15 & {12{RWL0[15]}}) | (mem_31 & {12{RWL0[31]}}));
~((mem_15 & {12{RWL0[15]}}) & (mem_31 & {12{RWL0[31]}}));

assign RBL1 = ((mem_00 & {12{RWL1[0]}}) | (mem_16 & {12{RWL1[16]}})) |
assign RBL0 = ~((mem_00 & {12{RWL1[0]}}) & (mem_16 & {12{RWL1[16]}})) & ((mem_01 & {12{RWL1[1]}}) | (mem_17 & {12{RWL1[17]}})) |
~((mem_01 & {12{RWL1[1]}}) & (mem_17 & {12{RWL1[17]}})) & ((mem_02 & {12{RWL1[2]}}) | (mem_18 & {12{RWL1[18]}})) |
~((mem_02 & {12{RWL1[2]}}) & (mem_18 & {12{RWL1[18]}})) & ((mem_03 & {12{RWL1[3]}}) | (mem_19 & {12{RWL1[19]}})) |
~((mem_03 & {12{RWL1[3]}}) & (mem_19 & {12{RWL1[19]}})) & ((mem_04 & {12{RWL1[4]}}) | (mem_20 & {12{RWL1[20]}})) |
~((mem_04 & {12{RWL1[4]}}) & (mem_20 & {12{RWL1[20]}})) & ((mem_05 & {12{RWL1[5]}}) | (mem_21 & {12{RWL1[21]}})) |
~((mem_05 & {12{RWL1[5]}}) & (mem_21 & {12{RWL1[21]}})) & ((mem_06 & {12{RWL1[6]}}) | (mem_22 & {12{RWL1[22]}})) |
~((mem_06 & {12{RWL1[6]}}) & (mem_22 & {12{RWL1[22]}})) & ((mem_07 & {12{RWL1[7]}}) | (mem_23 & {12{RWL1[23]}})) |
~((mem_07 & {12{RWL1[7]}}) & (mem_23 & {12{RWL1[23]}})) & ((mem_08 & {12{RWL1[8]}}) | (mem_24 & {12{RWL1[24]}})) |
~((mem_08 & {12{RWL1[8]}}) & (mem_24 & {12{RWL1[24]}})) & ((mem_09 & {12{RWL1[9]}}) | (mem_25 & {12{RWL1[25]}})) |
~((mem_09 & {12{RWL1[9]}}) & (mem_25 & {12{RWL1[25]}})) & ((mem_10 & {12{RWL1[10]}}) | (mem_26 & {12{RWL1[26]}})) |
~((mem_10 & {12{RWL1[10]}}) & (mem_26 & {12{RWL1[26]}})) & ((mem_11 & {12{RWL1[11]}}) | (mem_27 & {12{RWL1[27]}})) |
~((mem_11 & {12{RWL1[11]}}) & (mem_27 & {12{RWL1[27]}})) & ((mem_12 & {12{RWL1[12]}}) | (mem_28 & {12{RWL1[28]}})) |
~((mem_12 & {12{RWL1[12]}}) & (mem_28 & {12{RWL1[28]}})) & ((mem_13 & {12{RWL1[13]}}) | (mem_29 & {12{RWL1[29]}})) |
~((mem_13 & {12{RWL1[13]}}) & (mem_29 & {12{RWL1[29]}})) & ((mem_14 & {12{RWL1[14]}}) | (mem_30 & {12{RWL1[30]}})) |
~((mem_14 & {12{RWL1[14]}}) & (mem_30 & {12{RWL1[30]}})) & ((mem_15 & {12{RWL1[15]}}) | (mem_31 & {12{RWL1[31]}}));
~((mem_15 & {12{RWL1[15]}}) & (mem_31 & {12{RWL1[31]}}));


always @(posedge WWL[0]) begin always @(posedge WWL[0]) begin
mem_00 <= ~WBLb; mem_00 <= WBL | ~WBLb;
end end


always @(posedge WWL[1]) begin always @(posedge WWL[1]) begin
mem_01 <= ~WBLb; mem_01 <= WBL | ~WBLb;
end end


always @(posedge WWL[2]) begin always @(posedge WWL[2]) begin
mem_02 <= ~WBLb; mem_02 <= WBL | ~WBLb;
end end


always @(posedge WWL[3]) begin always @(posedge WWL[3]) begin
mem_03 <= ~WBLb; mem_03 <= WBL | ~WBLb;
end end


always @(posedge WWL[4]) begin always @(posedge WWL[4]) begin
mem_04 <= ~WBLb; mem_04 <= WBL | ~WBLb;
end end


always @(posedge WWL[5]) begin always @(posedge WWL[5]) begin
mem_05 <= ~WBLb; mem_05 <= WBL | ~WBLb;
end end


always @(posedge WWL[6]) begin always @(posedge WWL[6]) begin
mem_06 <= ~WBLb; mem_06 <= WBL | ~WBLb;
end end


always @(posedge WWL[7]) begin always @(posedge WWL[7]) begin
mem_07 <= ~WBLb; mem_07 <= WBL | ~WBLb;
end end


always @(posedge WWL[8]) begin always @(posedge WWL[8]) begin
mem_08 <= ~WBLb; mem_08 <= WBL | ~WBLb;
end end


always @(posedge WWL[9]) begin always @(posedge WWL[9]) begin
mem_09 <= ~WBLb; mem_09 <= WBL | ~WBLb;
end end


always @(posedge WWL[10]) begin always @(posedge WWL[10]) begin
mem_10 <= ~WBLb; mem_10 <= WBL | ~WBLb;
end end


always @(posedge WWL[11]) begin always @(posedge WWL[11]) begin
mem_11 <= ~WBLb; mem_11 <= WBL | ~WBLb;
end end


always @(posedge WWL[12]) begin always @(posedge WWL[12]) begin
mem_12 <= ~WBLb; mem_12 <= WBL | ~WBLb;
end end


always @(posedge WWL[13]) begin always @(posedge WWL[13]) begin
mem_13 <= ~WBLb; mem_13 <= WBL | ~WBLb;
end end


always @(posedge WWL[14]) begin always @(posedge WWL[14]) begin
mem_14 <= ~WBLb; mem_14 <= WBL | ~WBLb;
end end


always @(posedge WWL[15]) begin always @(posedge WWL[15]) begin
mem_15 <= ~WBLb; mem_15 <= WBL | ~WBLb;
end end


always @(posedge WWL[16]) begin always @(posedge WWL[16]) begin
mem_16 <= ~WBLb; mem_16 <= WBL | ~WBLb;
end end


always @(posedge WWL[17]) begin always @(posedge WWL[17]) begin
mem_17 <= ~WBLb; mem_17 <= WBL | ~WBLb;
end end


always @(posedge WWL[18]) begin always @(posedge WWL[18]) begin
mem_18 <= ~WBLb; mem_18 <= WBL | ~WBLb;
end end


always @(posedge WWL[19]) begin always @(posedge WWL[19]) begin
mem_19 <= ~WBLb; mem_19 <= WBL | ~WBLb;
end end


always @(posedge WWL[20]) begin always @(posedge WWL[20]) begin
mem_20 <= ~WBLb; mem_20 <= WBL | ~WBLb;
end end


always @(posedge WWL[21]) begin always @(posedge WWL[21]) begin
mem_21 <= ~WBLb; mem_21 <= WBL | ~WBLb;
end end


always @(posedge WWL[22]) begin always @(posedge WWL[22]) begin
mem_22 <= ~WBLb; mem_22 <= WBL | ~WBLb;
end end


always @(posedge WWL[23]) begin always @(posedge WWL[23]) begin
mem_23 <= ~WBLb; mem_23 <= WBL | ~WBLb;
end end


always @(posedge WWL[24]) begin always @(posedge WWL[24]) begin
mem_24 <= ~WBLb; mem_24 <= WBL | ~WBLb;
end end


always @(posedge WWL[25]) begin always @(posedge WWL[25]) begin
mem_25 <= ~WBLb; mem_25 <= WBL | ~WBLb;
end end


always @(posedge WWL[26]) begin always @(posedge WWL[26]) begin
mem_26 <= ~WBLb; mem_26 <= WBL | ~WBLb;
end end


always @(posedge WWL[27]) begin always @(posedge WWL[27]) begin
mem_27 <= ~WBLb; mem_27 <= WBL | ~WBLb;
end end


always @(posedge WWL[28]) begin always @(posedge WWL[28]) begin
mem_28 <= ~WBLb; mem_28 <= WBL | ~WBLb;
end end


always @(posedge WWL[29]) begin always @(posedge WWL[29]) begin
mem_29 <= ~WBLb; mem_29 <= WBL | ~WBLb;
end end


always @(posedge WWL[30]) begin always @(posedge WWL[30]) begin
mem_30 <= ~WBLb; mem_30 <= WBL | ~WBLb;
end end


always @(posedge WWL[31]) begin always @(posedge WWL[31]) begin
mem_31 <= ~WBLb; mem_31 <= WBL | ~WBLb;
end end


// assert errors (multiwrite, etc.) // assert errors (multiwrite, etc.)

@ -20,10 +20,13 @@


// Behavioral for 64x24 toysram (sdr or ddr), 'shard' (semi-hard) // Behavioral for 64x24 toysram (sdr or ddr), 'shard' (semi-hard)
// 16x12 hard subarrays plus decoder, eval, io comps // 16x12 hard subarrays plus decoder, eval, io comps
// OR
// 32x12 hard subarrays plus decoder, io comps


`timescale 1 ps / 1 ps `timescale 1 ps / 1 ps

module regfile_shard_64x24_2r1w_comp #(
module regfile_shard_64x24_2r1w_comp ( parameter integer RA_32x12 = 1
) (


input rd0_c_na0, input rd0_c_na0,
input rd0_c_a0, input rd0_c_a0,
@ -228,7 +231,6 @@ wire [0:11] wbl0_b_0x1;
wire [0:11] wbl0_b_1x0; wire [0:11] wbl0_b_1x0;
wire [0:11] wbl0_b_1x1; wire [0:11] wbl0_b_1x1;



// subarray cells; 4x2 16w/12b subarrays // subarray cells; 4x2 16w/12b subarrays
// //
// bits are stacked vertically, words horizontally // bits are stacked vertically, words horizontally
@ -258,8 +260,15 @@ wire [0:11] wbl0_b_1x1;
// 00x=W0xx0xx 01x=W0xx1xx 10x=W1xx0xx 11x=W1xx1xx (0xx=W0xxxxx, 1xx=W1xxxxx) // 00x=W0xx0xx 01x=W0xx1xx 10x=W1xx0xx 11x=W1xx1xx (0xx=W0xxxxx, 1xx=W1xxxxx)
// if @3 is final select, subarrays: // if @3 is final select, subarrays:
// 00x=W0xx0xx 01x=W1xx0xx 10x=W0xx1xx 11x=W1xx1xx (0xx=Wxxx0xx, 1xx=Wxxx1xx) // 00x=W0xx0xx 01x=W1xx0xx 10x=W0xx1xx 11x=W1xx1xx (0xx=Wxxx0xx, 1xx=Wxxx1xx)
//
// 32x12 subarrays are L/R pairs and local eval

// subarrays
generate

if (RA_32x12 == 0) begin


toysram_16x12 r000 ( toysram_16x12 r000 (
.RWL0(rwl0_000), .RWL0(rwl0_000),
.RWL1(rwl1_000), .RWL1(rwl1_000),
.WWL(wwl0_000), .WWL(wwl0_000),
@ -267,8 +276,8 @@ toysram_16x12 r000 (
.RBL1(rbl1_000), .RBL1(rbl1_000),
.WBL(wbl0_000), .WBL(wbl0_000),
.WBLb(wbl0_b_000) .WBLb(wbl0_b_000)
); );
toysram_16x12 r001 ( toysram_16x12 r001 (
.RWL0(rwl0_001), .RWL0(rwl0_001),
.RWL1(rwl1_001), .RWL1(rwl1_001),
.WWL(wwl0_001), .WWL(wwl0_001),
@ -276,9 +285,9 @@ toysram_16x12 r001 (
.RBL1(rbl1_001), .RBL1(rbl1_001),
.WBL(wbl0_001), .WBL(wbl0_001),
.WBLb(wbl0_b_001) .WBLb(wbl0_b_001)
); );


toysram_16x12 r010 ( toysram_16x12 r010 (
.RWL0(rwl0_010), .RWL0(rwl0_010),
.RWL1(rwl1_010), .RWL1(rwl1_010),
.WWL(wwl0_010), .WWL(wwl0_010),
@ -286,9 +295,9 @@ toysram_16x12 r010 (
.RBL1(rbl1_010), .RBL1(rbl1_010),
.WBL(wbl0_010), .WBL(wbl0_010),
.WBLb(wbl0_b_010) .WBLb(wbl0_b_010)
); );


toysram_16x12 r011 ( toysram_16x12 r011 (
.RWL0(rwl0_011), .RWL0(rwl0_011),
.RWL1(rwl1_011), .RWL1(rwl1_011),
.WWL(wwl0_011), .WWL(wwl0_011),
@ -296,9 +305,9 @@ toysram_16x12 r011 (
.RBL1(rbl1_011), .RBL1(rbl1_011),
.WBL(wbl0_011), .WBL(wbl0_011),
.WBLb(wbl0_b_011) .WBLb(wbl0_b_011)
); );


toysram_16x12 r100 ( toysram_16x12 r100 (
.RWL0(rwl0_100), .RWL0(rwl0_100),
.RWL1(rwl1_100), .RWL1(rwl1_100),
.WWL(wwl0_100), .WWL(wwl0_100),
@ -306,9 +315,9 @@ toysram_16x12 r100 (
.RBL1(rbl1_100), .RBL1(rbl1_100),
.WBL(wbl0_100), .WBL(wbl0_100),
.WBLb(wbl0_b_100) .WBLb(wbl0_b_100)
); );


toysram_16x12 r101 ( toysram_16x12 r101 (
.RWL0(rwl0_101), .RWL0(rwl0_101),
.RWL1(rwl1_101), .RWL1(rwl1_101),
.WWL(wwl0_101), .WWL(wwl0_101),
@ -316,9 +325,9 @@ toysram_16x12 r101 (
.RBL1(rbl1_101), .RBL1(rbl1_101),
.WBL(wbl0_101), .WBL(wbl0_101),
.WBLb(wbl0_b_101) .WBLb(wbl0_b_101)
); );


toysram_16x12 r110 ( toysram_16x12 r110 (
.RWL0(rwl0_110), .RWL0(rwl0_110),
.RWL1(rwl1_110), .RWL1(rwl1_110),
.WWL(wwl0_110), .WWL(wwl0_110),
@ -326,9 +335,9 @@ toysram_16x12 r110 (
.RBL1(rbl1_110), .RBL1(rbl1_110),
.WBL(wbl0_110), .WBL(wbl0_110),
.WBLb(wbl0_b_110) .WBLb(wbl0_b_110)
); );


toysram_16x12 r111 ( toysram_16x12 r111 (
.RWL0(rwl0_111), .RWL0(rwl0_111),
.RWL1(rwl1_111), .RWL1(rwl1_111),
.WWL(wwl0_111), .WWL(wwl0_111),
@ -336,7 +345,55 @@ toysram_16x12 r111 (
.RBL1(rbl1_111), .RBL1(rbl1_111),
.WBL(wbl0_111), .WBL(wbl0_111),
.WBLb(wbl0_b_111) .WBLb(wbl0_b_111)
); );

end else begin

// words 00:31
toysram_32x12 r00 (
.RWL0(rwl0_0x0),
.RWL1(rwl1_0x0),
.WWL(wwl0_0x0),
.RBL0(rbl0_0x0),
.RBL1(rbl1_0x0),
.WBL(wbl0_0x0),
.WBLb(wbl0_b_0x0)
);

toysram_32x12 r01 (
.RWL0(rwl0_0x1),
.RWL1(rwl1_0x1),
.WWL(wwl0_0x1),
.RBL0(rbl0_0x1),
.RBL1(rbl1_0x1),
.WBL(wbl0_0x1),
.WBLb(wbl0_b_0x1)
);

// words 32:47
toysram_32x12 r10 (
.RWL0(rwl0_1x0),
.RWL1(rwl1_1x0),
.WWL(wwl0_1x0),
.RBL0(rbl0_1x0),
.RBL1(rbl1_1x0),
.WBL(wbl0_1x0),
.WBLb(wbl0_b_1x0)
);

// words 48:63
toysram_32x12 r11 (
.RWL0(rwl0_1x1),
.RWL1(rwl1_1x1),
.WWL(wwl0_1x1),
.RBL0(rbl0_1x1),
.RBL1(rbl1_1x1),
.WBL(wbl0_1x1),
.WBLb(wbl0_b_1x1)
);

end
endgenerate


// wordline decodes to one-hots; separate copies for up/down // wordline decodes to one-hots; separate copies for up/down
// separate comps for L/R so i/o macro can divide the center; a3 // separate comps for L/R so i/o macro can divide the center; a3
@ -441,6 +498,10 @@ wordlines_comp_32 dcd_1 (


); );


generate

if (RA_32x12 == 0) begin

assign rwl0_000 = rwl0_0x0[0:15]; assign rwl0_000 = rwl0_0x0[0:15];
assign rwl0_001 = rwl0_0x1[0:15]; assign rwl0_001 = rwl0_0x1[0:15];
assign rwl0_010 = rwl0_0x0[16:31]; assign rwl0_010 = rwl0_0x0[16:31];
@ -468,48 +529,52 @@ wordlines_comp_32 dcd_1 (
assign wwl0_110 = wwl0_1x0[16:31]; assign wwl0_110 = wwl0_1x0[16:31];
assign wwl0_111 = wwl0_1x1[16:31]; assign wwl0_111 = wwl0_1x1[16:31];


// local eval // local eval


//wtf move to decode! //wtf move to decode!
// precharge repower // precharge repower
// during precharge c_na0 = c_a0 = 0 // during precharge c_na0 = c_a0 = 0
// 4 copies to 000/010, 001/011, 100/110, 101,111 quads // 4 copies to 000/010, 001/011, 100/110, 101,111 quads
// rd0 // rd0
sky130_fd_sc_hd__inv_2 inv0_0x0_b (.A(rd0_c_na0), .Y(pre0_0x0_b)); sky130_fd_sc_hd__inv_2 inv0_0x0_b (.A(rd0_c_na0), .Y(pre0_0x0_b));
sky130_fd_sc_hd__inv_2 inv0_0x0 (.A(pre0_0x0_b), .Y(pre0_0x0)); sky130_fd_sc_hd__inv_2 inv0_0x0 (.A(pre0_0x0_b), .Y(pre0_0x0));
sky130_fd_sc_hd__inv_2 inv0_0x1_b (.A(rd0_c_na0), .Y(pre0_0x1_b)); sky130_fd_sc_hd__inv_2 inv0_0x1_b (.A(rd0_c_na0), .Y(pre0_0x1_b));
sky130_fd_sc_hd__inv_2 inv0_0x1 (.A(pre0_0x1_b), .Y(pre0_0x1)); sky130_fd_sc_hd__inv_2 inv0_0x1 (.A(pre0_0x1_b), .Y(pre0_0x1));
sky130_fd_sc_hd__inv_2 inv0_1x0_b (.A(rd0_c_a0), .Y(pre0_1x0_b)); sky130_fd_sc_hd__inv_2 inv0_1x0_b (.A(rd0_c_a0), .Y(pre0_1x0_b));
sky130_fd_sc_hd__inv_2 inv0_1x0 (.A(pre0_1x0_b), .Y(pre0_1x0)); sky130_fd_sc_hd__inv_2 inv0_1x0 (.A(pre0_1x0_b), .Y(pre0_1x0));
sky130_fd_sc_hd__inv_2 inv0_1x1_b (.A(rd0_c_a0), .Y(pre0_1x1_b)); sky130_fd_sc_hd__inv_2 inv0_1x1_b (.A(rd0_c_a0), .Y(pre0_1x1_b));
sky130_fd_sc_hd__inv_2 inv0_1x1 (.A(pre0_1x1_b), .Y(pre0_1x1)); sky130_fd_sc_hd__inv_2 inv0_1x1 (.A(pre0_1x1_b), .Y(pre0_1x1));
// rd1 // rd1
sky130_fd_sc_hd__inv_2 inv1_0x0_b (.A(rd0_c_na0), .Y(pre1_0x0_b)); sky130_fd_sc_hd__inv_2 inv1_0x0_b (.A(rd0_c_na0), .Y(pre1_0x0_b));
sky130_fd_sc_hd__inv_2 inv1_0x0 (.A(pre1_0x0_b), .Y(pre1_0x0)); sky130_fd_sc_hd__inv_2 inv1_0x0 (.A(pre1_0x0_b), .Y(pre1_0x0));
sky130_fd_sc_hd__inv_2 inv1_0x1_b (.A(rd0_c_na0), .Y(pre1_0x1_b)); sky130_fd_sc_hd__inv_2 inv1_0x1_b (.A(rd0_c_na0), .Y(pre1_0x1_b));
sky130_fd_sc_hd__inv_2 inv1_0x1 (.A(pre1_0x1_b), .Y(pre1_0x1)); sky130_fd_sc_hd__inv_2 inv1_0x1 (.A(pre1_0x1_b), .Y(pre1_0x1));
sky130_fd_sc_hd__inv_2 inv1_1x0_b (.A(rd0_c_a0), .Y(pre1_1x0_b)); sky130_fd_sc_hd__inv_2 inv1_1x0_b (.A(rd0_c_a0), .Y(pre1_1x0_b));
sky130_fd_sc_hd__inv_2 inv1_1x0 (.A(pre1_1x0_b), .Y(pre1_1x0)); sky130_fd_sc_hd__inv_2 inv1_1x0 (.A(pre1_1x0_b), .Y(pre1_1x0));
sky130_fd_sc_hd__inv_2 inv1_1x1_b (.A(rd0_c_a0), .Y(pre1_1x1_b)); sky130_fd_sc_hd__inv_2 inv1_1x1_b (.A(rd0_c_a0), .Y(pre1_1x1_b));
sky130_fd_sc_hd__inv_2 inv1_1x1 (.A(pre1_1x1_b), .Y(pre1_1x1)); sky130_fd_sc_hd__inv_2 inv1_1x1 (.A(pre1_1x1_b), .Y(pre1_1x1));


// quad local evals, 2 ports // quad local evals, 2 ports
local_eval_comp eval_0x0 ( local_eval_comp eval_0x0 (
.PRE0_b(pre0_0x0), .RBL0_L(rbl0_000), .RBL0_R(rbl0_010), .RBL0_O_b(rbl0_0x0), .PRE0_b(pre0_0x0), .RBL0_L(rbl0_000), .RBL0_R(rbl0_010), .RBL0_O_b(rbl0_0x0),
.PRE1_b(pre1_0x0), .RBL1_L(rbl1_000), .RBL1_R(rbl1_010), .RBL1_O_b(rbl1_0x0) .PRE1_b(pre1_0x0), .RBL1_L(rbl1_000), .RBL1_R(rbl1_010), .RBL1_O_b(rbl1_0x0)
); );
local_eval_comp eval_0x1 ( local_eval_comp eval_0x1 (
.PRE0_b(pre0_0x1), .RBL0_L(rbl0_001), .RBL0_R(rbl0_011), .RBL0_O_b(rbl0_0x1), .PRE0_b(pre0_0x1), .RBL0_L(rbl0_001), .RBL0_R(rbl0_011), .RBL0_O_b(rbl0_0x1),
.PRE1_b(pre1_0x1), .RBL1_L(rbl1_001), .RBL1_R(rbl1_011), .RBL1_O_b(rbl1_0x1) .PRE1_b(pre1_0x1), .RBL1_L(rbl1_001), .RBL1_R(rbl1_011), .RBL1_O_b(rbl1_0x1)
); );
local_eval_comp eval_1x0 ( local_eval_comp eval_1x0 (
.PRE0_b(pre0_1x0), .RBL0_L(rbl0_100), .RBL0_R(rbl0_110), .RBL0_O_b(rbl0_1x0), .PRE0_b(pre0_1x0), .RBL0_L(rbl0_100), .RBL0_R(rbl0_110), .RBL0_O_b(rbl0_1x0),
.PRE1_b(pre1_1x0), .RBL1_L(rbl1_100), .RBL1_R(rbl1_110), .RBL1_O_b(rbl1_1x0) .PRE1_b(pre1_1x0), .RBL1_L(rbl1_100), .RBL1_R(rbl1_110), .RBL1_O_b(rbl1_1x0)
); );
local_eval_comp eval_1x1 ( local_eval_comp eval_1x1 (
.PRE0_b(pre0_1x1), .RBL0_L(rbl0_101), .RBL0_R(rbl0_111), .RBL0_O_b(rbl0_1x1), .PRE0_b(pre0_1x1), .RBL0_L(rbl0_101), .RBL0_R(rbl0_111), .RBL0_O_b(rbl0_1x1),
.PRE1_b(pre1_1x1), .RBL1_L(rbl1_101), .RBL1_R(rbl1_111), .RBL1_O_b(rbl1_1x1) .PRE1_b(pre1_1x1), .RBL1_L(rbl1_101), .RBL1_R(rbl1_111), .RBL1_O_b(rbl1_1x1)
); );

end

endgenerate


// separate ports by quads for placement // separate ports by quads for placement
// address passes through - should start decode here // address passes through - should start decode here
@ -620,6 +685,15 @@ inout_comp io (


); );


assign wbl0_000 = wbl0_0x0;
assign wbl0_001 = wbl0_0x1;
assign wbl0_010 = wbl0_0x0;
assign wbl0_011 = wbl0_0x1;
assign wbl0_100 = wbl0_1x0;
assign wbl0_101 = wbl0_0x1;
assign wbl0_110 = wbl0_1x0;
assign wbl0_111 = wbl0_0x1;

assign wbl0_b_000 = wbl0_b_0x0; assign wbl0_b_000 = wbl0_b_0x0;
assign wbl0_b_001 = wbl0_b_0x1; assign wbl0_b_001 = wbl0_b_0x1;
assign wbl0_b_010 = wbl0_b_0x0; assign wbl0_b_010 = wbl0_b_0x0;

Loading…
Cancel
Save