(57)【特許請求の範囲】
【請求項１】
ｎビット幅（ｎは１以上の整数）の部分商を繰り返し算出することにより、被除数を除数で除算する除算処理を実行する演算処理装置において、
前記被除数の絶対値の最上位桁からの０の個数である被除数ゼロカウント値を計数する被除数ゼロカウント値計数部と、
前記除数の絶対値の最上位桁からの０の個数である除数ゼロカウント値を計数する除数ゼロカウント値計数部と、
前記被除数ゼロカウント値と前記除数ゼロカウント値と前記ｎの値とに基づいて、ループカウント値の補正値を算出する補正値算出部と、
前記被除数ゼロカウント値と前記除数ゼロカウント値と前記補正値とに基づいて、補正ループカウント値を算出する補正ループカウント値算出部と、
前記被除数の絶対値を、前記被除数ゼロカウント値と前記補正値とに基づく桁数だけシフトする被除数シフト部と、
前記除数の絶対値を、前記除数ゼロカウント値に基づいてシフトする除数シフト部と、
前記被除数シフト部からの出力値と前記除数シフト部からの出力値と前記補正ループカウント値とに基づいて、除算演算を実行する除算ループ処理部と、
を有することを特徴とする演算処理装置。
【請求項２】
前記補正値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値を前記ｎの値で除算した剰余を、前記ｎの値から減算し、その減算値からさらに１を減算した値を、前記補正値とすることを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記補正ループカウント値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値に１を加算することで求められる前記ループカウント値に対して、さらに前記補正値を加算した値を、前記補正ループカウント値とすることを特徴とする請求項１または２記載の演算処理装置。
【請求項４】
前記被除数ゼロカウント値計数部と前記除数ゼロカウント値計数部は、入力された値の最上位桁からの０の個数を計数する共通のゼロカウント値計数部として設けられ、
さらに、
前記被除数の絶対値と前記除数の絶対値のいずれか一方を前記ゼロカウント値計数部に対して選択的に入力する計数対象選択部と、
前記計数対象選択部の選択動作を制御する制御部と、
を有することを特徴とする請求項１〜３のいずれか１つに記載の演算処理装置。
【請求項５】
ｎビット幅（ｎは１以上の整数）の部分商を繰り返し算出することにより、被除数を除数で除算する除算処理を実行する演算処理装置の制御方法において、
前記演算処理装置が有する被除数ゼロカウント値計数部が、前記被除数拡張部の最上位桁からの０の個数である被除数ゼロカウント値を計数し、
前記演算処理装置が有する除数ゼロカウント値計数部が、前記除数拡張部の最上位桁からの０の個数である除数ゼロカウント値を計数し、
前記演算処理装置が有する補正値算出部が、前記被除数ゼロカウント値と前記除数ゼロカウント値と前記ｎの値とに基づいて、ループカウント値の補正値を算出し、
前記演算処理装置が有する補正ループカウント値算出部が、前記被除数ゼロカウント値と前記除数ゼロカウント値と前記補正値とに基づいて、補正ループカウント値を算出し、
前記演算処理装置が有する被除数シフト部が、前記被除数の絶対値を、前記被除数ゼロカウント値と前記補正値とに基づく桁数だけシフトし、
前記演算処理装置が有する除数シフト部が、前記除数の絶対値を、前記除数ゼロカウント値に基づいてシフトし、
前記演算処理装置が有する除算ループ処理部が、前記被除数シフト部からの出力値と前記除数シフト部からの出力値と前記補正ループカウント値とに基づいて、除算演算を実行する、
ことを特徴とする演算処理装置の制御方法。
【請求項６】
前記補正値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値を前記ｎの値で除算した剰余を、前記ｎの値から減算し、その減算値からさらに１を減算した値を、前記補正値とすることを特徴とする請求項５記載の演算処理装置の制御方法。
【請求項７】
前記補正ループカウント値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値に１を加算することで求められる前記ループカウント値に対して、さらに前記補正値を加算した値を、前記補正ループカウント値とすることを特徴とする請求項５または６記載の演算処理装置の制御方法。
【請求項８】
ｎビット幅（ｎは１以上の整数）の部分商を繰り返し算出することにより、被除数を除数で除算する除算処理を実行する演算処理プログラムにおいて、
前記演算処理プログラムを実行する演算処理装置を、
前記被除数の絶対値の最上位桁からの０の個数である被除数ゼロカウント値を計数する被除数ゼロカウント値計数手段、
前記除数の絶対値の最上位桁からの０の個数である除数ゼロカウント値を計数する除数ゼロカウント値手段、
前記被除数ゼロカウント値と前記除数ゼロカウント値と前記ｎの値とに基づいて、ループカウント値の補正値を算出する補正値算出手段、
前記被除数ゼロカウント値と前記除数ゼロカウント値と前記補正値とに基づいて、補正ループカウント値を算出する補正ループカウント値算出手段、
前記被除数の絶対値を、前記被除数ゼロカウント値と前記補正値とに基づく桁数だけシフトする被除数シフト手段、
前記除数の絶対値を、前記除数ゼロカウント値に基づいてシフトする除数シフト部と、
前記被除数シフト部からの出力値と前記除数シフト部からの出力値と前記補正ループカウント値とに基づいて、除算演算を実行する除算ループ処理手段、
として機能させることを特徴とする演算処理プログラム。
【請求項９】
前記補正値算出手段は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値を前記ｎの値で除算した剰余を、前記ｎの値から減算し、その減算値からさらに１を減算した値を、前記補正値とすることを特徴とする請求項８記載の演算処理プログラム。
【請求項１０】
前記補正ループカウント値算出手段は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値に１を加算することで求められる前記ループカウント値に対して、さらに前記補正値を加算した値を、前記補正ループカウント値とすることを特徴とする請求項８または９記載の演算処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、その制御方法および演算処理プログラムに関する。
【背景技術】
【０００２】
除算処理での商の算出手法の１つとして、被除数または中間剰余に対する除数の減算または加算処理（または減算処理のみ）を繰り返す“ループ処理”を用いた手法がある。ループ処理を用いた除算処理手法としては、引き戻し法、引き放し法、ＳＲＴ（Sweeney-Robertson-Tocher）法などが一般的に知られている。
【０００３】
図２５は、ループ処理を用いた除算処理手順の例を示す図である。
ループ処理を用いた除算処理手順は、一般的に、図２５に示すように、前処理９１０、ループ処理９２０および後処理９３０の３つの処理に大別される。また、ループ処理９２０は、部分商算出処理９２１を含む。
【０００４】
前処理９１０では、例えば、絶対値化処理や左シフトなどにより、ループ処理９２０を行う被除数と除数のデータ形式が整えられ、また、ループ処理９２０での部分商算出処理９２１のループ回数が算出される。ここでは、除算回路において、部分商算出処理９２１の１サイクルで１ビットの部分商が算出される場合に、部分商算出処理９２１のループ回数を算出する回路を“ループカウンタ”と呼び、必要とされる全ループ回数を“ループカウント値”と呼ぶ。
【０００５】
ループカウント値は、被除数および除数のそれぞれのＬＺＣ（Leading Zero Count）値を基に算出される。ＬＺＣ値は、入力された２進数データのうち最上位ビットから“０”が連続して存在する個数を示す。被除数のＬＺＣ値、除数のＬＺＣ値をそれぞれＬＺ＿Ａ，ＬＺＣ＿Ｂとすると、ループカウント値ＬＣは、次の式（１）によって算出される。
ＬＣ＝ＬＺＣ＿Ｂ−ＬＺＣ＿Ａ＋１                                    ・・・（１）
ループ処理９２０では、主として、１ビットの部分商を算出する部分商算出処理９２１が繰り返し実行される。部分商算出処理９２１では、例えば、被除数または中間剰余に対する除数の減算または加算（以下、“加減算”と呼ぶ）、その加減算結果の比較に基づく部分商、中間商および中間剰余の算出、ループカウント値の減算、中間剰余の左シフトなどが行われる。後処理９３０では、例えば、ループ処理９２０によって算出された中間商の補正が行われ、最終商が算出される。
【０００６】
ここで、ループカウント値は、最終商のビット幅を表し、それと同時に部分商算出処理９２１のループ回数を示している。ループ回数は、前述の通り、被除数および除数から求められる。ループカウント値は、部分商算出処理９２１が実行されるごとに１ずつ減算され、ループカウント値が“０”になると、ループ処理９２０が終了される。
【０００７】
また、中間剰余とは、部分商算出処理９２１において被除数に対して除数を加減算することで得られる値を指す。部分商算出処理９２１の初回実行時には、除数を加減算する対象は被除数であるが、２回目以降の実行時には、除数を加減算する対象は、直前の部分商算出処理９２１で算出された中間剰余となる。ただし、ここでは説明を簡単にするために、部分商算出処理９２１において除数によって加減算される対象を、被除数を含めて中間剰余ということにする。
【０００８】
部分商とは、部分商算出処理９２１において、加減算に基づく中間剰余と除数との比較によって得られる部分的な商である。中間商は、部分商算出処理９２１の実行ごとに得られる部分商を足し合わせていくことで算出される値である。
【０００９】
ところで、除算処理では、複数ビット分の部分商を１回の部分商算出処理で求めることにより、処理を高速化できるようになる。また、除算処理方式に対しては、１回の部分商算出処理の実行サイクル（以下、単に“サイクル”と呼ぶ）で求められる部分商のビット幅ｎに応じて、Ｒａｄｉｘ−２nという名称が使用されることがある。Ｒａｄｉｘ−２nによる除算では、１サイクル内での演算に関する基数を２jとしたとき、１サイクル当たりｋ回の加減算および比較処理が実行される。これにより、１サイクル当たりｎビット分（ただし、ｎ＝ｊ×ｋであり、ｊ，ｋはともに１以上の整数）の部分商が算出される。
【００１０】
ｎ≧２である場合、１サイクル当たり複数ビット分の部分商が算出されることから、ｎ＝１の場合より例えばｎの倍数の値に応じた速度でループ処理を行い、最終商を算出することが可能になる。このように、１サイクルに複数ビットの部分商を算出する除算方式は、“高基数除算方式”と呼ばれている。
【００１１】
ここで、１サイクルでｎビットの部分商を算出する処理を“ｎビット部分商算出処理”と呼ぶことにする。ｎ≧２，ｋ＝１の場合、ｎビット部分商算出処理が１回実行されると、被除数または中間剰余と除数との比較処理によりｊ（＝ｎ）ビット分の部分商が一度に出力される。また、比較処理が１回実行されるごとに、ループカウント値はｎだけ減算される。
【００１２】
一方、ｎ≧２，ｊ＝１の場合、ｎビット部分商算出処理が１回実行されると、被除数または中間剰余と除数とを比較する比較処理が、直列にｋ（＝ｎ）回実行される。１回の比較処理により、１ビット分の部分商が算出されるとともに、ループカウント値は“１”だけ減算される。従って、１サイクルにおいて、比較処理がｋ回実行されることで、最終的にｎビットの中間商が算出される。
【００１３】
このように、Ｒａｄｉｘ−２n除算処理では、１サイクルにｎビットずつ部分商が求められる。また、前述のように、ループカウント値は最終商のビット幅を表すため、Ｒａｄｉｘ−２n除算処理では、ループカウント値は１サイクル当たりｎずつ減算される。ここで、ループカウント値の初期値がｎの倍数である場合には、ループ処理９２０の終了時にループカウント値はちょうど“０”となる。しかしながら、ループカウント値の初期値がｎの倍数でない場合には、ループ処理９２０の終了時にループカウント値は“０”を通り越してマイナス値になってしまう。この場合、ループ処理９２０における最終回のｎビット部分商算出処理において正しい部分商を算出できず、最終商はビット幅がｎではない不正な値となってしまう。このようにループカウント値の初期値がｎの倍数でない場合、正しい最終商を出力するためには、次の図２６，図２７に示す処理例のような追加的な処理を施す必要が生じる。
【００１４】
図２６は、ループカウント値の初期値がｎの倍数でない場合に適用可能な第１の処理例を示す図である。また、図２７は、ループカウント値の初期値がｎの倍数でない場合に適用可能な第２の処理例を示す図である。なお、図２６，図２７では、図２５に対応する構成要素には同じ符号を付して示している。
【００１５】
図２６，図２７では、ｎビットの部分商を算出するｎビット部分商算出処理９２１ａを繰り返す処理を、ループ処理９２０ａとして示している。ループ処理９２０ａでは、ｎビット部分商算出処理９２１ａを１回実行するごとにループカウント値がｎだけ減算され、ｎビット部分商算出処理９２１ａはループカウント値が０以下になるまで繰り返される。
【００１６】
第１の処理例としては、図２６に示すように、ループ処理９２０ａの終了後に、この時点で算出された中間商を正しい商になるように修正する商修正処理９４０を実行する方法が考えられる。商修正処理９４０では、例えば、ｎビット部分商算出処理９２１ａ内の加減算・比較処理とは逆の処理手順が、その加減算・比較処理が余計に実行された回数だけ実行される。
【００１７】
しかし、このような商修正処理９４０が追加される分、除算処理の処理手順は複雑になる。また、除算回路において商修正処理９４０を実行するためには、例えば、ｎビット部分商算出処理９２１ａでの加減算・比較処理の処理内容のうち必要な情報を記録する回路や、加減算・比較処理とは逆の処理手順で処理を行う回路などがさらに必要になる。このため、回路規模が大きくなり、それに伴って消費電力が増大する、レイテンシが悪化するといった問題がある。
【００１８】
一方、第２の除算処理例としては、図２７に示すように、ループ処理９２０ａの中で、ｎビット部分商算出処理９２１ａを実行する前に、その時点でのループカウント値を基に必要に応じて剰余修正処理９２２を実行する方法が考えられる。剰余修正処理９２２では、例えば、その時点でのループカウント値がｎ未満である場合にのみ、中間剰余の出力処理に比較結果を反映しないなど、中間剰余の値に対する特別な処理が実行される。
【００１９】
しかし、上記の第１の処理例と同様、このような剰余修正処理９２２が追加される分、除算処理の処理手順は複雑になる。また、除算回路において、剰余修正処理９２２を実行する回路は、ループ処理９２０ａを実行する回路の中に組み込む必要がある。このため、例えば、剰余修正処理９２２の実行回路は、現在のループカウント値に関係なく、ｎビット部分商算出処理９２１ａが実行されるごとに動作することになる。従って、単に回路規模が大きくなるという問題だけでなく、現在のループカウント値がｎ以上となる状態においては、無駄な動作により余計な電力が消費される問題もある。また、ループ処理９２０ａの途中で最終剰余を出力する場合には、ループ処理９２０ａから途中で抜けるデータパス用に設けられるセレクタなどの回路をさらに組み込む必要が生じる。
【００２０】
なお、除算処理方法の例としては、前処理において、除数のシフト数と被除数のシフト数との差が常にｎの整数倍となるように、除数および被除数をシフトすることにより、除算回路で算出される商の桁数がｎの整数倍となるようにしたものがある。また、他の除算処理方法の例としては、ビット当たりの除算処理量の低減を目的として、除数を１６ビット分左シフトした後に“１”を減算し、得られた値をループ処理に投入するようにした除算処理方法がある。
【先行技術文献】
【特許文献】
【００２１】
【特許文献１】特開平４−２９１４１８号公報
【特許文献２】特開２００２−１７５１７９号公報
【発明の概要】
【発明が解決しようとする課題】
【００２２】
前述のように、従来の除算処理では、ループカウント値の初期値がｎの倍数でない場合、正しい最終商を出力する追加的な処理が必要であった。このため、部分商の算出以降の処理手順が複雑になるという問題があった。また、この追加処理をハードウェア回路により実現した場合には、回路規模、消費電力、レイテンシなどが大きくなるという問題があった。
【００２３】
本発明はこのような点に鑑みてなされたものであり、より簡易な処理手順により高基数除算を実行可能な演算処理装置、その制御方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００２４】
上記目的を達成するために、ｎビット幅（ｎは１以上の整数）の部分商を繰り返し算出することにより、被除数を除数で除算する除算処理を実行する演算処理装置が提供される。この演算処理装置は、前記被除数の絶対値の最上位桁からの０の個数である被除数ゼロカウント値を計数する被除数ゼロカウント値計数部と、前記除数の絶対値の最上位桁からの０の個数である除数ゼロカウント値を計数する除数ゼロカウント値計数部と、前記被除数ゼロカウント値と前記除数ゼロカウント値と前記ｎの値とに基づいて、ループカウント値の補正値を算出する補正値算出部と、前記被除数ゼロカウント値と前記除数ゼロカウント値と前記補正値とに基づいて、補正ループカウント値を算出する補正ループカウント値算出部と、前記被除数の絶対値を、前記被除数ゼロカウント値と前記補正値とに基づく桁数だけシフトする被除数シフト部と、前記除数の絶対値を、前記除数ゼロカウント値に基づいてシフトする除数シフト部と、前記被除数シフト部からの出力値と前記除数シフト部からの出力値と前記補正ループカウント値とに基づいて、除算演算を実行する除算ループ処理部と、を有する。
【００２５】
また、上記目的を達成するために、上記の演算処理装置の制御方法、および、上記の演算処理装置の機能を実現する演算処理プログラムが提供される。
【発明の効果】
【００２６】
上記の演算処理装置、その制御方法および演算処理プログラムでは、より簡易な処理手順により高基数除算を実行可能になる。
【図面の簡単な説明】
【００２７】
【図１】第１の実施の形態の演算処理装置の構成を示す図である。
【図２】第２の実施の形態の除算回路の構成を示す図である。
【図３】第２の実施の形態の前処理回路の内部構成を示す図である。
【図４】絶対値化回路の内部構成例を示す図である。
【図５】ゼロ拡張回路の内部構成例を示す図である。
【図６】補正値算出回路の内部構成例を示す図である。
【図７】ＬＣ算出回路の内部構成例を示す図である。
【図８】前処理回路による前処理手順の例を示すフローチャートである。
【図９】除算ループ回路の内部構成例を示す図である。
【図１０】図９に示したデコーダの入出力の関係を示す真理値表である。
【図１１】図９の除算ループ回路における除算ループ処理の手順を示すフローチャートである。
【図１２】ｎ＝２の場合の従来の除算の例を示す図である。
【図１３】第２の実施の形態の前処理を適用した、ｎ＝２の場合の除算の例を示す図である。
【図１４】ｎ＝４の場合の従来の除算の例を示す図である。
【図１５】第２の実施の形態の前処理を適用した、ｎ＝４の場合の除算の例を示す図である。
【図１６】第３の実施の形態の前処理回路の構成を示す図である。
【図１７】シフト値補正回路の内部構成例を示す図である。
【図１８】第３の実施の形態の前処理回路による前処理手順の例を示すフローチャートである。
【図１９】第４の実施の形態の前処理回路の構成を示す図である。
【図２０】制御回路が備える、セレクト信号を出力する回路の構成例を示す図である。
【図２１】制御状態とセレクト信号との対応を示す図である。
【図２２】第４の実施の形態の前処理回路による前処理手順を示すフローチャートである。
【図２３】コンピュータのハードウェア構成例を示す図である。
【図２４】コンピュータにおける前処理手順の例を示すフローチャートである。
【図２５】ループ処理を用いた除算処理手順の例を示す図である。
【図２６】ループカウント値の初期値がｎの倍数でない場合に適用可能な第１の処理例を示す図である。
【図２７】ループカウント値の初期値がｎの倍数でない場合に適用可能な第２の処理例を示す図である。
【発明を実施するための形態】
【００２８】
以下、実施の形態を図面を参照して詳細に説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態の演算処理装置の構成を示す図である。
【００２９】
図１に示す演算処理装置１は、除数および被除数の入力を受け付け、被除数を除数で除算する除算処理機能を備えている。特に、この演算処理装置１は、ｎビット幅（ただし、ｎは１以上の整数）の部分商を繰り返し算出することにより除算処理を実行する。演算処理装置１は、このような除算処理機能として、前処理部１０と除算ループ処理部２０とを備えている。
【００３０】
なお、演算処理装置１は、例えば、ＣＰＵ（Central Processing Unit）として実現される。この場合、前処理部１０および除算ループ処理部２０の各機能は、例えば、ＣＰＵの内部の演算回路として実現される。また、前処理部１０および除算ループ処理部２０の各機能は、ソフトウェアによって実現されてもよい。この場合、前処理部１０および除算ループ処理部２０の各機能は、例えば、情報処理装置が備えるＣＰＵが所定のプログラムを実行することにより実現される。
【００３１】
前処理部１０は、被除数および除数の整形や、除算ループ処理部２０の処理で必要な値の算出など、除算ループ処理部２０の処理に対する前処理を実行する。前処理部１０は、このような処理を実行する機能として、絶対値化処理部１１，１２、被除数ゼロカウント値計数部１３、除数ゼロカウント値計数部１４、補正値算出部１５、補正ループカウント値算出部１６、被除数シフト部１７および除数シフト部１８を備えている。
【００３２】
絶対値化処理部１１，１２は、入力された被除数Ａおよび除数Ｂをそれぞれ絶対値化する。ただし、入力された被除数および除数がともに正の値であることが確定している場合には、絶対値化処理部１１，１２は必要ではない。
【００３３】
被除数ゼロカウント値計数部１３は、絶対値化処理部１１からの出力値の最上位ビットから連続する０の個数を計数する。ここでは、計数された０の個数を“ゼロカウント値ＬＺＣ＿Ａ”と呼ぶ。除数ゼロカウント値計数部１４は、絶対値化処理部１２からの出力値の最上位ビットから連続する０の個数を計数する。ここでは、計数された０の個数を“ゼロカウント値ＬＺＣ＿Ｂ”とする。
【００３４】
補正値算出部１５は、計数されたゼロカウント値ＬＺＣ＿Ａ，ＬＺＣ＿Ｂと、ｎの値とを基に、ループカウント値ＬＣを補正する補正値ＣＲを算出する。ここで、ループカウント値ＬＣは、最終商のビット幅を示す値であり、前述の式（１）によって求められる。また、補正値ＣＲは、次の式（２）によって算出される。なお、式（２）に示した“％”は、剰余を求めることを示す演算子である。
ＣＲ＝ｎ−（ＬＺＣ＿Ｂ−ＬＺＣ＿Ａ）％ｎ−１                        ・・・（２）
補正ループカウント値算出部１６は、計数されたゼロカウント値ＬＺＣ＿Ａ，ＬＺＣ＿Ｂと、補正値算出部１５からの補正値ＣＲとを基に、補正ループカウント値ＬＣ’を算出する。補正ループカウント値ＬＣ’は、次の式（２）によって算出される。
ＬＣ’＝ＬＣ＋ＣＲ
＝ＬＺＣ＿Ｂ−ＬＺＣ＿Ａ＋｛ｎ−（ＬＺＣ＿Ｂ−ＬＺＣ＿Ａ）％ｎ｝・・・（３）
被除数シフト部１７は、絶対値化処理部１１からの出力値を、被除数のゼロカウント値ＬＺＣ＿Ａと補正値ＣＲとを基にシフトする。例えば、被除数シフト部１７は、絶対値化処理部１１からの出力値を、ゼロカウント値ＬＺＣ＿Ａだけ左シフトした後、補正値ＣＲだけ右シフトする。なお、これらの左シフトおよび右シフトの処理順が入れ替えられてもよい。あるいは、被除数シフト部１７は、絶対値化処理部１１からの出力値を、（ＬＺＣ＿Ａ−ＣＲ）だけ左シフトしてもよい。
【００３５】
除数シフト部１８は、絶対値化処理部１２からの出力値を、除数のゼロカウント値ＬＺＣ＿Ｂを基にシフトする。具体的には、除数シフト部１８は、絶対値化処理部１２からの出力値を、ゼロカウント値ＬＺＣ＿Ｂだけ左シフトする。
【００３６】
以上の処理が実行された結果、被除数シフト部１７および除数シフト部１８からの出力値は、それぞれ整形された被除数および除数として除算ループ処理部２０に入力される。ここで、除算ループ処理部２０に入力される被除数および除数を、それぞれ“被除数Ａ’”、“除数Ｂ’”と呼ぶ。また、補正ループカウント値算出部１６により算出された補正ループカウント値ＬＣ’も、除算ループ処理部２０に入力される。
【００３７】
除算ループ処理部２０は、被除数Ａ’を除数Ｂ’によって除算する。除算ループ処理部２０は、ｎビット幅の部分商を算出する処理を補正ループカウント値ＬＣ’に応じた回数だけ繰り返すことにより、商および剰余を算出する。以下、ｎビット幅の部分商を算出する処理を、“ｎビット部分商算出処理”と呼ぶことにする。このような除算手順としては、引き戻し法、引き放し法、ＳＲＴ法などを用いた除算手順を適用することが可能である。また、ｎビット部分商算出処理では、除数Ｂ’を用いた比較処理が直列にｎ回実行される処理手順が適用されることが望ましい。
【００３８】
ここで、前処理部１０での処理手順を、従来の前処理の手順と対比する。従来の前処理では、被除数の絶対値をゼロカウント値ＬＺＣ＿Ａだけ左シフトして、整形された被除数として除算ループ処理に投入するとともに、除数の絶対値をゼロカウント値ＬＺＣ＿Ｂだけ左シフトして、整形された除数として除算ループ処理に投入していた。また、除算ループ処理でのｎビット部分商算出処理の繰り返し回数は、ループカウント値ＬＣを基に決定されていた。
【００３９】
除算ループ処理では、ｎビット部分商算出処理が繰り返し実行され、ｎビット部分商算出処理が実行されるたびに、ループカウント値ＬＣはｎずつ減算される。そして、ループカウント値ＬＣが０以下になると、ループ処理が終了される。例えば、引き戻し法が適用される場合、初回のｎビット部分商算出処理では、被除数から除数が減算され、その減算結果からｎビット分の部分商が決定されるとともに、中間剰余が算出される。また、ループカウント値ＬＣの値がｎだけ減算される。２回目以降のｎビット部分商算出処理では、ｎビット分だけ左シフトされた中間剰余から除数が減算され、その減算結果からｎビット分の部分商が決定されるとともに、中間剰余が算出される。また、ループカウント値ＬＣの値がｎだけ減算される。
【００４０】
ここで、ループカウント値ＬＣの値がｎの倍数であれば、いずれかのｎビット部分商算出処理の終了時に、ループカウント値ＬＣの値が０となり、この時点での部分商を基に正しい最終商が出力される。しかし、ループカウント値ＬＣの値がｎの倍数でない場合には、いずれかのｎビット部分商算出処理の終了時に、ループカウント値ＬＣの値が０未満の値となってしまう。この場合、最終商のビット幅はループカウント値ＬＣとは一致せず、正しい最終商が出力されない。正しい最終商を求めるためには、図２６に示した商修正処理９４０や、図２７に示した剰余修正処理９２２などが必要となる。
【００４１】
これに対して、本実施の形態の前処理部１０では、補正ループカウント値算出部１６において、補正値ＣＲを用いて、ループカウント値がｎの倍数になるように補正される。すなわち、被除数Ａおよび除数Ｂの値がどのような値であっても、補正ループカウント値算出部１６から出力される補正ループカウント値ＬＣ’はｎの倍数となる。
【００４２】
除算ループ処理部２０は、従来のループカウント値ＬＣの代わりに補正ループカウント値ＬＣ’の入力を受け、ｎビット部分商算出処理を繰り返す。また、除算ループ処理部２０は、ｎビット部分商算出処理を実行するたびに、補正ループカウント値ＬＣ’をｎだけ減算する。これにより、いずれかのｎビット部分商算出処理の終了時に補正ループカウント値ＬＣ’は０となる。
【００４３】
ただし、式（２）によれば、被除数Ａおよび除数Ｂに基づく従来のループカウント値ＬＣがｎの倍数となる場合には、補正値ＣＲは０になる。しかしながら、被除数Ａおよび除数Ｂに基づく従来のループカウント値ＬＣがｎの倍数とならない場合には、補正値ＣＲは１以上になる。
【００４４】
補正値ＣＲが１以上になる場合、補正ループカウント値ＬＣ’は従来のループカウント値ＬＣより大きくなる。このため、除算ループ処理全体において、１ビットの部分商を得る加減算・比較処理の繰り返し回数が増加する。この場合、部分商のビット幅が増加することから、最終商のビット幅も大きくなり、正しい最終商は得られない。そこで、前処理部１０では、被除数シフト部１７において、補正値ＣＲに基づいて被除数Ａを補正することで、正しい最終商が出力されるようにしている。
【００４５】
ループ処理中のｎビット部分商算出処理において得られる部分商は、被除数または中間剰余と除数との大小関係によって決まる。例えば、１回のｎビット部分商算出処理での演算に関する基数を２jとすると、ｊ＝１とした引き戻し法による除算処理では、減算の対象となる被除数または中間剰余が除数より小さい場合には、得られる部分商は０となる。そして、元の被除数または中間剰余が１ビット左シフトされて、次の減算に投入される。
【００４６】
このことから、前処理の段階において、除算ループに投入する被除数を補正値ＣＲだけ右シフトしておくことで、ループカウント値ＬＣの補正により増加した分の部分商をすべて０にすることができる。すなわち、最終商の最上位から補正値ＣＲ分の値に対応する部分商がすべて０になり、実質的にこれらの部分商を算出する処理がスキップされるようになる。
【００４７】
前処理部１０では、除算ループ処理部２０に投入する被除数を補正値ＣＲだけ右シフトする補正処理を、被除数シフト部１７において実行している。これにより、被除数Ａおよび除数Ｂに基づく従来のループカウント値ＬＣがｎの倍数でない場合でも、除算ループ処理部２０によって正しい最終商が算出されるようになる。
【００４８】
なお、被除数シフト部１７では、補正値ＣＲ分の補正処理（例えば、補正値ＣＲ分の右シフト処理）により、下位ビットのシフトアウトが発生する場合があり得る。このような事態を防止するためには、絶対値化処理後の被除数ＡがＬＺＣ＿Ａ≧ｎ−１という条件を満たすようにすればよい。また、このような条件を満たさない被除数Ａを許容するためには、例えば、絶対値化処理部１１により絶対値化された被除数Ａのビット幅を上位側に拡張して、拡張された上位ビットに０を設定するゼロ拡張部を、前処理部１０に設ければよい。例えば、被除数Ａを上位側に（ｎ−１）ビット分だけ拡張するゼロ拡張部が設けられることにより、被除数Ａの値に関係なく除算処理を正しく実行できる。なお、被除数Ａのビット幅を拡張した場合には、絶対値化された除数Ｂの上位側のビット幅を同じビット数分だけ拡張して０を設定するゼロ拡張部を設けることで、除算ループ処理が正しく実行される。
【００４９】
以上の第１の実施の形態によれば、従来のループカウント値ＬＣがｎの倍数とならないような被除数Ａおよび除数Ｂが入力された場合でも、除算処理を正しく実行できる。また、このような効果は、前処理部１０において、補正値ＣＲを基にループカウント値ＬＣおよび被除数を補正することで得ることができる。そして、このようなループカウント値ＬＣおよび被除数の補正を行うことで、除算ループ処理の後にさらに処理を追加する、あるいは除算ループ処理の手順を変更するという必要がなくなる。従って、例えば、除算ループ処理以降の処理に必要な回路の設計変更が不要となる。また、除算ループ処理以降の処理における消費電力やレイテンシが増大することを抑制できる。
【００５０】
また、前処理部１０では、上記効果を得るために、上記の式（２）、式（３）のような単純な計算により補正値ＣＲや補正ループカウント値ＬＣ’が求められる。特に、式（２）、式（３）では、従来も算出していたゼロカウント値ＬＺＣ＿Ａ，ＬＺＣ＿Ｂが主に用いられる。また、被除数の補正もシフト量の調整により実現される。従って、従来の前処理手順に対して追加される処理手順を少なくすることができ、例えば、必要な回路の規模、処理による消費電力、レイテンシが増大することを抑制できる。
【００５１】
〔第２の実施の形態〕
図２は、第２の実施の形態の除算回路の構成を示す図である。
図２に示す除算回路２は、前処理回路１００、除算ループ回路２００および制御回路３００を備える。前処理回路１００および除算ループ回路２００は、図１に示した前処理部１０および除算ループ処理部２０を、それぞれハードウェア回路によって実現した場合の一例である。すなわち、前処理回路１００は、除算ループ回路２００での処理に対する前処理を実行する。除算ループ回路２００は、ｎビット幅の部分商を繰り返し算出することにより除算処理を実行する。制御回路３００は、前処理回路１００および除算ループ回路２００の動作タイミングを制御する。また、制御回路３００は、前処理回路１００および除算ループ回路２００のそれぞれの内部回路に対して、その動作を制御する各種制御信号を出力する。
【００５２】
なお、図示しないが、除算回路２にはさらに、除算ループ回路２００での演算結果を基に最終的な商および剰余を出力する後処理回路が設けられてもよい。後処理回路は、除算ループ回路２００の内部構成に応じて必要な場合に、除算回路２内に設けられればよい。
【００５３】
図３は、第２の実施の形態の前処理回路の内部構成を示す図である。
前処理回路１００は、絶対値化回路１０１，１０２、ゼロ拡張回路１１１，１１２、リーディング・ゼロ・カウント（ＬＺＣ）回路１２１，１２２、左シフタ１３１，１３２、右シフタ１３３、補正値算出回路１４０およびループカウント値（ＬＣ）算出回路１５０を備えている。
【００５４】
絶対値化回路１０１は、入力された被除数Ａの絶対値を出力する。絶対値化回路１０２は、入力された除数Ｂの絶対値を出力する。
ゼロ拡張回路１１１は、絶対値化された被除数Ａのビット幅を上位側に対して（ｎ−１）ビット分だけ拡張し、拡張したビットに０を設定する。ゼロ拡張回路１１２は、絶対値化された除数Ｂのビット幅を上位側に対して（ｎ−１）ビット分だけ拡張し、拡張したビットに０を設定する。
【００５５】
ＬＺＣ回路１２１は、ゼロ拡張回路１１１の出力値の最上位ビットから連続する０の個数を計数し、ゼロカウント値ＬＺＣ＿Ａを出力する。ＬＺＣ回路１２２は、ゼロ拡張回路１１２からの出力値の最上位ビットから連続する０の個数を計数し、ゼロカウント値ＬＺＣ＿Ｂを出力する。
【００５６】
左シフタ１３１は、ゼロ拡張回路１１１からの出力値を、ＬＺＣ回路１２１から出力されたゼロカウント値ＬＺＣ＿Ａだけ左シフトする。左シフタ１３２は、ゼロ拡張回路１１２からの出力値を、ＬＺＣ回路１２２から出力されたゼロカウント値ＬＺＣ＿Ｂだけ左シフトし、除数Ｂ’として除算ループ回路２００に出力する。
【００５７】
補正値算出回路１４０は、ＬＺＣ回路１２１，１２２からそれぞれ出力されたゼロカウント値ＬＺＣ＿Ａ，ＬＺＣ＿Ｂと、あらかじめ設定されたｎの値とを基に、前述の式（２）に従って補正値ＣＲを算出する。
【００５８】
ＬＣ算出回路１５０は、ＬＺＣ回路１２１，１２２からそれぞれ出力されたゼロカウント値ＬＺＣ＿Ａ，ＬＺＣ＿Ｂと、補正値算出回路１４０から出力された補正値ＣＲとを基に、前述の式（３）に従って補正ループカウント値ＬＣ’を算出する。算出結果は、除算ループ回路２００に出力される。
【００５９】
右シフタ１３３は、左シフタ１３１からの出力値を、補正値算出回路１４０から出力された補正値ＣＲだけ右シフトし、被除数Ａ’として除算ループ回路２００に出力する。
図４は、絶対値化回路の内部構成例を示す図である。なお、絶対値化回路１０１，１０２はともに同じ構成で実現可能であるので、ここでは絶対値化回路１０１の構成例についてのみ説明する。
【００６０】
絶対値化回路１０１は、インバータ１０３、加算回路１０４およびセレクタ１０５を備えている。インバータ１０３は、ゼロ拡張回路１１１からの出力値における各ビットの値を反転させる。加算回路１０４は、インバータ１０３からの出力値に１を加算する。
【００６１】
セレクタ１０５は、入力値の最上位ビットの値に応じて、入力値と加算回路１０４からの出力値のいずれか一方を出力する。具体的には、セレクタ１０５は、入力値の最上位ビットが０である場合には、入力値を選択して出力し、最上位ビットが１である場合には、加算回路１０４からの出力値を選択して出力する。
【００６２】
図５は、ゼロ拡張回路の内部構成例を示す図である。なお、ゼロ拡張回路１１１，１１２はともに同じ構成で実現可能であるので、ここではゼロ拡張回路１１１の構成例についてのみ説明する。
【００６３】
ゼロ拡張回路１１１は、ラッチ回路１１３を備えている。ラッチ回路１１３は、絶対値化回路１０１から入力される被除数Ａのビット数より（ｎ−１）ビット分だけ大きいビット幅のデータをラッチ可能である。そして、ラッチ回路１１３は、下位側のビットとして絶対値化された被除数Ａの入力を受けるとともに、上位側の（ｎ−１）ビット分には０の入力を受け、これらをラッチする。なお、ラッチ回路１１３でのラッチタイミングは、制御回路３００からのタイミング制御信号（図示せず）によって制御されればよい。
【００６４】
ｎの値は、接続される除算ループ回路２００の仕様に応じて、例えば制御回路３００などからあらかじめ設定される。例えば、ｎ＝２の場合には、図５のように最上位ビットに０が入力され、被除数Ａは１ビット分だけ上位側に拡張される。この場合、被除数Ａが例えば“1000 0111”であれば、ラッチ回路１１３に保持される値は“0 1000 0111”となる。
【００６５】
図６は、補正値算出回路の内部構成例を示す図である。
補正値算出回路１４０は、減算回路１４１〜１４３と剰余算出回路１４４とを備えている。減算回路１４１は、ｎの値から１を減算する。ｎの値は、接続される除算ループ回路２００の仕様に応じてあらかじめ設定される。減算回路１４２は、ＬＺＣ回路１２２から出力されたゼロカウント値ＬＺＣ＿Ｂから、ＬＺＣ回路１２１から出力されたゼロカウント値ＬＺＣ＿Ａを減算する。
【００６６】
剰余算出回路１４４は、減算回路１４２の出力値をｎの値で除算し、その剰余を出力する。減算回路１４３は、減算回路１４３の出力値から剰余算出回路１４４の出力値を減算する。その結果、減算回路１４３からは、式（２）に従って算出された補正値ＣＲが出力される。
【００６７】
図７は、ＬＣ算出回路の内部構成例を示す図である。
ＬＣ算出回路１５０は、減算回路１５１と加算回路１５２とを備えている。減算回路１５１は、ＬＺＣ回路１２２から出力されたゼロカウント値ＬＺＣ＿Ｂから、ＬＺＣ回路１２１から出力されたゼロカウント値ＬＺＣ＿Ａを減算する。なお、減算回路１５１は、例えば、補正値算出回路１４０の減算回路１４２と共通化してもよい。加算回路１５２は、補正値算出回路１４０から出力された補正値ＣＲと、減算回路１５１からの出力値と、１とを加算する。その結果、加算回路１５２からは、式（３）に従って算出された補正ループカウント値ＬＣ’が出力される。
【００６８】
図８は、前処理回路による前処理手順の例を示すフローチャートである。
［ステップＳ１１］絶対値化回路１０１は、入力された被除数Ａを絶対値化する。また、絶対値化回路１０２は、入力された除数Ｂを絶対値化する。
【００６９】
［ステップＳ１２］ゼロ拡張回路１１１は、制御回路３００からのタイミング制御信号に応じて、絶対値化回路１０１により絶対値化された被除数Ａを内部のラッチ回路に取り込む。また、ゼロ拡張回路１１２は、制御回路３００からのタイミング制御信号に応じて、絶対値化回路１０２により絶対値化された除数Ｂを内部のラッチ回路に取り込む。
【００７０】
［ステップＳ１３］ＬＺＣ回路１２１は、ゼロ拡張回路１１１の出力値の最上位ビットから連続する０の個数を計数し、ゼロカウント値ＬＺＣ＿Ａを出力する。また、ＬＺＣ回路１２２は、ゼロ拡張回路１１２からの出力値の最上位ビットから連続する０の個数を計数し、ゼロカウント値ＬＺＣ＿Ｂを出力する。
【００７１】
［ステップＳ１４］補正値算出回路１４０は、ＬＺＣ回路１２１，１２２からそれぞれ出力されたゼロカウント値ＬＺＣ＿Ａ，ＬＺＣ＿Ｂと、あらかじめ設定されたｎの値とを基に、式（２）に従って補正値ＣＲを算出する。
【００７２】
［ステップＳ１５］左シフタ１３１は、絶対値化回路１０１からの出力値を、ＬＺＣ回路１２１から出力されたゼロカウント値ＬＺＣ＿Ａだけ左シフトする。右シフタ１３３は、左シフタ１３１からの出力値を、補正値算出回路１４０から出力された補正値ＣＲだけ右シフトし、被除数Ａ’として除算ループ回路２００に出力する。一方、左シフタ１３２は、絶対値化回路１０２からの出力値を、ＬＺＣ回路１２２から出力されたゼロカウント値ＬＺＣ＿Ｂだけ左シフトし、除数Ｂ’として除算ループ回路２００に出力する。
【００７３】
なお、左シフタ１３１，１３２のシフト動作は、補正値ＣＲの算出前に実行されてもよい。
［ステップＳ１６］ＬＣ算出回路１５０は、ＬＺＣ回路１２１，１２２からそれぞれ出力されたゼロカウント値ＬＺＣ＿Ａ，ＬＺＣ＿Ｂと、補正値算出回路１４０から出力された補正値ＣＲとを基に、式（３）に従って補正ループカウント値ＬＣ’を算出する。算出結果は、除算ループ回路２００に出力される。
【００７４】
なお、ステップＳ１５，Ｓ１６の処理順は逆であってもよい。
次に、図９は、除算ループ回路の内部構成例を示す図である。図９では例として、ｎ＝２，ｊ＝１，ｋ＝２であるＲａｄｉｘ−４除算処理を、引き戻し法を用いて実行する回路の構成例を挙げる。なお、図９に示す除算ループ回路２００の構成は、あくまで一例である。ｎ＝２，ｊ＝１，ｋ＝２であるＲａｄｉｘ−４除算処理を行う他の回路構成を適用することも可能である。
【００７５】
図９に示す除算ループ回路２００は、セレクタ２０１、ラッチ回路２０２，２０３、減算回路２１１，２１２、左シフタ２２１〜２２３、セレクタ２２４，２２５、デコーダ２２６、ラッチ回路２３１，２３２、左シフタ２３３、加算回路２３４、セレクタ２４１、減算回路２４２およびラッチ回路２４３を備えている。
【００７６】
セレクタ２０１は、前処理回路１００から出力された被除数Ａ’と、左シフタ２２３からの出力値とのいずれか一方を選択的に出力する。ラッチ回路２０２は、セレクタ２０１からの出力値をラッチする。ここで、ラッチ回路２０２にラッチされる値を、“中間剰余初期値Ｃ’”と呼ぶ。ラッチ回路２０３は、前処理回路１００から出力された除数Ｂ’をラッチする。
【００７７】
減算回路２１１は、ラッチ回路２０２にラッチされた中間剰余初期値Ｃ’から、ラッチ回路２０３にラッチされた除数Ｂ’を減算する。減算回路２１１による減算結果は左シフタ２２１に出力される。また、減算回路２１１からのキャリーアウトは、デコーダ２２６に供給されるとともに、セレクタ２２４に対してセレクト信号として出力される。
【００７８】
左シフタ２２１は、減算回路２１１による減算結果を１ビット左シフトする。左シフタ２２２は、ラッチ回路２０２にラッチされた中間剰余初期値Ｃ’を、１ビット左シフトする。
【００７９】
セレクタ２２４は、左シフタ２２１からの出力値と左シフタ２２２からの出力値のいずれか一方を、減算回路２１１からのキャリーアウトに応じて選択して出力する。減算回路２１２は、セレクタ２２４からの出力値から、ラッチ回路２０３にラッチされた除数Ｂ’を減算する。減算回路２１２による減算結果はセレクタ２２５に出力され、減算回路２１２からのキャリーアウトはデコーダ２２６に出力される。
【００８０】
セレクタ２２５は、左シフタ２２２からの出力値と、減算回路２１２によるキャリーアウトと、左シフタ２２１からの出力値のうちのいずれか１つを、デコーダ２２６からのセレクト信号ＳＥＬに応じて選択して出力する。左シフタ２２３は、セレクタ２２５からの出力値を２ビット左シフトし、セレクタ２０１に出力する。
【００８１】
デコーダ２２６は、減算回路２１１，２１２のそれぞれからのキャリーアウトの組み合わせに応じて、ｎ（＝２）ビットの部分商Ｄを出力するとともに、セレクタ２２５に対してセレクト信号ＳＥＬを出力する。
【００８２】
ラッチ回路２３１は、デコーダ２２６から出力された部分商Ｄをラッチする。加算回路２３４は、ラッチ回路２３１にラッチされた部分商Ｄと、左シフタ２３３からの出力値とを加算する。ラッチ回路２３２は、加算回路２３４による加算結果をラッチする。左シフタ２３３は、ラッチ回路２３２にラッチされた値をｎビット分、すなわち２ビット分だけ左シフトする。このような構成により、ラッチ回路２３２には中間商Ｄ’が保持される。
【００８３】
セレクタ２４１は、前処理回路１００からの補正ループカウント値ＬＣ’と、ラッチ回路２４３にラッチされた補正ループカウント値ＬＣ’とのいずれか一方を、制御回路３００からのセレクト信号（図示せず）に従って出力する。減算回路２４２は、セレクタ２４１から出力された値からｎ、すなわち２を減算する。ラッチ回路２４３は、減算回路２４２からの出力値をラッチする。
【００８４】
図１０は、図９に示したデコーダの入出力の関係を示す真理値表である。なお、図１０では、減算回路２１１，２１２のそれぞれからのキャリーアウトをａ，ｂ、左シフタ２２２、減算回路２１２および左シフタ２２１からセレクタ２２５へのそれぞれの入力をｐ，ｑ，ｒとしている。
【００８５】
デコーダ２２６は、図１０の真理値表に従って、部分商Ｄおよびセレクト信号ＳＥＬを出力する。デコーダ２２６は、減算回路２１１，２１２からのキャリーアウトがともに０のとき、部分商Ｄを“00”とするとともに、セレクト信号ＳＥＬにより、左シフタ２２２からの出力値をセレクタ２２５に選択させる。また、デコーダ２２６は、減算回路２１１，２１２からのキャリーアウトがそれぞれ０，１のとき、部分商Ｄを“01”とするとともに、セレクト信号ＳＥＬにより、減算回路２１２による減算結果をセレクタ２２５に選択させる。デコーダ２２６は、減算回路２１１，２１２からのキャリーアウトがそれぞれ１，０のとき、部分商Ｄを“10”とするとともに、セレクト信号ＳＥＬにより、左シフタ２２１からの出力値をセレクタ２２５に選択させる。また、デコーダ２２６は、減算回路２１１，２１２からのキャリーアウトがともに１のとき、部分商Ｄを“11”とするとともに、セレクト信号ＳＥＬにより、減算回路２１２による減算結果をセレクタ２２５に選択させる。
【００８６】
図１１は、図９の除算ループ回路における除算ループ処理の手順を示すフローチャートである。
［ステップＳ２１］セレクタ２０１は、制御回路３００からのセレクト信号に応じて、前処理回路１００からの被除数Ａ’を選択する。また、セレクタ２４１は、制御回路３００からのセレクト信号に応じて、前処理回路１００からの補正ループカウント値ＬＣ’を選択する。
【００８７】
［ステップＳ２２］ラッチ回路２０３は、制御回路３００からのタイミング制御信号に応じて、前処理回路１００からの除数Ｂ’をラッチする。
なお、ステップＳ２１，Ｓ２２の処理順は逆であってもよい。
【００８８】
この後のステップＳ２３〜Ｓ３０における除算ループ回路２００の処理は、ｎビット幅の部分商を算出するｎビット部分商算出処理の１サイクルに対応する。
［ステップＳ２３］減算回路２４２は、セレクタ２４１から出力された値からｎ、すなわち２を減算する。
【００８９】
［ステップＳ２４］ラッチ回路２０２は、制御回路３００からのタイミング制御信号に応じて、セレクタ２０１からの出力値をラッチする。また、ラッチ回路２４３は、制御回路３００からのタイミング制御信号に応じて、減算回路２４２からの出力値をラッチする。
【００９０】
［ステップＳ２５］１段目の減算回路２１１は、ラッチ回路２０２にラッチされた中間剰余初期値Ｃ’から、ラッチ回路２０３にラッチされた除数Ｂ’を減算する。このとき、減算回路２１１からのキャリーアウトはセレクタ２２４に対して供給される。セレクタ２２４は、減算回路２１１からのキャリーアウトが０のとき、左シフタ２２２からの出力値を選択し、減算回路２１１からのキャリーアウトが１のとき、左シフタ２２１からの出力値を選択する。
【００９１】
［ステップＳ２６］左シフタ２２１は、減算回路２１１による減算結果を１ビット左シフトする。また、左シフタ２２２は、ラッチ回路２０２にラッチされた中間剰余初期値Ｃ’を、１ビット左シフトする。
【００９２】
［ステップＳ２７］２段目の減算回路２１２は、セレクタ２２４からの出力値から、ラッチ回路２０３にラッチされた除数Ｂ’を減算する。
［ステップＳ２８］デコーダ２２６は、減算回路２１１，２１２のそれぞれからのキャリーアウトの組み合わせに応じて、部分商Ｄおよびセレクト信号ＳＥＬを出力する。このとき、セレクタ２２５は、セレクト信号ＳＥＬに応じた選択動作を行い、中間剰余Ｃを出力する。
【００９３】
［ステップＳ２９］左シフタ２２３は、セレクタ２２５からの中間剰余Ｃを１ビット左シフトする。また、ラッチ回路２３１は、制御回路３００からのタイミング制御信号に応じて、デコーダ２２６からの部分商Ｄをラッチする。
【００９４】
［ステップＳ３０］加算回路２３４は、ラッチ回路２３１にラッチされた部分商Ｄと、左シフタ２３３からの出力値とを加算して、中間商Ｄ’を算出する。ラッチ回路２３２は、制御回路３００からのタイミング制御信号に応じて、加算回路２３４により算出された中間商Ｄ’をラッチする。この後、左シフタ２３３は、ラッチ回路２３２にラッチされた中間商Ｄ’をｎビット分、すなわち２ビット分だけ左シフトする。
【００９５】
［ステップＳ３１］制御回路３００は、ラッチ回路２４３にラッチされた補正ループカウント値ＬＣ’が０であるか否かを判定する。補正ループカウント値ＬＣ’が０でない場合には、ステップＳ３２の処理が実行される。一方、補正ループカウント値ＬＣ’が０である場合には、除算回路２の動作が終了される。このとき、ラッチ回路２３２にラッチされた中間商Ｄ’が最終商となり、セレクタ２２５から出力されている中間剰余Ｃが、最終剰余となる。
【００９６】
［ステップＳ３２］セレクタ２０１は、制御回路３００からのセレクト信号に応じて、左シフタ２２３からの出力を選択する。また、セレクタ２４１は、制御回路３００からのセレクト信号に応じて、ラッチ回路２４３からの出力を選択する。この後、ステップＳ２３からの処理が再度実行されて、ｎビット幅の部分商Ｄが算出される。
【００９７】
以上説明した除算回路２では、前処理回路１００において被除数Ａ’、除数Ｂ’および補正ループカウント値ＬＣ’が算出された後、これらの値が除算ループ回路２００に入力されて、除算ループ処理が実行される。除算ループ回路２００では、ステップＳ２３〜Ｓ３０の処理により、ｎ（＝２）ビット幅の部分商Ｄが算出される。そして、このようなｎビット部分商算出処理が、（ＬＣ’／ｎ）回繰り返されることにより、最終商が算出される。
【００９８】
上記の前処理回路１００による被除数、除数およびループカウント値の補正処理により、従来のループカウント値ＬＣがｎの倍数とならないような被除数Ａおよび除数Ｂが入力された場合でも、除算処理を正しく実行できる。すなわち、前処理回路１００は、従来のループカウント値ＬＣを補正した補正ループカウント値ＬＣ’を算出することにより、除算ループ回路２００でのｎビット部分商算出処理の繰り返し回数がｎの倍数となるようにする。また、ループカウント値の補正によりｎビット部分商算出処理の繰り返し回数が増加した場合でも最終商が正しく算出されるように、除算ループ回路２００に出力する被除数の値も補正する。
【００９９】
ここで、除算処理の具体例について説明する。まず、図１２は、ｎ＝２の場合の従来の除算の例を示す図である。
図１２では、従来の前処理により、除算ループ回路２００に入力する被除数、除数およびループカウント値を求めた場合の除算処理の例を示している。被除数Ａが“1000 0111”（１０進数で“１３５”）、除数Ｂが“0011 1100”（１０進数で“６０”）の場合、従来の前処理では、式（１）によりループカウント値ＬＣが“３”と求められる。そして、このループカウント値ＬＣが、補正ループカウント値ＬＣ’の代わりに除算ループ回路２００に入力される。また、従来の前処理では、被除数Ａおよび除数Ｂは、それぞれのゼロカウント値分だけ左シフトされ、前処理後に除算ループ回路２００に入力される被除数Ａ’および除数Ｂ’は、それぞれ“1000 0111”，“1111 0000”となる。
【０１００】
除算ループ回路２００での１回目のｎビット部分商算出処理（図１１のステップＳ２３〜Ｓ２８に対応）では、部分商Ｄとして“01”が算出され、ループカウント値ＬＣは２だけ減算されて“１”となる。２回目のｎビット部分商算出処理では、部分商Ｄとして“00”が算出されるが、ループカウント値ＬＣは“−１”となる。このとき、中間商Ｄ’として“0100”（１０進数で“４”）が求められるが、この値は正しい最終商ではない。このように、従来の前処理を適用した除算ループ処理では、ループカウント値ＬＣがｎの倍数でない場合、そのままでは正しい最終商を求めることができない。
【０１０１】
図１３は、第２の実施の形態の前処理を適用した、ｎ＝２の場合の除算の例を示す図である。
図１３において、図１２の場合と同じ被除数Ａ“1000 0111”および除数Ｂ“0011 1100”が本実施の形態の前処理回路１００に入力されると、まず、絶対値化処理（図８のステップＳ１１）により、被除数Ａおよび除数Ｂが絶対値化された後、ゼロ拡張処理（図８のステップＳ１２）により、絶対値化された被除数Ａおよび除数Ｂのそれぞれの上位側が１ビット分拡張される。次に、ゼロ拡張された被除数および除数を基にゼロカウント値算出処理（ステップＳ１３）が実行され、さらに補正値ＣＲが算出される（ステップＳ１４）。図１３に示すように、絶対値化処理後の被除数および除数はそれぞれ“0 1000 0111”，“0 0011 1100”となり、補正値ＣＲは“１”となる。なお、これらの被除数および除数に基づく従来のループカウント値ＬＣは“３”となり、この値はｎ（＝２）の倍数となっていない。
【０１０２】
絶対値化処理後の被除数および除数は、シフト処理（ステップＳ１５）が施されることによりそれぞれ“0 1000 0111”，“1 1110 0000”と変換され、それぞれ被除数Ａ’、除数Ｂ’として除算ループ回路２００に出力される。また、算出された補正値ＣＲを基に補正ループカウント値ＬＣ’が“４”と算出される（ステップＳ１６）。
【０１０３】
以上の前処理回路１００の処理により、ループカウント値ＬＣはｎの倍数に補正される。また、被除数は、左シフタ１３１により最上位ビットが１となるように左シフトされた後、右シフタ１３３により補正値ＣＲの分だけ右シフトされる。このため、除算ループ回路２００に入力される被除数Ａ’には、最上位側から補正値ＣＲのビット数だけ０が現れる。
【０１０４】
除算ループ回路２００での１回目のｎビット部分商算出処理（図１１のステップＳ２３〜Ｓ３０に対応）では、部分商Ｄとして“00”が算出され、補正ループカウント値ＬＣ’は２だけ減算されて“２”となる。２回目のｎビット部分商算出処理では、部分商Ｄとして“10”が算出される。このとき、補正ループカウント値ＬＣ’は“０”となるため、除算ループ処理が終了される。除算ループ処理の終了時点の中間商Ｄ’は“0010”（１０進数で“２”）となり、正しい最終商が算出されている。
【０１０５】
このように、前処理回路１００により算出された補正ループカウント値ＬＣ’を用いることで、いずれかのｎビット部分商算出処理の終了時に補正ループカウント値ＬＣ’が０になる。また、除算ループ回路２００では、減算回路２１３〜２１５のそれぞれにおいて実質的に比較処理が行われ、その比較結果がキャリーアウトとして出力されている。前述のように、前処理回路１００では、右シフタ１３３により被除数の最上位ビットが０になるように補正されていた。このため、除算ループ回路２００における初回のｎビット部分商算出処理では、減算回路２１５からのキャリーアウトが必ず０となり、その結果、算出される部分商の上位側１ビットの値が必ず０となる。すなわち、右シフタ１３３による補正により、ループカウント値の増加に応じて中間商の上位側に余計に算出される部分商の値が必ず０になる。従って、除算ループ回路２００では、前処理回路１００に入力される被除数Ａおよび除数Ｂの値に関係なく、常に正しい除算処理を実行できる。
【０１０６】
また、このような効果は、除算ループ処理以降の処理手順や回路構成に影響を与えることなく、前処理回路１００の構成変更のみによって得られる。また、例えば、図２６に示した商修正処理９４０や、図２７に示した剰余修正処理９２２を実行する場合と比較して、前処理回路１００での処理手順は単純である。従って、回路規模、消費電力、レイテンシを抑制できる。
【０１０７】
ところで、以上の第２の実施の形態では、例としてｎ＝２とした場合について説明したが、前処理回路１００を用いた場合には、除算ループ処理でのｎの値がいかなる値であっても、正しい最終商を算出することが可能である。下記の図１４、図１５ではさらに、ｎ＝４，ｊ＝１，ｋ＝４であるとしたＲａｄｉｘ−１６除算処理を引き戻し法により実行した場合の数値例を示す。
【０１０８】
図１４は、ｎ＝４の場合の従来の除算の例を示す図である。
図１４では、従来の前処理により、ｎ＝４の除算ループ回路に入力する被除数、除数およびループカウント値を求めた場合の除算処理の例を示している。被除数Ａが“0011 0111 0001”（１０進数で“８８１”）、除数Ｂが“0000 0011 1111”（１０進数で“６３”）の場合、従来の前処理では、式（１）によりループカウント値ＬＣが“５”と求められる。そして、このループカウント値ＬＣが除算ループ回路に入力される。また、従来の前処理では、被除数Ａおよび除数Ｂは、それぞれのゼロカウント値分だけ左シフトされ、前処理後に除算ループ回路に入力される被除数Ａ’および除数Ｂ’は、それぞれ“1101 1100 0100”，“1111 1100 0000”となる。
【０１０９】
除算ループ回路での１回目のｎビット部分商算出処理では、部分商Ｄとして“0110”が算出され、ループカウント値ＬＣは４だけ減算されて“１”となる。２回目のｎビット部分商算出処理では、部分商Ｄとして“1111”が算出されるが、ループカウント値ＬＣは“−３”となる。このとき、中間商Ｄ’として“0110 1111”（１０進数で“１１１”）が求められるが、この値は正しい最終商ではない。このように、ループカウント値ＬＣがｎの倍数でないため、従来の前処理を適用した場合には正しい最終商を求めることができない。
【０１１０】
図１５は、第２の実施の形態の前処理を適用した、ｎ＝４の場合の除算の例を示す図である。
図１５において、図１４の場合と同じ被除数Ａ“0011 0111 0001”および除数Ｂ“0000 0011 1111”が本実施の形態の前処理回路１００に入力されると、まず、絶対値化処理（図８のステップＳ１１）により、被除数Ａおよび除数Ｂが絶対値化された後、ゼロ拡張処理（図８のステップＳ１２）により、絶対値化された被除数Ａおよび除数Ｂのそれぞれの上位側が３ビット分拡張される。次に、ゼロ拡張された被除数および除数を基にゼロカウント値算出処理（ステップＳ１３）が実行され、さらに補正値ＣＲが算出される（ステップＳ１４）。図１５に示すように、絶対値化処理後の被除数および除数はそれぞれ“000 0011 0111 0001”，“000 0000 0011 1111”となり、補正値ＣＲは“３”となる。
【０１１１】
絶対値化処理後の被除数および除数は、シフト処理（ステップＳ１５）が施されることによりそれぞれ“000 1101 1100 0100”，“111 1110 0000 0000”と変換され、それぞれ被除数Ａ’、除数Ｂ’として除算ループ回路に出力される。また、算出された補正値ＣＲを基に補正ループカウント値ＬＣ’が“８”と算出される（ステップＳ１６）。
【０１１２】
以上の処理により、ループカウント値ＬＣはｎの倍数に補正される。また、被除数は、左シフタ１３１により最上位ビットが１となるように左シフトされた後、右シフタ１３３により補正値ＣＲの分だけ右シフトされる。このため、除算ループ回路に入力される被除数Ａ’には、最上位側から補正値ＣＲのビット数だけ０が現れる。
【０１１３】
除算ループ回路での１回目のｎビット部分商算出処理では、部分商Ｄとして“0000”が算出され、補正ループカウント値ＬＣ’は４だけ減算されて“４”となる。２回目のｎビット部分商算出処理では、部分商Ｄとして“1101”が算出される。このとき、補正ループカウント値ＬＣ’は“０”となるため、除算ループ処理が終了される。除算ループ処理の終了時点の中間商Ｄ’は“0000 1101”（１０進数で“１３”）となり、正しい最終商が算出されている。
【０１１４】
なお、Ｒａｄｉｘ−１６除算処理は、例えば、次のような除算ループ回路によって実現可能である。例えば、図９に示した除算ループ回路２００を、ｎ＝４，ｊ＝１，ｋ＝４としたＲａｄｉｘ−１６除算処理に対応させるためには、除数Ｂ’で減算する減算回路（減算回路２１１，２１２に対応）の段数を４段に増やす。これに伴い、減算回路からのキャリーアウトに応じて減算対象を選択するセレクタ（セレクタ２２４に対応）を３個設ける。デコーダ２２６に対して４つの減算回路からのキャリーアウトを入力し、その入力の組み合わせに応じて、４ビットの部分商を出力させるとともに、１６種類のセレクト信号ＳＥＬを出力させる。中間剰余Ｃを選択するセレクタ２２５を１６入力とし、デコーダ２２６からのセレクト信号ＳＥＬに応じて選択させる。なお、４ビットの部分商算出処理を実行するたびに、補正ループカウント値ＬＣ’の値は４ずつ減算される。
【０１１５】
〔第３の実施の形態〕
図１６は、第３の実施の形態の前処理回路の構成を示す図である。なお、図１６では、図３に対応する構成要素には同じ符号を付して示している。
【０１１６】
図１６に示す前処理回路１００ａは、第２の実施の形態の除算回路２に対して、前処理回路１００に代えて適用可能な回路であり、図３に示した前処理回路１００の構成の一部を変形したものである。前処理回路１００ａは、図３に示した左シフタ１３１および右シフタ１３３の代わりに、左シフタ１３４を備えている。左シフタ１３４は、図３の左シフタ１３１および右シフタ１３３の機能を１つのシフタとして実現したものである。また、前処理回路１００ａには、左シフタ１３４でのシフト量を演算するシフト値補正回路１６０がさらに追加されている。
【０１１７】
図１７は、シフト値補正回路の内部構成例を示す図である。
シフト値補正回路１６０は、減算回路１６１を備えている。減算回路１６１は、ＬＺＣ回路１２１により算出されたゼロカウント値ＬＺＣ＿Ａから、補正値算出回路１４０により算出された補正値ＣＲを減算する。
【０１１８】
図１８は、第３の実施の形態の前処理回路による前処理手順の例を示すフローチャートである。
［ステップＳ４１］前処理回路１００ａのゼロ拡張回路１１１，１１２は、制御回路３００からのタイミング制御信号に応じて、ビット幅を拡張した被除数Ａおよび除数Ｂを内部のラッチ回路に取り込む。
【０１１９】
［ステップＳ４２］絶対値化回路１０１は、ゼロ拡張回路１１１からの出力値を絶対値化する。また、絶対値化回路１０２は、ゼロ拡張回路１１２からの出力値を絶対値化する。
【０１２０】
［ステップＳ４３］ＬＺＣ回路１２１は、絶対値化回路１０１の出力値の最上位ビットから連続する０の個数を計数し、ゼロカウント値ＬＺＣ＿Ａを出力する。また、ＬＺＣ回路１２２は、絶対値化回路１０２からの出力値の最上位ビットから連続する０の個数を計数し、ゼロカウント値ＬＺＣ＿Ｂを出力する。
【０１２１】
［ステップＳ４４］補正値算出回路１４０は、ＬＺＣ回路１２１，１２２からそれぞれ出力されたゼロカウント値ＬＺＣ＿Ａ，ＬＺＣ＿Ｂと、あらかじめ設定されたｎの値とを基に、式（２）に従って補正値ＣＲを算出する。
【０１２２】
［ステップＳ４５］シフト値補正回路１６０は、ＬＺＣ回路１２１から出力されたゼロカウント値ＬＺＣ＿Ａから、補正値算出回路１４０から出力された補正値ＣＲを減算し、左シフタ１３４でのシフト量を算出する。
【０１２３】
［ステップＳ４６］左シフタ１３４は、絶対値化回路１０１からの出力値を、シフト値補正回路１６０からの出力値の分だけ左シフトし、被除数Ａ’として除算ループ回路に出力する。一方、左シフタ１３２は、絶対値化回路１０２からの出力値を、ＬＺＣ回路１２２から出力されたゼロカウント値ＬＺＣ＿Ｂだけ左シフトし、除数Ｂ’として除算ループ回路に出力する。
【０１２４】
なお、左シフタ１３２のシフト動作は、補正値ＣＲの算出前に実行されてもよい。
［ステップＳ４７］ＬＣ算出回路１５０は、ＬＺＣ回路１２１，１２２からそれぞれ出力されたゼロカウント値ＬＺＣ＿Ａ，ＬＺＣ＿Ｂと、補正値算出回路１４０から出力された補正値ＣＲとを基に、式（３）に従って補正ループカウント値ＬＣ’を算出する。算出結果は、除算ループ回路２００に出力される。
【０１２５】
なお、ステップＳ４７の処理は、例えば、ステップＳ４４の後のいずれかのタイミングで実行されればよい。
以上の前処理回路１００ａによれば、第２の実施の形態の前処理回路１００と同様に被除数およびループカウント値が補正される。従って、前処理回路１００ａから出力された被除数Ａ’、除数Ｂ’および補正ループカウント値ＬＣ’を除算ループ回路２００に出力することで、被除数Ａおよび除数Ｂの値に関係なく、正しい最終商を得ることが可能になる。なお、第２の実施の形態と同様に、除算ループ回路２００としては、ｎ＝ｋとしてｎビット部分商算出処理を繰り返す構成の回路を適用可能である。
【０１２６】
〔第４の実施の形態〕
図１９は、第４の実施の形態の前処理回路の構成を示す図である。なお、図１９では、図３および図１６に対応する構成要素には同じ符号を付して示している。
【０１２７】
図１９に示す前処理回路１００ｂは、第２の実施の形態の除算回路２に対して、図３に示した前処理回路１００、または図１６に示した前処理回路１００ａに代えて適用可能な回路である。この前処理回路１００ｂは、絶対値化回路１０１，１０２、ゼロ拡張回路１１１，１１２、ＬＺＣ回路１２３、左シフタ１３５、補正値算出回路１４０、シフト値補正回路１６０、セレクタ１７１〜１７４およびラッチ回路１８１〜１８３を備えている。
【０１２８】
除数Ｂは、絶対値化回路１０２およびゼロ拡張回路１１２で処理された後、セレクタ１７１の一方の入力端子ｓに入力される。セレクタ１７１の他方の入力端子ｔには、左シフタ１３５からの出力値が入力される。セレクタ１７１は、制御回路３００からのセレクト信号ＳＥＬ１に応じて、入力端子ｔ，ｓからの入力値を選択的に出力する。ラッチ回路１８２は、制御回路３００からのタイミング制御信号（図示せず）に応じて、セレクタ１７１からの出力値をラッチする。
【０１２９】
被除数Ａは、絶対値化回路１０１およびゼロ拡張回路１１１で処理された後、ラッチ回路１８１に入力される。ラッチ回路１８１は、制御回路３００からのタイミング制御信号（図示せず）に応じて、絶対値化回路１０１からの出力値をラッチする。
【０１３０】
セレクタ１７２，１７３は、ともに入力端子ｕ，ｖを備え、制御回路３００からのセレクト信号ＳＥＬ２に応じて、入力端子ｕ，ｖからの入力値を選択的に出力する。ラッチ回路１８２にラッチされた値は、セレクタ１７２，１７３の一方の入力端子ｕに入力される。ラッチ回路１８１にラッチされた値は、セレクタ１７２，１７３の他方の入力端子ｖに入力される。
【０１３１】
ＬＺＣ回路１２３は、セレクタ１７３からの出力値の最上位ビットから連続する０の個数を計数し、ゼロカウント値を出力する。ＬＺＣ回路１２３は、ゼロカウント値ＬＺＣ＿Ａ，ＬＺＣ＿Ｂをそれぞれ算出する回路を、共通化したものである。セレクタ１７３において入力端子ｕが選択されたとき、ＬＺＣ回路１２３は除数のゼロカウント値ＬＺＣ＿Ｂを算出する。また、セレクタ１８３において入力端子ｖが選択されたとき、ＬＺＣ回路１２３は被除数のゼロカウント値ＬＺＣ＿Ａを算出する。
【０１３２】
ラッチ回路１８３は、制御回路３００からのタイミング制御信号（図示せず）に応じて、ＬＺＣ回路１２３から出力されたゼロカウント値ＬＺＣ＿Ｂをラッチする。
補正値算出回路１４０は、ＬＺＣ回路１２３から出力されたゼロカウント値ＬＺＣ＿Ａと、ラッチ回路１８３にラッチされたゼロカウント値ＬＺＣ＿Ｂと、あらかじめ設定されたｎの値とを基に、前述の式（２）に従って補正値ＣＲを算出する。
【０１３３】
シフト値補正回路１６０は、被除数に対する左シフト値を算出する。具体的には、シフト値補正回路１６０は、ＬＺＣ回路１２３から出力されたゼロカウント値ＬＺＣ＿Ａから、補正値算出回路１４０から出力された補正値ＣＲを減算する。
【０１３４】
セレクタ１７４の一方の入力端子ｕには、ＬＺＣ回路１２３からのゼロカウント値ＬＺＣ＿Ｂが入力される。セレクタ１７４の他方の入力端子ｖには、シフト値補正回路１６０からの出力値が入力される。セレクタ１７４は、制御回路３００からのセレクト信号ＳＥＬ２に応じて、入力端子ｕ，ｖからの入力値を選択的に出力する。
【０１３５】
左シフタ１３５は、セレクタ１７２からの出力値を、セレクタ１７４からの出力値の分だけ左シフトする。左シフタ１３５は、被除数および除数に対する左シフトを行うシフタを、共通化したものである。セレクタ１７２，１７４において入力端子ｕが選択されたとき、左シフタ１３５は、ラッチ回路１８２にラッチされた除数を、ゼロカウント値ＬＺＣ＿Ｂの分だけ左シフトする。また、セレクタ１７２，１７４において入力端子ｖが選択されたとき、左シフタ１３５は、被除数を、シフト値補正回路１６０からの出力値の分だけ左シフトする。
【０１３６】
ＬＣ算出回路１５０は、ＬＺＣ回路１２３から出力されたゼロカウント値ＬＺＣ＿Ａと、ラッチ回路１８３にラッチされたゼロカウント値ＬＺＣ＿Ｂと、補正値算出回路１４０から出力された補正値ＣＲとを基に、前述の式（３）に従って補正ループカウント値ＬＣ’を算出する。
【０１３７】
図２０は、制御回路が備える、セレクト信号を出力する回路の構成例を示す図である。
制御回路３００は、ラッチ回路３１１、加算回路３１２およびデコーダ３１３を備えている。制御回路３００は、前処理回路１００ｂおよび除算ループ回路２００に対する制御状態を、例えば状態ＳＴ０〜ＳＴ３の４段階の状態として管理する。ラッチ回路３１１は、現在の制御状態を保持し、加算回路３１２は、ラッチ回路３１１が保持する制御状態を１段階ずつ進める。デコーダ３１３は、ラッチ回路３１１に保持された制御状態に応じて、セレクト信号ＳＥＬ１，ＳＥＬ２の出力値を変化させる。
【０１３８】
図２１は、制御状態とセレクト信号との対応を示す図である。
制御状態は、状態ＳＴ０，ＳＴ１，ＳＴ２，ＳＴ３の順に遷移する。これらの制御状態のうち、状態ＳＴ０〜ＳＴ２は前処理での制御状態であり、状態ＳＴ３は除算ループ処理での制御状態である。
【０１３９】
状態ＳＴ０では、セレクト信号ＳＥＬ１により、セレクタ１７１の入力端子ｓが選択される。このとき、セレクト信号ＳＥＬ２の出力値は特に決められていない。状態ＳＴ１では、セレクト信号ＳＥＬ１により、セレクタ１７１の入力端子ｔが選択されるとともに、セレクト信号ＳＥＬ２により、セレクタ１７２〜１７４の入力端子ｕが選択される。状態ＳＴ２では、セレクト信号ＳＥＬ２により、セレクタ１７２〜１７４の入力端子ｖが選択される。このとき、セレクト信号ＳＥＬ１の出力値は特に決められていない。状態ＳＴ３では、除算ループ処理が実行されるため、セレクト信号ＳＥＬ１，ＳＥＬ２の出力値はともに特に決められていない。
【０１４０】
図２２は、第４の実施の形態の前処理回路による前処理手順を示すフローチャートである。
［ステップＳ５１］制御回路３００のラッチ回路３１１には、制御状態として状態ＳＴ０がセットされる。セレクタ１７１は、デコーダ３１３から出力されたセレクト信号ＳＥＬ１に応じて、入力端子ｓを選択する。
【０１４１】
［ステップＳ５２］絶対値化回路１０１は、入力された被除数Ａを絶対値化する。また、絶対値化回路１０２は、入力された除数Ｂを絶対値化する。
［ステップＳ５３］ゼロ拡張回路１１１は、制御回路３００からのタイミング制御信号に応じて、絶対値化回路１０１により絶対値化された被除数Ａを内部のラッチ回路に取り込む。また、ゼロ拡張回路１１２は、制御回路３００からのタイミング制御信号に応じて、絶対値化回路１０２により絶対値化された除数Ｂを内部のラッチ回路に取り込む。
【０１４２】
［ステップＳ５４］ラッチ回路１８１は、制御回路３００からのタイミング制御信号に応じて、ゼロ拡張回路１１１から出力された被除数をラッチする。また、ラッチ回路１８２は、制御回路３００からのタイミング制御信号に応じて、ゼロ拡張回路１１２からセレクタ１７１を通じて入力された除数をラッチする。
【０１４３】
［ステップＳ５５］制御回路３００のラッチ回路３１１に、制御状態として状態ＳＴ１がセットされる。セレクタ１７１は、デコーダ３１３から出力されたセレクト信号ＳＥＬ１に応じて、入力端子ｔを選択する。また、セレクタ１７２〜１７４は、デコーダ３１３から出力されたセレクト信号ＳＥＬ２に応じて、入力端子ｕを選択する。
【０１４４】
［ステップＳ５６］ＬＺＣ回路１２３は、ラッチ回路１８２からセレクタ１７３を通じて入力された除数を基に、ゼロカウント値ＬＺＣ＿Ｂを算出する。
［ステップＳ５７］左シフタ１３５は、ラッチ回路１８２からセレクタ１７２を通じて入力された除数を、ＬＺＣ回路１２３からセレクタ１７４を通じて入力されたゼロカウント値ＬＺＣ＿Ｂの分だけ左シフトする。
【０１４５】
［ステップＳ５８］ラッチ回路１８２は、制御回路３００からのタイミング制御信号に応じて、左シフタ１３５からセレクタ１７１を通じて入力された除数をラッチする。また、ラッチ回路１８３は、制御回路３００からのタイミング制御信号に応じて、ＬＺＣ回路１２３によって算出されたゼロカウント値ＬＺＣ＿Ｂをラッチする。
【０１４６】
［ステップＳ５９］制御回路３００のラッチ回路３１１に、制御状態として状態ＳＴ２がセットされる。セレクタ１７２，１７３，１７４は、デコーダ３１３から出力されたセレクト信号ＳＥＬ２に応じて、入力端子ｖを選択する。
【０１４７】
［ステップＳ６０］ＬＺＣ回路１２３は、ラッチ回路１８１からセレクタ１７３を通じて入力された被除数を基に、ゼロカウント値ＬＺＣ＿Ａを算出する。
［ステップＳ６１］補正値算出回路１４０は、ＬＺＣ回路１２３により算出されたゼロカウント値ＬＺＣ＿Ａと、ラッチ回路１８３にラッチされたゼロカウント値ＬＺＣ＿Ｂと、ｎの値とを基に、補正値ＣＲを算出する。
【０１４８】
［ステップＳ６２］シフト値補正回路１６０は、ＬＺＣ回路１２３により算出されたゼロカウント値ＬＺＣ＿Ａから、補正値算出回路１４０により算出された補正値ＣＲを減算し、被除数のシフト量を算出する。
【０１４９】
［ステップＳ６３］左シフタ１３５は、ラッチ回路１８１からセレクタ１７２を通じて入力された被除数を、シフト値補正回路１６０からセレクタ１７４を通じて入力されたシフト量の分だけ左シフトする。また、ＬＣ算出回路１５０は、ＬＺＣ回路１２３により算出されたゼロカウント値ＬＺＣ＿Ａと、ラッチ回路１８３にラッチされたゼロカウント値ＬＺＣ＿Ｂと、補正値算出回路１４０により算出された補正値ＣＲとを基に、補正ループカウント値ＬＣ’を算出する。
【０１５０】
ステップＳ６３の処理が終了した時点で、左シフタ１３５からの出力値が被除数Ａ’として、ラッチ回路１８２からの出力値が除数Ｂ’として、それぞれ除算ループ回路２００に出力される。また、ＬＣ算出回路１５０からの補正ループカウント値ＬＣ’も、除算ループ回路２００に出力される。この後、例えば、除算ループ回路２００において被除数Ａ’、除数Ｂ’および補正ループカウント値ＬＣ’がラッチされると、制御回路３００のラッチ回路３１１に制御状態として状態ＳＴ３がセットされ、除算ループ処理が開始される。
【０１５１】
以上の前処理回路１００ｂによれば、例えば、第２の実施の形態の前処理回路１００と同様に被除数およびループカウント値が補正される。従って、前処理回路１００ｂから出力された被除数Ａ’、除数Ｂ’および補正ループカウント値ＬＣ’を除算ループ回路２００に出力することで、被除数Ａおよび除数Ｂの値に関係なく、正しい最終商を得ることが可能になる。なお、第２，第３の実施の形態と同様に、除算ループ回路２００としては、ｎ＝ｋとしてｎビット部分商算出処理を繰り返す構成の回路を適用可能である。
【０１５２】
〔第５の実施の形態〕
上記の第１の実施の形態の演算処理装置１や、第２〜第４の実施の形態の除算回路２が有する機能やその処理内容は、コンピュータなどの情報処理装置において、これらの機能の処理内容を記述したプログラムが実行されることにより実現することも可能である。以下の第５の実施の形態では、情報処理装置の例としてコンピュータを挙げるとともに、そのコンピュータでの処理手順の一例を示す。
【０１５３】
図２３は、コンピュータのハードウェア構成例を示す図である。
図２３に示すコンピュータ４００は、ＣＰＵ４０１、ＲＡＭ（Random Access Memory）４０２、ＨＤＤ（Hard Disk Drive）４０３、グラフィック処理部４０４、入力インタフェース（Ｉ／Ｆ）４０５、書き込み／読み取り部４０６および通信インタフェース（Ｉ／Ｆ）４０７を備えており、これらの各部はバス４０８によって相互に接続されている。
【０１５４】
ＣＰＵ４０１は、ＨＤＤ４０３などの記憶媒体に記憶された各種プログラムを実行することにより、このコンピュータ全体を統括的に制御する。ＲＡＭ４０２は、ＣＰＵ４０１に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。ＨＤＤ４０３は、ＣＰＵ４０１により実行されるプログラムやその実行に必要な各種のデータなどを記憶する。
【０１５５】
グラフィック処理部４０４には、例えば、モニタ４０４ａが接続されている。このグラフィック処理部４０４は、ＣＰＵ４０１からの命令に従って、モニタ４０４ａの画面上に画像を表示させる。入力インタフェース４０５には、例えば、キーボード４０５ａやマウス４０５ｂが接続されている。入力インタフェース４０５は、キーボード４０５ａやマウス４０５ｂからの信号を、バス４０８を介してＣＰＵ４０１に送信する。
【０１５６】
書き込み／読み取り部４０６は、ＣＰＵ４０１からバス４０８を介して受け取ったデータを、可搬型記憶媒体４１０に書き込む。また、可搬型記憶媒体４１０からデータを読み取り、バス４０８を介してＣＰＵ４０１に送信する。なお、可搬型記憶媒体４１０としては、例えば、光ディスク、フレキシブルディスク、ＵＳＢ（Universal Serial Bus）インタフェースなどを介して接続される半導体メモリなどを適用可能である。
【０１５７】
通信インタフェース４０７は、ネットワークを介して外部装置との間でデータの送受信を行う。
図２４は、コンピュータにおける前処理手順の例を示すフローチャートである。この図２４の処理は、例えば、ＨＤＤ４０３などに記憶された所定のプログラムを、ＣＰＵ４０１が実行することにより実現される。なお、図２４中の変数Ｒｅｇ１〜Ｒｅｇ７は、例えば、ＲＡＭ４０２やＨＤＤ４０３などに設けられた個別の記憶領域に格納される。
【０１５８】
［ステップＳ１０１］ＣＰＵ４０１は、変数Ｒｅｇ１に被除数Ａを、変数Ｒｅｇ２に除数Ｂをそれぞれ代入する。
［ステップＳ１０２］ＣＰＵ４０１は、変数Ｒｅｇ１を絶対値化し、変数Ｒｅｇ１に書き戻す。さらに、ＣＰＵ４０１は、変数Ｒｅｇ１の上位ビットを（ｎ−１）ビット拡張し、拡張したビットに０を代入して、変数Ｒｅｇ１に書き戻す。また、ＣＰＵ４０１は、変数Ｒｅｇ２を絶対値化し、変数Ｒｅｇ２に書き戻す。さらに、ＣＰＵ４０１は、変数Ｒｅｇ２の上位ビットを（ｎ−１）ビット拡張し、拡張したビットに０を代入して、変数Ｒｅｇ２に書き戻す。
【０１５９】
［ステップＳ１０３］ＣＰＵ４０１は、（Ｒｅｇ１＋Ｒｅｇ１）の演算を行い、演算結果を変数Ｒｅｇ７に代入する。なお、この演算では、例えば、変数Ｒｅｇ１に２を乗算する演算、あるいは、変数Ｒｅｇ１を１ビット左シフトする処理が行われてもよい。
【０１６０】
［ステップＳ１０４］ＣＰＵ４０１は、ステップＳ１０３での演算でオーバフローが発生したか否かを判定する。オーバフローが発生していない場合には、ステップＳ１０５の処理が実行される。オーバフローが発生した場合には、ステップＳ１０６の処理が実行される。
【０１６１】
［ステップＳ１０５］ＣＰＵ４０１は、変数Ｒｅｇ３の値を１増加させ、変数Ｒｅｇ３に書き戻す。また、変数Ｒｅｇ１を１ビット左シフトし、変数Ｒｅｇ１に書き戻す。その後、ステップＳ１０３の演算が再度実行される。
【０１６２】
ステップＳ１０４においてオーバフローが発生したと判定されたとき、変数Ｒｅｇ３は被除数のゼロカウント値ＬＺＣ＿Ａを示し、変数Ｒｅｇ１は、ステップＳ１０２の実行後の変数Ｒｅｇ１をゼロカウント値ＬＺＣ＿Ａだけ左シフトした値となっている。
【０１６３】
［ステップＳ１０６］ＣＰＵ４０１は、“Ｒｅｇ２＋Ｒｅｇ２”の演算を行い、演算結果を変数Ｒｅｇ７に代入する。なお、この演算では、例えば、変数Ｒｅｇ２に２を乗算する演算、あるいは、変数Ｒｅｇ２を１ビット左シフトする処理が行われてもよい。
【０１６４】
［ステップＳ１０７］ＣＰＵ４０１は、ステップＳ１０６での演算でオーバフローが発生したか否かを判定する。オーバフローが発生していない場合には、ステップＳ１０８の処理が実行される。オーバフローが発生した場合には、ステップＳ１０９の処理が実行される。
【０１６５】
［ステップＳ１０８］ＣＰＵ４０１は、変数Ｒｅｇ４の値を１増加させ、変数Ｒｅｇ４に書き戻す。また、変数Ｒｅｇ２を１ビット左シフトし、変数Ｒｅｇ２に書き戻す。その後、ステップＳ１０６の演算が再度実行される。
【０１６６】
ステップＳ１０７においてオーバフローが発生したと判定されたとき、変数Ｒｅｇ４は除数のゼロカウント値ＬＺＣ＿Ｂを示し、変数Ｒｅｇ２は、ステップＳ１０２の実行後の変数Ｒｅｇ２をゼロカウント値ＬＺＣ＿Ｂだけ左シフトした値となっている。
【０１６７】
なお、ステップＳ１０３〜Ｓ１０５の処理は、ステップＳ１０６〜Ｓ１０８の処理後に実行されてもよい。
［ステップＳ１０９］ＣＰＵ４０１は、“ｎ−（Ｒｅｇ４−Ｒｅｇ３）％ｎ−１”の演算を実行して補正値ＣＲを算出し、算出結果を変数Ｒｅｇ５に代入する。
【０１６８】
［ステップＳ１１０］ＣＰＵ４０１は、変数Ｒｅｇ１を、変数Ｒｅｇ５だけ右シフトする。
［ステップＳ１１１］ＣＰＵ４０１は、“（Ｒｅｇ４−Ｒｅｇ３）＋Ｒｅｇ５＋１”の演算を実行して補正ループカウント値ＬＣ’を算出し、算出結果を変数Ｒｅｇ６に代入する。
【０１６９】
なお、ステップＳ１１０，Ｓ１１１の処理順は逆であってもよい。
以上の処理が終了すると、変数Ｒｅｇ１が被除数Ａ’として、変数Ｒｅｇ２が除数Ｂ’として、変数Ｒｅｇ６が補正ループカウント値ＬＣ’として出力され、これらの値を基に除算ループ処理が実行される。
【０１７０】
上記の前処理手順によれば、例えば、第２の実施の形態の前処理回路１００と同様に被除数およびループカウント値が補正される。従って、前処理によって算出された被除数Ａ’、除数Ｂ’および補正ループカウント値ＬＣ’を基に除算ループ処理を実行することで、被除数Ａおよび除数Ｂの値に関係なく、正しい最終商を得ることが可能になる。なお、除算ループ処理としては、ｎ＝ｋとしてｎビット部分商算出処理を繰り返す、引き戻し法、引き放し法、ＳＲＴ法などを用いた除算手順を適用することが可能である。
【０１７１】
なお、以上説明した各実施の形態の装置が有する機能は、コンピュータによって実現することができる。その場合には、上記機能の処理内容を記述したプログラムが提供される。そして、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。
【０１７２】
プログラムを流通させる場合には、例えば、そのプログラムが記録された光ディスクなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、そのプログラムを、サーバコンピュータからネットワークを介して他のコンピュータに転送することもできる。
【０１７３】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、そのプログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１７４】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  ｎビット幅（ｎは１以上の整数）の部分商を繰り返し算出することにより、被除数を除数で除算する除算処理を実行する演算処理装置において、
前記被除数の絶対値の最上位桁からの０の個数である被除数ゼロカウント値を計数する被除数ゼロカウント値計数部と、
前記除数の絶対値の最上位桁からの０の個数である除数ゼロカウント値を計数する除数ゼロカウント値計数部と、
前記被除数ゼロカウント値と前記除数ゼロカウント値と前記ｎの値とに基づいて、ループカウント値の補正値を算出する補正値算出部と、
前記被除数ゼロカウント値と前記除数ゼロカウント値と前記補正値とに基づいて、補正ループカウント値を算出する補正ループカウント値算出部と、
前記被除数の絶対値を、前記被除数ゼロカウント値と前記補正値とに基づく桁数だけシフトする被除数シフト部と、
前記除数の絶対値を、前記除数ゼロカウント値に基づいてシフトする除数シフト部と、
前記被除数シフト部からの出力値と前記除数シフト部からの出力値と前記補正ループカウント値とに基づいて、除算演算を実行する除算ループ処理部と、
を有することを特徴とする演算処理装置。
【０１７５】
（付記２）  前記補正値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値を前記ｎの値で除算した剰余を、前記ｎの値から減算し、その減算値からさらに１を減算した値を、前記補正値とすることを特徴とする付記１記載の演算処理装置。
【０１７６】
（付記３）  前記補正ループカウント値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値に１を加算することで求められる前記ループカウント値に対して、さらに前記補正値を加算した値を、前記補正ループカウント値とすることを特徴とする付記１または２記載の演算処理装置。
【０１７７】
（付記４）  前記被除数ゼロカウント値計数部と前記除数ゼロカウント値計数部は、入力された値の最上位桁からの０の個数を計数する共通のゼロカウント値計数部として設けられ、
さらに、
前記被除数の絶対値と前記除数の絶対値のいずれか一方を前記ゼロカウント値計数部に対して選択的に入力する計数対象選択部と、
前記計数対象選択部の選択動作を制御する制御部と、
を有することを特徴とする付記１〜３のいずれか１つに記載の演算処理装置。
【０１７８】
（付記５）  前記被除数シフト部と前記除数シフト部は、入力された値をシフトする共通のシフト部として設けられ、
さらに、
前記ゼロカウント値計数部により算出された前記被除数ゼロカウント値から前記補正値を減算する減算部と、
前記ゼロカウント値計数部からの出力値と前記減算部からの出力値のいずれか一方を、前記シフト部でのシフト量として前記シフト部に対して選択的に入力するシフト量選択部と、
前記被除数の絶対値と前記除数の絶対値のいずれか一方を、前記シフト部でのシフト対象として前記シフト部に選択的に入力するシフト対象選択部と、
を有し、
前記制御部は、前記計数対象選択部、前記シフト量選択部および前記シフト対象選択部の選択動作を同期制御することを特徴とする付記４記載の演算処理装置。
【０１７９】
（付記６）  前記制御部は、
前記計数対象選択部、前記シフト量選択部および前記シフト対象選択部に、前記除数の絶対値、前記ゼロカウント値計数部からの出力値および前記除数の絶対値をそれぞれ選択させて、前記ゼロカウント値計数部に前記除数ゼロカウント値を算出させ、前記シフト部に前記除数の絶対値をシフトさせ、
次に、前記計数対象選択部、前記シフト量選択部および前記シフト対象選択部に、前記被除数の絶対値、前記減算部からの出力値および前記被除数の絶対値をそれぞれ選択させて、前記ゼロカウント値計数部に前記被除数ゼロカウント値を算出させ、前記シフト部に前記被除数の絶対値をシフトさせる、
ことを特徴とする付記５記載の演算処理装置。
【０１８０】
（付記７）  前記除算ループ処理部は、前記被除数シフト部からの出力値と前記除数シフト部からの出力値とを基に、前記ｎビット幅の部分商を算出する部分商算出処理を繰り返し実行するとともに、前記部分商算出処理を実行するたびに前記補正ループカウント値を前記ｎずつ減算し、前記補正ループカウント値が０になるまで前記部分商算出処理を繰り返し実行することを特徴とする付記１〜６のいずれか１つに記載の演算処理装置。
【０１８１】
（付記８）  前記除算ループ処理部は、前記部分商算出処理において、前記除数シフト部からの出力値を用いた比較処理を直列にｎ回実行することを特徴とする付記７記載の演算処理装置。
【０１８２】
（付記９）  前記被除数の絶対値および前記除数の絶対値をそれぞれ上位側に（ｎ−１）桁だけ拡張し、拡張した桁に０を設定する被除数拡張部および除数拡張部をさらに有し、
前記被除数ゼロカウント値計数部および前記除数ゼロカウント値計数部は、前記被除数拡張部からの出力値および前記除数拡張部からの出力値を基にそれぞれ前記被除数ゼロカウント値および前記除数ゼロカウント値を計数し、
前記被除数シフト部および前記除数シフト部は、前記被除数拡張部からの出力値および前記除数拡張部からの出力値をそれぞれシフトする、
ことを特徴とする付記１〜８のいずれか１つに記載の演算処理装置。
【０１８３】
（付記１０）  前記被除数ゼロカウント値から前記補正値を減算する減算部をさらに有し、
前記被除数シフト部は、前記被除数の絶対値を、前記減算部による減算結果の値だけ左シフトすることを特徴とする付記１〜３，７，８のいずれか１つに記載の演算処理装置。
【０１８４】
（付記１１）  前記被除数シフト部は、
前記被除数の絶対値を、前記被除数ゼロカウント値だけ左シフトする左シフト部と、
前記左シフト部からの出力値を、前記補正値だけ右シフトする右シフト部と、
を有することを特徴とする付記１〜３，７，８のいずれか１つに記載の演算処理装置。
【０１８５】
（付記１２）  ｎビット幅（ｎは１以上の整数）の部分商を繰り返し算出することにより、被除数を除数で除算する除算処理を実行する演算処理装置の制御方法において、
前記演算処理装置が有する被除数ゼロカウント値計数部が、前記被除数の絶対値の最上位桁からの０の個数である被除数ゼロカウント値を計数し、
前記演算処理装置が有する除数ゼロカウント値計数部が、前記除数の絶対値の最上位桁からの０の個数である除数ゼロカウント値を計数し、
前記演算処理装置が有する補正値算出部が、前記被除数ゼロカウント値と前記除数ゼロカウント値と前記ｎの値とに基づいて、ループカウント値の補正値を算出し、
前記演算処理装置が有する補正ループカウント値算出部が、前記被除数ゼロカウント値と前記除数ゼロカウント値と前記補正値とに基づいて、補正ループカウント値を算出し、
前記演算処理装置が有する被除数シフト部が、前記被除数の絶対値を、前記被除数ゼロカウント値と前記補正値とに基づく桁数だけシフトし、
前記演算処理装置が有する除数シフト部が、前記除数の絶対値を、前記除数ゼロカウント値に基づいてシフトし、
前記演算処理装置が有する除算ループ処理部が、前記被除数シフト部からの出力値と前記除数シフト部からの出力値と前記補正ループカウント値とに基づいて、除算演算を実行する、
ことを特徴とする演算処理装置の制御方法。
【０１８６】
（付記１３）  前記補正値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値を前記ｎの値で除算した剰余を、前記ｎの値から減算し、その減算値からさらに１を減算した値を、前記補正値とすることを特徴とする付記１２記載の演算処理装置の制御方法。
【０１８７】
（付記１４）  前記補正ループカウント値算出部は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値に１を加算することで求められる前記ループカウント値に対して、さらに前記補正値を加算した値を、前記補正ループカウント値とすることを特徴とする付記１２または１３記載の演算処理装置の制御方法。
【０１８８】
（付記１５）  ｎビット幅（ｎは１以上の整数）の部分商を繰り返し算出することにより、被除数を除数で除算する除算処理を実行する演算処理プログラムにおいて、
前記演算処理プログラムを実行する演算処理装置を、
前記被除数の絶対値の最上位桁からの０の個数である被除数ゼロカウント値を計数する被除数ゼロカウント値計数手段、
前記除数の絶対値の最上位桁からの０の個数である除数ゼロカウント値を計数する除数ゼロカウント値手段、
前記被除数ゼロカウント値と前記除数ゼロカウント値と前記ｎの値とに基づいて、ループカウント値の補正値を算出する補正値算出手段、
前記被除数ゼロカウント値と前記除数ゼロカウント値と前記補正値とに基づいて、補正ループカウント値を算出する補正ループカウント値算出手段、
前記被除数の絶対値を、前記被除数ゼロカウント値と前記補正値とに基づく桁数だけシフトする被除数シフト手段、
前記除数の絶対値を、前記除数ゼロカウント値に基づいてシフトする除数シフト部と、
前記被除数シフト部からの出力値と前記除数シフト部からの出力値と前記補正ループカウント値とに基づいて、除算演算を実行する除算ループ処理手段、
として機能させることを特徴とする演算処理プログラム。
【０１８９】
（付記１６）  前記補正値算出手段は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値を前記ｎの値で除算した剰余を、前記ｎの値から減算し、その減算値からさらに１を減算した値を、前記補正値とすることを特徴とする付記１５記載の演算処理プログラム。
【０１９０】
（付記１７）  前記補正ループカウント値算出手段は、前記除数ゼロカウント値から前記被除数ゼロカウント値を減算した値に１を加算することで求められる前記ループカウント値に対して、さらに前記補正値を加算した値を、前記補正ループカウント値とすることを特徴とする付記１５または１６記載の演算処理プログラム。
【符号の説明】
【０１９１】
１  演算処理装置
１０  前処理部
１１，１２  絶対値化処理部
１３  被除数ゼロカウント値計数部
１４  除数ゼロカウント値計数部
１５  補正値算出部
１６  補正ループカウント値算出部
１７  被除数シフト部
１８  除数シフト部
２０  除算ループ処理部
【図１】
0005397061.tif 000002
【図２】
0005397061.tif 000003
【図３】
0005397061.tif 000004
【図４】
0005397061.tif 000005
【図５】
0005397061.tif 000006
【図６】
0005397061.tif 000007
【図７】
0005397061.tif 000008
【図８】
0005397061.tif 000009
【図９】
0005397061.tif 000010
【図１０】
0005397061.tif 000011
【図１１】
0005397061.tif 000012
【図１２】
0005397061.tif 000013
【図１３】
0005397061.tif 000014
【図１４】
0005397061.tif 000015
【図１５】
0005397061.tif 000016
【図１６】
0005397061.tif 000017
【図１７】
0005397061.tif 000018
【図１８】
0005397061.tif 000019
【図１９】
0005397061.tif 000020
【図２０】
0005397061.tif 000021
【図２１】
0005397061.tif 000022
【図２２】
0005397061.tif 000023
【図２３】
0005397061.tif 000024
【図２４】
0005397061.tif 000025
【図２５】
0005397061.tif 000026
【図２６】
0005397061.tif 000027
【図２７】
0005397061.tif 000028