(57)【要約】  ディジタル論理回路において、２つのマルチビットベクトルの差が、所与の数に等しいか、または所与の２つの数の間にあるかどうかを判定するために必要な論理上および計算上の時間を相当に低減する改良型の技法。一態様例において、このことは、第１のＮビットベクトルＡ［Ｎ−１：０］と第２のＮビットベクトルＢ［Ｎ−１：０］をディジタル論理回路に受け入れることによって達成され、この場合にＮは非ゼロの正数である。次いで、第３のＮビットベクトルが、Ａ［Ｎ−１：０］および〜Ｂ［Ｎ−１：０］を用いて、ビット単位ＡＮＤ（Ａ［Ｎ−１：０］＆〜Ｂ［Ｎ−１：０］）演算を実行することによって得られる。さらに、第４のＮビットベクトルが、Ａ［Ｎ−１：０］および〜Ｂ［Ｎ−１：０］を用いて、ビット単位ＸＯＲ（Ａ［Ｎ−１：０］＾〜Ｂ［Ｎ−１：０］）演算を実行することによって得られる。次いで、第３のＮビットベクトルおよび第４のＮビットベクトルにおけるビットパターンに基づいて、第１のＮビットベクトルＡ［Ｎ−１：０］と第２のＮビットベクトルＢ［Ｎ−１：０］の差が、所与の数に等しいか、または所与の２つの数（＋ｍおよび＋ｎ、ｍ＜ｎ）の範囲内にあると宣言される。
2010522365.tif 000002
【特許請求の範囲】
【請求項１】
ディジタル論理回路において、第１のＮビットベクトルＡ［Ｎ−１：０］と第２のＮビットベクトルＢ［Ｎ−１：０］に対する比較演算を実行する方法であって、
Ｂ［Ｎ−１：０］のビット単位反転を実行して〜Ｂ［Ｎ−１：０］を得ること；
Ａ［Ｎ−１：０］および〜Ｂ［Ｎ−１：０］を用いてビット単位ＡＮＤ（Ａ［Ｎ−１：０］＆〜Ｂ［Ｎ−１：０］）演算を実行することによって第３のＮビットベクトルを得ること；
Ａ［Ｎ−１：０］および〜Ｂ［Ｎ−１：０］を用いてビット単位ＸＯＲ（Ａ［Ｎ−１：０］＾〜Ｂ［Ｎ−１：０］）演算を実行することによって第４のＮビットベクトルを得ること；および
第３のＮビットベクトルおよび第４のＮビットベクトルにおけるビットパターンに基づいて、Ａ［Ｎ−１：０］とＢ［Ｎ−１：０］の差が、所与の数に等しいこと、または、ｍ＜ｎである２つの数、＋ｍおよび＋ｎの所与の範囲内であることを宣言すること、を含む前記方法
【請求項２】
第１のＮビットベクトルＡ［Ｎ−１：０］と第２のＮビットベクトルＢ［Ｎ−１：０］を受け入れることをさらに含む、請求項１に記載の方法。
【請求項３】
第１のＮビットベクトルＡ［Ｎ−１：０］と第２のＮビットベクトルＢ［Ｎ−１：０］を受け入れる際に、Ｎビットベクトルが、８ビットベクトル、１６ビットベクトル、２４ビットベクトル、３２ビットベクトル、または６４ビットベクトルである、請求項２に記載の方法。
【請求項４】
第３のＮビットベクトルおよび第４のＮビットベクトルにおけるビットパターンに基づいて、Ａ［Ｎ−１：０］とＢ［Ｎ−１：０］の差が、所与の数に等しいこと、または、ｍ＜ｎである２つの数、＋ｍおよび＋ｎの所与の範囲内であることを宣言することが、
第４のＮビットベクトルを最下位ビット（ＬＳＢ）から最上位ビット（ＭＳＢ）へとスキャニングすることによって第４のＮビットベクトル内に０から１への遷移が１回だけあるかどうかを判定すること、
そうであれば、次いで、第４のＮビットベクトルにおいて０から１へのビット遷移が発生する、対応する位置におけるビットが、第３のＮビットベクトルにおいて１に等しいかどうか、および残りのビットが０に等しいかどうかを判定すること、および
そうであれば、次いで、第１のＮビットベクトルＡ［Ｎ−１：０］と第２のＮビットベクトルＢ［Ｎ−１：０］が＋１に等しいと宣言することを含む、請求項３に記載の方法。
【請求項５】
第３のＮビットベクトルおよび第４のＮビットベクトルにおけるビットパターンに基づいて、Ａ［Ｎ−１：０］とＢ［Ｎ−１：０］の差が、＋２に等しいことを宣言することが、
Ａ［Ｎ−１：０］のＬＳＢが、Ｂ［Ｎ−１：０］のＬＳＢと異なるかどうかを判定すること；
そうであれば、残りのビットのＬＳＢから開始して残りのビットの最上位ビット（ＭＳＢ）へと第４のＮビットベクトル内のビットをスキャニングすることによって、第４のＮビットベクトルの残りのビット内に、０から１へのビット遷移１が回だけ存在するかどうかを判定すること；
そうであれば、次いで、第４のＮビットベクトルの残りのビットにおいて０から１へのビット遷移が発生する、対応する位置におけるビットが、第３のＮビットベクトル内で１に等しいかどうか、および残りのビットが０に等しいかどうかを判定すること；および
そうであれば、次いで、Ａ［Ｎ−１：０］とＢ［Ｎ−１：０］の差が、＋２に等しいことを宣言することを含む、請求項３に記載の方法。
【請求項６】
第３のＮビットベクトルおよび第４のＮビットベクトルにおけるビットパターンに基づいて、Ａ［Ｎ−１：０］とＢ［Ｎ−１：０］の差が、＋３に等しいことを宣言することが、
Ａ［Ｎ−１：０］の２つのＬＳＢと、〜Ｂ［Ｎ−１：０］の対応する２つのＬＳＢが、それぞれ、００および１０、１０および００、または０１および０１のいずれかであるかどうかを判定すること；
そうであれば、残りのビットにおけるＬＳＢから開始して最上位ビット（ＭＳＢ）へと第４のＮビットベクトル内のビットをスキャニングすることによって、第４のＮビットベクトルの残りのビット（ここでの残りのビットはＮ−１：２を指す）内に、０から１へのビット遷移が１回だけあるかどうかを判定すること；
そうであれば、次いで、第４のＮビットベクトルの残りのビットにおいて０から１へのビット遷移が発生する、対応する位置におけるビットが、第３のＮビットベクトル内で１に等しいかどうか、および残りのビットが０に等しいかどうかを判定すること；および
そうであれば、次いで、Ａ［Ｎ−１：０］とＢ［Ｎ−１：０］の差が＋３に等しいことを宣言することを含む、請求項３に記載の方法。
【請求項７】
Ａ［Ｎ−１：０］の２つのＬＳＢと、〜Ｂ［Ｎ−１：０］の２つのＬＳＢにおける対応するビットが、両方とも１１に等しいかどうかを判定すること；
そうであれば、第４のＮビットベクトルにおける残りのビットが１に等しいかどうかを判定すること；および
そうであれば、Ａ［Ｎ−１：０］とＢ［Ｎ−１：０］の差が＋３に等しいと宣言することをさらに含む、請求項６に記載の方法。
【請求項８】
第１のＮビットベクトルＡ［Ｎ−１：０］と第２のＮビットベクトルＢ［Ｎ−１：０］に対する比較演算を実行するためのディジタイル論理回路であって、
第１のＮビットベクトルＡ［Ｎ−１：０］と第２のＮビットベクトルＢ［Ｎ−１：０］とを受け入れる第１の処理経路；
第１のＮビットベクトルＡ［Ｎ−１：０］と第２のＮビットベクトルＢ［Ｎ−１：０］とを受け入れる、前記第１の処理経路と並列の第２の処理経路であって、該第２の処理経路は、第２のＮビットベクトルＢ［Ｎ−１：０］のビット単位反転を実行して〜Ｂ［Ｎ−１：０］を取得し、第１の処理経路は、Ａ［Ｎ−１：０］と〜Ｂ［Ｎ−１：０］を用いてビット単位ＡＮＤ（Ａ［Ｎ−１：０］＆〜Ｂ［Ｎ−１：０］）演算を実行して、第４のＮビットベクトルを取得し、第２の処理毛色は、Ａ［Ｎ−１：０］および〜Ｂ「Ｎ−１：０」を用いてビット単位ＸＯＲ（Ａ〜Ｂ）演算を実行して第４のＮビットベクトルを取得する、前記第２の処理経路；および
第３のＮビットベクトルおよび第４のＮビットベクトルのビットパターンに基づいて、Ａ［Ｎ−１：０］とＢ［Ｎ−１：０］の差が所与の数に等しいこと、またはｍ＜ｎである２つの数、＋ｍと＋ｎの所与の範囲内にあることを宣言する、最終出力モジュールを含む、前記ディジタル論理回路。
【請求項９】
Ｎビットベクトルが、８ビットベクトル、１６ビットベクトル、２４ビットベクトル、３２ビットベクトル、または６４ビットベクトルである、請求項８に記載のディジタル論理回路。
【請求項１０】
第２の処理経路は、第４のＮビットベクトル内のビットを最下位ビット（ＬＳＢ）から最上位ビット（ＭＳＢ）までスキャンしたときに、第４のＮビットベクトル内に０から１へのビット遷移が１回だけあるかどうかを判定し、
第２の処理経路は、第４のＮビットベクトル内で０から１へのビット遷移が発生する対応する位置におけるビットが、第３のＮビットベクトル内で１に等しいかどうか、および残りのビットが０に等しいかどうかを判定し、
最終出力モジュールは、第４のＮビットベクトル内で０から１へのビット遷移が発生する対応する位置におけるビットが、第３のＮビットベクトル内で１に等しく、残りのビットが０に等しい場合に、第１のＮビットベクトルＡ［Ｎ−１：０］と第２のＮビットベクトルＢ［Ｎ−１：０］の差が＋１に等しいと宣言する、請求項９に記載のディジタル論理回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディジタル論理回路に関し、より詳細には、ディジタイル集積回路内部の比較論理ユニットに関する。
【背景技術】
【０００２】
２つのマルチビットベクトルの比較は、ディジタル論理回路において実行される一般的な演算である。また、ディジタル論理回路においては、等号性（equality）に対する比較演算を実行することも一般的である。さらに、ときには、２つのマルチビットベクトルが、値においてある量だけ異なるかどうかを判定することが必要となる。例えば、２つのマルチビットベクトルの差が、＋１、＋２、または＋ｎに等しいかどうかを見いだす、比較演算を実行することが必要となることが多い。しばしば、２つのマルチビットベクトルＡ［Ｎ−１：０］およびＢ［Ｎ−１：０］の差が、ｍおよびｎの両方が既知である場合に、＋ｍ〜＋ｎ（ｍ＜ｎ）の範囲内であるかどうかを判定すること、すなわち不等号性（inequality）＋ｍ≦Ａ［Ｎ−１：０］−Ｂ［Ｎ−１：０］≦＋ｎを評価することが必要となる。
【０００３】
従来より、Ａ［Ｎ−１：０］＝＝Ｂ［Ｎ−１：０］＋ｎなどの等号性を検証するために、２つのマルチビットベクトルに対して実行される比較演算には、ディジタル論理回路において、Ｎビット加減算器に続いて、Ｎビットの比較器が必要となる。さらに、２つのベクトル間の差が、ある範囲にあるかどうかを判定する演算を実行する従来式技法では、少なくとも１つの加減算器と複数の比較器とが必要となる。一般的に、ディジタイル回路内のそれぞれの加減算器は、かなりの数の論理ゲートを必要とし、これには大きなシリコン面積が必要となる。さらに、それによって大きな遅延が生じる。
【発明の概要】
【０００４】
本発明の一観点によれば、ディジタル論理回路内での２つのマルチビットベクトルの比較方法であって、Ｎが非ゼロの正の数であるときに、第１のＮビットベクトルＡ［Ｎ−１：０］および第２のＮビットベクトルＢ［Ｎ−１：０］をディジタル論理回路に受け入れるステップ、Ａ［Ｎ−１：０］と、第２のＮビットベクトルＢ［Ｎ−１：０］における各ビットを反転することによって得られる〜Ｂ［Ｎ−１：０］とを用いてビット単位ＡＮＤ（Ａ［Ｎ−１：０］＆〜Ｂ［Ｎ−１：０］）演算を実行することによって第３のＮビットベクトルを得るステップ、Ａ［Ｎ−１：０］および〜Ｂ［Ｎ−１：０］を用いて、ビット単位ＸＯＲ（Ａ［Ｎ−１：０］＾〜Ｂ［Ｎ−１：０］）演算を実行することによって第４のＮビットベクトルを得るステップ、およびＡ［Ｎ−１：０］とＢ［Ｎ−１：０］の差が、所与の数に等しいか、または、ｍ＜ｎである２つの数、＋ｍおよび＋ｎの所与の範囲内であるかどうかを、第３のＮビットベクトルおよび第４のＮビットベクトルにおけるビットパターンに基づいて宣言するステップ、を含む方法が提供される。
次いで、本発明の態様を、例としてのみ、添付の図面を参照して説明する。
【図面の簡単な説明】
【０００５】
【図１】ディジタル論理回路内での比較演算を実現するための本発明の一態様によるフローチャートである。
【図２】本発明の一態様による、ディジタイル回路において、２つのマルチビットベクトルの差が＋１に等しい場合に、比較演算を実現する装置のブロック図である。
【図３】本発明の一態様によるディジタル論理回路において、２つのマルチビットベクトル間の差が＋２に等しい場合に、比較演算を実現する装置のブロック図である。
【図４】本発明の一態様によるディジタル論理回路において、２つのマルチビットベクトル間の差が＋３に等しい場合に、比較演算を実現するための装置のブロック図である。
【図５】本発明の一態様によるディジタル論理回路において、２つのマルチビットベクトル間の差が０または＋１に等しい場合に、比較演算を実現するための装置のブロック図である。
【発明を実施するための形態】
【０００６】
本発明の様々な態様についての以下の詳細な説明においては、本明細書の一部を形成する添付の図面を参照し、これらの図面には、本発明を実施することができる具体的な態様が例証として示されている。これらの態様は、当業者が本発明を実施することができるように、十分に詳細な説明がなされており、また、その他の態様を使用してもよいこと、および本発明の範囲から逸脱することなく変更を加えることができることを理解すべきである。したがって、以下の詳細な説明は、限定の意味で解釈すべきではなく、本発明の範囲は、添付の請求の範囲によってのみ定義されるものである。
【０００７】
「マルチビットベクトル」および「Ｎビットベクトル」の用語は、本明細書を通して同義で用いる。また、第１のＮビットベクトル、第１のＮビットベクトルＡ［Ｎ−１：０］、およびＡ［Ｎ−１：０］の用語は、本明細書を通して同義で用いる。さらに、第２のＮビットベクトル、第２のＮビットベクトルＢ［Ｎ−１：０］、およびＢ［Ｎ−１：０］の用語も、本明細書を通して同義で用いる。また、「０から１へ」、「０→１」の用語は、本明細書を通して同義で用いる。さらに、「０」および「１」の表記は、ディジタル論理回路の文脈において、それぞれロー論理レベルおよびハイ論理レベルとしての値を示すものとして使用される。
【０００８】
また、等号論理Ａ［Ｎ−１：０］＝＝Ｂ［Ｎ−１：０］＋ｎは、本明細書を通して、それと等価な形式、Ａ［Ｎ−１：０］−Ｂ［Ｎ−１：０］＝＝ｎ、Ａ［Ｎ−１：０］＋〜Ｂ［Ｎ−１：０］＋１＝＝ｎ、およびＡ［Ｎ−１：０］＋〜Ｂ［Ｎ−１：０］＝＝ｎ−１で表わして用いられる。ｎ＝１の場合に、比較演算に対してこの等号論理が真であるためには、Ａ［Ｎ−１：０］＋〜Ｂ［Ｎ−１：０］の和は０とならなければならない。同様に、この等号性がｎ＝２に対して真であるためには、Ａ［Ｎ−１：０］＋〜Ｂ［Ｎ−１：０］は、１とならなくてはならない、などである。
【０００９】
図１は、２つのオペランド間の差が所与のｎに対して＋ｎに等しいか、または２つの所与の数字、＋ｍおよび＋ｎの範囲内にある場合に、２つのマルチビットベクトルに対して比較演算を実行するための方法例１００を示す。ステップ１１０において、方法１００は、第１のＮビットベクトルＡ［Ｎ−１：０］および第２のＮビットベクトルＢ［Ｎ−１：０］を受け入れることによって開始される。Ｎビットベクトルは、任意のマルチビットベクトルであってもよい。態様によっては、Ｎビットベクトルは、８ビットベクトル、１６ビットベクトル、２４ビットベクトル、３２ビットベクトル、または６４ビットベクトルである。
【００１０】
ステップ１２０において、〜Ｂ［Ｎ−１：０］を得るためにＢ［Ｎ−１：０］のビット単位の反転が実行される、すなわちＢ［Ｎ−１：０］の全ビットを反転することによって〜Ｂ［Ｎ−１：０］が得られる。ステップ１３０において、第３のＮビットベクトルが、受け入れたＡ［Ｎ−１：０］と、得られた〜Ｂ［Ｎ−１：０］を用いて、ビット単位ＡＮＤ（Ａ［Ｎ−１：０］＆〜Ｂ［Ｎ−１：０］）演算を実行することによって得られる。ステップ１４０において、第４のＮビットベクトルが、受け入れたＡ［Ｎ−１：０］と得られた〜Ｂ［Ｎ−１：０］を用いて、ビット単位ＸＯＲ（Ａ［Ｎ−１：０］＾〜Ｂ［Ｎ−１：０］）演算を実行することによって得られる。
【００１１】
ステップ１５０において、受け入れたＡ［Ｎ−１：０］とＢ［Ｎ−１：０］の差は、第３のＮビットベクトルおよび第４のＮビットベクトルにおけるビットパターンに基づいて、所与のｎに対して＋ｎに等しいか、またはｍおよびｎが与えられて、ｍ＜ｎである場合に、＋ｍと＋ｎの範囲内にあると宣言される。例えば、ステップ１５０では、受け入れたＡ［Ｎ−１：０］とＢ［Ｎ−１：０］の差が０か、または１であるかを、第３のＮビットベクトルおよび第４のＮビットベクトルのビットパターンに基づいて、判定してもよい。以下の例は、比較演算の具体的な事例について説明するものである。
【００１２】
事例（１）：等号性Ａ＝＝Ｂ＋ｎの評価、ｎ＝１の場合（Ａ＿ＥＱ＿Ｂ＿ＰＬＵＳ＿１）
態様によっては、ｎ＝１に対する、比較演算に対して、すなわち受け入れたＡ［Ｎ−１：０］とＢ［Ｎ−１：０］の差は、＋１に等しく（すなわちＡ［Ｎ−１：０］＝＝Ｂ［Ｎ−１：０］＋１）、ステップ１５０において、上記の方法１００は、Ａ［Ｎ−１：０］と〜Ｂ［Ｎ−１：０］を加算したときに０となるかどうかを判定する。
【００１３】
以下の表の例は、８ビットベクトルを使用して、方法１００を図解している。
【表１】
2010522365.tif 000003
【００１４】
上記の例において、任意のビット位置ｇの右側では、Ａ［Ｎ−１：０］および〜Ｂ［Ｎ−１：０］のすべてのビットは０に等しく、これによって０が合計ビットとなり、繰上りを生じないことが分かる。上記の表の例においては、任意ビット位置ｇにおいて、Ａ［Ｎ−１：０］と〜Ｂ［Ｎ−１：０］のビットの両方が１に等しく、それによって合計ビットは０となり、繰上りを生じる。任意ビット位置ｇの左側のすべてのビット位置は、Ａ［Ｎ−１：０］または〜Ｂ［Ｎ−１：０］のいずれかにおいて１を有し、かつ両方が１を有することがなく、その結果として、それらのビット位置は、繰上りを伝播して、合計０を生成することができる。
【００１５】
したがって、上記の表の例から、Ａ［Ｎ−１：０］−Ｂ［Ｎ−１：０］＝＝１またはそれと等価なＡ［Ｎ−１：０］＋〜Ｂ［Ｎ−１：０］＝＝０を検出する問題は、Ａ［Ｎ−１：０］および〜Ｂ［Ｎ−１：０］における上記のビットパターンの存在を同定するのと等価であり、この同定は第３のＮビットベクトルおよび第４のＮビットベクトルによって支援され、これらは、以下のように特徴づけられる。
１．第４のＮビットベクトルが右から左にスキャンされるときに、０から１へのビット遷移が１回だけ見つかる。
２．第３のＮビットベクトルのビットが、０から１へのビット遷移のビット位置、すなわち任意のビット位置ｇに、１つだけ１を有する。
【００１６】
これらの態様において、ステップ１５０では、方法１００は、第４のＮビットベクトルにおいて０から１へのビット遷移が発生する、対応するビット位置におけるビットが、第３のＮビットベクトルにおいて１に等しく、かつ残りのビットが０に等しいかどうかをさらに判定する。さらに、ステップ１５０において、方法１００は、第４のＮビットベクトルにおいて０から１へのビット遷移が１回だけあるかどうかを判定する。次いで、方法１００は、第１のＮビットベクトルＡ［Ｎ−１：０］と第２のＮビットベクトルＢ［Ｎ−１：０］の差を、＋１に等しいと宣言するか、または方法１００は、Ａ［Ｎ−１：０］−Ｂ［Ｎ−１：０］＝＝＋１であると宣言する。
【００１７】
第４のＮビットベクトルビットにおける０→１のビット遷移の検出は、第４のＮビットベクトルビットと、１ビット位置だけ右にシフトされた同ビットとの間でビット単位ＸＯＲ演算を実行し、それによって、ＬＳＢが最右端ビットであると仮定して、第５のＮビットベクトルを生成することによって得られる。ビットを右にシフトする一方で、最左端ビットまたはＭＳＢが、右シフトによって生成された空位置にコピーされる。第６のＮビットベクトルが、第３のＮビットベクトルと第５のＮビットベクトルとの間で、ビット単位ＸＯＲ演算を実行することによって生成される。これらの態様において、第６のＮビットベクトルは０だけを有し、これらは、その全ビットに対してＮＯＲ演算を行うことによって検出される。このＮＯＲ演算の結果として１が得られる場合には、第５のＮビットベクトルにおけるビットは、第３のＮビットベクトルビットと厳密に一致する。
【００１８】
【表２】
2010522365.tif 000004
【００１９】
上記の表において、第４のＮビットベクトルビットのＭＳＢを１に等しいとすることは、Ａ［Ｎ−１：０］およびＢ［Ｎ−１：０］が正数であって、そのＭＳＢとして０を有することを要求するのと等価である。ベクトルＡ［Ｎ−１：０］およびＢ［Ｎ−１：０］が、その解釈において符号なしの数として扱われる場合には、ベクトルＡ［Ｎ−１：０］およびＢ［Ｎ−１：０］の両方に対して、ＭＳＢに対して左の位置に０ビットを加えて、それによって実質的に、２つのマルチビットベクトルの幅を１だけ増大させることができる。
【００２０】
上記の方法が正しい結果を得るためには、第４のＮビットベクトルは、１回、かつ１回だけの０から１へのビット遷移を有することが必要である。第４のＮビットベクトルビットがすべて１に等しく、第３のＮビットベクトルビットが０に等しい場合には、第４のＮビットベクトルにおける０→１遷移を検証する上記の方法では、正しい結果を得ることができない。この境界事例は、第３のＮビットベクトルビットのすべてが０に等しくはないことを要件とすることによって除外することができる。
【００２１】
この演算の全体は、以下の論理式を用いて表わすことができる。
Ａ＿ＥＱ＿Ｂ＿ＰＬＵＳ＿１＝
（〜｜（ＸＯＲ［Ｎ−１：０］＾（ＸＯＲ［Ｎ−１：０］＞＞Ｉ））＾ＡＮＤ［Ｎ−１：０］）＆｜ＡＮＤ［Ｎ−ｌ：０］  
または、これと等価に
Ａ＿ＥＱ＿Ｂ＿ＰＬＵＳ＿１＝
（＆（ＸＯＲ［Ｎ−１：０］〜＾（ＸＯＲ［Ｎ−１：０］＞＞１））＾ＡＮＤ［Ｎ−１：０］）＆｜ＡＮＤ［Ｎ−１：０］
ここで、ＡＮＤ［Ｎ−１：０］は、第３のＮビットベクトルであり、ＸＯＲ［Ｎ−１：０］は第４のＮビットベクトルである。
【００２２】
第４のＮビットベクトルのビットシフト動作、すなわちＸＯＲ＞＞１は、ＭＳＢを保存する、１ビット位置の算術的右シフトである。「＆」、「＾」、「｜」、および「〜」は、それぞれビット単位のＡＮＤ、ＸＯＲ、ＯＲ、およびＩＮＶＥＲＴ演算である。式の右辺の最初に含まれる「＆」および「｜」演算子は、それぞれＡＮＤおよびＯＲリダクション演算を意味する。
【００２３】
事例（２）：等号性Ａ＝＝Ｂ＋ｎの評価、ｎ＝２の場合（Ａ＿ＥＱ＿Ｂ＿ＰＬＵＳ＿２）
態様によっては、ｎ＝２の場合、すなわち受け入れたＡ［Ｎ−１：０］とＢ［Ｎ−１：０］の差が＋２に等しく、Ａ［Ｎ−１：０］＝＝Ｂ［Ｎ−１：０］＋２、またはこれと等価にＡ［Ｎ−１：０］＋〜Ｂ［Ｎ−１：０］＝＝＋１となる比較演算が、我々の８ビットベクトル実行例を用いて以下の表に図解されている。上記のＡ［Ｎ−１：０］＋〜Ｂ［Ｎ−１：０］の加算工程では、結果として１に等しくなるＬＳＢを除き、すべて０を生成されることが分かる。
【００２４】
したがって、Ａ［Ｎ−１：０］および〜Ｂ［Ｎ−１：０］のビットパターンは、以下の表に示すものだけが可能である。
【表３】
2010522365.tif 000005
【００２５】
このように、ｎ＝２の場合、すなわち、受け入れたＡ［Ｎ−１：０］とＢ［Ｎ−１：０］の差が＋２に等しく、Ａ［Ｎ−１：０］＝＝Ｂ［Ｎ−１：０］＋２となる比較演算に対しては、方法１００は、ステップ１５０において、Ａ［Ｎ−１：０］および〜Ｂ［Ｎ−１：０］のＬＳＢが異なるかどうかを判定する（すなわち、方法１００は、それらのＬＳＢが、それぞれ、０および１、または１および０であるかどうかを判定する）。Ａ［Ｎ−１：０］と〜Ｂ［Ｎ−１：０］のＬＳＢ同士が異なる場合には、方法１００は、ステップ１５０において、第１のＮビットベクトルおよび第３のＮビットベクトルが加算されるときに、Ａ［Ｎ−１：０］および〜Ｂ［Ｎ−１：０］のその他のすべてのビット、すなわちＡ［Ｎ−１：１］およびＢ［Ｎ−１：１］が０となるかどうかをさらに判定する。これは、ステップ１５０において、「等号性Ａ＝＝Ｂ＋ｎの評価、ｎ＝１の場合（Ａ＿ＥＱ＿Ｂ＿ＰＬＵＳ＿１）」の項において上述したのと同一の演算を、Ａ［Ｎ−１：１］および〜Ｂ［Ｎ−１：１］だけに適用することによって判定することができ、これは本質的にＡ［Ｎ−１：１］＋〜Ｂ［Ｎ−１：１］＝＝０を求めることである。Ａ［Ｎ−１：０］および〜Ｂ［Ｎ−１：０］のＬＳＢ同士、すなわちＡ［０］と〜Ｂ［０］が異なり、またＡ［Ｎ−１：０］および〜Ｂ［Ｎ−１：０］の残りのビット、すなわちＡ［Ｎ−１：１］および〜Ｂ［Ｎ−１：１］が、加算されたときに０である場合には、方法１００は、ステップ１５０において、受け入れた第１のＮビットベクトルＡ［Ｎ−１：０］と第２のＮビットベクトルＢ［Ｎ−１：０］の差が＋２に等しいとして、すなわちｎ＝＋２として宣言する。
【００２６】
ｎ＝２の事例に対する等号性に関する上記の演算は、上述したのと同様の論理表記を使用して、以下の式を用いて表わすことができる。
Ａ＿ＥＱ＿Ｂ＿ＰＬＵＳ＿２  ＝
（〜｜（ＸＯＲ［Ｎ−１：１］＾（ＸＯＲ［Ｎ−１：ｌ］＞＞１））＾ＡＮＤ［Ｎ−１：１］）＆｜ＡＮＤ［Ｎ−１：１］）＆ＸＯＲ［０］．
【００２７】
事例（３）：等号性Ａ＝Ｂ＋ｎの評価、ｎ＝３の場合（Ａ＿ＥＱ＿Ｂ＿ＰＬＵＳ＿３）
態様によっては、ｎ＝３（受け入れたＡ［Ｎ−１：０］とＢ［Ｎ−１：０］の差が＋３に等しく、したがってＡ［Ｎ−１：０］＝＝Ｂ［Ｎ−１：０］＋３、またはそれと等価に、Ａ［Ｎ−１：０］＋〜Ｂ［Ｎ−１：０］＝＝２）に関する比較演算に対して、加算工程、Ａ［Ｎ−１：０］＋〜Ｂ［Ｎ−１：０］は、２値ストリング１０を生成する２つのＬＳＢを除くすべての位置で、すべて０を生成する。
【００２８】
Ａ［Ｎ−１：０］の２つのＬＳＢと、〜Ｂ［Ｎ−１：０］の関連する２つのＬＳＢとにおける以下の組合せは、１０を生成する。
【表４】
2010522365.tif 000006
【００２９】
Ａ［Ｎ−１：０］およびＢ［Ｎ−１：０］の２つのＬＳＢが、上記にリストした最初の３つの事例の１つと同じである場合には、第１のＮビットベクトルと第２のＮビットベクトルが加算されると、Ａ［Ｎ−１：０］およびＢ［Ｎ−１：０］のすべての残りのビットは０の群を生成する。これらの態様においては、「等号性Ａ＝＝Ｂ＋ｎを評価、ｎ＝１の場合」の項を参照して説明した方法を、それらのビット、すなわち［Ｎ−１：２］に対して適用することができる。上記の最後の事例と同様に、Ａ［Ｎ−１：０］とＢ［Ｎ−１：０］の２つのＬＳＢが同じである場合には、その結果は、第３のＬＳＢ位置への繰上り（carry）が生ずる。そのような場合には、２つのＬＳＢ位置を除くすべての位置で、すべて０を得るためには、すべての残りのビット、すなわちＡ［Ｎ−１：２］および〜Ｂ［Ｎ−１：２］は、加算されると、すべて１を生成しなくてはならない。
【００３０】
したがって、ｎ＝３に対しては、上記の方法１００は、ステップ１５０において、Ａ［Ｎ−１：０］の２つのＬＳＢおよび〜Ｂ［Ｎ−１：０］の関連する２つのＬＳＢが、１０および００、００および１０、または０１および０１に等しいかどうかを判定する。Ａ［Ｎ−１：０］の２つのＬＳＢと、〜Ｂ［Ｎ−１：０］の関連する２つのＬＳＢが、１０および００、００および１０、または０１および０１に等しい場合には、方法１００は、ステップ１５０において、「等号性Ａ＝Ｂ＋ｎの評価、ｎ＝１の場合」の項を参照して概説したのと同じ演算を、Ａ［Ｎ−１：０］および〜Ｂ［Ｎ−１：０］のビット［Ｎ−１：２］に適用することによって、Ａ［Ｎ−１：２］＋〜Ｂ［Ｎ−１：２］＝＝０であるかどうかを判定する。これらの２つの検証が成功すれば、方法１０は、第１のＮビットベクトルＡ［Ｎ−１：０］と第２のＮビットベクトルＢ［Ｎ−１：０］との差が＋３に等しいと宣言する。方法１００が、ステップ１５０において、Ａ［Ｎ−１：０］と〜Ｂ［Ｎ−１：０］の両方の２つのＬＳＢが１１であると判定する場合には、方法１００は、さらに、第４のベクトル、すなわちＸＯＲ［Ｎ−１：２］の残りのすべてのビット位置が、すべて１であるかどうかをさらに判定する。次いで、方法１００は、第１のＮビットベクトルＡ［Ｎ−１：０］と第２のＮビットベクトルＢ［Ｎ−１：０］の差は＋３に等しいと宣言する。
【００３１】
以下は、上述の演算シナリオを式形態で説明している。
【表５】
2010522365.tif 000007
【００３２】
事例（４）：等号性Ａ＝＝Ｂ＋ｎの評価、ｎ＞３の場合
ｎ＝＋３に対する上述の方法を、任意所与の数、すなわちｎ＞３に一般的に拡張することができることが分かる。任意所与のｎに対して、Ａ［Ｎ−１：０］＋〜Ｂ［Ｎ−１：０］は、ｎ−１に等しい必要がある。さらに、Ａ［Ｎ−１：０］および〜Ｂ［Ｎ−１：０］の適当な数の最下位ビットを検証して、その合計がｎ−１であるかどうかを知る必要がある。これらの最下位ビットの合計から発生する繰上りがある場合には、第４のＮビットベクトル内のビットの残りは、すべて１に等しくなくてはならない。繰上りがない場合には、「等号性Ａ＝＝Ｂ＋ｎの評価、ｎ＝１の場合」の項において概説した、事例ｎ＝１に対する方法が、Ａ［Ｎ−１：０］および〜Ｂ［Ｎ−１：０］の残りのビットに適用されて、それらが加算した場合に０になるかどうかが検証される。
【００３３】
事例（５）：不等号性ｍ≦Ａ−Ｂ≦ｎの評価
態様によっては、わずかの修正によって、２つの受け入れたマルチビットベクトルの差が＋ｍと＋ｎ（ｍ＜ｎ）の範囲内であるかどうかを判定するのに、上記の技法を使用することも考えられる。この比較はまた、Ａ［Ｎ−１：０］と〜Ｂ［Ｎ−１：０］の合計の高次ビットにおける０の検出にも関係し、このためには、「等号性Ａ＝＝Ｂ＋ｎの評価、ｎ＋１の場合」の項において概説したのと同一の方法を、適当なビットに適用することができる。例えば、Ａ［Ｎ−１：０］と〜Ｂ［Ｎ−１：０］の差が、０と＋１の間（すなわち、Ａ［Ｎ−１：０］＝＝Ｂ［Ｎ−１：０］またはＡ［Ｎ−１：０］＝＝Ｂ［Ｎ−１：０］＋１）であるか、または０と＋２の間（すなわち、Ａ［Ｎ−１：０］＝＝Ｂ［Ｎ−１：０］またはＡ［Ｎ−１：０］＝＝Ｂ［Ｎ−１：０］＋１またはＡ［Ｎ−１：０］＝＝Ｂ［Ｎ−１：０］＋２）であるかを判定することができる。
【００３４】
例えば、２つの受け入れたマルチビットベクトルの差が、０と＋１の範囲内（すなわちＡ［Ｎ−１：０］＝＝Ｂ［Ｎ−１：０］またはＡ［Ｎ−１：０］＝＝Ｂ［Ｎ−１：０］＋１）であるかどうかを判定するためには、上記の方法１００を、「等号性Ａ＝＝Ｂ＋ｎの評価、ｎ＝１の場合」の項を参照して、第３のＮビットベクトル内に１に等しいビットが少なくとも１つあるかどうかを検証するステップを除去した後に、使用することができる。以前と類似の論理表記を使用して、この不等号性０≦Ａ−Ｂ≦１は、以下の式形式で表わすことができる。
Ａ＿ＥＱ＿Ｂ＿ＰＬＵＳ＿０＿ＯＲ＿１＝
（〜｜（Ｘ０Ｒ［Ｎ−１：０］＾（ＸＯＲ［Ｎ−１：０］＞＞１））＾ＡＮＤ［Ｎ−１：０］）
【００３５】
同様に、２つの受け入れたマルチビットベクトル間の差が、＋１または＋２にいずれかに等しいか（すなわち、Ａ［Ｎ−１：０］＝＝Ｂ［Ｎ−１：０］＋１またはＡ［Ｎ−１：０］＝＝Ｂ［Ｎ−１：０］＋２）どうかを判定するために、「等号性Ａ＝＝Ｂ＋ｎの評価、ｎ＝２の場合」の項で概説したように、ｎ＝＋２について上記の方法１００を、Ａ［Ｎ−１：０］と〜Ｂ［Ｎ−１：０］のＬＳＢが０および１、または１および０であるかどうかを検証するステップを、Ａ［Ｎ−１：０］と〜Ｂ［Ｎ−１：０］のＬＳＢが、両方とも１ではないかどうかを検証するステップで置き換えた後に、使用することができる。以前と同様の論理表記を使用して、この等号性を、以下の式を使用して表わすことができる。
Ａ＿ＥＱ＿Ｂ＿ＰＬＵＳ＿１＿ＯＲ＿２＝
（〜｜（ＸＯＲ［Ｎ−１：１］＾（ＸＯＲ［Ｎ−１：ｌ］＞＞１））＾ＡＮＤ［Ｎ−１：ｌ］）＆｜ＡＮＤ［Ｎ−１：１］）＆〜ＡＮＤ［０］．
【００３６】
上記の説明を、異なる所与の数字の範囲に係わる比較演算を実行できるように拡張する方法が、当業者には明らかであるはずである。
フローチャート１００は、例示的な態様においては直列に配列されたステップ１１０〜１５０を含むが、本発明のその他の態様では、２つ以上のステップを並列に実行することもできる。また、さらに別の態様では、これらのステップを、モジュール間およびそれらを通して通信される、関係する制御信号およびデータ信号を備える、２つ以上の特定の相互接続されたハードウエアモジュールとして、または用途特定集積回路の部分として、実現することもできる。このように、例示的なプロセスフロー図は、ソフトウエア、ファームウエア、および／またはハードウエアの実装に適用することができる。
【００３７】
図２に示すディジタル論理回路図２００は、２つの受け入れた第１のＮビットベクトルと第２のＮビットベクトル、それぞれＡ［Ｎ−１：０］とＢ［Ｎ−１：０］の差が＋１に等しいかどうかを判定する、上記の比較演算アルゴリズムの実現例を示すものである。図２に示すように、ディジタル論理回路２００は、第１の処理経路２１０、第２の処理経路２２０、および最終出力モジュール２３０を含む。
【００３８】
動作に際して、第１の処理経路２１０は、第１のＮビットベクトルＡ［Ｎ−１：０］を受け入れる。第１の処理経路２１０と並列の第２の処理経路２２０は、第２のＮビットベクトルＢ［Ｎ−１：０］を受け入れる。第２の処理経路２２０は、第２のＮビットベクトルＢ［Ｎ−１：０］のビット単位の反転を実行して、〜Ｂ［Ｎ−１：０］を得る。次いで、処理経路２１０が、Ａ［Ｎ−１：０］と〜Ｂ［Ｎ−１：０］を用いてビット単位ＡＮＤ（Ａ［Ｎ−１：０］＆〜Ｂ［Ｎ−１：０］）演算を実行して、第３のＮビットベクトルを得る。次いで、第２の処理経路２２０は、Ａ［Ｎ−１：０］と〜Ｂ［Ｎ−１：０］を用いてビット単位ＸＯＲ（Ａ［Ｎ−１：０］＾〜Ｂ［Ｎ−１：０］）演算を実行して、第４のＮビットベクトルを得る。
【００３９】
態様によっては、第２の処理経路２２０は、第４のＮビットベクトルと、算術的右シフト演算を第４のＮビットベクトルに対して実行することによって得られた、別のＮビットベクトルとの間のビット単位ＸＮＯＲ演算を実行することによって、第５のＮビットベクトルを得る。次いで、第２の処理経路は、第５のＮビットベクトルと第３のＮビットベクトルにビット単位ＸＯＲ演算を実行して、第６のＮビットベクトルを得る。次いで、最終出力モジュール２３０、すなわち最終Ｎ＋１入力ＡＮＤゲートが、Ａ［Ｎ−１：０］とＢ［Ｎ−１：０］の差が＋１に等しいことを宣言する。
【００４０】
態様によっては、第２の処理経路２２０では、第４のＮビットベクトルを最下位ビット（ＬＳＢ）から最上位ビット（ＭＳＢ）へスキャンするときに、第４のＮビットベクトル内に１回だけ０から１へのビット遷移があるかどうかを判定する。次いで、第２の処理経路２２０では、０から１へのビット遷移が第４のＮビットベクトル内で発生する、対応する位置におけるビットが、第３のＮビットベクトルにおいて１に等しいかどうか、および第４のＮビットベクトル内に１回だけの０から１へのビット遷移がある場合には、残りのビットが０に等しいかどうかを判定する。次いで、最終出力モジュール２３０は、０から１へのビット遷移が第４のＮビットベクトルに発生する、対応する位置におけるビットが、第３のＮビットベクトルにおいて１に等しく、残りのビットが０に等しい場合には、第１のＮビットベクトルＡ［Ｎ−１：０］と第２のＮビットベクトルＢ［Ｎ−１：０］との差が＋１に等しいと宣言する。
【００４１】
図２に示すディジタル論理回路２００の動作は、図１を参照してより詳細に説明される。図２では、上述の比較演算が、完全な加算および／または減算を必要とせず、したがって、上記の技法は、必要とする論理ゲート数がより少ないので面積が大幅に小さくなることが分かる。この演算は、必要とする論理深度が大幅に小さいので、高速でもある。
【００４２】
図３に示すディジタル論理回路図３００は、受け入れたＮビットベクトル、Ａ［Ｎ−１：０］とＢ［Ｎ−１：０］に対して、その差が＋２に等しいかどうかを判定する、上記の比較演算アルゴリズムの実現例を示す。図３に示すように、ディジタル論理回路３００は、第１の処理経路３１０、第２の処理経路３２０、および最終出力モジュール３３０を含む。受け入れたＮビットベクトル、Ａ［Ｎ−１：０］とＢ［Ｎ−１：０］に対して、その差が＋２に等しいかどうかを判定する比較演算に使用する、ディジタル論理回路３００の動作は、図１を参照してより詳細に説明される。
【００４３】
図４に示すディジタル論理回路４００は、受け入れたＮビットベクトル、Ａ［Ｎ−１：０］とＢ［Ｎ−１：０］に対して、その差が＋３に等しいかどうかを判定する、上記の比較演算アルゴリズムの実現例を示す。図４に示すように、ディジタル論理回路４００は、第１の処理経路４１０、第２の処理経路４２０、および最終出力モジュール４３０を含む。受け入れたＮビットベクトルＡ［Ｎ−１：０］とＢ［Ｎ−１：０］に対して、その差が＋３に等しいかどうかを判定する、比較演算で使用するためのディジタル論理回路４００の動作は、図１を参照してより詳細に説明される。
【００４４】
図５に示すディジタル論理回路５００は、受け入れたＮビットベクトル、Ａ［Ｎ−１：０］とＢ［Ｎ−１：０］に対して、その差が０に等しいか、または＋１に等しいかどうかを判定する、上記の比較演算アルゴリズムの実現例を示す。図５に示すように、ディジタル論理回路５００は、第１の処理経路５１０、第２の処理経路５２０、および最終出力モジュール５３０を含む。受け入れたＮビットベクトルＡ［Ｎ−１：０］とＢ［Ｎ−１：０］に対して、差が０に等しいか、または＋１に等しいかどうかを判定する、比較演算に使用するための、ディジタル論理回路５００の動作は、図１を参照してより詳細に説明される。
【００４５】
上記の技法は、実質的に、加算／減算演算を不要にしながら、２つのオペランドに対して比較演算を行い、２つのオペランドの差が０、＋１、＋２、…＋ｎの内の１つであるか、または、＋ｍと＋ｎの範囲内かどうかを判定する。さらに、上記の技法は、完全な加算または減算を必要としないので、必要とする論理ゲートの数が大幅に少なく、大幅に高速である。さらに、典型的なライブラリセルセットを含む実現形態において、上記の技法は、加算演算または減算演算を使用する従来式技法に必要されるシリコン面積の約３分の１だけを必要とし、論理遅延は約半分である。上記の技法は、任意の差値ｎに対してスケール変更して適用できる。
【００４６】
図１〜５に示した上記の例示態様は、２つのマルチビットベクトルに対する比較演算を実行して、その差が＋１、＋２、および／または＋３であるかどうかを調べることを参照して説明されているが、上記の技法は、２つのマルチビットベクトルの差が＋１、＋２、または＋３であるかどうかを検証することに限定されるものではなく、２つのマルチビットを比較して、差が＋１、＋２、および／または、ｎを既知として＋ｎであるかどうかを調べるのに使用することができる。上記の技法の実現形態を、図２〜５での論理ゲートを使用して示したが、それらは実際の論理の深度を実証するためにだけ示されるものであり、異なるゲートを使用することのできる代替実現形態を考えることもできる。
【００４７】
上記の説明は、実証を目的とするものであり、限定的なものではない。その他多くの態様が、当業者には明白であろう。したがって、本発明の範囲は、添付の請求の範囲と共に、そのような請求の範囲が資格を有する均等物の全範囲によって決定されるべきである。
本明細書に示すように、本発明は、様々な方法、回路、Ｉ／Ｏ装置、システムおよび関連する命令を有するマシンアクセス可能な媒体を含む物品を含む、ある数の異なる態様として実現することができる。
【００４８】
その他の態様は、当業者には容易に明白になるであろう。要素、アルゴリズム、および演算順序は、すべて特定要件に適合するように変えることができる。図１に示す方法について上述した演算は、本明細書において示して説明したのとは異なる順序で実行することもできる。
図１〜５は、単に描写的なものであり、実スケールを表わしていない。そのある部分は、誇張されており、一方でその他は最小化されていることがある。図１〜５は、当業者が理解することができ、適切に実施することができる、本発明の様々な態様を示す。
【００４９】
前述の本発明の態様の詳細な説明においては、本開示を簡略化する目的で、様々な特徴を単一の態様にグループ化した。この開示の方法は、本発明の請求する態様が、各請求項において明白に記述されるよりも多くの特徴を必要とするという意図を反映しているとは解釈されるべきではない。むしろ、添付のクレームが反映するように、本発明の特徴は、単一の開示態様のすべての特徴よりも少ない状態にある。すなわち、添付の請求項は、本発明の態様の詳細な説明に組み入れてあり、各クレームは、別個の好ましい態様としてそれ自体に依拠している。
【図１】
2010522365.tif 000008
【図２】
2010522365.tif 000009
【図３】
2010522365.tif 000010
【図４】
2010522365.tif 000011
【図５】
2010522365.tif 000012