【问题标题】:How do I assign one multidimensional array to another in system verilog如何在系统verilog中将一个多维数组分配给另一个
【发布时间】:2016-02-24 22:19:47
【问题描述】:

在 System Verilog 中,我有:

wire [2:0][1:0] sig1;
wire [2:0][3:0] sig2;

我正在尝试做:

assign sig1[2:0][1:0] = sig2[2:0][1:0];

NCVerilog 告诉我:

assign sig1[2:0][3:0] = sig2[2:0][3:0];
                |
ncvlog: *E,MISEXX (acc_llcprdbctl.v,89|48): expecting an '=' or '<=' sign in an assignment [9.2(IEEE)].

有没有办法分配多维数组?

编辑:显然,您不能使用多个索引来分配数组。所以上面的例子并没有完全代表我想做的事情。我想拼接第二个维度并将其分配给第一个。

如果我重新排列数组,这可以实现:

wire [1:0][2:0] sig1;
wire [3:0][2:0] sig2;

assign sig1[1:0] = sig2[1:0];

但是对于任何其他更精确的拼接,我必须使用嵌套的 for 循环。

【问题讨论】:

  • 你试过assign sig1 = sig2吗?

标签: multidimensional-array system-verilog


【解决方案1】:

您可以使用如下生成块。

  generate
    for(genvar i=0; i<3; i++) 
      assign sig1[i][1:0] = sig2[i][1:0];
  endgenerate

【讨论】:

    【解决方案2】:

    来自 LRM:-

    可以使用索引名称选择打包或解包数组的单个元素。

    bit[3:0] [7:0] j; // j is a packed array 
    byte k;
    k = j[2]; // select a single 8-bit element from j
    
    wire [2:0][1:0] sig1;
    wire [2:0][3:0] sig2;
    

    实际上等价于

    wire [1:0] sig1 [2:0];
    wire [3:0] sig2 [2:0];
    

    因此,该工具无法执行assign sig1[2:0][1:0] = sig2[2:0][1:0];

    所以你也可以定义为

    wire [2:0] sig1 [1:0];
    wire [2:0] sig2 [3:0];
    assign sig1[1:0] = sig2[1:0];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多