【【典型电路设计之片内存储器的设计之RAM的Verilog HDL描述二】】

典型电路设计之片内存储器的设计之RAM的Verilog HDL描述二

例二:
用Verilog HDL 设计深度为8,位宽为8的双端口RAM。
双口RAM具有两套地址总线,一套用于读数据,另一套用于写数据。二者可以分别独立操作。
这道题还算是简单 就是用两根时间线去分别引出读与写操作
下面是verilog代码

module ram_dual(q, addr_in, addr_out, d, we, rd,clk1, clk2);
output [7:0] q;
input[7:0] d;
input [2:0] addr_in;
input[2:0] addr_out;
 input we;
input clk2;
reg[7:0] q;
input clk2;
reg[7:0] q;
reg[7:0] mem[7:0];
always@(posedge clk1)
begin
if(we)
mem[addr_in]<=d;
end
always@(posedge clk2)
begin
if(rd)
q<=mem[addr_out];
end
endmodule

下面是testbench

module ram_dual_tb;reg clk1, clk2, we, rd;
reg [2:0]addr_in;
reg [2:0]addr_out;
reg [7:0]d;
wire [7:0]q;
ram_dual
U1(.q(q),.addr_in(addr_in),.addr_out(addr_out),.d(d),.we(we),
.rd(rd),.clk1(clk1),.clk2(clk2));
initial
begin
clk1=0;
 clk2=0;
we=1; 
rd=0; 
addr_in=0; 
addr_out=0; 
d=0;
#320 we=0;
rd=1;
#10 clk1=~clk1;
clk2=~clk2;
end
#10 clk1=~clk1;
clk2=~clk2;
end
initial
begin
repeat(7)
begin
#40 
addr_in=addr_in+1;
d=d+1;
end
#40
repeat(7)
#40
addr_out=addr_out+1;
end
endmodule

你可能感兴趣的:(Verilog学习系列,fpga开发)