0

プロセッサ デザインの一部として、Verilog を使用して単純な動作右シフターを実装しています。

シフターは 32 ビット変数を入力し、変数 (入力) の選択に基づいて右論理シフトまたは右算術シフトを出力します。

コードは次のとおりです。

 module ShiftRight(
  input signed[31:0] inp,
  input [31:0] shamt,
  output [31:0] out,
  input choice
  );

  assign out = (choice)? (inp>>>shamt):(inp>>shamt);


 endmodule

これにより、正しいビヘイビア インプリメンテーションが生成されますが、合成中に次の警告が表示されます。

Unit ShiftRight : the following signal(s) form a combinatorial loop: out_shift0000<31>.

(括弧内の係数は基本的に inp の最上位ビットで、私の場合は 31 です)。それで、これがinp bein signedと関係があるのか​​ どうか疑問に思っていました.

4

1 に答える 1

3

あなたのシンセサイザーは、ベクトルを2 ^ 32ビット(4,294,967,296)だけ算術シフトする必要があると考えて爆発していると思います。また、ゲート合成への内部RTLでは、最終的に循環ループになります。

40億ビットシフトする必要はないと思いますので、シフト量に妥当な数値を使用できるのではないでしょうか。

于 2012-10-31T21:52:46.780 に答える