| |
| module MyMem #( |
| parameter AddrWidth = 4, |
| parameter DataWidth = 4) ( |
| (* gentb_constant = 1 *) |
| input Reset_n_i, |
| input Clk_i, |
| input [AddrWidth-1:0] Addr_i, |
| input [DataWidth-1:0] Data_i, |
| output [DataWidth-1:0] Data_o, |
| input WR_i); |
| |
| reg [DataWidth-1:0] Data_o; |
| |
| localparam Size = 2**AddrWidth; |
| |
| (* mem2reg *) |
| reg [DataWidth-1:0] Mem[Size-1:0]; |
| |
| integer i; |
| |
| always @(negedge Reset_n_i or posedge Clk_i) |
| begin |
| if (!Reset_n_i) |
| begin |
| Data_o <= 'bx; |
| for (i=0; i<Size; i=i+1) |
| begin |
| Mem[i] <= 0; |
| end |
| end |
| else |
| begin |
| Data_o <= Mem[Addr_i]; |
| if (WR_i) |
| begin |
| Mem[Addr_i] <= Data_i; |
| end |
| end |
| end |
| |
| endmodule |
| |