【问题标题】:verilog generate loop assign to iterator width mismatchverilog 生成循环分配给迭代器宽度不匹配
【发布时间】:2023-04-11 10:28:02
【问题描述】:

我正在使用生成循环来实例化可参数化数量的模块,并且我想根据循环迭代将一些输入分配给模块。不幸的是,我遇到了综合问题,设计编译器说由于端口宽度不匹配而出现错误。这是我正在尝试做的事情:

genvar k;
generate
    for(k = 0; k < `NUM/2; ++k) begin
        cmp2 cmps(
            .a       (arr[k]),
            .b       (arr[k+1]),
            .a_idx   (k),   //gives errors about port width mismatch
            .b_idx   (k+1), //but I can't get it to work any other way
            .data_out(data[k]),
            .idx_out (idx[k])
            );
    end
endgenerate

我也尝试在循环中使用 localparams 并将 a_idx 和 b_idx 分配给 localparam,但在综合时我仍然遇到相同的错误。

我尝试过类似.a_idx((k)[bit_width-1:0]), 之类的方法,但这也不起作用。

有什么想法吗?

【问题讨论】:

    标签: verilog system-verilog synthesis


    【解决方案1】:

    kk+1 是 32 位宽,这会导致宽度不匹配。 根据您的综合工具支持的内容,您可能需要尝试以下操作:

    • 位切片:

      .a_idx   (k[0 +: bit_width])
      
    • 转换为bit_width-wide 逻辑:

      typedef logic[bit_width-1:0] logicN_t;
      // .... //
        .a_idx   (logicN_t'(k)),
        .b_idx   (logicN_t'(k+1)),
      // .... //
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 2011-03-07
      • 2016-06-03
      • 2022-10-06
      相关资源
      最近更新 更多