算術右シフト
CoddyのVerilogジャーニー「RTL設計と検証」セクションの一部。レッスン 8/38。
算術右シフトは >>> を使用し、左オペランドが signed の場合は符号ビットを複製します。論理右シフトは >> を使用し、0 で埋めます。負の奇数値の場合、右への算術シフトは、0 方向に切り捨てる integer 除算と同じではありません。
関連する抜粋です。周囲の宣言と接続は課題内で提供されています。
reg signed [7:0] value;
value = -3;
$display("%0d", value >>> 1);結果はマイナス2です。これは、符号拡張によって負の2の補数表現が維持されるためです。
符号拡張が必要な場合は、signedの左オペランドに>>>を使用します。
チャレンジ
中級値を算術右シフトして、signed 8ビット値にします。シフト量は0~7です。signed 8ビットの結果 y を返します。負の値は符号ビットで埋められます。出力列:y。すべての刺激値は既知のバイナリ値です。
design.vを完成させ、モジュール名とポートを保持してください。ロックされたtestbench.vが入力の変更を供給し、値が安定した後に出力を表示します。+CASE=1のようなシミュレータ引数を使用してシナリオを選択します。標準入力は必要ありません。デザインに表示、遅延、またはシミュレーション終了処理を追加しないでください。期待される出力は、各観測につき10進値を1行にまとめ、値を1つのスペースで区切り、改行で終わる形式です。
自分で試してみよう
module dut (input signed [7:0] value, input [2:0] amount, output signed [7:0] y);
// このプレースホルダーをあなたの設計に置き換えてください。
assign y = 0;
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
RTL設計と検証のすべてのレッスン
自分で練習してみよう: Verilogオンラインコンパイラ