プロセッサ デザインの一部として、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と関係があるのか どうか疑問に思っていました.