From b1585355e18db8767d97b63da9f3162179cb3475 Mon Sep 17 00:00:00 2001 From: Bugra Onal Date: Thu, 3 Mar 2022 11:48:29 -0800 Subject: [PATCH] TEmplate rework --- compiler/base/verilog.py | 21 ++--- compiler/base/verilog_template.v | 84 ++++++++++++++------ compiler/tests/sram_1b_16_1rw_scn4m_subm.log | 2 + compiler/tests/sram_1b_16_1rw_sky130.log | 3 + 4 files changed, 73 insertions(+), 37 deletions(-) create mode 100644 compiler/tests/sram_1b_16_1rw_scn4m_subm.log create mode 100644 compiler/tests/sram_1b_16_1rw_sky130.log diff --git a/compiler/base/verilog.py b/compiler/base/verilog.py index 277aa273..d0edfdbf 100644 --- a/compiler/base/verilog.py +++ b/compiler/base/verilog.py @@ -21,15 +21,8 @@ class verilog: def verilog_write(self, verilog_name): """ Write a behavioral Verilog model. """ - self.vf = open(verilog_name, "w") - - self.vf.write("// OpenRAM SRAM model\n") - self.vf.write("// Words: {0}\n".format(self.num_words)) - self.vf.write("// Word size: {0}\n".format(self.word_size)) if self.write_size: - self.vf.write("// Write size: {0}\n\n".format(self.write_size)) - else: - self.vf.write("\n") + self.template.setSectionRepeat('WRITE_SIZE_CMT', 1) try: self.vdd_name = spice["power"] @@ -40,11 +33,9 @@ class verilog: except KeyError: self.gnd_name = "gnd" - self.vf.write("module {0}(\n".format(self.name)) - self.vf.write("`ifdef USE_POWER_PINS\n") - self.vf.write(" {},\n".format(self.vdd_name)) - self.vf.write(" {},\n".format(self.gnd_name)) - self.vf.write("`endif\n") + self.template.setTextDict('MODULE_NAME', self.name) + self.template.setTextDict('VDD', self.vdd_name) + self.template.setTextDict('GND', self.gnd_name) for port in self.all_ports: if port in self.readwrite_ports: @@ -136,6 +127,10 @@ class verilog: self.vf.write(" reg [ADDR_WIDTH-1:0] addr{0}_reg;\n".format(port)) if port in self.write_ports: self.vf.write(" reg [DATA_WIDTH-1:0] din{0}_reg;\n".format(port)) + self.vf.write("`ifdef USE_POWER_PINS\n") + self.vf.write(" {},\n".format(self.vdd_name)) + self.vf.write(" {},\n".format(self.gnd_name)) + self.vf.write("`endif\n") if port in self.read_ports: self.vf.write(" reg [DATA_WIDTH-1:0] dout{0};\n".format(port)) diff --git a/compiler/base/verilog_template.v b/compiler/base/verilog_template.v index 27b455e0..c033410e 100644 --- a/compiler/base/verilog_template.v +++ b/compiler/base/verilog_template.v @@ -108,13 +108,8 @@ module #$MODULE_NAME$# ( addr#$PORT_NUM$#_reg = addr#$PORT_NUM$#; #RW_CHECKS - if ( !csb0_reg && web0_reg && VERBOSE ) - $display($time," Reading %m addr0=%b dout0=%b",addr0_reg,mem[addr0_reg]); - if ( !csb0_reg && !web0_reg && VERBOSE ) - $display($time," Writing %m addr0=%b din0=%b",addr0_reg,din0_reg); -#>FLOPS #DIN_FLOP @@ -124,30 +119,71 @@ module #$MODULE_NAME$# ( #RW_WMASK +#RW_NO_WMASK #>RW_VERBOSE #R_VERBOSE #W_WMASK +#W_NO_WMASK #>W_VERBOSE end - // Memory Write Block Port 0 - // Write Operation : When web0 = 0, csb0 = 0 - always @ (negedge clk0) - begin : MEM_WRITE0 - if ( !csb0_reg && !web0_reg ) begin - mem[addr0_reg][1:0] = din0_reg[1:0]; +#>FLOPS +#READ +#NO_READ +#W_MASK +#ONE_SPARE_COL +#!NUM!0# +#SPARE_COLS end end - - // Memory Read Block Port 0 - // Read Operation : When web0 = 1, csb0 = 0 - always @ (negedge clk0) - begin : MEM_READ0 - if (!csb0_reg && web0_reg) - dout0 <= #(DELAY) mem[addr0_reg]; +#>W_BLOCK +#WRITE +#NO_WRITE + dout#$PORT_NUM$# <= #(DELAY) mem[addr#$PORT_NUM$#_reg]; end - -e +#>R_BLOCK +endmodule diff --git a/compiler/tests/sram_1b_16_1rw_scn4m_subm.log b/compiler/tests/sram_1b_16_1rw_scn4m_subm.log new file mode 100644 index 00000000..1d80b5f9 --- /dev/null +++ b/compiler/tests/sram_1b_16_1rw_scn4m_subm.log @@ -0,0 +1,2 @@ +ERROR: file magic.py: line 358: sram LVS mismatch (results in /tmp/openram_bugra_12868_temp/sram.lvs.report) + diff --git a/compiler/tests/sram_1b_16_1rw_sky130.log b/compiler/tests/sram_1b_16_1rw_sky130.log new file mode 100644 index 00000000..f6367750 --- /dev/null +++ b/compiler/tests/sram_1b_16_1rw_sky130.log @@ -0,0 +1,3 @@ +ERROR: file design.py: line 47: Custom cell pin names do not match spice file: +['D', 'Q', 'CLK', 'VDD', 'GND'] vs [] +