From 694b3fbb6fcfd706ffdb55528168dc891e0d5243 Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Mon, 25 Oct 2021 15:33:33 -0500 Subject: [PATCH] Possible fix for critical path timing in caches. --- wally-pipelined/src/cache/sram1rw.sv | 42 +++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/wally-pipelined/src/cache/sram1rw.sv b/wally-pipelined/src/cache/sram1rw.sv index 835e7061f..e98b18f31 100644 --- a/wally-pipelined/src/cache/sram1rw.sv +++ b/wally-pipelined/src/cache/sram1rw.sv @@ -1,6 +1,7 @@ +/* -----\/----- EXCLUDED -----\/----- // Depth is number of bits in one "word" of the memory, width is number of such words -/* verilator lint_off ASSIGNDLY */ +/-* verilator lint_off ASSIGNDLY *-/ module sram1rw #(parameter DEPTH=128, WIDTH=256) ( input logic clk, @@ -29,5 +30,44 @@ module sram1rw #(parameter DEPTH=128, WIDTH=256) ( endmodule +/-* verilator lint_on ASSIGNDLY *-/ + -----/\----- EXCLUDED -----/\----- */ + + +// Depth is number of bits in one "word" of the memory, width is number of such words + +/* verilator lint_off ASSIGNDLY */ + +module sram1rw #(parameter DEPTH=128, WIDTH=256) ( + input logic clk, + // port 1 is read only + input logic [$clog2(WIDTH)-1:0] Addr, + output logic [DEPTH-1:0] ReadData, + + // port 2 is write only + input logic [DEPTH-1:0] WriteData, + input logic WriteEnable +); + + logic [WIDTH-1:0][DEPTH-1:0] StoredData; + logic [$clog2(WIDTH)-1:0] AddrD; + logic [WIDTH-1:0] WriteDataD; + logic WriteEnableD; + + + always_ff @(posedge clk) begin + AddrD <= Addr; + WriteDataD <= WriteData; + WriteEnableD <= WriteEnable; + if (WriteEnableD) begin + StoredData[AddrD] <= #1 WriteDataD; + end + end + + + assign ReadData = StoredData[AddrD]; + +endmodule + /* verilator lint_on ASSIGNDLY */