Ram and Rom Verilog
Ram and Rom Verilog
Verilog code for a dual-port RAM with synchronous read (read through).
module raminfr (clk, we, a, dpra, di, spo, dpo);
input
clk;
input
we;
input [4:0] a;
input [4:0] dpra;
input [3:0] di;
output [3:0] spo;
output [3:0] dpo;
reg
[3:0] ram [31:0];
reg
[4:0] read_a;
reg
[4:0] read_dpra;
always @(posedge clk)
begin
if (we)
ram[a] <= di;
read_a <= a;
read_dpra <= dpra;
end
assign spo = ram[read_a];
assign dpo = ram[read_dpra];
endmodule
if (wea) begin
ram[addra] <= dia;
end
end
end
always @(posedge clk)
begin
if (enb) begin
read_addrb <= addrb;
end
end
assign doa = ram[read_addra];
assign dob = ram[read_addrb];
endmodule
if (en)
raddr <= addr;
end
always @(raddr)
begin
if (en)
case(raddr)
4 b0000: data =
4 b0001: data =
4 b0010: data =
4 b0011: data =
4 b0100: data =
4 b0101: data =
4 b0110: data =
4 b0111: data =
4 b1000: data =
4 b1001: data =
4 b1010: data =
4 b1011: data =
4 b1100: data =
4 b1101: data =
4 b1110: data =
4 b1111: data =
default: data =
endcase
end
endmodule
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
b0010;
b0010;
b1110;
b0010;
b0100;
b1010;
b1100;
b0000;
b1010;
b0010;
b1110;
b0010;
b0100;
b1010;
b1100;
b0000;
bXXXX;