系统verilog切片阵列

时间:2015-06-06 02:43:54

标签: verilog system-verilog

我仍然不确定数组切片在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]

2 个答案:

答案 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

这不显示问题的错误情况,除非问题添加更多信息,否则无法确定错误的确切原因。

example on EDA Playground

答案 1 :(得分:0)

而不是负面点,我应该得到积极的一面。我联系了供应商(Aldec),结果发现这是Aldec的模拟器问题,他们将在下一版本修复它。