Added Memory
diff --git a/verilog/rtl/imem.hex b/verilog/rtl/imem.hex
new file mode 100644
index 0000000..8437560
--- /dev/null
+++ b/verilog/rtl/imem.hex
@@ -0,0 +1,4 @@
+00000013

+00d50513

+04a02023

+04002583
\ No newline at end of file
diff --git a/verilog/rtl/sky130_sram_1kbyte_1rw1r_32x256_8.v b/verilog/rtl/sky130_sram_1kbyte_1rw1r_32x256_8.v
new file mode 100644
index 0000000..bc0cdf0
--- /dev/null
+++ b/verilog/rtl/sky130_sram_1kbyte_1rw1r_32x256_8.v
@@ -0,0 +1,115 @@
+// OpenRAM SRAM model

+// Words: 256

+// Word size: 32

+// Write size: 8

+

+module sky130_sram_1kbyte_1rw1r_32x256_8(

+  `ifdef USE_POWER_PINS

+      vccd1,

+      vssd1,

+  `endif

+  // Port 0: RW

+      clk0,csb0,web0,wmask0,addr0,din0,dout0,

+  // Port 1: R

+      clk1,csb1,addr1,dout1

+    );

+  

+    parameter NUM_WMASKS = 4 ;

+    parameter DATA_WIDTH = 32 ;

+    parameter ADDR_WIDTH = 8 ;

+    parameter RAM_DEPTH = 1 << ADDR_WIDTH;

+    // FIXME: This delay is arbitrary.

+    parameter DELAY = 3 ;

+    parameter VERBOSE = 1 ; //Set to 0 to only display warnings

+    parameter T_HOLD = 1 ; //Delay to hold dout value after posedge. Value is arbitrary

+  

+  `ifdef USE_POWER_PINS

+      inout vccd1;

+      inout vssd1;

+  `endif

+    input  clk0; // clock

+    input   csb0; // active low chip select

+    input  web0; // active low write control

+    input [NUM_WMASKS-1:0]   wmask0; // write mask

+    input [ADDR_WIDTH-1:0]  addr0;

+    input [DATA_WIDTH-1:0]  din0;

+    output [DATA_WIDTH-1:0] dout0;

+    input  clk1; // clock

+    input   csb1; // active low chip select

+    input [ADDR_WIDTH-1:0]  addr1;

+    output [DATA_WIDTH-1:0] dout1;

+  

+    reg  csb0_reg;

+    reg  web0_reg;

+    reg [NUM_WMASKS-1:0]   wmask0_reg;

+    reg [ADDR_WIDTH-1:0]  addr0_reg;

+    reg [DATA_WIDTH-1:0]  din0_reg;

+    reg [DATA_WIDTH-1:0]  dout0;

+  

+    // All inputs are registers

+    always @(posedge clk0)

+    begin

+      csb0_reg = csb0;

+      web0_reg = web0;

+      wmask0_reg = wmask0;

+      addr0_reg = addr0;

+      din0_reg = din0;

+      #(T_HOLD) dout0 = 32'bx;

+      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 wmask0=%b",addr0_reg,din0_reg,wmask0_reg);

+    end

+  

+    reg  csb1_reg;

+    reg [ADDR_WIDTH-1:0]  addr1_reg;

+    reg [DATA_WIDTH-1:0]  dout1;

+  

+    // All inputs are registers

+    always @(posedge clk1)

+    begin

+      csb1_reg = csb1;

+      addr1_reg = addr1;

+      if (!csb0 && !web0 && !csb1 && (addr0 == addr1))

+           $display($time," WARNING: Writing and reading addr0=%b and addr1=%b simultaneously!",addr0,addr1);

+      #(T_HOLD) dout1 = 32'bx;

+      if ( !csb1_reg && VERBOSE ) 

+        $display($time," Reading %m addr1=%b dout1=%b",addr1_reg,mem[addr1_reg]);

+    end

+  

+  reg [DATA_WIDTH-1:0]    mem [0:RAM_DEPTH-1];

+  

+    // Memory Write Block Port 0

+    // Write Operation : When web0 = 0, csb0 = 0

+    always @ (negedge clk0)

+    begin : MEM_WRITE0

+      if ( !csb0_reg && !web0_reg ) begin

+          if (wmask0_reg[0])

+                  mem[addr0_reg][7:0] = din0_reg[7:0];

+          if (wmask0_reg[1])

+                  mem[addr0_reg][15:8] = din0_reg[15:8];

+          if (wmask0_reg[2])

+                  mem[addr0_reg][23:16] = din0_reg[23:16];

+          if (wmask0_reg[3])

+                  mem[addr0_reg][31:24] = din0_reg[31:24];

+      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];

+    end

+  

+    // Memory Read Block Port 1

+    // Read Operation : When web1 = 1, csb1 = 0

+    always @ (negedge clk1)

+    begin : MEM_READ1

+      if (!csb1_reg)

