初始化数组 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。它显示的错误:
接近" =":语法错误,意外'=',期望标识符或 type_distifier
我正在使用Modelsim模拟器
您用于数组分配的语法仅在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
};
分配应在initial
或always
块中:
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