SystemVerilog:打包,然后使用流运算符解压缩会给出错误:Vivado中的“解压缩数组并置中的元素类型错误”

问题描述

我正在尝试打包一个2D解压缩的数组,将其通过Verilog包装器传递,然后将其解压缩到另一个模块(或测试台)中。最简单的代码如下:

module a_tb();
  timeunit 10ns;
  timeprecision 1ns;

  localparam N     = 4;
  localparam WIDTH = 8;

  logic [N*N*WIDTH-1:0] A_flat_1;
  logic [WIDTH-1:0] A_1 [N][N];

  logic [N*N*WIDTH-1:0] A_flat_2;
  logic [WIDTH-1:0] A_2 [N][N];

  assign {<<{A_flat_1}} = A_1;
  assign A_flat_2 = A_flat_1;
  assign A_2 = {<<{A_flat_2}};    // Line 13

  initial begin
    foreach (A_1[i,j]) begin
      A_1[i][j] = 10*i+j;
    end

    #10;
    $display("%p",A_1);
    $display("%p",A_2);
    assert(A_1==A_2);
  end
endmodule

在Vivado 2018.2 Simulator中出现以下错误:

ERROR: [VRFC 10-1571] wrong element type in unpacked array concatenation [U:/path/array_test.tb.sv:13]

据我对流运算符的了解,这应该可行。这可能是工具错误吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)