Verilog でいくつかの乗算ユニットを合成していますが、乗算時にブース エンコーディングを使用して独自の CSA を実装した場合、または単に * 記号を使用して合成ツールに取り込ませた場合に、面積/消費電力の節約に関して一般的により良い結果が得られるかどうか疑問に思っていました。あなたのために問題の世話をしますか?
ありがとうございました!
Verilog でいくつかの乗算ユニットを合成していますが、乗算時にブース エンコーディングを使用して独自の CSA を実装した場合、または単に * 記号を使用して合成ツールに取り込ませた場合に、面積/消費電力の節約に関して一般的により良い結果が得られるかどうか疑問に思っていました。あなたのために問題の世話をしますか?
ありがとうございました!
一般的に、私は使用するコンパイラ ツールを信頼する傾向があり、タイミングと面積の予算が満たされている限り、結果についてそれほど心配することはありません。
とはいえ、高速で実行する必要がある乗算器では、乗算 ( *
) とリタイミング レジスタを 1 つまたは 2 つ含む Verilog モジュールを作成し、このモジュールにプッシュ ダウンすると、 (少なくとも DC では) より良い結果が得られることがわかりました。トップレベルの合成にポップアップする前に合成します。すべてを一度に実行しようとすると、コンパイラが他のタイミング パスに「気が散る」ように見えるので、トリッキーになることがわかっている乗数に焦点を当てると役立つようです。
この質問には「FPGA」のタグが付けられています。ターゲット デバイスが FPGA の場合は、FPGA のマルチプライヤ メガファンクションを使用することをお勧めします (最近、ザイリンクスが何と呼んでいるのか覚えていないでください)。
このようにして、シンセサイザー ツールに関係なく、使用する予定の内部ハードウェア構造をツールが確実に利用できるようになります。タイミングとレイテンシーの観点からも予測可能な最適なソリューションが確実に得られます。
さらに、すべてのコーナー ケースでテストする必要はありません。特に、符号付き乗算を行っている場合や、どのようなコーディング ガイドラインに従っている場合は重要です。
を使用するという点で@Martyに同意します*
。私は以前に独自の低電力加算器構造を構築しましたが、設計がプロセスをシフトしたり、より高い周波数で実行する必要があるときに問題が発生しました。このようなハードコードされたアーキテクチャは、コードからかなりの移植性を取り除きます。
さまざまなサイズ (領域) のアーキテクチャを確認するためにディレクティブを使用するのは良いことですが、タイミングの制約と使用可能な領域に基づいて最適な呼び出しを行うかどうかは、合成ツールに決定を委ねます。ツールがデフォルトでどの程度電力を認識しているかはわかりません。以前は、シンセシスに多くのパワーを意識した知識を追加する追加のライセンスを取得することになりました。