JP3638218B2 - シフト機能付きalu命令を持つマイクロプロセッサ - Google Patents
シフト機能付きalu命令を持つマイクロプロセッサ Download PDFInfo
- Publication number
- JP3638218B2 JP3638218B2 JP24493598A JP24493598A JP3638218B2 JP 3638218 B2 JP3638218 B2 JP 3638218B2 JP 24493598 A JP24493598 A JP 24493598A JP 24493598 A JP24493598 A JP 24493598A JP 3638218 B2 JP3638218 B2 JP 3638218B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- arithmetic logic
- unit
- logic unit
- storage unit
- 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 - Lifetime
Links
Images
Description
【発明の属する技術分野】
本発明は、バレルシフタによるシフト機能を備えた算術論理演算器(ALU)を有するマイクロプロセッサに関する。
【0002】
【従来の技術】
乗算と加算が組み合わされた積和演算(例えば、a0n0+a1n1+a2n2+・・・+aknkで表される演算)に利用されるマイクロプロセッサとして、図1〜図2に示すように、算術論理演算器を有するものがある。
【0003】
図1のマイクロプロセッサは、算術論理演算器2と、この算術論理演算器2の一方の入力部に第1の演算データを送るレジスタ(又はメモリ)6と、算術論理演算器2の出力部から送り出された演算結果を格納する乗算器付きアキュムレータ4とを有し、アキュムレータ4に格納されている演算結果が算術論理演算器2の他方の入力部に送ることができるようにしてある。また、アキュムレータ4とレジスタ6はバス1により接続され、アキュムレータ4の演算結果がレジスタ6に送られるようにしてある。
【0004】
このマイクロプロセッサを用いて積和演算を行う場合、この積和演算は以下の処理(▲1▼〜▲5▼)に従って行われる。
▲1▼:アキュムレータ4に数値データをロードする。
▲2▼:数値データとこれに対応する係数データとを乗算し、アキュムレータ4に再び格納する。
▲3▼:▲2▼アキュムレータ4上の新たな乗算値に既にレジスタ6に格納されている乗算値を加算する。
▲4▼:加算された乗算値をレジスタ6に格納する。
▲5▼:▲1▼〜▲4▼の処理を繰り返す。
【0005】
この積和演算結果をさらに指定された整数で除算する場合、積和演算途中の演算データの精度はオリジナルデータの倍精度であることが望ましい。ところが、アキュムレータ4のビット長が演算データ(数値データ、係数データ等)と同一ビットサイズの場合、さらに複雑な処理(例えば、以下の処理▲1▼〜▲8▼)が必要になる。
▲1▼:アキュムレータ4に数値データをロードする。
▲2▼:数値データとこれに対応する係数データとを乗算し、その結果(乗算値:倍精度)の下位データをアキュムレータ4に上位データをレジスタに格納する。
▲3▼:▲2▼アキュムレータ4上の新たな乗算値の下位データに既にレジスタに格納されている乗算値の下位データを加算する。
▲4▼:下位データの加算値をレジスタに格納する。
▲5▼:レジスタに格納されている新たな乗算値の上位データをアキュムレータにロードする。
▲6▼:既にレジスタに格納されている積算値の上位データをキャリ付きで加算する。
▲7▼:加算した上位データをレジスタに格納する。
▲8▼:▲1▼〜▲7▼の処理を繰り返す。
【0006】
図2のマイクロプロセッサは、算術論理演算器12とレジスタ(又はメモリ)16との間に乗算器18を備えており、これによれば、レジスタ16から送り出された演算データをまず乗算器18で乗算し、その乗算結果を算術論理演算器12に送ることができる。しかし、乗算器はハードウェア量が多いために高価である。また、乗算器は処理速度が遅いため、プロセッサの動作周波数が低くなるという問題がある。他方、乗算器の構成がシフトと加算を繰り返すというものであればハードウェア量は減少するが、演算に長時間を要するという問題がある。さらに、積和演算の結果(倍精度)を係数で除算する場合、更に複雑な処理(以下の処理▲1▼〜▲4▼)を必要とする。
▲1▼:アキュムレータのデータ(積算値の上位データ)を除算レジスタに転送する。
▲2▼:レジスタに格納されている積算値の下位データを除算レジスタに転送する。
▲3▼:除算レジスタにおいてデータを係数で除算(倍精度除算)する。
▲4▼:除算結果をレジスタに転送する。
【0007】
このように、図1、図2のような従来のプロセッサでは、積和演算や積和演算の結果を利用した演算(除算等)を行う場合に多くの処理を要し、そのために演算速度が遅いという問題があった。また、乗算器を有するプロセッサの場合、この乗算器自体の処理速度が遅いということから、プロセッサの動作周波数が低く、演算に時間を要するという問題があった。
【0008】
さらに、図1、図2のように算術論理演算器とアキュムレータを含むマイクロプロセッサに着目すると、算術論理演算器とアキュムレータを含むマイクロプロセッサにおいて特別な乗算器を備えていない場合、乗算結果を入力データの倍精度で得ようとするならば、加算とシフトの繰り返しで乗算を実現するのが一般的である。そうすると、プロセッサの内部に、シフトのための機能と、アキュムレータと協調しながら積の生成過程のデータを格納するレジスタとが備わらなければならない。したがって、そのようなプロセッサが高価となることは避けられなかった。また、特別な除算器を備えていない場合、除算結果を入力データの倍精度で得ようとすれば、シフトのための機能と、アキュムレータと協調しながら商の生成過程のデータを格納するレジスタとを必要とするので、同様にそのようなプロセッサが高価となることは避け得なかった。
【0009】
その他、算術論理演算器とアキュムレータとを含む図1と図2のマイクロプロセッサにおいて、2次のブースアルゴリズムに基づき乗算を行う場合、プロセッサ内部に左シフトのための回路が備わらなければならず、これらのプロセッサに高価なものを使用せざるを得ない。
【0010】
【発明が解決しようとする課題】
そこで、本発明では、算術論理演算器を有するマイクロプロセッサにて積和演算を倍精度で行う場合に、処理ステップの削減、動作周波数の向上を通じて演算速度の向上を目的とする。また、算術論理演算器を有するマイクロプロセッサにて、特別な乗算器を備えずに乗算を行う場合、特別な除算器を備えずに除算を行う場合、あるいは乗算における2次のブースアルゴリズムに基づき乗算を行う場合、いずれもそれぞれプロセッサの内部に更なる回路を備える必要があり高価化が避け得ないが、その低減を目的とする。
【0011】
【課題を解決するための手段】
以上の目的から、本発明に係るマイクロプロセッサの第1の実施形態は、
算術論理演算器と、
この算術論理演算器で処理するデータを格納する第1のデータ格納部と、
この第1のデータ格納部から出力されたデータを左シフトし、かつデータのビット長を拡張して算術論理演算器に送るシフタとを備え、
所定量の左シフトとビット長拡張及び演算が1命令で実行されることを特徴とするものである。
【0012】
本発明に係るマイクロプロセッサの第2の実施形態は、
算術論理演算器と、
この算術論理演算器で処理するデータを格納する第1のデータ格納部と、
算術論理演算器で処理されたデータを格納する第2のデータ格納部と、
この第2のデータ格納部から第1のデータ格納部へ送られるデータを右シフトするシフタとを備え、
所定量の右シフトとビット長縮小及び演算が1命令で実行されることを特徴とするものである。
【0013】
本発明に係るマイクロプロセッサの第3の実施形態は、算術論理演算器と、この算術論理演算器で処理する第1のデータを格納する第1のデータ格納部と、算術論理演算器で処理された第2のデータを格納する第2のデータ格納部と、第1のデータ格納部から算術論理演算器に送られる第1のデータを左シフトしかつデータのビット長を拡張し、第2のデータ格納部から第1のデータ格納部に送られる第2のデータを第1のデータのシフト方向とは逆の方向にシフトしかつデータのビット長を縮小するシフタとを備え、このシフタにおけるデータのシフト量が命令により指定されるものである。
【0014】
本発明に係るマイクロプロセッサの第4の実施形態は、第1の実施形態のマイクロプロセッサに、データが転送される第3のデータ格納部と、第3のデータ転送部を構成する各ビットのうち1つを選択しそこに格納されるデータいかんで算術論理演算器に演算を行わない制御を与えるビット選択部とを備えたものである。ここで、第3のデータ格納部を構成する各ビットのうち選択すべき対象ビットは命令により指定される。
【0015】
本発明に係るマイクロプロセッサの第5の実施形態は、第1の実施形態のマイクロプロセッサに、シフタでのシフト量をさらに増加させ得るシフト量増加部と、データが転送される第3のデータ格納部と、第3のデータ転送部を構成する各ビットのうち複数を選択しそれらに格納されるデータいかんで算術論理演算器に演算の実行非実行の制御と演算の種類の指定を与え、かつシフト量増加部にシフタのシフト量を増加させるか否かの制御を与えるビット選択・ブースデコード部とを備えたものである。ここで、第3のデータ格納部を構成する各ビットのうち選択すべき対象ビットは命令により指定される。
【0016】
本発明に係るマイクロプロセッサの第6の実施形態は、第1の実施形態のマイクロプロセッサに、算術論理演算器での演算結果に対応したデータを所定の位置のビットに格納する第3のデータ格納部を備えたものである。
【0017】
【発明の実施の形態】
以下、添付図面を参照して本発明の好適な実施の形態を説明する。
【0018】
I.第1の実施形態
第1の実施形態に係るプロセッサの構成を図3に示す。プロセッサ20は、論理積・論理和・算術加算・算術減算を行う算術論理演算器(ALU)22を有する。この算術論理演算器22は、第1の入力部32、第2の入力部34、及び出力部36を有する。第1の入力部32はバス30を介してレジスタ(又はメモリ)26に接続されており、レジスタ26に格納されているデータ(オペランドデータ)をバス30を介して第1の入力部32において算術論理演算器22に入力できるようにしてある。出力部36はアキュムレータ24に接続されており、算術論理演算器22の演算結果がアキュムレータ24に出力されて蓄積されるようにしてある。アキュムレータ24はまた算術論理演算器22の第2の入力部34に接続されており、アキュムレータ24に蓄積されているデータが算術論理演算器22に送られるようにしてある。アキュムレータ24とレジスタ26はバス30を介して接続されており、アキュムレータ24に蓄積されたデータがレジスタ26に転送できるようにしてある。レジスタ26から送り出されたオペランドデータを左シフトして算術論理演算器22に送るために、これらの間にバレルシフタ28が接続されている。バレルシフタ28で左シフトするシフト量(桁送り数)と、バレルシフタ28から送り出されるデータ(オペランドデータの2倍のデータ長を有する。)の符号拡張は、図4に示す機械語命令コードにより指定される。
【0019】
機械語命令コード37は、演算の種類C、符号拡張の指定S、シフト量BSHの情報を含む。演算の種類には、加算、減算、論理積、論理和の演算が含まれ、Cの値により区別される。符号拡張には、ゼロ拡張と符号拡張があり、ゼロ拡張の場合はSに0が指定され、符号拡張の場合はSに1が指定される。シフト量はゼロ桁から15桁まで指定可能である。
【0020】
上述のように、バレルシフタ28から送り出されるデータ(シフトデータ)は、このバレルシフタ28に入力されるオペランドデータの2倍のデータ長を有し、シフトデータを挟む下位のビットと上位のビットにそれぞれアセンブリ言語の命令で指定されたデータが格納される。具体的に、下位ビットには「0」が格納される。上位ビットには、機械命令コードにより符号拡張が指定されていれば、オペランドデータの最上位ビットの値と同一の値が格納され、ゼロ拡張が指定されていれば、「0」が格納される。
【0021】
以上のように構成されたプロセッサ20の一般的な動作について説明する。レジスタ26に格納されているオペランドデータは必要に応じてバレルシフタ28に送られる。バレルシフタ28では、機械命令コード37で指定されたシフト量だけ、レジスタ26から供給されたオペランドデータが左シフトされ、もとのオペランドデータの2倍のデータ長を有するデータに拡張される。このとき、機械命令コード37で符号拡張が指定されていれば、データは符号拡張される。このようにして左シフトされ、必要に応じて符号拡張されたデータは次に算術論理演算器22の入力部32に送られる。算術論理演算器22の他方の入力部34には、アキュムレータ24に蓄えられているデータが入力される。算術論理演算器22は、2つの入力部32、34から入力されたデータを用いて、機械命令コード37で指定された演算を行い、その結果をアキュムレータ24に送り出す。アキュムレータ24に蓄えられたデータは、機械命令コード37で指定された処理に従って、必要に応じてレジスタ26、算術論理演算器22に送られる。
【0022】
次に、プロセッサ20で行う乗算処理について説明する。ここで、整数の積和演算は、2のべき乗で表される数の加減算に書き改めることができる(以下の数1参照)。
【数1】
n・2=n・2 =n・21
n・3=n+n・2 =n・20+n・21
n・4=n・4 =n・22
n・5=n+n・4 =n・20+n・22
n・6=n・2+n・4 =n・21+n・22
【0023】
また、2のべき乗倍の演算は単純にデータの左シフトにより行えるので、積和演算は、データの左シフトと加減算により行える。
【0024】
具体的に、プロセッサ20で数2の積和演算を行うプログラム例を表1に示す。
【数2】
A・2+B・5+C・7+D・3+E・4+F・10 (A〜Fは変数)
【表1】
Step Command 処理内容
1 LDA a:S1 aの値を2倍してアキュムレータ24にロード
2 ADD b:S2 bの値を4倍してアキュムレータ24に加算
3 ADD b:S0 bの値を1倍してアキュムレータ24に加算
4 ADD c:S3 cの値を8倍してアキュムレータ24に加算
5 SUB c:S0 cの値を1倍してアキュムレータ24に減算
6 ADD d:S1 dの値を2倍してアキュムレータ24に加算
7 ADD d:S0 dの値を1倍してアキュムレータ24に加算
8 ADD e:S2 eの値を4倍してアキュムレータ24に加算
9 ADD f:S3 fの値を8倍してアキュムレータ24に加算
10 ADD f:S1 fの値を2倍してアキュムレータ24に加算
【0025】
表1において、「LDA」はアキュムレータ24へのロード命令、「ADD」は加算命令、「SUB」は減算命令、「a〜f」はレジスタ26(又はメモリのアドレス)(数1のA〜Fはそれぞれa〜fのレジスタに格納されている。)、「:Sn」の「n」はオペランドデータ(即ちa〜fのレジスタ26に格納されるデータ、またはa〜fのアドレスのメモリ上に格納されるデータ)の左シフト量、「:Sn」の「S」は前述の符号拡張(ゼロ拡張のときは「Z」)を示す。
【0026】
この表1に示すプログラムでは、ステップ1で、レジスタaに格納されているオペランドデータが呼び出され、バレルシフタ28で所定量だけ左シフト及び符号拡張され、算術論理演算器22で指定された演算が行われ、その結果がアキュムレータ24に送られる。以後、同様に、ステップ2〜10で必要な演算処理が行われ、積和演算の結果がアキュムレータ24に蓄えられ、必要に応じて取り出される。
【0027】
ところで、1回のサイクルで1つの乗算を実行する配列方式の乗算器と算術論理演算器とを組み合わせて積和演算を行うプロセッサで上記数2の演算を行うと、6〜7サイクルで終了する。しかし、配列方式の乗算器はハードウエア量が多いため高価である。また、乗算器を構成する回路の通過段数が多くなるため、乗算器から演算結果が出力されるまでの遅延時間が大きくなり、プロセッサのサイクルタイム(動作周波数)が低くなるという問題がある。さらに、繰り返し式の乗算器と算術論理演算器とを組み合わせると、1つの乗算処理に対してオペランドデータの1/2ビットサイズ回、ないしビットサイズ回の繰り返しサイクルが必要である。オペランドデータが8ビットならば、上記数2の演算を行った場合は24〜49サイクル程度必要となる。よって、繰り返し式の乗算器を用いると、処理サイクル数が多くなりプロセッサの処理速度が低下する。
【0028】
これに対し、本実施形態のプロセッサ20では、乗算器を用いる代わりに、左バレルシフト回路28を備えており、この左バレルシフト回路28は乗算器に比べて安価であることから、プロセッサ20を低価格で得ることができる。また、バレルシフト回路28は乗算器に比べて要処理時間が短く、この乗算器を用いたプロセッサに比べて演算時間が短くなる。
【0029】
他方、通常のプロセッサは左右のシフト命令を行える回路を搭載している。したがって、従来のプロセッサでもそのシフト命令を利用して、本実施形態と同様に、積和演算をシフト命令と加減算とに分解して実行することも可能である。しかし、通常のプロセッサでは、シフト命令、加減算命令で作成されるデータのビット長はオペランドデータのビット長と等しい。したがって、演算の結果をオペランドデータの倍精度の精度としなければならないような積和演算では、演算値を上位データ、下位データに分けて処理しなければならないため、処理内容が増大化複雑化し処理時間が多くかかる。
【0030】
これに対し、上述のように、本実施形態のプロセッサ20では、オペランドデータがバレルシフタ28で2倍のデータ長に拡張され、倍精度演算において該オペランドデータを上位データと下位データに分けて処理する必要がないので、この倍精度演算の処理ロジックが単純になり、処理に要する時間が短く済む。
【0031】
II.第2の実施形態
第2の実施形態に係るプロセッサの構成を図5に示す。このプロセッサ40では、第1の実施形態のプロセッサ20では算術論理演算器22とレジスタ26との間にバレルシフタ28を設けているが、これに代えて、バレルシフタ44をアキュムレータ24とレジスタ26との間に設けている。なお、第1の実施形態のバレルシフタ28はデータを左シフトするものであったが、本実施形態のバレルシフタ44はデータを右シフトするとともに、入力されたデータを半分のデータ長に縮小するものである。その他の構成は第1の実施形態のプロセッサ20と同一であり、同一部分には同一の符号を付して説明を省略する。
【0032】
このプロセッサ40は、第1の実施形態のプロセッサ20を制御する機械命令コード37と同様の機械命令コードにより制御され、レジスタ26に格納されているオペランドデータは必要に応じて算術論理演算器22の一方の入力部32に入力される。算術論理演算器22の他方の入力部34には、アキュムレータ24より必要なデータが入力される。算術論理演算器22は、これらの入力データを用い、機械命令コードで指定された演算を行い、その演算結果をアキュムレータ24に送り出し、そこに蓄積する。アキュムレータ24に蓄積されたデータは、上述のように、機械命令コードの指定に基づいて、算術論理演算器22に送られるか、又はバレルシフタ44に送られる。バレルシフタ44に送られたデータは、このバレルシフタ44で右シフトされる。このとき、機械命令コードでデータ縮小が指定されていれば、入力されたデータは半分のデータ長に縮小される。縮小されたデータは、機械命令コードの指定に基づいて、例えばレジスタ26に送られる。
【0033】
このプロセッサ40によれば、算術論理演算器22から出力された倍精度データをバレルシフタ44で単精度データに変換してレジスタ26に送ることができる。また、アキュムレータ24に蓄積された演算結果データを、所定の整数値により除算し、メモリ26に戻す(格納する)場合、除数が2のべき乗の整数であればバレルシフタ44で単純にデータを右シフトするだけで済む。これに対し、この処理内容を通常の除算命令により実行するならば、バレルシフタ44を用いる場合に比べて、多数のサイクルが必要になり、そのために、処理の高速化を図るためには、専用のより高価なハードウエアを利用することが必要になる。
【0034】
III.第3の実施形態
第3の実施形態に係るプロセッサの構成を図6に示す。このプロセッサ47は、算術論理演算器(ALU)48を有する。この算術論理演算器48は、第1の入力部49、第2の入力部51、及び出力部53を有する。第1の入力部49は第1のバス58に接続され、第2の入力部51と出力部53はアキュムレータ50に接続され、さらにこのアキュムレータ50が第1のバス58に接続されている。プロセッサ47はまた第2のバス56を有し、そこにはレジスタ(又はメモリ)52が接続されている.第1のバス58と第2のバス56との間には、双方向のデータ転送が可能なバレルシフタ54が接続されている。
【0035】
バレルシフタ54は、図7に示す回路を有し、「入力」が第2のバス56と繋がり、「出力」が第1のバス58と繋がる。当構成例では、「入力」側からの転送データは4ビット、「出力」側からの転送データは7ビットである。「入力」側の4本の線それぞれが、転送データの各ビットの転送経路を示し、図において下に位置する線が下位ビットの転送経路を、上に位置する線が上位ビットの転送経路を示す。「出力」側の7本の線についても同様である。回路はシフト処理を実現するためにその中にスイッチング素子Sを複数有する。また、「入力」側から「出力」側へデータを転送する際にデータの符号を制御するために、回路はその中にANDゲートを有する。シフト量に関しては、A,B,C,Dの経路のどれか1つに信号を送ることにより制御する。例えば、A経路に信号が送られた場合、「入力」側からの転送ならば、「入力」側からの4ビットの転送データは「出力」側の下位4ビットに出力され、「出力」側からの転送ならば、「出力」側の下位4ビットのデータが「入力」側の4ビットに出力される。B経路に信号が送られた場合、「入力」側からの転送ならば、「出力」側の下位1ビットには「0」が出力され下位2ビット目から5ビット目にかけて「入力」側のデータが出力され(即ち、1ビット左シフトされ)、「出力」側からの転送ならば、「出力」側の下位2ビット目から5ビット目のデータが「入力」側の4ビットに出力される(即ち、1ビット右シフトされる)。以下、C経路D経路に関しても同様である。図7のバレルシフタでは、データが転送される方向によりデータが右シフトされるか、左シフトされるかが決定される。
【0036】
このように構成されたプロセッサ47によれば、レジスタ52から送り出されたオペランドデータはバレルシフタ54で左シフトされ、一方の入力部49から算術論理演算器48に送られる。バレルシフタ54で左シフトするシフト量(桁送り数)は、機械語命令コードにより指定される。算術論理演算器48の他方の入力部51にはアキュムレータ50から必要なデータが送られる。算術論理演算器48は、入力部49、51に入力されたデータを用い、機械命令コードに指定された所定の演算を行い、その演算結果をアキュムレータ50に送り出す。アキュムレータ50に蓄積されたデータは、機械命令コードの指定に基づいて、算術論理演算器48に入力されるとともに、第1のバス58を介してバレルシフタ54に送られ、このバレルシフタ54で右シフトされる。バレルシフタ54で右シフトするシフト量(桁送り数)は、機械語命令コードにより指定される。右シフトされたデータは、機械命令コードの指定に基づいて、必要に応じてレジスタ52に格納される。
【0037】
このように、双方向性のバレルシフタ54を用いたプロセッサ47によれば、例えば、単精度のデータをバレルシフタ54で倍精度に変換して算術論理演算器48で所定の演算を行い、その演算結果を再びバレルシフタ54で単精度に変換してレジスタ52に戻すということができる。また、バレルシフタ54はデータを双方向に変換できるので、第1の実施形態と第2の実施形態に係る2つのプロセッサ20、40の特定の機能を一つのプロセッサ47に組み入れることができる。
【0038】
IV.第4の実施形態
第4の実施形態に係るプロセッサの構成を図8に示す。このプロセッサ60は、第1の実施形態のプロセッサ20に、Tレジスタ70とビット選択・反転部72を設けたもので、これらTレジスタ70とビット選択・反転部72は、バス82と、算術論理演算器62との間に、直列に接続されている。機械命令コード74は、第1の実施形態のプロセッサ20用の機械命令コード37と違って、Tレジスタ70上のビット位置を指定する位置Tと、位置Tで指定したビット上のデータ(1又は0)を反転するか否かを指定するコードT/Fを有する。
【0039】
このプロセッサ60では、特定のデータがTレジスタ70に送られる。ビット選択・反転部72は、この特定のデータに含まれる所定ビットのデータを呼び出し、そのデータを算術論理演算器62に送る。このとき、機械命令コード74でデータの反転が指定されていれば、Tレジスタ70から呼び出したデータを反転し(例えば、呼び出したデータが1であれば0に反転)、反転後のデータを算術論理演算器62に送り出す。算術論理演算器62は、バレルシフタ28、アキュムレータ24、及びビット選択・反転部72から送られたデータをもとに、機械命令コード74で指定された演算を実行する。
【0040】
このように構成されたプロセッサ60によれば、ビット選択・反転部72で選択されたTレジスタ70のデータに基づいて算術論理演算器62で所定の演算を行うか否かを決定でき、このことを利用すると高価でハードウェア量の多い乗算器等を用いることなく乗算処理等が行える。したがって、乗算を行うべきプロセッサはその回路構成が簡単となると共に安価に構成できる。
【0041】
プロセッサ60を用いて、a×nの演算(乗数nが整数)を行う場合のプログラム例(アセンブリ言語)を表2に示す。ここでは、nは、例えばレジスタ64に格納されているデータで、8ビットのデータ長を有する。また、以下において乗算a×nの「被乗数」とはaのことであり、「乗数」とはnのことである。
【表2】
【0042】
このプログラムにおいて、「ADD/Tm」はTレジスタ70のmビットの内容が1である場合に加算を行う条件付き加算命令、「LDT」はTレジスタ70へnをロードするロード命令、「a」は被乗数が格納されているレジスタまたはメモリ・アドレス、「:Zm」の「m」はオペランドデータ(即ちaのレジスタに格納されるデータ、またはaのアドレスのメモリ上に格納されるデータ)の左シフト量、「Z」はゼロ拡張を示す。
【0043】
なお、条件付き加算命令については、Tレジスタ70のmビットの内容が0である場合に加算を行うという条件にすることもできる。いずれの条件にするかの制御は、例えば、Tレジスタ70のmビットの内容を反転する(1を0にする、0を1にする)か否かを、図8機械語命令コード74の24ビット目のデータに基づいて決定することで、可能となる。
【0044】
また、Tレジスタ70のmビットの内容が0である場合に加算を行う条件付き加算命令のアセンブリ言語による記述は、例えば、「ADD/Fm」とすることができる。
【0045】
さらに、プロセッサ60に対する命令において、条件付き加算の条件を格納するビットを多種類設定すると、命令コードが多種類化する(表2参照)。命令コードの多種類化が好ましくない場合、条件を格納するビットは所定の位置に固定し、一回の条件付き加算ごとにTレジスタ70に格納される乗数を1ビットシフトして所定の位置のビットの内容から条件を抽出することで、命令コードの種類を増やすことなく表2と同様の処理を実現できる。
【0046】
さらにまた、すべての命令を条件付き命令とすることが命令コードの増大を招く場合、条件付き加算を特別な命令、例えばMUL命令として他の演算命令と区別することで、1命令の追加だけで済む。
【0047】
V.第5の実施形態
図9は第4の実施形態に係るプロセッサ60の変形例を示す。本実施形態では、第4の実施形態のTレジスタ70、ビット選択・反転部72に代えて、Mレジスタ100、ビット選択・ブースデコーダ部102が設けてある。このビット選択・ブースデコーダ部102はインクリメント部104に接続され、このインクリメント部104がバレルシフタ96に接続されている。
【0048】
このプロセッサ88によれば、特定のデータがMレジスタ100に送られる。ビット選択・ブースデコーダ部102は、この特定のデータに含まれる所定ビットのデータと、これに隣接する上位1ビットと下位1ビットのデータ(このとき、上位1ビットと下位1ビットの両方にデータが無ければ、存在する片方のデータだけ)を呼び出し、選択対象のビットの内容を2次ブースアルゴリズムに当てはめて解読(ブースデコード)し、例えば算術論理演算器90に対して加減算の際の条件(算術論理演算器90で加算する、減算する、又は何もしないという条件。)を与える。算術論理演算器90は、アキュムレータ24、バレルシフタ96、及びビット選択・ブースデコーダ部102から送られたデータをもとに、機械命令コードで指定された演算を実行する。ビット選択・ブースデコード部102は、前述のようにMレジスタ100上のビット選択の機能と、2次ブースアルゴリズムを用いたブースデコードの機能を有するが、そのブースデコードの情報のうちシフト量の増否の情報がインクリメント部104に与えられる。この場合、インクリメント部104はブースデコードの情報いかんによりバレルシフタ96のシフト量を1増やすか、もしくは増やさない(インクリメントするか、もしくはしない)。したがって、バレルシフタ96でシフトするシフト量(桁送り数)は、インクリメント部からの情報が付加されて決定されるが、その情報が付加される前の基本となるシフト量は機械語命令コードにより指定される。
【0049】
2次ブースアルゴリズムを利用した上記プロセッサ88では、乗数を2進法表記し、その最下位桁を端緒として1桁おきに桁(ビット)に注目し、注目対象桁の前後3桁の組み合わせにより、加減算の条件が決定される(表4参照)。例えば、乗数を特定レジスタ(Mレジスタ)100に格納し、それを基にビット選択・ブースデコード部102が、加減算の条件を判断する。
【0050】
a×nの乗算処理に利用される、アセンブリ言語で書かれたプログラム例を表3に示す。2次ブースアルゴリズムを用いた条件付き加減算命令は、「MUL」(表4参照)で表される。この表4は、注目対象桁の前後3桁の組み合わせと、それに対応する加減算の内容を示す。この表の演算処理の内容から明らかなように、被乗数(ここでは、a)の2のべき乗倍をさらに2倍する操作が必要になることがある。本実施形態の構成では、被乗数の2のべき乗倍をさらに2倍する操作が必要になるか否かはビット選択・ブースデコード部102が判断する。その判断結果データはインクリメント部104に転送され、その内容によりインクリメント部104は、バレルシフタ96のシフト量に1を加えるかもしくは何も加えない、という制御をする。
【表3】
Step Command 処理内容
1 LDM n nの値をMレジスタ100にロード
2 LDA #0 0をアキュムレータ24にロード
3 MUL/M0 a:Z0 Mのビット0によりaの1倍のMUL動作
4 MUL/M2 a:Z2 Mのビット2によりaの4倍のMUL動作
5 MUL/M4 a:Z4 Mのビット4によりaの16倍のMUL動作
6 MUL/M6 a:Z6 Mのビット6によりaの64倍のMUL動作
【表4】
MUL命令の動作
n+1(桁) n n−1 演算
0 0 0 0を加算(何もしない)
0 0 1 オペランドを加算
0 1 0 オペランドを加算
0 1 1 オペランドの2倍を加算
1 0 0 オペランドの2倍を減算
1 0 1 オペランドを減算
1 1 0 オペランドを減算
1 1 1 0を加算(何もしない)
【0051】
なお、表3において、「LDM」は、MUL命令の条件(即ち乗数)を格納するMレジスタ100へのロード命令、「MUL/Mm」はMレジスタ100のmビットの前後のビットの組み合わせ条件により、▲1▼0を加算、▲2▼オペランド(シフト後)を加算、▲3▼オペランド(シフト後)の2倍を加算、▲4▼オペランド(シフト後)を減算、▲5▼オペランド(シフト後)の2倍を減算、のいずれかを行う条件付き加減算命令、「a」は被乗数を格納するレジスタ又はメモリのアドレス、「:Zm」はオペランドデータ(即ちaのレジスタに格納されるデータ、またはaのアドレスのメモリ上に格納されるデータ)の左シフト量、「Z」はゼロ拡張、「m」はバレルシフタ96のシフト量を示す。
【0052】
以上のように、表2と表3を比較すると明らかなように、2次ブースアルゴリズムを利用した本実施形態によれば、アセンブリ言語による命令数が約半分に削減できる。
【0053】
VI.第6の実施形態
第6の実施形態に係るプロセッサの構成を図10に示す。このプロセッサ105は、第1の実施形態の変形例を示し、バス114と算術論理演算器106との間にMレジスタ116が接続されており、算術論理演算器106で行われた特殊減算(後述する。)の結果が送られるようにしてある。
【0054】
このプロセッサ105で実行される除算処理について説明する。以下では、除算n÷aにおいて「被除数」とはnのことであり、「除数」とはaのことである。
【0055】
プロセッサ105では、まずアキュムレータ24に被除数を格納し、算術論理演算器106で、被除数から除数の2のべき乗倍数(例えば除数の2k倍)を減算して商を求める。ここで、除数の2のべき乗倍のべき数(例えばk)を変えつつ(通常は大きな値から小さな値へ1ずつディクリメントしつつ)、減算を繰り返す。除数の2のべき乗倍数は、バレルシフタ112により求める。上記減算を1回行った結果、ボローが発生しない場合(キャリーが発生する場合)には「引けた」ことになる。この場合、減算結果をアキュムレータ24に格納し、Mレジスタ116の指定されたビット(例えばk桁目)にボローの反転即ち「1」を格納する。逆に、ボローが発生した場合(キャリーが発生しない場合)、アキュムレータ24の値をそのまま保存し、Mレジスタ116の指定されたビット(例えばk桁目)にボローの反転即ち「0」を格納する。本実施形態のプロセッサ105に対するアセンブリ言語は、このような特殊減算命令を加えている。
【0056】
このプロセッサ105を用いてn÷aの除算を実行するアセンブリ言語のプログラム例を以下に示す。ここで、nはレジスタ26上で16ビットのデータ、aは8ビットのデータとする。
【表5】
Step Command 意味
1 LDA n nをアキュムレータ24にロード
2 DIV/M7 a:Z7 aの128倍によりDIV動作、結果はM7へ格納
3 DIV/M6 a:Z6 aの64倍によりDIV動作、結果はM6へ格納
4 DIV/M5 a:Z5 aの32倍によりDIV動作、結果はM5へ格納
5 DIV/M4 a:Z4 aの16倍によりDIV動作、結果はM4へ格納
6 DIV/M3 a:Z3 aの8倍によりDIV動作、結果はM3へ格納
7 DIV/M2 a:Z2 aの4倍によりDIV動作、結果はM2へ格納
8 DIV/M1 a:Z1 aの2倍によりDIV動作、結果はM1へ格納
9 DIV/M0 a:Z0 aの1倍によりDIV動作、結果はM0へ格納
【0057】
このプログラムにおいて、「DIV/Mm」は減算結果に応じてアキュムレータ24を更新し、かつMレジスタ116の指定mビットに結果を格納する特殊減算命令、「a」は除数の格納されているレジスタ又はメモリのアドレス、「:Zm」はオペランドデータ(aのレジスタに格納されるデータ、またはaのアドレスのメモリ上に格納されるデータ)の左シフト量、「Z」はゼロ拡張を示す。演算の結果、アキュムレータ24に剰余、Mレジスタ116に商が格納される。
【0058】
このように、表5に示すように、特殊減算命令を設定し、減算の結果によりアキュムレータ24へ減算結果の格納又は元の値の格納のいずれかを選択し、選択結果をMレジスタ116の所定のビットに格納する、という以上の処理を適宜組み合わせることで、除算が実現できる。
【0059】
なお、命令の体系において、演算結果を格納するビットを多種類設定すると、命令コードが多種類化することになる(表5参照)が、命令コードの多種類化が好ましくない場合は、演算結果を格納するビットは所定の位置に固定し、一回の特殊減算ごとにMレジスタ116に格納されているデータ(商の途中値)を1ビットシフトし所定の位置のビットを結果格納ビットとしても、同様の処理を実現できる。
【0060】
また、上記表5の実施例では引き戻し法での除算であったが、減算結果に関わりなく、減算結果を順次使用していく引き放し法による除算においても、同様に除算が実現可能である。
【0061】
【発明の効果】
以上の説明から明らかなように、本発明の、バレルシフタによるシフト機能を備えた算術論理演算器を有するマイクロプロセッサによれば、以下のような効果が存する。
【0062】
算術論理演算器と、この算術論理演算器で処理するデータを格納する第1のデータ格納部と、この第1のデータ格納部から出力されたデータを左シフトし、かつデータのビット長を拡張して算術論理演算器に送るシフタとを備え、このシフタにおけるデータのシフト量が命令により指定されるマイクロプロセッサでは、積和演算を倍精度で行う場合であっても、処理ステップの増加の抑制、動作周波数の向上を通じて、演算速度を向上することができる。また、費用の高価化を抑制できる。
【0063】
算術論理演算器と、この算術論理演算器で処理するデータを格納する第1のデータ格納部と、算術論理演算器で処理されたデータを格納する第2のデータ格納部と、この第2のデータ格納部から第1のデータ格納部へ送られるデータを右シフトするシフタとを備え、このシフタにおけるデータのシフト量が命令により指定されるマイクロプロセッサでは、除算の除数が2のべき乗倍数である限り、除算の演算速度を向上でき、費用を安価化できる。
【0064】
算術論理演算器と、この算術論理演算器で処理する第1のデータを格納する第1のデータ格納部と、算術論理演算器で処理された第2のデータを格納する第2のデータ格納部と、第1のデータ格納部から算術論理演算器に送られる第1のデータを左シフトしかつデータのビット長を拡張し、第2のデータ格納部から第1のデータ格納部に送られる第2のデータを第1のデータのシフト方向とは逆の方向にシフトしかつデータのビット長を縮小するシフタとを備え、このシフタにおけるデータのシフト量が命令により指定されるマイクロプロセッサでは、倍精度の精度で行う積和演算の演算速度を向上でき、かつ費用の高価化を抑制でき、さらに除算の除数が2のべき乗倍数である限り、除算の演算速度を向上でき、かつ費用を安価化できる。
【0065】
算術論理演算器と、この算術論理演算器で処理するデータを格納する第1のデータ格納部と、この第1のデータ格納部から出力されたデータを左シフトし、かつデータのビット長を拡張して算術論理演算器に送るシフタと、データが転送される第3のデータ格納部と、第3のデータ転送部を構成する各ビットのうち1つを選択しそこに格納されるデータいかんで算術論理演算器に演算を行わない制御を与えるビット選択部とを備え、シフタにおけるデータのシフト量と、第3のデータ格納部を構成する各ビットのうち選択すべき対象ビットとが、命令により指定されるマイクロプロセッサでは、少量のハードウエアの追加により乗算が実行できるようになる。
【0066】
算術論理演算器と、この算術論理演算器で処理するデータを格納する第1のデータ格納部と、この第1のデータ格納部から出力されたデータを左シフトし、かつデータのビット長を拡張して算術論理演算器に送るシフタと、このシフタでのシフト量をさらに増加させ得るシフト量増加部と、データが転送される第3のデータ格納部と、第3のデータ転送部を構成する各ビットのうち複数を選択しそれらに格納されるデータいかんで算術論理演算器に演算の実行非実行の制御と演算の種類の指定を与え、かつシフト量増加部にシフタのシフト量を増加させるか否かの制御を与えるビット選択・ブースデコード部とを備え、シフタにおけるデータのシフト量と、第3のデータ格納部を構成する各ビットのうち選択すべき対象ビットとが、命令により指定されるマイクロプロセッサでは、少量のハードウエアの追加により2次ブースアルゴリズムの乗算が実行できるようになる。
【0067】
算術論理演算器と、この算術論理演算器で処理するデータを格納する第1のデータ格納部と、この第1のデータ格納部から出力されたデータを左シフトし、かつデータのビット長を拡張して算術論理演算器に送るシフタと、算術論理演算器での演算結果に対応したデータを所定の位置のビットに格納する第3のデータ格納部とを備え、シフタにおけるデータのシフト量が命令により指定されるマイクロプロセッサでは、少量のハードウエアの追加により除算が実行できるようになる。
【図面の簡単な説明】
【図1】 従来のプロセッサの構成図例。
【図2】 乗算器の出力に算術論理演算器(ALU)もしくは加算器を接続した従来のプロセッサの構成図例。
【図3】 算術論理演算器入力部にバレルシフタが置かれる、本発明の第1の実施の形態のプロセッサの構成図。
【図4】 本発明の第1の実施の形態のプロセッサに対する機械語命令コードフォーマット。
【図5】 アキュムレータの出力の位置にバレルシフタが置かれる、本発明の第2の実施の形態のプロセッサの構成図。
【図6】 第1のバスと第2のバスとの間にバレルシフタが置かれる、本発明の第3の実施の形態のプロセッサの構成図。
【図7】 バレルシフタの回路構成図例。
【図8】 特定のレジスタとそのレジスタに対するビット選択部を有する、本発明の第4の実施の形態のプロセッサの構成図と、該プロセッサに対する機械語命令コードフォーマット。
【図9】 特定のレジスタ、ビット選択及びブース・デコード部、及びインクリメント部を有する、本発明の第5の実施の形態のプロセッサの構成図。
【図10】 特定のレジスタを有する、本発明の第6の実施の形態のプロセッサの構成図。
【符号の説明】
20、40、47、60、88、105・・・プロセッサ、2、12、22、48、62、90、106・・・算術論理演算器(ALU)、4、14、24、50・・・アキュムレータ、6、16、26、52・・・レジスタ又はメモリ、18・・・乗算器、28、44、54、96、112・・・バレルシフタ、1、30、46、82、98、114・・・バス、56・・・第2のバス、58・・・第1のバス、32、34、49、51・・・データ入力部、36、53・・・データ出力部、70・・・Tレジスタ、72・・・ビット選択部、37、74・・・命令コードフォーマット、100、116・・・Mレジスタ、102・・・ビット選択及びデコード部、104・・・インクリメント部、A、B、C、D・・・シフト量制御のための信号経路、S・・・スイッチング素子
Claims (6)
- 算術論理演算器と、
この算術論理演算器で処理するデータを格納する第1のデータ格納部と、
この第1のデータ格納部から出力されたデータを左シフトし、かつデータのビット長を拡張して算術論理演算器に送るシフタとを備え、
所定量の左シフトとビット長拡張及び演算が1命令で実行されることを特徴とするマイクロプロセッサ。 - 算術論理演算器と、
この算術論理演算器で処理するデータを格納する第1のデータ格納部と、
算術論理演算器で処理されたデータを格納する第2のデータ格納部と、
この第2のデータ格納部から第1のデータ格納部へ送られるデータを右シフトするシフタとを備え、
所定量の右シフトとビット長縮小及び演算が1命令で実行されることを特徴とするマイクロプロセッサ。 - 算術論理演算器と、この算術論理演算器で処理する第1のデータを格納する第1のデータ格納部と、算術論理演算器で処理された第2のデータを格納する第2のデータ格納部と、第1のデータ格納部から算術論理演算器に送られる第1のデータを左シフトしかつデータのビット長を拡張し、第2のデータ格納部から第1のデータ格納部に送られる第2のデータを第1のデータのシフト方向とは逆の方向にシフトしかつデータのビット長を縮小するシフタとを備え、このシフタにおけるデータのシフト量が命令により指定されるマイクロプロセッサ。
- 請求項1のマイクロプロセッサにおいて、
データが転送される第3のデータ格納部と、第3のデータ転送部を構成する各ビットのうち1つを選択しそこに格納されるデータいかんで算術論理演算器に演算を行わない制御を与えるビット選択部とを備え、第3のデータ格納部を構成する各ビットのうち選択すべき対象ビットが命令により指定されるマイクロプロセッサ。 - 請求項1のマイクロプロセッサにおいて、
シフタでのシフト量をさらに増加させ得るシフト量増加部と、データが転送される第3のデータ格納部と、第3のデータ転送部を構成する各ビットのうち複数を選択しそれらに格納されるデータいかんで算術論理演算器に演算の実行非実行の制御と演算の種類の指定を与え、かつシフト量増加部にシフタのシフト量を増加させるか否かの制御を与えるビット選択・ブースデコード部とを備え、第3のデータ格納部を構成する各ビットのうち選択すべき対象ビットが命令により指定されるマイクロプロセッサ。 - 請求項1のマイクロプロセッサにおいて、
算術論理演算器での演算結果に対応したデータを所定の位置のビットに格納する第3のデータ格納部を備えたマイクロプロセッサ。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP24493598A JP3638218B2 (ja) | 1998-08-31 | 1998-08-31 | シフト機能付きalu命令を持つマイクロプロセッサ |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP24493598A JP3638218B2 (ja) | 1998-08-31 | 1998-08-31 | シフト機能付きalu命令を持つマイクロプロセッサ |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000076045A JP2000076045A (ja) | 2000-03-14 |
JP3638218B2 true JP3638218B2 (ja) | 2005-04-13 |
Family
ID=17126164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP24493598A Expired - Lifetime JP3638218B2 (ja) | 1998-08-31 | 1998-08-31 | シフト機能付きalu命令を持つマイクロプロセッサ |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3638218B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4545272B2 (ja) * | 2000-03-31 | 2010-09-15 | 旭化成エレクトロニクス株式会社 | デジタルアッテネータ、デジタル減衰処理方法 |
-
1998
- 1998-08-31 JP JP24493598A patent/JP3638218B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JP2000076045A (ja) | 2000-03-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7949696B2 (en) | Floating-point number arithmetic circuit for handling immediate values | |
US4893268A (en) | Circuit and method for accumulating partial products of a single, double or mixed precision multiplication | |
JP3605181B2 (ja) | 掛け算累算命令を使用したデータ処理 | |
EP0158530B1 (en) | Nonrestoring divider | |
US5105378A (en) | High-radix divider | |
US6108682A (en) | Division and/or square root calculating circuit | |
JP3418460B2 (ja) | 倍精度除算回路および方法 | |
US6009450A (en) | Finite field inverse circuit | |
KR100203468B1 (ko) | 부동소수점수를 위한 산술연산장치 | |
JP3081710B2 (ja) | オーバーフロー検出機能付き乗算装置 | |
JPS5862746A (ja) | 割算装置 | |
US5301139A (en) | Shifter circuit for multiple precision division | |
JPH0113130B2 (ja) | ||
JP3476960B2 (ja) | 算術論理演算装置及び制御方法 | |
JPH022171B2 (ja) | ||
US4228518A (en) | Microprocessor having multiply/divide circuitry | |
US6941334B2 (en) | Higher precision divide and square root approximations | |
JPH05250146A (ja) | 整数累乗処理を行なうための回路及び方法 | |
US4692891A (en) | Coded decimal non-restoring divider | |
EP0379998B1 (en) | Divider for carrying out high speed arithmetic operation | |
KR19980052740A (ko) | 디지탈 신호 처리기에서의 2배 정밀도 곱셈연산 수행방법 | |
US5576982A (en) | Fast significant bit calculator and its application to integer multiplication and division | |
JP3638218B2 (ja) | シフト機能付きalu命令を持つマイクロプロセッサ | |
EP0452099A2 (en) | Divider unit | |
JP3579087B2 (ja) | 演算器およびマイクロプロセッサ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20040628 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040706 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040906 |
|
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: 20050104 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050107 |
|
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: 20080121 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090121 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100121 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110121 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120121 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130121 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140121 Year of fee payment: 9 |
|
EXPY | Cancellation because of completion of term |