Verilog中数组错误的初始化

时间:2012-10-26 13:26:09

标签: verilog system-verilog hdl array-initialization

初始化数组sbox时,我遇到语法错误。请帮帮我。

  reg  [7:0] sbox[15:0];
sbox = '{
 8'h63, 8'h7c, 8'h77, 8'h7b,
 8'hf2, 8'h6b, 8'h6f, 8'hc5,
 8'h30, 8'h01, 8'h67, 8'h2b,
 8'hfe, 8'hd7, 8'hab, 8'h76
};

这实际上是sbox。显示错误:

  

near“=”:语法错误,意外'=',期待IDENTIFIER或   TYPE_IDENTIFIER

我使用的是modelsim模拟器

2 个答案:

答案 0 :(得分:5)

您用于数组分配的语法仅在SystemVerilog中有效,而不是Verilog

所以你的编译器需要支持这个,你需要告诉编译器该文件是SystemVerilog。大多数编译器(包括modelsim)将根据扩展名采用文件类型,例如.v == Verilog.sv == SystemVerilog,而其他人需要转换。

此外,正如工具中的答案所指出的,您需要将作业放在initial块中,或者您可以将声明与作业结合起来,如下所示:

reg [7:0] sbox[15:0] = '{
        8'h63, 8'h7c, 8'h77, 8'h7b,
        8'hf2, 8'h6b, 8'h6f, 8'hc5,
        8'h30, 8'h01, 8'h67, 8'h2b,
        8'hfe, 8'hd7, 8'hab, 8'h76
};

答案 1 :(得分:0)

分配应位于initialalways块内:

module tb;

reg [7:0] sbox[15:0];

initial begin
    sbox = '{
        8'h63, 8'h7c, 8'h77, 8'h7b,
        8'hf2, 8'h6b, 8'h6f, 8'hc5,
        8'h30, 8'h01, 8'h67, 8'h2b,
        8'hfe, 8'hd7, 8'hab, 8'h76
    };
end

endmodule