blob: 6221bf3126438f4ce88e6b9adffcaff8541502b0 [file] [log] [blame]
// A simple SRAM model, rewritten for BRAM inference
module Sram
#(parameter int Width = 32,
parameter int Depth = 1024)
(input clk_i,
input req_i,
input we_i,
input [$clog2(Depth) - 1 : 0] addr_i,
input [Width - 1 : 0] wdata_i,
input [Width / 8 - 1 : 0] wmask_i,
output logic [Width - 1 : 0] rdata_o,
output logic rvalid_o);
logic [Width - 1 : 0] mem[Depth - 1 : 0];
logic [$clog2(Depth) - 1 : 0] raddr;
assign rdata_o = mem[raddr];
always_ff @(posedge clk_i) begin
if (req_i) begin
if (we_i) begin
for (int i = 0; i < Width / 8; i++) begin
if (wmask_i[i]) begin
mem[addr_i][i * 8 +: 8] <= wdata_i[i * 8 +: 8];
end
end
end
// The read address is registered to ensure a synchronous read.
raddr <= addr_i;
end
end
// The rvalid signal is simply a delayed version of req_i.
always_ff @(posedge clk_i) begin
rvalid_o <= req_i & ~we_i;
end
localparam MemInitFile = "";
`include "prim_util_memload.svh"
endmodule