我正在 Verilog 的一个实验室工作,其中一项任务告诉我将不同的内容写入 2 个不同的地址。
这是我的代码:
module labM;
reg [31:0] address, memIn;
reg clk, read, write;
integer i;
wire [31:0] memOut;
mem data(memOut, address, memIn, clk, read, write);
initial
begin
write=1;
memIn = 32'h12345678;
address = 16;
clk=1;
#1;
memIn = 32'h89abcdef;
address = 24;
#1;
write=0; read=1; address=16;
repeat(3)
begin
#1 $display("Address %d contains %h", address, memOut);
address = address + 4;
end
end
endmodule
mem 的工作原理如下:
为了读取一个字,在地址上设置它的地址并设置读取。经过一段时间的延迟,单词的内容会在 memOut 上稳定下来。要写入,在 memIn 上设置要写入的数据,在 address 上设置目标地址,然后设置 write。数据将在 clk 的下一个上升沿写入目标。
上面的输出是地址 16 的正确值,但地址 20 和 24 是“xxxxxxxx”。
我已经坚持了一段时间,我不明白为什么我不能重新分配 memIn。
任何帮助将非常感激。
谢谢。