我做了这样的代码:
input [7:0] Address, WriteData;
input MemRead = 0, MemWrite = 0, CLK;
output reg[7:0] ReadData;
reg [31:0] Input[7:0], Output[7:0];
reg [31:0] Sel;
wire [4:0] addr = Address[4:0];
integer i;
initial begin
for(i = 0; i < 16; i = i + 1) begin
Output[i] = i;
Output[15 + i] = 255 - i + 1;
end
Sel = 32'b0;
end
always @(MemRead or MemWrite) begin
if(MemRead == 1) begin
ReadData <= Output[7]; // here is error point
end
else if(MemWrite == 1) begin
Input[addr] <= WriteData;
Sel[addr] <= MemWrite;
end
end
它初始化数组Output
,如:
Output[0] = 0, Output[1] = 1, Output[2] = 2...
当我给ReadData <= Output[number]
编号&lt; 8,并模拟,它给出了ReadData = 00000111
的预期结果:Output[7]
。
但是,当我给出数字&gt; = 8时,结果会发生变化:ReadData = XXXXXXXX
Output[8]
。
除了号码,我没有改变任何东西。怎么会发生这种情况?
答案 0 :(得分:2)
您声明Output
如下:
reg [31:0] Output[7:0];
这意味着你有8个向量,每个向量32位。从你的困惑和你的一个循环判断,我说你想要32个向量,每个8位(1个字节)。在这种情况下,您应将Output
声明为:
reg [7:0] Output [31:0];
顺便说一句,你应该避免像Verilog关键词(输入,输出等)那样命名你的信号