1. カメラ
  2. カーオーディオ&エレクトロニクス
  3. ホームオーディオ
  4. パーソナルオーディオ
  5. テレビ
  6. スマートホーム
  >> 電子技術オンライン >  >> パーソナルオーディオ >> デジタルボイスレコーダー

変更されたブースエンコーダーのVerilogコードをどのように書き込みますか?

`` 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の正しい積です。