(57)【要約】【課題】高速に処理を行うことができる処理回路を提供することを課題とする。【解決手段】処理回路は、複数ビットの第１の２進数と複数ビットの第２の２進数を入力し、複数ビットの第１の２進数のうち、１の値を有する最上位ビットの桁を第１のビット桁とし、複数ビットの第２の２進数のうちの第１のビット桁より上位方向で初めて１の値になるビットの桁を第２のビット桁とし、第２のビット桁に対応するビットが１の値であり、かつその他のビットが０の値である複数ビットの第３の２進数を出力する処理回路であって、複数ビットの第４の２進数を出力する上位マスク処理部（６０１）と、複数ビットの第５の２進数を出力する下位マスク処理部（６０２）と、第４の２進数と第５の２進数を入力し、第２のビット桁に対応するビットが１の値であり、かつその他のビットが０の値である複数ビットの第３の２進数を出力する出力合成部（６０３）とを有する。【選択図】図１
2018151831.tif 000002
【特許請求の範囲】
【請求項１】
複数ビットの第１の２進数と複数ビットの第２の２進数を入力し、前記複数ビットの第１の２進数のうち、１の値を有する最上位ビットの桁を第１のビット桁とし、前記複数ビットの第２の２進数のうちの前記第１のビット桁より上位方向で初めて１の値になるビットの桁を第２のビット桁とし、前記第２のビット桁に対応するビットが１の値であり、かつその他のビットが０の値である複数ビットの第３の２進数を出力する処理回路であって、
前記第１の２進数と前記第２の２進数を入力し、前記第２のビット桁に対応するビットが１の値であり、かつ前記第２のビット桁に対応するビットより上位のビットが０の値である複数ビットの第４の２進数を出力する上位マスク処理部と、
前記第１の２進数と前記第２の２進数を入力し、前記第２のビット桁に対応するビットが１の値であり、かつ前記第２のビット桁に対応するビットより下位のビットが０の値である複数ビットの第５の２進数を出力する下位マスク処理部と、
前記第４の２進数と前記第５の２進数を入力し、前記第２のビット桁に対応するビットが１の値であり、かつその他のビットが０の値である前記複数ビットの第３の２進数を出力する出力合成部と
を有することを特徴とする処理回路。
【請求項２】
前記第１の２進数と前記第２の２進数は、ｍ＋１ビット（ｍは自然数）であり、
前記上位マスク処理部は、前記ｍ＋１ビットの第１の２進数のうちの下位ｍビットと前記ｍ＋１ビットの第２の２進数のうちの下位ｍビットを入力し、ｍビットの前記第４の２進数を出力し、
前記下位マスク処理部は、前記ｍ＋１ビットの第１の２進数と前記ｍ＋１ビットの第２の２進数を入力し、ｍ＋１ビットの前記第５の２進数を出力し、
前記出力合成部は、前記ｍビットの第４の２進数と前記ｍ＋１ビットの第５の２進数を入力し、ｍ＋１ビットの前記第３の２進数を出力することを特徴とする請求項１に記載の処理回路。
【請求項３】
前記出力合成部は、前記ｍ＋１ビットの第５の２進数のうちの上位ｍビットと前記ｍビットの第４の２進数との論理積演算を行い、前記ｍ＋１ビットの第３の２進数のうちの上位ｍビットを出力する第１の論理積演算部を有し、前記第５の２進数の最下位ビットを前記第３の２進数の最下位ビットとして出力することを特徴とする請求項２に記載の処理回路。
【請求項４】
前記下位マスク処理部は、
前記第１の２進数のｍ＋１ビットのうちの複数の組み合わせのビットの否定論理和演算を行う第１の否定論理和演算部と、
前記第１の否定論理和演算部による否定論理和演算の結果と前記第２の２進数との論理積演算を行い、前記第５の２進数を出力する第２の論理積演算部とを有することを特徴とする請求項２又は３に記載の処理回路。
【請求項５】
前記上位マスク処理部は、前記第１の２進数と前記第２の２進数のビットグループ毎に演算を行い、自己のキャリービットを生成する複数のキャリー生成部を有し、
前記複数のキャリー生成部の各々は、前記第１の２進数と前記第２の２進数のビットグループと下位ビットに対応するキャリー生成部により生成されたキャリービットとを基に演算を行うことを特徴とする請求項２〜４のいずれか１項に記載の処理回路。
【請求項６】
前記複数のキャリー生成部は、それぞれ、各ビットの桁に対応し、前記第１の２進数と前記第２の２進数の同一桁のビットと下位ビットに対応するキャリー生成部により生成されたキャリービットとを入力し、前記自己のキャリービットを前記第４の２進数として出力することを特徴とする請求項５に記載の処理回路。
【請求項７】
前記複数のキャリー生成部の各々は、
前記第２の２進数のビットの論理反転ビットと前記入力されたキャリービットとの論理積演算結果を出力する第３の論理積演算部と、
前記第３の論理積演算部の出力ビットと前記第１の２進数のビットとの論理和演算を行い、前記自己のキャリービットを前記第４の２進数のビットとして出力する第１の論理和演算部とを有することを特徴とする請求項６に記載の処理回路。
【請求項８】
前記複数のキャリー生成部は、
前記第１の２進数の下位から１ビット目を第１の入力端子に入力し、前記第２の２進数の下位から１ビット目の論理反転ビットを第２の入力端子に入力し、前記第１の２進数の下位から２ビット目を第３の入力端子に入力し、前記第２の２進数の下位から２ビット目の論理反転ビットを第４の入力端子に入力し、第１のキャリービットを第１の出力端子から出力し、第２のキャリービットを第２の出力端子から出力する第１のキャリー生成部と、
前記第１の２進数の下位から３ビット目を第１の入力端子に入力し、前記第２の２進数の下位から３ビット目の論理反転ビットを第２の入力端子に入力し、前記第１の２進数の下位から４ビット目を第３の入力端子に入力し、前記第２の２進数の下位から４ビット目の論理反転ビットを第４の入力端子に入力し、第３のキャリービットを第１の出力端子から出力し、第４のキャリービットを第２の出力端子から出力する第２のキャリー生成部と、
前記第１のキャリービットを第１の入力端子に入力し、前記第２のキャリービットを第２の入力端子に入力し、前記第３のキャリービットを第３の入力端子に入力し、前記第４のキャリービットを第４の入力端子に入力し、第５のキャリービットを第１の出力端子から出力し、第６のキャリービットを第２の出力端子から出力する第３のキャリー生成部とを有することを特徴とする請求項５に記載の処理回路。
【請求項９】
前記第１〜第３のキャリー生成部の構成は相互に同じであることを特徴とする請求項８に記載の処理回路。
【請求項１０】
前記第１〜第３のキャリー生成部の各々は、
前記第１の入力端子のビットと前記第４の入力端子のビットとの論理積演算結果を出力する第４の論理積演算部と、
前記第４の論理積演算部の出力ビットと前記第３の入力端子のビットとの論理和演算結果を前記第１の出力端子に出力する第２の論理和演算部と、
前記第２の入力端子のビットと前記第４の入力端子のビットとの論理積演算結果を前記第２の出力端子に出力する第５の論理積演算部とを有することを特徴とする請求項８又は９に記載の処理回路。
【請求項１１】
前記第１の２進数は第１のオペランドであり、前記第２の２進数は第２のオペランドであることを特徴とする請求項１〜１０のいずれか１項に記載の処理回路。
【請求項１２】
複数ビットの第１の２進数と複数ビットの第２の２進数を入力し、前記複数ビットの第１の２進数のうち、１の値を有する最上位ビットの桁を第１のビット桁とし、前記複数ビットの第２の２進数のうちの前記第１のビット桁より上位方向で初めて１の値になるビットの桁を第２のビット桁とし、前記第２のビット桁に対応するビットが１の値であり、かつその他のビットが０の値である複数ビットの第３の２進数を出力する処理回路の制御方法であって、
前記処理回路が有する上位マスク処理部が、前記第１の２進数と前記第２の２進数を入力し、前記第２のビット桁に対応するビットが１の値であり、かつ前記第２のビット桁に対応するビットより上位のビットが０の値である複数ビットの第４の２進数を出力し、
前記処理回路が有する下位マスク処理部が、前記第１の２進数と前記第２の２進数を入力し、前記第２のビット桁に対応するビットが１の値であり、かつ前記第２のビット桁に対応するビットより下位のビットが０の値である複数ビットの第５の２進数を出力し、
前記処理回路が有する出力合成部が、前記第４の２進数と前記第５の２進数を入力し、前記第２のビット桁に対応するビットが１の値であり、かつその他のビットが０の値である前記複数ビットの第３の２進数を出力することを特徴とする処理回路の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理回路及び処理回路の制御方法に関する。
【背景技術】
【０００２】
第１の論理レベルの複数のデータビット及び第２の論理レベルの複数のデータビットを有するマスクを発生するマスクジェネレータが知られている（特許文献１参照）。デコーダは、データマスクのための開始データビット位置を表す第１の２進アドレス及び終わりデータビット位置を表す第２の２進アドレスを解読する。第１のルックアヘッド桁上げ装置は、デコーダの出力に応答して、マスク中の下位ビット位置から上位ビット位置に伝搬する第１の桁上げビットを発生する。第２のルックアヘッド桁上げ装置は、デコーダの出力に応答して、マスク中の上位ビット位置から下位ビット位置に伝搬する第２の桁上げビットを発生する。
【０００３】
また、第１のマスク生成回路と第２のマスク生成回路を有し、第２のマスク生成回路が出力するマスクデータの各要素を第１のマスク生成回路の複数の単位マスク生成回路に補助入力としてそれぞれ供給するマスク回路が知られている（特許文献２参照）。第１のマスク生成回路は、ｎビットの２進データと第２のマスク生成回路から出力される補助入力とを入力して論理積を要素とするマスクデータ及びキャリー出力を生成出力する複数個の単位マスク生成回路を並列に配列する。第２のマスク生成回路は、第１のマスク生成回路の複数の単位マスク生成回路からそれぞれ出力される複数のキャリー出力及び論理“１”又は後段の同様なマスク生成回路から供給される補助入力とを入力して、論理積を要素とするマスクデータ及びキャリー出力を生成出力する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平２−１２３２７号公報
【特許文献２】特開昭６０−２５８６４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
処理回路は、種々の処理が求められており、その処理時間の高速化が求められている。
１つの側面では、本発明の目的は、高速に処理を行うことができる処理回路及び処理回路の制御方法を提供することである。
【課題を解決するための手段】
【０００６】
処理回路は、複数ビットの第１の２進数と複数ビットの第２の２進数を入力し、前記複数ビットの第１の２進数のうち、１の値を有する最上位ビットの桁を第１のビット桁とし、前記複数ビットの第２の２進数のうちの前記第１のビット桁より上位方向で初めて１の値になるビットの桁を第２のビット桁とし、前記第２のビット桁に対応するビットが１の値であり、かつその他のビットが０の値である複数ビットの第３の２進数を出力する処理回路であって、前記第１の２進数と前記第２の２進数を入力し、前記第２のビット桁に対応するビットが１の値であり、かつ前記第２のビット桁に対応するビットより上位のビットが０の値である複数ビットの第４の２進数を出力する上位マスク処理部と、前記第１の２進数と前記第２の２進数を入力し、前記第２のビット桁に対応するビットが１の値であり、かつ前記第２のビット桁に対応するビットより下位のビットが０の値である複数ビットの第５の２進数を出力する下位マスク処理部と、前記第４の２進数と前記第５の２進数を入力し、前記第２のビット桁に対応するビットが１の値であり、かつその他のビットが０の値である前記複数ビットの第３の２進数を出力する出力合成部とを有する。
【発明の効果】
【０００７】
１つの側面では、高速に処理を行うことが可能な処理回路を実現できる。
【図面の簡単な説明】
【０００８】
【図１】図１は、基本技術による処理回路の構成例を示す回路図である。
【図２】図２は、図１の処理回路の制御方法を示すフローチャートである。
【図３】図３は、図１のリーディングゼロカウント部の構成例を示す回路図である。
【図４】図４は、図１の右シフト部の構成例を示す回路図である。
【図５】図５は、図１の補数処理部の構成例を示す回路図である。
【図６】図６は、第１の実施形態による処理回路の構成例を示す図である。
【図７】図７は、第１のオペランドと第２のオペランドと出力値の例を示す図である。
【図８】図８は、図６の上位マスク処理部の構成例を示す図である。
【図９】図９は、図８のキャリー生成部の構成例を示す回路図である。
【図１０】図１０は、図６の下位マスク処理部の構成例を示す回路図である。
【図１１】図１１は、図６の出力合成部の構成例を示す回路図である。
【図１２】図１２は、第２の実施形態による上位マスク処理部の構成例を示す回路図である。
【図１３】図１３は、図１２のキャリー生成部の構成例を示す回路図である。
【図１４】図１４（Ａ）は回路素子の面積と処理時間の比率を示す図であり、図１４（Ｂ）は処理回路の面積と処理時間の比率を示す図である。
【発明を実施するための形態】
【０００９】
（第１の実施形態）
図１は基本技術による処理回路１００の構成例を示す回路図であり、図２は処理回路１００の制御方法を示すフローチャートである。プロセッサは、ループ処理のために、命令の第１のオペランドＸ［７：０］と第２のオペランドＹ［７：０］を基に、後述する出力値Ｒ［７：０］を得たい場合がある。ここで、プロセッサとはＣＰＵ(Central Processing Unit)、ＭＰＵ（Micro Processing Unit）、ＧＰＵ（Graphical Processing Unit）、ＤＳＰ（Digital Signal Processing Unit）等の演算処理装置を含む。プロセッサがソフトウェアにより、被演算数である第１のオペランドＸ［７：０］と第２のオペランドＹ［７：０］を基に出力値Ｒ［７：０］を演算すると、演算時間が長くなる。その演算速度を高速化するために、処理回路１００をハードウェアで構成する。処理回路１００は、第１のオペランドＸ［７：０］と第２のオペランドＹ［７：０］を入力し、出力値Ｒ［７：０］を高速に出力することができる。プロセッサは、第１のオペランドＸ［７：０］と第２のオペランドＹ［７：０］を処理回路１００に与えると、処理回路１００から高速に出力値Ｒ［７：０］を得ることができる。第１のオペランドＸ［７：０］と第２のオペランドＹ［７：０］と出力値Ｒ［７：０］は、それぞれ、８ビットの２進数である。
【００１０】
処理回路１００は、例えば図７のように、複数ビットの第１のオペランドＸ［７：０］と複数ビットの第２のオペランドＹ［７：０］を入力し、複数ビットの第１のオペランドＸ［７：０］のうちの最上位の１のビットの桁を第１のビット桁（例えばＸ［２］）とし、複数ビットの第２のオペランドＹ［７：０］のうちの上記の第１のビット桁より上位方向で初めて１になるビットの桁を第２のビット桁（例えばＹ［４］）とし、第２のビット桁に対応するビット（例えばＲ［４］）が１であり、かつその他のビット（例えばＲ［０］〜Ｒ［３］及びＲ［５］〜Ｒ［７］）が０である複数ビットの出力値Ｒ［７：０］を出力する。
【００１１】
処理回路１００は、リーディングゼロカウント部１０１と、右シフト部１０２と、インバータ１０３と、論理積演算回路１０４と、補数処理部１０５と、論理積演算回路１０６とを有する。論理積演算回路１０４及び１０６は、それぞれ、２入力ＡＮＤ回路である。以下、処理回路１００の制御方法を説明する。
【００１２】
まず、ステップＳ２０１では、処理回路１００は、８ビットの第１のオペランドＸ［７：０］と８ビットの第２のオペランドＹ［７：０］を入力する。例えば、第１のオペランドＸ［７：０］は「００００＿０１０１」であり、第２のオペランドＹ［７：０］は「０１０１＿００１０」である。
【００１３】
次に、ステップＳ２０２では、リーディングゼロカウント部１０１は、第１のオペランドＸ［７：０］のうち、ＭＳＢ（Most Significant Bit）側から見て最初に出現する１の値、最上位の１の値を有するビットの桁を探索するため、第１のオペランドＸ［７：０］の上位から連続するゼロの数を４ビットのリーディングゼロカウント値ＳＡ［３：０］として出力する。例えば、第１のオペランドＸ［７：０］が「００００＿０１０１」である場合、リーディングゼロカウント値ＳＡ［３：０］は５になる。
【００１４】
次に、ステップＳ２０３では、右シフト部１０２は、全ビットが１の８ビット定数「１１１１＿１１１１」をリーディングゼロカウント値ＳＡ［３：０］だけ右シフトした８ビット２進数ＳＢ［７：０］を出力する。例えば、リーディングゼロカウント値ＳＡ［３：０］が５である場合、２進数ＳＢ［７：０］は「００００＿０１１１」である。
【００１５】
次に、ステップＳ２０４では、インバータ１０３は、８ビット２進数ＳＢ［７：０］を論理反転した８ビット２進数／ＳＢ［７：０］を出力する。例えば、２進数ＳＢ［７：０］が「００００＿０１１１」である場合、２進数／ＳＢ［７：０］は「１１１１＿１０００」である。
【００１６】
次に、ステップＳ２０５では、論理積演算回路１０４は、第２のオペランドＹ［７：０］と２進数／ＳＢ［７：０］との論理積演算結果の８ビット２進数ＭＡ［７：０］を出力する。例えば、第２のオペランドＹ［７：０］が「０１０１＿００１０」であり、２進数／ＳＢ［７：０］が「１１１１＿１０００」である場合、２進数ＭＡ［７：０］は「０１０１＿００００」である。
【００１７】
次に、ステップＳ２０６では、補数処理部１０５は、正の８ビット２進数ＭＡ［７：０］の正負符号を反転させ、負の８ビット２進数ＭＣ［７：０］を出力する。具体的には、補数処理部１０５は、補数処理として、２進数ＭＡ［７：０］の論理反転値に１を加算した２進数ＭＣ［７：０］を出力する。例えば、２進数ＭＡ［７：０］が「０１０１＿００００」である場合、２進数ＭＣ［７：０］は「１０１１＿００００」である。
【００１８】
次に、ステップＳ２０７では、論理積演算回路１０６は、２進数ＭＡ［７：０］と２進数ＭＣ［７：０］の論理積演算結果を８ビット出力値Ｒ［７：０］として出力する。例えば、２進数ＭＡ［７：０］が「０１０１＿００００」であり、２進数ＭＣ［７：０］が「１０１１＿００００」である場合、出力値Ｒ［７：０］は「０００１＿００００」である。
【００１９】
次に、ステップＳ２０８では、処理回路１００は、出力値Ｒ［７：０］を出力する。以上のように、処理回路１００は、例えば、「００００＿０１０１」の第１のオペランドＸ［７：０］と「０１０１＿００１０」の第２のオペランドＹ［７：０］を入力し、「０００１＿００００」の出力値Ｒ［７：０］を出力する。処理回路１００は、第１のオペランドＸ［７：０］のうちの最上位の１の値を有するビットの桁を第１のビット桁（例えばＸ［２］）とし、第２のオペランドＹ［７：０］のうちの上記の第１のビット桁より上位方向で初めて１になるビットの桁を第２のビット桁（例えばＹ［４］）とし、第２のビット桁に対応するビット（例えばＲ［４］）が１であり、かつその他のビット（例えばＲ［０］〜Ｒ［３］及びＲ［５］〜Ｒ［７］）が０である出力値Ｒ［７：０］を出力する。
【００２０】
図３は、図１のリーディングゼロカウント部１０１の構成例を示す回路図である。インバータ３０１は、第１のオペランドＸ［７：０］を論理反転させた８ビット２進数／Ｘ［７：０］を出力する。論理積演算回路３０４は、４入力ＡＮＤ回路であり、４ビット／Ｘ［７］、／Ｘ［６］、／Ｘ［５］及び／Ｘ［４］の論理積演算結果をビットＨＩ［２］として出力する。論理積演算回路３０５は、２入力ＡＮＤ回路であり、２ビット／Ｘ［７］及び／Ｘ［６］の論理積演算結果をビットＨＩ［１］として出力する。論理和演算回路３０２は、２入力ＯＲ回路であり、２ビットＸ［６］及び／Ｘ［５］の論理和演算結果を出力する。論理積演算回路３０６は、２入力ＡＮＤ回路であり、ビット／Ｘ［７］と論理和演算回路３０２の出力ビットとの論理積演算結果をビットＨＩ［０］として出力する。
【００２１】
論理積演算回路３０７は、４入力ＡＮＤ回路であり、４ビット／Ｘ［３］、／Ｘ［２］、／Ｘ［１］及び／Ｘ［０］の論理積演算結果をビットＬＯ［２］として出力する。論理積演算回路３０８は、２入力ＡＮＤ回路であり、２ビット／Ｘ［３］及び／Ｘ［２］の論理積演算結果をビットＬＯ［１］として出力する。論理和演算回路３０３は、２入力ＯＲ回路であり、２ビットＸ［２］及び／Ｘ［１］の論理和演算結果を出力する。論理積演算回路３０９は、２入力ＡＮＤ回路であり、ビット／Ｘ［３］と論理和演算回路３０３の出力ビットとの論理積演算結果をビットＬＯ［０］として出力する。
【００２２】
論理積演算回路３１０は、２入力ＡＮＤ回路であり、ビットＨＩ［２］とビットＬＯ［２］との論理積演算結果をビットＺ［３］として出力する。バッファ３１１は、ビットＨＩ［２］と同じ論理値のビットＺ［２］を出力する。
【００２３】
論理積演算回路３１２は、２入力ＡＮＤ回路であり、ビットＨＩ［１］とビットＨＩ［２］の論理反転ビットとの論理積演算結果を出力する。論理積演算回路３１３は、２入力ＡＮＤ回路であり、ビットＬＯ［１］とビットＨＩ［２］との論理積演算結果を出力する。論理和演算回路３１６は、２入力ＯＲ回路であり、論理積演算回路３１２の出力ビットと論理積演算回路３１３の出力ビットとの論理和演算結果をビットＺ［１］として出力する。
【００２４】
論理積演算回路３１４は、２入力ＡＮＤ回路であり、ビットＨＩ［０］とビットＨＩ［２］の論理反転ビットとの論理積演算結果を出力する。論理積演算回路３１５は、２入力ＡＮＤ回路であり、ビットＬＯ［０］とビットＨＩ［２］との論理積演算結果を出力する。論理和演算回路３１７は、２入力ＯＲ回路であり、論理積演算回路３１４の出力ビットと論理積演算回路３１５の出力ビットとの論理和演算結果をビットＺ［０］として出力する。
【００２５】
バッファ３１８は、ビットＺ［３］と同じ論理値のビットＳＡ［３］を出力する。論理積演算回路３１９は、２入力ＡＮＤ回路であり、ビットＺ［３］の論理反転ビットとビットＺ［２］との論理積演算結果をビットＳＡ［２］として出力する。論理積演算回路３２０は、２入力ＡＮＤ回路であり、ビットＺ［３］の論理反転ビットとビットＺ［１］との論理積演算結果をビットＳＡ［１］として出力する。論理積演算回路３２１は、２入力ＡＮＤ回路であり、ビットＺ［３］の論理反転ビットとビットＺ［０］との論理積演算結果をビットＳＡ［０］として出力する。以上のように、リーディングゼロカウント部１０１は、８ビットの第１のオペランドＸ［７：０］を入力し、４ビットのリーディングゼロカウント値ＳＡ［３：０］を出力する。
【００２６】
図４は、図１の右シフト部１０２の構成例を示す回路図である。論理積演算回路４０１は、４入力ＡＮＤ回路であり、４ビットＳＡ［３］、ＳＡ［２］、ＳＡ［１］及びＳＡ［０］の論理反転ビットの論理積演算結果をビットＤ［０］として出力する。論理積演算回路４０２は、４入力ＡＮＤ回路であり、３ビットＳＡ［３］、ＳＡ［２］及びＳＡ［１］の論理反転ビットとビットＳＡ［０］との論理積演算結果をビットＤ［１］として出力する。論理積演算回路４０３は、４入力ＡＮＤ回路であり、３ビットＳＡ［３］、ＳＡ［２］及びＳＡ［０］の論理反転ビットとビットＳＡ［１］との論理積演算結果をビットＤ［２］として出力する。論理積演算回路４０４は、４入力ＡＮＤ回路であり、２ビットＳＡ［３］及びＳＡ［２］の論理反転ビットとビットＳＡ［１］とビットＳＡ［０］との論理積演算結果をビットＤ［３］として出力する。
【００２７】
論理積演算回路４０５は、４入力ＡＮＤ回路であり、３ビットＳＡ［３］、ＳＡ［１］及びＳＡ［０］の論理反転ビットとビットＳＡ［２］との論理積演算結果をビットＤ［４］として出力する。論理積演算回路４０６は、４入力ＡＮＤ回路であり、２ビットＳＡ［３］及びＳＡ［１］の論理反転ビットとビットＳＡ［２］とビットＳＡ［０］との論理積演算結果をビットＤ［５］として出力する。論理積演算回路４０７は、４入力ＡＮＤ回路であり、２ビットＳＡ［３］及びＳＡ［０］の論理反転ビットとビットＳＡ［２］とビットＳＡ［１］との論理積演算結果をビットＤ［６］として出力する。論理積演算回路４０８は、４入力ＡＮＤ回路であり、ビットＳＡ［３］の論理反転ビットとビットＳＡ［２］とビットＳＡ［１］とビットＳＡ［０］との論理積演算結果をビットＤ［７］として出力する。
【００２８】
バッファ４０９は、ビットＤ［０］と同じ論理値のビットＳＢ［７］を出力する。論理和演算回路４１０は、２入力ＯＲ回路であり、２ビットＤ［０］及びＤ［１］の論理和演算結果をビットＳＢ［６］として出力する。論理和演算回路４１１は、３入力ＯＲ回路であり、３ビットＤ［０］、Ｄ［１］及びＤ［２］の論理和演算結果をビットＳＢ［５］として出力する。論理和演算回路４１２は、４入力ＯＲ回路であり、４ビットＤ［０］、Ｄ［１］、Ｄ［２］及びＤ［３］の論理和演算結果をビットＳＢ［４］として出力する。
【００２９】
論理和演算回路４１３は、５入力ＯＲ回路であり、５ビットＤ［０］、Ｄ［１］、Ｄ［２］、Ｄ［３］及びＤ［４］の論理和演算結果をビットＳＢ［３］として出力する。論理和演算回路４１４は、６入力ＯＲ回路であり、６ビットＤ［０］、Ｄ［１］、Ｄ［２］、Ｄ［３］、Ｄ［４］及びＤ［５］の論理和演算結果をビットＳＢ［２］として出力する。論理和演算回路４１５は、７入力ＯＲ回路であり、７ビットＤ［０］、Ｄ［１］、Ｄ［２］、Ｄ［３］、Ｄ［４］、Ｄ［５］及びＤ［６］の論理和演算結果をビットＳＢ［１］として出力する。論理和演算回路４１６は、８入力ＯＲ回路であり、８ビットＤ［０］、Ｄ［１］、Ｄ［２］、Ｄ［３］、Ｄ［４］、Ｄ［５］、Ｄ［６］及びＤ［７］の論理和演算結果をビットＳＢ［０］として出力する。
【００３０】
以上のように、右シフト部１０２は、４ビットのリーディングゼロカウント値ＳＡ［３：０］を入力し、８ビット定数「１１１１＿１１１１」をリーディングゼロカウント値ＳＡ［３：０］だけ右シフトした８ビット２進数ＳＢ［７：０］を出力する。
【００３１】
図５は、図１の補数処理部１０５の構成例を示す回路図である。インバータ５０１は、８ビット２進数ＭＡ［７：０］を論理反転させた８ビット２進数／ＭＡ［７：０］を出力する。論理積演算回路５０２は、７入力ＡＮＤ回路であり、７ビット／ＭＡ［６］、／ＭＡ［５］、／ＭＡ［４］、／ＭＡ［３］、／ＭＡ［２］、／ＭＡ［１］及び／ＭＡ［０］の論理積演算結果をビットＭＢ［６］として出力する。論理積演算回路５０３は、６入力ＡＮＤ回路であり、６ビット／ＭＡ［５］、／ＭＡ［４］、／ＭＡ［３］、／ＭＡ［２］、／ＭＡ［１］及び／ＭＡ［０］の論理積演算結果をビットＭＢ［５］として出力する。論理積演算回路５０４は、５入力ＡＮＤ回路であり、５ビット／ＭＡ［４］、／ＭＡ［３］、／ＭＡ［２］、／ＭＡ［１］及び／ＭＡ［０］の論理積演算結果をビットＭＢ［４］として出力する。
【００３２】
論理積演算回路５０５は、４入力ＡＮＤ回路であり、４ビット／ＭＡ［３］、／ＭＡ［２］、／ＭＡ［１］及び／ＭＡ［０］の論理積演算結果をビットＭＢ［３］として出力する。論理積演算回路５０６は、３入力ＡＮＤ回路であり、３ビット／ＭＡ［２］、／ＭＡ［１］及び／ＭＡ［０］の論理積演算結果をビットＭＢ［２］として出力する。論理積演算回路５０７は、２入力ＡＮＤ回路であり、２ビット／ＭＡ［１］及び／ＭＡ［０］の論理積演算結果をビットＭＢ［１］として出力する。バッファ５０８は、ビット／ＭＡ［１］と同じ論理値のビットＭＢ［０］を出力する。
【００３３】
排他的論理和演算回路５０９は、２入力ＥＯＲ回路であり、ビット／ＭＡ［７］とビットＭＢ［６］との排他的論理和演算結果をビットＭＣ［７］として出力する。排他的論理和演算回路５１０は、２入力ＥＯＲ回路であり、ビット／ＭＡ［６］とビットＭＢ［５］との排他的論理和演算結果をビットＭＣ［６］として出力する。排他的論理和演算回路５１１は、２入力ＥＯＲ回路であり、ビット／ＭＡ［５］とビットＭＢ［４］との排他的論理和演算結果をビットＭＣ［５］として出力する。排他的論理和演算回路５１２は、２入力ＥＯＲ回路であり、ビット／ＭＡ［４］とビットＭＢ［３］との排他的論理和演算結果をビットＭＣ［４］として出力する。排他的論理和演算回路５１３は、２入力ＥＯＲ回路であり、ビット／ＭＡ［３］とビットＭＢ［２］との排他的論理和演算結果をビットＭＣ［３］として出力する。排他的論理和演算回路５１４は、２入力ＥＯＲ回路であり、ビット／ＭＡ［２］とビットＭＢ［１］との排他的論理和演算結果をビットＭＣ［２］として出力する。排他的論理和演算回路５１５は、２入力ＥＯＲ回路であり、ビット／ＭＡ［１］とビットＭＢ［０］との排他的論理和演算結果をビットＭＣ［１］として出力する。インバータ５１６は、ビット／ＭＡ［０］の論理反転ビットをビットＭＣ［０］として出力する。以上のように、補数処理部１０５は、８ビット２進数ＭＡ［７：０］を入力し、２進数ＭＡ［７：０］の論理反転値に１を加算した８ビット２進数ＭＣ［７：０］を出力する。
【００３４】
処理回路１００は、図２の全ステップを逐次的に実行するため、処理が低速であり、面積が大きくなってしまう課題がある。処理回路１００は、処理の高速化及び小面積化が求められる。以下、小面積でかつ高速に出力値Ｒ［７：０］を演算することができる処理回路を説明する。
【００３５】
図６は、第１の実施形態による処理回路６００の構成例を示す図である。処理回路６００は、処理回路１００と同様に、例えば図７のように、複数ビットの第１のオペランドＸ［ｍ：０］と複数ビットの第２のオペランドＹ［ｍ：０］を入力し、複数ビットの第１のオペランドＸ［ｍ：０］のうちの最上位の１の値を有するビットの桁を第１のビット桁（例えばＸ［２］）とし、複数ビットの第２のオペランドＹ［ｍ：０］のうちの上記の第１のビット桁より上位方向で初めて１になるビットの桁を第２のビット桁（例えばＹ［４］）とし、第２のビット桁に対応するビット（例えばＲ［４］）が１であり、かつその他のビット（例えばＲ［０］〜Ｒ［３］及びＲ［５］〜Ｒ［７］）が０である複数ビットの出力値Ｒ［ｍ：０］を出力する。第１のオペランドＸ［ｍ：０］と第２のオペランドＹ［ｍ：０］と出力値Ｒ［ｍ：０］は、それぞれ、ｍ＋１ビットの２進数である。ここで、ｍは、自然数であり、例えば７である。
【００３６】
処理回路６００は、上位マスク処理部６０１と、下位マスク処理部６０２と、出力合成部６０３とを有し、ｍ＋１ビットの第１のオペランドＸ［ｍ：０］とｍ＋１ビットの第２のオペランドＹ［７：０］を入力し、ｍ＋１ビットの出力値Ｒ［ｍ：０］を出力する。
【００３７】
上位マスク処理部６０１は、第１のオペランドＸ［ｍ−１：０］と第２のオペランドＹ［ｍ−１：０］を入力し、図７のように、上記の第２のビット桁に対応するビット（例えばＣ［３］）が１であり、かつ上記の第２のビット桁に対応するビットより上位のビット（例えばＣ［４］〜Ｃ［６］）が０である複数ビットの上位マスク２進数Ｃ［ｍ−１：０］を出力する。具体的には、上位マスク処理部６０１は、ｍ＋１ビットの第１のオペランドＸ［ｍ：０］のうちの下位ｍビットＸ［ｍ−１：０］とｍ＋１ビットの第２のオペランドＹ［ｍ：０］のうちの下位ｍビットＹ［ｍ−１：０］を入力し、ｍビットの上位マスク２進数Ｃ［ｍ−１：０］を出力する。
【００３８】
下位マスク処理部６０２は、第１のオペランドＸ［ｍ：０］と第２のオペランドＹ［ｍ：０］を入力し、図７に示すように、上記の第２のビット桁に対応するビット（例えばＨ［４］）が１であり、かつ上記の第２のビット桁に対応するビットより下位のビット（例えばＨ［０］〜Ｈ［３］）が０である複数ビットの下位マスク２進数Ｈ［ｍ：０］を出力する。具体的には、下位マスク処理部６０２は、ｍ＋１ビットの第１のオペランドＸ［ｍ：０］とｍ＋１ビットの第２のオペランドＹ［ｍ：０］を入力し、ｍ＋１ビットの下位マスク２進数Ｈ［ｍ：０］を出力する。
【００３９】
出力合成部６０３は、ｍビットの上位マスク２進数Ｃ［ｍ−１：０］とｍ＋１ビットの下位マスク２進数Ｈ［ｍ：０］を入力し、上記の第２のビット桁に対応するビット（例えばＲ［４］）が１であり、かつその他のビット（例えばＲ［０］〜Ｒ［３］及びＲ［５］〜Ｒ［７］）が０であるｍ＋１ビットの出力値Ｒ［ｍ：０］を出力する。
【００４０】
ここで、図７のビットＣ［−１］は、１の定数である。上位マスクビットＣ［−１］の桁は、下位マスクビットＨ［０］の桁に対応する。上位マスクビットＣ［０］〜Ｃ［６］の桁は、下位マスクビットＨ［１］〜Ｈ［７］の桁に対応する。出力合成部６０３は、図７に示すように、ｍ＋１ビットの上位マスク２進数Ｃ［−１］〜Ｃ［ｍ−１］とｍ＋１ビットの下位マスク２進数Ｈ［０］〜Ｈ［ｍ］とのビット桁毎の論理積演算結果を出力値Ｒ［０］〜Ｒ［ｍ］を出力する。以下、ｍが７の場合の例を説明する。
【００４１】
図８は、図６の上位マスク処理部６０１の構成例を示す図である。上位マスク処理部６０１は、複数のキャリー生成部８０１〜８０７を有する。複数のキャリー生成部８０１〜８０７は、後述する図９のように相互に同じ構成を有し、第１のオペランドＸ［６：０］と第２のオペランドＹ［６：０］のビットグループ毎に演算を行い、自己のキャリービットＣ［０］〜Ｃ［６］を生成する。そして、複数のキャリー生成部８０２〜８０７の各々は、第１のオペランドＸ［６：１］と第２のオペランドＹ［６：１］のビットグループと下位ビットに対応するキャリー生成部８０１〜８０６により生成されたキャリービットＣ［０］〜Ｃ［５］とを基に演算を行う。
【００４２】
キャリー生成部８０１は、ビットＸ［０］を入力端子Ｘに入力し、ビットＹ［０］を入力端子Ｙに入力し、１を入力端子Ｃｉｎに入力し、自己のキャリービットＣ［０］を出力端子Ｃから出力する。キャリー生成部８０２は、ビットＸ［１］を入力端子Ｘに入力し、ビットＹ［１］を入力端子Ｙに入力し、下位のキャリー生成部８０１からのキャリービットＣ［０］を入力端子Ｃｉｎに入力し、自己のキャリービットＣ［１］を出力端子Ｃから出力する。キャリー生成部８０３は、ビットＸ［２］を入力端子Ｘに入力し、ビットＹ［２］を入力端子Ｙに入力し、下位のキャリー生成部８０２からのキャリービットＣ［１］を入力端子Ｃｉｎに入力し、自己のキャリービットＣ［２］を出力端子Ｃから出力する。キャリー生成部８０４は、ビットＸ［３］を入力端子Ｘに入力し、ビットＹ［３］を入力端子Ｙに入力し、下位のキャリー生成部８０３からのキャリービットＣ［２］を入力端子Ｃｉｎに入力し、自己のキャリービットＣ［３］を出力端子Ｃから出力する。キャリー生成部８０５は、ビットＸ［４］を入力端子Ｘに入力し、ビットＹ［４］を入力端子Ｙに入力し、下位のキャリー生成部８０４からのキャリービットＣ［３］を入力端子Ｃｉｎに入力し、自己のキャリービットＣ［４］を出力端子Ｃから出力する。キャリー生成部８０６は、ビットＸ［５］を入力端子Ｘに入力し、ビットＹ［５］を入力端子Ｙに入力し、下位のキャリー生成部８０５からのキャリービットＣ［４］を入力端子Ｃｉｎに入力し、自己のキャリービットＣ［５］を出力端子Ｃから出力する。キャリー生成部８０７は、ビットＸ［６］を入力端子Ｘに入力し、ビットＹ［６］を入力端子Ｙに入力し、下位のキャリー生成部８０６からのキャリービットＣ［５］を入力端子Ｃｉｎに入力し、自己のキャリービットＣ［６］を出力端子Ｃから出力する。
【００４３】
以上のように、複数のキャリー生成部８０２〜８０７は、それぞれ、各ビットの桁毎に、第１のオペランドＸ［６：１］と第２のオペランドＹ［６：１］の同一桁のビットと下位ビットに対応するキャリー生成部８０１〜８０６により生成されたキャリービットＣ［０］〜Ｃ［５］とを入力し、自己のキャリービットＣ［１］〜Ｃ［６］を出力する。上位マスク処理部６０１は、キャリービットＣ［０］〜Ｃ［６］を上位マスク２進数Ｃ［６：０］として出力する。
【００４４】
図９は、図８のキャリー生成部８０１の構成例を示す回路図である。図９のキャリー生成部８０２〜８０７も、キャリー生成部８０１と同じ構成を有する。キャリー生成部８０１〜８０７の各々は、インバータ９０１と、バッファ９０２と、論理積演算回路９０３と、論理和演算回路９０４と、入力端子Ｙ，Ｘ，Ｃｉｎと、出力端子Ｃとを有する。インバータ９０１は、入力端子Ｙのビットの論理反転ビットＰＡを出力する。バッファ９０２は、入力端子Ｘのビットと同じ論理値を有するビットＧＡを出力する。論理積演算回路９０３は、２入力ＡＮＤ回路であり、ビットＰＡと入力端子Ｃｉｎのキャリービットとの論理積演算結果を出力する。論理和演算回路９０４は、２入力ＯＲ回路であり、論理積演算回路９０３の出力ビットとビットＧＡとの論理和演算を行い、自己のキャリービットを出力端子Ｃに出力する。
【００４５】
図１０は、図６の下位マスク処理部６０２の構成例を示す回路図である。下位マスク処理部６０２は、複数の否定論理和演算回路１００１〜１００７と、インバータ１００８と、複数の論理積演算回路１００９〜１０１６とを有する。
【００４６】
論理和演算回路１００１は、８入力ＮＯＲ回路であり、８ビットＸ［７：０］の否定論理和演算結果を出力する。論理和演算回路１００２は、７入力ＮＯＲ回路であり、７ビットＸ［７：１］の否定論理和演算結果を出力する。論理和演算回路１００３は、６入力ＮＯＲ回路であり、６ビットＸ［７：２］の否定論理和演算結果を出力する。論理和演算回路１００４は、５入力ＮＯＲ回路であり、５ビットＸ［７：３］の否定論理和演算結果を出力する。論理和演算回路１００５は、４入力ＮＯＲ回路であり、４ビットＸ［７：４］の否定論理和演算結果を出力する。論理和演算回路１００６は、３入力ＮＯＲ回路であり、３ビットＸ［７：５］の否定論理和演算結果を出力する。論理和演算回路１００７は、２入力ＮＯＲ回路であり、２ビットＸ［７：６］の否定論理和演算結果を出力する。インバータ１００８は、ビットＸ［７］の論理反転ビットを出力する。
【００４７】
論理積演算回路１００９は、２入力ＡＮＤ回路であり、否定論理和演算回路１００１の出力ビットとビットＹ［０］との論理積演算結果をビットＨ［０］として出力する。論理積演算回路１０１０は、２入力ＡＮＤ回路であり、否定論理和演算回路１００２の出力ビットとビットＹ［１］との論理積演算結果をビットＨ［１］として出力する。論理積演算回路１０１１は、２入力ＡＮＤ回路であり、否定論理和演算回路１００３の出力ビットとビットＹ［２］との論理積演算結果をビットＨ［２］として出力する。論理積演算回路１０１２は、２入力ＡＮＤ回路であり、否定論理和演算回路１００４の出力ビットとビットＹ［３］との論理積演算結果をビットＨ［３］として出力する。論理積演算回路１０１３は、２入力ＡＮＤ回路であり、否定論理和演算回路１００５の出力ビットとビットＹ［４］との論理積演算結果をビットＨ［４］として出力する。論理積演算回路１０１４は、２入力ＡＮＤ回路であり、否定論理和演算回路１００６の出力ビットとビットＹ［５］との論理積演算結果をビットＨ［５］として出力する。論理積演算回路１０１５は、２入力ＡＮＤ回路であり、否定論理和演算回路１００７の出力ビットとビットＹ［６］との論理積演算結果をビットＨ［６］として出力する。論理積演算回路１０１６は、２入力ＡＮＤ回路であり、インバータ１００８の出力ビットとビットＹ［７］との論理積演算結果をビットＨ［７］として出力する。下位マスク処理部６０２は、ビットＨ［０］〜Ｈ［７］を下位マスク２進数Ｈ［７：０］として出力する。
【００４８】
以上のように、否定論理和演算回路１００１〜１００７は、第１のオペランドＸ［ｍ：０］のｍ＋１ビットのうちの複数の組み合わせのビットの否定論理和演算を行う。論理積演算回路１００９〜１０１５は、それぞれ、否定論理和演算回路１００１〜１００７による否定論理和演算の結果と第２のオペランドＹ［ｍ−１：０］との論理積演算を行う。
【００４９】
図１１は、図６の出力合成部６０３の構成例を示す回路図である。出力合成部６０３は、バッファ１１０１と、複数の論理積演算回路１１０２〜１１０８とを有する。バッファ１１０１は、ビットＨ［０］と同じ論理値を有するビットＲ［０］を出力する。論理積演算回路１１０２は、２入力ＡＮＤ回路であり、ビットＣ［０］及びＨ［１］の論理積演算結果をビットＲ［１］として出力する。論理積演算回路１１０３は、２入力ＡＮＤ回路であり、ビットＣ［１］及びＨ［２］の論理積演算結果をビットＲ［２］として出力する。論理積演算回路１１０４は、２入力ＡＮＤ回路であり、ビットＣ［２］及びＨ［３］の論理積演算結果をビットＲ［３］として出力する。論理積演算回路１１０５は、２入力ＡＮＤ回路であり、ビットＣ［３］及びＨ［４］の論理積演算結果をビットＲ［４］として出力する。論理積演算回路１１０６は、２入力ＡＮＤ回路であり、ビットＣ［４］及びＨ［５］の論理積演算結果をビットＲ［５］として出力する。論理積演算回路１１０７は、２入力ＡＮＤ回路であり、ビットＣ［５］及びＨ［６］の論理積演算結果をビットＲ［６］として出力する。論理積演算回路１１０８は、２入力ＡＮＤ回路であり、ビットＣ［６］及びＨ［７］の論理積演算結果をビットＲ［７］として出力する。
【００５０】
なお、バッファ１１０１の代わりに、図７のように、ビットＨ［０］とビットＣ［−１］との論理積演算結果をビットＲ［０］として出力する論理積演算回路を設けてもよい。ここで、ビットＣ［−１］は、１の定数である。出力合成部６０３は、ビットＲ［０］〜Ｒ［７］を出力値Ｒ［７：０］として出力する。
【００５１】
以上のように、論理積演算回路１１０２〜１１０８は、ｍ＋１ビットの下位マスク２進数Ｈ［ｍ：０］のうちの上位ｍビットＨ［ｍ：１］とｍビットの上位マスク２進数Ｃ［ｍ−１：０］との論理積演算を行い、ｍ＋１ビットの出力値Ｒ［ｍ：０］のうちの上位ｍビットＲ［ｍ：１］を出力する。バッファ１１０１は、下位マスク２進数Ｈ［ｍ：０］の最下位ビットＨ［０］を出力値Ｒ［ｍ：０］の最下位ビットＲ［０］として出力する。
【００５２】
図７に示すように、下位マスク２進数Ｈ［７：０］は、第２のビット桁に対応するビット（例えばＨ［４］）が１であり、第２のビット桁に対応するビットより下位のビット（例えばＨ［０］〜Ｈ［３］）が０にマスクされる。上位マスク２進数Ｃ［６：０］は、第２のビット桁に対応するビット（例えばＣ［３］）が１であり、第２のビット桁に対応するビットより上位のビット（例えばＣ［４］〜Ｃ［６］）が０にマスクされる。下位マスク２進数Ｈ［７：０］と上位マスク２進数Ｃ［６：０］は、相互に依存関係がないため、下位マスク処理部６０２と上位マスク処理部６０１は、並列に演算することができる。
【００５３】
上位マスク処理部６０１は、図８に示すように、上位マスク２進数Ｃ［１］〜Ｃ［６］の各桁のビットを得る際に、下位桁の上位マスク２進数Ｃ［０］〜Ｃ［５］を利用することで、演算式を単純化することができる。これにより、演算回路が共通化でき、小面積で構成することができる。図６の処理回路６００は、図１の処理回路１００に比べ、小面積でかつ高速に出力値Ｒ［ｍ：０］を演算することができる。
【００５４】
次に、図６の処理回路６００が図１の処理回路１００と同じ出力値Ｒ［ｍ：０］を出力することができる理由を説明する。第１のオペランドＸ［ｍ：０］及び第２のオペランドＹ［ｍ：０］は、それぞれ、ｍ＋１ビットである。図９のビット生成部８０１に示すように、次式のＧＡ［ｎ］及びＰＡ［ｎ」が成り立つ。ここで、ｎは０以上の整数である。
【００５５】
【数１】
2018151831.tif 000003
【００５６】
また、図８の上位マスク処理部６０１に示すように次式のＣ［ｎ］が成り立ち、図１０の下位マスク処理部６０２に示すように次式のＨ［ｎ］が成り立ち、図１１の出力合成部６０３に示すように次式のＲ［ｎ］が成り立つ。ここで、「｜」は論理和演算を示し、「＆」は論理積演算を示す。
【００５７】
【数２】
2018151831.tif 000004
【００５８】
次に、前述した処理回路６００の演算式は、下記の処理回路１００の演算式から導出できることを証明する。図２のステップＳ２０４の２進数／ＳＢ［ｎ］は、第１のオペランドＸ［ｍ：０］において、上位から初めて１になるビット桁まで１が連続し、それ以後は０となるので、次式で表される。また、図２のステップＳ２０５に示すように、２進数ＭＡ［ｎ］は、次式で表される。
【００５９】
【数３】
2018151831.tif 000005
【００６０】
また、図２のステップＳ２０６及びＳ２０７に示すように、出力値Ｒ［ｎ］は、次式で表される。
【００６１】
【数４】
2018151831.tif 000006
【００６２】
上式のＲ［ｎ］は、次式のＲ［０］〜Ｒ［ｍ］で表される。
【００６３】
【数５】
2018151831.tif 000007
【００６４】
次に、上式のＲ［０］〜Ｒ［ｍ］は、否定の部分を整理すると、次式のように変形できる。
【００６５】
【数６】
2018151831.tif 000008
【００６６】
次に、上式のＲ［０］〜Ｒ［ｍ］は、存在しないケースを削除すると、次式のように変形できる。
【００６７】
【数７】
2018151831.tif 000009
【００６８】
次に、上式のＲ［０］〜Ｒ［ｍ］は、展開すると、次式のように変形できる。
【００６９】
【数８】
2018151831.tif 000010
【００７０】
次に、上式のＲ［０］〜Ｒ［ｍ］は、重複部分と存在しないケースを削除すると、次式のように変形できる。
【００７１】
【数９】
2018151831.tif 000011
【００７２】
次に、上式のＲ［０］〜Ｒ［ｍ］は、それぞれ、下位のキャリービット（例えばＲ［１］及び［Ｒ２］の最終項）を使用するように変形すると、次式が成り立つ。このキャリービットは、図８のキャリービットＣ［０］〜Ｃ［６］に対応する。各キャリービットを生成するには、下位のキャリービットを使用可能にしたことが本実施形態のポイントである。
【００７３】
【数１０】
2018151831.tif 000012
【００７４】
次に、上式のＲ［０］〜Ｒ［ｍ］を分解すると、次式で表される。次式は、図６の処理回路６００に対応していることが分かる。以上より、処理回路６００の演算式は、処理回路１００の演算式から導出できることが証明される。
【００７５】
【数１１】
2018151831.tif 000013
【００７６】
（第２の実施形態）
第２の実施形態による処理回路６００は、第１の実施形態の処理回路６００と同様に、上位マスク処理部６０１と、下位マスク処理部６０２と、出力合成部６０３とを有する。ただし、第２の実施形態による処理回路６００は、第１の実施形態による処理回路６００に対して、上位マスク処理部６０１が異なり、下位マスク処理部６０２及び出力合成部６０３が同じである。第２の実施形態による上位マスク処理部６０１は、第１の実施形態による上位マスク処理部６０１に対して、高速処理が可能になるように、変形したものである。以下、第２の実施形態による上位マスク処理部６０１の構成を説明する。
【００７７】
図１２は、第２の実施形態による上位マスク処理部６０１の構成例を示す回路図である。上位マスク処理部６０１は、バッファ１２０１〜１２０７と、インバータ１２０８〜１２１４と、キャリー生成部１２１５〜１２２２と、バッファ１２２３〜１２２５と、論理積演算回路１２２６〜１２２８と、論理和演算回路１２２９〜１２３２とを有する。キャリー生成部１２１５〜１２２２は、後述する図１３に示すように、相互に同じ構成を有する。
【００７８】
バッファ１２０１は、ビットＸ［０］と同じ論理値を有するビットＧＡ［０］を出力する。インバータ１２０８は、ビットＹ［０］の論理反転ビットＰＡ［０］を出力する。バッファ１２０２は、ビットＸ［１］と同じ論理値を有するビットＧＡ［１］を出力する。インバータ１２０９は、ビットＹ［１］の論理反転ビットＰＡ［１］を出力する。バッファ１２０３は、ビットＸ［２］と同じ論理値を有するビットＧＡ［２］を出力する。インバータ１２１０は、ビットＹ［２］の論理反転ビットＰＡ［２］を出力する。バッファ１２０４は、ビットＸ［３］と同じ論理値を有するビットＧＡ［３］を出力する。インバータ１２１１は、ビットＹ［３］の論理反転ビットＰＡ［３］を出力する。バッファ１２０５は、ビットＸ［４］と同じ論理値を有するビットＧＡ［４］を出力する。インバータ１２１２は、ビットＹ［４］の論理反転ビットＰＡ［４］を出力する。バッファ１２０６は、ビットＸ［５］と同じ論理値を有するビットＧＡ［５］を出力する。インバータ１２１３は、ビットＹ［５］の論理反転ビットＰＡ［５］を出力する。バッファ１２０７は、ビットＸ［６］と同じ論理値を有するビットＧＡ［６］を出力する。インバータ１２１４は、ビットＹ［６］の論理反転ビットＰＡ［６］を出力する。
【００７９】
キャリー生成部１２１５は、ビットＧＡ［０］を入力端子ＧＬＯに入力し、ビットＰＡ［０］を入力端子ＰＬＯに入力し、ビットＧＡ［１］を入力端子ＧＨＩに入力し、ビットＰＡ［１］を入力端子ＰＨＩに入力し、キャリービットＧａ１０を出力端子Ｇから出力し、キャリービットＰａ１０を出力端子Ｐから出力する。
【００８０】
キャリー生成部１２１６は、ビットＧＡ［２］を入力端子ＧＬＯに入力し、ビットＰＡ［２］を入力端子ＰＬＯに入力し、ビットＧＡ［３］を入力端子ＧＨＩに入力し、ビットＰＡ［３］を入力端子ＰＨＩに入力し、キャリービットＧａ３２を出力端子Ｇから出力し、キャリービットＰａ３２を出力端子Ｐから出力する。
【００８１】
キャリー生成部１２１７は、ビットＧＡ［４］を入力端子ＧＬＯに入力し、ビットＰＡ［４］を入力端子ＰＬＯに入力し、ビットＧＡ［５］を入力端子ＧＨＩに入力し、ビットＰＡ［５］を入力端子ＰＨＩに入力し、キャリービットＧａ５４を出力端子Ｇから出力し、キャリービットＰａ５４を出力端子Ｐから出力する。
【００８２】
キャリー生成部１２１８は、１を入力端子ＧＬＯに入力し、１を入力端子ＰＬＯに入力し、キャリービットＧａ１０を入力端子ＧＨＩに入力し、キャリービットＰａ１０を入力端子ＰＨＩに入力し、キャリービットＧｂ１０を出力端子Ｇから出力し、キャリービットＰｂ１０を出力端子Ｐから出力する。
【００８３】
キャリー生成部１２１９は、キャリービットＧａ１０を入力端子ＧＬＯに入力し、キャリービットＰａ１０を入力端子ＰＬＯに入力し、キャリービットＧａ３２を入力端子ＧＨＩに入力し、キャリービットＰａ３２を入力端子ＰＨＩに入力し、キャリービットＧｂ３０を出力端子Ｇから出力し、キャリービットＰｂ３０を出力端子Ｐから出力する。
【００８４】
キャリー生成部１２２０は、キャリービットＧａ３２を入力端子ＧＬＯに入力し、キャリービットＰａ３２を入力端子ＰＬＯに入力し、キャリービットＧａ５４を入力端子ＧＨＩに入力し、キャリービットＰａ５４を入力端子ＰＨＩに入力し、キャリービットＧｂ５２を出力端子Ｇから出力し、キャリービットＰｂ５２を出力端子Ｐから出力する。
【００８５】
キャリー生成部１２２１は、１を入力端子ＧＬＯに入力し、１を入力端子ＰＬＯに入力し、キャリービットＧｂ３０を入力端子ＧＨＩに入力し、キャリービットＰｂ３０を入力端子ＰＨＩに入力し、キャリービットＧｃ３０を出力端子Ｇから出力する。
【００８６】
キャリー生成部１２２２は、キャリービットＧｂ１０を入力端子ＧＬＯに入力し、キャリービットＰｂ１０を入力端子ＰＬＯに入力し、キャリービットＧｂ５２を入力端子ＧＨＩに入力し、キャリービットＰｂ５２を入力端子ＰＨＩに入力し、キャリービットＧｃ５０を出力端子Ｇから出力する。
【００８７】
論理和演算回路１２２９は、２入力ＯＲ回路であり、ビットＧＡ［０］及びＰＡ［０］の論理積演算結果をビットＣ［０］として出力する。バッファ１２２３は、キャリービットＧｂ１０と同じ論理値を有するビットＣ［１］を出力する。論理積演算回路１２２６は、２入力ＡＮＤ回路であり、キャリービットＧｂ１０とビットＰＡ［２］の論理積演算結果を出力する。論理和演算回路１２３０は、２入力ＯＲ回路であり、論理積演算回路１２２６の出力ビットとビットＧＡ［２］の論理和演算結果をビットＣ［２］として出力する。
【００８８】
バッファ１２２４は、キャリービットＧｃ３０と同じ論理値を有するビットＣ［３］を出力する。論理積演算回路１２２７は、２入力ＡＮＤ回路であり、キャリービットＧｃ３０とビットＰＡ［４］の論理積演算結果を出力する。論理和演算回路１２３１は、２入力ＯＲ回路であり、論理積演算回路１２２７の出力ビットとビットＧＡ［４］の論理和演算結果をビットＣ［４］として出力する。
【００８９】
バッファ１２２５は、キャリービットＧｃ５０と同じ論理値を有するビットＣ［５］を出力する。論理積演算回路１２２８は、２入力ＡＮＤ回路であり、キャリービットＧｃ５０とビットＰＡ［６］の論理積演算結果を出力する。論理和演算回路１２３２は、２入力ＯＲ回路であり、論理積演算回路１２２８の出力ビットとビットＧＡ［６］の論理和演算結果をビットＣ［６］として出力する。上位マスク処理部６０１は、ビットＣ［０］〜Ｃ［６］を上位マスク２進数Ｃ［６：０］として出力する。
【００９０】
以上のように、キャリー生成部１２１５は、第１のオペランドＸ［７：０］の下位から１ビット目Ｘ［０］を入力端子ＧＬＯに入力し、第２のオペランドＹ［７：０］の下位から１ビット目Ｙ［０］の論理反転ビットＰＡ［０］を入力端子ＰＬＯに入力し、第１のオペランドＸ［７：０］の下位から２ビット目Ｘ［１］を入力端子ＧＨＩに入力し、第２のオペランドＹ［７：０］の下位から２ビット目Ｙ［１］の論理反転ビットＰＡ［１］を入力端子ＰＨＩに入力し、キャリービットＧａ１０を出力端子Ｇから出力し、キャリービットＰａ１０を出力端子Ｐから出力する。
【００９１】
また、キャリー生成部１２１６は、第１のオペランドＸ［７：０］の下位から３ビット目Ｘ［２］を入力端子ＧＬＯに入力し、第２のオペランドＹ［７：０］の下位から３ビット目Ｙ［２］の論理反転ビットＰＡ［２］を入力端子ＰＬＯに入力し、第１のオペランドＸ［７：０］の下位から４ビット目Ｘ［３］を入力端子ＧＨＩに入力し、第２のオペランドＹ［７：０］の下位から４ビット目Ｙ［３］の論理反転ビットＰＡ［３］を入力端子ＰＨＩに入力し、キャリービットＧａ３２を出力端子Ｇから出力し、キャリービットＰａ３２を出力端子Ｐから出力する。
【００９２】
また、キャリー生成部１２１９は、キャリービットＧａ１０を入力端子ＧＬＯに入力し、キャリービットＰａ１０を入力端子ＰＬＯに入力し、キャリービットＧａ３２を入力端子ＧＨＩに入力し、キャリービットＰａ３２を入力端子ＰＨＩに入力し、キャリービットＧｂ３０を出力端子Ｇから出力し、キャリービットＰｂ３０を出力端子Ｐから出力する。
【００９３】
図１３は、図１２のキャリー生成部１２１５の構成例を示す回路図である。図１２のキャリー生成部１２１６〜１２２２も、キャリー生成部１２１５と同じ構成を有する。キャリー生成部１２１５〜１２２２の各々は、論理積演算回路１３０１，１３０２と、論理和演算回路１３０３とを有する。論理積演算回路１３０１は、２入力ＡＮＤ回路であり、入力端子ＰＬＯのビットと入力端子ＰＨＩのビットとの論理積演算結果を出力端子Ｐに出力する。論理積演算回路１３０２は、入力端子ＧＬＯのビットと入力端子ＰＨＩのビットとの論理積演算結果を出力する。論理和演算回路１３０３は、論理積演算回路１３０２の出力ビットと入力端子ＧＨＩのビットとの論理和演算結果を出力端子Ｇに出力する。
【００９４】
以上のように、第１及び第２の実施形態によれば、処理回路６００は、上位マスク処理部６０１と下位マスク処理部６０２が並列に処理することができるので、高速に出力値Ｒ［ｍ：０］を演算することができる。また、上位マスク処理部６０１では、キャリー生成部は、下位のキャリービットを用いて、上位のキャリービットを生成することができる。その結果、上位マスク処理部６０１及び処理回路６００の面積を小さくすることができる。また、第１の実施形態では、上位マスク処理部６０１のキャリー生成部は、１桁下のキャリービットを用いて、自己のキャリービットを生成する。これに対し、第２の実施形態では、上位マスク処理部６０１のキャリー生成部は、１桁下のキャリービットを使用するのではなく、中間項の演算をグループ化し、１グループ以上下位のキャリービットを用いて、自己のキャリービットを生成することにより、さらに高速化を図ることができる。
【００９５】
図１４（Ａ）は、処理回路１００及び処理回路６００で用いられる回路素子の面積と処理時間の比率を示す図である。図１４（Ａ）の下から２段目の「２ＡＮＤＯＲ」は、図３の２個の論理積演算回路３１２，３１３と１個の論理和演算回路３１６の組み合わせを示す。また、図１４（Ａ）の下から１段目の「ＡＮＤＯＲ」は、図９の１個の論理積演算回路９０３と１個の論理和演算回路９０４の組み合わせを示す。
【００９６】
図１４（Ｂ）は、基本技術による処理回路１００の面積と処理時間の比率と、第１の実施形態による処理回路６００の面積と処理時間の比率と、第２の実施形態による処理回路６００の面積と処理時間の比率を示す図である。基本技術による処理回路１００は、図１４（Ａ）の回路素子に基づき、面積の比率が１４６であり、演算時間の比率が２５である。また、第１の実施形態による処理回路６００は、図１４（Ａ）の回路素子に基づき、面積の比率が８４であり、処理時間の比率が１２である。また、第２の実施形態による処理回路６００は、図１４（Ａ）の回路素子に基づき、面積の比率が９２であり、処理時間の比率が８．５である。
【００９７】
第１及び第２の実施形態による処理回路６００は、共に、基本技術による処理回路１００に比べ、面積が小さく、処理時間が短い。第２の実施形態による処理回路６００は、基本技術による処理回路１００に対して、面積が３５％削減され、処理時間が６５％削減される。ビット幅ｍ＋１が多くなるほど、その効果が大きくなる。
【００９８】
また、第２の実施形態による処理回路６００は、第１の実施形態による処理回路６００に比べ、処理時間が短く、高速に処理することができる。第１の実施形態による処理回路６００は、第２の実施形態による処理回路６００に比べ、面積が小さい。
【００９９】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【０１００】
６００  処理回路
６０１  上位マスク処理部
６０２  下位マスク処理部
６０３  出力合成部
【図１】
2018151831.tif 000014
【図２】
2018151831.tif 000015
【図３】
2018151831.tif 000016
【図４】
2018151831.tif 000017
【図５】
2018151831.tif 000018
【図６】
2018151831.tif 000019
【図７】
2018151831.tif 000020
【図８】
2018151831.tif 000021
【図９】
2018151831.tif 000022
【図１０】
2018151831.tif 000023
【図１１】
2018151831.tif 000024
【図１２】
2018151831.tif 000025
【図１３】
2018151831.tif 000026
【図１４】
2018151831.tif 000027