ハードウェア乗算器の設計
ダッダ乗算器は、 1965年にコンピュータ科学者のルイジ・ダッダによって発明されたハードウェア2進乗算器の設計です。 [1]選択された全加算器と半加算器を使用して、2つの数値が残るまで段階的に部分積を加算します(ダッダツリーまたはダッダ削減)。設計はウォレス乗算器に似ていますが、異なる削減ツリーにより、必要なゲート数が削減され(最小のオペランドサイズを除くすべての場合)、わずかに高速化されます(すべてのオペランドサイズの場合)。[2]
Dadda 乗算器と Wallace 乗算器は、それぞれ長さがとである2つのビット文字列に対して同じ 3 つのステップを実行します。




- の各ビットをの各ビットで乗算 (論理積) し、結果を重み別に列にグループ化して生成します。



- 各重みが最大 2 ビットになるまで、全加算器と半加算器の段階によって部分積の数を減らします。
- 最終結果を従来の加算器で加算します。
ウォレス乗算器と同様に、最初のステップの乗算積は、乗算の元のビット値の大きさを反映して異なる重みを持ちます。たとえば、ビットの積の重みは です。


各レイヤーで可能な限り削減する Wallace 乗算器とは異なり、Dadda 乗算器は、使用されるゲートの数と入出力遅延を最小限に抑えようとします。このため、Dadda 乗算器の削減フェーズは低コストですが、最終的な数値が数ビット長くなる可能性があるため、若干大きな加算器が必要になります。
説明
全加算回路の例。より最適な最終製品を実現するために、削減プロセスの構造は、ウォレス乗数よりもわずかに複雑なルールによって制御されます。
削減の進行は、次のように定義される最大高さのシーケンスによって制御されます。

、 そして
次のようなシーケンスが生成されます。

の初期値は、 となる最大値として選択されます。ここで、と は、入力の被乗数と乗数のビット数です。2 つのビット長のうち小さい方が、乗算の最初の段階の後の重みの各列の最大の高さになります。削減の各段階で、アルゴリズムの目標は、各列の高さを の値以下になるように削減することです。






からの各ステージでは、次の規則に従って、
重みが最も低い列から始めて各列を削減します。

- 列の縮小が必要ない場合は、列に移動します


- 半加算器で上位2つの要素を加算し、結果を列の一番下に置き、繰り上がりを列の一番下に置いて、列に移動する。



- それ以外の場合は、上位3つの要素を全加算器で加算し、結果を列の一番下に、繰り上がりを列の一番下に配置し、ステップ1から再開します。


アルゴリズムの例
7 つの半加算器(2 つのドット) と 35 個の全加算器(3 つのドット)を使用した、8x8 部分積行列の 4 層 Dadda 削減。各列のドットは、同じ重みのビットです。重みの低いビットは右端にあります。
隣の画像の例は、ここで説明されている 8 × 8 乗算器の削減を示しています。
初期状態は として選択され、最大値は 8 未満になります。


ステージ、
高さはすべて6ビット以下なので変更は行われません
なので、半加算器を適用して6ビットに減らし、そのキャリービットを
からの桁上げビットを含むので、全加算器と半加算器を適用して6ビットに減らす。
からの2つのキャリービットを含むので、再び全加算器と半加算器を適用して6ビットに減らす。
2つのキャリービットを含むので、1つの全加算器を適用して6ビットに減らす。
キャリービットを含めて高さが6ビット以下なので、変更は行われません。
ステージ、
高さはすべて4ビット以下なので変更は行われません
なので、半加算器を適用して4ビットに減らし、そのキャリービットを
からのキャリービットを含むので、全加算器と半加算器を適用して4ビットに減らす。
前のキャリービットも含め、2つの全加算器を適用して4ビットに減らす。
前のキャリービットも含めると、全加算器を適用して4ビットに減らす。
キャリービットを含めて高さが4ビット以下なので、変更は行われません。
ステージ、
高さはすべて3ビット以下なので変更は行われません
半加算器を適用して3ビットに減らし、そのキャリービットを加算します。
前のキャリービットも含むので、1つの全加算器を適用して3ビットに減らす
キャリービットを含めて高さが3ビット以下なので変更はありません。
ステージ、
高さはすべて2ビット以下なので変更は行われません
なので、半加算器を適用して2ビットに減らし、そのキャリービットを
前のキャリービットも含むので、1つの全加算器を適用して2ビットに減らす
からのキャリービットを含むため、変更は行われません。
追加
最後のステージの出力には、高さ 2 以下の 15 列が残り、標準加算器に渡すことができます。
参照
参考文献
- ^ ダッダ、ルイージ(1965 年 5 月)。 「並列乗算器のためのいくつかのスキーム」。アルタ・フリーケンザ。34 (5): 349–356。
Dadda, L. (1976)。「並列乗算器のいくつかの方式」。Swartzlander, Earl E. (編)。コンピュータ設計開発: 主要論文。Hayden Book Company。pp. 167–180。ISBN 978-0-8104-5988-5. OCLC 643640444.
- ^ Townsend, Whitney J.; Swartzlander, Jr., Earl E.; Abraham, Jacob A. (2003 年 12 月)。「Dadda 乗算器遅延と Wallace 乗算器遅延の比較」( PDF)。SPIE高度信号処理アルゴリズム、アーキテクチャ、実装 XIII。国際協会。doi :10.1117/12.507012。
さらに読む
- Savard, John JG (2018) [2006]. 「Advanced Arithmetic Techniques」. quadibloc . 2018-07-03 にオリジナルからアーカイブ。2018-07-16に取得。