JP5397061B2 - 演算処理装置、その制御方法および演算処理プログラム - Google Patents

演算処理装置、その制御方法および演算処理プログラム Download PDF

Info

Publication number
JP5397061B2
JP5397061B2 JP2009170258A JP2009170258A JP5397061B2 JP 5397061 B2 JP5397061 B2 JP 5397061B2 JP 2009170258 A JP2009170258 A JP 2009170258A JP 2009170258 A JP2009170258 A JP 2009170258A JP 5397061 B2 JP5397061 B2 JP 5397061B2
Authority
JP
Japan
Prior art keywords
value
count value
dividend
divisor
correction
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.)
Active
Application number
JP2009170258A
Other languages
English (en)
Other versions
JP2011028312A (ja
Inventor
健一 北村
志郎 鴨志田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2009170258A priority Critical patent/JP5397061B2/ja
Priority to US12/836,061 priority patent/US9009209B2/en
Priority to EP20100170200 priority patent/EP2280340B1/en
Publication of JP2011028312A publication Critical patent/JP2011028312A/ja
Application granted granted Critical
Publication of JP5397061B2 publication Critical patent/JP5397061B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/535Dividing only

Description

本発明は、演算処理装置、その制御方法および演算処理プログラムに関する。
除算処理での商の算出手法の1つとして、被除数または中間剰余に対する除数の減算または加算処理(または減算処理のみ)を繰り返す“ループ処理”を用いた手法がある。ループ処理を用いた除算処理手法としては、引き戻し法、引き放し法、SRT(Sweeney-Robertson-Tocher)法などが一般的に知られている。
図25は、ループ処理を用いた除算処理手順の例を示す図である。
ループ処理を用いた除算処理手順は、一般的に、図25に示すように、前処理910、ループ処理920および後処理930の3つの処理に大別される。また、ループ処理920は、部分商算出処理921を含む。
前処理910では、例えば、絶対値化処理や左シフトなどにより、ループ処理920を行う被除数と除数のデータ形式が整えられ、また、ループ処理920での部分商算出処理921のループ回数が算出される。ここでは、除算回路において、部分商算出処理921の1サイクルで1ビットの部分商が算出される場合に、部分商算出処理921のループ回数を算出する回路を“ループカウンタ”と呼び、必要とされる全ループ回数を“ループカウント値”と呼ぶ。
ループカウント値は、被除数および除数のそれぞれのLZC(Leading Zero Count)値を基に算出される。LZC値は、入力された2進数データのうち最上位ビットから“0”が連続して存在する個数を示す。被除数のLZC値、除数のLZC値をそれぞれLZ_A,LZC_Bとすると、ループカウント値LCは、次の式(1)によって算出される。
LC=LZC_B−LZC_A+1 ・・・(1)
ループ処理920では、主として、1ビットの部分商を算出する部分商算出処理921が繰り返し実行される。部分商算出処理921では、例えば、被除数または中間剰余に対する除数の減算または加算(以下、“加減算”と呼ぶ)、その加減算結果の比較に基づく部分商、中間商および中間剰余の算出、ループカウント値の減算、中間剰余の左シフトなどが行われる。後処理930では、例えば、ループ処理920によって算出された中間商の補正が行われ、最終商が算出される。
ここで、ループカウント値は、最終商のビット幅を表し、それと同時に部分商算出処理921のループ回数を示している。ループ回数は、前述の通り、被除数および除数から求められる。ループカウント値は、部分商算出処理921が実行されるごとに1ずつ減算され、ループカウント値が“0”になると、ループ処理920が終了される。
また、中間剰余とは、部分商算出処理921において被除数に対して除数を加減算することで得られる値を指す。部分商算出処理921の初回実行時には、除数を加減算する対象は被除数であるが、2回目以降の実行時には、除数を加減算する対象は、直前の部分商算出処理921で算出された中間剰余となる。ただし、ここでは説明を簡単にするために、部分商算出処理921において除数によって加減算される対象を、被除数を含めて中間剰余ということにする。
部分商とは、部分商算出処理921において、加減算に基づく中間剰余と除数との比較によって得られる部分的な商である。中間商は、部分商算出処理921の実行ごとに得られる部分商を足し合わせていくことで算出される値である。
ところで、除算処理では、複数ビット分の部分商を1回の部分商算出処理で求めることにより、処理を高速化できるようになる。また、除算処理方式に対しては、1回の部分商算出処理の実行サイクル(以下、単に“サイクル”と呼ぶ)で求められる部分商のビット幅nに応じて、Radix−2nという名称が使用されることがある。Radix−2nによる除算では、1サイクル内での演算に関する基数を2jとしたとき、1サイクル当たりk回の加減算および比較処理が実行される。これにより、1サイクル当たりnビット分(ただし、n=j×kであり、j,kはともに1以上の整数)の部分商が算出される。
n≧2である場合、1サイクル当たり複数ビット分の部分商が算出されることから、n=1の場合より例えばnの倍数の値に応じた速度でループ処理を行い、最終商を算出することが可能になる。このように、1サイクルに複数ビットの部分商を算出する除算方式は、“高基数除算方式”と呼ばれている。
ここで、1サイクルでnビットの部分商を算出する処理を“nビット部分商算出処理”と呼ぶことにする。n≧2,k=1の場合、nビット部分商算出処理が1回実行されると、被除数または中間剰余と除数との比較処理によりj(=n)ビット分の部分商が一度に出力される。また、比較処理が1回実行されるごとに、ループカウント値はnだけ減算される。
一方、n≧2,j=1の場合、nビット部分商算出処理が1回実行されると、被除数または中間剰余と除数とを比較する比較処理が、直列にk(=n)回実行される。1回の比較処理により、1ビット分の部分商が算出されるとともに、ループカウント値は“1”だけ減算される。従って、1サイクルにおいて、比較処理がk回実行されることで、最終的にnビットの中間商が算出される。
このように、Radix−2n除算処理では、1サイクルにnビットずつ部分商が求められる。また、前述のように、ループカウント値は最終商のビット幅を表すため、Radix−2n除算処理では、ループカウント値は1サイクル当たりnずつ減算される。ここで、ループカウント値の初期値がnの倍数である場合には、ループ処理920の終了時にループカウント値はちょうど“0”となる。しかしながら、ループカウント値の初期値がnの倍数でない場合には、ループ処理920の終了時にループカウント値は“0”を通り越してマイナス値になってしまう。この場合、ループ処理920における最終回のnビット部分商算出処理において正しい部分商を算出できず、最終商はビット幅がnではない不正な値となってしまう。このようにループカウント値の初期値がnの倍数でない場合、正しい最終商を出力するためには、次の図26,図27に示す処理例のような追加的な処理を施す必要が生じる。
図26は、ループカウント値の初期値がnの倍数でない場合に適用可能な第1の処理例を示す図である。また、図27は、ループカウント値の初期値がnの倍数でない場合に適用可能な第2の処理例を示す図である。なお、図26,図27では、図25に対応する構成要素には同じ符号を付して示している。
図26,図27では、nビットの部分商を算出するnビット部分商算出処理921aを繰り返す処理を、ループ処理920aとして示している。ループ処理920aでは、nビット部分商算出処理921aを1回実行するごとにループカウント値がnだけ減算され、nビット部分商算出処理921aはループカウント値が0以下になるまで繰り返される。
第1の処理例としては、図26に示すように、ループ処理920aの終了後に、この時点で算出された中間商を正しい商になるように修正する商修正処理940を実行する方法が考えられる。商修正処理940では、例えば、nビット部分商算出処理921a内の加減算・比較処理とは逆の処理手順が、その加減算・比較処理が余計に実行された回数だけ実行される。
しかし、このような商修正処理940が追加される分、除算処理の処理手順は複雑になる。また、除算回路において商修正処理940を実行するためには、例えば、nビット部分商算出処理921aでの加減算・比較処理の処理内容のうち必要な情報を記録する回路や、加減算・比較処理とは逆の処理手順で処理を行う回路などがさらに必要になる。このため、回路規模が大きくなり、それに伴って消費電力が増大する、レイテンシが悪化するといった問題がある。
一方、第2の除算処理例としては、図27に示すように、ループ処理920aの中で、nビット部分商算出処理921aを実行する前に、その時点でのループカウント値を基に必要に応じて剰余修正処理922を実行する方法が考えられる。剰余修正処理922では、例えば、その時点でのループカウント値がn未満である場合にのみ、中間剰余の出力処理に比較結果を反映しないなど、中間剰余の値に対する特別な処理が実行される。
しかし、上記の第1の処理例と同様、このような剰余修正処理922が追加される分、除算処理の処理手順は複雑になる。また、除算回路において、剰余修正処理922を実行する回路は、ループ処理920aを実行する回路の中に組み込む必要がある。このため、例えば、剰余修正処理922の実行回路は、現在のループカウント値に関係なく、nビット部分商算出処理921aが実行されるごとに動作することになる。従って、単に回路規模が大きくなるという問題だけでなく、現在のループカウント値がn以上となる状態においては、無駄な動作により余計な電力が消費される問題もある。また、ループ処理920aの途中で最終剰余を出力する場合には、ループ処理920aから途中で抜けるデータパス用に設けられるセレクタなどの回路をさらに組み込む必要が生じる。
なお、除算処理方法の例としては、前処理において、除数のシフト数と被除数のシフト数との差が常にnの整数倍となるように、除数および被除数をシフトすることにより、除算回路で算出される商の桁数がnの整数倍となるようにしたものがある。また、他の除算処理方法の例としては、ビット当たりの除算処理量の低減を目的として、除数を16ビット分左シフトした後に“1”を減算し、得られた値をループ処理に投入するようにした除算処理方法がある。
特開平4−291418号公報 特開2002−175179号公報
前述のように、従来の除算処理では、ループカウント値の初期値がnの倍数でない場合、正しい最終商を出力する追加的な処理が必要であった。このため、部分商の算出以降の処理手順が複雑になるという問題があった。また、この追加処理をハードウェア回路により実現した場合には、回路規模、消費電力、レイテンシなどが大きくなるという問題があった。
本発明はこのような点に鑑みてなされたものであり、より簡易な処理手順により高基数除算を実行可能な演算処理装置、その制御方法およびプログラムを提供することを目的とする。
上記目的を達成するために、nビット幅(nは1以上の整数)の部分商を繰り返し算出することにより、被除数を除数で除算する除算処理を実行する演算処理装置が提供される。この演算処理装置は、前記被除数の絶対値の最上位桁からの0の個数である被除数ゼロカウント値を計数する被除数ゼロカウント値計数部と、前記除数の絶対値の最上位桁からの0の個数である除数ゼロカウント値を計数する除数ゼロカウント値計数部と、前記被除数ゼロカウント値と前記除数ゼロカウント値と前記nの値とに基づいて、ループカウント値の補正値を算出する補正値算出部と、前記被除数ゼロカウント値と前記除数ゼロカウント値と前記補正値とに基づいて、補正ループカウント値を算出する補正ループカウント値算出部と、前記被除数の絶対値を、前記被除数ゼロカウント値と前記補正値とに基づく桁数だけシフトする被除数シフト部と、前記除数の絶対値を、前記除数ゼロカウント値に基づいてシフトする除数シフト部と、前記被除数シフト部からの出力値と前記除数シフト部からの出力値と前記補正ループカウント値とに基づいて、除算演算を実行する除算ループ処理部と、を有する。
また、上記目的を達成するために、上記の演算処理装置の制御方法、および、上記の演算処理装置の機能を実現する演算処理プログラムが提供される。
上記の演算処理装置、その制御方法および演算処理プログラムでは、より簡易な処理手順により高基数除算を実行可能になる。
第1の実施の形態の演算処理装置の構成を示す図である。 第2の実施の形態の除算回路の構成を示す図である。 第2の実施の形態の前処理回路の内部構成を示す図である。 絶対値化回路の内部構成例を示す図である。 ゼロ拡張回路の内部構成例を示す図である。 補正値算出回路の内部構成例を示す図である。 LC算出回路の内部構成例を示す図である。 前処理回路による前処理手順の例を示すフローチャートである。 除算ループ回路の内部構成例を示す図である。 図9に示したデコーダの入出力の関係を示す真理値表である。 図9の除算ループ回路における除算ループ処理の手順を示すフローチャートである。 n=2の場合の従来の除算の例を示す図である。 第2の実施の形態の前処理を適用した、n=2の場合の除算の例を示す図である。 n=4の場合の従来の除算の例を示す図である。 第2の実施の形態の前処理を適用した、n=4の場合の除算の例を示す図である。 第3の実施の形態の前処理回路の構成を示す図である。 シフト値補正回路の内部構成例を示す図である。 第3の実施の形態の前処理回路による前処理手順の例を示すフローチャートである。 第4の実施の形態の前処理回路の構成を示す図である。 制御回路が備える、セレクト信号を出力する回路の構成例を示す図である。 制御状態とセレクト信号との対応を示す図である。 第4の実施の形態の前処理回路による前処理手順を示すフローチャートである。 コンピュータのハードウェア構成例を示す図である。 コンピュータにおける前処理手順の例を示すフローチャートである。 ループ処理を用いた除算処理手順の例を示す図である。 ループカウント値の初期値がnの倍数でない場合に適用可能な第1の処理例を示す図である。 ループカウント値の初期値がnの倍数でない場合に適用可能な第2の処理例を示す図である。
以下、実施の形態を図面を参照して詳細に説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態の演算処理装置の構成を示す図である。
図1に示す演算処理装置1は、除数および被除数の入力を受け付け、被除数を除数で除算する除算処理機能を備えている。特に、この演算処理装置1は、nビット幅(ただし、nは1以上の整数)の部分商を繰り返し算出することにより除算処理を実行する。演算処理装置1は、このような除算処理機能として、前処理部10と除算ループ処理部20とを備えている。
なお、演算処理装置1は、例えば、CPU(Central Processing Unit)として実現される。この場合、前処理部10および除算ループ処理部20の各機能は、例えば、CPUの内部の演算回路として実現される。また、前処理部10および除算ループ処理部20の各機能は、ソフトウェアによって実現されてもよい。この場合、前処理部10および除算ループ処理部20の各機能は、例えば、情報処理装置が備えるCPUが所定のプログラムを実行することにより実現される。
前処理部10は、被除数および除数の整形や、除算ループ処理部20の処理で必要な値の算出など、除算ループ処理部20の処理に対する前処理を実行する。前処理部10は、このような処理を実行する機能として、絶対値化処理部11,12、被除数ゼロカウント値計数部13、除数ゼロカウント値計数部14、補正値算出部15、補正ループカウント値算出部16、被除数シフト部17および除数シフト部18を備えている。
絶対値化処理部11,12は、入力された被除数Aおよび除数Bをそれぞれ絶対値化する。ただし、入力された被除数および除数がともに正の値であることが確定している場合には、絶対値化処理部11,12は必要ではない。
被除数ゼロカウント値計数部13は、絶対値化処理部11からの出力値の最上位ビットから連続する0の個数を計数する。ここでは、計数された0の個数を“ゼロカウント値LZC_A”と呼ぶ。除数ゼロカウント値計数部14は、絶対値化処理部12からの出力値の最上位ビットから連続する0の個数を計数する。ここでは、計数された0の個数を“ゼロカウント値LZC_B”とする。
補正値算出部15は、計数されたゼロカウント値LZC_A,LZC_Bと、nの値とを基に、ループカウント値LCを補正する補正値CRを算出する。ここで、ループカウント値LCは、最終商のビット幅を示す値であり、前述の式(1)によって求められる。また、補正値CRは、次の式(2)によって算出される。なお、式(2)に示した“%”は、剰余を求めることを示す演算子である。
CR=n−(LZC_B−LZC_A)%n−1 ・・・(2)
補正ループカウント値算出部16は、計数されたゼロカウント値LZC_A,LZC_Bと、補正値算出部15からの補正値CRとを基に、補正ループカウント値LC’を算出する。補正ループカウント値LC’は、次の式(2)によって算出される。
LC’=LC+CR
=LZC_B−LZC_A+{n−(LZC_B−LZC_A)%n}・・・(3)
被除数シフト部17は、絶対値化処理部11からの出力値を、被除数のゼロカウント値LZC_Aと補正値CRとを基にシフトする。例えば、被除数シフト部17は、絶対値化処理部11からの出力値を、ゼロカウント値LZC_Aだけ左シフトした後、補正値CRだけ右シフトする。なお、これらの左シフトおよび右シフトの処理順が入れ替えられてもよい。あるいは、被除数シフト部17は、絶対値化処理部11からの出力値を、(LZC_A−CR)だけ左シフトしてもよい。
除数シフト部18は、絶対値化処理部12からの出力値を、除数のゼロカウント値LZC_Bを基にシフトする。具体的には、除数シフト部18は、絶対値化処理部12からの出力値を、ゼロカウント値LZC_Bだけ左シフトする。
以上の処理が実行された結果、被除数シフト部17および除数シフト部18からの出力値は、それぞれ整形された被除数および除数として除算ループ処理部20に入力される。ここで、除算ループ処理部20に入力される被除数および除数を、それぞれ“被除数A’”、“除数B’”と呼ぶ。また、補正ループカウント値算出部16により算出された補正ループカウント値LC’も、除算ループ処理部20に入力される。
除算ループ処理部20は、被除数A’を除数B’によって除算する。除算ループ処理部20は、nビット幅の部分商を算出する処理を補正ループカウント値LC’に応じた回数だけ繰り返すことにより、商および剰余を算出する。以下、nビット幅の部分商を算出する処理を、“nビット部分商算出処理”と呼ぶことにする。このような除算手順としては、引き戻し法、引き放し法、SRT法などを用いた除算手順を適用することが可能である。また、nビット部分商算出処理では、除数B’を用いた比較処理が直列にn回実行される処理手順が適用されることが望ましい。
ここで、前処理部10での処理手順を、従来の前処理の手順と対比する。従来の前処理では、被除数の絶対値をゼロカウント値LZC_Aだけ左シフトして、整形された被除数として除算ループ処理に投入するとともに、除数の絶対値をゼロカウント値LZC_Bだけ左シフトして、整形された除数として除算ループ処理に投入していた。また、除算ループ処理でのnビット部分商算出処理の繰り返し回数は、ループカウント値LCを基に決定されていた。
除算ループ処理では、nビット部分商算出処理が繰り返し実行され、nビット部分商算出処理が実行されるたびに、ループカウント値LCはnずつ減算される。そして、ループカウント値LCが0以下になると、ループ処理が終了される。例えば、引き戻し法が適用される場合、初回のnビット部分商算出処理では、被除数から除数が減算され、その減算結果からnビット分の部分商が決定されるとともに、中間剰余が算出される。また、ループカウント値LCの値がnだけ減算される。2回目以降のnビット部分商算出処理では、nビット分だけ左シフトされた中間剰余から除数が減算され、その減算結果からnビット分の部分商が決定されるとともに、中間剰余が算出される。また、ループカウント値LCの値がnだけ減算される。
ここで、ループカウント値LCの値がnの倍数であれば、いずれかのnビット部分商算出処理の終了時に、ループカウント値LCの値が0となり、この時点での部分商を基に正しい最終商が出力される。しかし、ループカウント値LCの値がnの倍数でない場合には、いずれかのnビット部分商算出処理の終了時に、ループカウント値LCの値が0未満の値となってしまう。この場合、最終商のビット幅はループカウント値LCとは一致せず、正しい最終商が出力されない。正しい最終商を求めるためには、図26に示した商修正処理940や、図27に示した剰余修正処理922などが必要となる。
これに対して、本実施の形態の前処理部10では、補正ループカウント値算出部16において、補正値CRを用いて、ループカウント値がnの倍数になるように補正される。すなわち、被除数Aおよび除数Bの値がどのような値であっても、補正ループカウント値算出部16から出力される補正ループカウント値LC’はnの倍数となる。
除算ループ処理部20は、従来のループカウント値LCの代わりに補正ループカウント値LC’の入力を受け、nビット部分商算出処理を繰り返す。また、除算ループ処理部20は、nビット部分商算出処理を実行するたびに、補正ループカウント値LC’をnだけ減算する。これにより、いずれかのnビット部分商算出処理の終了時に補正ループカウント値LC’は0となる。
ただし、式(2)によれば、被除数Aおよび除数Bに基づく従来のループカウント値LCがnの倍数となる場合には、補正値CRは0になる。しかしながら、被除数Aおよび除数Bに基づく従来のループカウント値LCがnの倍数とならない場合には、補正値CRは1以上になる。
補正値CRが1以上になる場合、補正ループカウント値LC’は従来のループカウント値LCより大きくなる。このため、除算ループ処理全体において、1ビットの部分商を得る加減算・比較処理の繰り返し回数が増加する。この場合、部分商のビット幅が増加することから、最終商のビット幅も大きくなり、正しい最終商は得られない。そこで、前処理部10では、被除数シフト部17において、補正値CRに基づいて被除数Aを補正することで、正しい最終商が出力されるようにしている。
ループ処理中のnビット部分商算出処理において得られる部分商は、被除数または中間剰余と除数との大小関係によって決まる。例えば、1回のnビット部分商算出処理での演算に関する基数を2jとすると、j=1とした引き戻し法による除算処理では、減算の対象となる被除数または中間剰余が除数より小さい場合には、得られる部分商は0となる。そして、元の被除数または中間剰余が1ビット左シフトされて、次の減算に投入される。
このことから、前処理の段階において、除算ループに投入する被除数を補正値CRだけ右シフトしておくことで、ループカウント値LCの補正により増加した分の部分商をすべて0にすることができる。すなわち、最終商の最上位から補正値CR分の値に対応する部分商がすべて0になり、実質的にこれらの部分商を算出する処理がスキップされるようになる。
前処理部10では、除算ループ処理部20に投入する被除数を補正値CRだけ右シフトする補正処理を、被除数シフト部17において実行している。これにより、被除数Aおよび除数Bに基づく従来のループカウント値LCがnの倍数でない場合でも、除算ループ処理部20によって正しい最終商が算出されるようになる。
なお、被除数シフト部17では、補正値CR分の補正処理(例えば、補正値CR分の右シフト処理)により、下位ビットのシフトアウトが発生する場合があり得る。このような事態を防止するためには、絶対値化処理後の被除数AがLZC_A≧n−1という条件を満たすようにすればよい。また、このような条件を満たさない被除数Aを許容するためには、例えば、絶対値化処理部11により絶対値化された被除数Aのビット幅を上位側に拡張して、拡張された上位ビットに0を設定するゼロ拡張部を、前処理部10に設ければよい。例えば、被除数Aを上位側に(n−1)ビット分だけ拡張するゼロ拡張部が設けられることにより、被除数Aの値に関係なく除算処理を正しく実行できる。なお、被除数Aのビット幅を拡張した場合には、絶対値化された除数Bの上位側のビット幅を同じビット数分だけ拡張して0を設定するゼロ拡張部を設けることで、除算ループ処理が正しく実行される。
以上の第1の実施の形態によれば、従来のループカウント値LCがnの倍数とならないような被除数Aおよび除数Bが入力された場合でも、除算処理を正しく実行できる。また、このような効果は、前処理部10において、補正値CRを基にループカウント値LCおよび被除数を補正することで得ることができる。そして、このようなループカウント値LCおよび被除数の補正を行うことで、除算ループ処理の後にさらに処理を追加する、あるいは除算ループ処理の手順を変更するという必要がなくなる。従って、例えば、除算ループ処理以降の処理に必要な回路の設計変更が不要となる。また、除算ループ処理以降の処理における消費電力やレイテンシが増大することを抑制できる。
また、前処理部10では、上記効果を得るために、上記の式(2)、式(3)のような単純な計算により補正値CRや補正ループカウント値LC’が求められる。特に、式(2)、式(3)では、従来も算出していたゼロカウント値LZC_A,LZC_Bが主に用いられる。また、被除数の補正もシフト量の調整により実現される。従って、従来の前処理手順に対して追加される処理手順を少なくすることができ、例えば、必要な回路の規模、処理による消費電力、レイテンシが増大することを抑制できる。
〔第2の実施の形態〕
図2は、第2の実施の形態の除算回路の構成を示す図である。
図2に示す除算回路2は、前処理回路100、除算ループ回路200および制御回路300を備える。前処理回路100および除算ループ回路200は、図1に示した前処理部10および除算ループ処理部20を、それぞれハードウェア回路によって実現した場合の一例である。すなわち、前処理回路100は、除算ループ回路200での処理に対する前処理を実行する。除算ループ回路200は、nビット幅の部分商を繰り返し算出することにより除算処理を実行する。制御回路300は、前処理回路100および除算ループ回路200の動作タイミングを制御する。また、制御回路300は、前処理回路100および除算ループ回路200のそれぞれの内部回路に対して、その動作を制御する各種制御信号を出力する。
なお、図示しないが、除算回路2にはさらに、除算ループ回路200での演算結果を基に最終的な商および剰余を出力する後処理回路が設けられてもよい。後処理回路は、除算ループ回路200の内部構成に応じて必要な場合に、除算回路2内に設けられればよい。
図3は、第2の実施の形態の前処理回路の内部構成を示す図である。
前処理回路100は、絶対値化回路101,102、ゼロ拡張回路111,112、リーディング・ゼロ・カウント(LZC)回路121,122、左シフタ131,132、右シフタ133、補正値算出回路140およびループカウント値(LC)算出回路150を備えている。
絶対値化回路101は、入力された被除数Aの絶対値を出力する。絶対値化回路102は、入力された除数Bの絶対値を出力する。
ゼロ拡張回路111は、絶対値化された被除数Aのビット幅を上位側に対して(n−1)ビット分だけ拡張し、拡張したビットに0を設定する。ゼロ拡張回路112は、絶対値化された除数Bのビット幅を上位側に対して(n−1)ビット分だけ拡張し、拡張したビットに0を設定する。
LZC回路121は、ゼロ拡張回路111の出力値の最上位ビットから連続する0の個数を計数し、ゼロカウント値LZC_Aを出力する。LZC回路122は、ゼロ拡張回路112からの出力値の最上位ビットから連続する0の個数を計数し、ゼロカウント値LZC_Bを出力する。
左シフタ131は、ゼロ拡張回路111からの出力値を、LZC回路121から出力されたゼロカウント値LZC_Aだけ左シフトする。左シフタ132は、ゼロ拡張回路112からの出力値を、LZC回路122から出力されたゼロカウント値LZC_Bだけ左シフトし、除数B’として除算ループ回路200に出力する。
補正値算出回路140は、LZC回路121,122からそれぞれ出力されたゼロカウント値LZC_A,LZC_Bと、あらかじめ設定されたnの値とを基に、前述の式(2)に従って補正値CRを算出する。
LC算出回路150は、LZC回路121,122からそれぞれ出力されたゼロカウント値LZC_A,LZC_Bと、補正値算出回路140から出力された補正値CRとを基に、前述の式(3)に従って補正ループカウント値LC’を算出する。算出結果は、除算ループ回路200に出力される。
右シフタ133は、左シフタ131からの出力値を、補正値算出回路140から出力された補正値CRだけ右シフトし、被除数A’として除算ループ回路200に出力する。
図4は、絶対値化回路の内部構成例を示す図である。なお、絶対値化回路101,102はともに同じ構成で実現可能であるので、ここでは絶対値化回路101の構成例についてのみ説明する。
絶対値化回路101は、インバータ103、加算回路104およびセレクタ105を備えている。インバータ103は、ゼロ拡張回路111からの出力値における各ビットの値を反転させる。加算回路104は、インバータ103からの出力値に1を加算する。
セレクタ105は、入力値の最上位ビットの値に応じて、入力値と加算回路104からの出力値のいずれか一方を出力する。具体的には、セレクタ105は、入力値の最上位ビットが0である場合には、入力値を選択して出力し、最上位ビットが1である場合には、加算回路104からの出力値を選択して出力する。
図5は、ゼロ拡張回路の内部構成例を示す図である。なお、ゼロ拡張回路111,112はともに同じ構成で実現可能であるので、ここではゼロ拡張回路111の構成例についてのみ説明する。
ゼロ拡張回路111は、ラッチ回路113を備えている。ラッチ回路113は、絶対値化回路101から入力される被除数Aのビット数より(n−1)ビット分だけ大きいビット幅のデータをラッチ可能である。そして、ラッチ回路113は、下位側のビットとして絶対値化された被除数Aの入力を受けるとともに、上位側の(n−1)ビット分には0の入力を受け、これらをラッチする。なお、ラッチ回路113でのラッチタイミングは、制御回路300からのタイミング制御信号(図示せず)によって制御されればよい。
nの値は、接続される除算ループ回路200の仕様に応じて、例えば制御回路300などからあらかじめ設定される。例えば、n=2の場合には、図5のように最上位ビットに0が入力され、被除数Aは1ビット分だけ上位側に拡張される。この場合、被除数Aが例えば“1000 0111”であれば、ラッチ回路113に保持される値は“0 1000 0111”となる。
図6は、補正値算出回路の内部構成例を示す図である。
補正値算出回路140は、減算回路141〜143と剰余算出回路144とを備えている。減算回路141は、nの値から1を減算する。nの値は、接続される除算ループ回路200の仕様に応じてあらかじめ設定される。減算回路142は、LZC回路122から出力されたゼロカウント値LZC_Bから、LZC回路121から出力されたゼロカウント値LZC_Aを減算する。
剰余算出回路144は、減算回路142の出力値をnの値で除算し、その剰余を出力する。減算回路143は、減算回路143の出力値から剰余算出回路144の出力値を減算する。その結果、減算回路143からは、式(2)に従って算出された補正値CRが出力される。
図7は、LC算出回路の内部構成例を示す図である。
LC算出回路150は、減算回路151と加算回路152とを備えている。減算回路151は、LZC回路122から出力されたゼロカウント値LZC_Bから、LZC回路121から出力されたゼロカウント値LZC_Aを減算する。なお、減算回路151は、例えば、補正値算出回路140の減算回路142と共通化してもよい。加算回路152は、補正値算出回路140から出力された補正値CRと、減算回路151からの出力値と、1とを加算する。その結果、加算回路152からは、式(3)に従って算出された補正ループカウント値LC’が出力される。
図8は、前処理回路による前処理手順の例を示すフローチャートである。
[ステップS11]絶対値化回路101は、入力された被除数Aを絶対値化する。また、絶対値化回路102は、入力された除数Bを絶対値化する。
[ステップS12]ゼロ拡張回路111は、制御回路300からのタイミング制御信号に応じて、絶対値化回路101により絶対値化された被除数Aを内部のラッチ回路に取り込む。また、ゼロ拡張回路112は、制御回路300からのタイミング制御信号に応じて、絶対値化回路102により絶対値化された除数Bを内部のラッチ回路に取り込む。
[ステップS13]LZC回路121は、ゼロ拡張回路111の出力値の最上位ビットから連続する0の個数を計数し、ゼロカウント値LZC_Aを出力する。また、LZC回路122は、ゼロ拡張回路112からの出力値の最上位ビットから連続する0の個数を計数し、ゼロカウント値LZC_Bを出力する。
[ステップS14]補正値算出回路140は、LZC回路121,122からそれぞれ出力されたゼロカウント値LZC_A,LZC_Bと、あらかじめ設定されたnの値とを基に、式(2)に従って補正値CRを算出する。
[ステップS15]左シフタ131は、絶対値化回路101からの出力値を、LZC回路121から出力されたゼロカウント値LZC_Aだけ左シフトする。右シフタ133は、左シフタ131からの出力値を、補正値算出回路140から出力された補正値CRだけ右シフトし、被除数A’として除算ループ回路200に出力する。一方、左シフタ132は、絶対値化回路102からの出力値を、LZC回路122から出力されたゼロカウント値LZC_Bだけ左シフトし、除数B’として除算ループ回路200に出力する。
なお、左シフタ131,132のシフト動作は、補正値CRの算出前に実行されてもよい。
[ステップS16]LC算出回路150は、LZC回路121,122からそれぞれ出力されたゼロカウント値LZC_A,LZC_Bと、補正値算出回路140から出力された補正値CRとを基に、式(3)に従って補正ループカウント値LC’を算出する。算出結果は、除算ループ回路200に出力される。
なお、ステップS15,S16の処理順は逆であってもよい。
次に、図9は、除算ループ回路の内部構成例を示す図である。図9では例として、n=2,j=1,k=2であるRadix−4除算処理を、引き戻し法を用いて実行する回路の構成例を挙げる。なお、図9に示す除算ループ回路200の構成は、あくまで一例である。n=2,j=1,k=2であるRadix−4除算処理を行う他の回路構成を適用することも可能である。
図9に示す除算ループ回路200は、セレクタ201、ラッチ回路202,203、減算回路211,212、左シフタ221〜223、セレクタ224,225、デコーダ226、ラッチ回路231,232、左シフタ233、加算回路234、セレクタ241、減算回路242およびラッチ回路243を備えている。
セレクタ201は、前処理回路100から出力された被除数A’と、左シフタ223からの出力値とのいずれか一方を選択的に出力する。ラッチ回路202は、セレクタ201からの出力値をラッチする。ここで、ラッチ回路202にラッチされる値を、“中間剰余初期値C’”と呼ぶ。ラッチ回路203は、前処理回路100から出力された除数B’をラッチする。
減算回路211は、ラッチ回路202にラッチされた中間剰余初期値C’から、ラッチ回路203にラッチされた除数B’を減算する。減算回路211による減算結果は左シフタ221に出力される。また、減算回路211からのキャリーアウトは、デコーダ226に供給されるとともに、セレクタ224に対してセレクト信号として出力される。
左シフタ221は、減算回路211による減算結果を1ビット左シフトする。左シフタ222は、ラッチ回路202にラッチされた中間剰余初期値C’を、1ビット左シフトする。
セレクタ224は、左シフタ221からの出力値と左シフタ222からの出力値のいずれか一方を、減算回路211からのキャリーアウトに応じて選択して出力する。減算回路212は、セレクタ224からの出力値から、ラッチ回路203にラッチされた除数B’を減算する。減算回路212による減算結果はセレクタ225に出力され、減算回路212からのキャリーアウトはデコーダ226に出力される。
セレクタ225は、左シフタ222からの出力値と、減算回路212によるキャリーアウトと、左シフタ221からの出力値のうちのいずれか1つを、デコーダ226からのセレクト信号SELに応じて選択して出力する。左シフタ223は、セレクタ225からの出力値を2ビット左シフトし、セレクタ201に出力する。
デコーダ226は、減算回路211,212のそれぞれからのキャリーアウトの組み合わせに応じて、n(=2)ビットの部分商Dを出力するとともに、セレクタ225に対してセレクト信号SELを出力する。
ラッチ回路231は、デコーダ226から出力された部分商Dをラッチする。加算回路234は、ラッチ回路231にラッチされた部分商Dと、左シフタ233からの出力値とを加算する。ラッチ回路232は、加算回路234による加算結果をラッチする。左シフタ233は、ラッチ回路232にラッチされた値をnビット分、すなわち2ビット分だけ左シフトする。このような構成により、ラッチ回路232には中間商D’が保持される。
セレクタ241は、前処理回路100からの補正ループカウント値LC’と、ラッチ回路243にラッチされた補正ループカウント値LC’とのいずれか一方を、制御回路300からのセレクト信号(図示せず)に従って出力する。減算回路242は、セレクタ241から出力された値からn、すなわち2を減算する。ラッチ回路243は、減算回路242からの出力値をラッチする。
図10は、図9に示したデコーダの入出力の関係を示す真理値表である。なお、図10では、減算回路211,212のそれぞれからのキャリーアウトをa,b、左シフタ222、減算回路212および左シフタ221からセレクタ225へのそれぞれの入力をp,q,rとしている。
デコーダ226は、図10の真理値表に従って、部分商Dおよびセレクト信号SELを出力する。デコーダ226は、減算回路211,212からのキャリーアウトがともに0のとき、部分商Dを“00”とするとともに、セレクト信号SELにより、左シフタ222からの出力値をセレクタ225に選択させる。また、デコーダ226は、減算回路211,212からのキャリーアウトがそれぞれ0,1のとき、部分商Dを“01”とするとともに、セレクト信号SELにより、減算回路212による減算結果をセレクタ225に選択させる。デコーダ226は、減算回路211,212からのキャリーアウトがそれぞれ1,0のとき、部分商Dを“10”とするとともに、セレクト信号SELにより、左シフタ221からの出力値をセレクタ225に選択させる。また、デコーダ226は、減算回路211,212からのキャリーアウトがともに1のとき、部分商Dを“11”とするとともに、セレクト信号SELにより、減算回路212による減算結果をセレクタ225に選択させる。
図11は、図9の除算ループ回路における除算ループ処理の手順を示すフローチャートである。
[ステップS21]セレクタ201は、制御回路300からのセレクト信号に応じて、前処理回路100からの被除数A’を選択する。また、セレクタ241は、制御回路300からのセレクト信号に応じて、前処理回路100からの補正ループカウント値LC’を選択する。
[ステップS22]ラッチ回路203は、制御回路300からのタイミング制御信号に応じて、前処理回路100からの除数B’をラッチする。
なお、ステップS21,S22の処理順は逆であってもよい。
この後のステップS23〜S30における除算ループ回路200の処理は、nビット幅の部分商を算出するnビット部分商算出処理の1サイクルに対応する。
[ステップS23]減算回路242は、セレクタ241から出力された値からn、すなわち2を減算する。
[ステップS24]ラッチ回路202は、制御回路300からのタイミング制御信号に応じて、セレクタ201からの出力値をラッチする。また、ラッチ回路243は、制御回路300からのタイミング制御信号に応じて、減算回路242からの出力値をラッチする。
[ステップS25]1段目の減算回路211は、ラッチ回路202にラッチされた中間剰余初期値C’から、ラッチ回路203にラッチされた除数B’を減算する。このとき、減算回路211からのキャリーアウトはセレクタ224に対して供給される。セレクタ224は、減算回路211からのキャリーアウトが0のとき、左シフタ222からの出力値を選択し、減算回路211からのキャリーアウトが1のとき、左シフタ221からの出力値を選択する。
[ステップS26]左シフタ221は、減算回路211による減算結果を1ビット左シフトする。また、左シフタ222は、ラッチ回路202にラッチされた中間剰余初期値C’を、1ビット左シフトする。
[ステップS27]2段目の減算回路212は、セレクタ224からの出力値から、ラッチ回路203にラッチされた除数B’を減算する。
[ステップS28]デコーダ226は、減算回路211,212のそれぞれからのキャリーアウトの組み合わせに応じて、部分商Dおよびセレクト信号SELを出力する。このとき、セレクタ225は、セレクト信号SELに応じた選択動作を行い、中間剰余Cを出力する。
[ステップS29]左シフタ223は、セレクタ225からの中間剰余Cを1ビット左シフトする。また、ラッチ回路231は、制御回路300からのタイミング制御信号に応じて、デコーダ226からの部分商Dをラッチする。
[ステップS30]加算回路234は、ラッチ回路231にラッチされた部分商Dと、左シフタ233からの出力値とを加算して、中間商D’を算出する。ラッチ回路232は、制御回路300からのタイミング制御信号に応じて、加算回路234により算出された中間商D’をラッチする。この後、左シフタ233は、ラッチ回路232にラッチされた中間商D’をnビット分、すなわち2ビット分だけ左シフトする。
[ステップS31]制御回路300は、ラッチ回路243にラッチされた補正ループカウント値LC’が0であるか否かを判定する。補正ループカウント値LC’が0でない場合には、ステップS32の処理が実行される。一方、補正ループカウント値LC’が0である場合には、除算回路2の動作が終了される。このとき、ラッチ回路232にラッチされた中間商D’が最終商となり、セレクタ225から出力されている中間剰余Cが、最終剰余となる。
[ステップS32]セレクタ201は、制御回路300からのセレクト信号に応じて、左シフタ223からの出力を選択する。また、セレクタ241は、制御回路300からのセレクト信号に応じて、ラッチ回路243からの出力を選択する。この後、ステップS23からの処理が再度実行されて、nビット幅の部分商Dが算出される。
以上説明した除算回路2では、前処理回路100において被除数A’、除数B’および補正ループカウント値LC’が算出された後、これらの値が除算ループ回路200に入力されて、除算ループ処理が実行される。除算ループ回路200では、ステップS23〜S30の処理により、n(=2)ビット幅の部分商Dが算出される。そして、このようなnビット部分商算出処理が、(LC’/n)回繰り返されることにより、最終商が算出される。
上記の前処理回路100による被除数、除数およびループカウント値の補正処理により、従来のループカウント値LCがnの倍数とならないような被除数Aおよび除数Bが入力された場合でも、除算処理を正しく実行できる。すなわち、前処理回路100は、従来のループカウント値LCを補正した補正ループカウント値LC’を算出することにより、除算ループ回路200でのnビット部分商算出処理の繰り返し回数がnの倍数となるようにする。また、ループカウント値の補正によりnビット部分商算出処理の繰り返し回数が増加した場合でも最終商が正しく算出されるように、除算ループ回路200に出力する被除数の値も補正する。
ここで、除算処理の具体例について説明する。まず、図12は、n=2の場合の従来の除算の例を示す図である。
図12では、従来の前処理により、除算ループ回路200に入力する被除数、除数およびループカウント値を求めた場合の除算処理の例を示している。被除数Aが“1000 0111”(10進数で“135”)、除数Bが“0011 1100”(10進数で“60”)の場合、従来の前処理では、式(1)によりループカウント値LCが“3”と求められる。そして、このループカウント値LCが、補正ループカウント値LC’の代わりに除算ループ回路200に入力される。また、従来の前処理では、被除数Aおよび除数Bは、それぞれのゼロカウント値分だけ左シフトされ、前処理後に除算ループ回路200に入力される被除数A’および除数B’は、それぞれ“1000 0111”,“1111 0000”となる。
除算ループ回路200での1回目のnビット部分商算出処理(図11のステップS23〜S28に対応)では、部分商Dとして“01”が算出され、ループカウント値LCは2だけ減算されて“1”となる。2回目のnビット部分商算出処理では、部分商Dとして“00”が算出されるが、ループカウント値LCは“−1”となる。このとき、中間商D’として“0100”(10進数で“4”)が求められるが、この値は正しい最終商ではない。このように、従来の前処理を適用した除算ループ処理では、ループカウント値LCがnの倍数でない場合、そのままでは正しい最終商を求めることができない。
図13は、第2の実施の形態の前処理を適用した、n=2の場合の除算の例を示す図である。
図13において、図12の場合と同じ被除数A“1000 0111”および除数B“0011 1100”が本実施の形態の前処理回路100に入力されると、まず、絶対値化処理(図8のステップS11)により、被除数Aおよび除数Bが絶対値化された後、ゼロ拡張処理(図8のステップS12)により、絶対値化された被除数Aおよび除数Bのそれぞれの上位側が1ビット分拡張される。次に、ゼロ拡張された被除数および除数を基にゼロカウント値算出処理(ステップS13)が実行され、さらに補正値CRが算出される(ステップS14)。図13に示すように、絶対値化処理後の被除数および除数はそれぞれ“0 1000 0111”,“0 0011 1100”となり、補正値CRは“1”となる。なお、これらの被除数および除数に基づく従来のループカウント値LCは“3”となり、この値はn(=2)の倍数となっていない。
絶対値化処理後の被除数および除数は、シフト処理(ステップS15)が施されることによりそれぞれ“0 1000 0111”,“1 1110 0000”と変換され、それぞれ被除数A’、除数B’として除算ループ回路200に出力される。また、算出された補正値CRを基に補正ループカウント値LC’が“4”と算出される(ステップS16)。
以上の前処理回路100の処理により、ループカウント値LCはnの倍数に補正される。また、被除数は、左シフタ131により最上位ビットが1となるように左シフトされた後、右シフタ133により補正値CRの分だけ右シフトされる。このため、除算ループ回路200に入力される被除数A’には、最上位側から補正値CRのビット数だけ0が現れる。
除算ループ回路200での1回目のnビット部分商算出処理(図11のステップS23〜S30に対応)では、部分商Dとして“00”が算出され、補正ループカウント値LC’は2だけ減算されて“2”となる。2回目のnビット部分商算出処理では、部分商Dとして“10”が算出される。このとき、補正ループカウント値LC’は“0”となるため、除算ループ処理が終了される。除算ループ処理の終了時点の中間商D’は“0010”(10進数で“2”)となり、正しい最終商が算出されている。
このように、前処理回路100により算出された補正ループカウント値LC’を用いることで、いずれかのnビット部分商算出処理の終了時に補正ループカウント値LC’が0になる。また、除算ループ回路200では、減算回路213〜215のそれぞれにおいて実質的に比較処理が行われ、その比較結果がキャリーアウトとして出力されている。前述のように、前処理回路100では、右シフタ133により被除数の最上位ビットが0になるように補正されていた。このため、除算ループ回路200における初回のnビット部分商算出処理では、減算回路215からのキャリーアウトが必ず0となり、その結果、算出される部分商の上位側1ビットの値が必ず0となる。すなわち、右シフタ133による補正により、ループカウント値の増加に応じて中間商の上位側に余計に算出される部分商の値が必ず0になる。従って、除算ループ回路200では、前処理回路100に入力される被除数Aおよび除数Bの値に関係なく、常に正しい除算処理を実行できる。
また、このような効果は、除算ループ処理以降の処理手順や回路構成に影響を与えることなく、前処理回路100の構成変更のみによって得られる。また、例えば、図26に示した商修正処理940や、図27に示した剰余修正処理922を実行する場合と比較して、前処理回路100での処理手順は単純である。従って、回路規模、消費電力、レイテンシを抑制できる。
ところで、以上の第2の実施の形態では、例としてn=2とした場合について説明したが、前処理回路100を用いた場合には、除算ループ処理でのnの値がいかなる値であっても、正しい最終商を算出することが可能である。下記の図14、図15ではさらに、n=4,j=1,k=4であるとしたRadix−16除算処理を引き戻し法により実行した場合の数値例を示す。
図14は、n=4の場合の従来の除算の例を示す図である。
図14では、従来の前処理により、n=4の除算ループ回路に入力する被除数、除数およびループカウント値を求めた場合の除算処理の例を示している。被除数Aが“0011 0111 0001”(10進数で“881”)、除数Bが“0000 0011 1111”(10進数で“63”)の場合、従来の前処理では、式(1)によりループカウント値LCが“5”と求められる。そして、このループカウント値LCが除算ループ回路に入力される。また、従来の前処理では、被除数Aおよび除数Bは、それぞれのゼロカウント値分だけ左シフトされ、前処理後に除算ループ回路に入力される被除数A’および除数B’は、それぞれ“1101 1100 0100”,“1111 1100 0000”となる。
除算ループ回路での1回目のnビット部分商算出処理では、部分商Dとして“0110”が算出され、ループカウント値LCは4だけ減算されて“1”となる。2回目のnビット部分商算出処理では、部分商Dとして“1111”が算出されるが、ループカウント値LCは“−3”となる。このとき、中間商D’として“0110 1111”(10進数で“111”)が求められるが、この値は正しい最終商ではない。このように、ループカウント値LCがnの倍数でないため、従来の前処理を適用した場合には正しい最終商を求めることができない。
図15は、第2の実施の形態の前処理を適用した、n=4の場合の除算の例を示す図である。
図15において、図14の場合と同じ被除数A“0011 0111 0001”および除数B“0000 0011 1111”が本実施の形態の前処理回路100に入力されると、まず、絶対値化処理(図8のステップS11)により、被除数Aおよび除数Bが絶対値化された後、ゼロ拡張処理(図8のステップS12)により、絶対値化された被除数Aおよび除数Bのそれぞれの上位側が3ビット分拡張される。次に、ゼロ拡張された被除数および除数を基にゼロカウント値算出処理(ステップS13)が実行され、さらに補正値CRが算出される(ステップS14)。図15に示すように、絶対値化処理後の被除数および除数はそれぞれ“000 0011 0111 0001”,“000 0000 0011 1111”となり、補正値CRは“3”となる。
絶対値化処理後の被除数および除数は、シフト処理(ステップS15)が施されることによりそれぞれ“000 1101 1100 0100”,“111 1110 0000 0000”と変換され、それぞれ被除数A’、除数B’として除算ループ回路に出力される。また、算出された補正値CRを基に補正ループカウント値LC’が“8”と算出される(ステップS16)。
以上の処理により、ループカウント値LCはnの倍数に補正される。また、被除数は、左シフタ131により最上位ビットが1となるように左シフトされた後、右シフタ133により補正値CRの分だけ右シフトされる。このため、除算ループ回路に入力される被除数A’には、最上位側から補正値CRのビット数だけ0が現れる。
除算ループ回路での1回目のnビット部分商算出処理では、部分商Dとして“0000”が算出され、補正ループカウント値LC’は4だけ減算されて“4”となる。2回目のnビット部分商算出処理では、部分商Dとして“1101”が算出される。このとき、補正ループカウント値LC’は“0”となるため、除算ループ処理が終了される。除算ループ処理の終了時点の中間商D’は“0000 1101”(10進数で“13”)となり、正しい最終商が算出されている。
なお、Radix−16除算処理は、例えば、次のような除算ループ回路によって実現可能である。例えば、図9に示した除算ループ回路200を、n=4,j=1,k=4としたRadix−16除算処理に対応させるためには、除数B’で減算する減算回路(減算回路211,212に対応)の段数を4段に増やす。これに伴い、減算回路からのキャリーアウトに応じて減算対象を選択するセレクタ(セレクタ224に対応)を3個設ける。デコーダ226に対して4つの減算回路からのキャリーアウトを入力し、その入力の組み合わせに応じて、4ビットの部分商を出力させるとともに、16種類のセレクト信号SELを出力させる。中間剰余Cを選択するセレクタ225を16入力とし、デコーダ226からのセレクト信号SELに応じて選択させる。なお、4ビットの部分商算出処理を実行するたびに、補正ループカウント値LC’の値は4ずつ減算される。
〔第3の実施の形態〕
図16は、第3の実施の形態の前処理回路の構成を示す図である。なお、図16では、図3に対応する構成要素には同じ符号を付して示している。
図16に示す前処理回路100aは、第2の実施の形態の除算回路2に対して、前処理回路100に代えて適用可能な回路であり、図3に示した前処理回路100の構成の一部を変形したものである。前処理回路100aは、図3に示した左シフタ131および右シフタ133の代わりに、左シフタ134を備えている。左シフタ134は、図3の左シフタ131および右シフタ133の機能を1つのシフタとして実現したものである。また、前処理回路100aには、左シフタ134でのシフト量を演算するシフト値補正回路160がさらに追加されている。
図17は、シフト値補正回路の内部構成例を示す図である。
シフト値補正回路160は、減算回路161を備えている。減算回路161は、LZC回路121により算出されたゼロカウント値LZC_Aから、補正値算出回路140により算出された補正値CRを減算する。
図18は、第3の実施の形態の前処理回路による前処理手順の例を示すフローチャートである。
[ステップS41]前処理回路100aのゼロ拡張回路111,112は、制御回路300からのタイミング制御信号に応じて、ビット幅を拡張した被除数Aおよび除数Bを内部のラッチ回路に取り込む。
[ステップS42]絶対値化回路101は、ゼロ拡張回路111からの出力値を絶対値化する。また、絶対値化回路102は、ゼロ拡張回路112からの出力値を絶対値化する。
[ステップS43]LZC回路121は、絶対値化回路101の出力値の最上位ビットから連続する0の個数を計数し、ゼロカウント値LZC_Aを出力する。また、LZC回路122は、絶対値化回路102からの出力値の最上位ビットから連続する0の個数を計数し、ゼロカウント値LZC_Bを出力する。
[ステップS44]補正値算出回路140は、LZC回路121,122からそれぞれ出力されたゼロカウント値LZC_A,LZC_Bと、あらかじめ設定されたnの値とを基に、式(2)に従って補正値CRを算出する。
[ステップS45]シフト値補正回路160は、LZC回路121から出力されたゼロカウント値LZC_Aから、補正値算出回路140から出力された補正値CRを減算し、左シフタ134でのシフト量を算出する。
[ステップS46]左シフタ134は、絶対値化回路101からの出力値を、シフト値補正回路160からの出力値の分だけ左シフトし、被除数A’として除算ループ回路に出力する。一方、左シフタ132は、絶対値化回路102からの出力値を、LZC回路122から出力されたゼロカウント値LZC_Bだけ左シフトし、除数B’として除算ループ回路に出力する。
なお、左シフタ132のシフト動作は、補正値CRの算出前に実行されてもよい。
[ステップS47]LC算出回路150は、LZC回路121,122からそれぞれ出力されたゼロカウント値LZC_A,LZC_Bと、補正値算出回路140から出力された補正値CRとを基に、式(3)に従って補正ループカウント値LC’を算出する。算出結果は、除算ループ回路200に出力される。
なお、ステップS47の処理は、例えば、ステップS44の後のいずれかのタイミングで実行されればよい。
以上の前処理回路100aによれば、第2の実施の形態の前処理回路100と同様に被除数およびループカウント値が補正される。従って、前処理回路100aから出力された被除数A’、除数B’および補正ループカウント値LC’を除算ループ回路200に出力することで、被除数Aおよび除数Bの値に関係なく、正しい最終商を得ることが可能になる。なお、第2の実施の形態と同様に、除算ループ回路200としては、n=kとしてnビット部分商算出処理を繰り返す構成の回路を適用可能である。
〔第4の実施の形態〕
図19は、第4の実施の形態の前処理回路の構成を示す図である。なお、図19では、図3および図16に対応する構成要素には同じ符号を付して示している。
図19に示す前処理回路100bは、第2の実施の形態の除算回路2に対して、図3に示した前処理回路100、または図16に示した前処理回路100aに代えて適用可能な回路である。この前処理回路100bは、絶対値化回路101,102、ゼロ拡張回路111,112、LZC回路123、左シフタ135、補正値算出回路140、シフト値補正回路160、セレクタ171〜174およびラッチ回路181〜183を備えている。
除数Bは、絶対値化回路102およびゼロ拡張回路112で処理された後、セレクタ171の一方の入力端子sに入力される。セレクタ171の他方の入力端子tには、左シフタ135からの出力値が入力される。セレクタ171は、制御回路300からのセレクト信号SEL1に応じて、入力端子t,sからの入力値を選択的に出力する。ラッチ回路182は、制御回路300からのタイミング制御信号(図示せず)に応じて、セレクタ171からの出力値をラッチする。
被除数Aは、絶対値化回路101およびゼロ拡張回路111で処理された後、ラッチ回路181に入力される。ラッチ回路181は、制御回路300からのタイミング制御信号(図示せず)に応じて、絶対値化回路101からの出力値をラッチする。
セレクタ172,173は、ともに入力端子u,vを備え、制御回路300からのセレクト信号SEL2に応じて、入力端子u,vからの入力値を選択的に出力する。ラッチ回路182にラッチされた値は、セレクタ172,173の一方の入力端子uに入力される。ラッチ回路181にラッチされた値は、セレクタ172,173の他方の入力端子vに入力される。
LZC回路123は、セレクタ173からの出力値の最上位ビットから連続する0の個数を計数し、ゼロカウント値を出力する。LZC回路123は、ゼロカウント値LZC_A,LZC_Bをそれぞれ算出する回路を、共通化したものである。セレクタ173において入力端子uが選択されたとき、LZC回路123は除数のゼロカウント値LZC_Bを算出する。また、セレクタ183において入力端子vが選択されたとき、LZC回路123は被除数のゼロカウント値LZC_Aを算出する。
ラッチ回路183は、制御回路300からのタイミング制御信号(図示せず)に応じて、LZC回路123から出力されたゼロカウント値LZC_Bをラッチする。
補正値算出回路140は、LZC回路123から出力されたゼロカウント値LZC_Aと、ラッチ回路183にラッチされたゼロカウント値LZC_Bと、あらかじめ設定されたnの値とを基に、前述の式(2)に従って補正値CRを算出する。
シフト値補正回路160は、被除数に対する左シフト値を算出する。具体的には、シフト値補正回路160は、LZC回路123から出力されたゼロカウント値LZC_Aから、補正値算出回路140から出力された補正値CRを減算する。
セレクタ174の一方の入力端子uには、LZC回路123からのゼロカウント値LZC_Bが入力される。セレクタ174の他方の入力端子vには、シフト値補正回路160からの出力値が入力される。セレクタ174は、制御回路300からのセレクト信号SEL2に応じて、入力端子u,vからの入力値を選択的に出力する。
左シフタ135は、セレクタ172からの出力値を、セレクタ174からの出力値の分だけ左シフトする。左シフタ135は、被除数および除数に対する左シフトを行うシフタを、共通化したものである。セレクタ172,174において入力端子uが選択されたとき、左シフタ135は、ラッチ回路182にラッチされた除数を、ゼロカウント値LZC_Bの分だけ左シフトする。また、セレクタ172,174において入力端子vが選択されたとき、左シフタ135は、被除数を、シフト値補正回路160からの出力値の分だけ左シフトする。
LC算出回路150は、LZC回路123から出力されたゼロカウント値LZC_Aと、ラッチ回路183にラッチされたゼロカウント値LZC_Bと、補正値算出回路140から出力された補正値CRとを基に、前述の式(3)に従って補正ループカウント値LC’を算出する。
図20は、制御回路が備える、セレクト信号を出力する回路の構成例を示す図である。
制御回路300は、ラッチ回路311、加算回路312およびデコーダ313を備えている。制御回路300は、前処理回路100bおよび除算ループ回路200に対する制御状態を、例えば状態ST0〜ST3の4段階の状態として管理する。ラッチ回路311は、現在の制御状態を保持し、加算回路312は、ラッチ回路311が保持する制御状態を1段階ずつ進める。デコーダ313は、ラッチ回路311に保持された制御状態に応じて、セレクト信号SEL1,SEL2の出力値を変化させる。
図21は、制御状態とセレクト信号との対応を示す図である。
制御状態は、状態ST0,ST1,ST2,ST3の順に遷移する。これらの制御状態のうち、状態ST0〜ST2は前処理での制御状態であり、状態ST3は除算ループ処理での制御状態である。
状態ST0では、セレクト信号SEL1により、セレクタ171の入力端子sが選択される。このとき、セレクト信号SEL2の出力値は特に決められていない。状態ST1では、セレクト信号SEL1により、セレクタ171の入力端子tが選択されるとともに、セレクト信号SEL2により、セレクタ172〜174の入力端子uが選択される。状態ST2では、セレクト信号SEL2により、セレクタ172〜174の入力端子vが選択される。このとき、セレクト信号SEL1の出力値は特に決められていない。状態ST3では、除算ループ処理が実行されるため、セレクト信号SEL1,SEL2の出力値はともに特に決められていない。
図22は、第4の実施の形態の前処理回路による前処理手順を示すフローチャートである。
[ステップS51]制御回路300のラッチ回路311には、制御状態として状態ST0がセットされる。セレクタ171は、デコーダ313から出力されたセレクト信号SEL1に応じて、入力端子sを選択する。
[ステップS52]絶対値化回路101は、入力された被除数Aを絶対値化する。また、絶対値化回路102は、入力された除数Bを絶対値化する。
[ステップS53]ゼロ拡張回路111は、制御回路300からのタイミング制御信号に応じて、絶対値化回路101により絶対値化された被除数Aを内部のラッチ回路に取り込む。また、ゼロ拡張回路112は、制御回路300からのタイミング制御信号に応じて、絶対値化回路102により絶対値化された除数Bを内部のラッチ回路に取り込む。
[ステップS54]ラッチ回路181は、制御回路300からのタイミング制御信号に応じて、ゼロ拡張回路111から出力された被除数をラッチする。また、ラッチ回路182は、制御回路300からのタイミング制御信号に応じて、ゼロ拡張回路112からセレクタ171を通じて入力された除数をラッチする。
[ステップS55]制御回路300のラッチ回路311に、制御状態として状態ST1がセットされる。セレクタ171は、デコーダ313から出力されたセレクト信号SEL1に応じて、入力端子tを選択する。また、セレクタ172〜174は、デコーダ313から出力されたセレクト信号SEL2に応じて、入力端子uを選択する。
[ステップS56]LZC回路123は、ラッチ回路182からセレクタ173を通じて入力された除数を基に、ゼロカウント値LZC_Bを算出する。
[ステップS57]左シフタ135は、ラッチ回路182からセレクタ172を通じて入力された除数を、LZC回路123からセレクタ174を通じて入力されたゼロカウント値LZC_Bの分だけ左シフトする。
[ステップS58]ラッチ回路182は、制御回路300からのタイミング制御信号に応じて、左シフタ135からセレクタ171を通じて入力された除数をラッチする。また、ラッチ回路183は、制御回路300からのタイミング制御信号に応じて、LZC回路123によって算出されたゼロカウント値LZC_Bをラッチする。
[ステップS59]制御回路300のラッチ回路311に、制御状態として状態ST2がセットされる。セレクタ172,173,174は、デコーダ313から出力されたセレクト信号SEL2に応じて、入力端子vを選択する。
[ステップS60]LZC回路123は、ラッチ回路181からセレクタ173を通じて入力された被除数を基に、ゼロカウント値LZC_Aを算出する。
[ステップS61]補正値算出回路140は、LZC回路123により算出されたゼロカウント値LZC_Aと、ラッチ回路183にラッチされたゼロカウント値LZC_Bと、nの値とを基に、補正値CRを算出する。
[ステップS62]シフト値補正回路160は、LZC回路123により算出されたゼロカウント値LZC_Aから、補正値算出回路140により算出された補正値CRを減算し、被除数のシフト量を算出する。
[ステップS63]左シフタ135は、ラッチ回路181からセレクタ172を通じて入力された被除数を、シフト値補正回路160からセレクタ174を通じて入力されたシフト量の分だけ左シフトする。また、LC算出回路150は、LZC回路123により算出されたゼロカウント値LZC_Aと、ラッチ回路183にラッチされたゼロカウント値LZC_Bと、補正値算出回路140により算出された補正値CRとを基に、補正ループカウント値LC’を算出する。
ステップS63の処理が終了した時点で、左シフタ135からの出力値が被除数A’として、ラッチ回路182からの出力値が除数B’として、それぞれ除算ループ回路200に出力される。また、LC算出回路150からの補正ループカウント値LC’も、除算ループ回路200に出力される。この後、例えば、除算ループ回路200において被除数A’、除数B’および補正ループカウント値LC’がラッチされると、制御回路300のラッチ回路311に制御状態として状態ST3がセットされ、除算ループ処理が開始される。
以上の前処理回路100bによれば、例えば、第2の実施の形態の前処理回路100と同様に被除数およびループカウント値が補正される。従って、前処理回路100bから出力された被除数A’、除数B’および補正ループカウント値LC’を除算ループ回路200に出力することで、被除数Aおよび除数Bの値に関係なく、正しい最終商を得ることが可能になる。なお、第2,第3の実施の形態と同様に、除算ループ回路200としては、n=kとしてnビット部分商算出処理を繰り返す構成の回路を適用可能である。
〔第5の実施の形態〕
上記の第1の実施の形態の演算処理装置1や、第2〜第4の実施の形態の除算回路2が有する機能やその処理内容は、コンピュータなどの情報処理装置において、これらの機能の処理内容を記述したプログラムが実行されることにより実現することも可能である。以下の第5の実施の形態では、情報処理装置の例としてコンピュータを挙げるとともに、そのコンピュータでの処理手順の一例を示す。
図23は、コンピュータのハードウェア構成例を示す図である。
図23に示すコンピュータ400は、CPU401、RAM(Random Access Memory)402、HDD(Hard Disk Drive)403、グラフィック処理部404、入力インタフェース(I/F)405、書き込み/読み取り部406および通信インタフェース(I/F)407を備えており、これらの各部はバス408によって相互に接続されている。
CPU401は、HDD403などの記憶媒体に記憶された各種プログラムを実行することにより、このコンピュータ全体を統括的に制御する。RAM402は、CPU401に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。HDD403は、CPU401により実行されるプログラムやその実行に必要な各種のデータなどを記憶する。
グラフィック処理部404には、例えば、モニタ404aが接続されている。このグラフィック処理部404は、CPU401からの命令に従って、モニタ404aの画面上に画像を表示させる。入力インタフェース405には、例えば、キーボード405aやマウス405bが接続されている。入力インタフェース405は、キーボード405aやマウス405bからの信号を、バス408を介してCPU401に送信する。
書き込み/読み取り部406は、CPU401からバス408を介して受け取ったデータを、可搬型記憶媒体410に書き込む。また、可搬型記憶媒体410からデータを読み取り、バス408を介してCPU401に送信する。なお、可搬型記憶媒体410としては、例えば、光ディスク、フレキシブルディスク、USB(Universal Serial Bus)インタフェースなどを介して接続される半導体メモリなどを適用可能である。
通信インタフェース407は、ネットワークを介して外部装置との間でデータの送受信を行う。
図24は、コンピュータにおける前処理手順の例を示すフローチャートである。この図24の処理は、例えば、HDD403などに記憶された所定のプログラムを、CPU401が実行することにより実現される。なお、図24中の変数Reg1〜Reg7は、例えば、RAM402やHDD403などに設けられた個別の記憶領域に格納される。
[ステップS101]CPU401は、変数Reg1に被除数Aを、変数Reg2に除数Bをそれぞれ代入する。
[ステップS102]CPU401は、変数Reg1を絶対値化し、変数Reg1に書き戻す。さらに、CPU401は、変数Reg1の上位ビットを(n−1)ビット拡張し、拡張したビットに0を代入して、変数Reg1に書き戻す。また、CPU401は、変数Reg2を絶対値化し、変数Reg2に書き戻す。さらに、CPU401は、変数Reg2の上位ビットを(n−1)ビット拡張し、拡張したビットに0を代入して、変数Reg2に書き戻す。
[ステップS103]CPU401は、(Reg1+Reg1)の演算を行い、演算結果を変数Reg7に代入する。なお、この演算では、例えば、変数Reg1に2を乗算する演算、あるいは、変数Reg1を1ビット左シフトする処理が行われてもよい。
[ステップS104]CPU401は、ステップS103での演算でオーバフローが発生したか否かを判定する。オーバフローが発生していない場合には、ステップS105の処理が実行される。オーバフローが発生した場合には、ステップS106の処理が実行される。
[ステップS105]CPU401は、変数Reg3の値を1増加させ、変数Reg3に書き戻す。また、変数Reg1を1ビット左シフトし、変数Reg1に書き戻す。その後、ステップS103の演算が再度実行される。
ステップS104においてオーバフローが発生したと判定されたとき、変数Reg3は被除数のゼロカウント値LZC_Aを示し、変数Reg1は、ステップS102の実行後の変数Reg1をゼロカウント値LZC_Aだけ左シフトした値となっている。
[ステップS106]CPU401は、“Reg2+Reg2”の演算を行い、演算結果を変数Reg7に代入する。なお、この演算では、例えば、変数Reg2に2を乗算する演算、あるいは、変数Reg2を1ビット左シフトする処理が行われてもよい。
[ステップS107]CPU401は、ステップS106での演算でオーバフローが発生したか否かを判定する。オーバフローが発生していない場合には、ステップS108の処理が実行される。オーバフローが発生した場合には、ステップS109の処理が実行される。
[ステップS108]CPU401は、変数Reg4の値を1増加させ、変数Reg4に書き戻す。また、変数Reg2を1ビット左シフトし、変数Reg2に書き戻す。その後、ステップS106の演算が再度実行される。
ステップS107においてオーバフローが発生したと判定されたとき、変数Reg4は除数のゼロカウント値LZC_Bを示し、変数Reg2は、ステップS102の実行後の変数Reg2をゼロカウント値LZC_Bだけ左シフトした値となっている。
なお、ステップS103〜S105の処理は、ステップS106〜S108の処理後に実行されてもよい。
[ステップS109]CPU401は、“n−(Reg4−Reg3)%n−1”の演算を実行して補正値CRを算出し、算出結果を変数Reg5に代入する。
[ステップS110]CPU401は、変数Reg1を、変数Reg5だけ右シフトする。
[ステップS111]CPU401は、“(Reg4−Reg3)+Reg5+1”の演算を実行して補正ループカウント値LC’を算出し、算出結果を変数Reg6に代入する。
なお、ステップS110,S111の処理順は逆であってもよい。
以上の処理が終了すると、変数Reg1が被除数A’として、変数Reg2が除数B’として、変数Reg6が補正ループカウント値LC’として出力され、これらの値を基に除算ループ処理が実行される。
上記の前処理手順によれば、例えば、第2の実施の形態の前処理回路100と同様に被除数およびループカウント値が補正される。従って、前処理によって算出された被除数A’、除数B’および補正ループカウント値LC’を基に除算ループ処理を実行することで、被除数Aおよび除数Bの値に関係なく、正しい最終商を得ることが可能になる。なお、除算ループ処理としては、n=kとしてnビット部分商算出処理を繰り返す、引き戻し法、引き放し法、SRT法などを用いた除算手順を適用することが可能である。
なお、以上説明した各実施の形態の装置が有する機能は、コンピュータによって実現することができる。その場合には、上記機能の処理内容を記述したプログラムが提供される。そして、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録された光ディスクなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、そのプログラムを、サーバコンピュータからネットワークを介して他のコンピュータに転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、そのプログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
以上の各実施の形態に関し、さらに以下の付記を開示する。
(付記1) nビット幅(nは1以上の整数)の部分商を繰り返し算出することにより、被除数を除数で除算する除算処理を実行する演算処理装置において、
前記被除数の絶対値の最上位桁からの0の個数である被除数ゼロカウント値を計数する被除数ゼロカウント値計数部と、
前記除数の絶対値の最上位桁からの0の個数である除数ゼロカウント値を計数する除数ゼロカウント値計数部と、
前記被除数ゼロカウント値と前記除数ゼロカウント値と前記nの値とに基づいて、ループカウント値の補正値を算出する補正値算出部と、
前記被除数ゼロカウント値と前記除数ゼロカウント値と前記補正値とに基づいて、補正ループカウント値を算出する補正ループカウント値算出部と、
前記被除数の絶対値を、前記被除数ゼロカウント値と前記補正値とに基づく桁数だけシフトする被除数シフト部と、
前記除数の絶対値を、前記除数ゼロカウント値に基づいてシフトする除数シフト部と、
前記被除数シフト部からの出力値と前記除数シフト部からの出力値と前記補正ループカウント値とに基づいて、除算演算を実行する除算ループ処理部と、
を有することを特徴とする演算処理装置。
(付記2) 前記補正値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値を前記nの値で除算した剰余を、前記nの値から減算し、その減算値からさらに1を減算した値を、前記補正値とすることを特徴とする付記1記載の演算処理装置。
(付記3) 前記補正ループカウント値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値に1を加算することで求められる前記ループカウント値に対して、さらに前記補正値を加算した値を、前記補正ループカウント値とすることを特徴とする付記1または2記載の演算処理装置。
(付記4) 前記被除数ゼロカウント値計数部と前記除数ゼロカウント値計数部は、入力された値の最上位桁からの0の個数を計数する共通のゼロカウント値計数部として設けられ、
さらに、
前記被除数の絶対値と前記除数の絶対値のいずれか一方を前記ゼロカウント値計数部に対して選択的に入力する計数対象選択部と、
前記計数対象選択部の選択動作を制御する制御部と、
を有することを特徴とする付記1〜3のいずれか1つに記載の演算処理装置。
(付記5) 前記被除数シフト部と前記除数シフト部は、入力された値をシフトする共通のシフト部として設けられ、
さらに、
前記ゼロカウント値計数部により算出された前記被除数ゼロカウント値から前記補正値を減算する減算部と、
前記ゼロカウント値計数部からの出力値と前記減算部からの出力値のいずれか一方を、前記シフト部でのシフト量として前記シフト部に対して選択的に入力するシフト量選択部と、
前記被除数の絶対値と前記除数の絶対値のいずれか一方を、前記シフト部でのシフト対象として前記シフト部に選択的に入力するシフト対象選択部と、
を有し、
前記制御部は、前記計数対象選択部、前記シフト量選択部および前記シフト対象選択部の選択動作を同期制御することを特徴とする付記4記載の演算処理装置。
(付記6) 前記制御部は、
前記計数対象選択部、前記シフト量選択部および前記シフト対象選択部に、前記除数の絶対値、前記ゼロカウント値計数部からの出力値および前記除数の絶対値をそれぞれ選択させて、前記ゼロカウント値計数部に前記除数ゼロカウント値を算出させ、前記シフト部に前記除数の絶対値をシフトさせ、
次に、前記計数対象選択部、前記シフト量選択部および前記シフト対象選択部に、前記被除数の絶対値、前記減算部からの出力値および前記被除数の絶対値をそれぞれ選択させて、前記ゼロカウント値計数部に前記被除数ゼロカウント値を算出させ、前記シフト部に前記被除数の絶対値をシフトさせる、
ことを特徴とする付記5記載の演算処理装置。
(付記7) 前記除算ループ処理部は、前記被除数シフト部からの出力値と前記除数シフト部からの出力値とを基に、前記nビット幅の部分商を算出する部分商算出処理を繰り返し実行するとともに、前記部分商算出処理を実行するたびに前記補正ループカウント値を前記nずつ減算し、前記補正ループカウント値が0になるまで前記部分商算出処理を繰り返し実行することを特徴とする付記1〜6のいずれか1つに記載の演算処理装置。
(付記8) 前記除算ループ処理部は、前記部分商算出処理において、前記除数シフト部からの出力値を用いた比較処理を直列にn回実行することを特徴とする付記7記載の演算処理装置。
(付記9) 前記被除数の絶対値および前記除数の絶対値をそれぞれ上位側に(n−1)桁だけ拡張し、拡張した桁に0を設定する被除数拡張部および除数拡張部をさらに有し、
前記被除数ゼロカウント値計数部および前記除数ゼロカウント値計数部は、前記被除数拡張部からの出力値および前記除数拡張部からの出力値を基にそれぞれ前記被除数ゼロカウント値および前記除数ゼロカウント値を計数し、
前記被除数シフト部および前記除数シフト部は、前記被除数拡張部からの出力値および前記除数拡張部からの出力値をそれぞれシフトする、
ことを特徴とする付記1〜8のいずれか1つに記載の演算処理装置。
(付記10) 前記被除数ゼロカウント値から前記補正値を減算する減算部をさらに有し、
前記被除数シフト部は、前記被除数の絶対値を、前記減算部による減算結果の値だけ左シフトすることを特徴とする付記1〜3,7,8のいずれか1つに記載の演算処理装置。
(付記11) 前記被除数シフト部は、
前記被除数の絶対値を、前記被除数ゼロカウント値だけ左シフトする左シフト部と、
前記左シフト部からの出力値を、前記補正値だけ右シフトする右シフト部と、
を有することを特徴とする付記1〜3,7,8のいずれか1つに記載の演算処理装置。
(付記12) nビット幅(nは1以上の整数)の部分商を繰り返し算出することにより、被除数を除数で除算する除算処理を実行する演算処理装置の制御方法において、
前記演算処理装置が有する被除数ゼロカウント値計数部が、前記被除数の絶対値の最上位桁からの0の個数である被除数ゼロカウント値を計数し、
前記演算処理装置が有する除数ゼロカウント値計数部が、前記除数の絶対値の最上位桁からの0の個数である除数ゼロカウント値を計数し、
前記演算処理装置が有する補正値算出部が、前記被除数ゼロカウント値と前記除数ゼロカウント値と前記nの値とに基づいて、ループカウント値の補正値を算出し、
前記演算処理装置が有する補正ループカウント値算出部が、前記被除数ゼロカウント値と前記除数ゼロカウント値と前記補正値とに基づいて、補正ループカウント値を算出し、
前記演算処理装置が有する被除数シフト部が、前記被除数の絶対値を、前記被除数ゼロカウント値と前記補正値とに基づく桁数だけシフトし、
前記演算処理装置が有する除数シフト部が、前記除数の絶対値を、前記除数ゼロカウント値に基づいてシフトし、
前記演算処理装置が有する除算ループ処理部が、前記被除数シフト部からの出力値と前記除数シフト部からの出力値と前記補正ループカウント値とに基づいて、除算演算を実行する、
ことを特徴とする演算処理装置の制御方法。
(付記13) 前記補正値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値を前記nの値で除算した剰余を、前記nの値から減算し、その減算値からさらに1を減算した値を、前記補正値とすることを特徴とする付記12記載の演算処理装置の制御方法。
(付記14) 前記補正ループカウント値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値に1を加算することで求められる前記ループカウント値に対して、さらに前記補正値を加算した値を、前記補正ループカウント値とすることを特徴とする付記12または13記載の演算処理装置の制御方法。
(付記15) nビット幅(nは1以上の整数)の部分商を繰り返し算出することにより、被除数を除数で除算する除算処理を実行する演算処理プログラムにおいて、
前記演算処理プログラムを実行する演算処理装置を、
前記被除数の絶対値の最上位桁からの0の個数である被除数ゼロカウント値を計数する被除数ゼロカウント値計数手段、
前記除数の絶対値の最上位桁からの0の個数である除数ゼロカウント値を計数する除数ゼロカウント値手段、
前記被除数ゼロカウント値と前記除数ゼロカウント値と前記nの値とに基づいて、ループカウント値の補正値を算出する補正値算出手段、
前記被除数ゼロカウント値と前記除数ゼロカウント値と前記補正値とに基づいて、補正ループカウント値を算出する補正ループカウント値算出手段、
前記被除数の絶対値を、前記被除数ゼロカウント値と前記補正値とに基づく桁数だけシフトする被除数シフト手段、
前記除数の絶対値を、前記除数ゼロカウント値に基づいてシフトする除数シフト部と、
前記被除数シフト部からの出力値と前記除数シフト部からの出力値と前記補正ループカウント値とに基づいて、除算演算を実行する除算ループ処理手段、
として機能させることを特徴とする演算処理プログラム。
(付記16) 前記補正値算出手段は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値を前記nの値で除算した剰余を、前記nの値から減算し、その減算値からさらに1を減算した値を、前記補正値とすることを特徴とする付記15記載の演算処理プログラム。
(付記17) 前記補正ループカウント値算出手段は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値に1を加算することで求められる前記ループカウント値に対して、さらに前記補正値を加算した値を、前記補正ループカウント値とすることを特徴とする付記15または16記載の演算処理プログラム。
1 演算処理装置
10 前処理部
11,12 絶対値化処理部
13 被除数ゼロカウント値計数部
14 除数ゼロカウント値計数部
15 補正値算出部
16 補正ループカウント値算出部
17 被除数シフト部
18 除数シフト部
20 除算ループ処理部

Claims (10)

  1. nビット幅(nは1以上の整数)の部分商を繰り返し算出することにより、被除数を除数で除算する除算処理を実行する演算処理装置において、
    前記被除数の絶対値の最上位桁からの0の個数である被除数ゼロカウント値を計数する被除数ゼロカウント値計数部と、
    前記除数の絶対値の最上位桁からの0の個数である除数ゼロカウント値を計数する除数ゼロカウント値計数部と、
    前記被除数ゼロカウント値と前記除数ゼロカウント値と前記nの値とに基づいて、ループカウント値の補正値を算出する補正値算出部と、
    前記被除数ゼロカウント値と前記除数ゼロカウント値と前記補正値とに基づいて、補正ループカウント値を算出する補正ループカウント値算出部と、
    前記被除数の絶対値を、前記被除数ゼロカウント値と前記補正値とに基づく桁数だけシフトする被除数シフト部と、
    前記除数の絶対値を、前記除数ゼロカウント値に基づいてシフトする除数シフト部と、
    前記被除数シフト部からの出力値と前記除数シフト部からの出力値と前記補正ループカウント値とに基づいて、除算演算を実行する除算ループ処理部と、
    を有することを特徴とする演算処理装置。
  2. 前記補正値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値を前記nの値で除算した剰余を、前記nの値から減算し、その減算値からさらに1を減算した値を、前記補正値とすることを特徴とする請求項1記載の演算処理装置。
  3. 前記補正ループカウント値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値に1を加算することで求められる前記ループカウント値に対して、さらに前記補正値を加算した値を、前記補正ループカウント値とすることを特徴とする請求項1または2記載の演算処理装置。
  4. 前記被除数ゼロカウント値計数部と前記除数ゼロカウント値計数部は、入力された値の最上位桁からの0の個数を計数する共通のゼロカウント値計数部として設けられ、
    さらに、
    前記被除数の絶対値と前記除数の絶対値のいずれか一方を前記ゼロカウント値計数部に対して選択的に入力する計数対象選択部と、
    前記計数対象選択部の選択動作を制御する制御部と、
    を有することを特徴とする請求項1〜3のいずれか1つに記載の演算処理装置。
  5. nビット幅(nは1以上の整数)の部分商を繰り返し算出することにより、被除数を除数で除算する除算処理を実行する演算処理装置の制御方法において、
    前記演算処理装置が有する被除数ゼロカウント値計数部が、前記被除数拡張部の最上位桁からの0の個数である被除数ゼロカウント値を計数し、
    前記演算処理装置が有する除数ゼロカウント値計数部が、前記除数拡張部の最上位桁からの0の個数である除数ゼロカウント値を計数し、
    前記演算処理装置が有する補正値算出部が、前記被除数ゼロカウント値と前記除数ゼロカウント値と前記nの値とに基づいて、ループカウント値の補正値を算出し、
    前記演算処理装置が有する補正ループカウント値算出部が、前記被除数ゼロカウント値と前記除数ゼロカウント値と前記補正値とに基づいて、補正ループカウント値を算出し、
    前記演算処理装置が有する被除数シフト部が、前記被除数の絶対値を、前記被除数ゼロカウント値と前記補正値とに基づく桁数だけシフトし、
    前記演算処理装置が有する除数シフト部が、前記除数の絶対値を、前記除数ゼロカウント値に基づいてシフトし、
    前記演算処理装置が有する除算ループ処理部が、前記被除数シフト部からの出力値と前記除数シフト部からの出力値と前記補正ループカウント値とに基づいて、除算演算を実行する、
    ことを特徴とする演算処理装置の制御方法。
  6. 前記補正値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値を前記nの値で除算した剰余を、前記nの値から減算し、その減算値からさらに1を減算した値を、前記補正値とすることを特徴とする請求項5記載の演算処理装置の制御方法。
  7. 前記補正ループカウント値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値に1を加算することで求められる前記ループカウント値に対して、さらに前記補正値を加算した値を、前記補正ループカウント値とすることを特徴とする請求項5または6記載の演算処理装置の制御方法。
  8. nビット幅(nは1以上の整数)の部分商を繰り返し算出することにより、被除数を除数で除算する除算処理を実行する演算処理プログラムにおいて、
    前記演算処理プログラムを実行する演算処理装置を、
    前記被除数の絶対値の最上位桁からの0の個数である被除数ゼロカウント値を計数する被除数ゼロカウント値計数手段、
    前記除数の絶対値の最上位桁からの0の個数である除数ゼロカウント値を計数する除数ゼロカウント値手段、
    前記被除数ゼロカウント値と前記除数ゼロカウント値と前記nの値とに基づいて、ループカウント値の補正値を算出する補正値算出手段、
    前記被除数ゼロカウント値と前記除数ゼロカウント値と前記補正値とに基づいて、補正ループカウント値を算出する補正ループカウント値算出手段、
    前記被除数の絶対値を、前記被除数ゼロカウント値と前記補正値とに基づく桁数だけシフトする被除数シフト手段、
    前記除数の絶対値を、前記除数ゼロカウント値に基づいてシフトする除数シフト部と、
    前記被除数シフト部からの出力値と前記除数シフト部からの出力値と前記補正ループカウント値とに基づいて、除算演算を実行する除算ループ処理手段、
    として機能させることを特徴とする演算処理プログラム。
  9. 前記補正値算出手段は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値を前記nの値で除算した剰余を、前記nの値から減算し、その減算値からさらに1を減算した値を、前記補正値とすることを特徴とする請求項8記載の演算処理プログラム。
  10. 前記補正ループカウント値算出手段は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値に1を加算することで求められる前記ループカウント値に対して、さらに前記補正値を加算した値を、前記補正ループカウント値とすることを特徴とする請求項8または9記載の演算処理プログラム。
JP2009170258A 2009-07-21 2009-07-21 演算処理装置、その制御方法および演算処理プログラム Active JP5397061B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2009170258A JP5397061B2 (ja) 2009-07-21 2009-07-21 演算処理装置、その制御方法および演算処理プログラム
US12/836,061 US9009209B2 (en) 2009-07-21 2010-07-14 Processor, control method of processor, and computer readable storage medium storing processing program for division operation
EP20100170200 EP2280340B1 (en) 2009-07-21 2010-07-20 Processor, control method of processor, and computer readable storage medium storing processing program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009170258A JP5397061B2 (ja) 2009-07-21 2009-07-21 演算処理装置、その制御方法および演算処理プログラム

Publications (2)

Publication Number Publication Date
JP2011028312A JP2011028312A (ja) 2011-02-10
JP5397061B2 true JP5397061B2 (ja) 2014-01-22

Family

ID=43086817

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009170258A Active JP5397061B2 (ja) 2009-07-21 2009-07-21 演算処理装置、その制御方法および演算処理プログラム

Country Status (3)

Country Link
US (1) US9009209B2 (ja)
EP (1) EP2280340B1 (ja)
JP (1) JP5397061B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10459689B2 (en) 2014-06-13 2019-10-29 International Business Machines Corporation Calculation of a number of iterations

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5966763B2 (ja) * 2012-08-22 2016-08-10 富士通株式会社 除算装置及び除算方法
US9348796B2 (en) 2013-09-19 2016-05-24 International Business Machines Corporation Arithmetic operation in a data processing system
CN104731551B (zh) * 2013-12-23 2018-02-16 浙江大华技术股份有限公司 基于fpga进行除法操作的方法及装置
US20160034256A1 (en) * 2014-08-01 2016-02-04 Imagination Technologies, Limited Fast integer division

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS53112627A (en) * 1977-03-14 1978-10-02 Toshiba Corp Division control system
US4760550A (en) * 1986-09-11 1988-07-26 Amdahl Corporation Saving cycles in floating point division
JP2502836B2 (ja) * 1991-03-19 1996-05-29 富士通株式会社 除算回路の前処理装置
JPH0567217A (ja) * 1991-09-06 1993-03-19 Nec Corp 演算装置
US5644524A (en) * 1993-11-30 1997-07-01 Texas Instruments Incorporated Iterative division apparatus, system and method employing left most one's detection and left most one's detection with exclusive or
US5493523A (en) * 1993-12-15 1996-02-20 Silicon Graphics, Inc. Mechanism and method for integer divide involving pre-alignment of the divisor relative to the dividend
US5576982A (en) * 1994-10-17 1996-11-19 Unisys Corporation Fast significant bit calculator and its application to integer multiplication and division
US5825681A (en) * 1996-01-24 1998-10-20 Alliance Semiconductor Corporation Divider/multiplier circuit having high precision mode
US5805489A (en) * 1996-05-07 1998-09-08 Lucent Technologies Inc. Digital microprocessor device having variable-delay division hardware
JP3544821B2 (ja) * 1997-04-07 2004-07-21 株式会社東芝 除算回路
US6751645B1 (en) * 1999-02-17 2004-06-15 Elbrus International Limited Methods and apparatus for performing pipelined SRT division
JP2000305752A (ja) * 1999-04-16 2000-11-02 Fujitsu Ltd 除算器
JP2002175179A (ja) 2000-12-07 2002-06-21 Matsushita Electric Ind Co Ltd 整数除算方法および整数除算装置
US20040249877A1 (en) * 2003-06-05 2004-12-09 International Business Machines Corporation Fast integer division with minimum number of iterations in substraction-based hardware divide processor
US20060129624A1 (en) * 2004-12-09 2006-06-15 Abdallah Mohammad A Method and apparatus for performing a divide instruction
US7539720B2 (en) * 2004-12-15 2009-05-26 Sun Microsystems, Inc. Low latency integer divider and integration with floating point divider and method
US20060179092A1 (en) * 2005-02-10 2006-08-10 Schmookler Martin S System and method for executing fixed point divide operations using a floating point multiply-add pipeline
US7873687B2 (en) * 2005-07-25 2011-01-18 International Business Machines Corporation Method for calculating a result of a division with a floating point unit with fused multiply-add
US7584237B1 (en) * 2005-10-11 2009-09-01 Advanced Micro Devices, Inc. Fast hardware divider
JP4232838B2 (ja) * 2007-03-29 2009-03-04 日本電気株式会社 再構成可能なsimd型プロセッサ
US8060551B2 (en) * 2007-12-30 2011-11-15 Agere Systems Inc. Method and apparatus for integer division
US8402078B2 (en) * 2008-02-26 2013-03-19 International Business Machines Corporation Method, system and computer program product for determining required precision in fixed-point divide operations
US8452831B2 (en) * 2009-03-31 2013-05-28 Oracle America, Inc. Apparatus and method for implementing hardware support for denormalized operands for floating-point divide operations

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10459689B2 (en) 2014-06-13 2019-10-29 International Business Machines Corporation Calculation of a number of iterations

Also Published As

Publication number Publication date
US20110022646A1 (en) 2011-01-27
EP2280340A1 (en) 2011-02-02
JP2011028312A (ja) 2011-02-10
EP2280340B1 (en) 2012-06-06
US9009209B2 (en) 2015-04-14

Similar Documents

Publication Publication Date Title
US7805478B2 (en) Montgomery modular multiplier
JP5397061B2 (ja) 演算処理装置、その制御方法および演算処理プログラム
KR100756137B1 (ko) 제산 및 제곱근 연산 유닛
JP2835153B2 (ja) 高基数除算器
US9047119B2 (en) Circular floating-point number generator and a circular floating-point number adder
KR19980032114A (ko) 제곱근의 부동 소수점 역에 대한 초기 추정을 발생하는 방법 및 장치
US6366940B1 (en) High-speed modular multiplication apparatus achieved in small circuit
JP2502836B2 (ja) 除算回路の前処理装置
JP3003467B2 (ja) 演算装置
JP2012141952A (ja) 除算回路及び除算方法
US8909689B2 (en) Arithmetic device
JPH07234778A (ja) 演算回路
US10838718B2 (en) Processing device, arithmetic unit, and control method of processing device
US5206827A (en) Iterative high radix divider decoding the upper bits of a divisor and dividend
JP3823107B2 (ja) 有限体での基底変換方法及び基底変換装置
US20210141601A1 (en) Digital calculation processing circuit
US6230178B1 (en) Method for the production of an error correction parameter associated with the implementation of a modular operation according to the Montgomery method
US6109777A (en) Division with limited carry-propagation in quotient accumulation
JP3851024B2 (ja) 乗算器
JPH0831024B2 (ja) 演算プロセッサ
JP3638218B2 (ja) シフト機能付きalu命令を持つマイクロプロセッサ
JP2000010763A (ja) 除算回路
JP2864598B2 (ja) ディジタル演算回路
CN112732219A (zh) 一种ssd主控芯片中乘法运算电路和方法
CN114895868A (zh) 基于两位商计算的除法运算单元及除法器

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120405

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: 20130924

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131007

R150 Certificate of patent or registration of utility model

Ref document number: 5397061

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150