SystemVerilog动态访问子数组

时间:2017-07-03 02:13:46

标签: system-verilog

我在编译代码行9时遇到错误,所以我不确定如何动态访问数组。我必须从收到的logic [255:0]中构建bytes。 (看起来我必须查看SystemVerilog的数据类型:()。 提前谢谢。

module test;

    task test_array (logic [7:0] B);
      static logic [255:0] l_ar_B;

      l_ar_B[7:0] = B;

      for(int i=0; i<32; i++)
        l_ar_B[(i*8+7) : (i*8)] = B; // Error-[IRIPS] Illegal range in part select
      $stop();

    endtask

    initial begin
      $display("Start");
      test_array(8'h11);
    end

endmodule

1 个答案:

答案 0 :(得分:0)

使用[M : N]语法的范围选择时,MN必须是常量。您应该使用语法[s +: W]的部分选择寻址,其中W是宽度的常量,s可以是指示起始位位置的变量。自IEEE Std 1364-2001(Verilog 2001)以来+:已经存在。看到 Indexing vectors and arrays with +:

for(int i=0; i<32; i++)
  l_ar_B[(i*8) +: 8] = B;

由于您正在进行复制,因此您可以使用l_ar_B = {32{B}};在相同的步骤中获得相同的结果。