(57)【特許請求の範囲】
【請求項１】
入力される第１及び第２のデータをそれぞれ上位側と下位側に分割し、
前記第１及び第２のデータに上位側と下位側の有効の情報を有するサイズ情報を有し、
前記第１及び第２のデータの上位側と、下位側と、サイズ情報とを保持する記憶手段と、
前記第２のデータを反転する反転手段と、
前記第２の上位側のデータの反転を抑止する反転抑止手段と、
演算の制御を行う制御手段と、
前記第１のデータの下位側と、前記第２のデータの下位側の反転手段出力と、前記制御手段の制御信号とを入力とする第１の演算手段と、
前記第１及び第２の下位側のデータの最上位ビットを上位側のデータとして使用するための論理手段と、
前記論理手段出力に対し、前記第１の上位側のデータと、反転抑止手段とを選択する上位側入力選択手段と、
前記第１の演算手段の桁上げと、前記第１及び第２のデータのサイズ情報と、前記制御手段の制御信号とを入力とする桁上げ生成手段と、
前記桁上げ生成手段出力の桁上げを記憶する桁上げ記憶手段と、前記上位側入力選択手段の出力と前記桁上げ生成手段出力とを入力とする第２の演算手段と、
前記第１及び第２のデータのサイズ情報から結果のサイズ情報を生成するサイズ情報生成手段と、
から構成され、
前記第１の演算手段から演算結果の下位側と、前記第２の演算手段から演算結果の上位側とを生成することを特徴とする演算装置。
【請求項２】
入力される第１及び第２のデータをそれぞれ上位側と下位側に分割し、
前記第１及び第２のデータに上位側と下位側の有効の情報を有するサイズ情報を有し、
前記第１及び第２のデータの上位側と、下位側と、サイズ情報とを保持する記憶手段と、
前記第２のデータを反転する反転手段と、
前記第２の上位側のデータの反転を抑止する反転抑止手段と、
演算の制御を行う制御手段と、
前記第１のデータの下位側と、前記第２のデータの下位側の反転手段出力と、前記制御手段の制御信号とを入力とする第１の演算手段と、
前記第１の演算手段の桁上げと、前記第１及び第２のデータのサイズ情報と、前記制御手段の制御信号とを入力とし、桁上げを生成する桁上げ生成手段と、
前記第１及び第２の下位側のデータの最上位ビットと前記第１及び第２のデータのサイズ情報と前記桁上げ生成手段出力の桁上げと、前記第１の上位側のデータと、
反転抑止手段の出力とを入力とする第２の演算手段と、
前記第１の上位側のデータと、反転抑止手段と、前記桁上げ生成手段出力の桁上げとを入力とする第３の演算手段と、
前記桁上げ生成手段出力の桁上げを記憶する桁上げ記憶手段と、
前記第２及び第３の演算手段から結果を選択する上位演算結果選択手段と、
前記第１及び第２のデータのサイズ情報から結果のサイズ情報を生成するサイズ情報生成手段と、から構成され、
前記第１の演算手段から演算結果の下位側と、前記上位演算結果選択手段から演算結果の上位側とを生成することを特徴とする演算装置。
【請求項３】
入力される第１及び第２のデータをそれぞれ上位側と下位側に分割し、
前記第１及び第２のデータに上位側及び下位側の有効の情報を有するサイズ情報を有し、
前記第１及び第２のデータの上位側及び下位側と、前記サイズ情報とを保持する記憶手段と、
前記第２のデータを反転する反転手段と、
前記第２の下位側のデータの反転を抑止する反転抑止手段と、
演算の制御を行う制御手段と、
前記制御手段の制御信号を保持する制御信号記憶手段と、
前記制御手段の制御信号と前記制御信号記憶手段出力とを入力とする第１の選択手段と、
前記第１のデータの下位側と、前記反転抑止手段の出力と、
前記第１の選択手段出力とを入力とする第１の演算手段と、
前記第１及び第２の下位側のデータと、前記第１のデータのサイズ情報とを入力とする第２の選択手段と、
前記第１及び第２のデータのサイズ情報を入力として、前記第１の演算手段と前記第２の選択手段を選択する第３の選択手段と、
前記第１の演算手段の桁上げと、前記第１及び第２のデータのサイズ情報と、前記制御手段の制御信号とを入力として、桁上げを生成する桁上げ生成手段と、
前記第１の上位側のデータと、前記第２のデータの上位側の反転手段出力と、前記桁上げ生成手段出力の桁上げとを入力とする第２の演算手段と、
前記第１及び第２のデータのサイズ情報から結果のサイズ情報を生成するサイズ情報生成手段と、
から構成され、
前記第３の選択手段から演算結果の下位側と、前記第２の演算手段から演算結果の上位側とを生成することを特徴とする演算装置。
【請求項４】
請求項１〜３のいずれか１項に記載の演算装置と、
バス上のデータの入力を行う際に、サイズ情報を付加するサイズ情報付加手段と、
前記バス上のデータの出力を行う際に、前記サイズ情報をデータに反映するためにデータを変更する論理手段を持つデータ変更論理手段と、
前記演算装置と、前記サイズ情報付加手段と、前記データ変更論理手段とを接続して、データの記憶とサイズ情報の更新を行うサイズ情報更新手段と、
から構成されることを特徴とする情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサやデジタルシグナルプロセッサ等に使用される演算装置およびその演算装置を用いた情報処理装置に関する。
【０００２】
【従来の技術】
近年のマイクロプロセッサでは、レジスタファイルや演算器群、それらを結ぶ内部バスを同ビット幅とし、制御論理を簡単化することで、ハードウェアの複雑化を避け、大幅な周波数向上を遂げてきた。一方、機器組み込み向けアプリケーションプログラムでは、コストに直接影響するメモリ容量を削減するために、必要最低限のビット幅のデータを使用することが多い。
【０００３】
そこで、メモリからのロードデータや即値の有効ビット幅が演算器やレジスタファイルのビット幅より小さい場合、演算器やレジスタファイルのビット幅に合うよう符号拡張される。例えば、画像情報で有効ビット幅が８ビットのとき、演算器ビット幅が３２ビットであれば、上位２４ビットを符号拡張し、３２ビットデータとして演算される。有効ビット８ビットのみ動作させる場合に対し、上位２４ビット分の電力が多く消費される。
【０００４】
このため、消費電力を抑えるために演算器を有効ビット幅で動作させるいくつかの方法が知られている。
【０００５】
例えば、特開平７−２４８８９５号公報（従来例１）に示されるように、Ｎビットの演算器を上位側の（Ｎ−Ｋ）ビットと下位側Ｋビットに分割し、入力データがＫビットのみ有効である場合は、演算器の入力データの（Ｎ−Ｋ）ビットを“０”（論理レベル）とし、キャリー伝搬を抑止することで、上位側の演算器を停止させる。
【０００６】
また、特開平７−２７１５５４号公報（従来例２）に示されるように、入力データの上位側のビットを“０”とする代わりに、上位側のラッチ更新を抑止することによって同様の低消費電力化が行われる。この場合、データの有効ビット幅の制御は、低消費電力のためのモードビットを参照して行っている。
【０００７】
別の方法として、特開２０００−１１２７１２号公報（従来例３）に示されるように、入力データから有効ビット幅を検出する方法がある。例えば８ビット加算器で、入力データから有効桁をチェックし、下位４ビットのみが有効とすると、上位側のビットを“０”に固定する。そして、加算結果は下位４ビットと下位の最上位ビットの符号拡張から得られる。但し、下位桁から上位桁へのキャリー伝搬は抑止されていない。
【０００８】
このように、低消費電力のために演算器の動作ビット数を減少する方法がいくつか知られている。すなわち、従来の演算器の制御方法として、キャリー伝搬抑止に加え、
制御方法Ａ：  上位側加算器の入力を“０”固定する方法（従来例１や従来例３に相当）、
制御方法Ｂ：  上位側ラッチ更新抑止による上位側データを固定する方法（従来例２に相当）、が知られている。
ここで、キャリー伝搬抑止とは、下位側のみ有効の場合に、上位側にキャリー“０”を出力することを指す。
【０００９】
また、従来の演算器の制御単位としては、
制御単位Ａ：  特殊レジスタに設定するモードビットを参照する方法、
制御単位Ｂ：  命令をデコードし、命令単位で制御する方法、
制御単位Ｃ：  データによって制御する方法、が知られている。
【００１０】
【発明が解決しようとする課題】
しかしながら、前述した上記の従来の演算器の制御方法ＡとＢによれば、次のような問題点がある。
上位側加算器の入力を“０”固定する制御方法Ａの場合、上位側を使用しない下位桁のみ有効命令であっても、最初のサイクルの電力消費は抑止できないという問題点がある。なお、２サイクル目以降、下位桁のみ有効な命令が連続する場合には電力が消費されない。
上位側ラッチ更新抑止による上位側データを固定する制御方法Ｂの場合、上位側を使用しない下位桁のみ有効命令であっても、直前の命令で下位加算器から上位加算器へのキャリー信号が“１”（論理レベル）であったとき、最初のサイクルの電力消費を抑止することができないという問題点がある。下位桁のみ有効な命令では、常にキャリー信号として“０”が供給されるためである。なお、２サイクル目以降、下位桁のみ有効な命令が連続する場合には電力が消費されない。
【００１１】
また、前述した従来の演算器の制御単位Ａ，Ｂ，Ｃによれば、次のような難点がある。
モードビットを参照する制御単位Ａの制御方法の場合、実現は最も容易であるが、モードビット設定のためのオーバヘッドがあるという点である。モードビットを設定するためには、モードビットを設定するための命令を実行する必要がある。
命令単位で制御する制御単位Ｂの場合、各命令を制御部にてデコードし、必要ビット幅の制御を出力する。モードビット参照の制御単位Ａの方法に比べれば、命令単位で制御が行えるので電力削減の効果が大きいが、演算器を最大幅使用すると定義した命令では、データの有効桁によらず常に演算器は最大幅で動作するという問題がある。
データ単位で制御する制御単位Ｃの制御方法が、最も電力削減効果が高い方法である。データの有効桁が命令の有効桁より小さい場合は、命令で定義した演算器の使用幅より小さい幅でしか動作しないという利点がある。実現方法は入力データをチェックし、符号拡張部分を調べ、最小のビット幅で演算させればよい。
【００１２】
ところで、ＣＰＵ（Central Processing Unit）あるいはＤＳＰ（Digital Signal Processor）の電力としては、演算器のみではなく、レジスタファイルやレジスタファイルと演算器が接続される内部バスで消費される電力も無視できない。そして、レジスタファイルの上位ビットが固定された場合、レジスタファイルの上位ビットの電力が消費しない利点がある。また、内部バスにおいても、上位ビットが固定された場合、内部バスの上位ビットの電力が消費しない利点がある。
【００１３】
そこで、本発明の目的は、下位桁のみ有効な命令が実行されるとき、最初のサイクルの電力消費をも抑止することができる演算装置を提供することである。
【００１４】
また、この本発明に係る演算装置を用いて、データ単位で演算器のみでなく、ＣＰＵあるいはＤＳＰ全体の消費電力を削減することができる情報装置を提供することも本発明の目的の一つである。
【００１５】
【課題を解決するための手段】
本発明に係る演算装置は、入力される第１及び第２のデータをそれぞれ上位側と下位側に分割し、
前記第１及び第２のデータに上位側と下位側の有効の情報を有するサイズ情報を有し、
前記第１及び第２のデータの上位側と、下位側と、サイズ情報とを保持する記憶手段と、
前記第２のデータを反転する反転手段と、
前記第２の上位側のデータの反転を抑止する反転抑止手段と、
演算の制御を行う制御手段と、
前記第１のデータの下位側と、前記第２のデータの下位側の反転手段出力と、前記制御手段の制御信号とを入力とする第１の演算手段と、
前記第１及び第２の下位側のデータの最上位ビットを上位側のデータとして使用するための論理手段と、
前記論理手段出力に対し、前記第１の上位側のデータと、反転抑止手段とを選択する上位側入力選択手段と、
前記桁上げ記憶手段と、前記第１の演算手段の桁上げと、前記第１及び第２のデータのサイズ情報と、前記制御手段の制御信号とを入力とする前記第２の演算手段の入力の桁上げを生成する桁上げ生成手段と、
前記桁上げ生成手段出力の桁上げを記憶する桁上げ記憶手段と、
前記上位側入力選択手段の出力と前記桁上げ生成手段出力とを入力とする第２の演算手段と、
前記第１及び第２のデータのサイズ情報から結果のサイズ情報を生成するサイズ情報生成手段と、
から構成され、
前記第１の演算手段から演算結果の下位側と、前記第２の演算手段から演算結果の上位側とを生成することを特徴とするものである。
【００１６】
また、本発明に係る演算装置は、入力される第１及び第２のデータをそれぞれ上位側と下位側に分割し、
前記第１及び第２のデータに上位側と下位側の有効の情報を有するサイズ情報を有し、
前記第１及び第２のデータの上位側と、下位側と、サイズ情報とを保持する記憶手段と、
前記第２のデータを反転する反転手段と、
前記第２の上位側のデータの反転を抑止する反転抑止手段と、
演算の制御を行う制御手段と、
前記第１のデータの下位側と、前記第２のデータの下位側の反転手段出力と、
前記制御手段の制御信号とを入力とする第１の演算手段と、
前記第１の演算手段の桁上げと、前記第１及び第２のデータのサイズ情報と、
前記制御手段の制御信号とを入力とし、桁上げを生成する桁上げ生成手段と、
前記第１及び第２の下位側のデータの最上位ビットと前記第１及び第２のデータのサイズ情報と前記桁上げ生成手段出力の桁上げを入力とする第２の演算手段と、
前記第１の上位側のデータと、反転抑止手段と、前記桁上げ生成手段出力の桁上げとを入力とする第３の演算手段と、
前記桁上げ生成手段出力の桁上げを記憶する桁上げ記憶手段と、
前記第２及び第３の演算手段から結果を選択する上位演算結果選択手段と、
前記第１及び第２のデータのサイズ情報から結果のサイズ情報を生成するサイズ情報生成手段と、
から構成され、
前記第１の演算手段から演算結果の下位側と、前記上位演算結果選択手段から演算結果の上位側とを生成する構成としてもよい。
【００１７】
また、本発明に係る演算装置は、入力される第１及び第２のデータをそれぞれ上位側と下位側に分割し、
前記第１及び第２のデータに上位側及び下位側の有効の情報を有するサイズ情報を有し、
前記第１及び第２のデータの上位側及び下位側と、前記サイズ情報とを保持する記憶手段と、
前記第２のデータを反転する反転手段と、
前記第２の上位側のデータの反転を抑止する反転抑止手段と、
演算の制御を行う制御手段と、
前記制御手段の制御信号を保持する制御信号記憶手段と、
前記制御手段の制御信号と前記制御信号記憶手段出力を入力とする第１の選択手段と、
前記第１のデータの下位側と、前記第２のデータの下位側の反転手段出力と、
前記第１の選択手段出力とを入力とする第１の演算手段と、
前記第１及び第２の下位側のデータと、前記第１のデータのサイズ情報とを入力とする第２の選択手段と、
前記第１及び第２のデータのサイズ情報を入力として、前記第１の演算手段と前記第２の選択手段を選択する第３の選択手段と、
前記第１の演算手段の桁上げと、前記第１及び第２のデータのサイズ情報と、
前記制御手段の制御信号とを入力として、桁上げを生成する桁上げ生成手段と、
前記第１の上位側のデータと、前記反転抑止手段の出力と、前記桁上げ生成手段出力の桁上げとを入力とする第２の演算手段と、
前記第１及び第２のデータのサイズ情報から結果のサイズ情報を生成するサイズ情報生成手段と、
から構成され、
前記第３の選択手段から演算結果の下位側と、前記第２の演算手段から演算結果の上位側とを生成する構成であってもよい。
【００１８】
また、本発明に係る情報処理装置すなわちマイクロプロセッサやデジタルシグナルプロセッサは、上記のいずれかの演算装置と、
バス上のデータの入力を行う際に、サイズ情報を付加するサイズ情報付加手段と、
前記バス上のデータの出力を行う際に、前記サイズ情報をデータに反映するためにデータを変更する論理手段を持つデータ変更論理手段と、
前記演算装置と、前記サイズ情報付加手段と、前記データ変更論理手段とを接続して、データの記憶とサイズ情報の更新を行うサイズ情報更新手段と、
から構成されることを特徴とするものである。
【００１９】
【発明の実施の形態】
以下、本発明の好適な実施の形態について、添付図面を参照しながら詳細に説明する。
【００２０】
＜実施の形態１＞
図１は、本発明に係る演算装置の第１の実施の形態を示す加減算回路のブロック図である。加減算回路の２つの入力データを、データ１及びデータ２とする。
図１において、参照符号１０１及び１０２はデータ１を上位側と下位側に２分する際の上位レジスタと下位レジスタである。例としてデータ１のビット幅を３２ビットとすると、レジスタ１０１は１６ビットの上位側、レジスタ１０２は下位側に相当する。データ１には、サイズ情報Ｓ１を示すサイズビットレジスタ１０３がある。サイズ情報Ｓ１はデータと常に付随する情報として扱われる。同様に、もう一つの入力データであるデータ２を上位側と下位側に２分する際の上位レジスタ１０４及び下位レジスタ１０５と、データ２のサイズ情報Ｓ２を示すビットレジスタ１０６がある。上記レジスタ１０１〜１０６は全てフリップフロップで構成され、クロック(clock)φ１の立ち上がりで動作する。
【００２１】
１０７及び１０８はそれぞれデータ１、データ２の上位側、下位側の加算器である。１０９は制御部であり、演算の減算を示すＳＵＢ信号と並列演算を示すＳＭＤ信号を出力し、演算の制御を行う。また、図１では省略してあるが、制御部１０９は上記レジスタ１０１〜１０６のイネーブル信号も命令単位で出力する。
【００２２】
１１０及び１１１は、減算を行う際に使用するデータ２とＳＵＢ信号を入力とするＥＯＲ（排他的論理和）ゲートであり、それぞれデータ２の上位側、下位側に対応する。１１２はデータ２のサイズビットＳ２に従ってＳＵＢ信号をマスクするためのＡＮＤゲートである。
【００２３】
１１３はキャリー制御部であり、データ１とデータ２のサイズビットレジスタ１０３，１０６に格納されたサイズ情報Ｓ１，Ｓ２とＳＵＢ信号及びＳＭＤ信号を入力とし、下位側の加算器１０８から上位側の加算器１０７への桁上げ信号の制御を行う。キャリー制御用のために、キャリー保持レジスタ１１４により以前のキャリーＣを保持する。サイズ情報が異なるデータの演算を行うときは、サイズを合わせるためにビット長の小さいデータを符号拡張する必要があり、符号拡張制御部１１５にてサイズビットレジスタ１０３，１０６を入力として符号拡張制御を行う。加算器１０７，１０８の出力ライン１１６，１１７に、データ上位側及び下位側の演算結果データＤ３Ｈ及びＤ３Ｌをそれぞれ出力する。演算結果に付随する情報として、信号ライン１１８に結果サイズ情報Ｓ３を出力する。
【００２４】
ここで、図１に示す本実施の形態における加減算回路の動作を説明する前に、表１と図２を参照して、加減算の方法を説明する。データ１とデータ２は、３２ビット符号付整数とし、上位１６ビットをそれぞれＤ１Ｈ，Ｄ２Ｈと表し、下位１６ビットをそれぞれＤ１Ｌ，Ｄ２Ｌと表す。サイズビットは１ビットであり、“１”のとき３２ビット、“０”のとき１６ビットを示す。
【００２５】
【表１】
0004015411.tif 000002
表１には、本実施の形態における加減算回路で実行される命令と、命令の内容と、上位側加算器１０７へのキャリーインＣＩＵと、下位側加算器１０８へのキャリーインＣＩＬとを示している。減算命令は“データ１”−“データ２”のみ用意されているが、“データ２”−“データ１”の拡張は容易であり、説明を簡単にするために、“データ１”−“データ２”を実現する回路となっている。
【００２６】
表１において、ＣＯとは下位側加算器１０８のキャリーアウトを示し、Ｃとはキャリー保持レジスタ１１４に保持されたキャリーを示す。ＡＤＤ３２では少なくとも一方が３２ビットのデータでの加算命令を示し、サイズ情報の組合せにより、３２＋３２、１６＋３２、３２＋１６の３通りの演算が起こり得る。
ＳＵＢ３２は、ＡＤＤ３２の加算を減算に置換えた命令である。ＡＤＤ１６とＳＵＢ１６とはそれぞれ、２つの下位１６ビットでの加算と減算を行う命令である。ＡＤＤＳとＳＵＢＳとはそれぞれ、３２ビットデータで上位１６ビット、下位１６ビットを並列に加算と減算を行う命令である。
【００２７】
図２は、表１の命令のうち４通りの加減算の例を示している。
(１) データ１が３２ビット、データ２が１６ビットの加算(ＡＤＤ３２)の場合：
データ１は３２ビットなので、サイズビットが“１”、データ２は１６ビットなので、サイズビットは“０”である。データ幅が異なる場合、データのビット長が大きいデータとビット長を合わせるために、ビット長が小さいデータは符号拡張を行う。従って、データ２は符号拡張される。３２ビット加算なので下位側加算のキャリーインＣＩＬは“０”であり、上位側加算のキャリーインＣＩＵは下位側からの桁上げ（キャリーアウト）ＣＯである。結果は３２ビットであり、サイズは“１”となる。
【００２８】
(２) データ１が３２ビット、データ２が１６ビットの減算(ＳＵＢ３２)の場合：
データ１は３２ビットなので、サイズビットが“１”、データ２は１６ビットなので、サイズビットは“０”である。３２ビット減算なので、データ２は符号拡張と反転を行い、下位側加算のキャリーインＣＩＬは“１”であり、上位側加算のキャリーインＣＩＵは下位側からの桁上げＣＯである。結果は、３２ビットであり、サイズは“１”となる。
【００２９】
(３) データ１、データ２が１６ビットの加算(ＡＤＤ１６)の場合：
データ１、データ２は１６ビットなのでサイズビットは“０”である。上位側は演算に無関係なため、ドントケアである。そこで、上位側は前サイクルと同じ結果となるようにする。入力データを前サイクルと同じデータにし、上位側加算のキャリーインＣＩＵを前サイクルと同じキャリーＣとすればよい。下位側加算のキャリーインＣＩＬを“０”とすれば、結果の下位１６ビットは正しい演算結果が得られる。結果のサイズは“０”となる。
【００３０】
(４) データ１、データ２が１６ビットの並列減算(ＳＵＢＳ１６)の場合：
データ１、データ２は３２ビットなのでサイズビットは“１”である。上位側と下位側を並列に演算させるため、データ２の入力を反転し、上位側加算のキャリーインＣＩＵ、下位側加算のキャリーインＣＩＬをどちらも“１”とする。結果は３２ビットであり、サイズは“１”となる。
【００３１】
次に、図１の加減算器の動作を図２の（２）のＳＵＢ３２（３２ビット−１６ビット）を例にとり説明する。データ１入力は３２ビットなので、データ１のサイズビットレジスタ１０３に“１”、データ１の上位レジスタ１０１と下位レジスタ１０２にそれぞれＤ１ＨとＤ１Ｌが格納される。
【００３２】
データ２入力は１６ビットなので、データ２のサイズビットレジスタ１０６に“０”、データ２の下位レジスタ１０５にＤ２Ｌが格納され、上位レジスタ１０４は変化しない。制御部１０９から減算用の制御信号であるＳＵＢ信号には“１”が供給される。ＳＵＢ信号により、データ２の下位レジスタ１０５に格納されたデータの出力Ｄ２ＬがＥＯＲゲート１１１により反転されて下位側の加算器１０８に与えられると共に、下位側の加算器１０８にキャリーインＣＩＬとしてＳＵＢ信号の“１”が与えられる。下位側の加算器１０８において、データ１の下位レジスタ１０２に格納されたＤ１Ｌと、データ２の下位レジスタ１０５の反転出力￣Ｄ２Ｌ（￣は、反転記号の代用である）、キャリーインＣＩＬ＝“１”が入力として与えられ、加算した後、下位側加算器１０８の結果Ｄ３Ｌが出力ライン１１７に出力される。下位側加算器１０８のキャリーアウトＣＯは、キャリー制御部１１３に入力されるが、スルー出力で上位側加算器１０７のキャリーインＣＩＵとして入力される。データ１とデータ２のビット幅を合わせるために、データ２は下位側の最上位ビット(ＭＳＢ：Most Significant Bit)が符号拡張され、符号拡張制御部１１５に入力される。ＥＯＲゲート１１１の出力のＭＳＢを使用するため、データ２の下位レジスタ１０５のＭＳＢに対し、反転された符号が拡張されている。符号拡張制御部１１５では、サイズ情報としてデータ１、データ２のサイズビットレジスタ１０３、１０６と上位側データＤ１Ｈ，Ｄ２Ｈと符号拡張された下位側データＤ１Ｌ，Ｄ２Ｌとを入力し、データ幅が同じ場合は上位側データを、データ幅が異なる場合は、データ幅が小さい方のセレクタは符号拡張下位側データを選択する。
【００３３】
図２の（２）の例では、データ１側はデータ１の上位レジスタ１０１の出力Ｄ１Ｈを選択し、データ２側は符号拡張下位側データを選択して、それぞれ上位側加算器１０７に入力される。上位側加算器で加算し、結果を上位側データＤ３Ｈとして出力ライン１１６に出力する。信号ライン１１８には結果のサイズＳ３は、入力サイズのどちらかが３２ビットのときは“１”、どちらも１６ビットデータのときは“０”となる。図２の（２）の例では結果サイズＳ３として“１”を出力する。
【００３４】
図２の（１）のＡＤＤ３２（３２ビット＋１６ビット）は上記ＳＵＢ３２に対し、制御部１０９のＳＵＢ信号が“０”となることにより実行される。下位側加算器１０８の変更点は、データ２の入力とキャリーインであるが、ＳＵＢ信号が“０”になることにより下位側加算器１０８のデータ２の入力はスルーとなり、キャリーインＣＩＬは“０”となる。上位側加算器１０７のデータ２側のデータとしては、データ２の下位レジスタ１０５のＭＳＢと同じ値が符号拡張され、供給される。
【００３５】
ＡＤＤ３２命令とＳＵＢ３２命令の上記と異なるデータ幅においては、２つの入力データが３２ビットのときは、符号拡張の代わりに上位側のデータを使用することにより実現できる。データ１のビット幅が１６ビット、データ２のビット幅が３２ビットのときは、データ１の下位側データＤ１ＬのＭＳＢを符号拡張することにより実現できる。
【００３６】
図２の（３）のＡＤＤ１６（１６ビット＋１６ビット）は、本実施の形態において、上位側の加算器１０７のトランジスタのスイッチングを抑止する点で、従来例に対し低消費電力を達成する好適な例である。２つの入力はどちらも１６ビットであるため、データ１、データ２のサイズビットレジスタ１０３，１０６は両方とも“０”である。したがって、データ１、データ２の上位側レジスタ１０１，１０４は変更されず、前の値を保持する。データ１、データ２の下位側レジスタ１０２，１０５に入力データが格納される。加算のため、制御部１０９からＳＵＢ信号は“０”が出力される。
【００３７】
ＳＵＢ信号の“０”に従って、下位側加算器１０８の入力として、データ１の下位レジスタ１０２の出力Ｄ１Ｌと、データ２のＥＯＲゲート１１１のスルー出力と、キャリーインＣＩＬの“０”とが与えられ、加算が実行される。加算結果は１６ビットであり、結果サイズビットＳ３は“０”となる。
【００３８】
ここで、ＡＤＤ１６命令においては、演算結果の実行に、上位側の加算器１０７を使用しない。上位側の加算器のスイッチングを停止することで、消費電力が削減できる。上位側加算器の消費電力を削減する方法を説明する。上位側の加算器１０７のスイッチングを停止するためには、加算器の２つの入力とキャリーインを固定すればよい。固定の方法は次のように行う。
【００３９】
まず、データ１、データ２のサイズビットレジスタ１０３，１０６がどちらも“０”であることから、符号拡張制御部１１５のセレクタは、Ｈ側すなわちデータ１、データ２の上位側Ｄ１Ｈ，Ｄ２Ｈが選択される。データ１の上位側レジスタ１０１は前の値が保持されているため固定、データ２側は、データ２のサイズビットレジスタ１０６が“０”であることからＳＵＢ信号がマスクされ、ＥＯＲゲート１１１は、前の値を保持するデータ２の上位側レジスタ１０４のデータＤ２Ｈをスルーで出力するため固定であり、上位側加算器１０７の２つの入力データは固定となる。キャリーイン信号に関しては、並列実行を示すＳＭＤ信号が“０”、２つのサイズビットレジスタ１０３，１０６が“０”のため、前のキャリーを保持するキャリー保持レジスタ１１４の出力Ｃが上位加算器１０７のキャリーイン信号ＣＩＵとして選択される。キャリー保持レジスタ１１４の出力が固定値のため、上位加算器１０７のキャリーイン信号も固定値である。従って、上位加算器１０７の入力が全て固定され、トランジスタのスイッチングが抑止され、電力を消費しない。
【００４０】
ＳＵＢ１６命令では、ＳＵＢ信号が“１”となるため、下位側のデータ２とキャリーインＣＩＬとが反転される点が異なるが、他はＡＤＤ１６命令と同様の処理で実現される。上位側の加算器１０７に関してはＡＤＤ１６命令と同様に電力を消費しない。
【００４１】
更に、ＡＤＤ１６命令かＳＵＢ１６命令が連続するとき、制御部１０９からのＳＵＢ信号は命令に従って変化するが、データ２のサイズビットレジスタ１０６の出力Ｓ２によってＡＮＤゲート１１２でマスクされることにより、常に固定値の入力が上位加算器１０７に供給され、電力は消費されない。
【００４２】
図２の（４）のＳＵＢＳ１６（“１６ビット”−“１６ビット”の並列実行）命令は、上位側データと下位側データを次の方法で並列に実行する。下位側の加算器１０８に、データ１の下位レジスタ１０２の出力Ｄ１Ｌと、データ２の下位レジスタ１０５の反転出力￣Ｄ２Ｌと、ＳＵＢ信号“１”によるキャリーインＣＩＬの入力とが与えられ、１６ビット結果を出力する。２入力のデータサイズはどちらも“１”であることから、符号拡張制御部１１５では、データ１の上位レジスタ１０１の出力Ｄ１Ｈとデータ２の上位レジスタ１０４の反転出力￣Ｄ２Ｈが選択され、上位側加算器１０７の入力データとなる。上位側加算器のキャリーイン信号として、下位側の加算器１０８からの桁上げ信号伝搬を抑止する必要があるが、制御部１０９からの並列実行信号ＳＭＤ信号により下位側からの桁上げ信号伝搬の抑止を行い、ＳＵＢ信号により強制的に“１”を上位側加算器１０７のキャリーイン信号ＣＩＵとして与えている。
このことにより、下位桁の影響を受けずに並列に１６ビット減算を実行することができる。
【００４３】
ＡＤＤＳ１６命令に関しては、ＳＵＢ信号が“０”となることにより、上位側および下位側の加算器にそれぞれデータ２の上位レジスタ１０４のスルー出力Ｄ２Ｈ、下位レジスタ１０５のスルー出力をデータ２側の入力として与え、キャリーインＣＩＵとして強制的に“０”とすることにより実現できる。
【００４４】
上記のように本実施の形態によれば、データ１、データ２の下位１６ビット演算命令が連続するとき、上位加算器１０７の入力データとキャリーが固定されるため、電力を消費しない。特に、下位１６ビット加算命令と下位１６ビット減算命令が１命令ずつ交互に実行される場合においても、ＳＵＢ信号によるデータ２の上位側データのスルーまたは反転がＡＮＤゲート１１２により抑止されるため、上位加算器１０７の入力データとキャリーが固定され、電力を消費しない。
【００４５】
また、下位１６ビット演算命令と３２ビット演算命令が１命令ずつ交互に実行されるときは、下位１６ビット演算命令が実行するときに上位加算器１０７の電力消費が行われない。従って、下位１６ビットのみ有効な命令が実行されるとき、最初のサイクルから電力消費を抑止することができるといえる。
【００４６】
従来例の制御方法Ａの上位加算器の入力を“０”固定する方法と、制御方法Ｂの上位側データを固定する方法すなわち上位レジスタを固定する方法とでは、以下のような場合に電力消費を必要とするのに対し、本実施の形態の加減算回路では上述したように電力が消費されない利点がある。
【００４７】
制御方法Ａの上位加算器の入力を“０”固定する方法では、下位１６ビット演算命令が連続する場合、最初の下位１６ビット演算命令を実行するときは、上位加算器１０７の電力を消費するが、その後の下位１６ビット演算命令では上位加算器１０７の電力消費は抑止される。下位１６ビット演算命令と３２ビット演算命令が１命令ずつ交互に実行される場合、下位１６ビット命令を実行するとき、必ず上位加算器１０７の入力を“０”にするため、前命令の入力が“０”以外のときは常に上位加算器１０７の電力を消費する。
【００４８】
制御方法Ｂの上位レジスタを固定する方法では、下位１６ビット演算命令を実行するとき、上位レジスタを固定し、下位加算器から上位加算器１０７へのキャリーを強制的に“０”にする。下位１６ビット演算命令が連続する場合、最初の下位１６ビット演算命令を実行するときは、下位加算器１０８から上位加算器１０７へのキャリーを強制的に“０”にするため、前サイクルのキャリーが“１”であると、上位加算器１０７は電力を消費する。
【００４９】
下位１６ビット加算命令と下位１６ビット減算命令が１命令ずつ交互に実行する場合、データ１とデータ２の上位レジスタを固定しても、データ２が減算命令では反転されるため、上位加算器１０７のデータ２側の入力が常に反転することになり、消費電力を抑止できない。
【００５０】
また、下位１６ビット演算命令と３２ビット演算命令が１命令ずつ交互に実行される場合、３２ビット演算命令実行時に、常に下位加算器１０８から上位加算器１０７へのキャリーが“１”であると、下位１６ビット演算命令実行時にキャリーを強制的に“０”にするため、下位１６ビット演算命令においても常に上位加算器１０７の電力を消費する。
【００５１】
以上のように、下位１６ビット演算命令が連続する場合、下位１６ビット演算命令と３２ビット命令が交互に実行される場合においても、従来に対し消費電力を低く抑えられることを示した。
【００５２】
図１では、簡単のために加減算器を示したが、論理ゲートを追加することにより、容易に算術論理演算装置（ＡＬＵ：Arithmetic and Logic Unit）を実現することができる。
【００５３】
図３に、図１の加減算回路を用いたマイクロプロセッサの例として構成図を示す。
【００５４】
ＤＲＡＭやＳＤＲＡＭ等の外部メモリ３０１は、外部データバス３０２および外部アドレスバス３０３によりマイクロプロセッサ３０４に接続されている。マイクロプロセッサ（ＭＰＵ）３０４は、ＣＰＵ３０５、および外部とのデータの授受を行うバスインタフェースユニット３０６から構成され、ＣＰＵとバスインタフェースユニット間はロードストアバス３０７にて接続される。尚、上記ＤＲＡＭやＳＤＲＡＭ等のメインメモリは外部に設けるのではなく、マイクロプロセッサ３０４と一緒に１枚の半導体基板内に内蔵されていてもよい。その場合は、バス３０２や３０３は同一チップ内の内部バスで構成される。ＣＰＵ３０５は、制御部３０８とデータパス部３０９から構成される。
【００５５】
データパス部は、データのロードおよびストアを行うロードストアユニット３１０と、図１で示される構成のＡＬＵ３１１と、レジスタファイル３１２とから構成される。図１は加減算器であるが、ＡＬＵに容易に機能拡張可能なため、以後ＡＬＵと呼ぶことにする。
【００５６】
図４にレジスタファイル３１２の構成例を示す。このレジスタファイル３１２は、ロードデータとＡＬＵ演算結果のどちらかを選択する入力セレクタ４０２と、この入力セレクタ部４０２で選択されたデータのサイズチェックを行うデータチェック部４０３と、データを保持するデータ保持部４０４と、ＡＬＵの入力データＤ１およびデータＤ２とストアデータをデータ保持部４０４から選択する出力セレクタ４０８とから構成される。
【００５７】
データ保持部４０４はレジスタ数は８本で、サイズビットレジスタファイル４０５と、上位側データレジスタファイル４０６と、下位側データレジスタファイル４０７とから構成される。データ保持部４０４のデータ幅は３２ビットで、上位１６ビット、下位１６ビットである。１ビットのサイズビットは、“０”のとき下位１６ビットのみ有効であり、“１”のとき３２ビットが有効であることを示す。出力セレクタ４０８で、ＡＬＵデータＤ１はレジスタ[３：０]、ＡＬＵデータＤ２はレジスタ[７：４]、ストアデータはレジスタ[７：０]のいずれかから任意に選択できることとする。
【００５８】
図４のレジスタファイル３１２の動作を説明する。ロードデータをＡＬＵのデータＤ１として読み出すことを考える。図３に示したＣＰＵ３０５では、ロードストア部３１０とＡＬＵ３１１にフォワーディングセレクタを備えていないことを前提としているので、図４ではロードストア部３１０とＡＬＵ３１１はレジスタファイル３１２と接続される。
【００５９】
まず、入力セレクタ４０２において、制御部３０８からロードデータを選択するセレクタ信号が供給され、ロードデータがデータチェック部４０３の入力に与えられる。
【００６０】
データチェック部４０３では、上位側データが符号拡張であるかどうかをチェックし、入力のサイズが“０”か上位側が符号拡張であれば、サイズを強制的に０にし、それ以外は“１”とする。
【００６１】
データ保存部４０４では、レジスタ［７：０］のいずれかにデータがライト(書込み)される。例として、レジスタ［０］にライトされるとすると、サイズビットレジスタ［０］にサイズビットがライトされ、サイズビットが“０”のとき下位側データレジスタ４０７のみライトされ、サイズビットが“１”のとき上位側と下位側データレジスタ４０６，４０７にライトされる。出力セレクタ部４０８において、ＡＬＵデータＤ１側のレジスタが［３：０］のいずれかから選択される。
ここでは、［０］レジスタが選択され、ＡＬＵデータＤ１側に［０］レジスタが出力される。
【００６２】
図５（ａ）に、図４のデータチェック部４０３の構成図を示す。入力および出力は、どちらもサイズビットＳと、データ上位側と、データ下位側であり、ビット幅はそれぞれ１ビット、１６ビット、１６ビットである。サイズビットはデータ下位側のＭＳＢとデータ上位側のオール（Ａｌｌ）“１”検出５０１、データ下位側のＭＳＢと上位側のＡｌｌ“０”検出５０２、或いはサイズビットの“０”検出を行い、いずれかの条件が成立するとき、サイズビットは“０”となる。すなわち、入力が１６ビットデータか、入力が３２ビットデータで、かつ、データ上位側が符号拡張のときにサイズビットが“０”となる。
Ａｌｌ“１”検出５０１とＡｌｌ“０”検出５０２は、図５（ｂ），（ｃ）に示されるように、それぞれＡＮＤツリー、ＮＯＲツリーを構成することで実現できる。同図（ｂ）がＡｌｌ“１”検出、（ｃ）がＡｌｌ“０”検出である。
【００６３】
図６に、図４のデータ保持部４０４のうちレジスタ［ｉ］（０≦ｉ≦７）の構成図を示す。
サイズビット６０１、データ上位側６０２、データ下位側６０３は、￣φ１（φ１の反転）のクロックが供給されるラッチで構成される。ビット幅はそれぞれ１ビット、１６ビット、１６ビットである。サイズビット６０１、データ下位側のデータ６０３のラッチは、レジスタ［ｉ］のライトイネーブル信号を表す制御部からのライトイネーブル［ｉ］と、￣φ１のゲーテッドクロックである。データ上位側は、ライトイネーブル［ｉ］とゲーテッドクロック￣φ１に加え、サイズビットとのゲーテッドクロックである。すなわち、データ上位側は、サイズビットが“１”で、かつ、上位側が符号拡張でなく、イネーブルなデータのときのみライトされる。
【００６４】
レジスタファイルはビット幅が大きいので、サイズビットが“０”のときのデータ上位側のライト抑止による電力低減の効果は大きい。データが全て１６ビットのプログラムを実行した場合、サイズビットが全て“０”となることから、レジスタファイル部において約５０％の電力削減が可能である。
【００６５】
図７に、図３のロードストア部３１０の構成例を示す。ロードストア部７０１はロード部７０２とストア部７０５から成り、ロードデータ、ストアデータはレジスタファイル３１２と接続される。ロードストアバス７０９はデータの上位、下位ビットの３２ビットのビット幅で、ＣＰＵ内の内部データ信号はサイズビットと、データ上位、下位ビットとの３３ビットのビット幅で接続される。ロード出力とストア入力はどちらも３３ビットである。
【００６６】
ロード部７０２に関して、ロードサイズの情報は、制御部３０８で命令をデコードすることにより得られる。１６ビットロード命令の実行時はサイズビットが“０”、３２ビットロード命令の実行時はサイズビットが“１”となる。そして、制御部３０８によりロードの適切なタイミングに応じて、３２ビットロード命令では上位側ロードイネーブル信号７０３と下位側ロードイネーブル信号７０４が“１”、１６ビットロード命令では下位側ロードイネーブル信号７０４のみが“１”となり、データが正しくロードされる。
ストア部７０５に関して、ストア命令の種類とサイズ情報から適正なデータを生成しストアする。
【００６７】
３２ビットストア命令でデータのサイズ情報が“０”のときは、下位データのＭＳＢを符号拡張して生成した３２ビットデータをストアする必要がある。そこで、ストア用の上位データはサイズビットが“０”のときは下位データＭＳＢの符号拡張、サイズビットが“１”のときは上位データを選択するセレクタ７０６を用意する。そして、制御部３０８によりストアの適切なタイミングに応じて、３２ビットストア命令では上位側ストアイネーブル信号７０７と下位側ストアイネーブル信号７０８が“１”、１６ビットストア命令では下位側ストアイネーブル信号７０８のみが“１”となり、ストア用に生成されたデータが正しくストアされる。
【００６８】
以上により、本発明の第１の実施の形態として、図１の加減算回路（ＡＬＵ）と、図４、５、６のレジスタファイルと、図７のロードストア部及びそれらを用いた図３に示すマイクロプロセッサとを示した。
【００６９】
＜実施の形態２＞
図８に、本発明に係る演算装置の第２の実施の形態である加減算回路のブロック図を示す。前述した第１の実施の形態の図１の加減算回路（ＡＬＵ）では、下位レジスタを起点とし、ＭＳＢを符号拡張し、上位側の加算器で加算するパスがタイミングが最も厳しいクリティカルパスである。そこで、そのクリティカルパスを解消するのが、図８の回路構成である。図１以外は、第１の実施の形態と共通である。
【００７０】
図８の加減算回路のブロック図を説明する。加減算回路の２つの入力データをデータ１とデータ２とする。図８において、参照符号８０１及び８０２はデータ１を上位側と下位側に２分する際の上位レジスタと下位レジスタである。例としてデータ１のビット幅を３２ビットとすると、レジスタ８０１は１６ビットの上位側、レジスタ８０２は下位側に相当する。データ１には、サイズ情報Ｓ１を示すサイズビットレジスタ８０３がある。同様に、８０４及び８０５はデータ２を上位側と下位側に２分する際の上位レジスタと下位レジスタであり、８０６はデータ２のサイズビットレジスタである。
【００７１】
上記レジスタは全てフリップフロップで構成され、クロックのφ１の立ち上がりで動作する。８０７及び８０８はそれぞれデータの上位側、下位側の加算器である。８０９は制御部であり、演算の減算を示すＳＵＢと並列演算を示すＳＭＤ信号を出力し、演算の制御を行う。また、図８では省略してあるが、制御部８０９は上記レジスタのイネーブル信号も命令単位で出力する。８１０及び８１１は減算を行う際に使用するデータ２とＳＵＢ信号を入力とするＥＯＲゲートであり、それぞれデータ２の上位側、下位側に対応する。８１２はデータ２のサイズビットＳ２に従ってＳＵＢ信号をマスクするためのＡＮＤゲートである。
【００７２】
また、８１３はキャリー制御部であり、データ１とデータ２のサイズビットレジスタ８０３，８０６のサイズ情報Ｓ１，Ｓ２と、ＳＵＢ信号、ＳＭＤ信号を入力とし、下位側の加算器８０８から上位側の加算器８０７への桁上げ信号の制御を行う。キャリー制御用のため、キャリー保持レジスタ８１４により以前のキャリーを保持する。サイズ情報が異なるデータの演算を行うときは、サイズを合わせるためにビット長の小さいデータを符号拡張して加算する必要がある。
【００７３】
本実施の形態では、高速化を図るため、インクリメンタ、デクリメンタを用いて、上位側を予め計算しておき、下位側から上位側加算器へのキャリーインＣＩＵにより上位側の加算結果を決定するインクリメンタ／デクリメンタ制御部８１５を使用する。上位結果セレクタ８１６において、データ１とデータ２のビット幅が異なるときはインクリメンタ／デクリメンタ制御部８１５の出力を選択し、データ１とデータ２のビット幅が同じときは上位側加算器８０７の結果データＤ３Ｈをライン８１７に出力する。ライン８１８にデータ下位側加算器８０８の演算結果データＤ３Ｌを出力する。演算結果に付随する情報として、ライン８１９に結果サイズＳ３を出力する。
【００７４】
前述した第１の実施の形態との相違点は、第１の実施の形態が符号拡張制御により符号拡張データを上位側加算器に入力していたのに対し、本実施の形態では、インクリメンタ、デクリメンタを用いてインクリメンタ／デクリメンタ制御部８１５にて、上位側加算器８０７を用いずに高速に計算している点である。インクリメンタ／デクリメンタ制御部８１５内の“＋１”はインクリメンタであり、入力をＤとすると“Ｄ＋１”を出力し、“−１”はデクリメンタであり、入力をＤとすると“Ｄ−１”を出力する。インクリメンタ／デクリメンタ制御部８１５の動作を説明するために、表２を用いて説明する。尚、インクリメンタ／デクリメンタ制御部８１５以外の動作は図１と同じであるため、説明を省略する。
【００７５】
【表２】
0004015411.tif 000003
インクリメンタ／デクリメンタ制御部８１５は、入力データ１とデータ２のビット幅が異なるときに使用するので、表２の第１項の下位ＭＳＢは、ビット幅が“０”のデータの下位ＭＳＢである。
【００７６】
第２項のキャリーＣＩＵは下位加算器８０８から上位加算器８０７へのキャリーであり、第３項はビット幅が“１”の上位側データをＤとしたときの上位側演算結果である。例としてデータ１のサイズを“１”、データ２のサイズを“０”とすると、下位ＭＳＢはデータ２の下位桁のＭＳＢを指し、データ１の上位側データがＤとなる。
【００７７】
下位ＭＳＢが“０”で、キャリーＣＩＵが“０”のときは、上位側の演算結果がＤであることからデータ１の上位側データＤをスルー出力するように、インクリメンタ／デクリメンタ制御部８１５の出力で選択される。
【００７８】
下位ＭＳＢが“０”で、キャリーＣＩＵが“１”のときは、上位側の演算結果がＤ＋１であるので、データ１の上位側データＤのインクリメンタ結果を出力するように、インクリメンタ／デクリメンタ制御部８１５で選択される。
【００７９】
下位ＭＳＢが“１”で、キャリーＣＩＵが０のときは、上位側の演算結果がＤ−１であるので、データ１の上位側データＤのデクリメンタ結果を出力するように、インクリメンタ／デクリメンタ制御部８１５で選択される。
【００８０】
下位ＭＳＢが“１”で、キャリーＣＩＵが“１”のときは、上位側の演算結果がＤであることからデータ１の上位側データＤをスルー出力するように、インクリメンタ／デクリメンタ制御部８１５で選択される。
以上のように、インクリメンタ／デクリメンタ制御部８１５を用いて、上位側加算を行う例を示した。
【００８１】
図１の上位側加算器を用いる場合に対し、下位桁からのキャリーインＣＩＵから上位側加算結果に至る論理段数が小さいため、高速化が可能である。図８では、両データが１６ビットの演算が連続するとき、インクリメンタ／デクリメンタ制御部８１５の論理が動作してしまうため、図１に対し、電力を消費するが、両データのサイズビットが“０”のときに、セレクタの固定、データの固定を行うことにより、図１と同等の消費電力化も可能である。
【００８２】
＜実施の形態３＞
図９は本発明の第３の実施の形態を示す固定小数点の加減算回路のブロック図である。これまでの第１及び第２の実施の形態は、データの形式が整数に限って説明してきた。ＤＳＰなどのデジタル信号処理では、データの形式として固定小数点を使用する。本実施の形態では、データの形式が固定小数点の演算においても回路に変更を加えることで対応できることを示す。
【００８３】
加減算回路の２つの入力データをデータ１とデータ２とする。図９において、参照符号９０１及び９０２はデータ１を上位側と下位側に２分する際の上位レジスタと下位レジスタである。例としてデータ１のビット幅を３２ビットとすると、レジスタ９０１は１６ビットの上位側、レジスタ９０２は下位側に相当する。データ１には、サイズ情報を示すサイズビットレジスタ９０３がある。同様に、９０４及び９０５は、データ２を上位側と下位側に２分する際の上位レジスタと下位レジスタであり、９０６はデータ２のサイズビットレジスタである。上記レジスタは全てフリップフロップで構成され、クロックφ１の立ち上がりで動作する。９０７及び９０８はそれぞれデータの上位側、下位側の加算器である。９０９は制御部であり、演算の減算を示すＳＵＢ信号と並列演算を示すＳＭＤ信号を出力し、演算の制御を行う。また、図９では省略してあるが、制御部９０９は上記レジスタのイネーブル信号も命令単位で出力する。
【００８４】
９１０及び９１１は、減算を行う際に使用するデータ２とＳＵＢ信号を入力とするＥＯＲゲートであり、それぞれデータ２の上位側、下位側に対応する。９１２は、データ２のサイズビットに従ってＳＵＢ信号をマスクするためのＡＮＤゲートである。
【００８５】
９１３は下位桁加算器のキャリーイン制御部であり、データ１とデータ２のサイズビットレジスタ９０３，９０６を入力とし、下位側の加算器９０８へのキャリーイン制御を行う。キャリーイン制御部９１３用のためにキャリー保持レジスタ９１４により以前のキャリーを保持する。９１５は上位桁加算器９０７へのキャリー制御部であり、データ１とデータ２のサイズビットレジスタ９０３，９０６と、ＳＵＢ信号及びＳＭＤ信号を入力とし、下位側の加算器９０８から上位側の加算器９０７への桁上げ信号の制御を行う。サイズ情報が異なるデータの演算を行うときに、下位桁をスルー出力する制御をスルー制御部９１６にて行う。出力ライン９１７及び９１８に、それぞれデータ上位側及び下位側の演算結果データＤ３Ｈ，Ｄ３Ｌを出力する。演算結果に付随する情報として、ライン９１９に結果サイズＳ３を出力する。
【００８６】
図９の加減算回路の動作を説明する前に、図１０の固定小数点における演算について説明する。図１０は表１の命令のうち４通りの加減算の例を示している。なお、図１０において、△は小数点位置を表す。
【００８７】
(１)データ１、データ２共に３２ビットの加算（ＡＤＤ３２）の場合：
データ１とデータ２共に３２ビットなので、どちらもサイズビットは“１”である。３２ビット加算なので、下位加算器９０８のキャリーは“０”、上位加算器９０７のキャリーインＣＩＵは下位加算器からの桁上げ（キャリーアウト）ＣＯである。結果は３２ビットであり、サイズは“１”となる。
【００８８】
(２)データ１が３２ビット、データ２が１６ビットの加算（ＡＤＤ３２）の場合：
データ１は３２ビットなので、サイズビットが“１”、データ２は１６ビットなので、サイズビットは“０”である。サイズビットが“０”のとき、小数点位置に合わせてデータを配置すると、下位桁のデータはゼロとなる。下位桁に注目すると、データ１の下位桁Ｄ１Ｌと、ゼロとの加算なので、下位桁の結果はデータ１の下位桁Ｄ１Ｌをスルー出力すればよい。そこで、下位桁加算器９０８の入力として、Ｄ１側にＤ１Ｌを、Ｄ２側に前サイクルデータを、キャリーインＣＩＬに前サイクルキャリーＣをそれぞれ与える。そしてＤ１Ｌのスルー出力は、加算器９０８とは別の下位結果スルー制御部９１６を使用する。上位側加算のキャリーインＣＩＵは強制的に“０”を与え、上位側加算器９１７にて加算する。結果は３２ビットであり、サイズは“１”となる。
【００８９】
(３)データ１、データ２が１６ビットの加算（ＡＤＤ１６）の場合：
データ１とデータ２は、１６ビットなのでサイズビットは“０”である。下位側は演算に無関係なため、ドントケアである。そこで、下位側は前サイクルと同じ結果となるようにする。すなわち、入力データを前サイクルと同じデータにして、下位側加算のキャリーインＣＩＬを前サイクルと同じキャリーＣとすればよい。上位側加算のキャリーインＣＩＵを“０”とすれば、結果の上位１６ビットは正しい演算結果が得られる。結果のサイズは“０”となる。
【００９０】
(４)データ１、データ２が１６ビットの並列減算（ＳＵＢＳ１６）の場合：
データ１とデータ２は、３２ビットなのでサイズビットは“１”である。上位側と下位側を並列に演算させるため、データ２の入力を反転し、上位側加算のキャリーインＣＩＵ、下位側加算のキャリーインＣＩＬをどちらも“１”とする。結果は３２ビットであり、サイズは“１”となる。
【００９１】
次に、図９の加減算回路の動作、特にキャリー上位制御部９１５、キャリー下位制御９１３に関して説明する。
【００９２】
(１)データ１、データ２が３２ビットのＡＤＤ３２命令、またはＳＵＢ３２命令の場合：
上位桁加算器９０７と下位桁加算器９０８を用いる。入力として、データ１のサイズビットレジスタ９０３に“１”、データ１の上位レジスタ９０１と下位レジスタ９０２にそれぞれＤ１Ｈ、Ｄ１Ｌが格納される。データ２も同様にサイズビットレジスタ９０６に“１”、データ２の上位レジスタ９０４と下位レジスタ９０５にそれぞれＤ２Ｈ、Ｄ２Ｌが格納される。
【００９３】
制御部９０９からＳＵＢ信号が供給され、ＳＵＢ３２命令のとき“１”、ＡＤＤ３２命令のとき“０”となる。キャリー下位制御部９１３では、ＳＵＢ信号が選択されるため、下位加算器９０８へのキャリーインＣＩＬはＳＵＢ３２命令のとき“１”、ＡＤＤ３２命令のとき“０”となる。上位加算器９０７へのキャリーインＣＩＵは、下位加算器９０８からの桁上げＣＯである。上位加算器９０７、下位９０８へのデータ２の入力は、ＳＵＢ信号との排他的論理和ＥＯＲであるため、ＡＤＤ３２命令のときはそれぞれＤ２Ｈ、Ｄ２Ｌであり、ＳＵＢ３２命令のときはそれぞれ￣Ｄ２Ｈ、￣Ｄ２Ｌである。下位桁、上位桁ともに加算結果を結果とする。
【００９４】
(２)データ１、データ２の一方が３２ビットで、もう一方が１６ビットのＡＤＤ３２命令、またはＳＵＢ３２命令の場合：上位桁加算器９０７と下位桁スルー制御部９１６を用いる。例としてデータ２側を１６ビットとすると、入力として、データ１のサイズビットレジスタ９０３に“１”、データ１の上位レジスタ９０１と下位レジスタ９０２にそれぞれＤ１Ｈ、Ｄ１Ｌが格納される。データ２はサイズビットレジスタ９０６に“０”、データ２の上位レジスタ９０４にＤ２Ｈが格納される。データ２の下位レジスタ９０５は変化しない。
【００９５】
制御部９０９からＳＵＢ信号が供給され、ＳＵＢ３２命令のとき“１”、ＡＤＤ３２命令のとき“０”となる。キャリー下位制御部９１３では、キャリー保持信号が選択されるため、下位加算器９０８へのキャリーインＣＩＬはＣとなる。上位加算器へのキャリーインＣＩＵは、ＳＵＢ信号が選択されるため、上位加算器９０７へのキャリーインＣＩＵはＳＵＢ３２命令のとき“１”、ＡＤＤ３２命令のとき“０”となる。下位桁ではＡＤＤ３２命令、ＳＵＢ３２命令のどちらの場合も、データ１の下位桁スルー出力Ｄ１Ｌが正しい結果となるため、下位結果スルー制御部９１６にて、データ１の下位桁Ｄ１Ｌを出力するよう制御される。
【００９６】
データ２入力は、ＳＵＢ信号とのＥＯＲであるため、ＡＤＤ３２命令のときはＤ２ＨとＤ２Ｌであり、ＳＵＢ３２命令のときは￣Ｄ２ＨとＤ２Ｌである。データ２側が１６ビットのときは、ＳＵＢ信号による反転がマスクされる。上位桁は加算結果を結果とする。
【００９７】
(３)データ１、データ２のどちらも１６ビットのＡＤＤ１６命令、またはＳＵＢ１６命令の場合：
上位桁加算器９０７と下位桁スルー制御９１６を用いる。入力として、データ１のサイズビットレジスタ９０３に“０”、データ１の上位レジスタ９０１にＤ１Ｈが格納される。データ１の下位レジスタ９０２は変化しない。同様に、データ２はサイズビットレジスタ９０６に“０”、データ２の上位レジスタ９０４にＤ２Ｈが格納され、データ２の下位レジスタ９０５は変化しない。
【００９８】
制御部９０９からＳＵＢ信号が供給され、ＳＵＢ１６命令のときは“１”となり、ＡＤＤ１６命令のときは“０”となる。キャリー下位制御部９１３では、キャリー保持信号が選択されるため、下位加算器９０８へのキャリーインＣＩＬはＣとなる。上位加算器９０７へのキャリーインＣＩＵは、ＳＵＢ信号が選択されるため、上位加算器へのキャリーインＣＩＵはＳＵＢ１６命令のとき“１”となり、ＡＤＤ１６命令のとき“０”となる。下位桁の加算器９０８は、データ１、データ２の入力、キャリーイン信号ＣＩＬはいずれも前サイクルの値と同じであるため、１６ビット命令が連続するときは、下位桁加算器９０８の電力を消費しない。
【００９９】
データ２入力は、ＳＵＢ信号との排他的論理和ＥＯＲであるため、ＡＤＤ１６命令のときはＤ２Ｈ、Ｄ２Ｌであり、ＳＵＢ３２命令のときは￣Ｄ２Ｈ、Ｄ２Ｌである。データ２側は１６ビットなので、ＳＵＢ信号による反転がマスクされる。下位桁、上位桁は加算結果を結果とする。
【０１００】
(４)データ１、データ２のどちらも３２ビットの並行命令ＡＤＤＳ１６、命令またはＳＵＢＳ１６命令の場合：
上位桁加算器９０７と下位桁加算器９０８を用いる。入力として、データ１のサイズビットレジスタ９０３に“１”、データ１の上位レジスタ９０１と下位レジスタ９０２にそれぞれＤ１Ｈ、Ｄ１Ｌが格納される。データ２も同様にサイズビットレジスタ９０６に“１”、データ２の上位レジスタ９０４と下位レジスタ９０５にそれぞれＤ２Ｈ、Ｄ２Ｌが格納される。制御部９０９からＳＵＢ信号が供給され、ＳＵＢＳ１６命令のときは“１”、ＡＤＤＳ１６命令のときは“０”となる。また、ＳＭＤ信号が供給され“１”である。キャリー下位制御部９１３では、ＳＵＢ信号が選択されるため、ＳＵＢＳ１６命令のときは“１”となり、ＡＤＤＳ１６命令のときは“０”となる。上位加算器９０７へのキャリーインＣＩＵも同様に、ＳＵＢ信号が選択されるため、上位加算器へのキャリーインＣＩＵはＳＵＢＳ１６命令のときは“１”となり、ＡＤＤＳ１６命令のときは“０”となる。データ２入力は、ＳＵＢ信号との排他的論理和ＥＯＲであるため、ＡＤＤ１６命令のときはＤ２Ｈ、Ｄ２Ｌであり、ＳＵＢ３２命令のときは￣Ｄ２Ｈ、￣Ｄ２Ｌである。下位桁、上位桁は加算結果を結果とする。
【０１０１】
以上のように、図９に示す加減算器において、固定小数点データにおける表２の命令の動作を示した。１６ビット命令では、下位側の加算器９０８の２つの入力データＤ１，Ｄ２とキャリーイン信号ＣＩＬが固定されるため、１６ビット命令が連続するときは、下位側加算器９０８の電力が消費されないという利点を持つ。
【０１０２】
本実施の形態では、図３のＣＰＵ３０５をＤＳＰに置きかえた場合に、データを固定小数点の形式としたＡＬＵ３１１の構成例を図９に示した。固定小数点データ形式のＤＳＰとするためには、レジスタファイル３１２やロードストアユニット３１０も変更する必要がある。
【０１０３】
本実施の形態におけるレジスタファイルのデータチェック部４０３の構成例を図１１に示す。図５ではデータの上位側が符号拡張であるかどうかを調べたが、図１１では下位１６ビットがゼロであるかどうかを調べ、ゼロであるときにサイズビットを“０”とする。入力、出力はどちらもサイズビットと、データ上位側と、データ下位側であり、ビット幅はそれぞれ１ビット、１６ビット、１６ビットである。
【０１０４】
サイズビットは下位側のＡｌｌ“０”検出１１０１あるいはサイズビットの“０”検出を行い、いずれかの条件が成立するときにサイズビットは“０”となる。すなわち、入力が１６ビットデータか、入力が３２ビットデータで、かつ、下位側がゼロのときにサイズビットが“０”となる。Ａｌｌ“０”検出１１０１は図５（ｃ）に示したように、それぞれＮＯＲツリーにより構成される。
【０１０５】
図１２に、本実施の形態におけるレジスタファイルのデータ保持部４０４のうち、レジスタ［ｉ］（０≦ｉ≦７）の構成図を示す。図５ではデータのサイズが“０”のとき、上位側のラッチの更新を抑止したが、図１２では、データのサイズが“０”のとき、下位側のラッチの更新を抑止する。サイズビット１２０１、データ上位側１２０２、データ下位側１２０３は￣φ１（φ１の反転）のクロックが供給されるラッチで構成される。ビット幅はそれぞれ１ビット、１６ビット、１６ビットである。サイズビット１２０１、データ上位側のデータ１２０２のラッチは、レジスタ［ｉ］のライトイネーブル信号を表す制御部９０９からのライトイネーブル［ｉ］と￣φ１のゲーテッドクロックである。データ下位側１２０３はライトイネーブル［ｉ］と￣φ１に加え、サイズビット１２０１とのゲーテッドクロックである。
【０１０６】
すなわち、データ下位側は、サイズビットが“１”で下位側がゼロでなく、イネーブルなデータのときのみライトされる。レジスタファイルはビット幅が大きいので、サイズビットが“０”のときのデータ下位側のライト抑止による電力低減の効果は大きい。データが全て１６ビットのプログラムを実行した場合、サイズビットが全て“０”となることから、レジスタファイル部において約５０％の電力削減が可能である。
【０１０７】
図１３に、本実施の形態におけるロードストア部の構成を示す。
ロードストア部１３０１はロード部１３０２とストア部１３０６から成り、ロードデータとストアデータはレジスタファイルと接続される。ロードストアバス１３１０はデータの上位ビットと下位ビットとの３２ビットであり、ＣＰＵ内の内部データ信号はサイズビットと、データ上位ビットと、下位ビットとの３３ビットのビット幅で接続される。ロードデータ出力とストア入力は、どちらも３３ビットである。
【０１０８】
ロード部１３０２では、ロードサイズの情報は制御部９０９において命令をデコードすることにより得られ、１６ビットロード命令の実行時はサイズビットが“０”となり、３２ビットロード命令の実行時はサイズビットが“１”となる。そして、３２ビットロード時（ワードロード＝“０”）は、バス１３１０上のデータがそのままロードデータとなるが、１６ビットロード時（ワードロード＝“１”）には、バス上の下位データがロードデータの上位側のデータとなる。
【０１０９】
そこで、制御部９０９によりロードの適切なタイミングに応じて、３２ビットロード命令では上位側ロードイネーブル信号１３０３と下位側ロードイネーブル信号１３０４が“１”、かつ、ワードロード信号１３０５が“０”となり、バス上の３２ビットデータがそのままロードデータとなる。１６ビットロード命令では、下位側ロードイネーブル信号１３０４とワードロード信号１３０５が“１”なので、バス上の下位データが、上位側のロードデータとなり、正しくロードされる。
【０１１０】
ストア部１３０６では、ストア命令の種類とサイズ情報から適正なデータを生成しストアする。３２ビットストア命令でデータのサイズ情報が“１”のときは、上位側のストアデータをバス上の上位側に、下位側のストアデータをバス上の下位側にストアする。１６ビットストア命令は、上位側のストアデータをバス上の下位側にストアし、３２ビットストア命令でデータのサイズ情報が“０”のときは、下位データをゼロにマスクした３２ビットデータをストアする必要がある。そこで、ストア用の下位データは、３２ビットストア時（ワードストア＝“０”）にサイズビットが“０”のときは下位データをゼロにマスクし、１６ビットストア時（ワードストア＝“１”）に上位側データとなるようにワードストア信号１３０７により動作するセレクタを用意する。そして、制御部９０９によりストアの適切なタイミングに応じて、３２ビットストア命令では上位側ストアイネーブル信号１３０８と下位側ストアイネーブル信号１３０９が“１”、１６ビットストア命令では下位側ストアイネーブル信号１３０９のみが“１”となり、ストア用に生成されたデータが正しくストアされる。
【０１１１】
図１３のロード部１３０２においては、図７に対しバス上の下位側のデータを上位側のロードデータとするセレクタがある点、ストア部１３０６においては、図７の構成では符号拡張用のセレクタがあるのに対し、図１３の構成では、上位側のストアデータをバス上の下位側のデータとするセレクタがあるという相違点がある。
【０１１２】
以上に述べた図１０のＡＬＵと、図４、図１１、図１２のレジスタファイルと、図１３のロードストアユニットを、図３の構成で使用することにより、固定小数点データによるＤＳＰが構成できる。
【０１１３】
以上、本発明の好適な実施の形態についてを述べたが、本発明は前記実施の形態に限定するわけではなく、本発明の精神を逸脱しない範囲において種々の設計変更をなし得ることは勿論である。例えば、実施の形態ではビット幅に関して、全長３２ビットに対し１６ビットずつに２分しているが、全長や分割単位の変更の拡張も容易である。全長１２８ビット、８ビットずつ１６分割してもよい。
また、図６と図９では、￣φ１クロックのラッチを用いて構成したが、φ１クロックのフリップフロップを用いたレジスタファイルへの拡張も容易である。
【０１１４】
【発明の効果】
前述した実施の形態より明らかなように、本発明によれば、演算データにサイズ情報を設け、データを上位と下位に分割し、データ単位にサイズビットを設け、サイズビットにより有効／無効を判定して、演算を最小の有効データ幅で動作させる。すなわち、サイズ情報に基づいて常に最小の有効データ幅での演算が可能となるため、常に最大データ幅を使用する従来の演算装置に比べて、電力削減ができる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態を示す加減算回路の構成例を示すブロック図。
【図２】表１に示した命令のうちの４通りの加減算の例を示す説明図。
【図３】第１〜３の実施の形態の加減算回路を適用するマイクロプロセッサのブロック図。
【図４】第１〜３の実施の形態のレジスタファイルの構成例を示すブロック図。
【図５】第１及び第２の実施の形態のレジスタファイルのデータ保持部の構成例を示すブロック図。
【図６】第１及び第２の実施の形態のレジスタファイルのデータチェック部の構成例を示すブロック図。
【図７】第１及び第２の実施の形態のロードストア部の構成例を示すブロック図。
【図８】第２の実施の形態の加減算回路の構成例を示すブロック図。
【図９】第３の実施の形態の加減算回路の構成例を示すブロック図。
【図１０】表１に示した命令のうちの４通りの固定小数点における演算例を示す説明図。
【図１１】第３の実施の形態のレジスタファイルのデータチェック部の構成例を示すブロック図。
【図１２】第３の実施の形態のレジスタファイルのデータ保持部の構成例を示すブロック図。
【図１３】第３の実施の形態のロードストア部の構成例を示すブロック図。
【符号の説明】
１０１，８０１，９０１…データ１の上位桁レジスタ、１０２，８０２，９０２…データ１の下位桁レジスタ、１０３，８０３，９０３…データ１のサイズビットレジスタ、１０４，８０４，９０４…データ２の上位桁レジスタ、１０５，８０５，９０５…データ２の下位桁レジスタ、１０６，８０６，９０６…データ２のサイズビットレジスタ、１０７，８０７，９０７…上位桁加算器、１０８，８０８，９０８…下位桁加算器、１０９，８０９，９０９…制御部、１１０，１１１，８１０，８１１，９１０，９１１…ＥＯＲゲート、１１２，８１２，９１２…ＡＮＤゲート、１１３，８１３…キャリー制御部、１１４，８１４，９１４…キャリー保持レジスタ、１１５…符号拡張制御部、１１６，８１７，９１７…結果上位桁の出力ライン、１１７，８１８，９１８…結果下位桁の出力ライン、１１８、８１９、９１９…結果サイズの出力ライン、３０１…外部メモリ、３０２…外部データバス、３０３…外部アドレスバス、３０４…マイクロプロセッサ（ＭＰＵ）、３０５…ＣＰＵ、３０６…バスインターフェースユニット、３０７…ロードストアバス、３０８…制御部、３０９…データパス部、３１０，７０１，１３０１…ロードストア部、３１１…ＡＬＵ、３１２…レジスタファイル、４０２…入力セレクタ、４０３…データチェック部、４０４…データ保持部、４０５，６０１，１２０１…サイズレジスタ、４０６，６０２，１２０２…上位桁レジスタ、４０７，６０３，１２０３…下位桁レジスタ、４０８…出力セレクタ、５０１…Ａｌｌ“１”検出、５０２，１１０１…Ａｌｌ“０”検出、７０２，１３０２…ロード部、７０３，１３０３…ロードイネーブル上位、７０４，１３０４…ロードイネーブル下位、７０５，１３０６…ストア部、７０６…ストア上位桁セレクタ、７０７，１３０８…ストアイネーブル上位、７０８，１３０９…ストアイネーブル下位、８１５…インクリメンタ／デクリメンタ制御部、８１６…上位結果セレクタ、９１３…キャリー下位制御部、９１５…キャリー上位制御部、９１６…下位結果スルー制御部、１３０５…ワードロード信号、１３０７…ワードストア信号、１３１０…ロードストアバス、Ｄ１Ｈ…データ１の上位ビット、Ｄ２Ｈ…データ２の上位ビット、Ｄ３Ｈ…データ上位側の演算結果、Ｄ１Ｌ…データ１の下位ビット、Ｄ２Ｌ…データ２の下位ビット、Ｄ３Ｌ…データ下位側の演算結果、ＳＭＤ信号…並列演算を示す信号、ＳＵＢ信号…減算を示す信号、ＣＩＵ…上位側加算器へのキャリーイン、ＣＩＬ…下位側加算器へのキャリーイン、Ｓ，Ｓ１，Ｓ２，Ｓ３…サイズビット。
【図１】
0004015411.tif 000004
【図２】
0004015411.tif 000005
【図３】
0004015411.tif 000006
【図４】
0004015411.tif 000007
【図５】
0004015411.tif 000008
【図６】
0004015411.tif 000009
【図７】
0004015411.tif 000010
【図８】
0004015411.tif 000011
【図９】
0004015411.tif 000012
【図１０】
0004015411.tif 000013
【図１１】
0004015411.tif 000014
【図１２】
0004015411.tif 000015
【図１３】
0004015411.tif 000016