使用verilog中的内存执行写和读操作



无法从内存中读取

在这里,我正在执行对内存的第一次写入操作(存储在内存中(,然后在执行读取操作后,我已经从内存中获取了存储读取值的temp1,但我遇到了无法从内存读取的"错误">

在存储器中执行读取操作后,我希望从temp1输出

module memory(clk,m_add,ead,ewr,mrd,temp1);
input clk;
input [7:0]m_add;
input [7:0]ead;
input ewr,mrd;
output [7:0]temp1;
reg [7:0] memr [0:255];
reg [7:0]temp;
always @(posedge clk)
begin
if(ewr==1)
begin
memr[ead] <= 8'b00001111;
end 
else if(mrd==1) 
begin
temp <= memr[m_add];
end
end
assign temp1=temp;
endmodule
module tb();
reg clk,mrd,ewr;
reg [7:0]m_add;
reg [7:0]ead;
wire [7:0]temp1;
memory m1(clk,m_add,ead,ewr,mrd,temp1);
initial begin
clk=0;
#5 ewr=1;
#5 ead=8'b00000001;
#10 mrd=1;
m_add=8'b00000001;
#40 $stop;
end
always #5 clk=~clk;
endmodule

我想从temp1输出

在您的测试台中,您永远不会使ewr信号为0。因此,您永远不会在模块中传递语句if(ewr==1)。您可以将测试台的初始块重写为:

initial begin
clk=0;
#10 ewr=1; ead=8'b00000001;    // write operation
#10 ewr=0;                     // bring ewr to 0
#10 mrd=1; m_add=8'b00000001;  // read operation
#10 mrd=0;                     // bring mrd to 0
#40 $stop;
end

最新更新