変更されたブースエンコーダーのVerilogコードをどのように書き込みますか?
モジュールmodified_booth_encoder(
入力[3:0] Multiplicand、// 4ビットMultiplicand
入力[3:0]乗数、// 4ビット乗数
出力[7:0]製品// 8ビット製品
);
//部分製品の内部レジスタ
reg [7:0] partial_product [0:3];
//部分製品を0に初期化します
初期開始
partial_product [0] <=0;
partial_product [1] <=0;
partial_product [2] <=0;
partial_product [3] <=0;
終わり
//ロジックをエンコードするブース
常に @(*)が始まります
//乗数の各ビットを繰り返します
for(integer i =0; i <4; i =i + 1)begin
//ブースエンコードパターンを確認します
case({Multiplier [i]、Multiplier [i-1]})
2'b00:begin
partial_product [i] <=partial_product [i];
終わり
2'B01:begin
partial_product [i] <=partial_product [i] + multiplicand;
終わり
2'B10:始まります
partial_product [i] <=partial_product [i] - multiplicand;
終わり
2'B11:始めます
partial_product [i] <=partial_product [i];
終わり
デフォルト:開始
partial_product [i] <=partial_product [i];
終わり
エンドケース
終わり
終わり
//最終製品を計算します
comstry =partial_product [0] +(partial_product [1] <<1) +(partial_product [2] <<2) +(partial_product [3] <<3);
endmodule
`` `
説明:
1。入力と出力:
- `Multiplicand`:マルチリカンドを表す4ビット入力。
- `Multiplier`:乗数を表す4ビット入力。
- `Product`:8ビット出力は、乗数および乗数の製品を表します。
2。内部レジスタ:
- `partial_product`:それぞれが部分製品を保存している4つのレジスタの配列。これらのレジスタは、ブースエンコーディングに基づいて更新されます。
3。初期化:
- 初期ブロックは、すべての部分製品を開始時に0に設定します。
4。ロジックをエンコードするブース:
-`常に @(*) `ブロックは、ブースをエンコードするアルゴリズムを実装します。
- 乗数の各ビット(MSBからLSBへ)を繰り返します。
- ビットごとに、現在のビットと前のビットをチェックして、ブースエンコーディングパターンを決定します。
- パターンに基づいて、部分製品で適切な操作を実行します。
- 00: 操作なし(部分製品は変更されていません)。
- 01: 部分的な製品に乗数を追加します。
- 10: 部分製品からマルチリカンドを減算します。
- 11: 操作なし(部分製品は変更されていません)。
5。最終製品の計算:
- 「割り当て」ステートメントは、シフトした部分製品を追加することにより、最終製品を計算します。
- 各部分製品は、対応するビット位置によって左にシフトされます。
コードの仕組み:
修正されたブースエンコードアルゴリズムは、乗算プロセスを、乗数のパターンに基づいた一連の追加および減算に置き換えます。乗数内の連続したビットのペアを検査することにより、乗算を効率的に実行できます。
例:
`multiplicand =5`(binary:` 0101`)および `Multiplier =3`(binary:` 0011`)と仮定します。
1。反復1: `乗数[3:2] =00` - 操作なし。
2。反復2: `Multiplier [2:1] =01` -` multiplicand`を追加します `partial_product [1]`。
3。反復3: `乗数[1:0] =11`-操作なし。
ループの後、次のようになります。
- `partial_product [0] =0`
- `partial_product [1] =5`
- `partial_product [2] =0`
- `partial_product [3] =0`
最後に、 `product =0 +(5 <<1) +(0 <<2) +(0 <<3)=10`(バイナリ:` 1010`)。これは5と3の正しい積です。