| /* | |
| Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 72]. | |
| */ | |
| 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 |