首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >icarus verilog中的多维数组端口支持

icarus verilog中的多维数组端口支持
EN

Stack Overflow用户
提问于 2020-04-25 07:02:49
回答 1查看 430关注 0票数 0

我尝试在systemverilog代码中使用多维数组作为端口。顶部模块是一个三维数组,而子模块是一个二维数组。简化的测试平台和设计如下:

代码语言:javascript
复制
  module TB();

      wire  [3:0]d_inAll  [0:99][0:9];
      wire  [3:0]d_outAll [0:99][0:9];

      genvar iX;
      for (iX=0; iX<100; iX=iX+1)begin
           someDesign DUT_i(.d_in(d_inAll[iX]) , .d_out(d_outAll[iX]));
      end

   endmodule

它的设计是

代码语言:javascript
复制
module someDesign(input wire [3:0] d_in[0:9],
                  output wire[3:0] d_out [0:9]);

  genvar i;
  for (i=0; i<10; i=i+1)begin
    assign d_out[i] = d_in[i];
  end

endmodule 

我试图用icarus verilog编译这段代码,但失败了,错误如下。

代码语言:javascript
复制
../elaborate.cc:1439: failed assertion rval_net->pin_count() == prts[0]->pin_count()

这是编译器的错误还是一些还不支持的特性?有没有其他方法可以解决这个问题?我知道我可以扁平化数组,但是,我不喜欢使用它,因为它会使设计更容易出现功能错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-25 07:22:15

这是一个bug,因此不受支持。它似乎支持一维非压缩数组端口,因此您可以将其中一个数组维度移动到压缩的一侧。

代码语言:javascript
复制
module TB();

      wire  [0:9][3:0]d_inAll  [0:99];
      wire  [0:9][3:0]d_outAll [0:99];

      genvar iX;
  for (iX=0; iX<100; iX=iX+1)begin : fiX
           someDesign DUT_i(.d_in(d_inAll[iX]) , .d_out(d_outAll[iX]));
      end

   endmodule

module someDesign(input wire [0:9][3:0] d_in,
                  output wire[0:9][3:0] d_out);

  genvar i;
  for (i=0; i<10; i=i+1)begin
    assign d_out[i] = d_in[i];
  end
endmodule
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61418704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档