我使用SystemVerilog来处理三维数组。我的代码如下。
module sub_bytes();
reg [7:0] word_stream_reg [0:1][0:1]= '{'{8'hFF,8'hA4},'{8'h50,8'hC6}};
reg [7:0] test = word_stream_reg[0][1][7:0];
endmodule
我收到此错误:
Error (10748): Verilog HDL error at sub_bytes.v(6): expression in variable declaration assignment to test must be constant
我花了大约4个小时但找不到这个错误的原因。如果有人能帮助我,我将不胜感激。
答案 0 :(得分:2)
即使某些工具允许,使用另一个静态变量初始化静态变量也是一种非常糟糕的编程习惯。这是指" 静态初始化惨败"在许多编程语言中。在过程上下文之外,没有静态初始化器的定义排序。
为变量赋值常量不会使该变量成为常量。就编译器而言,它仍然是一个变量。
您可能想要做的是使用parameter
而不是变量。
parameter logic [7:0] word_stream_reg [0:1][0:1]= '{'{8'hFF,8'hA4},'{8'h50,8'hC6}};
注意:由于您使用的是SystemVerilog,因此请使用logic
代替reg
。
答案 1 :(得分:1)
正如@Qui所说,引用另一个变量用于初始化不适用于某些模拟器。
为什么不使用:
reg [7:0] word_stream_reg [0:1][0:1]= '{'{8'hFF,8'hA4},'{8'h50,8'hC6}};
wire [7:0] test = word_stream_reg[0][1][7:0];