module memtest00(clk, setA, setB, y); input clk, setA, setB; output y; reg mem [1:0]; always @(posedge clk) begin if (setA) mem[0] <= 0; // this is line 9 if (setB) mem[0] <= 1; // this is line 10 end assign y = mem[0]; endmodule // ---------------------------------------------------------- module memtest01(clk, wr_en, wr_addr, wr_value, rd_addr, rd_value); input clk, wr_en; input [3:0] wr_addr, rd_addr; input [7:0] wr_value; output reg [7:0] rd_value; reg [7:0] data [15:0]; always @(posedge clk) if (wr_en) data[wr_addr] <= wr_value; always @(posedge clk) rd_value <= data[rd_addr]; endmodule // ---------------------------------------------------------- module memtest02(clk, setA, setB, addr, bit, y1, y2, y3, y4); input clk, setA, setB; input [1:0] addr; input [2:0] bit; output reg y1, y2; output y3, y4; reg [7:0] mem1 [3:0]; (* mem2reg *) reg [7:0] mem2 [3:0]; always @(posedge clk) begin if (setA) begin mem1[0] <= 10; mem1[1] <= 20; mem1[2] <= 30; mem2[0] <= 17; mem2[1] <= 27; mem2[2] <= 37; end if (setB) begin mem1[0] <= 1; mem1[1] <= 2; mem1[2] <= 3; mem2[0] <= 71; mem2[1] <= 72; mem2[2] <= 73; end y1 <= mem1[addr][bit]; y2 <= mem2[addr][bit]; end assign y3 = mem1[addr][bit]; assign y4 = mem2[addr][bit]; endmodule // ---------------------------------------------------------- module memtest03(clk, wr_addr, wr_data, wr_enable, rd_addr, rd_data); input clk, wr_enable; input [3:0] wr_addr, wr_data, rd_addr; output reg [3:0] rd_data; reg [3:0] memory [0:15]; always @(posedge clk) begin if (wr_enable) memory[wr_addr] <= wr_data; rd_data <= memory[rd_addr]; end endmodule // ---------------------------------------------------------- module memtest04(clk, wr_addr, wr_data, wr_enable, rd_addr, rd_data); input clk, wr_enable; input [3:0] wr_addr, wr_data, rd_addr; output [3:0] rd_data; reg rd_addr_buf; reg [3:0] memory [0:15]; always @(posedge clk) begin if (wr_enable) memory[wr_addr] <= wr_data; rd_addr_buf <= rd_addr; end assign rd_data = memory[rd_addr_buf]; endmodule // ---------------------------------------------------------- module memtest05(clk, addr, wdata, rdata, wen); input clk; input [1:0] addr; input [7:0] wdata; output reg [7:0] rdata; input [3:0] wen; reg [7:0] mem [0:3]; integer i; always @(posedge clk) begin for (i = 0; i < 4; i = i+1) if (wen[i]) mem[addr][i*2 +: 2] <= wdata[i*2 +: 2]; rdata <= mem[addr]; end endmodule // ---------------------------------------------------------- module memtest06_sync(input clk, input rst, input [2:0] idx, input [7:0] din, output [7:0] dout); (* gentb_constant=0 *) wire rst; reg [7:0] test [0:7]; integer i; always @(posedge clk) begin if (rst) begin for (i=0; i<8; i=i+1) test[i] <= 0; end else begin test[0][2] <= din[1]; test[0][5] <= test[0][2]; test[idx][3] <= din[idx]; test[idx][6] <= test[idx][2]; test[idx][idx] <= !test[idx][idx]; end end assign dout = test[idx]; endmodule module memtest06_async(input clk, input rst, input [2:0] idx, input [7:0] din, output [7:0] dout); (* gentb_constant=0 *) wire rst; reg [7:0] test [0:7]; integer i; always @(posedge clk or posedge rst) begin if (rst) begin for (i=0; i<8; i=i+1) test[i] <= 0; end else begin test[0][2] <= din[1]; test[0][5] <= test[0][2]; test[idx][3] <= din[idx]; test[idx][6] <= test[idx][2]; test[idx][idx] <= !test[idx][idx]; end end assign dout = test[idx]; endmodule // ---------------------------------------------------------- module memtest07(clk, addr, woffset, wdata, rdata); input clk; input [1:0] addr; input [3:0] wdata; input [1:0] woffset; output reg [7:0] rdata; reg [7:0] mem [0:3]; integer i; always @(posedge clk) begin mem[addr][woffset +: 4] <= wdata; rdata <= mem[addr]; end endmodule // ---------------------------------------------------------- module memtest08(input clk, input [3:0] a, b, c, output reg [3:0] y); reg [3:0] mem [0:15] [0:15]; always @(posedge clk) begin y <= mem[a][b]; mem[a][b] <= c; end endmodule // ---------------------------------------------------------- module memtest09 ( input clk, input [3:0] a_addr, a_din, b_addr, b_din, input a_wen, b_wen, output reg [3:0] a_dout, b_dout ); reg [3:0] memory [10:35]; always @(posedge clk) begin if (a_wen) memory[10 + a_addr] <= a_din; a_dout <= memory[10 + a_addr]; end always @(posedge clk) begin if (b_wen && (10 + a_addr != 20 + b_addr || !a_wen)) memory[20 + b_addr] <= b_din; b_dout <= memory[20 + b_addr]; end endmodule // ---------------------------------------------------------- module memtest10(input clk, input [5:0] din, output [5:0] dout); reg [5:0] queue [0:3]; integer i; always @(posedge clk) begin queue[0] <= din; for (i = 1; i < 4; i=i+1) begin queue[i] <= queue[i-1]; end end assign dout = queue[3]; endmodule // ---------------------------------------------------------- module memtest11(clk, wen, waddr, raddr, wdata, rdata); input clk, wen; input [1:0] waddr, raddr; input [7:0] wdata; output [7:0] rdata; reg [7:0] mem [3:0]; assign rdata = mem[raddr]; always @(posedge clk) begin if (wen) mem[waddr] <= wdata; else mem[waddr] <= mem[waddr]; end endmodule // ---------------------------------------------------------- module memtest12 ( input clk, input [1:0] adr, input [1:0] din, output reg [1:0] q ); reg [1:0] ram [3:0]; always@(posedge clk) {ram[adr], q} <= {din, ram[adr]}; endmodule // ---------------------------------------------------------- module memtest13 ( input clk, rst, input [1:0] a1, a2, a3, a4, a5, a6, input [3:0] off1, off2, input [31:5] din1, input [3:0] din2, din3, output reg [3:0] dout1, dout2, output reg [31:5] dout3 ); reg [31:5] mem [0:3]; always @(posedge clk) begin if (rst) begin mem[0] <= 0; mem[1] <= 0; mem[2] <= 0; mem[3] <= 0; end else begin mem[a1] <= din1; mem[a2][14:11] <= din2; mem[a3][5 + off1 +: 4] <= din3; dout1 <= mem[a4][12:9]; dout2 <= mem[a5][5 + off2 +: 4]; dout3 <= mem[a6]; end end endmodule