(57)【特許請求の範囲】
【請求項１】
算術論理演算器と、
この算術論理演算器で処理するデータを格納する第１のデータ格納部と、
この第１のデータ格納部から出力されたデータを左シフトし、かつデータのビット長を拡張して算術論理演算器に送るシフタとを備え、
所定量の左シフトとビット長拡張及び演算が１命令で実行されることを特徴とするマイクロプロセッサ。
【請求項２】
算術論理演算器と、
この算術論理演算器で処理するデータを格納する第１のデータ格納部と、
算術論理演算器で処理されたデータを格納する第２のデータ格納部と、
この第２のデータ格納部から第１のデータ格納部へ送られるデータを右シフトするシフタとを備え、
所定量の右シフトとビット長縮小及び演算が１命令で実行されることを特徴とするマイクロプロセッサ。
【請求項３】
算術論理演算器と、この算術論理演算器で処理する第１のデータを格納する第１のデータ格納部と、算術論理演算器で処理された第２のデータを格納する第２のデータ格納部と、第１のデータ格納部から算術論理演算器に送られる第１のデータを左シフトしかつデータのビット長を拡張し、第２のデータ格納部から第１のデータ格納部に送られる第２のデータを第１のデータのシフト方向とは逆の方向にシフトしかつデータのビット長を縮小するシフタとを備え、このシフタにおけるデータのシフト量が命令により指定されるマイクロプロセッサ。
【請求項４】
請求項１のマイクロプロセッサにおいて、
データが転送される第３のデータ格納部と、第３のデータ転送部を構成する各ビットのうち１つを選択しそこに格納されるデータいかんで算術論理演算器に演算を行わない制御を与えるビット選択部とを備え、第３のデータ格納部を構成する各ビットのうち選択すべき対象ビットが命令により指定されるマイクロプロセッサ。
【請求項５】
請求項１のマイクロプロセッサにおいて、
シフタでのシフト量をさらに増加させ得るシフト量増加部と、データが転送される第３のデータ格納部と、第３のデータ転送部を構成する各ビットのうち複数を選択しそれらに格納されるデータいかんで算術論理演算器に演算の実行非実行の制御と演算の種類の指定を与え、かつシフト量増加部にシフタのシフト量を増加させるか否かの制御を与えるビット選択・ブースデコード部とを備え、第３のデータ格納部を構成する各ビットのうち選択すべき対象ビットが命令により指定されるマイクロプロセッサ。
【請求項６】
請求項１のマイクロプロセッサにおいて、
算術論理演算器での演算結果に対応したデータを所定の位置のビットに格納する第３のデータ格納部を備えたマイクロプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、バレルシフタによるシフト機能を備えた算術論理演算器（ＡＬＵ）を有するマイクロプロセッサに関する。
【０００２】
【従来の技術】
乗算と加算が組み合わされた積和演算（例えば、ａ0ｎ0＋ａ1ｎ1＋ａ2ｎ2＋・・・＋ａkｎkで表される演算）に利用されるマイクロプロセッサとして、図１〜図２に示すように、算術論理演算器を有するものがある。
【０００３】
図１のマイクロプロセッサは、算術論理演算器２と、この算術論理演算器２の一方の入力部に第１の演算データを送るレジスタ（又はメモリ）６と、算術論理演算器２の出力部から送り出された演算結果を格納する乗算器付きアキュムレータ４とを有し、アキュムレータ４に格納されている演算結果が算術論理演算器２の他方の入力部に送ることができるようにしてある。また、アキュムレータ４とレジスタ６はバス１により接続され、アキュムレータ４の演算結果がレジスタ６に送られるようにしてある。
【０００４】
このマイクロプロセッサを用いて積和演算を行う場合、この積和演算は以下の処理（▲１▼〜▲５▼）に従って行われる。
▲１▼：アキュムレータ４に数値データをロードする。
▲２▼：数値データとこれに対応する係数データとを乗算し、アキュムレータ４に再び格納する。
▲３▼：▲２▼アキュムレータ４上の新たな乗算値に既にレジスタ６に格納されている乗算値を加算する。
▲４▼：加算された乗算値をレジスタ６に格納する。
▲５▼：▲１▼〜▲４▼の処理を繰り返す。
【０００５】
この積和演算結果をさらに指定された整数で除算する場合、積和演算途中の演算データの精度はオリジナルデータの倍精度であることが望ましい。ところが、アキュムレータ４のビット長が演算データ（数値データ、係数データ等）と同一ビットサイズの場合、さらに複雑な処理（例えば、以下の処理▲１▼〜▲８▼）が必要になる。
▲１▼：アキュムレータ４に数値データをロードする。
▲２▼：数値データとこれに対応する係数データとを乗算し、その結果（乗算値：倍精度）の下位データをアキュムレータ４に上位データをレジスタに格納する。
▲３▼：▲２▼アキュムレータ４上の新たな乗算値の下位データに既にレジスタに格納されている乗算値の下位データを加算する。
▲４▼：下位データの加算値をレジスタに格納する。
▲５▼：レジスタに格納されている新たな乗算値の上位データをアキュムレータにロードする。
▲６▼：既にレジスタに格納されている積算値の上位データをキャリ付きで加算する。
▲７▼：加算した上位データをレジスタに格納する。
▲８▼：▲１▼〜▲７▼の処理を繰り返す。
【０００６】
図２のマイクロプロセッサは、算術論理演算器１２とレジスタ（又はメモリ）１６との間に乗算器１８を備えており、これによれば、レジスタ１６から送り出された演算データをまず乗算器１８で乗算し、その乗算結果を算術論理演算器１２に送ることができる。しかし、乗算器はハードウェア量が多いために高価である。また、乗算器は処理速度が遅いため、プロセッサの動作周波数が低くなるという問題がある。他方、乗算器の構成がシフトと加算を繰り返すというものであればハードウェア量は減少するが、演算に長時間を要するという問題がある。さらに、積和演算の結果（倍精度）を係数で除算する場合、更に複雑な処理（以下の処理▲１▼〜▲４▼）を必要とする。
▲１▼：アキュムレータのデータ（積算値の上位データ）を除算レジスタに転送する。
▲２▼：レジスタに格納されている積算値の下位データを除算レジスタに転送する。
▲３▼：除算レジスタにおいてデータを係数で除算（倍精度除算）する。
▲４▼：除算結果をレジスタに転送する。
【０００７】
このように、図１、図２のような従来のプロセッサでは、積和演算や積和演算の結果を利用した演算（除算等）を行う場合に多くの処理を要し、そのために演算速度が遅いという問題があった。また、乗算器を有するプロセッサの場合、この乗算器自体の処理速度が遅いということから、プロセッサの動作周波数が低く、演算に時間を要するという問題があった。
【０００８】
さらに、図１、図２のように算術論理演算器とアキュムレータを含むマイクロプロセッサに着目すると、算術論理演算器とアキュムレータを含むマイクロプロセッサにおいて特別な乗算器を備えていない場合、乗算結果を入力データの倍精度で得ようとするならば、加算とシフトの繰り返しで乗算を実現するのが一般的である。そうすると、プロセッサの内部に、シフトのための機能と、アキュムレータと協調しながら積の生成過程のデータを格納するレジスタとが備わらなければならない。したがって、そのようなプロセッサが高価となることは避けられなかった。また、特別な除算器を備えていない場合、除算結果を入力データの倍精度で得ようとすれば、シフトのための機能と、アキュムレータと協調しながら商の生成過程のデータを格納するレジスタとを必要とするので、同様にそのようなプロセッサが高価となることは避け得なかった。
【０００９】
その他、算術論理演算器とアキュムレータとを含む図１と図２のマイクロプロセッサにおいて、２次のブースアルゴリズムに基づき乗算を行う場合、プロセッサ内部に左シフトのための回路が備わらなければならず、これらのプロセッサに高価なものを使用せざるを得ない。
【００１０】
【発明が解決しようとする課題】
そこで、本発明では、算術論理演算器を有するマイクロプロセッサにて積和演算を倍精度で行う場合に、処理ステップの削減、動作周波数の向上を通じて演算速度の向上を目的とする。また、算術論理演算器を有するマイクロプロセッサにて、特別な乗算器を備えずに乗算を行う場合、特別な除算器を備えずに除算を行う場合、あるいは乗算における２次のブースアルゴリズムに基づき乗算を行う場合、いずれもそれぞれプロセッサの内部に更なる回路を備える必要があり高価化が避け得ないが、その低減を目的とする。
【００１１】
【課題を解決するための手段】
以上の目的から、本発明に係るマイクロプロセッサの第１の実施形態は、
算術論理演算器と、
この算術論理演算器で処理するデータを格納する第１のデータ格納部と、
この第１のデータ格納部から出力されたデータを左シフトし、かつデータのビット長を拡張して算術論理演算器に送るシフタとを備え、
所定量の左シフトとビット長拡張及び演算が１命令で実行されることを特徴とするものである。
【００１２】
本発明に係るマイクロプロセッサの第２の実施形態は、
算術論理演算器と、
この算術論理演算器で処理するデータを格納する第１のデータ格納部と、
算術論理演算器で処理されたデータを格納する第２のデータ格納部と、
この第２のデータ格納部から第１のデータ格納部へ送られるデータを右シフトするシフタとを備え、
所定量の右シフトとビット長縮小及び演算が１命令で実行されることを特徴とするものである。
【００１３】
本発明に係るマイクロプロセッサの第３の実施形態は、算術論理演算器と、この算術論理演算器で処理する第１のデータを格納する第１のデータ格納部と、算術論理演算器で処理された第２のデータを格納する第２のデータ格納部と、第１のデータ格納部から算術論理演算器に送られる第１のデータを左シフトしかつデータのビット長を拡張し、第２のデータ格納部から第１のデータ格納部に送られる第２のデータを第１のデータのシフト方向とは逆の方向にシフトしかつデータのビット長を縮小するシフタとを備え、このシフタにおけるデータのシフト量が命令により指定されるものである。
【００１４】
本発明に係るマイクロプロセッサの第４の実施形態は、第１の実施形態のマイクロプロセッサに、データが転送される第３のデータ格納部と、第３のデータ転送部を構成する各ビットのうち１つを選択しそこに格納されるデータいかんで算術論理演算器に演算を行わない制御を与えるビット選択部とを備えたものである。ここで、第３のデータ格納部を構成する各ビットのうち選択すべき対象ビットは命令により指定される。
【００１５】
本発明に係るマイクロプロセッサの第５の実施形態は、第１の実施形態のマイクロプロセッサに、シフタでのシフト量をさらに増加させ得るシフト量増加部と、データが転送される第３のデータ格納部と、第３のデータ転送部を構成する各ビットのうち複数を選択しそれらに格納されるデータいかんで算術論理演算器に演算の実行非実行の制御と演算の種類の指定を与え、かつシフト量増加部にシフタのシフト量を増加させるか否かの制御を与えるビット選択・ブースデコード部とを備えたものである。ここで、第３のデータ格納部を構成する各ビットのうち選択すべき対象ビットは命令により指定される。
【００１６】
本発明に係るマイクロプロセッサの第６の実施形態は、第１の実施形態のマイクロプロセッサに、算術論理演算器での演算結果に対応したデータを所定の位置のビットに格納する第３のデータ格納部を備えたものである。
【００１７】
【発明の実施の形態】
以下、添付図面を参照して本発明の好適な実施の形態を説明する。
【００１８】
Ｉ．第１の実施形態
第１の実施形態に係るプロセッサの構成を図３に示す。プロセッサ２０は、論理積・論理和・算術加算・算術減算を行う算術論理演算器（ＡＬＵ）２２を有する。この算術論理演算器２２は、第１の入力部３２、第２の入力部３４、及び出力部３６を有する。第１の入力部３２はバス３０を介してレジスタ（又はメモリ）２６に接続されており、レジスタ２６に格納されているデータ（オペランドデータ）をバス３０を介して第１の入力部３２において算術論理演算器２２に入力できるようにしてある。出力部３６はアキュムレータ２４に接続されており、算術論理演算器２２の演算結果がアキュムレータ２４に出力されて蓄積されるようにしてある。アキュムレータ２４はまた算術論理演算器２２の第２の入力部３４に接続されており、アキュムレータ２４に蓄積されているデータが算術論理演算器２２に送られるようにしてある。アキュムレータ２４とレジスタ２６はバス３０を介して接続されており、アキュムレータ２４に蓄積されたデータがレジスタ２６に転送できるようにしてある。レジスタ２６から送り出されたオペランドデータを左シフトして算術論理演算器２２に送るために、これらの間にバレルシフタ２８が接続されている。バレルシフタ２８で左シフトするシフト量（桁送り数）と、バレルシフタ２８から送り出されるデータ（オペランドデータの２倍のデータ長を有する。）の符号拡張は、図４に示す機械語命令コードにより指定される。
【００１９】
機械語命令コード３７は、演算の種類Ｃ、符号拡張の指定Ｓ、シフト量ＢＳＨの情報を含む。演算の種類には、加算、減算、論理積、論理和の演算が含まれ、Ｃの値により区別される。符号拡張には、ゼロ拡張と符号拡張があり、ゼロ拡張の場合はＳに０が指定され、符号拡張の場合はＳに１が指定される。シフト量はゼロ桁から１５桁まで指定可能である。
【００２０】
上述のように、バレルシフタ２８から送り出されるデータ（シフトデータ）は、このバレルシフタ２８に入力されるオペランドデータの２倍のデータ長を有し、シフトデータを挟む下位のビットと上位のビットにそれぞれアセンブリ言語の命令で指定されたデータが格納される。具体的に、下位ビットには「０」が格納される。上位ビットには、機械命令コードにより符号拡張が指定されていれば、オペランドデータの最上位ビットの値と同一の値が格納され、ゼロ拡張が指定されていれば、「０」が格納される。
【００２１】
以上のように構成されたプロセッサ２０の一般的な動作について説明する。レジスタ２６に格納されているオペランドデータは必要に応じてバレルシフタ２８に送られる。バレルシフタ２８では、機械命令コード３７で指定されたシフト量だけ、レジスタ２６から供給されたオペランドデータが左シフトされ、もとのオペランドデータの２倍のデータ長を有するデータに拡張される。このとき、機械命令コード３７で符号拡張が指定されていれば、データは符号拡張される。このようにして左シフトされ、必要に応じて符号拡張されたデータは次に算術論理演算器２２の入力部３２に送られる。算術論理演算器２２の他方の入力部３４には、アキュムレータ２４に蓄えられているデータが入力される。算術論理演算器２２は、２つの入力部３２、３４から入力されたデータを用いて、機械命令コード３７で指定された演算を行い、その結果をアキュムレータ２４に送り出す。アキュムレータ２４に蓄えられたデータは、機械命令コード３７で指定された処理に従って、必要に応じてレジスタ２６、算術論理演算器２２に送られる。
【００２２】
次に、プロセッサ２０で行う乗算処理について説明する。ここで、整数の積和演算は、２のべき乗で表される数の加減算に書き改めることができる（以下の数１参照）。
【数１】
ｎ・２＝ｎ・２          ＝ｎ・２1
ｎ・３＝ｎ＋ｎ・２      ＝ｎ・２0＋ｎ・２1
ｎ・４＝ｎ・４          ＝ｎ・２2
ｎ・５＝ｎ＋ｎ・４      ＝ｎ・２0＋ｎ・２2
ｎ・６＝ｎ・２＋ｎ・４  ＝ｎ・２1＋ｎ・２2
【００２３】
また、２のべき乗倍の演算は単純にデータの左シフトにより行えるので、積和演算は、データの左シフトと加減算により行える。
【００２４】
具体的に、プロセッサ２０で数２の積和演算を行うプログラム例を表１に示す。
【数２】
Ａ・２＋Ｂ・５＋Ｃ・７＋Ｄ・３＋Ｅ・４＋Ｆ・１０  （Ａ〜Ｆは変数）
【表１】
Step    Command          処理内容
1        LDA    a:S1    aの値を2倍してアキュムレータ２４にロード
2        ADD    b:S2    bの値を4倍してアキュムレータ２４に加算
3        ADD    b:S0    bの値を1倍してアキュムレータ２４に加算
4        ADD    c:S3    cの値を8倍してアキュムレータ２４に加算
5        SUB    c:S0    cの値を1倍してアキュムレータ２４に減算
6        ADD    d:S1    dの値を2倍してアキュムレータ２４に加算
7        ADD    d:S0    dの値を1倍してアキュムレータ２４に加算
8        ADD    e:S2    eの値を4倍してアキュムレータ２４に加算
9        ADD    f:S3    fの値を8倍してアキュムレータ２４に加算
10       ADD    f:S1    fの値を2倍してアキュムレータ２４に加算
【００２５】
表１において、「ＬＤＡ」はアキュムレータ２４へのロード命令、「ＡＤＤ」は加算命令、「ＳＵＢ」は減算命令、「ａ〜ｆ」はレジスタ２６（又はメモリのアドレス）（数１のＡ〜Ｆはそれぞれａ〜ｆのレジスタに格納されている。）、「：Ｓｎ」の「ｎ」はオペランドデータ（即ちａ〜ｆのレジスタ２６に格納されるデータ、またはａ〜ｆのアドレスのメモリ上に格納されるデータ）の左シフト量、「：Ｓｎ」の「Ｓ」は前述の符号拡張（ゼロ拡張のときは「Ｚ」）を示す。
【００２６】
この表１に示すプログラムでは、ステップ１で、レジスタａに格納されているオペランドデータが呼び出され、バレルシフタ２８で所定量だけ左シフト及び符号拡張され、算術論理演算器２２で指定された演算が行われ、その結果がアキュムレータ２４に送られる。以後、同様に、ステップ２〜１０で必要な演算処理が行われ、積和演算の結果がアキュムレータ２４に蓄えられ、必要に応じて取り出される。
【００２７】
ところで、１回のサイクルで１つの乗算を実行する配列方式の乗算器と算術論理演算器とを組み合わせて積和演算を行うプロセッサで上記数２の演算を行うと、６〜７サイクルで終了する。しかし、配列方式の乗算器はハードウエア量が多いため高価である。また、乗算器を構成する回路の通過段数が多くなるため、乗算器から演算結果が出力されるまでの遅延時間が大きくなり、プロセッサのサイクルタイム（動作周波数）が低くなるという問題がある。さらに、繰り返し式の乗算器と算術論理演算器とを組み合わせると、１つの乗算処理に対してオペランドデータの１／２ビットサイズ回、ないしビットサイズ回の繰り返しサイクルが必要である。オペランドデータが８ビットならば、上記数２の演算を行った場合は２４〜４９サイクル程度必要となる。よって、繰り返し式の乗算器を用いると、処理サイクル数が多くなりプロセッサの処理速度が低下する。
【００２８】
これに対し、本実施形態のプロセッサ２０では、乗算器を用いる代わりに、左バレルシフト回路２８を備えており、この左バレルシフト回路２８は乗算器に比べて安価であることから、プロセッサ２０を低価格で得ることができる。また、バレルシフト回路２８は乗算器に比べて要処理時間が短く、この乗算器を用いたプロセッサに比べて演算時間が短くなる。
【００２９】
他方、通常のプロセッサは左右のシフト命令を行える回路を搭載している。したがって、従来のプロセッサでもそのシフト命令を利用して、本実施形態と同様に、積和演算をシフト命令と加減算とに分解して実行することも可能である。しかし、通常のプロセッサでは、シフト命令、加減算命令で作成されるデータのビット長はオペランドデータのビット長と等しい。したがって、演算の結果をオペランドデータの倍精度の精度としなければならないような積和演算では、演算値を上位データ、下位データに分けて処理しなければならないため、処理内容が増大化複雑化し処理時間が多くかかる。
【００３０】
これに対し、上述のように、本実施形態のプロセッサ２０では、オペランドデータがバレルシフタ２８で２倍のデータ長に拡張され、倍精度演算において該オペランドデータを上位データと下位データに分けて処理する必要がないので、この倍精度演算の処理ロジックが単純になり、処理に要する時間が短く済む。
【００３１】
II．第２の実施形態
第２の実施形態に係るプロセッサの構成を図５に示す。このプロセッサ４０では、第１の実施形態のプロセッサ２０では算術論理演算器２２とレジスタ２６との間にバレルシフタ２８を設けているが、これに代えて、バレルシフタ４４をアキュムレータ２４とレジスタ２６との間に設けている。なお、第１の実施形態のバレルシフタ２８はデータを左シフトするものであったが、本実施形態のバレルシフタ４４はデータを右シフトするとともに、入力されたデータを半分のデータ長に縮小するものである。その他の構成は第１の実施形態のプロセッサ２０と同一であり、同一部分には同一の符号を付して説明を省略する。
【００３２】
このプロセッサ４０は、第１の実施形態のプロセッサ２０を制御する機械命令コード３７と同様の機械命令コードにより制御され、レジスタ２６に格納されているオペランドデータは必要に応じて算術論理演算器２２の一方の入力部３２に入力される。算術論理演算器２２の他方の入力部３４には、アキュムレータ２４より必要なデータが入力される。算術論理演算器２２は、これらの入力データを用い、機械命令コードで指定された演算を行い、その演算結果をアキュムレータ２４に送り出し、そこに蓄積する。アキュムレータ２４に蓄積されたデータは、上述のように、機械命令コードの指定に基づいて、算術論理演算器２２に送られるか、又はバレルシフタ４４に送られる。バレルシフタ４４に送られたデータは、このバレルシフタ４４で右シフトされる。このとき、機械命令コードでデータ縮小が指定されていれば、入力されたデータは半分のデータ長に縮小される。縮小されたデータは、機械命令コードの指定に基づいて、例えばレジスタ２６に送られる。
【００３３】
このプロセッサ４０によれば、算術論理演算器２２から出力された倍精度データをバレルシフタ４４で単精度データに変換してレジスタ２６に送ることができる。また、アキュムレータ２４に蓄積された演算結果データを、所定の整数値により除算し、メモリ２６に戻す（格納する）場合、除数が２のべき乗の整数であればバレルシフタ４４で単純にデータを右シフトするだけで済む。これに対し、この処理内容を通常の除算命令により実行するならば、バレルシフタ４４を用いる場合に比べて、多数のサイクルが必要になり、そのために、処理の高速化を図るためには、専用のより高価なハードウエアを利用することが必要になる。
【００３４】
III．第３の実施形態
第３の実施形態に係るプロセッサの構成を図６に示す。このプロセッサ４７は、算術論理演算器（ＡＬＵ）４８を有する。この算術論理演算器４８は、第１の入力部４９、第２の入力部５１、及び出力部５３を有する。第１の入力部４９は第１のバス５８に接続され、第２の入力部５１と出力部５３はアキュムレータ５０に接続され、さらにこのアキュムレータ５０が第１のバス５８に接続されている。プロセッサ４７はまた第２のバス５６を有し、そこにはレジスタ（又はメモリ）５２が接続されている．第１のバス５８と第２のバス５６との間には、双方向のデータ転送が可能なバレルシフタ５４が接続されている。
【００３５】
バレルシフタ５４は、図７に示す回路を有し、「入力」が第２のバス５６と繋がり、「出力」が第１のバス５８と繋がる。当構成例では、「入力」側からの転送データは４ビット、「出力」側からの転送データは７ビットである。「入力」側の４本の線それぞれが、転送データの各ビットの転送経路を示し、図において下に位置する線が下位ビットの転送経路を、上に位置する線が上位ビットの転送経路を示す。「出力」側の７本の線についても同様である。回路はシフト処理を実現するためにその中にスイッチング素子Ｓを複数有する。また、「入力」側から「出力」側へデータを転送する際にデータの符号を制御するために、回路はその中にＡＮＤゲートを有する。シフト量に関しては、Ａ，Ｂ，Ｃ，Ｄの経路のどれか１つに信号を送ることにより制御する。例えば、Ａ経路に信号が送られた場合、「入力」側からの転送ならば、「入力」側からの４ビットの転送データは「出力」側の下位４ビットに出力され、「出力」側からの転送ならば、「出力」側の下位４ビットのデータが「入力」側の４ビットに出力される。Ｂ経路に信号が送られた場合、「入力」側からの転送ならば、「出力」側の下位１ビットには「０」が出力され下位２ビット目から５ビット目にかけて「入力」側のデータが出力され（即ち、１ビット左シフトされ）、「出力」側からの転送ならば、「出力」側の下位２ビット目から５ビット目のデータが「入力」側の４ビットに出力される（即ち、１ビット右シフトされる）。以下、Ｃ経路Ｄ経路に関しても同様である。図７のバレルシフタでは、データが転送される方向によりデータが右シフトされるか、左シフトされるかが決定される。
【００３６】
このように構成されたプロセッサ４７によれば、レジスタ５２から送り出されたオペランドデータはバレルシフタ５４で左シフトされ、一方の入力部４９から算術論理演算器４８に送られる。バレルシフタ５４で左シフトするシフト量（桁送り数）は、機械語命令コードにより指定される。算術論理演算器４８の他方の入力部５１にはアキュムレータ５０から必要なデータが送られる。算術論理演算器４８は、入力部４９、５１に入力されたデータを用い、機械命令コードに指定された所定の演算を行い、その演算結果をアキュムレータ５０に送り出す。アキュムレータ５０に蓄積されたデータは、機械命令コードの指定に基づいて、算術論理演算器４８に入力されるとともに、第１のバス５８を介してバレルシフタ５４に送られ、このバレルシフタ５４で右シフトされる。バレルシフタ５４で右シフトするシフト量（桁送り数）は、機械語命令コードにより指定される。右シフトされたデータは、機械命令コードの指定に基づいて、必要に応じてレジスタ５２に格納される。
【００３７】
このように、双方向性のバレルシフタ５４を用いたプロセッサ４７によれば、例えば、単精度のデータをバレルシフタ５４で倍精度に変換して算術論理演算器４８で所定の演算を行い、その演算結果を再びバレルシフタ５４で単精度に変換してレジスタ５２に戻すということができる。また、バレルシフタ５４はデータを双方向に変換できるので、第１の実施形態と第２の実施形態に係る２つのプロセッサ２０、４０の特定の機能を一つのプロセッサ４７に組み入れることができる。
【００３８】
IV.第４の実施形態
第４の実施形態に係るプロセッサの構成を図８に示す。このプロセッサ６０は、第１の実施形態のプロセッサ２０に、Ｔレジスタ７０とビット選択・反転部７２を設けたもので、これらＴレジスタ７０とビット選択・反転部７２は、バス８２と、算術論理演算器６２との間に、直列に接続されている。機械命令コード７４は、第１の実施形態のプロセッサ２０用の機械命令コード３７と違って、Ｔレジスタ７０上のビット位置を指定する位置Ｔと、位置Ｔで指定したビット上のデータ（１又は０）を反転するか否かを指定するコードＴ／Ｆを有する。
【００３９】
このプロセッサ６０では、特定のデータがＴレジスタ７０に送られる。ビット選択・反転部７２は、この特定のデータに含まれる所定ビットのデータを呼び出し、そのデータを算術論理演算器６２に送る。このとき、機械命令コード７４でデータの反転が指定されていれば、Ｔレジスタ７０から呼び出したデータを反転し（例えば、呼び出したデータが１であれば０に反転）、反転後のデータを算術論理演算器６２に送り出す。算術論理演算器６２は、バレルシフタ２８、アキュムレータ２４、及びビット選択・反転部７２から送られたデータをもとに、機械命令コード７４で指定された演算を実行する。
【００４０】
このように構成されたプロセッサ６０によれば、ビット選択・反転部７２で選択されたＴレジスタ７０のデータに基づいて算術論理演算器６２で所定の演算を行うか否かを決定でき、このことを利用すると高価でハードウェア量の多い乗算器等を用いることなく乗算処理等が行える。したがって、乗算を行うべきプロセッサはその回路構成が簡単となると共に安価に構成できる。
【００４１】
プロセッサ６０を用いて、ａ×ｎの演算（乗数ｎが整数）を行う場合のプログラム例（アセンブリ言語）を表２に示す。ここでは、ｎは、例えばレジスタ６４に格納されているデータで、８ビットのデータ長を有する。また、以下において乗算ａ×ｎの「被乗数」とはａのことであり、「乗数」とはｎのことである。
【表２】
0003638218.tif 000002
【００４２】
このプログラムにおいて、「ＡＤＤ／Ｔｍ」はＴレジスタ７０のｍビットの内容が１である場合に加算を行う条件付き加算命令、「ＬＤＴ」はＴレジスタ７０へｎをロードするロード命令、「ａ」は被乗数が格納されているレジスタまたはメモリ・アドレス、「:Ｚｍ」の「ｍ」はオペランドデータ（即ちａのレジスタに格納されるデータ、またはａのアドレスのメモリ上に格納されるデータ）の左シフト量、「Ｚ」はゼロ拡張を示す。
【００４３】
なお、条件付き加算命令については、Ｔレジスタ７０のｍビットの内容が０である場合に加算を行うという条件にすることもできる。いずれの条件にするかの制御は、例えば、Ｔレジスタ７０のｍビットの内容を反転する（１を０にする、０を１にする）か否かを、図８機械語命令コード７４の２４ビット目のデータに基づいて決定することで、可能となる。
【００４４】
また、Ｔレジスタ７０のｍビットの内容が０である場合に加算を行う条件付き加算命令のアセンブリ言語による記述は、例えば、「ＡＤＤ／Ｆｍ」とすることができる。
【００４５】
さらに、プロセッサ６０に対する命令において、条件付き加算の条件を格納するビットを多種類設定すると、命令コードが多種類化する（表２参照）。命令コードの多種類化が好ましくない場合、条件を格納するビットは所定の位置に固定し、一回の条件付き加算ごとにＴレジスタ７０に格納される乗数を１ビットシフトして所定の位置のビットの内容から条件を抽出することで、命令コードの種類を増やすことなく表２と同様の処理を実現できる。
【００４６】
さらにまた、すべての命令を条件付き命令とすることが命令コードの増大を招く場合、条件付き加算を特別な命令、例えばＭＵＬ命令として他の演算命令と区別することで、１命令の追加だけで済む。
【００４７】
Ｖ．第５の実施形態
図９は第４の実施形態に係るプロセッサ６０の変形例を示す。本実施形態では、第４の実施形態のＴレジスタ７０、ビット選択・反転部７２に代えて、Ｍレジスタ１００、ビット選択・ブースデコーダ部１０２が設けてある。このビット選択・ブースデコーダ部１０２はインクリメント部１０４に接続され、このインクリメント部１０４がバレルシフタ９６に接続されている。
【００４８】
このプロセッサ８８によれば、特定のデータがＭレジスタ１００に送られる。ビット選択・ブースデコーダ部１０２は、この特定のデータに含まれる所定ビットのデータと、これに隣接する上位１ビットと下位１ビットのデータ（このとき、上位１ビットと下位１ビットの両方にデータが無ければ、存在する片方のデータだけ）を呼び出し、選択対象のビットの内容を２次ブースアルゴリズムに当てはめて解読（ブースデコード）し、例えば算術論理演算器９０に対して加減算の際の条件（算術論理演算器９０で加算する、減算する、又は何もしないという条件。）を与える。算術論理演算器９０は、アキュムレータ２４、バレルシフタ９６、及びビット選択・ブースデコーダ部１０２から送られたデータをもとに、機械命令コードで指定された演算を実行する。ビット選択・ブースデコード部１０２は、前述のようにＭレジスタ１００上のビット選択の機能と、２次ブースアルゴリズムを用いたブースデコードの機能を有するが、そのブースデコードの情報のうちシフト量の増否の情報がインクリメント部１０４に与えられる。この場合、インクリメント部１０４はブースデコードの情報いかんによりバレルシフタ９６のシフト量を１増やすか、もしくは増やさない（インクリメントするか、もしくはしない）。したがって、バレルシフタ９６でシフトするシフト量（桁送り数）は、インクリメント部からの情報が付加されて決定されるが、その情報が付加される前の基本となるシフト量は機械語命令コードにより指定される。
【００４９】
２次ブースアルゴリズムを利用した上記プロセッサ８８では、乗数を２進法表記し、その最下位桁を端緒として１桁おきに桁（ビット）に注目し、注目対象桁の前後３桁の組み合わせにより、加減算の条件が決定される（表４参照）。例えば、乗数を特定レジスタ（Ｍレジスタ）１００に格納し、それを基にビット選択・ブースデコード部１０２が、加減算の条件を判断する。
【００５０】
ａ×ｎの乗算処理に利用される、アセンブリ言語で書かれたプログラム例を表３に示す。２次ブースアルゴリズムを用いた条件付き加減算命令は、「ＭＵＬ」（表４参照）で表される。この表４は、注目対象桁の前後３桁の組み合わせと、それに対応する加減算の内容を示す。この表の演算処理の内容から明らかなように、被乗数（ここでは、ａ）の２のべき乗倍をさらに２倍する操作が必要になることがある。本実施形態の構成では、被乗数の２のべき乗倍をさらに２倍する操作が必要になるか否かはビット選択・ブースデコード部１０２が判断する。その判断結果データはインクリメント部１０４に転送され、その内容によりインクリメント部１０４は、バレルシフタ９６のシフト量に１を加えるかもしくは何も加えない、という制御をする。
【表３】
Step    Command          処理内容
1        LDM     n      ｎの値をＭレジスタ１００にロード
2        LDA     #0     ０をアキュムレータ２４にロード
3        MUL/M0  a:Z0   Ｍのビット０によりａの１倍のＭＵＬ動作
4        MUL/M2  a:Z2   Ｍのビット２によりａの４倍のＭＵＬ動作
5        MUL/M4  a:Z4   Ｍのビット４によりａの１６倍のＭＵＬ動作
6        MUL/M6  a:Z6   Ｍのビット６によりａの６４倍のＭＵＬ動作
【表４】
ＭＵＬ命令の動作
ｎ＋１（桁）    ｎ            ｎ−１      演算
０              ０              ０      ０を加算（何もしない）
０              ０              １      オペランドを加算
０              １              ０      オペランドを加算
０              １              １      オペランドの２倍を加算
１              ０              ０      オペランドの２倍を減算
１              ０              １      オペランドを減算
１              １              ０      オペランドを減算
１              １              １      ０を加算（何もしない）
【００５１】
なお、表３において、「ＬＤＭ」は、ＭＵＬ命令の条件（即ち乗数）を格納するＭレジスタ１００へのロード命令、「ＭＵＬ／Ｍｍ」はＭレジスタ１００のｍビットの前後のビットの組み合わせ条件により、▲１▼０を加算、▲２▼オペランド（シフト後）を加算、▲３▼オペランド（シフト後）の２倍を加算、▲４▼オペランド（シフト後）を減算、▲５▼オペランド（シフト後）の２倍を減算、のいずれかを行う条件付き加減算命令、「ａ」は被乗数を格納するレジスタ又はメモリのアドレス、「:Ｚｍ」はオペランドデータ（即ちａのレジスタに格納されるデータ、またはａのアドレスのメモリ上に格納されるデータ）の左シフト量、「Ｚ」はゼロ拡張、「ｍ」はバレルシフタ９６のシフト量を示す。
【００５２】
以上のように、表２と表３を比較すると明らかなように、２次ブースアルゴリズムを利用した本実施形態によれば、アセンブリ言語による命令数が約半分に削減できる。
【００５３】
VI．第６の実施形態
第６の実施形態に係るプロセッサの構成を図１０に示す。このプロセッサ１０５は、第１の実施形態の変形例を示し、バス１１４と算術論理演算器１０６との間にＭレジスタ１１６が接続されており、算術論理演算器１０６で行われた特殊減算（後述する。）の結果が送られるようにしてある。
【００５４】
このプロセッサ１０５で実行される除算処理について説明する。以下では、除算ｎ÷ａにおいて「被除数」とはｎのことであり、「除数」とはａのことである。
【００５５】
プロセッサ１０５では、まずアキュムレータ２４に被除数を格納し、算術論理演算器１０６で、被除数から除数の２のべき乗倍数（例えば除数の２k倍）を減算して商を求める。ここで、除数の２のべき乗倍のべき数（例えばｋ）を変えつつ（通常は大きな値から小さな値へ１ずつディクリメントしつつ）、減算を繰り返す。除数の２のべき乗倍数は、バレルシフタ１１２により求める。上記減算を１回行った結果、ボローが発生しない場合（キャリーが発生する場合）には「引けた」ことになる。この場合、減算結果をアキュムレータ２４に格納し、Ｍレジスタ１１６の指定されたビット（例えばｋ桁目）にボローの反転即ち「１」を格納する。逆に、ボローが発生した場合（キャリーが発生しない場合）、アキュムレータ２４の値をそのまま保存し、Ｍレジスタ１１６の指定されたビット（例えばｋ桁目）にボローの反転即ち「０」を格納する。本実施形態のプロセッサ１０５に対するアセンブリ言語は、このような特殊減算命令を加えている。
【００５６】
このプロセッサ１０５を用いてｎ÷ａの除算を実行するアセンブリ言語のプログラム例を以下に示す。ここで、ｎはレジスタ２６上で１６ビットのデータ、ａは８ビットのデータとする。
【表５】
Step    Command          意味
1        LDA     n      ｎをアキュムレータ２４にロード
2        DIV/M7  a:Z7   aの１２８倍によりＤＩＶ動作、結果はＭ７へ格納
3        DIV/M6  a:Z6   aの６４倍によりＤＩＶ動作、結果はＭ６へ格納
4        DIV/M5  a:Z5   aの３２倍によりＤＩＶ動作、結果はＭ５へ格納
5        DIV/M4  a:Z4   aの１６倍によりＤＩＶ動作、結果はＭ４へ格納
6        DIV/M3  a:Z3   aの８倍によりＤＩＶ動作、結果はＭ３へ格納
7        DIV/M2  a:Z2   aの４倍によりＤＩＶ動作、結果はＭ２へ格納
8        DIV/M1  a:Z1   aの２倍によりＤＩＶ動作、結果はＭ１へ格納
9        DIV/M0  a:Z0   aの１倍によりＤＩＶ動作、結果はＭ０へ格納
【００５７】
このプログラムにおいて、「ＤＩＶ／Ｍｍ」は減算結果に応じてアキュムレータ２４を更新し、かつＭレジスタ１１６の指定ｍビットに結果を格納する特殊減算命令、「ａ」は除数の格納されているレジスタ又はメモリのアドレス、「：Ｚｍ」はオペランドデータ（ａのレジスタに格納されるデータ、またはａのアドレスのメモリ上に格納されるデータ）の左シフト量、「Ｚ」はゼロ拡張を示す。演算の結果、アキュムレータ２４に剰余、Ｍレジスタ１１６に商が格納される。
【００５８】
このように、表５に示すように、特殊減算命令を設定し、減算の結果によりアキュムレータ２４へ減算結果の格納又は元の値の格納のいずれかを選択し、選択結果をＭレジスタ１１６の所定のビットに格納する、という以上の処理を適宜組み合わせることで、除算が実現できる。
【００５９】
なお、命令の体系において、演算結果を格納するビットを多種類設定すると、命令コードが多種類化することになる（表５参照）が、命令コードの多種類化が好ましくない場合は、演算結果を格納するビットは所定の位置に固定し、一回の特殊減算ごとにＭレジスタ１１６に格納されているデータ（商の途中値）を１ビットシフトし所定の位置のビットを結果格納ビットとしても、同様の処理を実現できる。
【００６０】
また、上記表５の実施例では引き戻し法での除算であったが、減算結果に関わりなく、減算結果を順次使用していく引き放し法による除算においても、同様に除算が実現可能である。
【００６１】
【発明の効果】
以上の説明から明らかなように、本発明の、バレルシフタによるシフト機能を備えた算術論理演算器を有するマイクロプロセッサによれば、以下のような効果が存する。
【００６２】
算術論理演算器と、この算術論理演算器で処理するデータを格納する第１のデータ格納部と、この第１のデータ格納部から出力されたデータを左シフトし、かつデータのビット長を拡張して算術論理演算器に送るシフタとを備え、このシフタにおけるデータのシフト量が命令により指定されるマイクロプロセッサでは、積和演算を倍精度で行う場合であっても、処理ステップの増加の抑制、動作周波数の向上を通じて、演算速度を向上することができる。また、費用の高価化を抑制できる。
【００６３】
算術論理演算器と、この算術論理演算器で処理するデータを格納する第１のデータ格納部と、算術論理演算器で処理されたデータを格納する第２のデータ格納部と、この第２のデータ格納部から第１のデータ格納部へ送られるデータを右シフトするシフタとを備え、このシフタにおけるデータのシフト量が命令により指定されるマイクロプロセッサでは、除算の除数が２のべき乗倍数である限り、除算の演算速度を向上でき、費用を安価化できる。
【００６４】
算術論理演算器と、この算術論理演算器で処理する第１のデータを格納する第１のデータ格納部と、算術論理演算器で処理された第２のデータを格納する第２のデータ格納部と、第１のデータ格納部から算術論理演算器に送られる第１のデータを左シフトしかつデータのビット長を拡張し、第２のデータ格納部から第１のデータ格納部に送られる第２のデータを第１のデータのシフト方向とは逆の方向にシフトしかつデータのビット長を縮小するシフタとを備え、このシフタにおけるデータのシフト量が命令により指定されるマイクロプロセッサでは、倍精度の精度で行う積和演算の演算速度を向上でき、かつ費用の高価化を抑制でき、さらに除算の除数が２のべき乗倍数である限り、除算の演算速度を向上でき、かつ費用を安価化できる。
【００６５】
算術論理演算器と、この算術論理演算器で処理するデータを格納する第１のデータ格納部と、この第１のデータ格納部から出力されたデータを左シフトし、かつデータのビット長を拡張して算術論理演算器に送るシフタと、データが転送される第３のデータ格納部と、第３のデータ転送部を構成する各ビットのうち１つを選択しそこに格納されるデータいかんで算術論理演算器に演算を行わない制御を与えるビット選択部とを備え、シフタにおけるデータのシフト量と、第３のデータ格納部を構成する各ビットのうち選択すべき対象ビットとが、命令により指定されるマイクロプロセッサでは、少量のハードウエアの追加により乗算が実行できるようになる。
【００６６】
算術論理演算器と、この算術論理演算器で処理するデータを格納する第１のデータ格納部と、この第１のデータ格納部から出力されたデータを左シフトし、かつデータのビット長を拡張して算術論理演算器に送るシフタと、このシフタでのシフト量をさらに増加させ得るシフト量増加部と、データが転送される第３のデータ格納部と、第３のデータ転送部を構成する各ビットのうち複数を選択しそれらに格納されるデータいかんで算術論理演算器に演算の実行非実行の制御と演算の種類の指定を与え、かつシフト量増加部にシフタのシフト量を増加させるか否かの制御を与えるビット選択・ブースデコード部とを備え、シフタにおけるデータのシフト量と、第３のデータ格納部を構成する各ビットのうち選択すべき対象ビットとが、命令により指定されるマイクロプロセッサでは、少量のハードウエアの追加により２次ブースアルゴリズムの乗算が実行できるようになる。
【００６７】
算術論理演算器と、この算術論理演算器で処理するデータを格納する第１のデータ格納部と、この第１のデータ格納部から出力されたデータを左シフトし、かつデータのビット長を拡張して算術論理演算器に送るシフタと、算術論理演算器での演算結果に対応したデータを所定の位置のビットに格納する第３のデータ格納部とを備え、シフタにおけるデータのシフト量が命令により指定されるマイクロプロセッサでは、少量のハードウエアの追加により除算が実行できるようになる。
【図面の簡単な説明】
【図１】  従来のプロセッサの構成図例。
【図２】  乗算器の出力に算術論理演算器（ＡＬＵ）もしくは加算器を接続した従来のプロセッサの構成図例。
【図３】  算術論理演算器入力部にバレルシフタが置かれる、本発明の第１の実施の形態のプロセッサの構成図。
【図４】  本発明の第１の実施の形態のプロセッサに対する機械語命令コードフォーマット。
【図５】  アキュムレータの出力の位置にバレルシフタが置かれる、本発明の第２の実施の形態のプロセッサの構成図。
【図６】  第１のバスと第２のバスとの間にバレルシフタが置かれる、本発明の第３の実施の形態のプロセッサの構成図。
【図７】  バレルシフタの回路構成図例。
【図８】  特定のレジスタとそのレジスタに対するビット選択部を有する、本発明の第４の実施の形態のプロセッサの構成図と、該プロセッサに対する機械語命令コードフォーマット。
【図９】  特定のレジスタ、ビット選択及びブース・デコード部、及びインクリメント部を有する、本発明の第５の実施の形態のプロセッサの構成図。
【図１０】  特定のレジスタを有する、本発明の第６の実施の形態のプロセッサの構成図。
【符号の説明】
２０、４０、４７、６０、８８、１０５・・・プロセッサ、２、１２、２２、４８、６２、９０、１０６・・・算術論理演算器（ＡＬＵ）、４、１４、２４、５０・・・アキュムレータ、６、１６、２６、５２・・・レジスタ又はメモリ、１８・・・乗算器、２８、４４、５４、９６、１１２・・・バレルシフタ、１、３０、４６、８２、９８、１１４・・・バス、５６・・・第２のバス、５８・・・第１のバス、３２、３４、４９、５１・・・データ入力部、３６、５３・・・データ出力部、７０・・・Ｔレジスタ、７２・・・ビット選択部、３７、７４・・・命令コードフォーマット、１００、１１６・・・Ｍレジスタ、１０２・・・ビット選択及びデコード部、１０４・・・インクリメント部、Ａ、Ｂ、Ｃ、Ｄ・・・シフト量制御のための信号経路、Ｓ・・・スイッチング素子
【図１】
0003638218.tif 000003
【図２】
0003638218.tif 000004
【図３】
0003638218.tif 000005
【図４】
0003638218.tif 000006
【図５】
0003638218.tif 000007
【図６】
0003638218.tif 000008
【図７】
0003638218.tif 000009
【図８】
0003638218.tif 000010
【図９】
0003638218.tif 000011
【図１０】
0003638218.tif 000012