2019-08-29 02:49:46 -05:00
|
|
|
/*
|
|
|
|
Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 72].
|
|
|
|
*/
|
2019-08-23 09:00:16 -05:00
|
|
|
module top (din, write_en, waddr, wclk, raddr, rclk, dout);
|
|
|
|
parameter addr_width = 8;
|
|
|
|
parameter data_width = 8;
|
|
|
|
input [addr_width-1:0] waddr, raddr;
|
|
|
|
input [data_width-1:0] din;
|
|
|
|
input write_en, wclk, rclk;
|
|
|
|
output [data_width-1:0] dout;
|
|
|
|
reg [data_width-1:0] dout;
|
|
|
|
reg [data_width-1:0] mem [(1<<addr_width)-1:0]
|
|
|
|
/* synthesis syn_ramstyle = "no_rw_check" */ ;
|
|
|
|
always @(posedge wclk) // Write memory.
|
|
|
|
begin
|
|
|
|
if (write_en)
|
|
|
|
mem[waddr] <= din; // Using write address bus.
|
|
|
|
end
|
|
|
|
always @(posedge rclk) // Read memory.
|
|
|
|
begin
|
|
|
|
dout <= mem[raddr]; // Using read address bus.
|
|
|
|
end
|
|
|
|
endmodule
|