JP4015411B2 - 演算装置及びその演算装置を用いた情報処理装置 - Google Patents
演算装置及びその演算装置を用いた情報処理装置 Download PDFInfo
- Publication number
- JP4015411B2 JP4015411B2 JP2001379549A JP2001379549A JP4015411B2 JP 4015411 B2 JP4015411 B2 JP 4015411B2 JP 2001379549 A JP2001379549 A JP 2001379549A JP 2001379549 A JP2001379549 A JP 2001379549A JP 4015411 B2 JP4015411 B2 JP 4015411B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- carry
- size information
- bit
- output
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Executing Machine-Instructions (AREA)
Description
【発明の属する技術分野】
本発明は、マイクロプロセッサやデジタルシグナルプロセッサ等に使用される演算装置およびその演算装置を用いた情報処理装置に関する。
【0002】
【従来の技術】
近年のマイクロプロセッサでは、レジスタファイルや演算器群、それらを結ぶ内部バスを同ビット幅とし、制御論理を簡単化することで、ハードウェアの複雑化を避け、大幅な周波数向上を遂げてきた。一方、機器組み込み向けアプリケーションプログラムでは、コストに直接影響するメモリ容量を削減するために、必要最低限のビット幅のデータを使用することが多い。
【0003】
そこで、メモリからのロードデータや即値の有効ビット幅が演算器やレジスタファイルのビット幅より小さい場合、演算器やレジスタファイルのビット幅に合うよう符号拡張される。例えば、画像情報で有効ビット幅が8ビットのとき、演算器ビット幅が32ビットであれば、上位24ビットを符号拡張し、32ビットデータとして演算される。有効ビット8ビットのみ動作させる場合に対し、上位24ビット分の電力が多く消費される。
【0004】
このため、消費電力を抑えるために演算器を有効ビット幅で動作させるいくつかの方法が知られている。
【0005】
例えば、特開平7−248895号公報(従来例1)に示されるように、Nビットの演算器を上位側の(N−K)ビットと下位側Kビットに分割し、入力データがKビットのみ有効である場合は、演算器の入力データの(N−K)ビットを“0”(論理レベル)とし、キャリー伝搬を抑止することで、上位側の演算器を停止させる。
【0006】
また、特開平7−271554号公報(従来例2)に示されるように、入力データの上位側のビットを“0”とする代わりに、上位側のラッチ更新を抑止することによって同様の低消費電力化が行われる。この場合、データの有効ビット幅の制御は、低消費電力のためのモードビットを参照して行っている。
【0007】
別の方法として、特開2000−112712号公報(従来例3)に示されるように、入力データから有効ビット幅を検出する方法がある。例えば8ビット加算器で、入力データから有効桁をチェックし、下位4ビットのみが有効とすると、上位側のビットを“0”に固定する。そして、加算結果は下位4ビットと下位の最上位ビットの符号拡張から得られる。但し、下位桁から上位桁へのキャリー伝搬は抑止されていない。
【0008】
このように、低消費電力のために演算器の動作ビット数を減少する方法がいくつか知られている。すなわち、従来の演算器の制御方法として、キャリー伝搬抑止に加え、
制御方法A: 上位側加算器の入力を“0”固定する方法(従来例1や従来例3に相当)、
制御方法B: 上位側ラッチ更新抑止による上位側データを固定する方法(従来例2に相当)、が知られている。
ここで、キャリー伝搬抑止とは、下位側のみ有効の場合に、上位側にキャリー“0”を出力することを指す。
【0009】
また、従来の演算器の制御単位としては、
制御単位A: 特殊レジスタに設定するモードビットを参照する方法、
制御単位B: 命令をデコードし、命令単位で制御する方法、
制御単位C: データによって制御する方法、が知られている。
【0010】
【発明が解決しようとする課題】
しかしながら、前述した上記の従来の演算器の制御方法AとBによれば、次のような問題点がある。
上位側加算器の入力を“0”固定する制御方法Aの場合、上位側を使用しない下位桁のみ有効命令であっても、最初のサイクルの電力消費は抑止できないという問題点がある。なお、2サイクル目以降、下位桁のみ有効な命令が連続する場合には電力が消費されない。
上位側ラッチ更新抑止による上位側データを固定する制御方法Bの場合、上位側を使用しない下位桁のみ有効命令であっても、直前の命令で下位加算器から上位加算器へのキャリー信号が“1”(論理レベル)であったとき、最初のサイクルの電力消費を抑止することができないという問題点がある。下位桁のみ有効な命令では、常にキャリー信号として“0”が供給されるためである。なお、2サイクル目以降、下位桁のみ有効な命令が連続する場合には電力が消費されない。
【0011】
また、前述した従来の演算器の制御単位A,B,Cによれば、次のような難点がある。
モードビットを参照する制御単位Aの制御方法の場合、実現は最も容易であるが、モードビット設定のためのオーバヘッドがあるという点である。モードビットを設定するためには、モードビットを設定するための命令を実行する必要がある。
命令単位で制御する制御単位Bの場合、各命令を制御部にてデコードし、必要ビット幅の制御を出力する。モードビット参照の制御単位Aの方法に比べれば、命令単位で制御が行えるので電力削減の効果が大きいが、演算器を最大幅使用すると定義した命令では、データの有効桁によらず常に演算器は最大幅で動作するという問題がある。
データ単位で制御する制御単位Cの制御方法が、最も電力削減効果が高い方法である。データの有効桁が命令の有効桁より小さい場合は、命令で定義した演算器の使用幅より小さい幅でしか動作しないという利点がある。実現方法は入力データをチェックし、符号拡張部分を調べ、最小のビット幅で演算させればよい。
【0012】
ところで、CPU(Central Processing Unit)あるいはDSP(Digital Signal Processor)の電力としては、演算器のみではなく、レジスタファイルやレジスタファイルと演算器が接続される内部バスで消費される電力も無視できない。そして、レジスタファイルの上位ビットが固定された場合、レジスタファイルの上位ビットの電力が消費しない利点がある。また、内部バスにおいても、上位ビットが固定された場合、内部バスの上位ビットの電力が消費しない利点がある。
【0013】
そこで、本発明の目的は、下位桁のみ有効な命令が実行されるとき、最初のサイクルの電力消費をも抑止することができる演算装置を提供することである。
【0014】
また、この本発明に係る演算装置を用いて、データ単位で演算器のみでなく、CPUあるいはDSP全体の消費電力を削減することができる情報装置を提供することも本発明の目的の一つである。
【0015】
【課題を解決するための手段】
本発明に係る演算装置は、入力される第1及び第2のデータをそれぞれ上位側と下位側に分割し、
前記第1及び第2のデータに上位側と下位側の有効の情報を有するサイズ情報を有し、
前記第1及び第2のデータの上位側と、下位側と、サイズ情報とを保持する記憶手段と、
前記第2のデータを反転する反転手段と、
前記第2の上位側のデータの反転を抑止する反転抑止手段と、
演算の制御を行う制御手段と、
前記第1のデータの下位側と、前記第2のデータの下位側の反転手段出力と、前記制御手段の制御信号とを入力とする第1の演算手段と、
前記第1及び第2の下位側のデータの最上位ビットを上位側のデータとして使用するための論理手段と、
前記論理手段出力に対し、前記第1の上位側のデータと、反転抑止手段とを選択する上位側入力選択手段と、
前記桁上げ記憶手段と、前記第1の演算手段の桁上げと、前記第1及び第2のデータのサイズ情報と、前記制御手段の制御信号とを入力とする前記第2の演算手段の入力の桁上げを生成する桁上げ生成手段と、
前記桁上げ生成手段出力の桁上げを記憶する桁上げ記憶手段と、
前記上位側入力選択手段の出力と前記桁上げ生成手段出力とを入力とする第2の演算手段と、
前記第1及び第2のデータのサイズ情報から結果のサイズ情報を生成するサイズ情報生成手段と、
から構成され、
前記第1の演算手段から演算結果の下位側と、前記第2の演算手段から演算結果の上位側とを生成することを特徴とするものである。
【0016】
また、本発明に係る演算装置は、入力される第1及び第2のデータをそれぞれ上位側と下位側に分割し、
前記第1及び第2のデータに上位側と下位側の有効の情報を有するサイズ情報を有し、
前記第1及び第2のデータの上位側と、下位側と、サイズ情報とを保持する記憶手段と、
前記第2のデータを反転する反転手段と、
前記第2の上位側のデータの反転を抑止する反転抑止手段と、
演算の制御を行う制御手段と、
前記第1のデータの下位側と、前記第2のデータの下位側の反転手段出力と、
前記制御手段の制御信号とを入力とする第1の演算手段と、
前記第1の演算手段の桁上げと、前記第1及び第2のデータのサイズ情報と、
前記制御手段の制御信号とを入力とし、桁上げを生成する桁上げ生成手段と、
前記第1及び第2の下位側のデータの最上位ビットと前記第1及び第2のデータのサイズ情報と前記桁上げ生成手段出力の桁上げを入力とする第2の演算手段と、
前記第1の上位側のデータと、反転抑止手段と、前記桁上げ生成手段出力の桁上げとを入力とする第3の演算手段と、
前記桁上げ生成手段出力の桁上げを記憶する桁上げ記憶手段と、
前記第2及び第3の演算手段から結果を選択する上位演算結果選択手段と、
前記第1及び第2のデータのサイズ情報から結果のサイズ情報を生成するサイズ情報生成手段と、
から構成され、
前記第1の演算手段から演算結果の下位側と、前記上位演算結果選択手段から演算結果の上位側とを生成する構成としてもよい。
【0017】
また、本発明に係る演算装置は、入力される第1及び第2のデータをそれぞれ上位側と下位側に分割し、
前記第1及び第2のデータに上位側及び下位側の有効の情報を有するサイズ情報を有し、
前記第1及び第2のデータの上位側及び下位側と、前記サイズ情報とを保持する記憶手段と、
前記第2のデータを反転する反転手段と、
前記第2の上位側のデータの反転を抑止する反転抑止手段と、
演算の制御を行う制御手段と、
前記制御手段の制御信号を保持する制御信号記憶手段と、
前記制御手段の制御信号と前記制御信号記憶手段出力を入力とする第1の選択手段と、
前記第1のデータの下位側と、前記第2のデータの下位側の反転手段出力と、
前記第1の選択手段出力とを入力とする第1の演算手段と、
前記第1及び第2の下位側のデータと、前記第1のデータのサイズ情報とを入力とする第2の選択手段と、
前記第1及び第2のデータのサイズ情報を入力として、前記第1の演算手段と前記第2の選択手段を選択する第3の選択手段と、
前記第1の演算手段の桁上げと、前記第1及び第2のデータのサイズ情報と、
前記制御手段の制御信号とを入力として、桁上げを生成する桁上げ生成手段と、
前記第1の上位側のデータと、前記反転抑止手段の出力と、前記桁上げ生成手段出力の桁上げとを入力とする第2の演算手段と、
前記第1及び第2のデータのサイズ情報から結果のサイズ情報を生成するサイズ情報生成手段と、
から構成され、
前記第3の選択手段から演算結果の下位側と、前記第2の演算手段から演算結果の上位側とを生成する構成であってもよい。
【0018】
また、本発明に係る情報処理装置すなわちマイクロプロセッサやデジタルシグナルプロセッサは、上記のいずれかの演算装置と、
バス上のデータの入力を行う際に、サイズ情報を付加するサイズ情報付加手段と、
前記バス上のデータの出力を行う際に、前記サイズ情報をデータに反映するためにデータを変更する論理手段を持つデータ変更論理手段と、
前記演算装置と、前記サイズ情報付加手段と、前記データ変更論理手段とを接続して、データの記憶とサイズ情報の更新を行うサイズ情報更新手段と、
から構成されることを特徴とするものである。
【0019】
【発明の実施の形態】
以下、本発明の好適な実施の形態について、添付図面を参照しながら詳細に説明する。
【0020】
<実施の形態1>
図1は、本発明に係る演算装置の第1の実施の形態を示す加減算回路のブロック図である。加減算回路の2つの入力データを、データ1及びデータ2とする。
図1において、参照符号101及び102はデータ1を上位側と下位側に2分する際の上位レジスタと下位レジスタである。例としてデータ1のビット幅を32ビットとすると、レジスタ101は16ビットの上位側、レジスタ102は下位側に相当する。データ1には、サイズ情報S1を示すサイズビットレジスタ103がある。サイズ情報S1はデータと常に付随する情報として扱われる。同様に、もう一つの入力データであるデータ2を上位側と下位側に2分する際の上位レジスタ104及び下位レジスタ105と、データ2のサイズ情報S2を示すビットレジスタ106がある。上記レジスタ101〜106は全てフリップフロップで構成され、クロック(clock)φ1の立ち上がりで動作する。
【0021】
107及び108はそれぞれデータ1、データ2の上位側、下位側の加算器である。109は制御部であり、演算の減算を示すSUB信号と並列演算を示すSMD信号を出力し、演算の制御を行う。また、図1では省略してあるが、制御部109は上記レジスタ101〜106のイネーブル信号も命令単位で出力する。
【0022】
110及び111は、減算を行う際に使用するデータ2とSUB信号を入力とするEOR(排他的論理和)ゲートであり、それぞれデータ2の上位側、下位側に対応する。112はデータ2のサイズビットS2に従ってSUB信号をマスクするためのANDゲートである。
【0023】
113はキャリー制御部であり、データ1とデータ2のサイズビットレジスタ103,106に格納されたサイズ情報S1,S2とSUB信号及びSMD信号を入力とし、下位側の加算器108から上位側の加算器107への桁上げ信号の制御を行う。キャリー制御用のために、キャリー保持レジスタ114により以前のキャリーCを保持する。サイズ情報が異なるデータの演算を行うときは、サイズを合わせるためにビット長の小さいデータを符号拡張する必要があり、符号拡張制御部115にてサイズビットレジスタ103,106を入力として符号拡張制御を行う。加算器107,108の出力ライン116,117に、データ上位側及び下位側の演算結果データD3H及びD3Lをそれぞれ出力する。演算結果に付随する情報として、信号ライン118に結果サイズ情報S3を出力する。
【0024】
ここで、図1に示す本実施の形態における加減算回路の動作を説明する前に、表1と図2を参照して、加減算の方法を説明する。データ1とデータ2は、32ビット符号付整数とし、上位16ビットをそれぞれD1H,D2Hと表し、下位16ビットをそれぞれD1L,D2Lと表す。サイズビットは1ビットであり、“1”のとき32ビット、“0”のとき16ビットを示す。
【0025】
【表1】
表1には、本実施の形態における加減算回路で実行される命令と、命令の内容と、上位側加算器107へのキャリーインCIUと、下位側加算器108へのキャリーインCILとを示している。減算命令は“データ1”−“データ2”のみ用意されているが、“データ2”−“データ1”の拡張は容易であり、説明を簡単にするために、“データ1”−“データ2”を実現する回路となっている。
【0026】
表1において、COとは下位側加算器108のキャリーアウトを示し、Cとはキャリー保持レジスタ114に保持されたキャリーを示す。ADD32では少なくとも一方が32ビットのデータでの加算命令を示し、サイズ情報の組合せにより、32+32、16+32、32+16の3通りの演算が起こり得る。
SUB32は、ADD32の加算を減算に置換えた命令である。ADD16とSUB16とはそれぞれ、2つの下位16ビットでの加算と減算を行う命令である。ADDSとSUBSとはそれぞれ、32ビットデータで上位16ビット、下位16ビットを並列に加算と減算を行う命令である。
【0027】
図2は、表1の命令のうち4通りの加減算の例を示している。
(1) データ1が32ビット、データ2が16ビットの加算(ADD32)の場合:
データ1は32ビットなので、サイズビットが“1”、データ2は16ビットなので、サイズビットは“0”である。データ幅が異なる場合、データのビット長が大きいデータとビット長を合わせるために、ビット長が小さいデータは符号拡張を行う。従って、データ2は符号拡張される。32ビット加算なので下位側加算のキャリーインCILは“0”であり、上位側加算のキャリーインCIUは下位側からの桁上げ(キャリーアウト)COである。結果は32ビットであり、サイズは“1”となる。
【0028】
(2) データ1が32ビット、データ2が16ビットの減算(SUB32)の場合:
データ1は32ビットなので、サイズビットが“1”、データ2は16ビットなので、サイズビットは“0”である。32ビット減算なので、データ2は符号拡張と反転を行い、下位側加算のキャリーインCILは“1”であり、上位側加算のキャリーインCIUは下位側からの桁上げCOである。結果は、32ビットであり、サイズは“1”となる。
【0029】
(3) データ1、データ2が16ビットの加算(ADD16)の場合:
データ1、データ2は16ビットなのでサイズビットは“0”である。上位側は演算に無関係なため、ドントケアである。そこで、上位側は前サイクルと同じ結果となるようにする。入力データを前サイクルと同じデータにし、上位側加算のキャリーインCIUを前サイクルと同じキャリーCとすればよい。下位側加算のキャリーインCILを“0”とすれば、結果の下位16ビットは正しい演算結果が得られる。結果のサイズは“0”となる。
【0030】
(4) データ1、データ2が16ビットの並列減算(SUBS16)の場合:
データ1、データ2は32ビットなのでサイズビットは“1”である。上位側と下位側を並列に演算させるため、データ2の入力を反転し、上位側加算のキャリーインCIU、下位側加算のキャリーインCILをどちらも“1”とする。結果は32ビットであり、サイズは“1”となる。
【0031】
次に、図1の加減算器の動作を図2の(2)のSUB32(32ビット−16ビット)を例にとり説明する。データ1入力は32ビットなので、データ1のサイズビットレジスタ103に“1”、データ1の上位レジスタ101と下位レジスタ102にそれぞれD1HとD1Lが格納される。
【0032】
データ2入力は16ビットなので、データ2のサイズビットレジスタ106に“0”、データ2の下位レジスタ105にD2Lが格納され、上位レジスタ104は変化しない。制御部109から減算用の制御信号であるSUB信号には“1”が供給される。SUB信号により、データ2の下位レジスタ105に格納されたデータの出力D2LがEORゲート111により反転されて下位側の加算器108に与えられると共に、下位側の加算器108にキャリーインCILとしてSUB信号の“1”が与えられる。下位側の加算器108において、データ1の下位レジスタ102に格納されたD1Lと、データ2の下位レジスタ105の反転出力 ̄D2L( ̄は、反転記号の代用である)、キャリーインCIL=“1”が入力として与えられ、加算した後、下位側加算器108の結果D3Lが出力ライン117に出力される。下位側加算器108のキャリーアウトCOは、キャリー制御部113に入力されるが、スルー出力で上位側加算器107のキャリーインCIUとして入力される。データ1とデータ2のビット幅を合わせるために、データ2は下位側の最上位ビット(MSB:Most Significant Bit)が符号拡張され、符号拡張制御部115に入力される。EORゲート111の出力のMSBを使用するため、データ2の下位レジスタ105のMSBに対し、反転された符号が拡張されている。符号拡張制御部115では、サイズ情報としてデータ1、データ2のサイズビットレジスタ103、106と上位側データD1H,D2Hと符号拡張された下位側データD1L,D2Lとを入力し、データ幅が同じ場合は上位側データを、データ幅が異なる場合は、データ幅が小さい方のセレクタは符号拡張下位側データを選択する。
【0033】
図2の(2)の例では、データ1側はデータ1の上位レジスタ101の出力D1Hを選択し、データ2側は符号拡張下位側データを選択して、それぞれ上位側加算器107に入力される。上位側加算器で加算し、結果を上位側データD3Hとして出力ライン116に出力する。信号ライン118には結果のサイズS3は、入力サイズのどちらかが32ビットのときは“1”、どちらも16ビットデータのときは“0”となる。図2の(2)の例では結果サイズS3として“1”を出力する。
【0034】
図2の(1)のADD32(32ビット+16ビット)は上記SUB32に対し、制御部109のSUB信号が“0”となることにより実行される。下位側加算器108の変更点は、データ2の入力とキャリーインであるが、SUB信号が“0”になることにより下位側加算器108のデータ2の入力はスルーとなり、キャリーインCILは“0”となる。上位側加算器107のデータ2側のデータとしては、データ2の下位レジスタ105のMSBと同じ値が符号拡張され、供給される。
【0035】
ADD32命令とSUB32命令の上記と異なるデータ幅においては、2つの入力データが32ビットのときは、符号拡張の代わりに上位側のデータを使用することにより実現できる。データ1のビット幅が16ビット、データ2のビット幅が32ビットのときは、データ1の下位側データD1LのMSBを符号拡張することにより実現できる。
【0036】
図2の(3)のADD16(16ビット+16ビット)は、本実施の形態において、上位側の加算器107のトランジスタのスイッチングを抑止する点で、従来例に対し低消費電力を達成する好適な例である。2つの入力はどちらも16ビットであるため、データ1、データ2のサイズビットレジスタ103,106は両方とも“0”である。したがって、データ1、データ2の上位側レジスタ101,104は変更されず、前の値を保持する。データ1、データ2の下位側レジスタ102,105に入力データが格納される。加算のため、制御部109からSUB信号は“0”が出力される。
【0037】
SUB信号の“0”に従って、下位側加算器108の入力として、データ1の下位レジスタ102の出力D1Lと、データ2のEORゲート111のスルー出力と、キャリーインCILの“0”とが与えられ、加算が実行される。加算結果は16ビットであり、結果サイズビットS3は“0”となる。
【0038】
ここで、ADD16命令においては、演算結果の実行に、上位側の加算器107を使用しない。上位側の加算器のスイッチングを停止することで、消費電力が削減できる。上位側加算器の消費電力を削減する方法を説明する。上位側の加算器107のスイッチングを停止するためには、加算器の2つの入力とキャリーインを固定すればよい。固定の方法は次のように行う。
【0039】
まず、データ1、データ2のサイズビットレジスタ103,106がどちらも“0”であることから、符号拡張制御部115のセレクタは、H側すなわちデータ1、データ2の上位側D1H,D2Hが選択される。データ1の上位側レジスタ101は前の値が保持されているため固定、データ2側は、データ2のサイズビットレジスタ106が“0”であることからSUB信号がマスクされ、EORゲート111は、前の値を保持するデータ2の上位側レジスタ104のデータD2Hをスルーで出力するため固定であり、上位側加算器107の2つの入力データは固定となる。キャリーイン信号に関しては、並列実行を示すSMD信号が“0”、2つのサイズビットレジスタ103,106が“0”のため、前のキャリーを保持するキャリー保持レジスタ114の出力Cが上位加算器107のキャリーイン信号CIUとして選択される。キャリー保持レジスタ114の出力が固定値のため、上位加算器107のキャリーイン信号も固定値である。従って、上位加算器107の入力が全て固定され、トランジスタのスイッチングが抑止され、電力を消費しない。
【0040】
SUB16命令では、SUB信号が“1”となるため、下位側のデータ2とキャリーインCILとが反転される点が異なるが、他はADD16命令と同様の処理で実現される。上位側の加算器107に関してはADD16命令と同様に電力を消費しない。
【0041】
更に、ADD16命令かSUB16命令が連続するとき、制御部109からのSUB信号は命令に従って変化するが、データ2のサイズビットレジスタ106の出力S2によってANDゲート112でマスクされることにより、常に固定値の入力が上位加算器107に供給され、電力は消費されない。
【0042】
図2の(4)のSUBS16(“16ビット”−“16ビット”の並列実行)命令は、上位側データと下位側データを次の方法で並列に実行する。下位側の加算器108に、データ1の下位レジスタ102の出力D1Lと、データ2の下位レジスタ105の反転出力 ̄D2Lと、SUB信号“1”によるキャリーインCILの入力とが与えられ、16ビット結果を出力する。2入力のデータサイズはどちらも“1”であることから、符号拡張制御部115では、データ1の上位レジスタ101の出力D1Hとデータ2の上位レジスタ104の反転出力 ̄D2Hが選択され、上位側加算器107の入力データとなる。上位側加算器のキャリーイン信号として、下位側の加算器108からの桁上げ信号伝搬を抑止する必要があるが、制御部109からの並列実行信号SMD信号により下位側からの桁上げ信号伝搬の抑止を行い、SUB信号により強制的に“1”を上位側加算器107のキャリーイン信号CIUとして与えている。
このことにより、下位桁の影響を受けずに並列に16ビット減算を実行することができる。
【0043】
ADDS16命令に関しては、SUB信号が“0”となることにより、上位側および下位側の加算器にそれぞれデータ2の上位レジスタ104のスルー出力D2H、下位レジスタ105のスルー出力をデータ2側の入力として与え、キャリーインCIUとして強制的に“0”とすることにより実現できる。
【0044】
上記のように本実施の形態によれば、データ1、データ2の下位16ビット演算命令が連続するとき、上位加算器107の入力データとキャリーが固定されるため、電力を消費しない。特に、下位16ビット加算命令と下位16ビット減算命令が1命令ずつ交互に実行される場合においても、SUB信号によるデータ2の上位側データのスルーまたは反転がANDゲート112により抑止されるため、上位加算器107の入力データとキャリーが固定され、電力を消費しない。
【0045】
また、下位16ビット演算命令と32ビット演算命令が1命令ずつ交互に実行されるときは、下位16ビット演算命令が実行するときに上位加算器107の電力消費が行われない。従って、下位16ビットのみ有効な命令が実行されるとき、最初のサイクルから電力消費を抑止することができるといえる。
【0046】
従来例の制御方法Aの上位加算器の入力を“0”固定する方法と、制御方法Bの上位側データを固定する方法すなわち上位レジスタを固定する方法とでは、以下のような場合に電力消費を必要とするのに対し、本実施の形態の加減算回路では上述したように電力が消費されない利点がある。
【0047】
制御方法Aの上位加算器の入力を“0”固定する方法では、下位16ビット演算命令が連続する場合、最初の下位16ビット演算命令を実行するときは、上位加算器107の電力を消費するが、その後の下位16ビット演算命令では上位加算器107の電力消費は抑止される。下位16ビット演算命令と32ビット演算命令が1命令ずつ交互に実行される場合、下位16ビット命令を実行するとき、必ず上位加算器107の入力を“0”にするため、前命令の入力が“0”以外のときは常に上位加算器107の電力を消費する。
【0048】
制御方法Bの上位レジスタを固定する方法では、下位16ビット演算命令を実行するとき、上位レジスタを固定し、下位加算器から上位加算器107へのキャリーを強制的に“0”にする。下位16ビット演算命令が連続する場合、最初の下位16ビット演算命令を実行するときは、下位加算器108から上位加算器107へのキャリーを強制的に“0”にするため、前サイクルのキャリーが“1”であると、上位加算器107は電力を消費する。
【0049】
下位16ビット加算命令と下位16ビット減算命令が1命令ずつ交互に実行する場合、データ1とデータ2の上位レジスタを固定しても、データ2が減算命令では反転されるため、上位加算器107のデータ2側の入力が常に反転することになり、消費電力を抑止できない。
【0050】
また、下位16ビット演算命令と32ビット演算命令が1命令ずつ交互に実行される場合、32ビット演算命令実行時に、常に下位加算器108から上位加算器107へのキャリーが“1”であると、下位16ビット演算命令実行時にキャリーを強制的に“0”にするため、下位16ビット演算命令においても常に上位加算器107の電力を消費する。
【0051】
以上のように、下位16ビット演算命令が連続する場合、下位16ビット演算命令と32ビット命令が交互に実行される場合においても、従来に対し消費電力を低く抑えられることを示した。
【0052】
図1では、簡単のために加減算器を示したが、論理ゲートを追加することにより、容易に算術論理演算装置(ALU:Arithmetic and Logic Unit)を実現することができる。
【0053】
図3に、図1の加減算回路を用いたマイクロプロセッサの例として構成図を示す。
【0054】
DRAMやSDRAM等の外部メモリ301は、外部データバス302および外部アドレスバス303によりマイクロプロセッサ304に接続されている。マイクロプロセッサ(MPU)304は、CPU305、および外部とのデータの授受を行うバスインタフェースユニット306から構成され、CPUとバスインタフェースユニット間はロードストアバス307にて接続される。尚、上記DRAMやSDRAM等のメインメモリは外部に設けるのではなく、マイクロプロセッサ304と一緒に1枚の半導体基板内に内蔵されていてもよい。その場合は、バス302や303は同一チップ内の内部バスで構成される。CPU305は、制御部308とデータパス部309から構成される。
【0055】
データパス部は、データのロードおよびストアを行うロードストアユニット310と、図1で示される構成のALU311と、レジスタファイル312とから構成される。図1は加減算器であるが、ALUに容易に機能拡張可能なため、以後ALUと呼ぶことにする。
【0056】
図4にレジスタファイル312の構成例を示す。このレジスタファイル312は、ロードデータとALU演算結果のどちらかを選択する入力セレクタ402と、この入力セレクタ部402で選択されたデータのサイズチェックを行うデータチェック部403と、データを保持するデータ保持部404と、ALUの入力データD1およびデータD2とストアデータをデータ保持部404から選択する出力セレクタ408とから構成される。
【0057】
データ保持部404はレジスタ数は8本で、サイズビットレジスタファイル405と、上位側データレジスタファイル406と、下位側データレジスタファイル407とから構成される。データ保持部404のデータ幅は32ビットで、上位16ビット、下位16ビットである。1ビットのサイズビットは、“0”のとき下位16ビットのみ有効であり、“1”のとき32ビットが有効であることを示す。出力セレクタ408で、ALUデータD1はレジスタ[3:0]、ALUデータD2はレジスタ[7:4]、ストアデータはレジスタ[7:0]のいずれかから任意に選択できることとする。
【0058】
図4のレジスタファイル312の動作を説明する。ロードデータをALUのデータD1として読み出すことを考える。図3に示したCPU305では、ロードストア部310とALU311にフォワーディングセレクタを備えていないことを前提としているので、図4ではロードストア部310とALU311はレジスタファイル312と接続される。
【0059】
まず、入力セレクタ402において、制御部308からロードデータを選択するセレクタ信号が供給され、ロードデータがデータチェック部403の入力に与えられる。
【0060】
データチェック部403では、上位側データが符号拡張であるかどうかをチェックし、入力のサイズが“0”か上位側が符号拡張であれば、サイズを強制的に0にし、それ以外は“1”とする。
【0061】
データ保存部404では、レジスタ[7:0]のいずれかにデータがライト(書込み)される。例として、レジスタ[0]にライトされるとすると、サイズビットレジスタ[0]にサイズビットがライトされ、サイズビットが“0”のとき下位側データレジスタ407のみライトされ、サイズビットが“1”のとき上位側と下位側データレジスタ406,407にライトされる。出力セレクタ部408において、ALUデータD1側のレジスタが[3:0]のいずれかから選択される。
ここでは、[0]レジスタが選択され、ALUデータD1側に[0]レジスタが出力される。
【0062】
図5(a)に、図4のデータチェック部403の構成図を示す。入力および出力は、どちらもサイズビットSと、データ上位側と、データ下位側であり、ビット幅はそれぞれ1ビット、16ビット、16ビットである。サイズビットはデータ下位側のMSBとデータ上位側のオール(All)“1”検出501、データ下位側のMSBと上位側のAll“0”検出502、或いはサイズビットの“0”検出を行い、いずれかの条件が成立するとき、サイズビットは“0”となる。すなわち、入力が16ビットデータか、入力が32ビットデータで、かつ、データ上位側が符号拡張のときにサイズビットが“0”となる。
All“1”検出501とAll“0”検出502は、図5(b),(c)に示されるように、それぞれANDツリー、NORツリーを構成することで実現できる。同図(b)がAll“1”検出、(c)がAll“0”検出である。
【0063】
図6に、図4のデータ保持部404のうちレジスタ[i](0≦i≦7)の構成図を示す。
サイズビット601、データ上位側602、データ下位側603は、 ̄φ1(φ1の反転)のクロックが供給されるラッチで構成される。ビット幅はそれぞれ1ビット、16ビット、16ビットである。サイズビット601、データ下位側のデータ603のラッチは、レジスタ[i]のライトイネーブル信号を表す制御部からのライトイネーブル[i]と、 ̄φ1のゲーテッドクロックである。データ上位側は、ライトイネーブル[i]とゲーテッドクロック ̄φ1に加え、サイズビットとのゲーテッドクロックである。すなわち、データ上位側は、サイズビットが“1”で、かつ、上位側が符号拡張でなく、イネーブルなデータのときのみライトされる。
【0064】
レジスタファイルはビット幅が大きいので、サイズビットが“0”のときのデータ上位側のライト抑止による電力低減の効果は大きい。データが全て16ビットのプログラムを実行した場合、サイズビットが全て“0”となることから、レジスタファイル部において約50%の電力削減が可能である。
【0065】
図7に、図3のロードストア部310の構成例を示す。ロードストア部701はロード部702とストア部705から成り、ロードデータ、ストアデータはレジスタファイル312と接続される。ロードストアバス709はデータの上位、下位ビットの32ビットのビット幅で、CPU内の内部データ信号はサイズビットと、データ上位、下位ビットとの33ビットのビット幅で接続される。ロード出力とストア入力はどちらも33ビットである。
【0066】
ロード部702に関して、ロードサイズの情報は、制御部308で命令をデコードすることにより得られる。16ビットロード命令の実行時はサイズビットが“0”、32ビットロード命令の実行時はサイズビットが“1”となる。そして、制御部308によりロードの適切なタイミングに応じて、32ビットロード命令では上位側ロードイネーブル信号703と下位側ロードイネーブル信号704が“1”、16ビットロード命令では下位側ロードイネーブル信号704のみが“1”となり、データが正しくロードされる。
ストア部705に関して、ストア命令の種類とサイズ情報から適正なデータを生成しストアする。
【0067】
32ビットストア命令でデータのサイズ情報が“0”のときは、下位データのMSBを符号拡張して生成した32ビットデータをストアする必要がある。そこで、ストア用の上位データはサイズビットが“0”のときは下位データMSBの符号拡張、サイズビットが“1”のときは上位データを選択するセレクタ706を用意する。そして、制御部308によりストアの適切なタイミングに応じて、32ビットストア命令では上位側ストアイネーブル信号707と下位側ストアイネーブル信号708が“1”、16ビットストア命令では下位側ストアイネーブル信号708のみが“1”となり、ストア用に生成されたデータが正しくストアされる。
【0068】
以上により、本発明の第1の実施の形態として、図1の加減算回路(ALU)と、図4、5、6のレジスタファイルと、図7のロードストア部及びそれらを用いた図3に示すマイクロプロセッサとを示した。
【0069】
<実施の形態2>
図8に、本発明に係る演算装置の第2の実施の形態である加減算回路のブロック図を示す。前述した第1の実施の形態の図1の加減算回路(ALU)では、下位レジスタを起点とし、MSBを符号拡張し、上位側の加算器で加算するパスがタイミングが最も厳しいクリティカルパスである。そこで、そのクリティカルパスを解消するのが、図8の回路構成である。図1以外は、第1の実施の形態と共通である。
【0070】
図8の加減算回路のブロック図を説明する。加減算回路の2つの入力データをデータ1とデータ2とする。図8において、参照符号801及び802はデータ1を上位側と下位側に2分する際の上位レジスタと下位レジスタである。例としてデータ1のビット幅を32ビットとすると、レジスタ801は16ビットの上位側、レジスタ802は下位側に相当する。データ1には、サイズ情報S1を示すサイズビットレジスタ803がある。同様に、804及び805はデータ2を上位側と下位側に2分する際の上位レジスタと下位レジスタであり、806はデータ2のサイズビットレジスタである。
【0071】
上記レジスタは全てフリップフロップで構成され、クロックのφ1の立ち上がりで動作する。807及び808はそれぞれデータの上位側、下位側の加算器である。809は制御部であり、演算の減算を示すSUBと並列演算を示すSMD信号を出力し、演算の制御を行う。また、図8では省略してあるが、制御部809は上記レジスタのイネーブル信号も命令単位で出力する。810及び811は減算を行う際に使用するデータ2とSUB信号を入力とするEORゲートであり、それぞれデータ2の上位側、下位側に対応する。812はデータ2のサイズビットS2に従ってSUB信号をマスクするためのANDゲートである。
【0072】
また、813はキャリー制御部であり、データ1とデータ2のサイズビットレジスタ803,806のサイズ情報S1,S2と、SUB信号、SMD信号を入力とし、下位側の加算器808から上位側の加算器807への桁上げ信号の制御を行う。キャリー制御用のため、キャリー保持レジスタ814により以前のキャリーを保持する。サイズ情報が異なるデータの演算を行うときは、サイズを合わせるためにビット長の小さいデータを符号拡張して加算する必要がある。
【0073】
本実施の形態では、高速化を図るため、インクリメンタ、デクリメンタを用いて、上位側を予め計算しておき、下位側から上位側加算器へのキャリーインCIUにより上位側の加算結果を決定するインクリメンタ/デクリメンタ制御部815を使用する。上位結果セレクタ816において、データ1とデータ2のビット幅が異なるときはインクリメンタ/デクリメンタ制御部815の出力を選択し、データ1とデータ2のビット幅が同じときは上位側加算器807の結果データD3Hをライン817に出力する。ライン818にデータ下位側加算器808の演算結果データD3Lを出力する。演算結果に付随する情報として、ライン819に結果サイズS3を出力する。
【0074】
前述した第1の実施の形態との相違点は、第1の実施の形態が符号拡張制御により符号拡張データを上位側加算器に入力していたのに対し、本実施の形態では、インクリメンタ、デクリメンタを用いてインクリメンタ/デクリメンタ制御部815にて、上位側加算器807を用いずに高速に計算している点である。インクリメンタ/デクリメンタ制御部815内の“+1”はインクリメンタであり、入力をDとすると“D+1”を出力し、“−1”はデクリメンタであり、入力をDとすると“D−1”を出力する。インクリメンタ/デクリメンタ制御部815の動作を説明するために、表2を用いて説明する。尚、インクリメンタ/デクリメンタ制御部815以外の動作は図1と同じであるため、説明を省略する。
【0075】
【表2】
インクリメンタ/デクリメンタ制御部815は、入力データ1とデータ2のビット幅が異なるときに使用するので、表2の第1項の下位MSBは、ビット幅が“0”のデータの下位MSBである。
【0076】
第2項のキャリーCIUは下位加算器808から上位加算器807へのキャリーであり、第3項はビット幅が“1”の上位側データをDとしたときの上位側演算結果である。例としてデータ1のサイズを“1”、データ2のサイズを“0”とすると、下位MSBはデータ2の下位桁のMSBを指し、データ1の上位側データがDとなる。
【0077】
下位MSBが“0”で、キャリーCIUが“0”のときは、上位側の演算結果がDであることからデータ1の上位側データDをスルー出力するように、インクリメンタ/デクリメンタ制御部815の出力で選択される。
【0078】
下位MSBが“0”で、キャリーCIUが“1”のときは、上位側の演算結果がD+1であるので、データ1の上位側データDのインクリメンタ結果を出力するように、インクリメンタ/デクリメンタ制御部815で選択される。
【0079】
下位MSBが“1”で、キャリーCIUが0のときは、上位側の演算結果がD−1であるので、データ1の上位側データDのデクリメンタ結果を出力するように、インクリメンタ/デクリメンタ制御部815で選択される。
【0080】
下位MSBが“1”で、キャリーCIUが“1”のときは、上位側の演算結果がDであることからデータ1の上位側データDをスルー出力するように、インクリメンタ/デクリメンタ制御部815で選択される。
以上のように、インクリメンタ/デクリメンタ制御部815を用いて、上位側加算を行う例を示した。
【0081】
図1の上位側加算器を用いる場合に対し、下位桁からのキャリーインCIUから上位側加算結果に至る論理段数が小さいため、高速化が可能である。図8では、両データが16ビットの演算が連続するとき、インクリメンタ/デクリメンタ制御部815の論理が動作してしまうため、図1に対し、電力を消費するが、両データのサイズビットが“0”のときに、セレクタの固定、データの固定を行うことにより、図1と同等の消費電力化も可能である。
【0082】
<実施の形態3>
図9は本発明の第3の実施の形態を示す固定小数点の加減算回路のブロック図である。これまでの第1及び第2の実施の形態は、データの形式が整数に限って説明してきた。DSPなどのデジタル信号処理では、データの形式として固定小数点を使用する。本実施の形態では、データの形式が固定小数点の演算においても回路に変更を加えることで対応できることを示す。
【0083】
加減算回路の2つの入力データをデータ1とデータ2とする。図9において、参照符号901及び902はデータ1を上位側と下位側に2分する際の上位レジスタと下位レジスタである。例としてデータ1のビット幅を32ビットとすると、レジスタ901は16ビットの上位側、レジスタ902は下位側に相当する。データ1には、サイズ情報を示すサイズビットレジスタ903がある。同様に、904及び905は、データ2を上位側と下位側に2分する際の上位レジスタと下位レジスタであり、906はデータ2のサイズビットレジスタである。上記レジスタは全てフリップフロップで構成され、クロックφ1の立ち上がりで動作する。907及び908はそれぞれデータの上位側、下位側の加算器である。909は制御部であり、演算の減算を示すSUB信号と並列演算を示すSMD信号を出力し、演算の制御を行う。また、図9では省略してあるが、制御部909は上記レジスタのイネーブル信号も命令単位で出力する。
【0084】
910及び911は、減算を行う際に使用するデータ2とSUB信号を入力とするEORゲートであり、それぞれデータ2の上位側、下位側に対応する。912は、データ2のサイズビットに従ってSUB信号をマスクするためのANDゲートである。
【0085】
913は下位桁加算器のキャリーイン制御部であり、データ1とデータ2のサイズビットレジスタ903,906を入力とし、下位側の加算器908へのキャリーイン制御を行う。キャリーイン制御部913用のためにキャリー保持レジスタ914により以前のキャリーを保持する。915は上位桁加算器907へのキャリー制御部であり、データ1とデータ2のサイズビットレジスタ903,906と、SUB信号及びSMD信号を入力とし、下位側の加算器908から上位側の加算器907への桁上げ信号の制御を行う。サイズ情報が異なるデータの演算を行うときに、下位桁をスルー出力する制御をスルー制御部916にて行う。出力ライン917及び918に、それぞれデータ上位側及び下位側の演算結果データD3H,D3Lを出力する。演算結果に付随する情報として、ライン919に結果サイズS3を出力する。
【0086】
図9の加減算回路の動作を説明する前に、図10の固定小数点における演算について説明する。図10は表1の命令のうち4通りの加減算の例を示している。なお、図10において、△は小数点位置を表す。
【0087】
(1)データ1、データ2共に32ビットの加算(ADD32)の場合:
データ1とデータ2共に32ビットなので、どちらもサイズビットは“1”である。32ビット加算なので、下位加算器908のキャリーは“0”、上位加算器907のキャリーインCIUは下位加算器からの桁上げ(キャリーアウト)COである。結果は32ビットであり、サイズは“1”となる。
【0088】
(2)データ1が32ビット、データ2が16ビットの加算(ADD32)の場合:
データ1は32ビットなので、サイズビットが“1”、データ2は16ビットなので、サイズビットは“0”である。サイズビットが“0”のとき、小数点位置に合わせてデータを配置すると、下位桁のデータはゼロとなる。下位桁に注目すると、データ1の下位桁D1Lと、ゼロとの加算なので、下位桁の結果はデータ1の下位桁D1Lをスルー出力すればよい。そこで、下位桁加算器908の入力として、D1側にD1Lを、D2側に前サイクルデータを、キャリーインCILに前サイクルキャリーCをそれぞれ与える。そしてD1Lのスルー出力は、加算器908とは別の下位結果スルー制御部916を使用する。上位側加算のキャリーインCIUは強制的に“0”を与え、上位側加算器917にて加算する。結果は32ビットであり、サイズは“1”となる。
【0089】
(3)データ1、データ2が16ビットの加算(ADD16)の場合:
データ1とデータ2は、16ビットなのでサイズビットは“0”である。下位側は演算に無関係なため、ドントケアである。そこで、下位側は前サイクルと同じ結果となるようにする。すなわち、入力データを前サイクルと同じデータにして、下位側加算のキャリーインCILを前サイクルと同じキャリーCとすればよい。上位側加算のキャリーインCIUを“0”とすれば、結果の上位16ビットは正しい演算結果が得られる。結果のサイズは“0”となる。
【0090】
(4)データ1、データ2が16ビットの並列減算(SUBS16)の場合:
データ1とデータ2は、32ビットなのでサイズビットは“1”である。上位側と下位側を並列に演算させるため、データ2の入力を反転し、上位側加算のキャリーインCIU、下位側加算のキャリーインCILをどちらも“1”とする。結果は32ビットであり、サイズは“1”となる。
【0091】
次に、図9の加減算回路の動作、特にキャリー上位制御部915、キャリー下位制御913に関して説明する。
【0092】
(1)データ1、データ2が32ビットのADD32命令、またはSUB32命令の場合:
上位桁加算器907と下位桁加算器908を用いる。入力として、データ1のサイズビットレジスタ903に“1”、データ1の上位レジスタ901と下位レジスタ902にそれぞれD1H、D1Lが格納される。データ2も同様にサイズビットレジスタ906に“1”、データ2の上位レジスタ904と下位レジスタ905にそれぞれD2H、D2Lが格納される。
【0093】
制御部909からSUB信号が供給され、SUB32命令のとき“1”、ADD32命令のとき“0”となる。キャリー下位制御部913では、SUB信号が選択されるため、下位加算器908へのキャリーインCILはSUB32命令のとき“1”、ADD32命令のとき“0”となる。上位加算器907へのキャリーインCIUは、下位加算器908からの桁上げCOである。上位加算器907、下位908へのデータ2の入力は、SUB信号との排他的論理和EORであるため、ADD32命令のときはそれぞれD2H、D2Lであり、SUB32命令のときはそれぞれ ̄D2H、 ̄D2Lである。下位桁、上位桁ともに加算結果を結果とする。
【0094】
(2)データ1、データ2の一方が32ビットで、もう一方が16ビットのADD32命令、またはSUB32命令の場合:上位桁加算器907と下位桁スルー制御部916を用いる。例としてデータ2側を16ビットとすると、入力として、データ1のサイズビットレジスタ903に“1”、データ1の上位レジスタ901と下位レジスタ902にそれぞれD1H、D1Lが格納される。データ2はサイズビットレジスタ906に“0”、データ2の上位レジスタ904にD2Hが格納される。データ2の下位レジスタ905は変化しない。
【0095】
制御部909からSUB信号が供給され、SUB32命令のとき“1”、ADD32命令のとき“0”となる。キャリー下位制御部913では、キャリー保持信号が選択されるため、下位加算器908へのキャリーインCILはCとなる。上位加算器へのキャリーインCIUは、SUB信号が選択されるため、上位加算器907へのキャリーインCIUはSUB32命令のとき“1”、ADD32命令のとき“0”となる。下位桁ではADD32命令、SUB32命令のどちらの場合も、データ1の下位桁スルー出力D1Lが正しい結果となるため、下位結果スルー制御部916にて、データ1の下位桁D1Lを出力するよう制御される。
【0096】
データ2入力は、SUB信号とのEORであるため、ADD32命令のときはD2HとD2Lであり、SUB32命令のときは ̄D2HとD2Lである。データ2側が16ビットのときは、SUB信号による反転がマスクされる。上位桁は加算結果を結果とする。
【0097】
(3)データ1、データ2のどちらも16ビットのADD16命令、またはSUB16命令の場合:
上位桁加算器907と下位桁スルー制御916を用いる。入力として、データ1のサイズビットレジスタ903に“0”、データ1の上位レジスタ901にD1Hが格納される。データ1の下位レジスタ902は変化しない。同様に、データ2はサイズビットレジスタ906に“0”、データ2の上位レジスタ904にD2Hが格納され、データ2の下位レジスタ905は変化しない。
【0098】
制御部909からSUB信号が供給され、SUB16命令のときは“1”となり、ADD16命令のときは“0”となる。キャリー下位制御部913では、キャリー保持信号が選択されるため、下位加算器908へのキャリーインCILはCとなる。上位加算器907へのキャリーインCIUは、SUB信号が選択されるため、上位加算器へのキャリーインCIUはSUB16命令のとき“1”となり、ADD16命令のとき“0”となる。下位桁の加算器908は、データ1、データ2の入力、キャリーイン信号CILはいずれも前サイクルの値と同じであるため、16ビット命令が連続するときは、下位桁加算器908の電力を消費しない。
【0099】
データ2入力は、SUB信号との排他的論理和EORであるため、ADD16命令のときはD2H、D2Lであり、SUB32命令のときは ̄D2H、D2Lである。データ2側は16ビットなので、SUB信号による反転がマスクされる。下位桁、上位桁は加算結果を結果とする。
【0100】
(4)データ1、データ2のどちらも32ビットの並行命令ADDS16、命令またはSUBS16命令の場合:
上位桁加算器907と下位桁加算器908を用いる。入力として、データ1のサイズビットレジスタ903に“1”、データ1の上位レジスタ901と下位レジスタ902にそれぞれD1H、D1Lが格納される。データ2も同様にサイズビットレジスタ906に“1”、データ2の上位レジスタ904と下位レジスタ905にそれぞれD2H、D2Lが格納される。制御部909からSUB信号が供給され、SUBS16命令のときは“1”、ADDS16命令のときは“0”となる。また、SMD信号が供給され“1”である。キャリー下位制御部913では、SUB信号が選択されるため、SUBS16命令のときは“1”となり、ADDS16命令のときは“0”となる。上位加算器907へのキャリーインCIUも同様に、SUB信号が選択されるため、上位加算器へのキャリーインCIUはSUBS16命令のときは“1”となり、ADDS16命令のときは“0”となる。データ2入力は、SUB信号との排他的論理和EORであるため、ADD16命令のときはD2H、D2Lであり、SUB32命令のときは ̄D2H、 ̄D2Lである。下位桁、上位桁は加算結果を結果とする。
【0101】
以上のように、図9に示す加減算器において、固定小数点データにおける表2の命令の動作を示した。16ビット命令では、下位側の加算器908の2つの入力データD1,D2とキャリーイン信号CILが固定されるため、16ビット命令が連続するときは、下位側加算器908の電力が消費されないという利点を持つ。
【0102】
本実施の形態では、図3のCPU305をDSPに置きかえた場合に、データを固定小数点の形式としたALU311の構成例を図9に示した。固定小数点データ形式のDSPとするためには、レジスタファイル312やロードストアユニット310も変更する必要がある。
【0103】
本実施の形態におけるレジスタファイルのデータチェック部403の構成例を図11に示す。図5ではデータの上位側が符号拡張であるかどうかを調べたが、図11では下位16ビットがゼロであるかどうかを調べ、ゼロであるときにサイズビットを“0”とする。入力、出力はどちらもサイズビットと、データ上位側と、データ下位側であり、ビット幅はそれぞれ1ビット、16ビット、16ビットである。
【0104】
サイズビットは下位側のAll“0”検出1101あるいはサイズビットの“0”検出を行い、いずれかの条件が成立するときにサイズビットは“0”となる。すなわち、入力が16ビットデータか、入力が32ビットデータで、かつ、下位側がゼロのときにサイズビットが“0”となる。All“0”検出1101は図5(c)に示したように、それぞれNORツリーにより構成される。
【0105】
図12に、本実施の形態におけるレジスタファイルのデータ保持部404のうち、レジスタ[i](0≦i≦7)の構成図を示す。図5ではデータのサイズが“0”のとき、上位側のラッチの更新を抑止したが、図12では、データのサイズが“0”のとき、下位側のラッチの更新を抑止する。サイズビット1201、データ上位側1202、データ下位側1203は ̄φ1(φ1の反転)のクロックが供給されるラッチで構成される。ビット幅はそれぞれ1ビット、16ビット、16ビットである。サイズビット1201、データ上位側のデータ1202のラッチは、レジスタ[i]のライトイネーブル信号を表す制御部909からのライトイネーブル[i]と ̄φ1のゲーテッドクロックである。データ下位側1203はライトイネーブル[i]と ̄φ1に加え、サイズビット1201とのゲーテッドクロックである。
【0106】
すなわち、データ下位側は、サイズビットが“1”で下位側がゼロでなく、イネーブルなデータのときのみライトされる。レジスタファイルはビット幅が大きいので、サイズビットが“0”のときのデータ下位側のライト抑止による電力低減の効果は大きい。データが全て16ビットのプログラムを実行した場合、サイズビットが全て“0”となることから、レジスタファイル部において約50%の電力削減が可能である。
【0107】
図13に、本実施の形態におけるロードストア部の構成を示す。
ロードストア部1301はロード部1302とストア部1306から成り、ロードデータとストアデータはレジスタファイルと接続される。ロードストアバス1310はデータの上位ビットと下位ビットとの32ビットであり、CPU内の内部データ信号はサイズビットと、データ上位ビットと、下位ビットとの33ビットのビット幅で接続される。ロードデータ出力とストア入力は、どちらも33ビットである。
【0108】
ロード部1302では、ロードサイズの情報は制御部909において命令をデコードすることにより得られ、16ビットロード命令の実行時はサイズビットが“0”となり、32ビットロード命令の実行時はサイズビットが“1”となる。そして、32ビットロード時(ワードロード=“0”)は、バス1310上のデータがそのままロードデータとなるが、16ビットロード時(ワードロード=“1”)には、バス上の下位データがロードデータの上位側のデータとなる。
【0109】
そこで、制御部909によりロードの適切なタイミングに応じて、32ビットロード命令では上位側ロードイネーブル信号1303と下位側ロードイネーブル信号1304が“1”、かつ、ワードロード信号1305が“0”となり、バス上の32ビットデータがそのままロードデータとなる。16ビットロード命令では、下位側ロードイネーブル信号1304とワードロード信号1305が“1”なので、バス上の下位データが、上位側のロードデータとなり、正しくロードされる。
【0110】
ストア部1306では、ストア命令の種類とサイズ情報から適正なデータを生成しストアする。32ビットストア命令でデータのサイズ情報が“1”のときは、上位側のストアデータをバス上の上位側に、下位側のストアデータをバス上の下位側にストアする。16ビットストア命令は、上位側のストアデータをバス上の下位側にストアし、32ビットストア命令でデータのサイズ情報が“0”のときは、下位データをゼロにマスクした32ビットデータをストアする必要がある。そこで、ストア用の下位データは、32ビットストア時(ワードストア=“0”)にサイズビットが“0”のときは下位データをゼロにマスクし、16ビットストア時(ワードストア=“1”)に上位側データとなるようにワードストア信号1307により動作するセレクタを用意する。そして、制御部909によりストアの適切なタイミングに応じて、32ビットストア命令では上位側ストアイネーブル信号1308と下位側ストアイネーブル信号1309が“1”、16ビットストア命令では下位側ストアイネーブル信号1309のみが“1”となり、ストア用に生成されたデータが正しくストアされる。
【0111】
図13のロード部1302においては、図7に対しバス上の下位側のデータを上位側のロードデータとするセレクタがある点、ストア部1306においては、図7の構成では符号拡張用のセレクタがあるのに対し、図13の構成では、上位側のストアデータをバス上の下位側のデータとするセレクタがあるという相違点がある。
【0112】
以上に述べた図10のALUと、図4、図11、図12のレジスタファイルと、図13のロードストアユニットを、図3の構成で使用することにより、固定小数点データによるDSPが構成できる。
【0113】
以上、本発明の好適な実施の形態についてを述べたが、本発明は前記実施の形態に限定するわけではなく、本発明の精神を逸脱しない範囲において種々の設計変更をなし得ることは勿論である。例えば、実施の形態ではビット幅に関して、全長32ビットに対し16ビットずつに2分しているが、全長や分割単位の変更の拡張も容易である。全長128ビット、8ビットずつ16分割してもよい。
また、図6と図9では、 ̄φ1クロックのラッチを用いて構成したが、φ1クロックのフリップフロップを用いたレジスタファイルへの拡張も容易である。
【0114】
【発明の効果】
前述した実施の形態より明らかなように、本発明によれば、演算データにサイズ情報を設け、データを上位と下位に分割し、データ単位にサイズビットを設け、サイズビットにより有効/無効を判定して、演算を最小の有効データ幅で動作させる。すなわち、サイズ情報に基づいて常に最小の有効データ幅での演算が可能となるため、常に最大データ幅を使用する従来の演算装置に比べて、電力削減ができる。
【図面の簡単な説明】
【図1】本発明の第1の実施の形態を示す加減算回路の構成例を示すブロック図。
【図2】表1に示した命令のうちの4通りの加減算の例を示す説明図。
【図3】第1〜3の実施の形態の加減算回路を適用するマイクロプロセッサのブロック図。
【図4】第1〜3の実施の形態のレジスタファイルの構成例を示すブロック図。
【図5】第1及び第2の実施の形態のレジスタファイルのデータ保持部の構成例を示すブロック図。
【図6】第1及び第2の実施の形態のレジスタファイルのデータチェック部の構成例を示すブロック図。
【図7】第1及び第2の実施の形態のロードストア部の構成例を示すブロック図。
【図8】第2の実施の形態の加減算回路の構成例を示すブロック図。
【図9】第3の実施の形態の加減算回路の構成例を示すブロック図。
【図10】表1に示した命令のうちの4通りの固定小数点における演算例を示す説明図。
【図11】第3の実施の形態のレジスタファイルのデータチェック部の構成例を示すブロック図。
【図12】第3の実施の形態のレジスタファイルのデータ保持部の構成例を示すブロック図。
【図13】第3の実施の形態のロードストア部の構成例を示すブロック図。
【符号の説明】
101,801,901…データ1の上位桁レジスタ、102,802,902…データ1の下位桁レジスタ、103,803,903…データ1のサイズビットレジスタ、104,804,904…データ2の上位桁レジスタ、105,805,905…データ2の下位桁レジスタ、106,806,906…データ2のサイズビットレジスタ、107,807,907…上位桁加算器、108,808,908…下位桁加算器、109,809,909…制御部、110,111,810,811,910,911…EORゲート、112,812,912…ANDゲート、113,813…キャリー制御部、114,814,914…キャリー保持レジスタ、115…符号拡張制御部、116,817,917…結果上位桁の出力ライン、117,818,918…結果下位桁の出力ライン、118、819、919…結果サイズの出力ライン、301…外部メモリ、302…外部データバス、303…外部アドレスバス、304…マイクロプロセッサ(MPU)、305…CPU、306…バスインターフェースユニット、307…ロードストアバス、308…制御部、309…データパス部、310,701,1301…ロードストア部、311…ALU、312…レジスタファイル、402…入力セレクタ、403…データチェック部、404…データ保持部、405,601,1201…サイズレジスタ、406,602,1202…上位桁レジスタ、407,603,1203…下位桁レジスタ、408…出力セレクタ、501…All“1”検出、502,1101…All“0”検出、702,1302…ロード部、703,1303…ロードイネーブル上位、704,1304…ロードイネーブル下位、705,1306…ストア部、706…ストア上位桁セレクタ、707,1308…ストアイネーブル上位、708,1309…ストアイネーブル下位、815…インクリメンタ/デクリメンタ制御部、816…上位結果セレクタ、913…キャリー下位制御部、915…キャリー上位制御部、916…下位結果スルー制御部、1305…ワードロード信号、1307…ワードストア信号、1310…ロードストアバス、D1H…データ1の上位ビット、D2H…データ2の上位ビット、D3H…データ上位側の演算結果、D1L…データ1の下位ビット、D2L…データ2の下位ビット、D3L…データ下位側の演算結果、SMD信号…並列演算を示す信号、SUB信号…減算を示す信号、CIU…上位側加算器へのキャリーイン、CIL…下位側加算器へのキャリーイン、S,S1,S2,S3…サイズビット。
Claims (4)
- 入力される第1及び第2のデータをそれぞれ上位側と下位側に分割し、
前記第1及び第2のデータに上位側と下位側の有効の情報を有するサイズ情報を有し、
前記第1及び第2のデータの上位側と、下位側と、サイズ情報とを保持する記憶手段と、
前記第2のデータを反転する反転手段と、
前記第2の上位側のデータの反転を抑止する反転抑止手段と、
演算の制御を行う制御手段と、
前記第1のデータの下位側と、前記第2のデータの下位側の反転手段出力と、前記制御手段の制御信号とを入力とする第1の演算手段と、
前記第1及び第2の下位側のデータの最上位ビットを上位側のデータとして使用するための論理手段と、
前記論理手段出力に対し、前記第1の上位側のデータと、反転抑止手段とを選択する上位側入力選択手段と、
前記第1の演算手段の桁上げと、前記第1及び第2のデータのサイズ情報と、前記制御手段の制御信号とを入力とする桁上げ生成手段と、
前記桁上げ生成手段出力の桁上げを記憶する桁上げ記憶手段と、前記上位側入力選択手段の出力と前記桁上げ生成手段出力とを入力とする第2の演算手段と、
前記第1及び第2のデータのサイズ情報から結果のサイズ情報を生成するサイズ情報生成手段と、
から構成され、
前記第1の演算手段から演算結果の下位側と、前記第2の演算手段から演算結果の上位側とを生成することを特徴とする演算装置。 - 入力される第1及び第2のデータをそれぞれ上位側と下位側に分割し、
前記第1及び第2のデータに上位側と下位側の有効の情報を有するサイズ情報を有し、
前記第1及び第2のデータの上位側と、下位側と、サイズ情報とを保持する記憶手段と、
前記第2のデータを反転する反転手段と、
前記第2の上位側のデータの反転を抑止する反転抑止手段と、
演算の制御を行う制御手段と、
前記第1のデータの下位側と、前記第2のデータの下位側の反転手段出力と、前記制御手段の制御信号とを入力とする第1の演算手段と、
前記第1の演算手段の桁上げと、前記第1及び第2のデータのサイズ情報と、前記制御手段の制御信号とを入力とし、桁上げを生成する桁上げ生成手段と、
前記第1及び第2の下位側のデータの最上位ビットと前記第1及び第2のデータのサイズ情報と前記桁上げ生成手段出力の桁上げと、前記第1の上位側のデータと、
反転抑止手段の出力とを入力とする第2の演算手段と、
前記第1の上位側のデータと、反転抑止手段と、前記桁上げ生成手段出力の桁上げとを入力とする第3の演算手段と、
前記桁上げ生成手段出力の桁上げを記憶する桁上げ記憶手段と、
前記第2及び第3の演算手段から結果を選択する上位演算結果選択手段と、
前記第1及び第2のデータのサイズ情報から結果のサイズ情報を生成するサイズ情報生成手段と、から構成され、
前記第1の演算手段から演算結果の下位側と、前記上位演算結果選択手段から演算結果の上位側とを生成することを特徴とする演算装置。 - 入力される第1及び第2のデータをそれぞれ上位側と下位側に分割し、
前記第1及び第2のデータに上位側及び下位側の有効の情報を有するサイズ情報を有し、
前記第1及び第2のデータの上位側及び下位側と、前記サイズ情報とを保持する記憶手段と、
前記第2のデータを反転する反転手段と、
前記第2の下位側のデータの反転を抑止する反転抑止手段と、
演算の制御を行う制御手段と、
前記制御手段の制御信号を保持する制御信号記憶手段と、
前記制御手段の制御信号と前記制御信号記憶手段出力とを入力とする第1の選択手段と、
前記第1のデータの下位側と、前記反転抑止手段の出力と、
前記第1の選択手段出力とを入力とする第1の演算手段と、
前記第1及び第2の下位側のデータと、前記第1のデータのサイズ情報とを入力とする第2の選択手段と、
前記第1及び第2のデータのサイズ情報を入力として、前記第1の演算手段と前記第2の選択手段を選択する第3の選択手段と、
前記第1の演算手段の桁上げと、前記第1及び第2のデータのサイズ情報と、前記制御手段の制御信号とを入力として、桁上げを生成する桁上げ生成手段と、
前記第1の上位側のデータと、前記第2のデータの上位側の反転手段出力と、前記桁上げ生成手段出力の桁上げとを入力とする第2の演算手段と、
前記第1及び第2のデータのサイズ情報から結果のサイズ情報を生成するサイズ情報生成手段と、
から構成され、
前記第3の選択手段から演算結果の下位側と、前記第2の演算手段から演算結果の上位側とを生成することを特徴とする演算装置。 - 請求項1〜3のいずれか1項に記載の演算装置と、
バス上のデータの入力を行う際に、サイズ情報を付加するサイズ情報付加手段と、
前記バス上のデータの出力を行う際に、前記サイズ情報をデータに反映するためにデータを変更する論理手段を持つデータ変更論理手段と、
前記演算装置と、前記サイズ情報付加手段と、前記データ変更論理手段とを接続して、データの記憶とサイズ情報の更新を行うサイズ情報更新手段と、
から構成されることを特徴とする情報処理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001379549A JP4015411B2 (ja) | 2001-12-13 | 2001-12-13 | 演算装置及びその演算装置を用いた情報処理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001379549A JP4015411B2 (ja) | 2001-12-13 | 2001-12-13 | 演算装置及びその演算装置を用いた情報処理装置 |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2003177911A JP2003177911A (ja) | 2003-06-27 |
JP2003177911A5 JP2003177911A5 (ja) | 2005-07-28 |
JP4015411B2 true JP4015411B2 (ja) | 2007-11-28 |
Family
ID=19186873
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001379549A Expired - Fee Related JP4015411B2 (ja) | 2001-12-13 | 2001-12-13 | 演算装置及びその演算装置を用いた情報処理装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4015411B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4861312B2 (ja) | 2004-06-18 | 2012-01-25 | ザ・トラスティーズ・オブ・ザ・ユニバーシティ・オブ・ペンシルバニア | 光回路と回路素子およびそれらを形成する方法 |
JP2009187075A (ja) * | 2008-02-04 | 2009-08-20 | Japan Radio Co Ltd | デジタル回路 |
-
2001
- 2001-12-13 JP JP2001379549A patent/JP4015411B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2003177911A (ja) | 2003-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100294559B1 (ko) | 마이크로컴퓨터및제산회로 | |
US8832166B2 (en) | Floating point multiplier circuit with optimized rounding calculation | |
US6889240B2 (en) | Data processing device having a central processing unit and digital signal processing unit | |
US5426600A (en) | Double precision division circuit and method for digital signal processor | |
US5957996A (en) | Digital data comparator and microprocessor | |
JP3556252B2 (ja) | オフセット合計を計算するデータ処理システムとその方法 | |
JPS6227412B2 (ja) | ||
JP4015411B2 (ja) | 演算装置及びその演算装置を用いた情報処理装置 | |
JPH1173408A (ja) | 演算処理システム及び演算処理方法 | |
JP3579087B2 (ja) | 演算器およびマイクロプロセッサ | |
JPH08221257A (ja) | データ処理装置用除算器 | |
US5351207A (en) | Methods and apparatus for subtraction with 3:2 carry-save adders | |
US6205535B1 (en) | Branch instruction having different field lengths for unconditional and conditional displacements | |
US6584556B1 (en) | Modulo address generation method and apparatus | |
JP2001216136A (ja) | 加算回路およびプロセッサ | |
JP2004021573A (ja) | データ処理装置 | |
Mathis et al. | Implementation of high performance IEEE 754-posit conversion hardware | |
US7590677B2 (en) | Processor with summation instruction using overflow counter | |
JP3759742B2 (ja) | データ処理装置 | |
US7580967B2 (en) | Processor with maximum and minimum instructions | |
JP3539914B2 (ja) | マイクロコンピュータ | |
JP2001256039A (ja) | 浮動小数点演算装置および演算方法 | |
JPH03255524A (ja) | 加算回路 | |
JPH08263290A (ja) | データ処理装置 | |
KR20000021050A (ko) | 저 전력 프로그래머블 코어의 데이터 메모리 어드레스 발생 회로 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041210 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041210 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20061220 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20061226 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070214 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20070214 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070605 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070726 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20070821 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070913 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100921 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110921 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110921 Year of fee payment: 4 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313111 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110921 Year of fee payment: 4 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120921 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120921 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130921 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |