mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-09 21:25:23 +00:00
25 lines
707 B
Systemverilog
25 lines
707 B
Systemverilog
|
|
||
|
// DATASIZE = Memory data word width
|
||
|
// ADDRSIZE = Number of mem address bits
|
||
|
module fifomem #(parameter DATASIZE = 8,
|
||
|
parameter ADDRSIZE = 4)
|
||
|
(rdata, wdata, waddr, raddr, wclken, wfull, wclk);
|
||
|
|
||
|
input logic [DATASIZE-1:0] wdata;
|
||
|
input logic [ADDRSIZE-1:0] waddr;
|
||
|
input logic [ADDRSIZE-1:0] raddr;
|
||
|
input logic wclken;
|
||
|
input logic wfull;
|
||
|
input logic wclk;
|
||
|
output logic [DATASIZE-1:0] rdata;
|
||
|
|
||
|
// RTL Verilog memory model
|
||
|
localparam DEPTH = 1 << ADDRSIZE;
|
||
|
logic [DATASIZE-1:0] mem [0:DEPTH-1];
|
||
|
|
||
|
assign rdata = mem[raddr];
|
||
|
always @(posedge wclk)
|
||
|
if (wclken && !wfull) mem[waddr] <= wdata;
|
||
|
|
||
|
endmodule // fifomem
|