我正在尝试编写一个Verilog模块,它在每个周期的中迭代外部存储器的元素。我现在面临的问题是,在周期内更改内存地址不会导致输入数据在同一周期内发生更改.ie:更改地址不会导致输入数据在一个周期内更改cycle.I'll说明问题与一些代码:Verilog - 从外部存储器获得即时响应
module r(input rst, ..., output reg [MEMORY_ADDR_WIDTH-1:0] addr, input memory_value);
//...
always @(posedge clk) begin
//...
for(addr = 0; addr < MEMORY_SIZE; addr = addr+1) begin
if (memory_value) //...
// PROBLEM: changing addr in this loop doesn't cause memory_value to change
end
end
endmodule
这里是我如何实例化模块
module top;
reg mem[MEMORY_SIZE-1:0];
wire [MEMORY_ADD_WIDTH-1:0] addr;
//...
r r(rst, ..., addr, mem[addr]);
endmodule
我使用的ModelSim仿真设计。首先,这是否是预期的行为,如果是常见的解决方法?
“memory_value”是输入到“R”模块等“r”模块,本身不会更改“memory_value”的值。那么,通过“在此循环中更改addr不会导致memory_value更改”,您是什么意思? –
@KaranShah作为OP指定他们正在与内存交谈,他们可能希望'memory_value'在他们在addr上提供新值时发生改变(这不会发生;请参阅我的回答) – wilcroft