1

我正在 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。

任何帮助将非常感激。

谢谢。

4

0 回答 0