Verilog中的数组初始化错误

时间:2015-06-10 09:44:00

标签: arrays initialization verilog

我做了这样的代码:

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]

除了号码,我没有改变任何东西。怎么会发生这种情况?

1 个答案:

答案 0 :(得分:2)

您声明Output如下:

reg [31:0] Output[7:0];

这意味着你有8个向量,每个向量32位。从你的困惑和你的一个循环判断,我说你想要32个向量,每个8位(1个字节)。在这种情况下,您应将Output声明为:

reg [7:0] Output [31:0];

顺便说一句,你应该避免像Verilog关键词(输入,输出等)那样命名你的信号