+         dout1 <= #(DELAY) mem[addr1_reg];

+    end

+  

+  endmodule

+  
\ No newline at end of file
diff --git a/verilog/rtl/sky130_sram_2kbyte_1rw1r_32x512_8.v b/verilog/rtl/sky130_sram_2kbyte_1rw1r_32x512_8.v
new file mode 100644
index 0000000..b1f95b0
--- /dev/null
+++ b/verilog/rtl/sky130_sram_2kbyte_1rw1r_32x512_8.v
@@ -0,0 +1,120 @@
+// OpenRAM SRAM model

+// Words: 512

+// Word size: 32

+// Write size: 8

+

+module sky130_sram_2kbyte_1rw1r_32x512_8(

+    `ifdef USE_POWER_PINS

+        vccd1,

+        vssd1,

+    `endif

+    // Port 0: RW

+        clk0,csb0,web0,wmask0,addr0,din0,dout0,

+    // Port 1: R

+        clk1,csb1,addr1,dout1

+      );

+    

+      parameter NUM_WMASKS = 4 ;

+      parameter DATA_WIDTH = 32 ;

+      parameter ADDR_WIDTH = 9 ;

+      parameter RAM_DEPTH = 1 << ADDR_WIDTH;

+      // FIXME: This delay is arbitrary.

+      parameter DELAY = 3 ;

+      parameter VERBOSE = 1 ; //Set to 0 to only display warnings

+      parameter T_HOLD = 1 ; //Delay to hold dout value after posedge. Value is arbitrary

+    

+    `ifdef USE_POWER_PINS

+        inout vccd1;

+        inout vssd1;

+    `endif

+      input  clk0; // clock

+      input   csb0; // active low chip select

+      input  web0; // active low write control

+      input [NUM_WMASKS-1:0]   wmask0; // write mask

+      input [ADDR_WIDTH-1:0]  addr0;

+      input [DATA_WIDTH-1:0]  din0;

+      output [DATA_WIDTH-1:0] dout0;

+      input  clk1; // clock

+      input   csb1; // active low chip select

+      input [ADDR_WIDTH-1:0]  addr1;

+      output [DATA_WIDTH-1:0] dout1;

+    

+      reg  csb0_reg;

+      reg  web0_reg;

+      reg [NUM_WMASKS-1:0]   wmask0_reg;

+      reg [ADDR_WIDTH-1:0]  addr0_reg;

+      reg [DATA_WIDTH-1:0]  din0_reg;

+      reg [DATA_WIDTH-1:0]  dout0;

+    

+      // All inputs are registers

+      always @(posedge clk0)

+      begin

+        csb0_reg = csb0;

+        web0_reg = web0;

+        wmask0_reg = wmask0;

+        addr0_reg = addr0;

+        din0_reg = din0;

+        #(T_HOLD) dout0 = 32'bx;

+        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 wmask0=%b",addr0_reg,din0_reg,wmask0_reg);

+      end

+    

+      reg  csb1_reg;

+      reg [ADDR_WIDTH-1:0]  addr1_reg;

+      reg [DATA_WIDTH-1:0]  dout1;

+    

+      // All inputs are registers

+      always @(posedge clk1)

+      begin

+        csb1_reg = csb1;

+        addr1_reg = addr1;

+        if (!csb0 && !web0 && !csb1 && (addr0 == addr1))

+             $display($time," WARNING: Writing and reading addr0=%b and addr1=%b simultaneously!",addr0,addr1);

+        #(T_HOLD) dout1 = 32'bx;

+        if ( !csb1_reg && VERBOSE ) 

+          $display($time," Reading %m addr1=%b dout1=%b",addr1_reg,mem[addr1_reg]);

+      end

+    

+    reg [DATA_WIDTH-1:0]    mem [0:RAM_DEPTH-1];

+    

+      // Memory Write Block Port 0

+      // Write Operation : When web0 = 0, csb0 = 0

+      always @ (negedge clk0)

+      begin : MEM_WRITE0

+        if ( !csb0_reg && !web0_reg ) begin

+            if (wmask0_reg[0])

+                    mem[addr0_reg][7:0] = din0_reg[7:0];

+            if (wmask0_reg[1])

+                    mem[addr0_reg][15:8] = din0_reg[15:8];

+            if (wmask0_reg[2])

+                    mem[addr0_reg][23:16] = din0_reg[23:16];

+            if (wmask0_reg[3])

+                    mem[addr0_reg][31:24] = din0_reg[31:24];

+        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];

+      end

+    

+      // Memory Read Block Port 1

+      // Read Operation : When web1 = 1, csb1 = 0

+      always @ (negedge clk1)

+      begin : MEM_READ1

+        if (!csb1_reg)

+           dout1 <= #(DELAY) mem[addr1_reg];

+      end

+

+      initial begin

+        $display("Reading Memory");

+        $readmemh("imem.hex", mem);

+      end

+    

+    endmodule

+    
\ No newline at end of file