Negabinaryの並列プレフィックス加算器セル


14

ネガバイナリベースの加算器の並列プレフィックス加算器を設計しようとしています。Negabinaryは、ベースである2の代わりに馴染みのベース2バイナリ。各1ビット加算器は合計を生成し、2つの(バイナリの1つではなく)キャリーを次の加算器に送ります。

加算器をより高速にするために、以下に示すLadner-Fischer構造のような並列プレフィックス構造を使用します。バイナリシステムの紫色のセルの機能についてはよく知っていますが、ネガバイナリシステムで同じ機能をどのように実現できるかわかりません。

私がこれをしている理由はただの楽しみのためであり、ネガバイナリの用途はまだ見つかっていません。

合計とキャリーの計算式:

si=aibi(ci++ci)

ci+1+=ai¯bi¯ci+¯ci

ci+1=aibici¯+aici+ci¯+bici+ci¯

Ladner-fischerキャリーツリー構造:

ここに画像の説明を入力してください

不明な点がある場合は、お気軽にお問い合わせください。


これは興味深い質問かもしれませんが、電気的な質問ではないようです。数学SEに持ち込むほうが良いかもしれません。
-Redja

3
EEの人はキャリーロジックや加算器の設計などの経験が豊富だと思うので、ここに置きます。
gilianzz

これは完全にEEの質問です
電圧スパイク

キャリーあたり3つ以上の出力が必要なようです。キャリーとボローの両方で生成および伝播する必要はありませんか?
スターク

あなたはラドナー・フィッシャー構造について話していると思います。これは、並列プレフィックスツリーを示すための例にすぎません。各1ビットのネガバイナリ加算器は、合計、正および負のキャリーを出力します。ネガバイナリで生成と伝播の概念を使用できるかどうかはわかりません。
gilianzz

回答:


1

たぶん、私はこの質問に思っているよりも多くの時間を費やしたでしょうが、ここに私の発見があります。

負数の「純粋な」並列プレフィックス加算器の例は見つかりません。また、それ可能でないという証拠を見たことがないので、それ未解決の問題だと思います。

最も近い方法は、2段階のネガティブネガバイナリ加算を使用することです(通常、文献ではnnbaと省略されます)。次のプロパティに基づいています。

f(x)=xn1¯xn2...x1¯x0g(x)=xn1xn2¯...x1x0¯0xAA...AA0x55...55

(a+nbb)=g(f(a)+f(b)+1)

+nb+

負の合計は、同じプロパティを使用して、オペランドがゼロの場合に単純に反転できます。

x=g(f(x)+f(0)+1)

したがって、並列プレフィックス加算器を使用して合計を見つけるには、次のことができます。

  1. f(a)f(b)
  2. +1s1
  3. s1fgs1)。これは最初の合計の終了であり、同時に反転も開始します。
  4. 結果を0xAA...AB=f0+1)並列プレフィックス加算器を使用して、2番目の中間和を生成します s2
  5. 計算する gs2 (各偶数ビットを反転して)最終的なネガバイナリの合計を見つけます。

私は実際に「純粋な」並列プレフィックス加算器を見つけようとしましたが、私はそれを費やすつもりだった時間のためには複雑すぎると考えました。その理由は次のとおりです。

並列プレフィックス加算器のポイントは、次の操作を見つけることです。 {01}n×{01}n{01}nこれにより、これらのビットからキャリー(この場合は2)を簡単に計算できます。追加された制約として、演算は、並列で計算されるために連想的である必要があります。たとえば、これは基本的にNOT演算子(二重否定の一部ではない)を除外します。例えば:ab=ab¯ is not an associative operator, because

(ab)c=ab¯c¯a(bc)=abc¯¯

Note that the boolean operator for the carries in your question includes the mixed terms ci+ci¯ and cici+¯, making it impossible to use it as-is. For a single carry in normal binary addition, it became quite obvious how to construct this operator when thinking about it in terms of generation and propagation, but it seems to be not so obvious for negabinary carries.


My current understanding is that it is in fact impossible to construct this "pure" parallel prefix adder. It would seem that a parallel prefix adder can get an efficiency of O(log(N)), whereas a negabinary equivalent seems to always have complexity O(2*log(N)) (2x n.n.b.a).
gilianzz

I didn't find any literature proving or stating that it was impossible. I'd be happy to be proven wrong either way though. But the 2-step n.n.b.a. does seem to be the standard currently for negabinary addition as far as I can tell.
Sven B
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.