4

このような乗数コードがあるとします。

      module multiply(
        output [63:0] result,
        input [31:0] a,
        input [31:0] b
      );

        assign result = a * b;

      endmodule

これにより、多くのゲートが生成されます。

組み合わせ乗算器を実装するには、どのような方法を使用する必要がありますか?

4

3 に答える 3

5

ハードウェア乗数は大きいです、あなたはそれと一緒に暮らす必要があります!

入力ビット幅が大きくなると、乗数は大きくなります。したがって、オペランドの1つに完全な32ビットが必要ない場合は、このサイズを最小にすると、結果のハードウェアのサイズが小さくなります。

固定数を掛ける場合、コンパイラーはハードウェアのサイズを制限するためにいくつかの最適化を行うことができると思います。または、 CSDなどの固定数に異なるエンコード方式を使用して、乗算器の加算器の数を減らし、その面積をさらに減らすことができます。

多数の乗算器が必要で、クロックが速い場合は、単一のハードウェア乗算器を再利用して多くの計算を行うことができます。これは、乗算をスケジュールするための制御/パイプラインロジックを作成することを意味し、メモリが必要になる場合がありますが、全体的な領域を節約できます。この場合、ミニDSPデータパスを設計することになります。

于 2011-11-17T10:38:50.693 に答える
3

組み合わせ要件を忘れることができれば、速度が大きな問題ではなく、複数のクロックでオペランドを処理できる場合は、 adder とaccumulatorを使用して乗算を行うことができます。一部の低電力/低コスト/小面積プロセッサでは、ISAに専用の乗算命令がないか、乗算 asm 命令がフロントエンド命令デコーダによって加算演算に変更され、加算マイクロコード演算になります。

この方法を使用する場合、入力が安定してから 1 サイクル後に出力が有効でなくなるため、データハンドシェイク用に追加の信号を作成する必要があります。

于 2011-11-17T18:54:38.177 に答える
1

Verilog マルチプライヤによって生成されたものは、最適ではない可能性があります。evvective 乗算器と加算器の分野では多くの研究が行われています。そして、これは add/mul のかなり普遍的で優れたジェネレーターの 1 つです: http://www.aoki.ecei.tohoku.ac.jp/arith/mg/algorithm.html

このページには、多くの add/mul 低レベル実装の説明があります

于 2011-11-17T19:02:29.440 に答える