2017-03-13 32 views
0

我正在使用一個生成循環來實例化一個可定義數量的模塊,並且我想根據循環迭代爲模塊分配一些輸入。不幸的是,我遇到了設計編譯器說因爲端口寬度不匹配而導致錯誤的綜合問題。這裏的我想要做什麼:verilog生成循環分配給迭代器寬度不匹配

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]),但這也行不通。

任何想法?

回答

2

kk+1是32位寬,導致寬度不匹配。 根據您的綜合工具支持什麼,你可能想嘗試以下操作:

  • 位切片:

    .a_idx (k[0 +: bit_width]) 
    
  • 演員到bit_width - 寬邏輯:

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