Added localparam for calculating mem address bits
diff --git a/verilog/rtl/mem_wb.v b/verilog/rtl/mem_wb.v index 607c684..3a16147 100644 --- a/verilog/rtl/mem_wb.v +++ b/verilog/rtl/mem_wb.v
@@ -13,6 +13,9 @@ output [31:0] wb_dat_o ); + + localparam ADR_WIDTH = $clog2(`MEM_WORDS); + wire valid; wire ram_wen; wire [3:0] wen; // write enable @@ -44,13 +47,16 @@ soc_mem `ifndef USE_OPENRAM - #(.WORDS(`MEM_WORDS)) + #( + .WORDS(`MEM_WORDS), + .ADR_WIDTH(ADR_WIDTH) + ) `endif mem ( .clk(wb_clk_i), .ena(valid), .wen(wen), - .addr(wb_adr_i[9:2]), + .addr(wb_adr_i[ADR_WIDTH+1:2]), .wdata(wb_dat_i), .rdata(wb_dat_o) ); @@ -60,14 +66,15 @@ module soc_mem `ifndef USE_OPENRAM #( - parameter integer WORDS = 256 + parameter integer WORDS = 256, + parameter ADR_WIDTH = 8 ) `endif ( input clk, input ena, input [3:0] wen, - input [7:0] addr, + input [ADR_WIDTH-1:0] addr, input [31:0] wdata, output[31:0] rdata );