(57)【特許請求の範囲】
【請求項１】
シフトおよび掛算演算を実行する装置（５０）であって：
第１オペランドを受信する第１レジスタ（５１）；
第２オペランドを受信する第２レジスタ（５２）；
前記第２レジスタ（５２）に結合された入力と、シフト方向信号を受信する第１制御入力と、モード信号を受信する第２制御入力と、出力とを有するリマッピング回路（５４）であって、前記モード信号が掛算演算またはシフト演算を示すと、それぞれ、それに応答してその出力に前記第２オペランドまたはリマップ済み信号のいずれかを選択的に提供するリマッピング回路（５４）であって、
前記シフト方向信号に応答して前記第２オペランドの選択されたビットを条件付きで反転して、被修正シフト回数信号を提供するインバータ（６０）；および
前記被修正シフト回数信号を受信する入力と、前記リマップ済み信号を提供する出力とを有するデコーダ（６１）；を含む前記リマッピング回路（５４）；および
前記第１レジスタ（５１）に結合された第１入力と、前記リマッピング回路（５４）の前記出力に結合された第２入力と、前記第１および第２入力の積を提供する出力とを有する掛算器（５５）であって、前記積が、前記掛算演算中の前記第１および第２オペランドの積、または、前記シフト演算中の前記第１オペランドと前記リマップ済み信号との積に等しい第１シフト結果のいずれか一方である掛算器（５５）；
によって構成されることを特徴とする装置（５０）。
【請求項２】
多重ビット・シフト装置（５０）を有するデータ・プロセッサ（４０）であって：
命令を取り出すアドレス（４６）およびデータ（４５）経路；
前記データ経路（４５）に結合され、前記データ経路（４５）を介してシフトおよび掛算命令を含む複数の命令を受信し、前記複数の命令に応答して複数の制御信号を提供する命令デコーダ（４１）であって、シフト命令に応答してシフト演算を実行することか、または掛算命令に応答して掛算演算を実行することのいずれかを示し、前記シフト命令に応答してシフト方向信号を提供する前記命令デコーダ（４１）；および
前記命令デコーダ（４１）に結合された演算論理ユニット（５０）であって：
第１オペランドを受信する第１レジスタ（５１）；
第２オペランドを受信する第２レジスタ（５２）；
前記第２レジスタ（５２）に結合された入力と、シフト方向信号を受信する第１制御入力と、前記モード信号を受信する第２制御入力と、出力とを有するリマッピング回路（５４）であって、前記モード信号が前記掛算命令または前記シフト命令を示すと、それぞれ、それに応答してその出力に前記第２オペランドまたはリマップ済み信号のいずれかを選択的に提供するリマッピング回路（５４）であって、
前記シフト方向信号に応答して前記第２オペランドの選択されたビットを条件付きで反転して、被修正シフト回数信号を提供するインバータ（６０）；および
前記被修正シフト回数信号を受信する入力と、前記リマップ済み信号を提供するデコーダ（６１）；を含む前記リマッピング回路（５４）；および
前記第１レジスタ（５１）に結合された第１入力と、前記リマッピング回路（５４）の前記出力に結合された第２入力と、前記第１および第２入力の積を提供する出力とを有する掛算器（５５）であって、前記積が、前記掛算演算中の前記第１および第２オペランドの積、または、前記シフト演算中の第１シフト結果のいずれか一方である掛算器（５５）；
によって構成される演算論理ユニット（５０）；
によって構成されることを特徴とするデータ・プロセッサ（４０）。
【請求項３】
シフト・オペランドを第１入力として受信する段階；
シフト回数を第２入力として受信する段階であって、該シフト回数は前記シフト・オペランドとは別のオペランドから決定される、段階；
シフト方向信号の決定により前記シフト回数をリマップしてリマップ済み信号を提供し、前記リマップ済み信号は前記シフト方向信号の決定により前記シフト回数から解読される段階であって、
前記シフト方向信号に応答して前記シフト回数の選択されたビットを選択的に反転して、被修正シフト回数信号を提供する段階；および
前記被修正シフト回数信号をデコードして、前記リマップ済み信号を提供する段階を含む前記シフト回数をリマップする段階；
前記シフト・オペランドを掛算器回路（５５）の第１入力に提供する段階；
前記リマップ済み信号を前記掛算器回路（５５）の第２入力に提供する段階；および
前記掛算器回路（５５）の出力をシフト結果として提供する段階；
によって構成されることを特徴とする多重ビット・シフト方法。
【請求項４】
シフト・オペランドを受信する段階；
シフト回数ｎを受信する段階；
シフト方向信号を受信する段階；
前記シフト方向信号が第１方向を示す場合に、前記シフト回数ｎを２ｋ−ｎに等しい第１リマップ済み信号にリマップする段階で、このときｋは前記シフト・オペランドのビット数から１を減じた値である段階であって、
前記シフト方向信号に応答して前記シフト回数ｎのビットを反転して、被修正シフト回数信号を提供する段階；および；
前記被修正シフト回数信号をデコードして、前記第１リマップ済み信号を提供する段階を含む、前記第１リマップ済み信号にリマップする段階；
前記シフト方向信号が第２方向を示す場合に、前記シフト回数ｎをｎがゼロでない場合には２ｎ−１に等しく、ｎがゼロの場合にはゼロに等しい第２リマップ済み信号にリマップする段階であって、
前記シフト方向信号に応答して前記シフト回数ｎのビットをデコードして、前記第２リマップ済み信号を提供することを含む、前記第２リマップ済み信号にリマップする段階；
迂回が選択された場合に前記シフト回数のリマップを迂回する段階；
前記シフト・オペランドを掛算器回路（５５）の第１入力に提供する段階；
前記シフト方向信号が前記第１方向を示す場合には前記第１リマップ済み信号を、前記シフト方向信号が前記第２方向を示す場合には前記第２リマップ済み信号を、前記掛算器回路（５５）の第２入力に提供する段階；および
前記掛算器回路（５５）の出力を第１シフト結果として提供し、それによって、専用シフト回路構成を必要とせずに前記掛算器回路（５５）を通じて遅延時間より多少長い時間量内に前記シフト・オペランドのシフトが行われる段階；
によって構成されることを特徴とする多重ビット・シフト方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、一般にデータ処理システムに関し、さらに詳しくは、シフト（桁送り）機能をもつ演算回路に関する。
【０００２】
【従来の技術および発明が解決しようとする課題】
データ・プロセッサは、その命令セットを実行するために種々のシフト演算を必要とする。シフト演算には、左シフト，右シフトおよび回転がある。シフトは、算術的な場合と論理的な場合とがあり、それによってオペランドのいずれかの端にあるビットがどのように処理されるかが決まる。各シフトまたは回転演算は、可変シフト量を有する。どのビットが特定のビット位置にシフトするかは、シフト演算の種類によって決まる。あるオペランドにシフトと回転演算を組み込むために回路構成を設計する際には、どちらかを妥協しなければならないのが普通である。演算を実行するために回路構成に用いられる集積回路の面積が、演算性能に影響を及ぼし、性能は演算を完了するためのクロック数で測る。
【０００３】
ある例では、バレル・シフタ（barrel shifter）が、あるオペランドについて全マトリクスの演算を実行する。たとえば、このバレル・シフタが３２ビット幅であるとすると、３２ビットのそれぞれが他の３１ビットのそれぞれに選択的に直接結合される。ある演算に関してどのビット群が結合するかは、実行される演算のシフト量と方向によって決まる。バレル・シフタは、シフタの性能を最大にするが、消費スペースも最大である。別の極端な例では、簡単なシフタが、一度に１つのビットしかシフトしない。より多くの量のシフトを実行するには、指定された量に達するまで制御部が連続して１ビットのシフト演算を用いなければならない。このようなシフタは、バレル・シフタよりはるかに少ない面積しかとらないが、性能は大幅に劣る。米国特許第５，０９９，４４５号においてChas F. StudorおよびRobert Skruhakが中間的なシフタを開示している。このシフタは、左シフトおよび右シフトを１ビットずつ行うだけでなく、任意の数、たとえば４ビットずつ行って、寸法と速度との折り合いをつけている。しかし、面積と速度が両立しないことは、データ・プロセッサ設計の大きな問題として残っている。  G. Wolrich他は、「Apparatus and Method for Performing a Shift Operation in a Multiplier Array Circuit 」と題した米国特許第４，８８７，２３２号において、加算または減算前に浮動小数点システムのオペランドを調整するシフト装置を開示している。Wolrich 他は、既存のアレイ掛算器を利用して、バレル・シフタなどの追加のシフタを用いずに浮動小数点演算に必要とされる速度で、このデノーマリゼーション・シフトを実行する。Wolrich 他により開示された装置は、デノーマリゼーション・シフトにしか用いられないので、右シフトをプログラミング可能に実行するに過ぎない。しかし、消費する回路面積が非常に小さく、しかも必要とされるすべての演算を実行することのできるシフト装置が必要とされる。
【０００４】
【発明を解決する方法】
従って、本発明は、１つの形態では第１および第２レジスタ，リマッピング（再配置）回路および掛算器によって構成される多重ビット・シフト装置を提供する。第１レジスタは第１オペランドを受信し、第２レジスタが第２オペランドを受信する。リマッピング回路は、第２レジスタに結合された入力と、シフト方向信号を受信する第１制御入力と、モード信号を受信する第２制御入力と、出力とを有する。リマッピング回路は、掛算演算またはシフト演算を示すモード信号に応答して、その出力にそれぞれ第２オペランドまたはリマップ済み信号のいずれかを選択的に提供する。リマップ済み信号は、シフト方向信号の決定に従って第２オペランドから解読される。掛算器は、第１レジスタに結合された第１入力と、リマッピング回路の出力に結合された第２入力と、その第１および第２入力の積を提供する出力とを有する。この積は、掛算演算中の第１および第２オペランドの積、またはシフト演算中の第１オペランドとリマップ済み信号の積に等しい第１シフト結果のいずれかである。
【０００５】
本発明は、別の形態で、多重ビット・シフト装置を有するデータ・プロセッサを提供する。このデータ・プロセッサは、アドレスおよびデータ経路と、命令デコーダと、演算論理ユニットとを有する。命令デコーダは、命令を取り込むためのアドレスおよびデータ経路に結合され、シフトおよび掛算命令を含む複数の命令に応答して複数の制御信号を提供する。命令デコーダは、シフト命令に応答して実行するシフト演算か、または掛算命令に応答して実行する掛算演算のいずれかを示すモード信号を提供する。命令デコーダは、また、シフト命令に応答してシフト方向信号も提供する。演算論理ユニットは、命令デコーダに結合され、第１および第２レジスタと、リマッピング回路と、掛算器とを有する。第１レジスタは第１オペランドを受信し、第２レジスタが第２オペランドを受信する。リマッピング回路は、第２レジスタに結合された入力と、シフト方向信号を受信する第１制御入力と、モード信号を受信する第２制御入力と、出力とを有する。リマッピング回路は、掛算演算またはシフト演算を示すモード信号に応答して、その出力にそれぞれ第２オペランドまたはリマップ済み信号のいずれかを選択的に提供する。リマップ済み信号は、シフト方向信号の決定に従って第２オペランドから解読される。掛算器は、第１レジスタに結合された第１入力と、リマッピング回路の出力に結合された第２入力と、その第１および第２入力の積を提供する出力とを有する。この積は、掛算演算中の第１および第２オペランドの積、またはシフト演算中の第１オペランドとリマップ済み信号の積に等しい第１シフト結果のいずれかである。
【０００６】
さらに別の形態で、本発明は多重ビット・シフト方法を提供する。シフトされるオペランドが第１オペランドとして受信され、シフト回数が第２オペランドとして受信される。シフト回数は、シフト方向信号の決定に従ってリマップされて、リマップ済み信号となる。リマップ済み信号は、シフト方向信号の決定に従ってシフト回数から解読される。シフトされるオペランドが掛算器の第１入力に送られる。リマップ済み信号は掛算器の第２入力に送られる。掛算器の出力は、第１シフト結果として提供される。
【０００７】
これらとその他の特徴および利点は、以下の詳細な説明と添付の図面とによって、さらに明確に理解頂けるだろう。
【０００８】
【実施例】
図１は、従来の技術による演算論理ユニット（ＡＬＵ）２０のブロック図である。ＡＬＵ２０は、オペランドを格納するレジスタ２１，２２を有する。ＡＬＵ２０は、掛算命令中にこの２つのオペランドを受信するアレイ掛算器２３を有する。この２つのオペランドが掛算器２３に提示されると、それぞれ「乗数（MULTIPLIER）」と「被乗数（MULTIPLICAND）」と標識が付けられる。アレイ掛算器２３は、改良形ブースの掛算器（modified Booth's multiplier ），ウォレス・ツリー（Wallace Tree）などの従来のアレイ掛算器である。改良形ブースの掛算器の場合には、一連の改良形ブースの再符号化装置（recoder ）（図示せず）が対応する３個の乗数ビットのグループを受信し、それを再符号化してアレイ掛算器２３のアレイに信号を提供する。次に被乗数信号がアレイ内のマルチプレクサに送られて、従来の改良型ブースの再符号化による部分積、すなわち被乗数の０倍，±１倍および±２倍を選択する。次にマルチプレクサの出力が総計されて最終和となる。これは乗数と被乗数との積である。
【０００９】
アレイ掛算器２３は、この積を出力信号として累積加算器（accumulation adder）２４に送る。累積加算器２４は、前の和を受け取り、それを積に加算して、その和を出力としてレジスタ２５に送る。レジスタ２５は読み書きレジスタで、累積加算器２４の入力に接続される出力を有する。これによりＡＬＵ２０は、掛算および累積（ＭＡＣ：multiply and accumulate ）命令を行うことができる。ＡＬＵ２０には、シフト命令を実行するためのバレル・シフタ２６も含まれる。バレル・シフタ２６は、レジスタ２１の出力に接続され、「シフト・オペランド（SHIFT OPERAND ）」と標識がついた数量を受信する第１入力と、レジスタ２２の出力に接続され、「シフト回数（SHIFT COUNT ）」と標識がついた数量を受信する第２入力と、その出力として「シフト済み出力（SHIFTED OUTPUT）」と標識のついた数量を提供する出力とを有する。バレル・シフタ２６は、シフト演算の種類を決定する他の制御信号（図示せず）も受信する。
【００１０】
バレル・シフタ２６は、シフト・オペランド内の任意のビットをシフト演算の種類とシフト回数とによって決定される他の任意のビット位置にシフトすることができる。バレル・シフタ２６は小さい伝播遅延しか必要とせず、これはデータ・プロセッサの１クロック・サイクル以内であるのが普通である。しかし、このような汎用性を得るために、バレル・シフタ２６には各ビット位置と１つおきのビット位置との間に選択的接続を形成するトランジスタの大きなアレイが含まれる。これは多数のトランジスタを必要とするので、バレル・シフタ２６は大量の集積回路面積と、かなりの量の電力とを消費する。余分な回路面積と電力の経費をかけずにバレル・シフタ２６の高速を実現することが望ましい。
【００１１】
図２は、本発明によるデータ・プロセッサ４０を有するデータ処理システム３０を示す。データ処理システム３０は、プログラムおよびデータ要素を格納するメモリ３１を有し、ランダム・アクセス・メモリ（ＲＡＭ）と不揮発性メモリの両方を有することがある。メモリ３１には、適宜にアドレス，制御およびデータ信号をメモリ３１内外に伝える汎用バス３２を通じてアクセスする。
【００１２】
データ・プロセッサ４０は、バス３２を介してメモリ３１に接続され、一般に命令ラッチ・デコーダ４１と、制御レジスタ・ブロック４２と、バス・コントローラ４３と、ＡＬＵおよびレジスタ・ブロック５０−−以下単にＡＬＵ５０と呼ぶ−−とを有する。アドレス発生ユニット（ＡＧＵ），周辺機器などのその他の従来のデータ・プロセッサ・ブロックは、本発明の理解には必要ではなく、当技術では周知のものであるので、図２では省略されている。バス・コントローラ４３は、制御信号４４をバス３２に送ることによりメモリ３１に格納されているプログラムにアクセスする。命令を取り出す間、制御レジスタ４２が命令取り出しのためのプログラム・カウンタ・アドレスなどのアドレスを双方向信号線４６を介して提供する。これに応答して、メモリ３１は、アクセスされたアドレスに格納されているデータ要素を提供する。命令ラッチ・デコーダ４１は、入力データ経路４５を介してこのデータ要素を受信する。次に命令ラッチ・デコーダ４１は、この命令を解読して、対応する制御信号をデータ・プロセッサ４０の他のブロックに送る。図示される実施例においては、命令ラッチ・デコーダ４１は、命令の種類，関与するレジスタ，メモリ・アドレス・モードなどを決定する選択されたビット・フィールドを直接的に解読することによって、データ・プロセッサ４０の命令セットに対応する。他の実施例では、命令ラッチ・デコーダ４１は、命令を実行する内部マイクロコード・ルーチンの開始アドレスを含む命令を受信することもある。
【００１３】
命令ラッチ・デコーダ４１は、受信された命令を実行するために適切な制御信号を提供する。制御レジスタ・ブロック４２は、これらの制御信号の１セットを受信する。このブロックには、プログラム・カウンタなど、データ・プロセッサ４０の制御に用いられるレジスタが含まれる。制御レジスタ・ブロック４２は、バス３２との間にアドレス信号を提供しデータを伝える、バス３２に対する双方向接続４６を有する。制御レジスタ・ブロック４２は、制御信号もバス３２に提供する。バス・コントローラ４３は、命令ラッチ・デコーダ４１から別のセットの制御信号を受信し、命令の流れにより命令の取り出し，データの格納および検索などを行うための制御信号４４をバス３２に提供する。ＡＬＵ５０は、命令ラッチ・デコーダ４１からさらに別のセットの制御信号を受信し、命令実行のためのレジスタ・セットを有する。ＡＬＵ５０は、バス３２との間にデータを伝え、バス３２にアドレスを提供するための、バス３２に対する接続４７を有する。ＡＬＵ５０は、データ・プロセッサ４０の命令セットに対応するために複数の演算を実行するが、これには加算と、減算と、掛算と、掛算および累積（ＭＡＣ）と、左右のシフト命令が含まれる。ここでは、左シフトはビットをより上位のビット位置に移動する演算を意味し、右シフトは、ビットをより下位のビット位置に移動することを意味する。
【００１４】
一般に、データ・プロセッサ４０は、その命令セットを実行するために必要な回路面積を最小限に抑えることが望ましい。データ・プロセッサ４０の最大のブロックの１つはＡＬＵ５０であり、これは命令セットに対応する命令に応答して演算を実行するための専用ハードウェアを有する。しかし、ＡＬＵ５０は、バレル・シフタ２６などの専用シフト回路の必要をなくすることによって、図１のＡＬＵ２０よりも小さい面積しか必要としない。専用シフト回路の必要をなくするために、命令ラッチ・デコーダ４１は、ＡＬＵ５０内の他の既存のハードウェア内にある、プログラミング可能な多重ビットの左右シフトを実行するための制御信号をＡＬＵ５０に提供する。
【００１５】
この機能は、図２のＡＬＵ５０の１つの実施例をブロック図に示す図３を参照すると、さらによく判る。ＡＬＵおよびレジスタ・ブロック５０には、入力データを受信する２つの入力レジスタ５１，５２が含まれる。入力レジスタ５１は、掛算演算中は「被乗数」と呼ばれるデータ要素を格納し、シフト演算中は「シフト・オペランド」と呼ばれるデータ要素を格納する。入力レジスタ５２は、掛算演算中は「乗数」と呼ばれるデータ要素を格納し、シフト演算中は「シフト回数」と呼ばれるデータ要素を格納する。図示される実施例においては、ＡＬＵ５０は１６ビットのデータ語で動作するので、レジスタ５１，５２はそれぞれ１６ビットのレジスタである。
【００１６】
レジスタ５２の１６ビット出力は、リマッピング回路５４の入力に送られる。リマッピング回路５４は、「左（LEFT）」，「右（RIGHT ）」，「迂回（BYPASS）」および「シフト（SHIFT ）」と標識がついた制御信号に応答して選択的に動作状態になる。信号左，右は共にシフト方向を示し、ただ１つの信号により表現することもできる。シフト命令に応答して、図２の命令ラッチ・デコーダ４１は、信号左を高論理に能動化して左シフトを示し、信号右を高論理に能動化して右シフトを示す。シフト以外の命令では、命令ラッチ・デコーダ４１は信号迂回を高論理に能動化して、リマッピング回路５４にリマッピングなしに入力を出力に伝えさせる、すなわちリマッピング機能を迂回させる。シフト命令中は、信号迂回は低論理で非能動になる。このように、信号迂回はＡＬＵ５０の動作モードを示す。リマッピング回路５４は、シフト命令中にシフト回数がゼロに等しくなる条件の検出も行い、この条件を検出するとそれに応答して「シフト０」と標識のついた出力信号を提供する。
【００１７】
掛算器５５は、１６ｘ１６アレイ掛算器である。特に、掛算器５５は改良形ブースの掛算器で、桁上げ／セーブ（carry/save）加算器ツリーを通じて部分積を総計する。しかし、ウォレス・ツリーを通じて部分積を総計する掛算器など、他の種類のアレイ掛算器も可能である。重要なことは、掛算器５５が相対的に高速であることである。図示される例では、掛算器５５はデータ処理システム３０の１クロック・サイクル内で、第１入力と第２入力の積を提供する。掛算器５５は、レジスタ５１の出力端子に結合された１６ビット被乗数入力端子と、リマッピング回路５４の出力端子に結合された１６ビット乗数入力端子と、信号シフト０のための制御入力端子と、乗数および被乗数入力の積を提供する３２ビット出力端子とを有する。
【００１８】
信号シフト０は、次のようにして、掛算器５５に被乗数入力を３２ビット出力端子に伝えさせる。２個の１６ビットの２の補数を掛算するとその直接的な結果は、２個の符号ビットと３０個の仮数ビットをもつ３２ビットの数である。しかし、掛算器５５は、最上位ビット位置に１つの符号ビットしかもたず、その後に３０個の仮数ビットが続き、最下位ビット位置にゼロをもつ。そのため、信号シフト０に応答して、被乗数入力の１６個のビットは、ビット０がゼロに設定されてビット位置１６：１に整合される。
【００１９】
図示されるデータ・プロセッサは、デジタル信号プロセッサ（ＤＳＰ：digital signal processor）である。有限衝撃応答（ＦＩＲ：finite impulse response ）フィルタ，無限衝撃応答（ＩＩＲ：infinite impulse response ）フィルタ，高速フーリエ変換（ＦＦＴ：fast Fourier Transform）などの信号処理アルゴリズムにおいては、ハードウェアを用いて掛算および累積（ＭＡＣ）を実行する機能をもつことが有用である。この目的のために、ＡＬＵ５０には、このような命令の積の総計を効率的に累積する累積加算器５６が含まれる。累積加算器５６は、掛算器５５の出力端子に接続され、第１加算オペランドを受信する３２ビット入力端子と、第２加算オペランドを受信する第２の４０ビット入力端子と、加算器の４０ビットの総計を提供する出力端子とを有する。この総計は、シフト・モードでは第１シフト結果を表し、掛算モードでは累積された積（被累積積）を表す。３２ビットで表すことのできない累積に対応するために、累積加算器５６は、オーバーフロー（あふれ）に対する保護ビットとして機能する８個の追加ビットを最上位ビット位置に配している。
【００２０】
出力シフタ５７は、累積加算器５６の出力端子に接続された４０ビット入力端子と、信号左，シフトおよびシフト０を受信する制御入力端子と、掛算またはＭＡＣ演算の場合は「被累積積（ACCUMULATED PRODUCT ）」と標識のついたデータ要素を提供するか、あるいはシフト演算中は「シフト結果（SHIFT RESULT）」と標識のついた第２シフト結果を提供する４０ビット出力端子とを有する。レジスタ５８は、出力シフタ５７の出力端子に接続された入力端子と、累積加算器５６の第２入力端子に接続された出力端子とを有する。図３では、図２のバス３２に対するその他の接続部を省いてある。本発明によるシフト演算中は、累積加算器５６の出力のビット３１〜１６が右シフトの結果を格納し、ビット１５〜０が左シフトの結果を格納する。出力シフタ５７は、さらに、固定１５ビットの左シフトを実行して、シフト結果を通常の位置、すなわちレジスタ５８のビット３１：１６に整合する。しかし、他の実施例においては、出力シフタ５７を省いてもよい。
【００２１】
ＡＬＵ５０は、アレイ掛算器５５を用いて完全にプログラミング可能な左および右のシフト演算を実行する。これらのシフト演算は、掛算と同じ速度で実行されるので、バレル・シフタとほぼ同じ速度で実行される。しかし、アレイ掛算器５５は、掛算命令を実行するためにすでに存在するので、ＡＬＵ５０には専用バレル・シフタの必要がない。そのため、データ・プロセッサ４０はバレル・シフタをもつ既知のデータ・プロセッサよりも小さい回路面積しか必要としない。あるいは、逆に、データ・プロセッサ４０は、高速シフト回路構成をもたない他のデータ・プロセッサよりも高速でシフト演算を実行する。
【００２２】
図４は、図３のリマッピング回路５４をブロック図に示す。リマッピング回路５４には、一般に４ビットの排他的ＯＲ（排他的論理和）ブロック６０と、４対１６デコーダ６１と、３対１マルチプレクサ６２と、ゼロ検出回路６３とが含まれる。排他的ＯＲブロック６０は、図３の乗数レジスタ５２の出力の４個の最下位ビット位置に対応する４個の排他的ＯＲゲートを有する。シフト演算の場合は、これらの４個の最下位ビット位置がシフト演算のシフト回数を形成する。４個の排他的ＯＲゲートのそれぞれは、これらの４個の最下位ビットのうちの対応する１つのビットを乗数レジスタ５２から受信する第１入力と、制御信号右を受信する第２入力と、出力端子とを有する。排他的ＯＲの機能は、信号右の値に基づく制御反転と等しい。右が高論理で能動化されると（右シフト）、４ビットの排他的ＯＲブロック６０が乗数ビットを反転する。信号右が低論理で非能動化されると（左シフト）、４ビットの排他的ＯＲブロック６０は、シフト回数ビットを反転させずに伝える。
【００２３】
デコーダ６１は、４ビットの被修正シフト回数（CORRECTED SHIFT COUNT ）を解読して１６ビットの「被解読信号（DECODED SIGNAL）」とする。被解読信号は、被修正シフト回数の値に対応する二進数１である１ビット位置しかもたない。その他のすべてのビットは二進数０である。マルチプレクサ６２は、１６ビットの被解読信号を受信する第１入力と、１ビット位置だけ右にシフトされた被解読信号を受信する第２入力と、レジスタ５２の出力に結合された第３入力と、制御信号右，左，迂回を受信する制御入力と、１６ビットの「リマップ済み信号（REMAPPED SIGNAL ）」を提供する出力とを有する。信号右，左，迂回は、それぞれマルチプレクサ６２の第１，第２または第３入力を選択する。１６ビットの数量を１ビットだけ右にシフトするということは、１５個の最上位ビットを隣接する下位ビット位置にずらして、符号ビットを最上位ビット位置にコピーすることを意味する。このようにして、図３のＡＬＵ５０は演算シフト命令を支援する。他の実施例においては、本発明によるＡＬＵで、空になったビット位置に右シフトのゼロを埋めることにより論理シフトに対応することもできる。算術左シフトの場合も、論理左シフトの場合も、空になったビット位置はゼロで埋められることに留意されたい。ゼロ検出回路６３は、信号シフトに応答して動作し、４ビットのシフト回数内のすべてのゼロを検出して、それに応答して信号シフト０を能動化する。
【００２４】
図２の命令ラッチ・デコーダ４１は、シフト命令に応答して低論理で信号迂回を非能動化させ、その他の場合には信号迂回を高論理で能動化する。命令ラッチ・デコーダ４１は、右シフト命令に応答して信号右を高論理で能動化し、その他の場合には信号右を低論理で非能動状態のままにする。命令ラッチ・デコーダ４１は、左シフト命令に応答して信号左を高論理で能動化し、その他の場合には信号左を低論理で非能動状態のままにする。
【００２５】
リマッピング回路５４を用いて入力シフト回数をリマップすることにより、ＡＬＵ５０はバレル・シフタなどの専用シフト回路を用いずに左シフトにも右シフトにも掛算器５５を用いることができるようにする。このように、ＡＬＵ５０は回路面積をほとんど追加せずに、必要なすべてのシフトを実行する。
【００２６】
右シフトおよび左シフトに関するリマッピング回路５４の動作を、それぞれ表１と２に説明する。ただし＄符号は、十六進数の数を表す。
【００２７】
【表１】
0003756967.tif 000002
【００２８】
【表２】
0003756967.tif 000003
左および右シフトに関する数値の例は、リマッピング回路５４の動作を理解するために有用である。図３，４を参照して、＄８４２１のシフト・オペランド上で２の右シフト（シフト回数＝２）を行う場合を考える。正しいシフト結果は、＄Ｅ１０８である。レジスタ５１は、その出力において＄８４２１をシフト・オペランドとして掛算器５５の被乗数入力に送る。レジスタ５２は、レジスタ５２の出力の４個のＬＳＢについて符号化されたシフト回数２を二進数００１０としてリマッピング回路５４の入力に送る。これは右シフトであるので、信号右が能動になり、信号左と迂回は非能動である。４ビット排他的ＯＲ回路６０が各ビットを反転させ、被修正シフト回数１３または二進数１１０１をデコーダ６１の入力に送る。次にデコーダ６１が、被解読信号として二進数００１０００００００００００００（＄２０００）の値を提供する。信号右の能動化に応答して、マルチプレクサ６２がその第２入力を選択し、＄４０００の値をリマップ済み信号として掛算器５５の乗数入力に送る。掛算器５５は、＄８４２１に＄４０００を掛けて、＄Ｅ１０８００００の３２ビット出力を提供し、これは累積加算器５６で＄ＦＦＥ１０８００００の４０ビット値になる。出力シフタ５７は、信号シフトが能動であり信号シフト０と左が非能動であるのに応答して、変更しないで入力を出力に伝える。このようにして、＄Ｅ１０８の値はレジスタ５８のビット３１：１６に整合され、これが予想されるシフト結果となる。
【００２９】
次に、＄８４２１のシフト・オペランドに関する２の左シフト（シフト回数＝２）の場合を考える。正しいシフト結果は、＄１０８４である。レジスタ５１は、その出力にシフト・オペランドとして＄８４２１を掛算器５５の被乗数入力に送る。レジスタ５２は、レジスタ５２の出力の４個のＬＳＢについて符号化されたシフト回数２を二進数００１０としてリマッピング回路５４の入力に送る。これは左シフトであるので、信号左が能動になり、信号右と迂回は非能動である。４ビット排他的ＯＲ回路６０が各ビットを改変せずに伝えて、被修正シフト回数２または二進数００１０をデコーダ６１の入力に送る。次にデコーダ６１が、被解読信号として二進数０００００００００００００１００（＄０００４）の値を提供する。信号左の能動化に応答して、マルチプレクサ６２がその第２入力を選択し、＄０００２の値をリマップ済み信号として掛算器５５の乗数入力に送る。掛算器５５は、＄８４２１に＄０００２を掛けて、＄０００２１０８４の３２ビット出力を提供し、これは累積加算器５６で＄０００００２１０８４の４０ビット値になる。出力シフタ５７は、信号シフトと左が能動であり信号シフト０が非能動であるのに応答して、この値を１５ビット左にずらす。このようにして、＄１０８４の値は、レジスタ５８のビット３１：１６に整合され、これが予想されるシフト結果となる。
【００３０】
最後に、＄８４２１のシフト・オペランドに関して０の左シフト（シフト回数＝０）の場合を考える。正しいシフト結果は、＄８４２１である。レジスタ５１は、その出力にシフト・オペランドとして＄８４２１を掛算器５５の被乗数入力に送る。レジスタ５２は、レジスタ５２の出力の４個のＬＳＢについて符号化されたシフト回数０を二進数００００としてリマッピング回路５４の入力に送る。これは左シフトであるので、信号左が能動になり、信号右と迂回は非能動である。４ビット排他的ＯＲ回路６０が各ビットを改変せずに伝えて、被修正シフト回数値０または二進数００００をデコーダ６１の入力に送る。次にデコーダ６１が、被解読信号として二進数０００００００００００００００１（＄０００１）の値を提供する。信号左の能動化に応答して、マルチプレクサ６２がその第２入力を選択し、＄００００の値をリマップ済み信号として掛算器５５の乗数入力に送る。掛算器５５は、信号シフト０に応答して＄８４２１の値を出力に伝え、＄ＦＦＦＦ０８４２の値を提供し、これが累積加算器５６で＄ＦＦＦＦＦＦ０８４２の４０ビット値になる。出力シフタ５７は、信号シフト０が能動であるのに応答して、この値を１ビット左にずらす。このようにして、＄８４２１の値は、レジスタ５８のビット３１：１６に整合され、これが予想されるシフト結果となる。図５は、本発明の第２実施例によるＡＬＵ１５０のブロック図である。ＡＬＵ１５０は、入力データを受信する２個の入力レジスタ１５１，１５２を有する。入力レジスタ１５１は、掛算演算中は「被乗数」と呼ばれるデータ要素を受信し、シフト演算中は「シフト・オペランド」と呼ばれるデータ要素を受信する。入力レジスタ１５２は、掛算演算中は「乗数」と呼ばれるデータ要素を受信し、シフト演算中は「シフト回数」と呼ばれるデータ要素を受信する。図示される実施例においては、ＡＬＵ１５０は１６ビットのデータ語で動作するので、レジスタ１５１，１５２はそれぞれ１６ビットのレジスタである。掛算器１５５は、レジスタ１５１の出力に接続された第１（被乗数）入力と、レジスタ１５２の出力に接続された第２（乗数）入力と、３２ビットの積を提供する出力とを有する。
【００３１】
掛算器１５５は、１６ｘ１６アレイ掛算器である。特に、掛算器１５５は改良形ブースの掛算器で、桁上げ／セーブ加算器ツリーを通じて部分積を総計する。しかし、ウォレス・ツリーを通じて部分積を総計する掛算器など、他の種類のアレイ掛算器も可能である。重要なことは、掛算器１５５が相対的に高速であることである。図示される例では、掛算器１５５は、図２のデータ・プロセッサ４０の１クロック・サイクル内で、第１入力と第２入力の積を提供する。たとえば、データ・プロセッサ４０が６０メガヘルツ（ＭＨｚ）クロックを用いるとすると、掛算器１５５は１６ナノ秒（ｎｓ）以内に積を出す。掛算器１５５は、レジスタ１５１の出力端子に結合された１６ビット被乗数入力端子と、レジスタ１５２の出力端子に結合された１６ビットの乗数入力端子と、乗数および被乗数入力の積を提供する３２ビットの出力端子とを有する。乗数入力と被乗数入力との差異は、乗数入力端子が改良形ブースの再符号化を行うオペランドを受信することである。
【００３２】
掛算器１５５は、一般に、シフト・デコーダ１６０，改良形ブースの再符号化装置１６１，マルチプレクサ（ＭＵＸ）１６２および掛算器アレイ１６３を有する。シフト・デコーダ１６０は、レジスタ１５２の出力の４個の最下位ビット（ＬＳＢ：least significant bit ）を受信する入力と、「シフト」と標識のついた制御信号を受信する第１制御入力と、「左」と標識のついた制御信号を受信する第２制御入力と、「右」と標識のついた制御信号を受信する第３制御入力と、１６ビット出力とを有する。信号シフトが能動のときはシフト演算が実行されることを示す。信号左が能動のときは、実行されるシフトは左シフトであることを示す。信号右が能動のときは、実行されるシフトは右シフトであることを示す。ある実施例においては、信号左，右は１つの信号「左／反転右」に合成されることもある。この信号は、高論理で能動となり、左シフトを示し、低論理で非能動となって右シフトを示す。
【００３３】
信号シフトが能動になるとそれに応答して、シフト・デコーダ１６０は２回の平進（translation ）を実行する。まず、シフト・デコーダ１６０は、レジスタ１５２内に格納されるシフト回数の４個のＬＳＢを１６ビットのデマルチプレクス済みの値にデマルチプレクスする。１６ビットのデマルチプレクス済みの値には、二進数１で表されるただ１つの能動ビットと、二進数０で表される１５個の非能動ビットが含まれる。能動ビットは、シフト回数とシフト方向の両方に対応するビット位置にある。これについては、下記にさらに詳しく説明する。
【００３４】
第２に、シフト・デコーダ１６０は、３個のデマルチプレクス済みのビットの重複するグループを改良形ブースの再符号化を示す被再符号化信号に再符号化する。シフト・デコーダ１６０は、デマルチプレクス済みの値には１つの能動ビットしか含まれない性質を利用して、通常の改良形ブースの再符号化のサブセットである再符号化を行う。図示される実施例においては、ＡＬＵ１５０は１６ビットのデータ語で動作する。そのため０ビットと１５ビットとの間のシフトが許される。次にシフト・デコーダ１６０は、３ビットからなる８個の重複するグループのそれぞれを再符号化する。５種類の改良形ブースの再符号化状態（０，＋１，−１，＋２，−２）を表す信号を設ける代わりに、シフト・デコーダ１６０は、単に３種類の状態０，＋１，＋２を表す信号を設ける。この３つの状態が２つの信号に符号化され、Ｒ１（ｉ），Ｒ２（ｉ）と記される。ただし文字ｉは、重複するグループの数を示す。１６ビット掛算の場合は、掛算器アレイ１６３内には８個の重複グループ（ｉ＝１〜８）に対応する８行があり、そのためシフト・デコーダ１６０は合計で１６個の信号を提供する。可能なシフト回数に対応する出力を、以下の表３に示す：
【００３５】
【表３】
0003756967.tif 000004
シフト・デコーダ１６０と平行して、改良形ブースの再符号化装置１６１は、レジスタ１５２に格納されているオペランドの３つの信号の重複するグループについて標準的な改良形ブースの再符号化（すなわち０，＋１，−１，＋２，−２の状態を示す信号）を行う。レジスタ１５２に格納されているオペランドは１６ビットであるので、シフト・デコーダ１６０と改良形ブースの再符号化装置１６１は、第１入力を（二進数「０」，ビット０およびビット１に対応する）低論理レベルに強制する第１グループを再符号化する。次のグループがビット１，２，３を再符号化し、ビット１３，１４，１５を再符号化する最後のグループまで同様のことが行われる。
【００３６】
次に、マルチプレクサ（ＭＵＸ）１６２は、演算の種類に応じて信号のこれらのグループの１つを、「ディスエーブル（DISABLE ）」と標識がついた制御信号を用いて選択する。掛算モードの間は、信号ディスエーブルは低論理で非能動であり、ＭＵＸ１６２は改良形ブースの再符号化装置１６１の出力を選択して、掛算器アレイ１６３に送る。シフト・モードの間は、信号ディスエーブルは高論理で能動になり、シフト・デコーダ１６０の出力を選択して掛算器アレイ１６３に送る。信号ディスエーブルは、改良形ブースの再符号化装置１６１を動作不能にしてさらに電力を節約するその他の条件も示す。
【００３７】
掛算器アレイ１６３は、レジスタ１５１の出力に接続された乗数入力と、ＭＵＸ１６２の出力に接続された被再符号化信号入力と、３２ビット出力とを有する。掛算器アレイ１６３は、ＭＵＸ１６２によって提供された被再符号化信号を用いて被乗数をマルチプレクスすることで導かれた８行の部分和をもつ。次にこの部分和が高速の桁上げセーブ加算器で総計されて、３２ビットの積となる。
【００３８】
図２のデータ・プロセッサ４０は、デジタル信号プロセッサ（ＤＳＰ）である。有限衝撃応答（ＦＩＲ）フィルタ，無限衝撃応答（ＩＩＲ）フィルタ，高速フーリエ変換（ＦＦＴ）などの信号処理アルゴリズムにおいては、ハードウェアを用いて掛算および累積（ＭＡＣ）を実行する機能をもつことが有用である。この目的のために、ＡＬＵ１５０には、このような命令の積の総計を効率的に累積する累積装置１５６が含まれる。累積装置１５６は、掛算器１５５の出力端子に接続された３２ビット入力端子と、第２の４０ビット入力端子と、４０ビットの被累積出力を提供する出力端子とを有する。３２ビットで表すことのできない累積に対応するために、累積装置１５６は、保護ビットとして８個の最上位ビット（ＭＳＢ：most siginificant bit ）を有する。
【００３９】
累積装置１５６の４０ビット出力は、出力シフタ１５７に送られ、このシフタが４０ビット出力をレジスタ１５８に提供する。出力シフタ１５７は、累積装置１５６の出力に接続された４０ビット入力と、制御信号シフトを受信する第１制御入力と、制御信号左を受信する第２制御入力と、４０ビット出力とを有する。シフト演算中は、レジスタ１５８のビット３１：１６が最終のシフト結果を保持する。出力シフタ１５７には、制御信号シフトおよび左に応答して動作する１５回シフト機能を持ち、この結果をビット３１：１６に整合する。出力シフタ１５７は、ビット１５：０をゼロにセットする。右シフトについては、累積装置１５６の４０ビット出力が直接レジスタ１５８内に書き込まれ、符号が自動的に延長される。ビット３１における結果の最上位ビット（ＭＳＢ）は、出力シフタ１５７の上位８ビットの位置に符号延長される。
【００４０】
レジスタ１５８は、「Ｄ２」と標識のついたビット４０〜３２を含む上位の８ビット・フィールドと、「Ｄ１」と標識のついたビット３１〜１６を含むより上位の１６ビット・フィールドと、「Ｄ０」と標識のついたビット１５〜０を含むより下位の１６ビット・フィールドの３つのフィールドを有する。Ｄ１フィールドには、左シフトの間も右シフトの間も１６ビットのシフト結果が含まれる。Ｄ２：Ｄ１：Ｄ０は、掛算演算中の「被累積積」を表す。レジスタ１５８は、出力シフタ１５７の出力端子に接続された４０ビット入力と、累積装置１５６の第２の４０ビット入力端子に接続された４０ビット出力端子とを有する。レジスタ１５８には、さらに、レジスタ１５１，１５２の入力に対する接続部も含まれるが、図３では省略されている。
【００４１】
ＡＬＵ１５０は、高速掛算器１５５内の既存の回路構成を用いて０ないし１５のシフト値に関して左シフトと右シフトの両方を実行する。このため、ＡＬＵ１５０は高速バレル・シフタなどの専用シフタを必要としない。ＡＬＵ１５０には別の利点もある。第１に、シフト・デコーダ１６０が改良形ブースの再符号化装置１６１と平行にその機能を果たすために、ＡＬＵ１５０はシフト命令を迅速に実行する。この平行動作により、充分に遅延が小さくなり、シフト演算をデータ・プロセッサ４０の１クロック期間以内、たとえば６０ＭＨｚクロック信号については１６ｎｓ以内に実行することができる。第２に、シフト・デコーダ１６０が従来の改良形ブースの再符号化のサブセットである被再符号化信号を提供するので、ＡＬＵ１５０は少ない電力で動作する。シフト・デコーダ１６０は、１つの被再符号化信号しか能動化しないので、能動化される掛算器アレイ１６３の行が少なくなり、電力の節約につながる。また、信号ディスエーブルが改良形ブースの再符号化装置１６１を非能動化し、シフト・モード中の電力をさらに節約する。
【００４２】
一般に、シフト・デコーダ１６０には、全体として２回の平進を行う合成論理が含まれる。シフト・デコーダ１６０は、これら２回の平進を１段階の解読と平行に実行するので、この２回の平進を区別することはできない。この２回の平進を合成することによって、シフト・デコーダ１６０は、伝播遅延とこのような平進を別々に実行する回路下のゲート数とを小さくすることができる。
【００４３】
しかし、シフト・デコーダ１６０の機能の理解を助けるために、この２回の平進が別々に実行されるかのように分析することも有用である。第１の平進は４ビットの被符号化シフト回数をデマルチプレクス（リマップ）済みの値に解読することである。これを以下の表４に示す：
【００４４】
【表４】
0003756967.tif 000005
第２の平進は、デマルチプレクス（リマップ）済みの値を用いて、３ビットの重複グループについて改良形ブースの再符号化のサブセットを実行する。これを以下の表５に示す：
【００４５】
【表５】
0003756967.tif 000006
この平進は、従来の改良形ブースの再符号化とは異なっている。シフト演算については、通常の掛算とは異なって、解読されたシフト回数には「１」が１つしか含まれない。これはシフトされる量を示す。この特性を利用して、シフト・デコーダ１６０は、配列００１と１００とを従来の改良形ブースの再符号化とは異なる方法で再符号化する。異なる方法を用いる理由は、３ビットの配列の中でＭＳＢ位置に「１」があり、その後に２個の「０」が続く場合は、既知の改良形ブースの再符号化装置ではその前に「１」がいくつあるか判らない。そのため、既知の改良形ブースの再符号化装置は００１，０１１配列に関して１と２の値をそれぞれ割り当てる。しかし、シフト・デコーダ１６０においては、「１」の数列の長さが判っており、これは１であるので、配列のＬＳＢ位置に（前のグループに重複して）「１」があり、２の値としてその前の行により解読されているので無視されるために、２個の被再符号化信号を能動化する必要がない。デマルチプレクサ１８０と再符号化装置１８１の合成論理機能は、従来の論理単純化法を用いて合成された回路構成内で実行することが好ましい。
【００４６】
図６は、図５の改良形ブースの再符号化装置１６１の部分１９０と、図５のＭＵＸ１６２の部分１９１とを、一部論理図に一部概略図に示す。部分１９０，１９１を実現するために用いられる追加の信号としては、「ＣＡＲ」と標識のついた桁上げ入力信号と、「ＣＯ」と標識のついた桁上げ出力信号と、掛算の結果が負の値である（すなわち乗数と被乗数の片方だけが負である）ことを示す「ＮＥＧ」と標識のついた制御入力信号と、その補数である「ＮＥＧＺ」と標識のついた信号がある。
【００４７】
部分１９０は従来の改良形ブースの再符号化を実行することにも留意されたい。しかし、本発明による多重ビット・シフタは他の再符号化法を用いても構築できることを理解されたい。部分１９１は、掛算モードでは部分１９０からの被再符号化信号を、シフト・モードではシフト・デコーダ１６０の出力を提供する。これは信号ディスエーブルが掛算演算を示すかシフト演算を示すかによって決まる。図６に図示される回路構成は、被再符号化信号の８つのグループのそれぞれについて反復される。図６は、掛算器１５５のこの部分の回路を実現する可能性のある回路の１つに過ぎず、異なる能動レベル制御信号を用いるもの、異なる再符号化法を用いるもの、異なる種類のトランジスタを用いるものなど他の回路も可能であることに留意されたい。
【００４８】
本発明は、好適な実施例に関して説明されてきたが、本発明は多くの方法で改良することができ、上記に特に設定および説明されたもの以外に多くの実施例が可能であることは当業者には明かであろう。たとえば、多重ビット・シフト装置は、複合命令セット・コンピュータ（ＣＩＳＣ：complex instruction set computer）マイクロプロセッサ，削減命令セット・コンピュータ（ＲＩＳＣ：reduced instruction set computer）マイクロプロセッサ，ＤＳＰ，マイクロコントローラ，その他の任意の種類のデータ・プロセッサなどのＡＬＵに入れることができる。またシフト装置は集積回路データ・プロセッサの一部としても、分離して実現してもよい。シフト結果は掛算器の出力から得ることも、あるいは出力シフタ内でシフトさせて左シフトについても右シフトについてもその結果を整合することもできる。さらに、シフト回数は第２オペランドのどこかのビットで符号化しても、すでに解読された入力レジスタにより受信してもよく、あるいは命令オペランド・コード（オプコード）のフィールド内の４ビットの直接値であってリマッピング回路の入力に直接送ってもよい。シフト回数は、被乗数レジスタに格納することもできる。この場合、リマッピング回路は乗数レジスタではなく被乗数レジスタに接続されることになる。従って、添付の請求項は本発明の精神と範囲に入るすべての修正を包含するものである。
【図面の簡単な説明】
【図１】従来の技術による演算論理ユニット（ＡＬＵ）のブロック図である。
【図２】本発明によるデータ・プロセッサを有するデータ処理システムを示す。
【図３】本発明の１つの実施例によるＡＬＵのブロック図である。
【図４】図３のリマッピング回路をブロック図に示す。
【図５】本発明の第２実施例によるＡＬＵのブロック図である。
【図６】図５の改良形ブースの再符号化装置とＭＵＸを一部論理図に一部回路図に示す。
【符号の説明】
３０  データ処理システム
３１  メモリ
３２  アドレス，データおよび制御バス
４０  データ・プロセッサ
４１  命令ラッチ・デコーダ
４２  制御レジスタ
４３  バス・コントローラ
４５  入力データ経路
４６  双方向接続
４７  接続部
５０  ＡＬＵおよびレジスタ
【図１】
0003756967.tif 000007
【図２】
0003756967.tif 000008
【図３】
0003756967.tif 000009
【図４】
0003756967.tif 000010
【図５】
0003756967.tif 000011
【図６】
0003756967.tif 000012