使用verilog中的内存执行写和读操作?
无法从内存中读取 在这里,我首先对内存执行写操作,然后在执行读操作之后,我使用temp1存储内存中的读取值,但我遇到了无法从内存读取的错误 我希望在内存中执行读取操作后从temp1输出使用verilog中的内存执行写和读操作?,verilog,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 [
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。因此,您永远不会在模块中传递语句ifewr==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
您可以将此字符串添加到tb模块:initial$monitortemp1;