2017-03-13 10 views
0

私はgenerateループを使用して、パラメータ化可能な数のモジュールをインスタンス化しています。ループ反復に基づいてモジュールの入力の一部を割り当てたいと思います。残念ながら、デザインコンパイラがポート幅が一致していないためにエラーがあると言う合成に関する問題が発生しています。ここで私は何をしようとしているのです:Verilog generateループ反復子の幅の不一致

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を使用してみましたし、localparamにA_IDXとB_IDXを割り当てるが、私はまだ合成の下で同じエラーを取得しました。

私は.a_idx((k)[bit_width-1:0]),のようなものを試しましたが、どちらもうまくいきません。

アイデア?

答えて

2

kおよびk+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)), 
    // .... // 
    
合成ツールがサポートしている内容に応じて は、次しようとする場合があります