我仍然不确定数组切片在System Verilog中是如何工作的?
例如,让我们说我有一个打包的2D数组。
Y
所以我的数组有三行,每行是一个5位数字。
所以,当我尝试做这样的事情的时候,它确实不起作用!!!
localparam [0:2][4:0] TEMP = {5'd4,5'd9,5'd20};
为什么这不起作用? 编译器没有抱怨,但模拟显示所有的X !!
这里我包含了有问题的模块:
logic [1:0] arr;
assign arr = TEMP[0][1:0]
答案 0 :(得分:0)
自包含的示例可能是:
module tb;
localparam [0:2][4:0] TEMP = {5'd4,5'd9,5'd20};
logic [1:0] arr;
assign arr = TEMP[0][1:0];
initial begin
$display("arr : %b", arr);
#1ps;
$display(TEMP[0]);
$display(TEMP[1]);
$display(TEMP[2]);
$display("arr : %b", arr);
end
endmodule
对我来说这(正确)输出:
# KERNEL: arr : 00
# KERNEL: 4
# KERNEL: 9
# KERNEL: 20
# KERNEL: arr : 00
这不显示问题的错误情况,除非问题添加更多信息,否则无法确定错误的确切原因。
答案 1 :(得分:0)
而不是负面点,我应该得到积极的一面。我联系了供应商(Aldec),结果发现这是Aldec的模拟器问题,他们将在下一版本修复它。