【问题标题】:How can I use genvar variable to access input signals?如何使用 genvar 变量访问输入信号?
【发布时间】:2020-06-17 02:07:07
【问题描述】:

我有一个带有 30 个向量输入的模块。我需要 for 循环分配方面的帮助。

module test (
  input [3:0] i0,
  input [3:0] i1,
  input [3:0] i2,
  ...
  input [3:0] i29

);

wire [3:0] int_i [0:29];

genvar j;
generate
  for (j=0; j<30; j=j+1) begin
    assign int_i[j] = i(j) //need help here 
  end
endgenerate


endmodule

在 Verilog 中是否有一种简单的方法可以做到这一点。我知道我可以通过创建输入的二维向量在 System verilog 中做到这一点。但是有没有办法在 Verilog 中做到这一点?

【问题讨论】:

    标签: verilog system-verilog fpga asic


    【解决方案1】:

    在 Verilog 中执行此操作的唯一方法是将二维数组展平为单个向量。

    module test (
      input [30*4-1:0] i;
    );
    wire [3:0] int_i [0:29];
    genvar j;
    for (j=0; j<30; j=j+1) begin
        assign int_i[j] = i[4*j+:4];
    end
    

    【讨论】:

      【解决方案2】:

      这是一个 systemverilog 功能,在 verilog 中,这应该是将输入数组打包成一个向量(我包含了一个参数以使事情自动化):

      module test
      # (
         parameter WIDTH = 4,
         parameter DEPTH = 30
        ) (input [(WIDTH*DEPTH)-1:0] i);
      
      wire [WIDTH-1:0] int_i [DEPTH-1:0];
      genvar j;
      
      generate
       for(j=0; j<DEPTH; j=j+1) begin: assign_i_gen //..(don't forget to name the for loop)
         assign int_i[j] = i[(WIDTH*j)+:WIDTH];
       end
      endgenerate
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-08
        • 2021-11-02
        • 1970-01-01
        • 1970-01-01
        • 2021-04-14
        • 2012-12-19
        • 2012-07-16
        相关资源
        最近更新 更多