符号なし整数の最大値はハードウェアにどのように実装されていますか?


10

多くのmax関数(および他のmax関数への引数としてのmax関数)を含む設計に取り組んでいます。

ハードウェア設計を簡素化するために、ハードウェアにmaxがどのように実装されているのか疑問に思いましたか?

数学的には、Max(a、b)は[(a + b)+ abs(b-a)] / 2として表すことができます。

これはどのようにハードウェアに実装されていますか?(すなわち、段階的に;追加、ビットシフト除算など)

もしそうなら、差の絶対値はどのように計算されますか?

回答:


10

非常に単純なアプローチは、(a> b)?a:bを実装することです。a> bは、左から開始して(a、b)の各ビットペアをチェックすることで実装できます。

  • 両方0または両方1:次の下位ペアに進む
  • aは1:aが最高です。bは1:bが最高

どれが最高かがわかっている場合は、2N-> Nマルチプレクサでその1つを選択できます。

巧妙なトリックでビットペアのチェックを同じビットペアのマルチプレクサと組み合わせることができます。


2

問題のアルゴリズムを見てみましょう:

[(a + b) + abs(b - a)]/2

これには加算と減算のステージがあり、これらは次に第2ステージの加算に送られます。2による除算はハードウェアでは簡単ですが、LSBを削除することで実行できます。ただし、2ステージの全加算器/減算器はかなり低速で、ゲート集約型です。特に、複数の比較をカスケード接続している場合はそうです。

Wouter van Ooijenの答えに基づいて構築された一般化された構造は、マルチプレクサの選択信号を供給するデジタルコンパレータです。

概略図

この回路のシミュレーションCircuitLabを使用して作成された回路

上記の回路図は次のとおりです。

(A > B) ? A : B

ただし、コンパレータの出力とマルチプレクサの選択を異なる論理接続にすることで、2つの入力を比較するために簡単に再構成できることに注意してください。

したがって、コンパレータからの3つの出力を公式化する方法を知っている場合は、ハードウェアで任意の比較を実装できます。コンパレータロジックについては、こちらで詳しく説明しています。ハードウェアを最適化するには、未使用のコンパレータ出力を駆動するロジックを削除するだけです。

しかし、結局のところ、ハードウェアに移行する場合は、合成を行う必要があります。したがって、どのゲートレベルのスキームが最適であるかを気にする必要はありません。代わりに、コードとアルゴリズムを最適化して、少なくともシンセサイザに非効率的な結果を生成させないようにします。「巧妙なトリックでビットペアのチェックを同じビットペアのマルチプレクサと組み合わせることができます。」この最適化を実行する最も簡単な方法は合成です。


1

maxを計算するための特別な回路を構築したい場合は、次の方程式を使用して基本ブロックから始めることができます。

EoあなたtE¬abLoあなたt¬ELEa¬br¬ELa¬LbEab

次に、それらを次の1桁を供給する最上位の桁に接続します。重要な部分はMSBからLSBに行きますが、減算に基づく回路では、せいぜい、LSBからMSBに行き、LSBに戻るクリティカルパスがあります。

キャリーリップル加算器に相当します。興味がある場合は、キャリーセーブまたはキャリーセレクト加算器と同等のものを作成できます。

EL¬Ea

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.