diff --git a/pipelined/config/rv32e/wally-config.vh b/pipelined/config/rv32e/wally-config.vh index 2e5bc34bb..9102cf637 100644 --- a/pipelined/config/rv32e/wally-config.vh +++ b/pipelined/config/rv32e/wally-config.vh @@ -49,8 +49,8 @@ `define UARCH_SUPERSCALR 0 `define UARCH_SINGLECYCLE 0 // *** replace with MEM_BUS -`define DMEM `MEM_CACHE -`define IMEM `MEM_CACHE +`define DMEM `MEM_BUS +`define IMEM `MEM_BUS `define VIRTMEM_SUPPORTED 0 `define VECTORED_INTERRUPTS_SUPPORTED 0 diff --git a/pipelined/src/cache/sram1rw.sv b/pipelined/src/cache/sram1rw.sv index b17aa20d3..921c0af47 100644 --- a/pipelined/src/cache/sram1rw.sv +++ b/pipelined/src/cache/sram1rw.sv @@ -46,6 +46,7 @@ module sram1rw #(parameter DEPTH=128, WIDTH=256) ( logic WriteEnableD; //*** model as single port + // *** merge with simpleram always_ff @(posedge clk) begin AddrD <= Adr; WriteDataD <= WriteData; /// ****** this is not right. there should not need to be a delay. Implement alternative cache stall to avoid this. Eliminates a bunch of delay flops elsewhere diff --git a/pipelined/src/generic/flop/simpleram.sv b/pipelined/src/generic/flop/simpleram.sv index 43b873567..3ad367bd5 100644 --- a/pipelined/src/generic/flop/simpleram.sv +++ b/pipelined/src/generic/flop/simpleram.sv @@ -40,18 +40,14 @@ module simpleram #(parameter BASE=0, RANGE = 65535) ( logic [`XLEN-1:0] RAM[BASE>>(1+`XLEN/32):(RANGE+BASE)>>1+(`XLEN/32)]; - /* verilator lint_off WIDTH */ - if (`XLEN == 64) begin:ramrw - always_ff @(posedge clk) begin - rd <= RAM[a[31:3]]; - if (we) RAM[a[31:3]] <= #1 wd; - end - end else begin - always_ff @(posedge clk) begin:ramrw - rd <= RAM[a[31:2]]; - if (we) RAM[a[31:2]] <= #1 wd; - end + // discard bottom 2 or 3 bits of address offset within word or doubleword + localparam adrlsb = (`XLEN==64) ? 3 : 2; + logic [31:adrlsb] adrmsbs; + assign adrmsbs = a[31:adrlsb]; + + always_ff @(posedge clk) begin + rd <= RAM[adrmsbs]; + if (we) RAM[adrmsbs] <= #1 wd; end - /* verilator lint_on WIDTH */ endmodule