(57)【特許請求の範囲】
【請求項１】
第１および第２の全ワード被乗数を乗算する全ワード乗算、および、第１および第２の部分ワード被乗数を乗算する部分ワード乗算を複数並列に実行する部分ワード並列乗算、を選択的に実行可能な乗算器であって、
前記第１の全ワード被乗数、または複数の前記第１の部分ワード被乗数を含む第１の値と、前記第２の全ワード被乗数、または複数の前記第２の部分ワード被乗数を含む第２の値とを受け取り、該第１の値のビット部分のそれぞれに、該第２の値のビット部分のそれぞれを乗算して、複数の部分積を生成する部分積生成手段と、
前記全ワード乗算および前記部分ワード並列乗算のいずれかを選択する選択手段と、
前記部分積生成手段および前記選択手段に接続される部分積選択手段であって、該選択手段が前記部分ワード並列乗算を選択することに応じて、該部分積生成手段により生成される複数の部分積のうち、或る部分ワード乗算の前記第１の部分ワード被乗数に含まれるビット部分と他の部分ワード乗算の前記第２の部分ワード被乗数に含まれるビット部分の乗算により生成される部分積を、強制的にゼロに設定する、部分積選択手段と、
前記部分積生成手段に接続される部分積和回路であって、前記生成された複数の部分積を合計して結果を生成する部分積和回路と、
を備える、乗算器。
【請求項２】
前記部分積生成手段は論理ＡＮＤゲートのアレイを有しており、該アレイにおける論理ＡＮＤゲートのそれぞれが部分積を生成する、請求項１に記載の乗算器。
【請求項３】
前記部分積選択手段は、前記論理ＡＮＤゲートの少なくとも一部に対する第３の入力を有する、請求項２に記載の乗算器。
【請求項４】
前記乗算器が全ワード乗算を実行するとき、前記部分積選択手段は、いずれの部分積をも強制的に値ゼロに設定しないようにする、請求項１に記載の乗算器。
【請求項５】
前記乗算器はＢｏｏｔｈ符号化乗算器である、請求項１に記載の乗算器。
【請求項６】
第１および第２の全ワード被乗数を乗算する全ワード乗算、および、第１および第２の部分ワード被乗数を乗算する部分ワード乗算を複数並列に実行する部分ワード並列乗算、を選択的に実行する方法であって、
（ａ）前記第１の全ワード被乗数、または複数の前記第１の部分ワード被乗数を含む第１の値と、前記第２の全ワード被乗数、または複数の前記第２の部分ワード被乗数を含む第２の値とを受け取り、該第１の値のビット部分のそれぞれに、該第２の値のビット部分のそれぞれを乗算して、複数の部分積を生成するステップと、
（ｂ）前記全ワード乗算および前記部分ワード並列乗算のいずれかを選択するステップと、
（ｃ）前記部分ワード並列乗算を選択することに応じて、前記生成される複数の部分積のうち、或る部分ワード乗算の前記第１の部分ワード被乗数に含まれるビット部分と他の部分ワード乗算の前記第２の部分ワード被乗数に含まれるビット部分の乗算により生成される部分積を、強制的にゼロに設定するステップと、
（ｄ）前記生成された複数の部分積を合計して結果を生成するステップと、
を含む、方法。
【請求項７】
前記ステップ（ａ）は論理ＡＮＤゲートのアレイを用いて実行され、該アレイのそれぞれの論理ＡＮＤゲートが部分積を生成する、請求項６に記載の方法。
【請求項８】
前記ステップ（ｃ）において前記選択された部分積を強制的に値ゼロにするステップは、前記論理ＡＮＤゲートの一部に対する入力を論理ゼロにすることによって実行される、請求項７に記載の被乗数の乗算を実行する方法。
【請求項９】
前記ステップ（ｂ）において、前記乗算器が全ワード乗算を実行するとき、いずれの部分積をも強制的に値ゼロに設定しないようにする、請求項６に記載の方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、単一プロセッサにおける並列データ処理に関するものである。
【０００２】
【従来の技術】
一般に、単一プロセッサ・システムは、２つのオペランドに順次演算を施す。例えば、３２ビットコンピュータの場合、各整数オペランドは、３２ビットである。６４ビット・コンピュータの場合、各整数オペランドは、６４ビットである。従って、６４ビット・コンピュータにおける整数「加算」命令では、２つの６４ビット整数オペランドを加算して、６４ビットの整数結果が得られる。ほとんどのパイプラインで形成された６４ビット・プロセッサでは、６４ビット加算命令に、１サイクルの実行時間を要する。
【０００３】
多くの例において、オペランドの直接関連する範囲は１６ビット又はそれ以下である。しかし、現在の３２ビットまたは６４ビット・コンピュータにおいて、１対の１６ビット・オペランドの演算を施すには今まで通り完全な命令が必要になる。従って、１６ビット・オペランドに演算を施すのに必要な実行サイクル数は、３２ビット・コンピュータにおける２つの３２ビット・オペランド、または６４ビット・コンピュータにおける２つの６４ビット・オペランドに演算を施すのに必要な実行サイクル数と同じになる。
【０００４】
先行技術の場合、並列データ処理には、それぞれ、フル・ワード長のデータを取り扱うことが可能な機能毎のユニットからなる、機能毎のユニットの複製品を作ることが必要とされた。例えば、１９６６年１２月の、Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＩＥＥＥ、第５４巻、１９０１〜１９０９ページにおける、Ｍｉｃｈａｅｌ  ＦｌｙｎｎによるＶｅｒｙ  Ｈｉｇｈ−Ｓｐｅｅｄ  Ｃｏｍｐｕｔｉｎｇ  Ｓｙｓｔｅｍｓを参照されたい。
【０００５】
【発明が解決しようとする課題】
しかし、こうした並列処理の実施は、必要なハードウェア及び設計の複雑さの両方に関連して、コストが高くつく。
【０００６】
【課題を解決するための手段】
本発明の望ましい実施例によれば、単一プロセッサ内における並列データ処理を可能にするシステムが提供される。データの並列処理を可能にするため、シフタのような処理システム内における論理演算装置または他の演算実行エンティティが区分化される。各パーティション内で、演算が実施される。フル・ワード長のオペランドに対する演算を実施すべき場合には、並列処理は行われない。従って、パーティション間における境界を越えてデータを自由に伝搬させることが可能である。１フル・ワード長未満の複数のオペランドを利用して、並列に演算を実施する場合には、パーティション間における少なくとも１つの境界を越えてデータが伝搬しないようにする。
【０００７】
例えば、演算が加算演算（例えば、２の補数加算）の場合、複数のパーティションが、それぞれ、加算演算を実施する。フル・ワード長のオペランドに加算を施すべき場合には、パーティション間における桁上げの伝播が可能になる。１フル・ワード長より短い複数のオペランド集合に並列加算演算を施す場合には、パーティション間における少なくとも１つの境界を越える桁上げの伝播が阻止される。
【０００８】
同様に、演算がシフトの場合、複数のパーティションが、それぞれ、シフト演算を実施する。フル・ワード長のオペランドにシフトを施すべき場合には、パーティション間におけるシフトが可能になる。１フル・ワード長より短い複数のオペランドを利用して、並列に演算を施す場合には、パーティション間における少なくとも１つの境界を越えるシフトが阻止される。
【０００９】
また、本発明の望ましい実施例によれば、乗算器は、全ワード被乗数の乗算とサブ・ワード被乗数の並列乗算の両方を実施する。例えば、論理ＡＮＤゲート（またはその同等物）のアレイといった回路要素が、部分積を発生する。部分積和回路要素が、部分積を合計することによって、結果が得られる。部分積ゲート手段が、サブ・ワード被乗数の並列乗算の選択に応答して、選択された部分積の値を強制的にゼロにし、この結果、サブ・ワード被乗数の並列乗算が実施される。乗算器が全ワード乗算を実施している間、部分積の値が強制的にゼロにされることはない。部分積ゲート手段は、例えば、論理ＡＮＤゲートの少なくとも一部に対する第３の入力を利用して実施することが可能である。
【００１０】
本発明によれば、オペランドがフル・ワード長より短い場合における並列処理演算を容易化することによって、単一プロセッサ・システムの性能を大幅に高めることが可能になる。並列処理のこの低コストの利用によって、プロセッサ・チップにおけるシリコン・スペースまたは設計の複雑さにあまりコストを費やすことなく、このタイプのデータ並列処理を利用可能な計算に関する性能が大幅に向上する。
【００１１】
【実施例】
図１には、本発明の望ましい実施例による、プロセッサ内における演算実行データ経路の略ブロック図が示されている。近く行われることになる演算のオペランド及び実施済みの演算の結果は、汎用レジスタ２５に記憶される。演算が実施される際には、汎用レジスタ２５内の第１のレジスタに記憶された第１のオペランドが、第１のソース・バス２１に送り出される。演算に別のオペランドが必要な場合には、汎用レジスタ２５内の第２のレジスタに記憶されている第２のオペランドが、第２のソース・バス２２に送り出される。
【００１２】
演算の実施後、結果は、結果バス２３に送り出され、汎用レジスタ２５内のレジスタにロードされる。演算は、論理演算装置（ＡＬＵ）２６またはシフタ２９によって実施される。プリ・シフタ２７及び補数回路要素２８のそれぞれを利用して、ＡＬＵ２６が受信する前に、オペランドに修正を加えることが可能である。本発明と同様に構成された、単一プロセッサ・システムのアーキテクチャに関する一般的背景については、１９８９年１月の、ＩＥＥＥ  Ｃｏｍｐｕｔｅｒ、第２２巻、第１号、７８〜９１ページにおける、Ｒｕｂｙ  Ｂ．ＬｅｅよるＰｒｅｃｉｓｉｏｎ  Ａｒｃｈｉｔｅｃｔｕｒｅを参照されたい。
【００１３】
本発明の望ましい実施例によれば、ＡＬＵを区分化して、並列データ処理を行うことが可能である。例えば、図２には、２つのパーティションに分割されたＡＬＵ２６が示されている。第１のパーティション４１は、第１のオペランドの下位ビット４２、及び、第２のオペランドの下位ビット４３に演算を施して、下位ビットの結果４４を求める。第２のパーティション５１は、第１のオペランドの上位ビット５２、及び、第２のオペランドの上位ビット５３に演算を施して、上位ビットの結果５４を求める。
【００１４】
セレクタ５０を利用することによって、制御入力４９に応答して、データ経路４５の情報を第１のパーティション４１から第２のパーティション５１に伝搬できるようにするか、あるいは、第１のパーティション４１から第２のパーティション５１への伝搬前に、データ経路４５の情報を遮断することが可能になる。すなわち、フル・ワード・オペランドに対して実施される算術演算の場合、情報は、セレクタ５０を介して第１のパーティション４１から第２のパーティション５１に伝搬させることが可能である。ハーフ・ワード・オペランドに対して並列算術演算が実施される場合には、セレクタ５０によって、第１のパーティション４１から第２のパーティション５１への情報の伝搬が阻止される。一般に、論理演算の場合、第１のパーティション４１から第２のパーティション５１への情報の伝搬は生じない。
【００１５】
例えば、３２ビット幅のデータ経路を備えたコンピュータの場合、各フル・ワード・オペランドは、３２ビットである。従って、３２ビットのフル・ワード・オペランドを利用して演算を行う場合、セレクタ５０は、セレクタ５０を介した、第１のパーティション４１から第２のパーティション５１への情報伝搬を可能にする。１６ビットのハーフ・ワード・オペランドを利用して２つの並列演算を行う場合、セレクタ５０は、セレクタ５０を介した、第１のパーティション４１から第２のパーティション５１への情報伝搬を阻止する。代わりに、ライン５９の値がパーティション５１に送られる。「加算」の実施時には、論理０が、入力ライン５９におきかわる。「減算」の実施時には、論理１が、入力ライン５９におきかわる。
【００１６】
本発明の望ましい実施例の場合、図１に示すＡＬＵによって実施される一般的な算術演算は、２の補数加算である。当該技術の熟練者には明らかなように、ＡＬＵにおいて２の補数加算演算を実施する前に、２の補数回路要素２８を利用して、あるオペランドに対する２の補数演算を実施することによって、２の補数減算が実施される。また、ＡＬＵにおいて２の補数加算演算を実施する前に、プリ・シフタ２７を利用して、オペランドのプリ・シフトを行うことによって、シフト及び加算演算が実施される。
【００１７】
図３には、本発明の望ましい実施例による、ＡＬＵ２６内における桁上げ伝播加算を行う２の補数加算器の実施例が示されている。代替案では、ＡＬＵ２６に、桁上げ先見加算を行う２の補数加算器が含まれる。ハーフ加算器６０は、第１のオペランドの単一ビットＸ０及び第２のオペランドの単一ビットＹ０を受信する。ハーフ加算器６０は、和ビットＺ０及び桁上げビットＣ０を送り出す。フル加算器６１は、第１のオペランドの単一ビットＸ１、第２のオペランドの単一ビットＹ１、及び、桁上げビットＣ０を受け取る。フル加算器６１は、和ビットＺ１及び桁上げビットＣ１を送り出す。フル加算器６５は、第１のオペランドの単一ビットＸｉー１、第２のオペランドの単一ビットＹｉー１、及び、先行加算器（すなわち、不図示のＣｉー２）からの桁上げビットを受け取る。フル加算器６５は、和ビットＺｉー１及び桁上げビットＣｉー１を送り出す。フル加算器６６は、第１のオペランドの単一ビットＸｉ及び第２のオペランドの単一ビットＹｉを受け取る。許可ビット４９の値によって、フル加算器６６は、セレクタ５０（または、当該技術の通常の技術者であれば理解し得る同等の論理回路要素）を介して桁上げビットＣｉを受信する。フル加算器６９は、第１のオペランドの単一ビットＸｊー１、第２のオペランドの単一ビットＹｊー１、及び、先行加算器（不図示）からの桁上げビットを受信する。フル加算器６９は、和ビットＺｊ−１及び桁上げビットＣｊ−１を送り出す。
【００１８】
図３に示す加算器の実施例の場合、「ｊ」は、データ経路のサイズ、及び、フル・ワード演算のビット長である。また、「ｉ」は、「ｊ」を２で割った値に等しい。例えば、「ｊ」が３２に等しければ、「ｉ」は１６に等しい。
【００１９】
セレクタ５０は、図３にも示されている。「ｊ」ビットのフル・ワード・オペランドを利用して演算を行う場合、許可ビット４９は、論理１に等しく、桁上げがセレクタ５０を介してフル加算器６６に伝播するのを可能にする。「ｉ」ビットのハーフ・ワード・オペランドを利用して２つの並列演算を実施する場合、許可ビット４９は論理ゼロに等しく、桁上げがセレクタ５０を介してフル加算器６６に伝播するのを阻止する。代わりに、ライン５９の値が、フル加算器６６に送られる。「加算」の実施時には、論理０が入力ライン５９におきかわる。「減算」の実施時には、論理１が入力ライン５９におきかわる。
【００２０】
図２及び図３には、２つのパーティションを備えたＡＬＵ２６の実施例が示されているが、本発明の他の望ましい実施例に基づいて設計されたＡＬＵの場合、ＡＬＵをさまざまに区分化することが可能である。例えば、図４には、本発明の望ましい代替実施例に基づくＡＬＵ２６の代替略ブロック図が示されている。図４では、ＡＬＵ６は、４つのパーティションに分割されている。第１のパーティション７１は、第１のオペランドの下位ビット７２及び第２のオペランドの下位ビット７３に演算を施し、下位ビットの結果７４を求める。第２のパーティション８１は、第１のオペランドのビット８２及び第２のオペランドのビット８３に演算を施し、結果ビット８４を求める。第３のパーティション９１は、第１のオペランドのビット９２及び第２のオペランドのビット９３に演算を施し、結果ビット９４を求める。第４のパーティション１０１は、第１のオペランドの上位ビット１０２及び第２のオペランドの上位ビット１０３に演算を施し、上位ビットの結果１０４を求める。
【００２１】
セレクタ８０を利用して、制御入力７９に応答し、第１のパーティション７１から第２のパーティション８１へのデータ経路７５における情報の伝搬を可能にするか、あるいは、第１のパーティション７１から第２のパーティション８１へ伝搬する前に、データ経路７５の情報を遮断する。すなわち、フル・ワード・オペランドまたはハーフ・ワード・オペランドに対して実施される算術演算の場合、セレクタ８０を介した、第１のパーティション７１から第２のパーティション８１への情報伝搬が可能になる。クォータ・ワード・オペランドに対する並列算術演算を実施する場合、セレクタ８０は、第１のパーティション７１から第２のパーティション８１への情報の伝搬を阻止する。代わりに、ライン８８の値がパーティション８１に送られる。「加算」の実施時には、ライン８８で論理０が伝送される。「減算」の実施時には、ライン８８で論理１が伝送される。一般に、論理演算の場合、パーティション間における情報の伝搬は生じない。
【００２２】
セレクタ９０を利用して、制御入力８９に応答し、第２のパーティション８１から第３のパーティション９１へのデータ経路８５における情報の伝搬を可能にするか、あるいは、第２のパーティション８１から第３のパーティション９１へ伝搬する前に、データ経路７５の情報を遮断する。すなわち、フル・ワード・オペランドに対して実施される算術演算の場合、セレクタ９０を介した、第２のパーティション８１から第３のパーティション９１への情報伝搬が可能になる。クォータ・ワード・オペランドまたはハーフ・ワード・オペランドに対する並列算術演算を実施する場合、セレクタ９０は、第２のパーティション８１から第３のパーティション９１への情報の伝搬を阻止する。代わりに、ライン９８の値がパーティション９１に送られる。「加算」の実施時には、ライン９８で論理０が伝送される。「減算」の実施時には、ライン９８で論理１が伝送される。
【００２３】
セレクタ１００を利用して、制御入力９９に応答し、第３のパーティション９１から第４のパーティション１０１へのデータ経路９５における情報の伝搬を可能にするか、あるいは、第３のパーティション９１から第４のパーティション１０１へ伝搬する前に、データ経路７５の情報を遮断する。すなわち、フル・ワード・オペランド及びハーフ・ワード・オペランドに対して実施される算術演算の場合、セレクタ１００を介した、第３のパーティション９１から第４のパーティション１０１への情報伝搬が可能になる。クォータ・ワード・オペランドに対する並列算術演算を実施する場合、セレクタ１００は、第３のパーティション９１から第４のパーティション１０１への情報の伝搬を阻止する。代わりに、ライン１０８の値がパーティション１０１に送られる。「加算」の実施時には、ライン１０８で論理０が伝送される。「減算」の実施時には、ライン１０８で論理１が伝送される。
【００２４】
例えば、６４ビット幅のデータ経路を備えるコンピュータの場合、各フル・ワード・オペランドは６４ビットである。従って、６４ビットのフル・ワード・オペランドを利用して演算を実施する場合、セレクタ８０は、セレクタ８０を介した、第１のパーティション７１から第２のパーティション８１への情報の伝搬を可能にし、セレクタ９０は、セレクタ９０を介した、第２のパーティション８１から第３のパーティション９１への情報の伝搬を可能にし、セレクタ１００は、セレクタ１００を介した、第３のパーティション９１から第４のパーティション１０１への情報の伝搬を可能にする。３２ビットのハーフ・ワード・オペランドを利用して２つの並列演算を実施する場合、セレクタ８０は、セレクタ８０を介した、第１のパーティション７１から第２のパーティション８１への情報の伝搬を可能にし、セレクタ９０は、セレクタ９０を介した、第２のパーティション８１から第３のパーティション９１への情報の伝搬を阻止し、セレクタ１００は、セレクタ１００を介した、第３のパーティション９１から第４のパーティション１０１への情報の伝搬を可能にする。１６ビットのクォータ・ワード・オペランドを利用して４つの並列演算を実施する場合、セレクタ８０は、セレクタ８０を介した、第１のパーティション７１から第２のパーティション８１への情報の伝搬を阻止し、セレクタ９０は、セレクタ９０を介した、第２のパーティション８１から第３のパーティション９１への情報の伝搬を阻止し、セレクタ１００は、セレクタ１００を介した、第３のパーティション９１から第４のパーティション１０１への情報の伝搬を阻止する。
【００２５】
図５には、本発明のもう１つの望ましい代替実施例に基づく、ＡＬＵ２６のもう１つの代替略ブロック図が示されている。図５の場合、ＡＬＵ２６は、それぞれ、１ビット幅のパーティションに分割される。第１のパーティション１１１は、第１のオペランドの下位ビット１１２及び第２のオペランドの下位ビット１１３に演算を施し、下位結果ビット１１４を求める。第２のパーティション１２１は、第１のオペランドのビット１２２及び第２のオペランドのビット１２３に演算を施し、結果ビット１２４を求める。パーティション１３１は、第１のオペランドのビット１３２及び第２のオペランドのビット１３３に演算を施し、結果ビット１３４を求める。パーティション１４１は、第１のオペランドのビット１４２及び第２のオペランドのビット１４３に演算を施し、結果ビット１４４を求める。パーティション１５１は、第１のオペランドの上位ビット１５２及び第２のオペランドの上位ビット１５３に演算を施し、上位結果ビット１５４を求める。
【００２６】
セレクタ１２０を利用して、制御入力１１９に応答し、第１のパーティション１１１から第２のパーティション１２１へのデータ経路１１５における情報の伝搬を可能にするか、あるいは、第１のパーティション１１１から第２のパーティション１２１へ伝搬する前に、データ経路１１５の情報を遮断する。データが遮断されると、ライン１２８の値がパーティション１２１に送られる。「加算」の実施時には、ライン１２８で論理０が伝送される。「減算」の実施時には、ライン１２８で論理１が伝送される。
【００２７】
セレクタ１３０を利用して、制御入力１２９に応答し、あるデータ経路におけるすぐ前のパーティション（不図示）からパーティション１３１への、前記すぐ前のパーティションからの情報の伝搬を可能にするか、あるいは、パーティション１３１に伝搬する前に、該データ経路における前記すぐ前のパーティションからの情報を遮断する。データが遮断されると、ライン１３８の値がパーティション１３１に送られる。「加算」の実施時には、ライン１３８で論理０が伝送される。「減算」の実施時には、ライン１３８で論理１が伝送される。
【００２８】
セレクタ１４０を利用して、制御入力１３９に応答し、パーティション１３１からパーティション１４１へのデータ・ライン１３５における情報の伝搬を可能にするか、あるいは、パーティション１３１からパーティション１４１へ伝搬する前に、データ経路１３５の情報を遮断する。データが遮断されると、ライン１４８の値がパーティション１４１に送られる。「加算」の実施時には、ライン１４８で論理０が伝送される。「減算」の実施時には、ライン１４８で論理１が伝送される。
【００２９】
セレクタ１５０を利用して、制御入力１４９に応答し、あるデータ経路におけるすぐ前のパーティション（不図示）からパーティション１５１への、前記すぐ前のパーティションからの情報の伝搬を可能にするか、あるいは、パーティション１５１に伝搬する前に、該データ経路における前記すぐ前のパーティションからの情報を遮断する。データが遮断されると、ライン１５８の値がパーティション１５１に送られる。「加算」の実施時には、ライン１５８で論理０が伝送される。「減算」の実施時には、ライン１５８で論理１が伝送される。
【００３０】
セレクタに対する制御入力を利用することによって、可変長オペランドの並列処理を可能にすることができる。例えば、６４ビット幅のデータ経路を備えた処理システムの場合、制御入力は、２つの１６ビット算術演算及び４つの８ビット算術演算の並列処理が、全て、同時に実施されるように選択することが可能である。さらに、合計しても、そのワード・サイズまでにしかならない任意のビット組み合わせを利用することも可能である。例えば、１７ビット、３ビット、１６ビット、１２ビット、５ビット、及び、１１ビットの算術演算を同時に実施することも可能である。
【００３１】
上述の原理は、桁上げ先見加算器にも当てはまる。例えば、図１０には、本発明の別の望ましい実施例に基づく、ＡＬＵ２６内の桁上げ先見を伴う、２の補数加算器の実施例が示されている。桁上げ先見回路４７０によって、加算器の桁上げが生じる。ハーフ加算器４６０は、第１のオペランドの単一ビットＸ０及び第２のオペランドの単一ビットＹ０を受信する。ハーフ加算器４６０は、和ビットＺ０を送り出す。フル加算器４６１は、第１のオペランドの単一ビットＸ１、第２のオペランドの単一ビットＹ１、及び、桁上げビットＣ０を受信する。フル加算器４６１は、和ビットＺ１を送り出す。フル加算器４６５は、第１のオペランドの単一ビットＸｉ−１、第２のオペランドの単一ビットＹｉ−１、及び、桁上げビットＣｉ−２を受信する。フル加算器４６５は、和ビットＺｉ−１を送り出す。フル加算器４６６は、第１のオペランドの単一ビットＸｉ、第２のオペランドの単一ビットＹｉ、及び、桁上げビットＣｉ−１を受信する。フル加算器４６６は、和ビットＺｉを送り出す。フル加算器４６９は、第１のオペランドの単一ビットＸｊ−  １、第２のオペランドの単一ビットＹｊ−１、及び、桁上げビットＣｊ−２を受信する。フル加算器４６９は、和ビットＺｊ−１を送り出す。
【００３２】
図１０に示す加算器の実施例の場合、「ｊ」は、データ経路のサイズ及びフル・ワード演算のビット長である。また、「ｉ」は、「ｊ」を２で割った値に等しい。例えば、「ｊ」が３２に等しいと、「ｉ」は１６に等しい。代わりに、ｊが３２に等しい場合、ｉを３２未満の任意の整数に等しくなるようにすることも可能である。
【００３３】
「ｊ」ビットのフル・ワード・オペランドを利用して演算を実施する場合、許可ビット４５２は、論理１に等しく、全ての桁上げの伝播を可能にする。ビットｉとｉ＋１の間で区分された「ｉ」ビットのサブ・ワード・オペランドを利用して２つの並列演算を実施する場合、許可ビット４５２は、論理０に等しく、パーティション境界を越える桁上げの伝播を阻止する。代わりに、ライン４５１の値が、フル加算器４６６に送られる値として利用される。「加算」の実施時には、入力ライン４５１で論理０が伝送される。「減算」の実施時には、入力ライン４５１で論理１が伝送される。
【００３４】
桁上げ先見加算器の働きは、当該技術において周知のところである。例えば、Ａ［ｉ］が入力の１ビットであり、Ｂ［ｉ］が他の入力の１ビットであり、Ｓ［ｉ］が加算器からの和の１ビットであると仮定する。加算器からの和の１ビットは、下記の式１によって示される。
【００３５】
【数１】
0003578502.tif 000002
【００３６】
式１において、Ｃ［ｉ−１］は、桁上げ先見加算器の先行ビットからの桁上げである。桁上げ先見加算器は、これらの桁上げビットを素早く発生するのに有効である。
【００３７】
Ｇ［ｉ］が、このビットによって桁上げを発生させるべきであることを示す信号であり、Ｐ［ｉ］が、先行ビットからこのビットの出力に桁上げが伝播する可能性のあることを示す信号であると仮定する。これらは、下記の式２によって決まる。
【００３８】
【数２】
0003578502.tif 000003
【００３９】
従って、桁上げ先見加算器内における４ビットの場合、桁上げビットは、下記の式３のように発生させることが可能である。
【００４０】
【数３】
0003578502.tif 000004
【００４１】
上記式３において、「＊」は、論理ＡＮＤ演算に相当し、「＋」は、論理ＯＲ演算に相当する。
【００４２】
本発明の望ましい実施例を実行する場合、発生Ｇ［ｉ］及び伝播Ｐ［ｉ］が強制的に偽にされると、桁上げは、特定のビットで停止する。例えば、上記式３の場合、Ｇ［ｉ−３］及びＰ［ｉ−３］が偽の場合、Ｃ［ｉ−３］は偽になり、Ｃ［ｉ−４］は、Ｃ［ｉ−２］、Ｃ［ｉ−１］、及び、Ｃ［ｉ］の値に影響を及ぼすことはできない。同様に、Ｇ［ｉ−２］及びＰ［ｉ−２］が偽の場合、Ｃ［ｉ−２］は偽になり、Ｇ［ｉ−３］及びＰ［ｉ−３］及びＣ［ｉ−４］は、Ｃ［ｉ−１］及びＣ［ｉ］の値に影響を及ぼすことはできない。
【００４３】
Ｍ［ｉ］が、１の場合、ビット［ｉ］とビット［ｉ＋１］との桁上げ連鎖をブレークするマスク・ビットであると仮定すると、新しい式４は、下記のように生成することが可能である。
【００４４】
【数４】
0003578502.tif 000005
【００４５】
Ｍ［ｉ］が１の場合、桁上げは、ビット［ｉ］から発生することができないか、あるいは、ビット［ｉ］を介して伝播することができない。
【００４６】
キャリ・インに関して、オペランドの一方の１の補数を生成し、もう一方のオペランドに加算することによる減算（２の補数演算）の場合、Ｍ［ｉ］が１であれば、あるビットにおいて強制的に桁上げを発生しなければならない。
【００４７】
Ｆが、真の場合、Ｍ［ｉ］が１であれば、あるビットにおいて強制的に桁上げを発生させる信号であると仮定する。Ｇｓ［ｉ］及びＰｓ［ｉ］に関する式は、下記の式５に示すようになる。
【００４８】
【数５】
0003578502.tif 000006
【００４９】
Ｍ［ｉ］が１の場合、Ｇｓ［ｉ］の値はＦによって決まる。Ｍ［ｉ］が１の場合、Ｇｓ［ｉ］の値は、前述のように、Ａ［ｉ］及びＢ［ｉ］によって決まる。この伝播は、Ｆ信号によって強制する必要はない。
【００５０】
キャリ・アウトの式は、下記の式６によって示される。
【００５１】
【数６】
0003578502.tif 000007
【００５２】
当該技術の熟練者には明らかなように、本発明の原理は、コンピュータ・システムＡＬＵ内の算術演算に限定されるものではない。例えば、ＡＬＵに示される区分化は、データに基づいて機能するコンピュータ・システム内の他のエンティティにも拡張することが可能である。例えば、図６には、プリ・シフタ２７において具現化された本発明が示されている。本発明の同じ実施例は、シフタ２９の実施にも利用することが可能である。プリ・シフタ２７及びシフタ２９を区分化することによって、例えば、並列シフト・加算演算、及び、並列シフト演算の実施が可能になる。
【００５３】
プリ・シフタ２７には、図示のように、シフト・レジスタ・１ビット・スライス１６０、シフト・レジスタ・１ビット・スライス１６１、シフト・レジスタ・１ビット・スライス１６５、シフト・レジスタ・１ビット・スライス１６６、及び、シフト・レジスタ・１ビット・スライス１６９が含まれている。
【００５４】
データを左にシフトする場合には、一般に、論理値が０の、入力１７１におけるデータが、シフト・レジスタ・１ビット・スライス１６０に対する入力として利用される。データを右にシフトする場合には、セレクタ１７５が、制御入力１８２に応答し、入力１８１におけるデータ（論理値０または論理値１）を選択するか、あるいは、シフト・レジスタ・１ビット・スライス１６９によって現在記憶されている値を選択して、シフト・レジスタ・１ビット・スライス１６９に対する入力とする。
【００５５】
シフタを区分化すべき場所がどこであれ、シフタには、追加セレクタが追加される。例えば、図６には、シフト・レジスタ・１ビット・スライス１６５とシフト・レジスタ・１ビット・スライス１６６の間で区分化されたシフタが示されている。そこには、セレクタ１７４及びセレクタ１７３が追加されている。区分化オペランドに対するシフト演算に関して、データが左にシフトされる場合には、セレクタ１７３は、制御入力１８５に応答して、一般には論理値０の、入力１７２のデータを選択し、シフト・レジスタ・１ビット・スライス１６６として利用する。フル・ワード・オペランドに対するシフト演算に関して、データが左にシフトされる場合には、セレクタ１７３は、シフト・レジスタ・１ビット・スライス１６５からの出力を選択し、シフト・レジスタ・１ビット・スライス１６６に対する入力として利用する。
【００５６】
区分化オペランドに対するシフト演算に関して、データが右にシフトされる場合には、セレクタ１７４は、制御入力１８４に応答し、入力１８３におけるデータ（論理値０または論理値１）を選択するか、あるいは、シフト・レジスタ・１ビット・スライス１６６によって現在記憶されている値を選択して、シフト・レジスタ・１ビット・スライス１６５に対する入力とする。フル・ワード・オペランドに対するシフト演算に関して、データが右にシフトされる場合には、セレクタ１７４は、シフト・レジスタ・１ビット・スライス１６６からの出力を選択し、シフト・レジスタ・１ビット・スライス１６５に対する入力として利用する。
【００５７】
図６には、パーティションが２つだけのシフタが示されている。ＡＬＵにおけるパーティションに関する以上の説明から明らかなように、シフタは、さまざまなやり方で区分化することが可能である。例えば、６４ビットのシフタは、２、４、８、１６、３２、または、６４ビットの等サイズのパーティションに区分化することが可能である。さらに、パーティションが、それぞれ、等しいビット数で動作するのは、本発明の要件ではない。
【００５８】
上記実施例では、一連の１ビット・スライスから構成されるシフト・レジスタとして実施された、プリ・シフタ２７及びシフタ２９が示されているが、望ましい代替実施例には、マルチプレクサで実施されるプリ・シフタ及びシフタがある。一般に、プリ・シフタ２７は、通常、例えば、せいぜい、０、１、２、３、または、４ビットといった小ビット数ずつしかシフトすることができないので、１レベルのマルチプレクサによって実施される。シフタ２９は、一般に、各レベルが４対１マルチプレクサである、３レベルのマルチプレクサによって実施される。例えば、６４ビット・シフタ２９の場合、第１レベルのマルチプレクサは、０、１６、３２、または、４８ビットのシフトを行う。第２レベルのマルチプレクサは、０、４、８、または、１２ビットのシフトを行うことができる。第３レベルのマルチプレクサは、０、１、２、または、３ビットのシフトを行うことができる。これによって、０〜６３の任意のビット数のシフトが行えることになる。３段のマルチプレクサから構成されるこうしたシフタの場合、１ビット・スライスを識別することも可能である。しかし、当該技術の熟練者には明らかなように、３つのマルチプレクサ段の１つ以上において、任意の２ビット間におけるシフトをブロックすることが必要になる可能性がある。
【００５９】
本発明の原理は、コンピュータ・システムにおける他の構成要素にも拡張することが可能である。例えば、乗算器は、本発明の望ましい実施例に従い、全ワード乗算以外に、部分ワード並列乗算も行えるように実施することが可能である。
【００６０】
例えば、図７には、先行技術による４ビット乗算器が示されている。乗算器が、４ビットの最初の被乗数Ｘ３Ｘ２Ｘ１Ｘ０（基数２）と４ビットの第２の被乗数Ｙ３Ｙ２Ｙ１Ｙ０（基数２）を掛け合わせることによって、８ビットの結果Ｚ７Ｚ６Ｚ５Ｚ４Ｚ３Ｚ２Ｚ１Ｚ０（基数２）が得られる。当該技術の熟練者には明らかなように、論理ＡＮＤゲート２０１、２０２、２０３、２０４、２０５、２０６、２０７、２０８、２０９、２１０、２１１、２１２、２１３、２１４、２１５、及び２１６を利用して、乗算に関する部分積を発生することが可能である。部分積和回路２２０が、論理ＡＮＤゲート２０１〜２１６によって発生する部分積の和を求めることによって、結果が得られる。
【００６１】
２つの被乗数Ｘ３Ｘ２Ｘ１Ｘ０及びＹ３Ｙ２Ｙ１Ｙ０、論理ＡＮＤゲート２０１〜２１６によって発生する部分積、及び、部分積和回路２２０によって生じる結果は、乗算器の働きを要約するやり方で、表に組み入れることが可能である。例えば、こうした表は、下記の表１のように示される。
【００６２】
【表１】
0003578502.tif 000008
【００６３】
上記表１に示す表記法によれば、両方の被乗数及び結果における各ビットのビット位置が、明確に識別される。さらに、各部分積の形成に利用される被乗数のビットが、明確に示されている。当該技術の熟練者には明らかなように、上記表１に示す情報は、下記の表２に示すように、省略または単純化した表記法を用いて、表すことも可能である。
【００６４】
【表２】
0003578502.tif 000009
【００６５】
上記表２において、第１の被乗数の各ビットは、「Ｘ」で表され、第２の被乗数の各ビットは、「Ｙ」で表され、部分積の各ビットは、「ｚ」で表され、結果の各ビットは、「Ｚ」で表されている。表２のさらに単純な表記法を利用すると、８ビットの乗算器について、下記の表３に示すように、解説することが可能である。
【００６６】
【表３】
0003578502.tif 000010
【００６７】
表３に示すように、乗算器が、８ビットの第１の被乗数ＸＸＸＸＸＸＸＸ（基数２）と８ビットの第２の被乗数ＹＹＹＹＹＹＹＹ（基数２）を掛け合わせることによって、１６ビットの結果ＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺ（基数２）が得られる。
【００６８】
同様に、表２及び表３のより単純な表記法を利用すると（ただし、ビット位置間のスペースは考慮外とする）、１６ビットの乗算器について、下記の表４に示すように、解説することができる。
【００６９】
【表４】
0003578502.tif 000011
【００７０】
表４に示すように、乗算器が、１６ビットの第１の被乗数ＸＸＸＸＸＸＸＸＸＸＸＸＸＸＸＸ（基数２）と１６ビットの第２の被乗数ＹＹＹＹＹＹＹＹＹＹＹＹＹＹＹＹ（基数２）を掛け合わせることによって、３２ビットの結果ＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺＺ（基数２）が得られる。
【００７１】
本発明の望ましい実施例によれば、標準的な乗算器に修正を加えることによって、全ワードの乗算以外に、部分ワードの並列乗算を可能にする乗算器を実現することができる。例えば、図８には、本発明の望ましい実施例による４ビット乗算器が示されている。論理ＡＮＤゲート３０１、３０２、３０３、３０４、３０５、３０６、３０７、３０８、３０９、３１０、３１１、３１２、３１３、３１４、３１５、及び、３１６は、乗算に関して、部分積を発生する。部分積和回路３２０が、論理ＡＮＤゲート３０１〜３１６によって発生する部分積の和を求めることによって結果が得られる。
【００７２】
図８に示す乗算器の場合、部分積和回路３２０は、図７に示す部分積和回路２２０と全く同じように実施することが可能である。図８に示す乗算器と図７に示す乗算器との差は、論理ＡＮＤゲート３０３、３０４、３０７、３０８、３０９、３１０、３１３、及び３１４のそれぞれに含まれる追加入力に接続された、制御ライン３２１の追加である。
【００７３】
図８に示すように、制御ライン３２１が論理１にセットされると、乗算器が、４ビットの第１の被乗数Ｘ３Ｘ２Ｘ１Ｘ０（基数２）及び４ビットの第２の被乗数Ｙ３Ｙ２Ｙ１Ｙ０（基数２）に対して全ワード乗算を実施し、８ビットの結果Ｚ７Ｚ６Ｚ５Ｚ４Ｚ３Ｚ２Ｚ１Ｚ０（基数２）が得られる。２つの被乗数Ｘ３Ｘ２Ｘ１Ｘ０及びＹ３Ｙ２Ｙ１Ｙ０、論理ＡＮＤゲート３０１〜３１６によって発生する部分積、及び、部分積和回路３２０によって発生する結果は、下記の表５に示すように、表の形に表すことが可能である。
【００７４】
【表５】
0003578502.tif 000012
【００７５】
表５と上記表１との比較を行うことによって、ライン３２１が論理１にセットされると、図８に示す乗算器の働きが、図７に示す乗算器の働きと同じになることが確認される。従って、上記表２と同様、単純化した表記法を利用して、下記表６に示すように、図８に示す乗算器の働きを解説することが可能である。
【００７６】
【表６】
0003578502.tif 000013
【００７７】
図９には、図８に示す乗算器が示されているが、制御ライン３２１が０にセットされている点だけは異なっている。この結果、部分積の半分がゼロになり、乗算器は、部分（２ビット）ワードの並列処理が可能になる。すなわち、第１の乗算において、２ビット被乗数Ａ１Ａ０（基数２）と２ビット被乗数Ｃ１Ｃ０（基数２）を掛けることによって、４ビットの結果Ｅ３Ｅ２Ｅ１Ｅ０（基数２）が得られる。第２の乗算において、２ビットの被乗数Ｂ１Ｂ０（基数２）と２ビットの被乗数Ｄ１Ｄ０を掛けることによって、４ビットの結果Ｆ３Ｆ２Ｆ１Ｆ０（基数２）が得られる。並列乗算に利用されない部分積は、強制的に論理ゼロにされる。この並列乗算は、下記の表７に示すように、表の形で表すことが可能である。
【００７８】
【表７】
0003578502.tif 000014
【００７９】
【表８】
0003578502.tif 000015
【００８０】
表７及び８に示すように、部分ワードの並列乗算は、乗算器において選択された部分積を強制的にゼロにすることによって、乗算器で実施される。一般に、利用されない部分積を強制的にゼロにすることによって、任意のサイズの標準的な乗算器を利用して、並列乗算を行うことが可能である。部分積は、例えば、１つ以上の制御入力及び３つの入力論理ＡＮＤゲート（またはその同等物）を用いて、強制的に論理０にされる。
【００８１】
例えば、上述のように、８ビット乗算器は、表３に示すように実施することが可能である。本発明の教示に従い、図８及び図９に示すような回路要素を設けて、部分積を強制的にゼロにすることによって、この同じ乗算器を利用して、部分ワード被乗数の並列乗算を実施することが可能である。部分積和回路要素に対する修正は不必要である。従って、本発明の教示に基づいて表３に示す乗算器に修正を施すことによって、例えば、下記の表９によって実施されるように、４ビット被乗数を利用し、２つの並列乗算を実施することが可能になる。
【００８２】
【表９】
0003578502.tif 000016
【００８３】
上記表９から明らかなように、部分ワード被乗数の第１の並列乗算において、４ビット被乗数ＡＡＡＡ（基数２）と４ビット被乗数ＣＣＣＣ（基数２）を掛けることによって、８ビットの結果ＥＥＥＥＥＥＥＥ（基数２）が得られる。部分ワード被乗数の第２の並列乗算において、４ビット被乗数ＢＢＢＢ（基数２）と４ビット被乗数ＤＤＤＤ（基数２）を掛けることによって、８ビットの結果ＦＦＦＦＦＦＦＦ（基数２）が得られる。部分席を強制的にゼロにせずに、乗算器によって、２つの全ワード（８ビット）被乗数の乗算が実施される。
【００８４】
同様に、上述のように、１６ビット乗算器は、表４に示すようにして実施することが可能である。本発明の教示に従い、図８及び図９に示すような回路要素を設けて、部分積を強制的にゼロにすることによって、この同じ乗算器を利用して、部分ワード被乗算器の並列乗算を実施することが可能である。部分積和回路要素に対する修正は必要はない。従って、本発明の教示に基づき、表４に解説の乗算器に修正を加えることによって、例えば、下記の表１０によって実施されるように、８ビット（部分ワード）被乗数を利用して、２つの並列乗算を実施することが可能になる。
【００８５】
【表１０】
0003578502.tif 000017
【００８６】
上記表１０から分かるように、第１の並列乗算において、８ビット被乗数ＡＡＡＡＡＡＡＡ（基数２）と８ビット被乗数ＣＣＣＣＣＣＣＣ（基数２）を掛けることによって、１６ビットの結果ＥＥＥＥＥＥＥＥＥＥＥＥＥＥＥＥ（基数２）が得られる。部分ワード被乗数の第２の並列乗算において、８ビット被乗数ＢＢＢＢＢＢＢＢ（基数２）と８ビット被乗数ＤＤＤＤＤＤＤＤ（基数２）を掛けることによって、１６ビットの結果ＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦ（基数２）が得られる。部分積を強制的にゼロにせずに、乗算器によって、２つの全ワード（１６ビット）被乗数の乗算が実施される。
【００８７】
上記説明においては、ハーフ・ワードの並列乗算が示されているが、当該技術の通常の技術者であれば明らかなように、適合する部分積を選択して、強制的にゼロにすることによって、実施される並列乗算の数ち部分ワード・サイズの両方を変更することが可能である。
【００８８】
例えば、本発明の教示に従い、図８及び図９に示すような回路要素を設けて、部分積を強制的にゼロにすることによって、表４（及び表１０の両方又は一方）に解説のように実施される１６ビット乗算器を利用して、３つの同時並列乗算を実施することが可能である。従って、本発明の教示に基づき、表４に解説の乗算器に修正を加えることによって、例えば、下記の表１１によって実施されるように、８ビット被乗数を利用して、１つの並列乗算を実施し、４ビット被乗数を利用して、２つの並列乗算を実施する事が可能になる。
【００８９】
【表１１】
0003578502.tif 000018
【００９０】
上記表１１から分かるように、第１の並列乗算において、８ビット被乗数ＡＡＡＡＡＡＡＡ（基数２）と８ビット被乗数ＤＤＤＤＤＤＤＤ（基数２）を掛けることによって、１６ビットの結果ＧＧＧＧＧＧＧＧＧＧＧＧＧＧＧＧ（基数２）が得られる。第２の並列乗算において、４ビット被乗数ＢＢＢＢ（基数２）と４ビット被乗数ＥＥＥＥ（基数２）を掛けることによって、８ビットの結果ＨＨＨＨＨＨＨＨ（基数２）が得られる。第３の並列乗算において、４ビット被乗数ＣＣＣＣ（基数２）と４ビット被乗数ＦＦＦＦ（基数２）を掛けることによって、８ビットの結果ＩＩＩＩＩＩＩＩ（基数２）が得られる。当該技術の熟練者には明らかなように、表１１に示す、値がゼロの、全ての部分積について、３つの入力論理ＡＮＤゲートまたはその論理同等物を設けて、並列乗算演算の実施時に、部分積を強制的にゼロにすることができるようにしなければならない。しかし、表１１に示すように、サイズの異なるパーティションの混合が行われると、当該技術の熟練者には明らかなように、実施例によっては、異なる部分積の項を強制的にゼロにするために、異なる制御入力が必要とされる可能性がある。
【００９１】
上記解説から明らかなように、乗算器の部分積を選択的かつ強制的にゼロにすることによって、乗算器において、部分ワードの並列乗算を十分に実施することが可能になる。ワード・サイズ、同時に実施される並列乗算の数、及び、部分ワールド・サイズは、本発明の教示に従って自由に変更することが可能である。
【００９２】
図１１には、本発明の望ましい実施例に従って実行可能な命令の一例が示されている。例えば、命令５００には、フィールド５０１、サブ・フィールド５０２、フィールド５０３、フィールド５０４、及び、フィールド５０５が含まれている。フィールド５０１は、演算コードについて記述する。フィールド５０１は、例えば、加算、シフト及び加算、減算、シフト及び減算、左シフト、右シフト、乗算、または、任意の数の他の演算を示している。フイ  −ルド５０１のサブ・フィールド５０２は、その演算を並列演算として実施すべきか否かを指示するものであり、並列演算する場合には、オペランドのサイズを指示する。フィールド５０３は、第１の送信元レジスタを指示する。フィールド５０４は、第２の送信元レジスタを指示する。フィールド５０５は、宛先レジスタを指示する。
【００９３】
当該技術において周知のように、命令５００は、命令の編成を可能にする、見込みのある多くの方法のうちの１つが示されている。例えば、命令５１０には、並列演算指示が別個のフィールドに含まれる、代替実施例が示されている。例えば、命令５１０には、フィールド５１１、フィールド５１２、フィールド５１３、フィードフィールド５１４、及び、フィールド５１５が含まれている。フィールド５１１は、演算コードについて記述する。フィールド５１１は、例えば、加算、シフト及び加算、減算、シフト及び減算、左シフト、右シフト、乗算、または、任意の数の他の演算を示している。フィールド５１２は、その演算を並列演算として実施すべきか否かを指示するものであり、並列演算する場合には、オペランドのサイズを指示する。フィールド５１３は、第１の送信元レジスタを指示する。フィールド５１４は、第２の送信元レジスタを指示する。フィールド５１５は、宛先レジスタを指示する。
【００９４】
当該技術において明らかなように、本発明は、部分積を発生する他の乗算器にも有効である。例えば、本発明は、Ｂｏｏｔｈ符号化乗算器において利用することも可能である。Ｂｏｏｔｈ符号化乗算器の場合、部分積の項の各行毎に２ビット以上の乗数（ｙ被乗数）を考慮することによって、発生する部分積の項の行数が少なくなる。例えば、１９９０年にＭｏｒｇａｎ  Ｋａｕｆｍａｎｎから刊行された、Ｊｏｈｎ  Ｈｅｎｎｅｓｓｙ  ＆  Ｄａｖｉｄ  ＰａｔｔａｅｓｏｎによるＣｏｍｐｙｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ、Ａ  Ｑｕａｎｔｉｔａｔｉｖｅ  Ａｐｐｒｏａｃｈの付録ｐｐ．Ａ−３９〜Ａ−４９を参照されたい。上記乗算器の場合、当該技術の熟練者には明らかなように、Ｂｏｏｔｈ符号化乗算器によって発生する部分積の項の値は、並列処理を考慮して変更される。
【００９５】
すなわち、Ｂｏｏｔｈ符号化乗算器の場合、図８及び図９に示すＡＮＤゲート３０１〜３１６の代わりにマルチプレクサが用いられる。例えば、「オーバーラッピング・トリプレット」法を利用したＢｏｏｔｈ符号化乗算器は、いつも１ビットではなく、いつも乗数（すなわち、ｙ被乗数）の３ビットを検査して、図８及び図９に示す乗算器のように、常に＋ｘまたは０になる部分積の行ではなく、＋ｘ、＋２ｘ、−ｘ、及び、０のうちの１つになる部分積の行を発生する。これは、５対１乗算器として実施する事が可能である。「オーバーラッピング・トリプレット」という名称は、この方法が、乗数（ｙ被乗数）の３ビットを検査して、各行毎に乗数（ｙ被乗数）の２ビットを廃棄するという事実によるものである。次の行に関して、この次の行に用いられる乗数（ｙ被乗数）の３ビットのうち最下位ビットが、先行行から用いられる乗数の３ビットのうちの最上位ビットである場合に、オーバーラップが生じる。
【００９６】
並列サブ・ワード乗算を実施するため、その部分積の行が形成中のサブ・ワードの積に対応しないｘ被乗数のビットは、ゼロにセットされる。これは、無修正のＢｏｏｔｈ符号化乗算器の場合と同様、マルチプレクサに対する制御信号を修正することによって、マルチプレクサを用いて実施することが可能である。部分積の行の符号、マルチプレクサに対する追加入力として用いられることも可能である。
【００９７】
以上の解説には、本発明の典型的な方法及び実施例が開示され、説明されているだけである。当該技術の熟練者には明らかなように、本発明は、その精神または本質的な特徴を逸脱することなく、他の特定の形態において具現化することが可能である。従って、本発明の開示は、本発明の範囲を例示することを意図したものであって、それを制限するものではなく、該範囲については、下記に示す実施例に記載されている。
【００９８】
即ち、上記説明した単一プロセッサにおける並列データ処理は下記に示すようにして具現化できる。
【００９９】
［１］複数のオペランドからの第１のビット集合に演算を施す第１のパーティション回路要素と、複数のオペランドからの第２のビット集合に演算を施す第２のパーティション回路要素と、第１のパーティション回路要素と第２のパーティション回路要素の間に結合されて、フル・ワード長のオペランドに演算を施す場合には、第１のパーティション回路要素から第２のパーティション回路要素へのデータ伝搬を可能にし、フル・ワード長オペランドのビット長より短いビット長のオペランドに並列演算を施す場合には、第１のパーティション回路要素から第２のパーティション回路要素へのデータ伝搬を阻止できるようにする第１の選択手段から構成される、処理システム内の機能単位である。
【０１００】
［２］第１のパーティション回路要素が、複数のオペランドの下位ビットに加算演算を実施することと、第２のパーティション回路要素が、複数のオペランドの上位ビットに加算演算を実施することと、第１の選択手段が、フル・ワード長のオペランドに加算を施す場合には、第１のパーティション回路要素から第２のパーティション回路要素への桁上げ伝播を可能にし、サブ・ワード長オペランドに並列加算を施す場合には、第１のパーティション回路要素から第２のパーティション回路要素への桁上げ伝播を阻止できるようにするセレクタである上記［１］に記載の機能単位である。
【０１０１】
［３］複数のオペランドからの第３のビット集合に演算を施す第３のパーティション回路要素と、複数のオペランドからの第４のビット集合に演算を施す第４のパーティション回路要素と、第２のパーティション回路要素と第３のパーティション回路要素の間に結合されて、フル・ワード長のオペランドに演算を施す場合には、第２のパーティション回路要素から第３のパーティション回路要素へのデータ伝搬を可能にし、オペランドに並列演算を施す場合には、第２のパーティション回路要素から第３のパーティション回路要素へのデータ伝搬を阻止できるようにする第２の選択手段と、第３のパーティション回路要素と第４のパーティション回路要素の間に結合されて、フル・ワード長のオペランドに演算を施す場合には、第３のパーティション回路要素から第４のパーティション回路要素へのデータ伝搬を可能にし、オペランドに並列演算を施す場合には、第３のパーティション回路要素から第４のパーティション回路要素へのデータ伝搬を阻止できるようにする第３の選択手段が設けられている上記［１］に記載の機能単位である。
【０１０２】
［４］第１の選択手段に、フル・ワード長オペランドのビット長より短いビット長のオペランドに並列加算を施す場合には、第２のパーティション回路要素に論理０を送り、フル・ワード長オペランドのビット長より短いビット長のオペランドに並列減算を施す場合には、第２のパーティション回路要素に論理１を送る手段が設けられている上記［１］に記載の機能単位である。
【０１０３】
［５］機能単位が、桁上げ先見加算器から構成される上記［１］に記載の機能単位である。
【０１０４】
［６］機能単位が、単一命令に応答して、オペランドに並列演算を実施する上記［１］に記載の機能単位である。
【０１０５】
［７］機能単位が、減算を実施する上記［１］に記載の機能単位である。
【０１０６】
［８］それぞれ、少なくとも１つのオペランドからのビット集合に演算を施す、ハードウェアで実施される複数のパーティションと、それぞれ、複数のパーティションからの２つのパーティション間に結合されて、オペランド・サイズの選択に応答し、２つのパーティション間におけるデータ転送を可能にしたり、阻止できるようにする少なくとも１つの選択手段が設けられた、演算を実行するための第１の演算実施手段から構成される、並列データ処理を可能にするプロセッサである。
【０１０７】
［９］複数のパーティションが、それぞれ、１クォータ・ワード幅である上記［８］に記載のプロセッサである。
【０１０８】
［１０］複数のパーティションが、それぞれ、１ビット幅であることと、プロセッサに、さらに、どの選択手段によって、パーティション間におけるデータ転送を可能にし、また、どの選択手段によって、パーティション間におけるデータ転送を阻止するかを選択するための手段が設けられている上記［８］に記載のプロセッサである。
【０１０９】
［１１］各パーティションに、１ビット加算器が設けられていることと、各選択手段が、２つの１ビット加算器間における桁上げの伝播を促進するか、または、中断するセレクタである上記［１０］に記載のプロセッサである。
【０１１０】
［１２］複数のパーティションが、それぞれ、１ハーフ・ワード幅である上記［８］に記載のプロセッサである。
【０１１１】
［１３］第１の演算実施手段が、シフタである上記［８］に記載のプロセッサである。
【０１１２】
［１４］第１の演算実施手段が、論理演算装置である上記［８］に記載のプロセッサである。
【０１１３】
［１５］さらに、それぞれ、オペランドからのビット集合をシフトする、複数のシフト・レジスタ・パーティションと、それぞれ、複数のシフト・レジスタ・パーティションからの２つのシフト・レジスタ・パーティション間に結合されて、オペランド・サイズの選択に応答し、２つのシフト・レジスタ・パーティション間におけるデータ・ビットのシフトを可能にしたり、阻止したりする、少なくとも１つの選択手段からなる、論理演算装置の入力に結合されたプリ・シフタが設けられている上記［１４］に記載のプロセッサである。
【０１１４】
［１６］各パーティションが、桁上げ先見加算を実施する上記［８］に記載のプロセッサである。
【０１１５】
［１７］各パーティションが、減算を実施する上記［８］に記載のプロセッサである。
【０１１６】
［１８］（ａ）第１のパーティション回路要素において、少なくとも１つのオペランドからの第１のビット集合に演算を施すステップと、（ｂ）第２のパーティション回路要素において、少なくとも１つのオペランドからの第２のビット集合に演算を施すステップと、（ｃ）フル・ワード長オペランドに演算を施す場合、第１のパーティション回路要素からのデータが、第２のパーティション回路要素による結果の計算に影響を及ぼすことを可能にするステップと、（ｄ）オペランドに並列演算を施す場合、第１のパーティション回路要素からのデータが、第２のパーティション回路要素による結果の計算に影響を及ぼさないようにするステップから構成される、単一プロセッサ内における並列データ処理を可能にするための方法である。
【０１１７】
［１９］ステップ（ａ）に、複数のオペランドの下位ビットに加算演算を施すステップが含まれることと、ステップ（ｂ）に、複数のオペランドの上位ビットに加算演算を施すステップが含まれることと、ステップ（ｃ）に、フル・ワード長オペランドに加算を施す場合、第１のパーティション回路要素からの桁上げが、第２のパーティション回路要素による結果の計算に影響を及ぼすことを可能にするステップが含まれることと、ステップ（ｄ）に、オペランドに並列加算を施す場合、第１のパーティション回路要素からの桁上げが、第２のパーティション回路要素による結果の計算に影響を及ぼさないようにするステップが含まれ上記［１８］に記載の方法である。
【０１１８】
［２０］ステップ（ａ）に、複数のオペランドの下位ビットに桁上げ先見加算演算を施すステップが含まれることと、ステップ（ｂ）に、複数のオペランドの上位ビットに桁上げ先見加算演算を施すステップが含まれる上記［１８］に記載の方法である。
【０１１９】
［２１］ステップ（ａ）に、複数のオペランドの下位ビットに減算演算を施すステップが含まれることと、ステップ（ｂ）に、複数のオペランドの上位ビットに減算演算を施すステップが含まれる上記［１８］に記載の方法。
【０１２０】
［２２］ステップ（ａ）に、複数のオペランドの下位ビットに桁上げ伝播加算演算を施すステップが含まれることと、ステップ（ｂ）に、複数のオペランドの上位ビットに桁上げ伝播加算演算を施すステップが含まれることと、ステップ（ｃ）に、フル・ワード長オペランドに加算を実施する場合には、第２のパーティション回路要素への桁上げの伝播を可能にするステップが含まれることと、ステップ（ｄ）に、オペランドに並列加算を実施する場合には、第２のパーティション回路要素への桁上げの伝播を阻止するステップが含まれる上記［１８］に記載の方法である。
【０１２１】
［２３］（ａ）ハードウェアによって実施される複数のパーティションのそれぞれにおいて、少なくとも１つのオペランドからのビット集合に演算を施すステップと、（ｂ）少なくとも１つのフル・ワード長オペランドに演算を施す場合には、データが、複数のパーティション間における境界を越えて、計算に影響を及ぼすことを可能にするステップと、（ｃ）複数のフル・ワード長より短いオペランドを用いて、並列演算を実施する場合には、データが、複数のパーティション間における少なくとも１つの境界を越えて、計算に影響を及ぼさないようにするステップから構成される、単一プロセッサ内における並列データ処理を可能にするための方法である。
【０１２２】
［２４］上記［２３］のステップ（ａ）に、複数のパーティションのそれぞれにおいて、ビット集合に加算演算を施すステップが含まれることと、上記［２３］のステップ（ｂ）に、パーティション間における桁上げの伝播を可能にするステップが含まれることと、上記［２３］のステップ（ｃ）に、並列演算を実施する場合には、複数のパーティション間における少なくとも１つの境界を越えて、桁上げが伝播しないようにするステップが含まれる上記［２３］に記載の方法である。
【０１２３】
［２５］上記［２３］のステップ（ａ）、（ｂ）、及び、（ｃ）の前に、さらに、（ｄ）複数のシフト・レジスタ・パーティションのそれぞれにおいて、ビット集合をシフトするステップと、（ｅ）フル・ワード長より短い複数のオペランドを用いて、並列演算を実施する場合には、データが、複数のシフト・レジスタ・パーティション間における少なくとも１つの境界を越えてシフトしないようにするステップが実施される上記［２３］に記載の方法である。
【０１２４】
［２６］各パーティションに、１ビット加算器が含まれている上記［２３］に記載の方法である。
【０１２５】
［２７］複数のパーティションのそれぞれが、１ハーフ・ワード幅である上記［２３］に記載の方法である。
【０１２６】
［２８］複数のパーティションが、マルチプレクサを利用して実施されるシフタから構成される上記［２３］に記載の方法である。
【０１２７】
［２９］上記［２３］のステップ（ａ）に、複数のパーティションのそれぞれにおいて、ビット集合にシフト演算を施すステップが含まれることと、上記［２３］のステップ（ｂ）に、パーティション間におけるシフトの伝播を可能にするステップが含まれることと、上記［２３］のステップ（ｃ）に、並列演算を実施する場合には、複数のパーティション間における少なくとも１つの境界を越えて、シフトが伝播しないようにするステップが含まれ上記［２３］に記載の方法。
【０１２８】
［３０］部分積を発生するための部分積発生手段と、部分積発生手段に結合されて、部分積を合計し、結果を求めるための部分積和回路要素と、全ワード乗算とサブ・ワード被乗数の並列乗算の一方を選択するための選択手段と、部分積発生手段及び選択手段に結合されて、選択手段がサブ・ワード被乗数の並列乗算を選択するのに応答し、選択された部分積を強制的に新しい値にして、サブ・ワード被乗数の並列乗算が実施されるようにするための部分積選択手段から構成される、全ワード乗算及びサブ・ワード被乗数の並列乗算の両方を実施する乗算器である。
【０１２９】
［３１］選択手段がサブ・ワード被乗数の並列乗算を選択するのに応答して、部分積選択手段が、選択された部分積の値を強制的にゼロにする上記［３０］に記載の乗算器。
【０１３０】
［３２］部分積発生手段が、論理ＡＮＤゲート・アレイから構成され、論理ＡＮＤゲート・アレイにおける各論理ＡＮＤゲート毎に、部分積を発生する上記［３１］に記載の乗算器。
【０１３１】
［３３］部分積選択手段が、論理ＡＮＤゲートの少なくとも一部に対する第３の入力から構成される上記［３２］に記載の乗算器。
【０１３２】
［３４］乗算器が全ワード乗算を実施する場合には、部分積選択手段が、部分積の値を強制的にゼロにすることはないという上記［３１］に記載の乗算器である。
【０１３３】
［３５］乗算器が、Ｂｏｏｔｈ符号化乗算器である上記［３０］に記載の乗算器である。
【０１３４】
［３６］単一のハードウェア乗算器を利用して、全ワード被乗数の乗算及びサブ・ワード被乗数の並列乗算の両方を実施するための方法において、（ａ）部分積を発生するステップと、（ｂ）サブ・ワード被乗数の並列乗算を実施する選択に応答し、選択された部分積を強制的に新しい値にするステップと、（ｃ）部分積和回路要素を利用して、部分積を合計し、結果を求めるステップから構成される、単一のハードウェア乗算器を利用して、全ワード被乗数の乗算及びサブ・ワード被乗数の並列乗算の両方を実施するための方法である。
【０１３５】
［３７］上記［３６］のステップ（ｂ）に、サブ・ワード被乗数の並列乗算を行う選択に応答し、選択された部分積の値を強制的にゼロにするステップが含まれる上記［３６］に記載の乗算方法である。
【０１３６】
［３８］上記［３６］のステップ（ａ）が、論理ＡＮＤゲート・アレイを利用して、実施されることと、論理ＡＮＤゲートにおける各論理ＡＮＤゲート毎に、部分積を発生する上記［３７］に記載の乗算方法である。
【０１３７】
［３９］上記［３６］のステップ（ｂ）において、選択された部分積の値を強制的にゼロにするステップが、論理ＡＮＤゲートの一部に対する入力に論理０を配置することによって実施される上記［３８］に記載の乗算方法である。
【０１３８】
［４０］上記［３６］のステップ（ｂ）において、乗算器が全ワード乗算を実施している間、部分積の値を強制的にゼロにすることはないという上記［３７］に記載の乗算方法である。
【０１３９】
【発明の効果】
上記説明したように本発明に係る単一プロセッサにおける並列デ−タ処理は、第１のパーティション回路要素と、第２のパーティション回路要素と、第１のパーティション回路要素と第２のパーティション回路要素の間に結合されて、フル・ワード長のオペランドに演算を施す場合には、第１のパーティション回路要素から第２のパーティション回路要素へのデータ伝搬を可能にし、フル・ワード長オペランドのビット長より短いビット長のオペランドに並列演算を施す場合には、第１のパーティション回路要素から第２のパーティション回路要素へのデータ伝搬を阻止できるようにする第１の選択手段から構成したことにより、オペランドがフル・ワ−ド長より短い場合における並列処理演算を容易化することができ、単一プロセッサ・システムの性能を大幅に高めることができると共に、並列処理の低コスト化を図り、プロセッサ・チップにおけるシリコン・スペ−スまたは設計の複雑さにコストを費やすことなく、デ−タ並列処理を利用可能な計算に関する性能を大幅に向上させるとができると云う極めて優れた効果を奏する。
【図面の簡単な説明】
【図１】本発明の望ましい実施例に基づく、プロセッサ内における演算実行データ経路の略ブロック図である。
【図２】本発明の望ましい実施例に基づく、図１に示す論理演算装置（ＡＬＵ）の略ブロック図である。
【図３】本発明の望ましい実施例に基づく、図２に示すＡＬＵ内における２の歩数加算機の実施例を示す図である。
【図４】本発明の望ましい代替実施例に基づく、図１に示す論理演算装置（ＡＬＵ）の代替略ブロック図である。
【図５】本発明の望ましい代替実施例に基づく、図１に示す論理演算装置（ＡＬＵ）のもう１つの代替略ブロック図である。
【図６】本発明の望ましい代替実施例に基づく、図１にシフタの実施例を示す図である。
【図７】先行技術による乗算器を示す図である。
【図８】本発明の望ましい実施例に基づいて実施される乗算器を示す図である。
【図９】本発明の望ましい実施例に基づいて実施される乗算器を示す図である。
【図１０】本発明の望ましい代替実施例に基づく、図１に示すＡＬＵ内における桁上げ先見加算機の実施例を示す図である。
【図１１】本発明の望ましい代替実施例に基づく、命令のレイアウトの一例を示す図である。
【符号の説明】
２１    ソース・バス
２３    結果バス
２５    汎用レジスタ
２６    ＡＬＵ
２７    プリ・シフタ
２８    補数回路要素
２９    シフタ
５０、８０、９０、１００、１２０、１３０、１４０、１５０、１７３、１７４    セレクタ
６０４６０    ハーフ加算器
６１、６５、６６、６９、４６５、４６６、４６９    フル加算器
２２０、３２０    部分積和回路
３０１〜３１６  論理ＡＮＤゲート
４７０    桁上げ先見回路
【図１】
0003578502.tif 000019
【図２】
0003578502.tif 000020
【図３】
0003578502.tif 000021
【図４】
0003578502.tif 000022
【図５】
0003578502.tif 000023
【図６】
0003578502.tif 000024
【図７】
0003578502.tif 000025
【図８】
0003578502.tif 000026
【図９】
0003578502.tif 000027
【図１０】
0003578502.tif 000028
【図１１】
0003578502.tif 000029