(57)【要約】【課題】単純な回路構成で高速な非回復法除算を実行する。【解決手段】  ｍビットの被除数Ｚとｎビットの除数Ｄを被除数レジスタ２０および除数レジスタ３０に入力し、符号拡張部２５により被除数Ｚの先頭の符号ビットをαビットだけ拡張して拡張被除数Ｚ′を生成し、正規化処理部３５により除数Ｚをβビットシフトして正規化除数Ｄ′を生成する。演算処理部４０により、拡張被除数Ｚ′からｎビットの部分被除数Ｚｉを抽出し、正規化除数Ｄ′との間で、減算処理、加算処理、もしくは無演算処理のいずれかの演算処理を実行し、実行した演算処理の種別を示すデータを部分商Ｑｉとして商レジスタ６０に格納し、得られた部分剰余Ｒｉを拡張被除数Ｚ′に書き戻す処理を、抽出位置を１ビットずつ繰り下げながらＫ回（＝１＋（ｍ−ｎ）＋α＋β）だけ繰り返し、得られた部分商と部分剰余を補正処理部７０で補正して商Ｑおよび剰余Ｒを求める。【選択図】図２６
2015018329.tif 000002
【特許請求の範囲】
【請求項１】
被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算回路であって、
ｍビットからなる符号付きビット列のデータとして被除数Ｚを入力するとともに、ｎビットからなる符号付きビット列のデータとして除数Ｄを入力するデータ入力部と、
所定数α（但し、ｎ−１≧α≧１）に基づいて、前記被除数Ｚに対して、先頭の符号ビットと同じビットをα個だけ先頭部分に付加し、（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する符号拡張処理を行う符号拡張部と、
前記拡張被除数Ｚ′を格納する被除数レジスタと、
前記除数Ｄに対して、先頭ビットと第２番目のビットとが異なる値になるまで、全ビットを上位側に１ビットだけずらし末尾にビット「０」を付加するシフト動作を繰り返す正規化処理を実行し、ｎビットからなる正規化除数Ｄ′を生成する正規化処理部と、
前記正規化除数Ｄ′を格納する除数レジスタと、
商を格納するための商レジスタと、
前記所定数αと、前記正規化処理において実行されたシフト動作の回数βと、に基づいて、演算回数ＫをＫ＝１＋（ｍ−ｎ）＋α＋βなる式で求める演算回数決定部と、
前記被除数レジスタに格納されているデータの所定の抽出位置を先頭としてｎビット分を部分被除数として抽出し、抽出した部分被除数に対して前記除数レジスタに格納されているｎビットの正規化除数Ｄ′を減じる減算処理、抽出した部分被除数に対して前記除数レジスタに格納されているｎビットの正規化除数Ｄ′を加える加算処理、抽出した部分被除数に何ら演算を施さない無演算処理、のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余とし、実行した演算処理の種別を示すデータを前記商レジスタの対応桁に格納する一巡プロセスを、前記演算回数Ｋに応じて第１回目〜第Ｋ回目まで繰り返し行い、このとき第１回目の抽出位置は拡張被除数Ｚ′の先頭とし、第２回目以降の抽出位置は前回の抽出位置から１ビットだけ下位側にずれた位置となるようにし、かつ、少なくとも第１回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理が行われたときに、前記部分剰余を前記被除数レジスタの所定位置に書き戻すレジスタ更新処理を実行する演算処理部と、
前記演算処理部が第Ｋ回目の一巡プロセスを完了した後、前記商レジスタ内に格納されているデータに基づいて商Ｑを決定し、第Ｋ回目の一巡プロセスで得られた部分剰余に基づいて剰余Ｒを決定し、決定した商Ｑおよび剰余Ｒを出力する補正処理部と、
を備えることを特徴とする除算回路。
【請求項２】
請求項１に記載の除算回路において、
演算処理部が、一巡プロセスを行う際に、
第１回目の一巡プロセスでは、被除数レジスタに格納されているデータの先頭のｎビットを部分被除数として抽出し、加算処理もしくは減算処理で得られた部分剰余を前記被除数レジスタの先頭からｎビットの部分に格納し、
第２回目以降の一巡プロセスでは、被除数レジスタに格納されているデータの第２ビット目〜第（ｎ＋１）ビット目を部分被除数として抽出し、かつ、少なくとも第２回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理で得られた部分剰余を前記被除数レジスタの第２ビット目〜第（ｎ＋１）ビット目の部分に格納し、前記被除数レジスタ内のデータを１ビット分上位側にシフトさせるレジスタ更新処理を実行することを特徴とする除算回路。
【請求項３】
請求項２に記載の除算回路において、
演算処理部が、
第ｉ回目（１≦ｉ≦Ｋ）の一巡プロセスにおいて加算処理もしくは減算処理が必要か否かを判定し、否定的判定が行われた場合には抽出したｎビットの部分被除数をそのまま部分剰余とする無演算処理を実行する加減算要否判定部と、
被除数レジスタに格納されているデータの先頭ビットと、除数レジスタに格納されているデータの先頭ビットとを比較する符号比較部と、
前記加減算要否判定部が肯定的判定を行ったときに、前記符号比較部による比較結果が同符号の場合には抽出したｎビットの部分被除数からｎビットの正規化除数Ｄ′を減じる減算処理を実行し、異符号の場合には抽出したｎビットの部分被除数にｎビットの正規化除数Ｄ′を加える加算処理を実行し、ｎビットからなる部分剰余を得る加減算部と、
減算処理が実行された場合には正の部分商を示すデータを、加算処理が実行された場合には負の部分商を示すデータを、無演算処理が実行された場合には零の部分商を示すデータを、商レジスタの対応桁に格納する部分商格納部と、
第１回目の一巡プロセスでは、加算処理もしくは減算処理で得られた部分剰余を前記被除数レジスタの先頭からｎビットの部分に格納し、第２回目以降の一巡プロセスでは、加算処理もしくは減算処理で得られた部分剰余を前記被除数レジスタの第２ビット目〜第（ｎ＋１）ビット目の部分に格納する書込処理と、第２回目以降の一巡プロセスにおいて、前記被除数レジスタ内のデータを１ビット分上位側にシフトさせるシフト処理と、を実行するレジスタ更新部と、
を有することを特徴とする除算回路。
【請求項４】
請求項１に記載の除算回路において、
演算処理部が、一巡プロセスを行う際に、
第１回目の一巡プロセスでは、被除数レジスタに格納されているデータの先頭のｎビットを部分被除数として抽出し、加算処理もしくは減算処理で得られた部分剰余を前記被除数レジスタの先頭からｎビットの部分に格納し、
第２回目以降の一巡プロセスでは、被除数レジスタに格納されているデータの第２ビット目〜第（ｎ＋１）ビット目を部分被除数として抽出し、かつ、少なくとも第２回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理が行われたときに、得られた部分剰余を前記被除数レジスタの先頭からｎビットの部分に格納し、前記被除数レジスタの先頭から（ｎ＋１）番目以降のビット位置として設定されたシフト区間内についてのみ、データを１ビット分上位側にシフトさせるレジスタ更新処理を実行することを特徴とする除算回路。
【請求項５】
請求項４に記載の除算回路において、
演算処理部が、
第ｉ回目（１≦ｉ≦Ｋ）の一巡プロセスにおいて加算処理もしくは減算処理が必要か否かを判定し、否定的判定が行われた場合には抽出したｎビットの部分被除数をそのまま部分剰余とする無演算処理を実行する加減算要否判定部と、
被除数レジスタに格納されているデータの先頭ビットと、除数レジスタに格納されているデータの先頭ビットとを比較する符号比較部と、
前記加減算要否判定部が肯定的判定を行ったときに、前記符号比較部による比較結果が同符号の場合には抽出したｎビットの部分被除数からｎビットの正規化除数Ｄ′を減じる減算処理を実行し、異符号の場合には抽出したｎビットの部分被除数にｎビットの正規化除数Ｄ′を加える加算処理を実行し、ｎビットからなる部分剰余を得る加減算部と、
減算処理が実行された場合には正の部分商を示すデータを、加算処理が実行された場合には負の部分商を示すデータを、無演算処理が実行された場合には零の部分商を示すデータを、商レジスタの対応桁に格納する部分商格納部と、
第１回目の一巡プロセスでは、加算処理もしくは減算処理で得られた部分剰余を前記被除数レジスタの先頭からｎビットの部分に格納し、第２回目以降の一巡プロセスでは、少なくとも第２回目〜第（Ｋ−１）回目の各一巡プロセスにおいて、加算処理もしくは減算処理が行われたときに、得られた部分剰余を前記被除数レジスタの先頭からｎビットの部分に格納する書込処理と、前記被除数レジスタの先頭から（ｎ＋１）番目以降のビット位置として設定されたシフト区間内についてのみ、データを１ビット分上位側にシフトさせるシフト処理と、を実行するレジスタ更新部と、
を有することを特徴とする除算回路。
【請求項６】
請求項３または５に記載の除算回路において、
加減算要否判定部が、部分被除数が零の場合には否定的判定を行い、部分被除数が零でない場合には肯定的判定を行うことを特徴とする除算回路。
【請求項７】
請求項３または５に記載の除算回路において、
加減算要否判定部が、第１回目の一巡プロセスに関しては、部分被除数を構成するｎビットのうち、先頭の３ビットが「０００」もしくは「１１１」なる固有のビットパターンをとる場合に否定的判定を行い、第ｉ回目（但し、ｉ≧２）の一巡プロセスに関しては、第（ｉ−１）回目の部分剰余を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定を行い、それ以外の場合には肯定的判定を行うことを特徴とする除算回路。
【請求項８】
請求項１〜７のいずれかに記載の除算回路において、
符号拡張部が、所定数αをα＝１に設定することを特徴とする除算回路。
【請求項９】
被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算回路であって、
ｍビットからなる符号付きビット列のデータとして被除数Ｚを入力するとともに、ｎビットからなる符号付きビット列のデータとして除数Ｄを入力するデータ入力部と、
所定数α（但し、ｎ−１≧α≧２）に基づいて、前記被除数Ｚに対して、先頭の符号ビットと同じビットをα個だけ先頭部分に付加し、（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する符号拡張処理を行う符号拡張部と、
前記拡張被除数Ｚ′を格納する被除数レジスタと、
前記除数Ｄに対して、先頭ビットと第２番目のビットとが異なる値になるまで、全ビットを上位側に１ビットだけずらし末尾にビット「０」を付加するシフト動作を繰り返す正規化処理を実行し、ｎビットからなる正規化除数Ｄ′を生成する正規化処理部と、
前記正規化除数Ｄ′を格納する除数レジスタと、
商を格納するための商レジスタと、
前記所定数αと、前記正規化処理において実行されたシフト動作の回数βと、に基づいて、演算回数ＫをＫ＝（ｍ−ｎ）＋α＋βなる式で求める演算回数決定部と、
前記被除数レジスタに格納されているデータの所定の抽出位置を先頭としてｎビット分を部分被除数として抽出し、抽出した部分被除数に対して前記除数レジスタに格納されているｎビットの正規化除数Ｄ′を減じる減算処理、抽出した部分被除数に対して前記除数レジスタに格納されているｎビットの正規化除数Ｄ′を加える加算処理、抽出した部分被除数に何ら演算を施さない無演算処理、のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余とし、実行した演算処理の種別を示すデータを前記商レジスタの対応桁に格納する一巡プロセスを、前記演算回数Ｋに応じて第１回目〜第Ｋ回目まで繰り返し行い、このとき第１回目の抽出位置は拡張被除数Ｚ′の先頭から２ビット目とし、第２回目以降の抽出位置は前回の抽出位置から１ビットだけ下位側にずれた位置となるようにし、かつ、少なくとも第１回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理が行われたときに、前記部分剰余を前記被除数レジスタの所定位置に書き戻すレジスタ更新処理を実行する演算処理部と、
前記演算処理部が第Ｋ回目の一巡プロセスを完了した後、前記商レジスタ内に格納されているデータに基づいて商Ｑを決定し、第Ｋ回目の一巡プロセスで得られた部分剰余に基づいて剰余Ｒを決定し、決定した商Ｑおよび剰余Ｒを出力する補正処理部と、
を備えることを特徴とする除算回路。
【請求項１０】
請求項９に記載の除算回路において、
演算処理部が、一巡プロセスを行う際に、常に、被除数レジスタに格納されているデータの第２ビット目〜第（ｎ＋１）ビット目を部分被除数として抽出し、少なくとも第１回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理で得られた部分剰余を前記被除数レジスタの第２ビット目〜第（ｎ＋１）ビット目の部分に格納し、前記被除数レジスタ内のデータを１ビット分上位側にシフトさせるレジスタ更新処理を実行することを特徴とする除算回路。
【請求項１１】
請求項１０に記載の除算回路において、
演算処理部が、
第ｉ回目（１≦ｉ≦Ｋ）の一巡プロセスにおいて加算処理もしくは減算処理が必要か否かを判定し、否定的判定が行われた場合には抽出したｎビットの部分被除数をそのまま部分剰余とする無演算処理を実行する加減算要否判定部と、
被除数レジスタに格納されているデータの先頭ビットと、除数レジスタに格納されているデータの先頭ビットとを比較する符号比較部と、
前記加減算要否判定部が肯定的判定を行ったときに、前記符号比較部による比較結果が同符号の場合には抽出したｎビットの部分被除数からｎビットの正規化除数Ｄ′を減じる減算処理を実行し、異符号の場合には抽出したｎビットの部分被除数にｎビットの正規化除数Ｄ′を加える加算処理を実行し、ｎビットからなる部分剰余を得る加減算部と、
減算処理が実行された場合には正の部分商を示すデータを、加算処理が実行された場合には負の部分商を示すデータを、無演算処理が実行された場合には零の部分商を示すデータを、商レジスタの対応桁に格納する部分商格納部と、
少なくとも第１回目〜第（Ｋ−１）回目の各一巡プロセスにおいて、加算処理もしくは減算処理で得られた部分剰余を前記被除数レジスタの第２ビット目〜第（ｎ＋１）ビット目の部分に格納する書込処理と、前記被除数レジスタ内のデータを１ビット分上位側にシフトさせるシフト処理と、を実行するレジスタ更新部と、
を有することを特徴とする除算回路。
【請求項１２】
請求項９に記載の除算回路において、
演算処理部が、一巡プロセスを行う際に、常に、被除数レジスタに格納されているデータの第２ビット目〜第（ｎ＋１）ビット目を部分被除数として抽出し、少なくとも第１回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理が行われたときに、得られた部分剰余を前記被除数レジスタの先頭からｎビットの部分に格納し、前記被除数レジスタの先頭から（ｎ＋１）番目以降のビット位置として設定されたシフト区間内についてのみ、データを１ビット分上位側にシフトさせるレジスタ更新処理を実行することを特徴とする除算回路。
【請求項１３】
請求項１２に記載の除算回路において、
演算処理部が、
第ｉ回目（１≦ｉ≦Ｋ）の一巡プロセスにおいて加算処理もしくは減算処理が必要か否かを判定し、否定的判定が行われた場合には抽出したｎビットの部分被除数をそのまま部分剰余とする無演算処理を実行する加減算要否判定部と、
被除数レジスタに格納されているデータの先頭ビットと、除数レジスタに格納されているデータの先頭ビットとを比較する符号比較部と、
前記加減算要否判定部が肯定的判定を行ったときに、前記符号比較部による比較結果が同符号の場合には抽出したｎビットの部分被除数からｎビットの正規化除数Ｄ′を減じる減算処理を実行し、異符号の場合には抽出したｎビットの部分被除数にｎビットの正規化除数Ｄ′を加える加算処理を実行し、ｎビットからなる部分剰余を得る加減算部と、
減算処理が実行された場合には正の部分商を示すデータを、加算処理が実行された場合には負の部分商を示すデータを、無演算処理が実行された場合には零の部分商を示すデータを、商レジスタの対応桁に格納する部分商格納部と、
少なくとも第１回目〜第（Ｋ−１）回目の各一巡プロセスにおいて、加算処理もしくは減算処理が行われたときに、得られた部分剰余を前記被除数レジスタの先頭からｎビットの部分に格納する書込処理と、前記被除数レジスタの先頭から（ｎ＋１）番目以降のビット位置として設定されたシフト区間内についてのみ、データを１ビット分上位側にシフトさせるシフト処理と、を実行するレジスタ更新部と、
を有することを特徴とする除算回路。
【請求項１４】
請求項１１または１３に記載の除算回路において、
加減算要否判定部が、部分被除数が零の場合には否定的判定を行い、部分被除数が零でない場合には肯定的判定を行うことを特徴とする除算回路。
【請求項１５】
請求項１１または１３に記載の除算回路において、
加減算要否判定部が、第１回目の一巡プロセスに関しては、部分被除数を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定を行い、第ｉ回目（但し、ｉ≧２）の一巡プロセスに関しては、第（ｉ−１）回目の部分剰余を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定を行い、それ以外の場合には肯定的判定を行うことを特徴とする除算回路。
【請求項１６】
請求項９〜１５のいずれかに記載の除算回路において、
符号拡張部が、所定数αをα＝２に設定することを特徴とする除算回路。
【請求項１７】
請求項３，５，１１，１３のいずれかに記載の除算回路において、
商レジスタが、正の部分商を格納するための正の商レジスタと、負の部分商を格納するための負の商レジスタと、を有し、
部分商格納部が、減算処理が実行された場合には正の部分商を示すデータとして、前記正の商レジスタには「１」が格納され、前記負の商レジスタには「０」が格納されるようにし、加算処理が実行された場合には負の部分商を示すデータとして、前記正の商レジスタには「０」が格納され、前記負の商レジスタには「１」が格納されるようにし、無演算処理が実行された場合には零の部分商を示すデータとして、前記正の商レジスタおよび前記負の商レジスタともに「０」が格納されるようにし、
補正処理部が、前記正の商レジスタに格納されているデータから前記負の商レジスタに格納されているデータを減算して得られるデータを、商レジスタに格納されているデータとして取り扱うことを特徴とする除算回路。
【請求項１８】
請求項１７に記載の除算回路において、
部分商格納部が、正の商レジスタおよび負の商レジスタの最下位ビットに対する書き込みを行う書込処理と、正の商レジスタおよび負の商レジスタ内のデータを１ビット分上位側にシフトさせるシフト処理と、を実行することを特徴とする除算回路。
【請求項１９】
請求項１〜１８のいずれかに記載の除算回路において、
正規化処理部が、除数レジスタに格納されている除数Ｄの先頭から（ｇ＋１）ビット分のデータについて各ビットの論理和演算（除数Ｄが正の場合）もしくは論理積演算（除数Ｄが負の場合）を行う機能を有し、得られる論理値が「１」（除数Ｄが正の場合）もしくは「０」（除数Ｄが負の場合）となるｇの最小値ｇminを求め、シフト動作の回数βを、β＝ｇmin −１なる式で決定し、除数レジスタに格納されている除数Ｄを上位側にβビット分シフトすることにより正規化除数Ｄ′を生成することを特徴とする除算回路。
【請求項２０】
請求項１〜１９のいずれかに記載の除算回路において、
符号拡張部が、データ入力部によって入力された被除数Ｚの最上位ビットを示す信号線を分岐することによって得られたα本の分岐信号線によって構成され、これらの分岐信号線が、被除数レジスタの先頭からαビット分の入力信号線として用いられることを特徴とする除算回路。
【請求項２１】
請求項１〜２０のいずれかに記載の除算回路において、
補正処理部が、第Ｋ回目の一巡プロセスにおいて得られた部分剰余を仮の剰余とし、第Ｋ回目の一巡プロセス後に商レジスタに格納されている商を仮の商として、次の(a) ，(b) に記載する２つの処理、
(a) 商の補正処理
前記仮の剰余が０でなく、かつ、その符号が被除数Ｚの符号と異なる場合に実行される処理であって、被除数Ｚと除数Ｄとが同符号のときには前記仮の商を１だけ減少させ、前記仮の剰余を正規化除数Ｄ′だけ増加させる補正を行い、被除数Ｚと除数Ｄとが異符号のときには前記仮の商を１だけ増加させ、前記仮の剰余を正規化除数Ｄ′だけ減少させる補正を行う処理、
(b) 剰余の補正処理
正規化処理部による正規化処理において実行されたシフト動作の回数βを用いて、前記仮の剰余をβビット分桁下げする処理、
を実行することを特徴とする除算回路。
【請求項２２】
請求項２１に記載の除算回路において、
拡張被除数Ｚ′を格納する被除数レジスタと、この被除数レジスタの最上位ビットの更に上位側に配置された符号保存用ビットを格納する符号保存用レジスタと、を結合した結合レジスタを備え、
符号拡張部が、被除数Ｚに対して、先頭の符号ビットと同じビットをα＋１個だけ先頭部分に付加し、（ｍ＋α＋１）ビットからなるデータを生成し、生成したデータの下位（ｍ＋α）ビットからなる拡張被除数Ｚ′を前記結合レジスタのうちの被除数レジスタに格納し、生成したデータの上位１ビットからなる符号保存用ビットを前記結合レジスタのうちの符号保存用レジスタに格納する処理を行い、
補正処理部が、前記符号保存用レジスタ内に格納されている符号保存用ビットに基づいて被除数Ｚの符号を認識することを特徴とする除算回路。
【請求項２３】
請求項２２に記載の除算回路において、
符号拡張部が、データ入力部によって入力された被除数Ｚの最上位ビットを示す信号線から分岐された保存用分岐信号線を有し、この保存用分岐信号線が、符号保存用レジスタに格納する符号保存用ビットの入力信号線として用いられることを特徴とする除算回路。
【請求項２４】
被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算回路であって、
ｍビットの符号付き被除数Ｚの先頭部分に、その先頭ビットと同じビットを所定数α（但し、ｎ−１≧α≧１）だけ付加して（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する手段と、
ｎビットの符号付き除数Ｄを、冗長桁がなくなるように上位側にβビットずらし末尾にビット「０」をβ個だけ付加することにより、正規化除数Ｄ′を生成する手段と、
前記拡張被除数Ｚ′の所定の抽出位置からｎビットの部分被除数を抽出し、当該部分被除数と前記正規化除数Ｄ′との間で、減算処理、加算処理、もしくは無演算処理のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余とし、実行した演算処理の種別を示すデータを部分商とし、前記部分剰余を前記拡張被除数Ｚ′の所定位置に書き戻す処理を実行する機能をもった手段と、
を備え、
前記演算処理を、前記部分被除数の抽出位置を前記拡張被除数Ｚ′の先頭ビット位置から順次１ビットずつ繰り下げながら、Ｋ＝１＋（ｍ−ｎ）＋α＋βなる式で定義される演算回数Ｋだけ繰り返し実行した後、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求めることを特徴とする除算回路。
【請求項２５】
被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算回路であって、
ｍビットの符号付き被除数Ｚの先頭部分に、その先頭ビットと同じビットを所定数α（但し、ｎ−１≧α≧２）だけ付加して（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する手段と、
ｎビットの符号付き除数Ｄを、冗長桁がなくなるように上位側にβビットずらし末尾にビット「０」をβ個だけ付加することにより、正規化除数Ｄ′を生成する手段と、
前記拡張被除数Ｚ′の所定の抽出位置からｎビットの部分被除数を抽出し、当該部分被除数と前記正規化除数Ｄ′との間で、減算処理、加算処理、もしくは無演算処理のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余とし、実行した演算処理の種別を示すデータを部分商とし、前記部分剰余を前記拡張被除数Ｚ′の所定位置に書き戻す処理を実行する機能をもった手段と、
を備え、
前記演算処理を、前記部分被除数の抽出位置を前記拡張被除数Ｚ′の先頭から２ビット目の位置から順次１ビットずつ繰り下げながら、Ｋ＝（ｍ−ｎ）＋α＋βなる式で定義される演算回数Ｋだけ繰り返し実行した後、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求めることを特徴とする除算回路。
【請求項２６】
請求項１〜２５のいずれかに記載の除算回路が組み込まれた半導体集積回路。
【請求項２７】
除算回路が、被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算方法であって、
前記除算回路が、ｍビットからなる符号付きビット列のデータとして被除数Ｚを入力するとともに、ｎビットからなる符号付きビット列のデータとして除数Ｄを入力するデータ入力段階と、
前記除算回路が、所定数α（但し、ｎ−１≧α≧１）に基づいて、前記被除数Ｚに対して、先頭の符号ビットと同じビットをα個だけ先頭部分に付加し、（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する符号拡張処理を行う符号拡張処理段階と、
前記除算回路が、前記除数Ｄに対して、先頭ビットと第２番目のビットとが異なる値になるまで、全ビットを上位側に１ビットだけずらし末尾にビット「０」を付加するシフト動作を繰り返す正規化処理を実行し、ｎビットからなる正規化除数Ｄ′を生成する正規化処理段階と、
前記除算回路が、前記所定数αと、前記正規化処理において実行されたシフト動作の回数βと、に基づいて、演算回数ＫをＫ＝１＋（ｍ−ｎ）＋α＋βなる式で求める演算回数決定段階と、
前記除算回路が、以下の(a) 〜(f) の各段階を有する一巡プロセスを実行する一巡プロセス段階と、
(a) 前記拡張被除数Ｚ′から、所定の抽出位置を先頭としてｎビット分を部分被除数として抽出した場合に、抽出した部分被除数に対して加減算を行う必要があるか否かを判定する加減算要否判定段階、
(b) 前記加減算要否判定段階において肯定的判定が行われたときに、直前の一巡プロセスで得られた部分剰余（但し、第１回目の一巡プロセスの場合は前記拡張被除数Ｚ′）の先頭ビットと、前記正規化除数Ｄ′の先頭ビットと、を比較する符号比較段階、
(c) 前記符号比較段階における比較結果が同一の場合に、前記部分被除数に対応する桁の部分商として正の部分商を生成し、前記部分被除数から前記正規化除数Ｄ′を減じる減算処理を実行して部分剰余を得る減算段階、
(d) 前記符号比較段階における比較結果が異なる場合に、前記部分被除数に対応する桁の部分商として負の部分商を生成し、前記部分被除数に前記正規化除数Ｄ′を加える加算処理を実行して部分剰余を得る加算段階、
(e) 前記加減算要否判定段階において否定的判定が行われたときに、前記部分被除数に対応する桁の部分商として零の部分商を生成し、前記部分被除数をそのまま部分剰余とする無演算段階、
(f) 前記減算段階もしくは前記加算段階が行われたときに、得られた部分剰余によって前記拡張被除数Ｚ′の対応桁位置を書き換える更新段階、
を有し、
前記一巡プロセス段階を、前記部分被除数の抽出位置を前記拡張被除数Ｚ′の先頭ビット位置から順次１ビットずつ繰り下げながら、Ｋ回実行し（ただし、前記(f) 更新段階については、第Ｋ回目は実行しなくてもよい）、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求めることを特徴とする除算方法。
【請求項２８】
請求項２７に記載の除算方法において、
(a) 加減算要否判定段階が、第１回目の一巡プロセスに関しては、部分被除数を構成するｎビットのうち、先頭の３ビットが「０００」もしくは「１１１」なる固有のビットパターンをとる場合に否定的判定を行い、第ｉ回目（但し、ｉ≧２）の一巡プロセスに関しては、第（ｉ−１）回目の部分剰余を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定を行い、それ以外の場合には肯定的判定を行うことを特徴とする除算方法。
【請求項２９】
除算回路が、被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算方法であって、
前記除算回路が、ｍビットからなる符号付きビット列のデータとして被除数Ｚを入力するとともに、ｎビットからなる符号付きビット列のデータとして除数Ｄを入力するデータ入力段階と、
前記除算回路が、所定数α（但し、ｎ−１≧α≧２）に基づいて、前記被除数Ｚに対して、先頭の符号ビットと同じビットをα個だけ先頭部分に付加し、（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する符号拡張処理を行う符号拡張処理段階と、
前記除算回路が、前記除数Ｄに対して、先頭ビットと第２番目のビットとが異なる値になるまで、全ビットを上位側に１ビットだけずらし末尾にビット「０」を付加するシフト動作を繰り返す正規化処理を実行し、ｎビットからなる正規化除数Ｄ′を生成する正規化処理段階と、
前記除算回路が、前記所定数αと、前記正規化処理において実行されたシフト動作の回数βと、に基づいて、演算回数ＫをＫ＝（ｍ−ｎ）＋α＋βなる式で求める演算回数決定段階と、
前記除算回路が、以下の(a) 〜(f) の各段階を有する一巡プロセスを実行する一巡プロセス段階と、
(a) 前記拡張被除数Ｚ′から、所定の抽出位置を先頭としてｎビット分を部分被除数として抽出した場合に、抽出した部分被除数に対して加減算を行う必要があるか否かを判定する加減算要否判定段階、
(b) 前記加減算要否判定段階において肯定的判定が行われたときに、直前の一巡プロセスで得られた部分剰余（但し、第１回目の一巡プロセスの場合は前記拡張被除数Ｚ′）の先頭ビットと、前記正規化除数Ｄ′の先頭ビットと、を比較する符号比較段階、
(c) 前記符号比較段階における比較結果が同符号の場合に、前記部分被除数に対応する桁の部分商として正の部分商を生成し、前記部分被除数から前記正規化除数Ｄ′を減じる減算処理を実行して部分剰余を得る減算段階、
(d) 前記符号比較段階における比較結果が異符号の場合に、前記部分被除数に対応する桁の部分商として負の部分商を生成し、前記部分被除数に前記正規化除数Ｄ′を加える加算処理を実行して部分剰余を得る加算段階、
(e) 前記加減算要否判定段階において否定的判定が行われたときに、前記部分被除数に対応する桁の部分商として零の部分商を生成し、前記部分被除数をそのまま部分剰余とする無演算段階、
(f) 前記減算段階もしくは前記加算段階が行われたときに、得られた部分剰余によって前記拡張被除数Ｚ′の対応桁位置を書き換える更新段階、
を有し、
前記一巡プロセス段階を、前記部分被除数の抽出位置を前記拡張被除数Ｚ′の先頭から２ビット目の位置から順次１ビットずつ繰り下げながら、Ｋ回実行し（ただし、前記(f) 更新段階については、第Ｋ回目は実行しなくてもよい）、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求めることを特徴とする除算方法。
【請求項３０】
請求項２９に記載の除算方法において、
(a) 加減算要否判定段階が、第１回目の一巡プロセスに関しては、部分被除数を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定を行い、第ｉ回目（但し、ｉ≧２）の一巡プロセスに関しては、第（ｉ−１）回目の部分剰余を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定を行い、それ以外の場合には肯定的判定を行うことを特徴とする除算方法。
【請求項３１】
請求項２７〜３０のいずれかに記載の除算方法において、
第Ｋ回目の一巡プロセスにおいて得られた部分剰余を仮の剰余とし、合計Ｋ回の一巡プロセスの実行により得られた部分商の集合を仮の商として、次の(g) ，(h) に記載する２つの処理、
(g) 商の補正処理
前記仮の剰余が０でなく、かつ、その符号が被除数Ｚの符号と異なる場合に実行される処理であって、被除数Ｚと除数Ｄとが同符号のときには前記仮の商を１だけ減少させ、前記仮の剰余を正規化除数Ｄ′だけ増加させる補正を行い、被除数Ｚと除数Ｄとが異符号のときには前記仮の商を１だけ増加させ、前記仮の剰余を正規化除数Ｄ′だけ減少させる補正を行う処理、
(h) 剰余の補正処理
正規化処理において実行されたシフト動作の回数βを用いて、前記仮の剰余をβビット分桁下げする処理、
を実行することにより商Ｑおよび剰余Ｒを求めることを特徴とする除算方法。
【請求項３２】
除算回路が、被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算方法であって、
前記除算回路が、ｍビットの符号付き被除数Ｚの先頭部分に、その先頭ビットと同じビットを所定数α（但し、ｎ−１≧α≧１）だけ付加して（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する第１の段階と、
前記除算回路が、ｎビットの符号付き除数Ｄを、冗長桁がなくなるように上位側にβビットだけずらし末尾にビット「０」をβ個だけ付加することにより、正規化除数Ｄ′を生成する第２の段階と、
前記除算回路が、前記拡張被除数Ｚ′の所定の抽出位置からｎビットの部分被除数を抽出し、当該部分被除数と前記正規化除数Ｄ′との間で、減算処理、加算処理、もしくは無演算処理のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余とし、実行した演算処理の種別を示すデータを部分商とし、前記部分剰余を前記拡張被除数Ｚ′の所定位置に書き戻す処理を実行する第３の段階と、
を有し、
前記第３の段階における前記演算処理を、前記部分被除数の抽出位置を前記拡張被除数Ｚ′の先頭ビット位置から順次１ビットずつ繰り下げながら、Ｋ＝１＋（ｍ−ｎ）＋α＋βなる式で定義される演算回数Ｋだけ繰り返し実行した後、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求めることを特徴とする除算方法。
【請求項３３】
除算回路が、被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算方法であって、
前記除算回路が、ｍビットの符号付き被除数Ｚの先頭部分に、その先頭ビットと同じビットを所定数α（但し、ｎ−１≧α≧２）だけ付加して（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する第１の段階と、
前記除算回路が、ｎビットの符号付き除数Ｄを、冗長桁がなくなるように上位側にβビットだけずらし末尾にビット「０」をβ個だけ付加することにより、正規化除数Ｄ′を生成する第２の段階と、
前記除算回路が、前記拡張被除数Ｚ′の所定の抽出位置からｎビットの部分被除数を抽出し、当該部分被除数と前記正規化除数Ｄ′との間で、減算処理、加算処理、もしくは無演算処理のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余とし、実行した演算処理の種別を示すデータを部分商とし、前記部分剰余を前記拡張被除数Ｚ′の所定位置に書き戻す処理を実行する第３の段階と、
を有し、
前記第３の段階における前記演算処理を、前記部分被除数の抽出位置を前記拡張被除数Ｚ′の先頭から２ビット目の位置から順次１ビットずつ繰り下げながら、Ｋ＝（ｍ−ｎ）＋α＋βなる式で定義される演算回数Ｋだけ繰り返し実行した後、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求めることを特徴とする除算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、与えられた被除数Ｚと除数Ｄに基づいて、商Ｑおよび剰余Ｒを求める整数除算を行う除算回路および除算方法に関し、特に、非回復法の除算演算を行う除算回路および除算方法に関する。
【背景技術】
【０００２】
デジタルデータについての除算を行う一般的なアルゴリズムとしては、回復法除算と非回復法除算とが知られている。回復法除算は、基本的に、被除数Ｚから桁をずらしながら除数Ｄを引き算する減算処理を繰り返してゆく手法であり、必要に応じて、回復処理が実行される。たとえば、被除数Ｚと除数Ｄとが共に正の場合、ある桁に関する減算の結果、値が負になってしまう場合には、減算前の状態に回復させる回復処理を行った上で、次の桁についての演算を行うことになる。これに対して、非回復法除算では、回復処理を行うことなしに、演算の状況に応じて減算処理か加算処理かが選択されて実行される。
【０００３】
たとえば、下記の特許文献１には、非回復法除算を実行可能な除算回路が開示されている。また、特許文献２には、繰り返し演算回数を低減させるため、被除数Ｚおよび除数Ｄの有意桁のみに対する演算を行う方法が開示されている。更に、特許文献３には、除算処理にかかる演算時間を短縮させるため、被除数Ｚおよび除数Ｄの所定上位桁を抜き出した減算により商の仮値を求め、乗算器により商の仮値と除数との積を求めて被除数Ｚから減算し、当該減算結果の正負に基づいて真の商を決定する除算方法が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開昭６１−１０１８３５号公報
【特許文献２】特開平７−７３０２５号公報
【特許文献３】特開２００４−３１０４３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
繰り返し演算回数を低減させることは、演算速度を向上させる上で効果的であるが、そのためには付加的な回路構成要素が必要になるため、回路構成が複雑になり、回路規模が大きくならざるを得ない。たとえば、上述した特許文献２に開示された除算方法を実行するためには、被除数Ｚおよび除数Ｄの有意桁を認識するためのポインタや、当該認識結果に基づいて小数点位置を決定する構成要素などが必要になる。一方、上述した特許文献３に開示された除算方法を実行するためには、加減算器の他に乗算器を設ける必要がある。
【０００６】
そこで本発明は、単純な回路構成で高速な非回復法除算を実行可能な除算回路および除算方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
(1)   本発明の第１の態様は、被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算回路において、
ｍビットからなる符号付きビット列のデータとして被除数Ｚを入力するとともに、ｎビットからなる符号付きビット列のデータとして除数Ｄを入力するデータ入力部と、
所定数α（但し、ｎ−１≧α≧１）に基づいて、被除数Ｚに対して、先頭の符号ビットと同じビットをα個だけ先頭部分に付加し、（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する符号拡張処理を行う符号拡張部と、
拡張被除数Ｚ′を格納する被除数レジスタと、
除数Ｄに対して、先頭ビットと第２番目のビットとが異なる値になるまで、全ビットを上位側に１ビットだけずらし末尾にビット「０」を付加するシフト動作を繰り返す正規化処理を実行し、ｎビットからなる正規化除数Ｄ′を生成する正規化処理部と、
正規化除数Ｄ′を格納する除数レジスタと、
商を格納するための商レジスタと、
上記所定数αと、正規化処理において実行されたシフト動作の回数βと、に基づいて、演算回数ＫをＫ＝１＋（ｍ−ｎ）＋α＋βなる式で求める演算回数決定部と、
被除数レジスタに格納されているデータの所定の抽出位置を先頭としてｎビット分を部分被除数として抽出し、抽出した部分被除数に対して除数レジスタに格納されているｎビットの正規化除数Ｄ′を減じる減算処理、抽出した部分被除数に対して除数レジスタに格納されているｎビットの正規化除数Ｄ′を加える加算処理、抽出した部分被除数に何ら演算を施さない無演算処理、のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余とし、実行した演算処理の種別を示すデータを商レジスタの対応桁に格納する一巡プロセスを、演算回数Ｋに応じて第１回目〜第Ｋ回目まで繰り返し行い、このとき第１回目の抽出位置は拡張被除数Ｚ′の先頭とし、第２回目以降の抽出位置は前回の抽出位置から１ビットだけ下位側にずれた位置となるようにし、かつ、少なくとも第１回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理が行われたときに、部分剰余を被除数レジスタの所定位置に書き戻すレジスタ更新処理を実行する演算処理部と、
演算処理部が第Ｋ回目の一巡プロセスを完了した後、商レジスタ内に格納されているデータに基づいて商Ｑを決定し、第Ｋ回目の一巡プロセスで得られた部分剰余に基づいて剰余Ｒを決定し、決定した商Ｑおよび剰余Ｒを出力する補正処理部と、
を設けるようにしたものである。
【０００８】
(2)   本発明の第２の態様に係る除算回路は、上述した第１の態様に係る除算回路において、
演算処理部が、一巡プロセスを行う際に、
第１回目の一巡プロセスでは、被除数レジスタに格納されているデータの先頭のｎビットを部分被除数として抽出し、加算処理もしくは減算処理で得られた部分剰余を被除数レジスタの先頭からｎビットの部分に格納し、
第２回目以降の一巡プロセスでは、被除数レジスタに格納されているデータの第２ビット目〜第（ｎ＋１）ビット目を部分被除数として抽出し、かつ、少なくとも第２回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理で得られた部分剰余を被除数レジスタの第２ビット目〜第（ｎ＋１）ビット目の部分に格納し、被除数レジスタ内のデータを１ビット分上位側にシフトさせるレジスタ更新処理を実行するようにしたものである。
【０００９】
(3)   本発明の第３の態様に係る除算回路は、上述した第２の態様に係る除算回路において、
演算処理部が、
第ｉ回目（１≦ｉ≦Ｋ）の一巡プロセスにおいて加算処理もしくは減算処理が必要か否かを判定し、否定的判定が行われた場合には抽出したｎビットの部分被除数をそのまま部分剰余とする無演算処理を実行する加減算要否判定部と、
被除数レジスタに格納されているデータの先頭ビットと、除数レジスタに格納されているデータの先頭ビットとを比較する符号比較部と、
加減算要否判定部が肯定的判定を行ったときに、符号比較部による比較結果が同符号の場合には抽出したｎビットの部分被除数からｎビットの正規化除数Ｄ′を減じる減算処理を実行し、異符号の場合には抽出したｎビットの部分被除数にｎビットの正規化除数Ｄ′を加える加算処理を実行し、ｎビットからなる部分剰余を得る加減算部と、
減算処理が実行された場合には正の部分商を示すデータを、加算処理が実行された場合には負の部分商を示すデータを、無演算処理が実行された場合には零の部分商を示すデータを、商レジスタの対応桁に格納する部分商格納部と、
第１回目の一巡プロセスでは、加算処理もしくは減算処理で得られた部分剰余を被除数レジスタの先頭からｎビットの部分に格納し、第２回目以降の一巡プロセスでは、加算処理もしくは減算処理で得られた部分剰余を被除数レジスタの第２ビット目〜第（ｎ＋１）ビット目の部分に格納する書込処理と、第２回目以降の一巡プロセスにおいて、被除数レジスタ内のデータを１ビット分上位側にシフトさせるシフト処理と、を実行するレジスタ更新部と、
を有するようにしたものである。
【００１０】
(4)   本発明の第４の態様に係る除算回路は、上述した第１の態様に係る除算回路において、
演算処理部が、一巡プロセスを行う際に、
第１回目の一巡プロセスでは、被除数レジスタに格納されているデータの先頭のｎビットを部分被除数として抽出し、加算処理もしくは減算処理で得られた部分剰余を被除数レジスタの先頭からｎビットの部分に格納し、
第２回目以降の一巡プロセスでは、被除数レジスタに格納されているデータの第２ビット目〜第（ｎ＋１）ビット目を部分被除数として抽出し、かつ、少なくとも第２回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理が行われたときに、得られた部分剰余を被除数レジスタの先頭からｎビットの部分に格納し、被除数レジスタの先頭から（ｎ＋１）番目以降のビット位置として設定されたシフト区間内についてのみ、データを１ビット分上位側にシフトさせるレジスタ更新処理を実行するようにしたものである。
【００１１】
(5)   本発明の第５の態様に係る除算回路は、上述した第４の態様に係る除算回路において、
演算処理部が、
第ｉ回目（１≦ｉ≦Ｋ）の一巡プロセスにおいて加算処理もしくは減算処理が必要か否かを判定し、否定的判定が行われた場合には抽出したｎビットの部分被除数をそのまま部分剰余とする無演算処理を実行する加減算要否判定部と、
被除数レジスタに格納されているデータの先頭ビットと、除数レジスタに格納されているデータの先頭ビットとを比較する符号比較部と、
加減算要否判定部が肯定的判定を行ったときに、符号比較部による比較結果が同符号の場合には抽出したｎビットの部分被除数からｎビットの正規化除数Ｄ′を減じる減算処理を実行し、異符号の場合には抽出したｎビットの部分被除数にｎビットの正規化除数Ｄ′を加える加算処理を実行し、ｎビットからなる部分剰余を得る加減算部と、
減算処理が実行された場合には正の部分商を示すデータを、加算処理が実行された場合には負の部分商を示すデータを、無演算処理が実行された場合には零の部分商を示すデータを、商レジスタの対応桁に格納する部分商格納部と、
第１回目の一巡プロセスでは、加算処理もしくは減算処理で得られた部分剰余を被除数レジスタの先頭からｎビットの部分に格納し、第２回目以降の一巡プロセスでは、少なくとも第２回目〜第（Ｋ−１）回目の各一巡プロセスにおいて、加算処理もしくは減算処理が行われたときに、得られた部分剰余を被除数レジスタの先頭からｎビットの部分に格納する書込処理と、被除数レジスタの先頭から（ｎ＋１）番目以降のビット位置として設定されたシフト区間内についてのみ、データを１ビット分上位側にシフトさせるシフト処理と、を実行するレジスタ更新部と、
を有するようにしたものである。
【００１２】
(6)   本発明の第６の態様に係る除算回路は、上述した第３または第５の態様に係る除算回路において、
加減算要否判定部が、部分被除数が零の場合には否定的判定を行い、部分被除数が零でない場合には肯定的判定を行うようにしたものである。
【００１３】
(7)   本発明の第７の態様に係る除算回路は、上述した第３または第５の態様に係る除算回路において、
加減算要否判定部が、第１回目の一巡プロセスに関しては、部分被除数を構成するｎビットのうち、先頭の３ビットが「０００」もしくは「１１１」なる固有のビットパターンをとる場合に否定的判定を行い、第ｉ回目（但し、ｉ≧２）の一巡プロセスに関しては、第（ｉ−１）回目の部分剰余を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定を行い、それ以外の場合には肯定的判定を行うようにしたものである。
【００１４】
(8)   本発明の第８の態様に係る除算回路は、上述した第１〜第７の態様に係る除算回路において、
符号拡張部が、所定数αをα＝１に設定するようにしたものである。
【００１５】
(9)   本発明の第９の態様に係る除算回路は、被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算回路において、
ｍビットからなる符号付きビット列のデータとして被除数Ｚを入力するとともに、ｎビットからなる符号付きビット列のデータとして除数Ｄを入力するデータ入力部と、
所定数α（但し、ｎ−１≧α≧２）に基づいて、被除数Ｚに対して、先頭の符号ビットと同じビットをα個だけ先頭部分に付加し、（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する符号拡張処理を行う符号拡張部と、
拡張被除数Ｚ′を格納する被除数レジスタと、
除数Ｄに対して、先頭ビットと第２番目のビットとが異なる値になるまで、全ビットを上位側に１ビットだけずらし末尾にビット「０」を付加するシフト動作を繰り返す正規化処理を実行し、ｎビットからなる正規化除数Ｄ′を生成する正規化処理部と、
正規化除数Ｄ′を格納する除数レジスタと、
商を格納するための商レジスタと、
上記所定数αと、正規化処理において実行されたシフト動作の回数βと、に基づいて、演算回数ＫをＫ＝（ｍ−ｎ）＋α＋βなる式で求める演算回数決定部と、
被除数レジスタに格納されているデータの所定の抽出位置を先頭としてｎビット分を部分被除数として抽出し、抽出した部分被除数に対して除数レジスタに格納されているｎビットの正規化除数Ｄ′を減じる減算処理、抽出した部分被除数に対して除数レジスタに格納されているｎビットの正規化除数Ｄ′を加える加算処理、抽出した部分被除数に何ら演算を施さない無演算処理、のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余とし、実行した演算処理の種別を示すデータを商レジスタの対応桁に格納する一巡プロセスを、演算回数Ｋに応じて第１回目〜第Ｋ回目まで繰り返し行い、このとき第１回目の抽出位置は拡張被除数Ｚ′の先頭から２ビット目とし、第２回目以降の抽出位置は前回の抽出位置から１ビットだけ下位側にずれた位置となるようにし、かつ、少なくとも第１回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理が行われたときに、部分剰余を被除数レジスタの所定位置に書き戻すレジスタ更新処理を実行する演算処理部と、
演算処理部が第Ｋ回目の一巡プロセスを完了した後、商レジスタ内に格納されているデータに基づいて商Ｑを決定し、第Ｋ回目の一巡プロセスで得られた部分剰余に基づいて剰余Ｒを決定し、決定した商Ｑおよび剰余Ｒを出力する補正処理部と、
を設けるようにしたものである。
【００１６】
(10)   本発明の第１０の態様に係る除算回路は、上述した第９の態様に係る除算回路において、
演算処理部が、一巡プロセスを行う際に、常に、被除数レジスタに格納されているデータの第２ビット目〜第（ｎ＋１）ビット目を部分被除数として抽出し、少なくとも第１回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理で得られた部分剰余を被除数レジスタの第２ビット目〜第（ｎ＋１）ビット目の部分に格納し、被除数レジスタ内のデータを１ビット分上位側にシフトさせるレジスタ更新処理を実行するようにしたものである。
【００１７】
(11)   本発明の第１１の態様に係る除算回路は、上述した第１０の態様に係る除算回路において、
演算処理部が、
第ｉ回目（１≦ｉ≦Ｋ）の一巡プロセスにおいて加算処理もしくは減算処理が必要か否かを判定し、否定的判定が行われた場合には抽出したｎビットの部分被除数をそのまま部分剰余とする無演算処理を実行する加減算要否判定部と、
被除数レジスタに格納されているデータの先頭ビットと、除数レジスタに格納されているデータの先頭ビットとを比較する符号比較部と、
加減算要否判定部が肯定的判定を行ったときに、符号比較部による比較結果が同符号の場合には抽出したｎビットの部分被除数からｎビットの正規化除数Ｄ′を減じる減算処理を実行し、異符号の場合には抽出したｎビットの部分被除数にｎビットの正規化除数Ｄ′を加える加算処理を実行し、ｎビットからなる部分剰余を得る加減算部と、
減算処理が実行された場合には正の部分商を示すデータを、加算処理が実行された場合には負の部分商を示すデータを、無演算処理が実行された場合には零の部分商を示すデータを、商レジスタの対応桁に格納する部分商格納部と、
少なくとも第１回目〜第（Ｋ−１）回目の各一巡プロセスにおいて、加算処理もしくは減算処理で得られた部分剰余を被除数レジスタの第２ビット目〜第（ｎ＋１）ビット目の部分に格納する書込処理と、被除数レジスタ内のデータを１ビット分上位側にシフトさせるシフト処理と、を実行するレジスタ更新部と、
を有するようにしたものである。
【００１８】
(12)   本発明の第１２の態様に係る除算回路は、上述した第９の態様に係る除算回路において、
演算処理部が、一巡プロセスを行う際に、常に、被除数レジスタに格納されているデータの第２ビット目〜第（ｎ＋１）ビット目を部分被除数として抽出し、少なくとも第１回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理が行われたときに、得られた部分剰余を被除数レジスタの先頭からｎビットの部分に格納し、被除数レジスタの先頭から（ｎ＋１）番目以降のビット位置として設定されたシフト区間内についてのみ、データを１ビット分上位側にシフトさせるレジスタ更新処理を実行するようにしたものである。
【００１９】
(13)   本発明の第１３の態様に係る除算回路は、上述した第１２の態様に係る除算回路において、
演算処理部が、
第ｉ回目（１≦ｉ≦Ｋ）の一巡プロセスにおいて加算処理もしくは減算処理が必要か否かを判定し、否定的判定が行われた場合には抽出したｎビットの部分被除数をそのまま部分剰余とする無演算処理を実行する加減算要否判定部と、
被除数レジスタに格納されているデータの先頭ビットと、除数レジスタに格納されているデータの先頭ビットとを比較する符号比較部と、
加減算要否判定部が肯定的判定を行ったときに、符号比較部による比較結果が同符号の場合には抽出したｎビットの部分被除数からｎビットの正規化除数Ｄ′を減じる減算処理を実行し、異符号の場合には抽出したｎビットの部分被除数にｎビットの正規化除数Ｄ′を加える加算処理を実行し、ｎビットからなる部分剰余を得る加減算部と、
減算処理が実行された場合には正の部分商を示すデータを、加算処理が実行された場合には負の部分商を示すデータを、無演算処理が実行された場合には零の部分商を示すデータを、商レジスタの対応桁に格納する部分商格納部と、
少なくとも第１回目〜第（Ｋ−１）回目の各一巡プロセスにおいて、加算処理もしくは減算処理が行われたときに、得られた部分剰余を被除数レジスタの先頭からｎビットの部分に格納する書込処理と、被除数レジスタの先頭から（ｎ＋１）番目以降のビット位置として設定されたシフト区間内についてのみ、データを１ビット分上位側にシフトさせるシフト処理と、を実行するレジスタ更新部と、
を有するようにしたものである。
【００２０】
(14)   本発明の第１４の態様に係る除算回路は、上述した第１１または第１３の態様に係る除算回路において、
加減算要否判定部が、部分被除数が零の場合には否定的判定を行い、部分被除数が零でない場合には肯定的判定を行うようにしたものである。
【００２１】
(15)   本発明の第１５の態様に係る除算回路は、上述した第１１または第１３の態様に係る除算回路において、
加減算要否判定部が、第１回目の一巡プロセスに関しては、部分被除数を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定を行い、第ｉ回目（但し、ｉ≧２）の一巡プロセスに関しては、第（ｉ−１）回目の部分剰余を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定を行い、それ以外の場合には肯定的判定を行うようにしたものである。
【００２２】
(16)   本発明の第１６の態様に係る除算回路は、上述した第９〜第１５の態様に係る除算回路において、
符号拡張部が、所定数αをα＝２に設定するようにしたものである。
【００２３】
(17)   本発明の第１７の態様に係る除算回路は、上述した第３，第５，第１１，第１３の態様に係る除算回路において、
商レジスタが、正の部分商を格納するための正の商レジスタと、負の部分商を格納するための負の商レジスタと、を有し、
部分商格納部が、減算処理が実行された場合には正の部分商を示すデータとして、正の商レジスタには「１」が格納され、負の商レジスタには「０」が格納されるようにし、加算処理が実行された場合には負の部分商を示すデータとして、正の商レジスタには「０」が格納され、負の商レジスタには「１」が格納されるようにし、無演算処理が実行された場合には零の部分商を示すデータとして、正の商レジスタおよび負の商レジスタともに「０」が格納されるようにし、
補正処理部が、正の商レジスタに格納されているデータから負の商レジスタに格納されているデータを減算して得られるデータを、商レジスタに格納されているデータとして取り扱うようにしたものである。
【００２４】
(18)   本発明の第１８の態様に係る除算回路は、上述した第１７の態様に係る除算回路において、
部分商格納部が、正の商レジスタおよび負の商レジスタの最下位ビットに対する書き込みを行う書込処理と、正の商レジスタおよび負の商レジスタ内のデータを１ビット分上位側にシフトさせるシフト処理と、を実行するようにしたものである。
【００２５】
(19)   本発明の第１９の態様に係る除算回路は、上述した第１〜第１８の態様に係る除算回路において、
正規化処理部が、除数レジスタに格納されている除数Ｄの先頭から（ｇ＋１）ビット分のデータについて各ビットの論理和演算（除数Ｄが正の場合）もしくは論理積演算（除数Ｄが負の場合）を行う機能を有し、得られる論理値が「１」（除数Ｄが正の場合）もしくは「０」（除数Ｄが負の場合）となるｇの最小値ｇminを求め、シフト動作の回数βを、β＝ｇmin −１なる式で決定し、除数レジスタに格納されている除数Ｄを上位側にβビット分シフトすることにより正規化除数Ｄ′を生成するようにしたものである。
【００２６】
(20)   本発明の第２０の態様に係る除算回路は、上述した第１〜第１９の態様に係る除算回路において、
符号拡張部が、データ入力部によって入力された被除数Ｚの最上位ビットを示す信号線を分岐することによって得られたα本の分岐信号線によって構成され、これらの分岐信号線が、被除数レジスタの先頭からαビット分の入力信号線として用いられるようにしたものである。
【００２７】
(21)   本発明の第２１の態様に係る除算回路は、上述した第１〜第２０の態様に係る除算回路において、
補正処理部が、第Ｋ回目の一巡プロセスにおいて得られた部分剰余を仮の剰余とし、第Ｋ回目の一巡プロセス後に商レジスタに格納されている商を仮の商として、次の(a) ，(b) に記載する２つの処理、
(a) 商の補正処理
仮の剰余が０でなく、かつ、その符号が被除数Ｚの符号と異なる場合に実行される処理であって、被除数Ｚと除数Ｄとが同符号のときには仮の商を１だけ減少させ、仮の剰余を正規化除数Ｄ′だけ増加させる補正を行い、被除数Ｚと除数Ｄとが異符号のときには仮の商を１だけ増加させ、仮の剰余を正規化除数Ｄ′だけ減少させる補正を行う処理、
(b) 剰余の補正処理
正規化処理部による正規化処理において実行されたシフト動作の回数βを用いて、仮の剰余をβビット分桁下げする処理、
を実行するようにしたものである。
【００２８】
(22)   本発明の第２２の態様に係る除算回路は、上述した第２１の態様に係る除算回路において、
拡張被除数Ｚ′を格納する被除数レジスタと、この被除数レジスタの最上位ビットの更に上位側に配置された符号保存用ビットを格納する符号保存用レジスタと、を結合した結合レジスタを設け、
符号拡張部が、被除数Ｚに対して、先頭の符号ビットと同じビットをα＋１個だけ先頭部分に付加し、（ｍ＋α＋１）ビットからなるデータを生成し、生成したデータの下位（ｍ＋α）ビットからなる拡張被除数Ｚ′を結合レジスタのうちの被除数レジスタに格納し、生成したデータの上位１ビットからなる符号保存用ビットを結合レジスタのうちの符号保存用レジスタに格納する処理を行い、
補正処理部が、符号保存用レジスタ内に格納されている符号保存用ビットに基づいて被除数Ｚの符号を認識するようにしたものである。
【００２９】
(23)   本発明の第２３の態様に係る除算回路は、上述した第２２の態様に係る除算回路において、
符号拡張部が、データ入力部によって入力された被除数Ｚの最上位ビットを示す信号線から分岐された保存用分岐信号線を有し、この保存用分岐信号線が、符号保存用レジスタに格納する符号保存用ビットの入力信号線として用いられるようにしたものである。
【００３０】
(24)   本発明の第２４の態様に係る除算回路は、被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算回路において、
ｍビットの符号付き被除数Ｚの先頭部分に、その先頭ビットと同じビットを所定数α（但し、ｎ−１≧α≧１）だけ付加して（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する手段と、
ｎビットの符号付き除数Ｄを、冗長桁がなくなるように上位側にβビットずらし末尾にビット「０」をβ個だけ付加することにより、正規化除数Ｄ′を生成する手段と、
拡張被除数Ｚ′の所定の抽出位置からｎビットの部分被除数を抽出し、当該部分被除数と正規化除数Ｄ′との間で、減算処理、加算処理、もしくは無演算処理のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余とし、実行した演算処理の種別を示すデータを部分商とし、部分剰余を拡張被除数Ｚ′の所定位置に書き戻す処理を実行する機能をもった手段と、
を設け、
演算処理を、部分被除数の抽出位置を拡張被除数Ｚ′の先頭ビット位置から順次１ビットずつ繰り下げながら、Ｋ＝１＋（ｍ−ｎ）＋α＋βなる式で定義される演算回数Ｋだけ繰り返し実行した後、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求めるようにしたものである。
【００３１】
(25)   本発明の第２５の態様に係る除算回路は、被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算回路において、
ｍビットの符号付き被除数Ｚの先頭部分に、その先頭ビットと同じビットを所定数α（但し、ｎ−１≧α≧２）だけ付加して（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する手段と、
ｎビットの符号付き除数Ｄを、冗長桁がなくなるように上位側にβビットずらし末尾にビット「０」をβ個だけ付加することにより、正規化除数Ｄ′を生成する手段と、
拡張被除数Ｚ′の所定の抽出位置からｎビットの部分被除数を抽出し、当該部分被除数と正規化除数Ｄ′との間で、減算処理、加算処理、もしくは無演算処理のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余とし、実行した演算処理の種別を示すデータを部分商とし、部分剰余を拡張被除数Ｚ′の所定位置に書き戻す処理を実行する機能をもった手段と、
を設け、
演算処理を、部分被除数の抽出位置を拡張被除数Ｚ′の先頭から２ビット目の位置から順次１ビットずつ繰り下げながら、Ｋ＝（ｍ−ｎ）＋α＋βなる式で定義される演算回数Ｋだけ繰り返し実行した後、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求めるようにしたものである。
【００３２】
(26)   本発明の第２６の態様は、上述した第１〜第２５の態様に係る除算回路を組み込むことにより半導体集積回路を構成したものである。
【００３３】
(27)   本発明の第２７の態様は、除算回路によって、被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算方法において、
除算回路が、ｍビットからなる符号付きビット列のデータとして被除数Ｚを入力するとともに、ｎビットからなる符号付きビット列のデータとして除数Ｄを入力するデータ入力段階と、
除算回路が、所定数α（但し、ｎ−１≧α≧１）に基づいて、被除数Ｚに対して、先頭の符号ビットと同じビットをα個だけ先頭部分に付加し、（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する符号拡張処理を行う符号拡張処理段階と、
除算回路が、除数Ｄに対して、先頭ビットと第２番目のビットとが異なる値になるまで、全ビットを上位側に１ビットだけずらし末尾にビット「０」を付加するシフト動作を繰り返す正規化処理を実行し、ｎビットからなる正規化除数Ｄ′を生成する正規化処理段階と、
除算回路が、上記所定数αと、正規化処理において実行されたシフト動作の回数βと、に基づいて、演算回数ＫをＫ＝１＋（ｍ−ｎ）＋α＋βなる式で求める演算回数決定段階と、
除算回路が、以下の(a) 〜(f) の各段階を有する一巡プロセスを実行する一巡プロセス段階と、
(a) 拡張被除数Ｚ′から、所定の抽出位置を先頭としてｎビット分を部分被除数として抽出した場合に、抽出した部分被除数に対して加減算を行う必要があるか否かを判定する加減算要否判定段階、
(b) 加減算要否判定段階において肯定的判定が行われたときに、直前の一巡プロセスで得られた部分剰余（但し、第１回目の一巡プロセスの場合は拡張被除数Ｚ′）の先頭ビットと、正規化除数Ｄ′の先頭ビットと、を比較する符号比較段階、
(c) 符号比較段階における比較結果が同一の場合に、部分被除数に対応する桁の部分商として正の部分商を生成し、部分被除数から正規化除数Ｄ′を減じる減算処理を実行して部分剰余を得る減算段階、
(d) 符号比較段階における比較結果が異なる場合に、部分被除数に対応する桁の部分商として負の部分商を生成し、部分被除数に正規化除数Ｄ′を加える加算処理を実行して部分剰余を得る加算段階、
(e) 加減算要否判定段階において否定的判定が行われたときに、部分被除数に対応する桁の部分商として零の部分商を生成し、部分被除数をそのまま部分剰余とする無演算段階、
(f) 減算段階もしくは加算段階が行われたときに、得られた部分剰余によって拡張被除数Ｚ′の対応桁位置を書き換える更新段階、
を行い、
一巡プロセス段階を、部分被除数の抽出位置を拡張被除数Ｚ′の先頭ビット位置から順次１ビットずつ繰り下げながら、Ｋ回実行し（ただし、(f) 更新段階については、第Ｋ回目は実行しなくてもよい）、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求めるようにしたものである。
【００３４】
(28)   本発明の第２８の態様は、上述した第２７の態様に係る除算方法において、
(a) 加減算要否判定段階が、第１回目の一巡プロセスに関しては、部分被除数を構成するｎビットのうち、先頭の３ビットが「０００」もしくは「１１１」なる固有のビットパターンをとる場合に否定的判定を行い、第ｉ回目（但し、ｉ≧２）の一巡プロセスに関しては、第（ｉ−１）回目の部分剰余を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定を行い、それ以外の場合には肯定的判定を行うようにしたものである。
【００３５】
(29)   本発明の第２９の態様は、除算回路によって、被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算方法において、
除算回路が、ｍビットからなる符号付きビット列のデータとして被除数Ｚを入力するとともに、ｎビットからなる符号付きビット列のデータとして除数Ｄを入力するデータ入力段階と、
除算回路が、所定数α（但し、ｎ−１≧α≧２）に基づいて、被除数Ｚに対して、先頭の符号ビットと同じビットをα個だけ先頭部分に付加し、（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する符号拡張処理を行う符号拡張処理段階と、
除算回路が、除数Ｄに対して、先頭ビットと第２番目のビットとが異なる値になるまで、全ビットを上位側に１ビットだけずらし末尾にビット「０」を付加するシフト動作を繰り返す正規化処理を実行し、ｎビットからなる正規化除数Ｄ′を生成する正規化処理段階と、
除算回路が、上記所定数αと、正規化処理において実行されたシフト動作の回数βと、に基づいて、演算回数ＫをＫ＝（ｍ−ｎ）＋α＋βなる式で求める演算回数決定段階と、
除算回路が、以下の(a) 〜(f) の各段階を有する一巡プロセスを実行する一巡プロセス段階と、
(a) 拡張被除数Ｚ′から、所定の抽出位置を先頭としてｎビット分を部分被除数として抽出した場合に、抽出した部分被除数に対して加減算を行う必要があるか否かを判定する加減算要否判定段階、
(b) 加減算要否判定段階において肯定的判定が行われたときに、直前の一巡プロセスで得られた部分剰余（但し、第１回目の一巡プロセスの場合は拡張被除数Ｚ′）の先頭ビットと、正規化除数Ｄ′の先頭ビットと、を比較する符号比較段階、
(c) 符号比較段階における比較結果が同符号の場合に、部分被除数に対応する桁の部分商として正の部分商を生成し、部分被除数から正規化除数Ｄ′を減じる減算処理を実行して部分剰余を得る減算段階、
(d) 符号比較段階における比較結果が異符号の場合に、部分被除数に対応する桁の部分商として負の部分商を生成し、部分被除数に正規化除数Ｄ′を加える加算処理を実行して部分剰余を得る加算段階、
(e) 加減算要否判定段階において否定的判定が行われたときに、部分被除数に対応する桁の部分商として零の部分商を生成し、部分被除数をそのまま部分剰余とする無演算段階、
(f) 減算段階もしくは加算段階が行われたときに、得られた部分剰余によって拡張被除数Ｚ′の対応桁位置を書き換える更新段階、
を行い、
一巡プロセス段階を、部分被除数の抽出位置を拡張被除数Ｚ′の先頭から２ビット目の位置から順次１ビットずつ繰り下げながら、Ｋ回実行し（ただし、(f) 更新段階については、第Ｋ回目は実行しなくてもよい）、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求めるようにしたものである。
【００３６】
(30)   本発明の第３０の態様は、上述した第２９の態様に係る除算方法において、
(a) 加減算要否判定段階が、第１回目の一巡プロセスに関しては、部分被除数を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定を行い、第ｉ回目（但し、ｉ≧２）の一巡プロセスに関しては、第（ｉ−１）回目の部分剰余を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定を行い、それ以外の場合には肯定的判定を行うようにしたものである。
【００３７】
(31)   本発明の第３１の態様は、上述した第２７〜第３０の態様に係る除算方法において、
第Ｋ回目の一巡プロセスにおいて得られた部分剰余を仮の剰余とし、合計Ｋ回の一巡プロセスの実行により得られた部分商の集合を仮の商として、次の(g) ，(h) に記載する２つの処理、
(g) 商の補正処理
仮の剰余が０でなく、かつ、その符号が被除数Ｚの符号と異なる場合に実行される処理であって、被除数Ｚと除数Ｄとが同符号のときには仮の商を１だけ減少させ、仮の剰余を正規化除数Ｄ′だけ増加させる補正を行い、被除数Ｚと除数Ｄとが異符号のときには仮の商を１だけ増加させ、仮の剰余を正規化除数Ｄ′だけ減少させる補正を行う処理、
(h) 剰余の補正処理
正規化処理において実行されたシフト動作の回数βを用いて、仮の剰余をβビット分桁下げする処理、
を実行することにより商Ｑおよび剰余Ｒを求めるようにしたものである。
【００３８】
(32)   本発明の第３２の態様は、除算回路によって、被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算方法において、
除算回路が、ｍビットの符号付き被除数Ｚの先頭部分に、その先頭ビットと同じビットを所定数α（但し、ｎ−１≧α≧１）だけ付加して（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する第１の段階と、
除算回路が、ｎビットの符号付き除数Ｄを、冗長桁がなくなるように上位側にβビットだけずらし末尾にビット「０」をβ個だけ付加することにより、正規化除数Ｄ′を生成する第２の段階と、
除算回路が、拡張被除数Ｚ′の所定の抽出位置からｎビットの部分被除数を抽出し、当該部分被除数と正規化除数Ｄ′との間で、減算処理、加算処理、もしくは無演算処理のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余とし、実行した演算処理の種別を示すデータを部分商とし、部分剰余を拡張被除数Ｚ′の所定位置に書き戻す処理を実行する第３の段階と、
を行い、
第３の段階における演算処理を、部分被除数の抽出位置を拡張被除数Ｚ′の先頭ビット位置から順次１ビットずつ繰り下げながら、Ｋ＝１＋（ｍ−ｎ）＋α＋βなる式で定義される演算回数Ｋだけ繰り返し実行した後、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求めるようにしたものである。
【００３９】
(33)   本発明の第３３の態様は、除算回路によって、被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算方法において、
除算回路が、ｍビットの符号付き被除数Ｚの先頭部分に、その先頭ビットと同じビットを所定数α（但し、ｎ−１≧α≧２）だけ付加して（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する第１の段階と、
除算回路が、ｎビットの符号付き除数Ｄを、冗長桁がなくなるように上位側にβビットだけずらし末尾にビット「０」をβ個だけ付加することにより、正規化除数Ｄ′を生成する第２の段階と、
除算回路が、拡張被除数Ｚ′の所定の抽出位置からｎビットの部分被除数を抽出し、当該部分被除数と正規化除数Ｄ′との間で、減算処理、加算処理、もしくは無演算処理のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余とし、実行した演算処理の種別を示すデータを部分商とし、部分剰余を拡張被除数Ｚ′の所定位置に書き戻す処理を実行する第３の段階と、
を行い、
第３の段階における演算処理を、部分被除数の抽出位置を拡張被除数Ｚ′の先頭から２ビット目の位置から順次１ビットずつ繰り下げながら、Ｋ＝（ｍ−ｎ）＋α＋βなる式で定義される演算回数Ｋだけ繰り返し実行した後、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求めるようにしたものである。
【発明の効果】
【００４０】
本発明に係る除算回路および除算方法によれば、被除数Ｚに対しては符号をαビット分拡張して拡張被除数Ｚ′を生成する符号拡張処理を行い、除数Ｄに対しては冗長桁がなくなるように上位側にβビットずらして正規化除数Ｄ′を生成する正規化処理を行うようにし、上記αおよびβに基づいて繰り返し演算回数Ｋを決定するようにしたため、演算回数Ｋを低減することが可能になり、単純な回路構成で高速な非回復法除算を実行することができるようになる。
【図面の簡単な説明】
【００４１】
【図１】一般的な整数除算およびそのビット構成例を示す図である。
【図２】図１に示す除算を筆算で行う場合の基本手順を示す図である。
【図３】図１に示す除算の全演算処理プロセスを示す図である。
【図４】一般的な回復法によって「１５２÷１１」なる除算を実行する演算処理プロセスを示す図である。
【図５】除算成立条件違反となる除算方法によって「１５２÷４」なる除算を実行した演算処理プロセスを示す図である。
【図６】除算成立条件違反となる除算方法によって「５÷２」なる除算を実行する演算処理プロセスを示す図である。
【図７】除算成立条件違反を回避する除算方法（符号拡張を行う除算方法）によって「５÷２」なる除算を実行する演算処理プロセスを示す図である。
【図８】符号付き４ビットで表現可能な値の十進表現と二進表現との対応表である。
【図９】４ビット÷４ビットの符号付き除算を行う場合の符号拡張処理の一般概念を示す図である。
【図１０】従来の方法で「５÷２」なる除算を実行する際に行われる符号拡張処理を示す図である。
【図１１】一般的な非回復法による整数除算で行われる演算処理プロセスを示す図である。
【図１２】従来の一般的な非回復法によって「５÷２」なる除算を実行する演算処理プロセスを示す図である。
【図１３】従来の一般的な非回復法による除算手順を示す流れ図である。
【図１４】図１３に示す手順に後続して行われる補正処理手順を示す流れ図である。
【図１５】図１４に示す補正処理手順におけるステップＳ２４の具体的な処理例を示す図である。
【図１６】図１４に示す補正処理手順におけるステップＳ３１の具体的な処理例を示す図である。
【図１７】一般的な正の数の正規化の一例を示す図である。
【図１８】一般的な負の数の正規化の一例を示す図である。
【図１９】本発明の第１の実施形態に係る非回復法除算の特徴を示す図である。
【図２０】本発明の第１の実施形態に係る方法で「５÷２」なる除算を実行する際に行われる３つの特徴に関連した処理を示す図である。
【図２１】本発明の第１の実施形態に係る方法で「５÷２」なる除算を実行する演算処理プロセスを示す図である。
【図２２】本発明の第１の実施形態に係る非回復法による除算手順を示す流れ図である。
【図２３】図２２に示す手順に後続して行われる補正処理手順を示す流れ図である。
【図２４】図２３に示す補正処理手順におけるステップＳ２４Ａの具体的な処理例を示す図である。
【図２５】図２３に示す補正処理手順におけるステップＳ３１ＡおよびＳ４２Ａの具体的な処理例を示す図である。
【図２６】本発明の第１の実施形態に係る除算回路の基本構成を示すブロック図である。
【図２７】図２６に示す除算回路を用いて図２１に示す「５÷２」なる除算を実行する際の、第１回目の一巡プロセスにおけるレジスタの変遷を示す図である。
【図２８】図２６に示す除算回路を用いて図２１に示す「５÷２」なる除算を実行する際の、第２回目の一巡プロセスにおけるレジスタの変遷を示す図である。
【図２９】図２６に示す除算回路を用いて図２１に示す「５÷２」なる除算を実行する際の、第３回目の一巡プロセスにおけるレジスタの変遷を示す図である。
【図３０】図２６に示す除算回路を用いて図２１に示す「５÷２」なる除算を実行する際の、第４回目の一巡プロセスにおけるレジスタの変遷を示す図である。
【図３１】本発明の第２の実施形態に係る非回復法除算の特徴を示す図である。
【図３２】本発明の第２の実施形態に係る方法で「５÷２」なる除算を実行する演算処理プロセスを示す図である。
【図３３】本発明の第２の実施形態に係る非回復法による除算手順を示す流れ図である。
【図３４】図３３に示す手順に後続して行われる図２３に示す補正処理手順におけるステップＳ２４Ａの具体的な処理例を示す図である。
【図３５】図３１に示す手順に後続して行われる図２３に示す補正処理手順におけるステップＳ３１ＡおよびＳ４２Ａの具体的な処理例を示す図である。
【図３６】本発明の第２の実施形態に係る除算回路の基本構成を示すブロック図である。
【図３７】図３６に示す除算回路を用いて図３２に示す「５÷２」なる除算を実行する際の、第１回目の一巡プロセスにおけるレジスタの変遷を示す図である。
【図３８】図３６に示す除算回路を用いて図３２に示す「５÷２」なる除算を実行する際の、第２回目の一巡プロセスにおけるレジスタの変遷を示す図である。
【図３９】図３６に示す除算回路を用いて図３２に示す「５÷２」なる除算を実行する際の、第３回目の一巡プロセスにおけるレジスタの変遷を示す図である。
【図４０】本発明の第１の実施形態の第１回目の一巡プロセスにおける加減算要否判定法の変形例を説明する第１の図である。
【図４１】本発明の第１の実施形態の第１回目の一巡プロセスにおける加減算要否判定法の変形例を説明する第２の図である。
【図４２】本発明の第１の実施形態の第２回目以降の一巡プロセスおよび第２の実施形態のすべての一巡プロセスにおける加減算要否判定法の変形例を説明する第１の図である。
【図４３】本発明の第１の実施形態の第２回目以降の一巡プロセスおよび第２の実施形態のすべての一巡プロセスにおける加減算要否判定法の変形例を説明する第２の図である。
【図４４】本発明の第２の実施形態に、図４２および図４３で説明した加減算要否判定法の変形例を適用して、「３３÷５」なる除算を実行する演算処理プロセスを示す図である。
【図４５】図４４に示す演算処理プロセスに後続して行われる仮の商に関する演算手順を示す図である。
【図４６】図４４に示す演算処理プロセスに後続して行われる補正処理の具体的な手順を示す図である。
【図４７】本発明の第２の実施形態に、図４２および図４３で説明した加減算要否判定法の変形例を適用して、「−１３９２５÷７２３６」なる除算を実行する際に行われる３つの特徴に関連した処理を示す図である。
【図４８】本発明の第２の実施形態に、図４２および図４３で説明した加減算要否判定法の変形例を適用して、「−１３９２５÷７２３６」なる除算を実行する演算処理プロセスを示す図である。
【図４９】図４８に示す演算処理プロセスに後続して行われる仮の商に関する演算手順を示す図である。
【図５０】図４８に示す演算処理プロセスに後続して行われる補正処理の具体的な手順を示す図である。
【図５１】本発明を実施するにあたり、除算成立条件を満足させるために必要な符号拡張数αを示す図である。
【図５２】本発明の第２の実施形態に係る除算回路における具体的なレジスタの構成例を示すブロック図である。
【図５３】図５２に示すレジスタ構成を採用した場合に、各一巡プロセスで実施すべき演算処理を選択する方法を示す図である。
【図５４】本発明の第２の実施形態における被除数レジスタに対する読み書き方法の第１の例（全体シフト法）を示す図である。
【図５５】本発明の第２の実施形態における被除数レジスタに対する読み書き方法の第２の例（部分シフト法）を示す図である。
【図５６】本発明の第１の実施形態における被除数レジスタに対する読み書き方法の例（部分シフト法）を示す図である。
【図５７】本発明の第２の実施形態に係る方法で「５÷３」なる除算を実行する際に行われる３つの特徴に関連した処理を示す図である。
【図５８】図５７に示す除算の演算処理プロセスにおける各レジスタの変遷を示す第１の図である。
【図５９】図５７に示す除算の演算処理プロセスにおける各レジスタの変遷を示す第２の図である。
【図６０】被除数レジスタ２０′と符号保存用レジスタ２１とを結合した結合レジスタ２２を示す図である。
【図６１】図６０に示す結合レジスタ２２の具体的なビット構成例を示す図である。
【図６２】図５７に示す除算の別な演算処理プロセスにおける各レジスタの変遷を示す第１の図である。
【図６３】図５７に示す除算の別な演算処理プロセスにおける各レジスタの変遷を示す第２の図である。
【発明を実施するための形態】
【００４２】
以下、本発明を図示する実施形態に基づいて説明する。
【００４３】
＜＜＜  §１．  従来の一般的な除算回路における演算プロセス  ＞＞＞
はじめに、説明の便宜上、従来の一般的な除算回路において採用されている演算プロセスを簡単に述べておく。
【００４４】
＜１−１．  従来の回復法による除算演算のプロセス＞
いま、図１に示すように、「被除数Ｚ÷除数Ｄ」なる除算を行い、商Ｑおよび剰余Ｒを求める整数除算を考える。ここでは、被除数Ｚは８ビットのデータ「ｚｚｚｚｚｚｚｚ」から構成され、除数Ｄは４ビットのデータ「ｄｄｄｄ」から構成されるものとしよう。また、説明の便宜上、被除数Ｚおよび除数Ｄは、いずれも正の整数であるものとする。
【００４５】
図２は、このような除算を筆算で行う場合の基本手順を示す図である。図２(a) に示すとおり、筆算では、被除数Ｚを構成する８ビットのデータ「ｚｚｚｚｚｚｚｚ」を除算記号で囲い、その左側に除数Ｄを構成する４ビットのデータ「ｄｄｄｄ」を配置する。そして、まず、図２(b) に示すように、被除数Ｚ「ｚｚｚｚｚｚｚｚ」の下に、頭を揃えて除数Ｄ「ｄｄｄｄ」を配置し、被除数Ｚの先頭４ビット「ｚｚｚｚ」（ここでは、「部分被除数」と呼ぶ）に対して、除数Ｄ「ｄｄｄｄ」を減じる減算を行う。この減算処理で得られる「ｙｙｙｙ」なる４ビットのデータを、ここでは「部分剰余」と呼ぶことにする。
【００４６】
結局、第１回目の演算処理としては、図に矩形枠で囲って示すように、４ビット同士の減算が行われることになる。図示の例は、部分被除数≧除数Ｄの例であり、除算記号の上に１ビット分の商「１」（ここでは、このような１ビット分の商を「部分商」と呼ぶ）が立っている。除算処理は、このような処理を、桁をずらしながら繰り返すことにより行われる。
【００４７】
図３は、この除算の全演算処理プロセスを示す図である。図示のとおり、この例の場合、合計５回の演算処理が行われることになる。右欄に示す丸数字１〜５は、各演算処理の回数を示しており、各部分商の上の丸数字１〜５は、当該部分商が何回目の演算処理によって得られたものであるかを示している。以下、個々の演算処理を、それぞれ丸数字に対応させて演算処理１〜５と呼ぶことにする。
【００４８】
演算処理１は、矩形枠で囲って示すように、部分被除数「ｚｚｚｚ」から除数「ｄｄｄｄ」を引く減算処理であり、この例では「ｙｙｙｙ」なる演算結果が得られている。演算処理２では、この「ｙｙｙｙ」に被除数Ｚの第５ビット目「ｚ」を加えた５ビットのデータ「ｙｙｙｙｚ」を部分被除数として、除数「ｄｄｄｄ」を引く減算処理が行われ、「ｘｘｘｘ」なる演算結果が得られる。そして、演算処理３では、この「ｘｘｘｘ」に被除数Ｚの第６ビット目「ｚ」を加えた５ビットのデータ「ｘｘｘｘｚ」を部分被除数として、除数「ｄｄｄｄ」を引く減算処理が行われる。
【００４９】
ただ、この例の場合、演算処理３では、実際には減算は行われていない。これは、「ｘｘｘｘｚ」＜「ｄｄｄｄ」であり、部分被除数から除数が引けない状況になっているためである。図３の下段には、各演算処理１〜５における部分被除数と除数との大小関係が示されている。図示のとおり、ここに示す例では、演算処理１，２，４，５では、部分被除数≧除数であり、部分被除数から除数が引ける状況にあるが、演算処理３では、部分被除数＜除数であり、部分被除数から除数が引けない状況にある。このため、演算処理３は、実際には減算処理ではなく、無演算処理（何ら演算を行わない処理）ということになる。各演算処理の符号欄の「−」は減算処理を示すが、「φ」は無演算処理を示している。
【００５０】
無演算処理では、桁ずらし処理のみが行われることになるので、演算処理３の部分被除数が「ｘｘｘｘｚ」であるのに対して、演算処理４の部分被除数は「ｘｘｘｚｚ」になる。また、減算処理が行われた場合は、部分商「１」が立つのに対して、無演算処理が行われた場合は、部分商「０」が立つことになる。このため、演算処理１，２，４，５では部分商「１」が立ち、演算処理３では部分商「０」が立っている。結局、５回の演算処理の結果、５ビットからなる商「１１０１１」と４ビットからなる剰余「ｖｖｖｖ」が得られたことになる。
【００５１】
このように、部分被除数≧除数の場合（引ける場合）は減算処理を行い、部分被除数＜除数の場合（引けない場合）は無演算処理を行うことになるので、両者の大小関係に応じて実行すべき演算処理の種別が異なってくる。したがって、理論上は、事前に両者の大小関係を判定する必要があるが、実務上は、両者の大小関係にかかわらず減算処理を実行し、もし演算結果がマイナスになった場合（すなわち、部分被除数＜除数で、実際には引けなかった場合）には、演算結果に除数Ｄを加算する演算を行い、元の部分被除数を回復させる処理を行う方法（回復法）が採られる。
【００５２】
図４は、上述した回復法によって「１５２÷１１」なる除算を実行する演算処理プロセスを示す図である。二進表現では「１００１１０００」÷「１０１１」なる演算が行われることになる。演算の具体的な手順は、図３で説明したとおりである。まず、演算処理１では、楕円で囲って示す部分被除数「１００１」と除数「１０１１」との間での演算が行われる。この例の場合、演算処理１，４では、部分被除数＜除数となるため無演算処理が行われ、演算処理２，３，５では、部分被除数≧除数となるため減算処理が行われる。その結果、商Ｑ＝「０１１０１」（１０進表現では１３）、剰余Ｒ＝「１００１」（１０進表現では９）が得られる。
【００５３】
なお、図４に示す演算プロセスにおける演算処理１，４では、部分被除数に対して何ら演算処理がなされていないが、一般的な回復法の場合、前述したとおり、一旦、減算処理が行われ、演算結果がマイナスになることが認識された後、加算処理によって元の値に回復させる処理が行われることになる。
【００５４】
＜１−２．  除算成立条件と符号拡張＞
ここでは、除算演算を行う際に考慮すべき除算成立条件について説明する。前述したように、除算の演算プロセスでは、部分被除数と除数とについて、所定の演算処理を桁をずらしながら繰り返し実行することになるが、二進表現されたデジタルデータを取り扱う上では、部分被除数と除数との間に、所定の除算成立条件が満たされていることが要求される。すなわち、第ｉ回目の演算処理対象となる部分被除数を「Ｚｉ」で表すことにすると、第ｉ回目の演算処理を行うにあたり、「Ｚｉ＜２×Ｄ」なる除算成立条件が要求され、当該条件が満足されないと、正しい演算結果が得られなくなる。
【００５５】
被除数Ｚおよび除数Ｄが負の値をとる符号付きの除算を想定した場合、除算成立条件は、「絶対値（Ｚｉ）＜絶対値（２×Ｄ）」となる。すなわち、第ｉ回目の演算処理を行うにあたり、「部分被除数Ｚｉの絶対値が、除数Ｄの絶対値の２倍未満である」という条件が課される。
【００５６】
図５は、除算成立条件違反となる除算方法によって「１５２÷４」なる除算を実行した演算処理プロセスを示す図である。この例は、被除数Ｚおよび除数Ｄを、符号なしの二進数で表現した場合の例であり、具体的には「１００１１０００」÷「０１００」なる除算演算のプロセスが実行される。図３や図４に示す方法と同様の手順で演算プロセスを進めてゆくと、一応、演算処理１〜５を実行することができ、５回とも減算処理が行われ、商Ｑ＝「１１１１１」（１０進表現では３１）、剰余Ｒ＝「１１１００」（１０進表現では２８）が得られる。結局、「１５２÷４＝３１余り２８」なる演算結果が得られたことになる。本来、「１５２÷４＝３８」と割り切れなければならないので、除算としては誤った演算が行われたことになる。
【００５７】
このように正しい除算が行われなかった原因は、上記除算成立条件が満たされていないためである。たとえば、演算処理１では、部分被除数Ｚ１＝「１００１」と除数Ｄ＝「０１００」との間で減算処理が行われているが、２×Ｄ＝「１０００」であるから、「Ｚ１＜２×Ｄ」なる除算成立条件は満たされていない。このように最初の演算処理から除算成立条件が満たされないと、後続するすべての演算処理においても除算成立条件が満たされないことになる。結局、図５に示す例の場合、演算処理１〜５のすべてにおいて、除算成立条件が満たされていないことになる。
【００５８】
一方、第ｉ回目の演算処理時に除算成立条件が満たされていれば、そのときに得られる部分剰余Ｒｉは、Ｒｉ＜Ｄとなるので、第（ｉ＋１）回目の演算処理時にも除算成立条件が満たされることになる。別言すれば、最初の演算処理において除算成立条件が満たされていれば、後続する演算処理においても除算成立条件が満たされることになる。このような点に着目し、一般的な符号付き除算では、次に述べるような符号拡張処理を行うことにより、第１回目の演算処理時に必ず除算成立条件が満たされるような工夫が施される。
【００５９】
この符号拡張処理の説明を行う前に、まず、図６に示す除算の演算処理プロセスを考えてみよう。このプロセスは、除算成立条件違反となる除算方法によって「５÷２」なる除算を実行する演算処理プロセスを示す図であり、二進表現では、「０１０１」÷「００１０」なる演算が行われることになる。４ビット÷４ビットの演算であるため、演算回数は１回だけであるが、「０１０１」＞２×「００１０」であるため、除算成立条件を満たしていない。このため、演算結果は、商Ｑ＝１、剰余Ｒ＝３となり、正しい除算にはなっていない。この例の場合、部分商としては、「１」ではなく「２」を立てるべきであるが、二進表現では「２」を立てることができない。
【００６０】
このような問題を回避するため、図７に示す演算処理プロセスでは、予め、被除数Ｚの先頭にビット「０」を付加し（図では、この付加ビットの上にドットを付して示した）、５ビットの被除数「００１０１」÷４ビットの除数「００１０」という形式で除算処理を行っている。すなわち、最初の演算処理１では、部分被除数「００１０」から除数「００１０」を引く減算処理が行われ、第２回目の演算処理２では、部分被除数「０００１」から除数「００１０」は引けないため、無演算処理が行われている。その結果、商Ｑ＝「１０」、剰余Ｒ＝１という正しい結果が得られている。
【００６１】
要するに、この例の場合、被除数Ｚの先頭にビット「０」を１つ追加して、最初の演算処理に用いる部分被除数Ｚ１の有意桁を１桁下げることにより、除算成立条件が満たされるような工夫を施していることになる。もっとも、この例の場合は、たまたま「０」を１つ追加しただけで除算成立条件違反を回避することができたが、１つ追加するだけでは不十分なケースもある。たとえば、「１１１１」÷「００１０」の場合は、被除数の頭に２個の「０」を追加して「００１１１１」÷「００１０」とする必要があり、「１１１１」÷「０００１」の場合は、被除数の頭に３個の「０」を追加して「０００１１１１」÷「０００１」とする必要がある。
【００６２】
そこで、従来の一般的な除算回路では、被除数Ｚおよび除数Ｄがどのような値であっても必ず除算成立条件が満たされるようにするため、被除数Ｚの先頭に、除数Ｄのビット数ｎに相当する個数の「０」を追加する処理が行われている（但し、符号なし除算の場合）。一方、被除数Ｚおよび除数Ｄが、正負いずれの値もとることができる符号付き除算の場合は、被除数Ｚの符号が正の場合にはｎ個の「０」を追加し、被除数Ｚの符号が負の場合にはｎ個の「１」を追加する処理が行われる。
【００６３】
図８は、符号付き４ビットで表現可能な値の十進表現と二進表現との対応表である。このように、符号付き二進数では、１ビット目が符号ビットであり、「０」は正、「１」は負を示すことになる。残りの後続ビット（図示の例では、３ビット）は絶対値ビットということになり、図示の例の場合、＋７〜−８までの数値を４ビットのデータで表現することができる（図示の例のように、負の数を２の補数で表現した場合、絶対値部分の０と１は反転することになる。）。結局、除算成立条件違反を回避するには、被除数Ｚの１ビット目にある符号ビットと同じ値のビットをｎ個（ｎは除数Ｄのビット数）だけ当該被除数Ｚの先頭に付加する工夫を施せばよい。このような観点から、当該工夫は、一般に符号拡張処理と呼ばれている。
【００６４】
図９は、４ビット÷４ビットの符号付き除算を行う場合の符号拡張処理の一般概念を示す図である。すなわち、被除数Ｚを構成する各ビットを「ｂ１，ｂ２，ｂ３，ｂ４」とすれば、ビット「ｂ１」を４個（ｎ＝４）だけ被除数Ｚの先頭に付加して、「ｂ１，ｂ１，ｂ１，ｂ１，ｂ１，ｂ２，ｂ３，ｂ４」なる８ビットの拡張被除数Ｚ′を生成し、「８ビットの拡張被除数Ｚ′」÷「４ビットの除数Ｄ」という形式で除算演算を実行すればよい。
【００６５】
４ビットの符号付き被除数Ｚの場合、有意桁は絶対値ビット「ｂ２，ｂ３，ｂ４」の３ビットのみであり、先頭ビット「ｂ１」は０の場合は正、１の場合は負という符号を示す符号ビットである。そこで、この符号ビット「ｂ１」を４ビット分拡張して先頭に付加したとしても、実質的な演算結果に影響は及ばない。たとえば、図８に示すとおり、「０１１１」は「＋７」に対応しているが、これを拡張した「０００００１１１」も値としては「＋７」に変わりはない。同様に、「１０００」は「−８」に対応しているが、これを拡張した「１１１１１０００」も値としては「−８」に変わりはない。このように、拡張部分の符号ビットは、最初の演算処理に用いる部分被除数Ｚ１の有意桁を下げる役割を果たすだけであり、数値としての演算結果に影響を及ぼすものではない。したがって、被除数Ｚの代わりに拡張被除数Ｚ′を用いた演算を行っても、何ら問題は生じない。
【００６６】
図１０は、従来の方法で「５÷２」なる除算を実行する際に行われる符号拡張処理を示す図である。二進表現では、「０１０１」÷「００１０」なる演算が行われることになるので、除数Ｄのビット数分（ｎ＝４）だけ符号拡張を行い、先頭に「０」を４個追加して、「０００００１０１」なる拡張被除数Ｚ′が生成される。実際の除算演算は、この拡張被除数Ｚ′を用いて、「０００００１０１」÷「００１０」なる形式で実行されることになる。これにより、除算成立条件違反となる事態を回避することができる。
【００６７】
＜１−３．  従来の非回復法による除算演算のプロセス＞
前述した§１−１では、従来の一般的な回復法による除算演算のプロセスを説明した。これに対して、本発明は、非回復法による演算を行う除算回路および除算方法に関する発明である。そこで、ここでは、従来の非回復法による除算演算のプロセスを簡単に説明しておく。
【００６８】
既に述べたとおり、回復法の基本原理は、各回の演算処理において、部分被除数Ｚｉから除数Ｄを引くことができない場合には、無演算処理を行い、桁下げだけが行われるようにする、というものである（実用上は、前述のとおり、減算処理を行った上で、元に回復させる処理が行われている）。これに対して、非回復法の基本原理は、部分被除数Ｚｉから除数Ｄを引くことができないのに減算処理を行ってしまった場合でも、元に回復させる処理を行わず、次の演算処理において、引き算に代えて足し算を行う、というものである。すなわち、第ｉ回目の演算処理で引き過ぎてしまった場合には、第（ｉ＋１）回目の演算処理では、引き算の代わりに足し算を行い、「引き過ぎ」を是正する、という方針を採る。
【００６９】
図１１は、非回復法除算演算により、８ビットのデータ「ｚｚｚｚｚｚｚｚ」からなる被除数Ｚを、４ビットのデータ「ｄｄｄｄ」からなる除数Ｄで除する演算処理プロセスを示す図である。ここでは、被除数Ｚおよび除数Ｄは、いずれも符号付きの整数であり、それぞれ先頭の１ビットが符号ビットであるものとする。より具体的には、ここでは、被除数Ｚおよび除数Ｄは、いずれも正の整数であり、円で囲った先頭ビットｄ（除数Ｄの符号ビット、以下、ビット丸ｄと呼ぶ）および円で囲った先頭ビットｚ（被除数Ｚの符号ビット、以下、ビット丸ｚと呼ぶ）は、いずれも「０」であるものとしよう。また、円で囲ったビットｙ（以下、ビット丸ｙと呼ぶ）は「１」、円で囲ったビットｘ（以下、ビット丸ｘと呼ぶ）は「０」であるものとしよう。
【００７０】
非回復法の演算処理は、図１１に矩形枠で囲って示すように、除数Ｄのビット数をｎとした場合に、ｎビットの部分被除数Ｚｉとｎビットの除数Ｄとの間で行われる。このとき、減算処理だけでなく加算処理も行われる。いずれの演算処理を行うかは、部分被除数Ｚｉから除数Ｄが引けるか引けないかという要因で決定されるわけではなく、除数Ｄの先頭ビット（ビット丸ｄ）と被除数Ｚ側の特定ビットとを比較し、両者が同一か否かという要因で決定される。具体的には、比較対象ビットが同一であれば減算処理が行われ、比較対象ビットが異なれば加算処理が行われる。比較対象となる被除数Ｚ側の特定ビットとしては、第１回目の演算処理では拡張被除数Ｚ′の先頭ビット（部分被除数Ｚ１の先頭ビット：図示のビット丸ｚ）、第２回目以降の演算処理では、直前の演算処理で得られた部分剰余の先頭ビット（部分被除数Ｚｉの左隣に位置するビット：図示のビット丸ｙやビット丸ｘ）が選択される。
【００７１】
たとえば、第１回目の演算処理では、ビット丸ｄとビット丸ｚが比較対象ビットとなる。上例の場合、これら比較対象ビットはいずれも「０」で同一になるので、図示のとおり、第１回目の演算処理として減算処理が実行され、矩形枠で示すように、４ビットの部分被除数Ｚ１「ｚｚｚｚ」から４ビットの除数Ｄ「ｄｄｄｄ」が引き算され、「ｙｙｙｙ」なる４ビットの演算結果が得られる。ここで、先頭のｙ（ビット丸ｙ）は、第２回目の演算処理における比較対象ビットになる。
【００７２】
すなわち、第２回目の演算処理では、ビット丸ｄとビット丸ｙが比較されることになる。上例の場合、ビット丸ｄは「０」、ビット丸ｙは「１」であるから、両者は異なる。そこで、第２回目の演算処理としては、図に矩形枠で示すように、４ビットの部分被除数Ｚ２「ｙｙｙｚ」に４ビットの除数Ｄ「ｄｄｄｄ」が足し算され、「ｘｘｘｘ」なる４ビットの演算結果が得られる。ここで、先頭のｘ（ビット丸ｘ）は、第３回目の演算処理における比較対象ビットになる。
【００７３】
すなわち、第３回目の演算処理では、ビット丸ｄとビット丸ｘが比較されることになる。上例の場合、これら比較対象ビットはいずれも「０」で同一になるので、図に矩形枠で示すように、４ビットの部分被除数Ｚ３「ｘｘｘｚ」から４ビットの除数Ｄ「ｄｄｄｄ」が引き算される。図では、この第３回目の演算処理の演算結果や第４回目以降の演算処理の内容は示されていないが、以下、同様にして後続する回の演算処理が実行される。
【００７４】
一方、部分商は、各回の演算処理で実行された演算の種別（減算処理か加算処理か）に応じて、正の部分商「１」もしくは負の部分商「−１」が立てられる（なお、図では、負の部分商「−１」を、数字「１」の上にバーを付して示すことにする）。すなわち、減算処理が実行された場合には正の部分商「１」が立てられ、加算処理が実行された場合には負の部分商「−１」が立てられる。なお、後述するように、従来の一般的な非回復法の除算では、部分被除数Ｚｉが零の場合（図示のように、４ビット同士で演算を行う場合は、「００００」の場合）は、減算処理も加算処理も実行せずに、部分被除数Ｚｉをそのまま部分剰余Ｒｉとする無演算処理が行われ、零の部分商「０」が立てられる。
【００７５】
図１２は、従来の一般的な非回復法によって「５÷２」なる除算を実行する演算処理プロセスを示す図である。「５÷２」なる除算は、二進表現では、「０１０１」÷「００１０」なる４ビット同士の演算であるが、実際には、図１０に示すように、被除数Ｚに対して符号拡張処理が実行され、拡張被除数Ｚ′「０００００１０１」を除数Ｄ「００１０」で除する形式の演算が行われる。
【００７６】
図１２の下段には、「０００００１０１」÷「００１０」なる除算の演算プロセスが筆算の形式で示されている。なお、ここで、円で囲った「０」（以下、丸０と呼ぶ）および円で囲った「１」（以下、丸１と呼ぶ）は、上述した比較対象となるビットを示している。また、円で囲った「−」（以下、丸−と呼ぶ）は減算処理、円で囲った「＋」（以下、丸＋と呼ぶ）は加算処理、円で囲った「φ」（以下、丸φと呼ぶ）は無演算処理を示している。
【００７７】
まず、第１回目の演算処理では、図に楕円で囲って示すように、拡張被除数Ｚ′の先頭４ビットのデータが部分被除数Ｚ１となり、その先頭ビット（丸０）と除数Ｄの先頭ビット（丸０）とが比較対象ビットになる。ただ、この場合、両者は同一であるから、本来であれば、減算処理が行われるべきであるが、実際には、部分被除数Ｚ１は「００００」（すなわち、零）であるため、第１回目の演算処理としては、丸φと記述されているように無演算処理が実行される。その結果、部分被除数Ｚ１がそのまま部分剰余Ｒ１として取り扱われ、部分被除数Ｚ１の末尾ビットの上方には、無演算処理が行われたことを示す部分商「０」が立てられる。
【００７８】
続く、第２回目の演算処理では、１桁繰り下げた４ビットのデータが部分被除数Ｚ２になる。すなわち、図に楕円で囲って示すように、第１回目の演算処理で得られた部分剰余Ｒ１の下位３ビットに拡張被除数Ｚ′の第５ビット目（矩形枠で示す）を加えた４ビットのデータが部分被除数Ｚ２となる。一方、第２回目以降の演算処理では、前述したように、直前の演算処理で得られた部分剰余の先頭ビット（部分被除数を構成するデータの先頭ビットよりも１ビットだけ上位側に位置するビット）と除数Ｄの先頭ビットとが比較対象ビットになる。
【００７９】
したがって、図１２に示す例の場合、部分剰余Ｒ１の先頭ビット（すなわち、楕円で囲った部分被除数Ｚ２の先頭ビットよりも１ビットだけ上位側に位置するビット丸０）と除数Ｄの先頭ビット（丸０）とが比較される。ただ、この場合も、両者は同一であるから、本来であれば、減算処理が行われるべきであるが、実際には、部分被除数Ｚ２は「００００」（すなわち、零）であるため、第２回目の演算処理としては、丸φと記述されているように無演算処理が実行される。その結果、部分被除数Ｚ２がそのまま部分剰余Ｒ２として取り扱われ、部分被除数Ｚ２の末尾ビットの上方には、無演算処理が行われたことを示す部分商「０」が立てられる。
【００８０】
第３回目の演算処理では、更に１桁繰り下げた４ビットのデータが部分被除数Ｚ３になる。すなわち、図に楕円で囲って示すように、第２回目の演算処理で得られた部分剰余Ｒ２の下位３ビットに拡張被除数Ｚ′の第６ビット目（矩形枠で示す）を加えた４ビットのデータが部分被除数Ｚ３となる。そして、部分剰余Ｒ２の先頭ビット（すなわち、楕円で囲った部分被除数Ｚ３の先頭ビットよりも１ビットだけ上位側に位置するビット丸０）と除数Ｄの先頭ビット（丸０）とが比較される。両者は同一であるから、４ビットの部分被除数Ｚ３と４ビットの除数Ｄとの間で減算処理が行われることになる。こうして、第３回目の演算処理としては、丸−と記述されているように減算処理が実行される。
【００８１】
なお、デジタル加減算器で減算処理（引き算）を行う場合、符号を反転させて加算処理（足し算）を行うのが一般的である。そこで、以下の説明においても、減算処理については、除数Ｄを引き算する代わりに、その符号を反転させたデータ（２の補数）を足し算する処理を行うことにする。したがって、図示の例の場合、第３回目の演算処理では、除数Ｄ「００１０」（１０進表現の＋２）を引き算する代わりに、その２の補数「１１１０」（１０進表現の−２）を足し算する処理を行い、部分剰余Ｒ３「１１１１」を得ている。
【００８２】
このように、実際には、減算処理を符号を反転させた加算処理に置き換えるため、本願図面上では、混乱が生じないように、演算処理の記号として、−），＋），φ）と、丸で囲った丸−，丸＋，丸φとを区別して用いることにする。ここで、＋）と丸＋や、φ）と丸φには意味的な相違はないが、−）と丸−とは、見かけ上は異なった演算を示すことになる。すなわち、−）は通常どおり減算処理（引き算）を示す記号であるのに対して、丸−は実質的には減算処理（引き算）が行われることを示しているが、形式上は、２の補数についての加算処理（足し算）が示されている。
【００８３】
したがって、図１２における第３の演算処理は、記号丸−で示されているように、実質的には、部分被除数Ｚ３「０００１」から除数Ｄ「００１０」を引き算する処理であるが、形式上は、除数Ｄの代わりに２の補数「１１１０」を足し算する処理になっている。そして、部分被除数Ｚ３の末尾ビットの上方には、減算処理が行われたことを示す部分商「＋１」が立てられる。
【００８４】
第４回目の演算処理では、更に１桁繰り下げた４ビットのデータが部分被除数Ｚ４になる。すなわち、図に楕円で囲って示すように、第３回目の演算処理で得られた部分剰余Ｒ３の下位３ビットに拡張被除数Ｚ′の第７ビット目（矩形枠で示す）を加えた４ビットのデータが部分被除数Ｚ４となる。そして、部分剰余Ｒ３の先頭ビット（すなわち、楕円で囲った部分被除数Ｚ４の先頭ビットよりも１ビットだけ上位側に位置するビット丸１）と除数Ｄの先頭ビット（丸０）とが比較される。両者は異なるため、加算処理が行われることになる。結局、第４回目の演算処理としては、丸＋と記述されているように、４ビットの部分被除数Ｚ４と４ビットの除数Ｄとの間で加算処理が実行され、部分剰余Ｒ４「００００」が得られる。そして、部分被除数Ｚ４の末尾ビットの上方には、加算処理が行われたことを示す部分商「−１」が立てられる。
【００８５】
最後の第５回目の演算処理では、更に１桁繰り下げた４ビットのデータが部分被除数Ｚ５になる。すなわち、図に楕円で囲って示すように、第４回目の演算処理で得られた部分剰余Ｒ４の下位３ビットに拡張被除数Ｚ′の第８ビット目（矩形枠で示す）を加えた４ビットのデータが部分被除数Ｚ５となる。そして、部分剰余Ｒ４の先頭ビット（すなわち、楕円で囲った部分被除数Ｚ５の先頭ビットよりも１ビットだけ上位側に位置するビット丸０）と除数Ｄの先頭ビット（丸０）とが比較される。両者は同一であるから、減算処理が行われることになる。結局、第５回目の演算処理としては、丸−と記述されているように、４ビットの部分被除数Ｚ５と４ビットの除数Ｄとの間で減算処理（実際には、上述したように、２の補数「１１１０」を足し算する処理）が実行され、部分剰余Ｒ５「１１１１」が得られる。そして、部分被除数Ｚ５の末尾ビットの上方には、減算処理が行われたことを示す部分商「＋１」が立てられる。
【００８６】
以上で全５回の演算処理は完了する。処理完了までに必要な演算回数は、拡張被除数Ｚ′の桁数（図示の例の場合は８桁）から除数Ｄの桁数（図示の例の場合は４桁）を引いた数に１を加えた値になる。本願では、この演算回数をＫで表すことにする。こうして、全Ｋ回の演算処理が完了した段階で得られた部分剰余Ｒｋ（図示の例の場合はＲ５）は、仮の剰余Ｒ′となる。一方、全Ｋ回の演算処理が完了した段階で得られた部分商の集合（図示の例の場合は「０，０，＋１，−１，＋１」なる５桁のデータ）は、仮の商Ｑ′となる。なお、こうして得られる仮の商Ｑ′および仮の剰余Ｒ′は、あくまでも仮の値であり、真の商Ｑや真の剰余Ｒは、後述するように、仮の商Ｑ′および仮の剰余Ｒ′に対して所定の補正処理を施すことにより得られる。
【００８７】
＜１−４．  従来の非回復法による除算演算の手順＞
図１３は、上述した従来の一般的な非回復法による除算を除算回路によって実行する手順を示す流れ図である。まず、ステップＳ１１において、被除数Ｚ（図１０に示すの例の場合は「０１０１」）と除数Ｄ（図１０に示すの例の場合は「００１０」）を入力する処理が行われる。
【００８８】
続くステップＳ１２では、被除数Ｚに対する符号拡張が行われ、拡張被除数Ｚ′（図１０に示す例の場合は「０００００１０１」）が生成される。§１−２で述べたように、従来の一般的な除算回路では、被除数Ｚおよび除数Ｄがどのような値であっても必ず除算成立条件が満たされるようにするため、被除数Ｚの先頭に、除数Ｄのビット数ｎに相当する個数の「０」（被除数Ｚが正の場合）もしくは「１」（被除数Ｚが負の場合）を追加して拡張被除数Ｚ′を生成する処理が行われる。
【００８９】
次のステップＳ１３では、演算回数Ｋが決定される。前述したように、演算回数Ｋは、拡張被除数Ｚ′の桁数から除数Ｄの桁数を引いた数に１を加えた値として決定される。これは、図１２の例を見ればわかるとおり、第１回目の演算処理を、拡張被除数Ｚ′の先頭に除数Ｄの桁を揃えた位置で行い、以下、演算位置を１桁ずつずらしながら、拡張被除数Ｚ′の末尾の桁についての演算が完了するまで、演算処理を繰り返してゆくことを意味する。
【００９０】
具体的には、まず、ステップＳ１４において、回数パラメータｉを初期値１に設定した上で、ステップＳ１５〜Ｓ２２の処理が、ステップＳ２３を介してｉを１ずつ増加させながら繰り返されることになる。ここでは、このステップＳ１５〜Ｓ２２の処理を「一巡プロセス」と呼ぶことにする。
【００９１】
この「一巡プロセス」の最初の処理であるステップＳ１５では、第ｉ回目の演算処理として、加減算が必要か否かが判定される。§１−３で述べたとおり、非回復法による除算では、各回の演算処理として、減算処理、加算処理、無演算処理の３通りの処理が選択的に実行される。なお、無演算処理は、加算や減算という実質的な演算を行わない処理であるが、本願では、便宜上、３通りの「演算処理」の一形態として取り扱うことにする。ステップＳ１５の処理は、減算処理もしくは加算処理を行うべきか（加減算必要）、無演算処理を行うべきか（加減算不要）のいずれかの判断を行う処理である。§１−３で述べたとおり、当該判断は、第ｉ回目の部分被除数Ｚｉが零か否かに基づいて行われる。すなわち、部分被除数Ｚｉが零の場合（全ビットが０の場合）は加減算不要と判断され、それ以外の場合は加減算必要と判断される。
【００９２】
加減算不要と判断された場合は、ステップＳ１５からステップＳ１６へと分岐し、無演算処理が実行される。すなわち、部分被除数Ｚｉの末尾ビットに対応する桁に零の部分商Ｑｉ＝０を立て、部分被除数Ｚｉをそのまま部分剰余Ｒｉとする処理が行われる。
【００９３】
一方、加減算必要と判断された場合は、ステップＳ１５からステップＳ１７へと分岐し、減算処理・加算処理のいずれを行うべきかを決定するための符号の比較が行われる。具体的には、直前の演算処理（第（ｉ−１）回目の一巡プロセスにおける演算処理）で得られた部分剰余Ｒ（ｉ−１）の符号と、除数Ｄの符号とが比較される。但し、第１回目（ｉ＝１）の場合は、まだ演算処理は行われていないため、直前の演算処理で得られた部分剰余Ｒの符号の代わりに拡張被除数Ｚ′の符号が比較対象となる。前述したとおり、符号付き二進数では先頭ビットが符号ビットであるため、実際には、比較対象となる２つの数値の先頭ビット同士を比べ、数値が同じであれば同符号、数値が異なれば異符号ということになる。
【００９４】
そして、同符号の場合には、ステップＳ１８からステップＳ１９へと分岐して減算処理が実行され、異符号の場合には、ステップＳ１８からステップＳ２０へと分岐して加算処理が実行される。ステップＳ１９の減算処理では、部分被除数Ｚｉの末尾ビットに対応する桁に正の部分商Ｑｉ＝１を立て、部分被除数Ｚｉから除数Ｄを引き算した結果を部分剰余Ｒｉとする処理が行われる。これに対して、ステップＳ２０の加算処理では、部分被除数Ｚｉの末尾ビットに対応する桁に負の部分商Ｑｉ＝−１を立て、部分被除数Ｚｉに除数Ｄを足し算した結果を部分剰余Ｒｉとする処理が行われる。
【００９５】
図１２に示す例の場合、円で囲ったビット０（丸０）もしくはビット１（丸１）が、ステップＳ１７の符号比較処理で利用される比較対象ビットになる。そして、丸数字１，２で示す第１回目および第２回目の一巡プロセスでは、ステップＳ１６の無演算処理が選択され、丸数字３，５で示す第３回目および第５回目の一巡プロセスでは、ステップＳ１９の減算処理が選択され、丸数字４で示す第４回目の一巡プロセスでは、ステップＳ２０の加算処理が選択されたことになる。
【００９６】
こうして、無演算処理、減算処理、加算処理のいずれかが実行されたら、続くステップＳ２１において、回数パラメータｉがステップＳ１３で決定した演算回数Ｋに達しているか否かが判断される。ｉ＝Ｋになっていたら、後述する補正処理（図１４のステップＳ２４以降の処理）へと進むことになる。ｉ＜Ｋの場合は、ステップＳ２２の更新処理が行われる。
【００９７】
ステップＳ２２の更新処理の目的は、第ｉ回目の演算処理で得られた部分剰余Ｒｉに基づいて、第（ｉ＋１）回目の演算処理で用いる部分被除数Ｚ（ｉ＋１）を作成することである。具体的には、部分剰余Ｒｉを１ビット分シフトアップし（もとの最上位ビットは押し出されて削除され、第（ｊ＋１）番目のビットが第ｊ番目のビットに移動する）、末尾に拡張被除数Ｚ′の後続ビットを追加することにより、第（ｉ＋１）回目の部分被除数Ｚ（ｉ＋１）が作成される。
【００９８】
たとえば、図１２に示す例の場合、第１回目の演算処理で得られた部分剰余Ｒ１に基づいて第２回目の演算処理で用いる部分被除数Ｚ２が作成される。具体的には、部分剰余Ｒ１「００００」を１ビット分シフトアップし（先頭の「０」を削除して「０００」とする）、末尾に拡張被除数Ｚ′の後続ビット（第５ビット目の「０」）を追加して、部分被除数Ｚ２「００００」を作成する。
【００９９】
こうして、更新処理が完了したら、ステップＳ２３において、回数パラメータｉを１だけ増加させれば、一巡プロセスは完了である。このようにして、回数パラメータｉがＫに達するまで、ステップＳ１５〜Ｓ２２の一巡プロセスが繰り返される。
【０１００】
なお、ｉがＫに達した場合、ステップＳ２１から図１４のステップＳ２４に分岐することになるので、第Ｋ回目の一巡プロセスでは、ステップＳ２２の更新処理は省かれる。これは、第（Ｋ＋１）回目の一巡プロセスは存在しないため、部分被除数Ｚ（Ｋ＋１）を作成する必要がないためである。もちろん、全Ｋ回の一巡プロセスを全く同じ手順にした方が回路設計の上で好ましい場合は、ステップＳ２１とＳ２２の順序を入れ替えて、第Ｋ回目も更新処理を実行するようにしてもかまわない（この場合、第Ｋ回目の更新処理は意味のない処理ということになる）。
【０１０１】
＜１−５．  従来の非回復法による補正処理＞
図１２に示す例の場合、全５回の演算処理により、仮の商Ｑ′「０，０，＋１，−１，＋１」と仮の剰余Ｒ′「１１１１」が得られることになるが、非回復法によって得られたこれらの値は、あくまでも仮の値であり、真の商Ｑや真の剰余Ｒを得るためには、これらに対して所定の補正処理を施す必要がある。図１４は、図１３に示す手順に後続して行われる補正処理手順を示す流れ図である。すなわち、図１３のステップＳ２１において、ｉがＫに達していた場合、全Ｋ回の一巡プロセスは完了し、図１４のステップＳ２４以降に示す補正処理が実行されることになる。
【０１０２】
まず、ステップＳ２４では、仮の商Ｑ′に対する演算が行われる。仮の商Ｑ′は、全Ｋ回の演算処理によってそれぞれ立てられた１ビットの部分商から構成され、実行した演算処理の種別を示すビットを対応桁に並べたものである。すなわち、減算処理が実行された場合は正の部分商「＋１」、加算処理が実行された場合は負の部分商「−１」、無演算処理が実行された場合は零の部分商「０」が立てられている。もっとも、二進数の１つの桁で「−１」なる値を表現することはできないので、実際には、後述するように、正の部分商を格納するための正の商レジスタと、負の部分商を格納するための負の商レジスタとが別個に設けられる。
【０１０３】
そこで、ステップＳ２４では、正の商レジスタに格納されている正の商から、負の商レジスタに格納されている負の商を引く減算処理を行うことにより、「−１」なる桁を含まない、通常の二進数で表現された商を導出する処理が行われる。このように、ステップＳ２４の処理は、商の表現形式を変換する処理であり、商の値が変化するわけではない。したがって、ステップＳ２４の演算処理後に得られた商も、依然として仮の商であることに代わりはない。ここでは、このステップＳ２４の演算処理後に得られた商を「仮の商Ｑ′（演算済）」と呼ぶことにする。
【０１０４】
図１５は、図１２に示す仮の商Ｑ′に対して、ステップＳ２４の演算を実行した具体例を示す図である。上述したように、仮の商Ｑ′「０，０，＋１，−１，＋１」は、実際には、正の商「０，０，１，０，１」（仮の商Ｑ′の「＋１」の部分のみビット１、他をビット０としたもの）と、負の商「０，０，０，１，０」（仮の商Ｑ′の「−１」の部分のみビット１、他をビット０としたもの）とに分けて、正の商レジスタおよび負の商レジスタに格納されている。ここで、正の商のビット１は、減算処理によって立てられた部分商であり、負の商のビット１は、加算処理によって立てられた部分商である。図１４に示すステップＳ２４では、正の商から負の商を減ずる演算が行われ、図１５に示すとおり、仮の商Ｑ′（演算済）として、「０００１１」なる値が得られることになる。
【０１０５】
続いて、図１４のステップＳ２５では、全Ｋ回の一巡プロセスにおいて、最後（第Ｋ回目）に得られた部分剰余Ｒｋ（すなわち、仮の剰余Ｒ′）が、０か否かの確認が行われる。もし、仮の剰余Ｒ′が０であった場合は、補正を行う必要はないので、仮の商Ｑ′をそのまま真の商Ｑとし、仮の剰余Ｒ′をそのまま真の剰余Ｒ（実際には０）とし、ステップＳ２６からステップＳ３３へと進めばよい。
【０１０６】
仮の剰余Ｒ′が０でなかった場合は、ステップＳ２６からステップＳ２７へと進み、当該仮の剰余Ｒ′の符号と被除数Ｚの符号（拡張被除数Ｚ′の符号でも同じ）とを比較する（実際には、両者の最上位に位置する符号ビットが同一か否かの判断を行う）。そして、両者が同符号であった場合は、補正を行う必要はないので、やはり仮の商Ｑ′をそのまま真の商Ｑとし、仮の剰余Ｒ′をそのまま真の剰余Ｒ（実際には０）とし、ステップＳ３３へと進めばよい。一方、両者が異符号であった場合は、補正を行う必要がある。仮の剰余Ｒ′の符号が被除数Ｚの符号と異なるということは、本来は行うべきでない処理が行われてしまっている（いわば、引き過ぎや足し過ぎが生じている）ことを意味する。このため、仮の商Ｑ′を１だけ補正するとともに、仮の剰余Ｒ′を除数Ｄの分だけ補正する必要が生じる。
【０１０７】
ただ、符号付きの除算演算の場合、仮の商Ｑ′の増減補正や、仮の剰余Ｒ′の増減補正は、符号を考慮して行う必要がある。そこで、補正の必要がある場合は、ステップＳ２８からステップＳ２９へと進み、まず、被除数Ｚの符号（拡張被除数Ｚ′の符号でも同じ）と除数Ｄの符号とを比較する（実際には、両者の最上位に位置する符号ビットが同一か否かの判断を行う）。そして、両者が同符号であった場合は、ステップＳ３１へと進み、仮の商Ｑ′を１だけ減少補正して真の商Ｑを定め、仮の剰余Ｒ′に除数Ｄを加えて真の剰余Ｒを定める補正処理を行う。一方、両者が異符号であった場合は、ステップＳ３２へと進み、仮の商Ｑ′を１だけ増加補正して真の商Ｑを定め、仮の剰余Ｒ′から除数Ｄを減じて真の剰余Ｒを定める補正処理を行う。
【０１０８】
図１２に示す例の場合、仮の剰余Ｒ′「１１１１」は零ではないので、図１４の流れ図では、ステップＳ２６からステップＳ２７へと進み、仮の剰余Ｒ′の符号ビット「１」と被除数Ｚの符号ビット「０」（拡張被除数Ｚ′の符号ビットでもよい）とが比較される。両者は同じではないので（すなわち、仮の剰余Ｒ′と被除数Ｚとは異符号なので）、ステップＳ２８からステップＳ２９へと進み、被除数Ｚの符号ビット「０」（拡張被除数Ｚ′の符号ビットでもよい）と除数Ｄの符号ビット「０」とが比較される。両者は同じなので（すなわち、被除数Ｚと除数Ｄとは同符号なので）、ステップＳ３０からステップＳ３１へと進み、仮の商Ｑ′を１だけ減少補正して真の商Ｑを決定し、仮の剰余Ｒ′に除数Ｄを加えて真の剰余Ｒを求める補正処理を行う。
【０１０９】
図１６は、このようなステップＳ３１における補正処理手順の具体例を示す図である。すなわち、商については、図１６(a) に示すように、図１５で求めた仮の商Ｑ′（演算済）「０００１１」に対して１だけ減少補正することにより、真の商Ｑ「０００１０」（１０進表現では２）が定まる。一方、剰余については、図１６(b) に示すように、仮の剰余Ｒ′「１１１１」に除数Ｄ「００１０」を加える補正処理を行うことにより、真の剰余「０００１」（１０進表現では１）が求まる。
【０１１０】
こうして、真の商Ｑおよび真の剰余Ｒが定まったら、最後にステップＳ３３において、これらを除算の結果として出力すればよい。以上が、従来の一般的な非回復法による除算演算プロセスの手順である。
【０１１１】
＜＜＜  §２．  本発明の第１の実施形態  ＞＞＞
続いて、本発明の説明を行う。本発明に係る除算は、除数Ｄに対して正規化処理を施すことを前提とするものである。そこで、ここでは、まず、二進数に対する一般的な正規化処理について簡単に説明しておく。
【０１１２】
＜２−０．  二進数の正規化処理＞
図１７は、一般的な正の数の正規化の一例を示す図である。いま、図１７(a) に示すように、符号付きの二進数で表現された８ビットのデータ「０００１１０１０」について、そのビット構成を考えてみよう。前述したとおり、符号付きの二進数では、先頭の符号ビットにより符号が示され、残りのビットにより絶対値が示される。図示の例の場合、先頭の１ビット「０」により符号「正」が示され、残りの７ビット「００１１０１０」により絶対値「２６」が示され、全体として、十進表現の「＋２６」なる数値が示されている。ただ、絶対値「２６」を示す有意桁は「１１０１０」の部分（図の太枠内）であり、第２，３ビット目の「００」は、固定８ビット長のデータを採用する上で空欄を埋めるための冗長桁になっている。二進数に対する正規化処理とは、このような冗長桁を削除し、有意桁を桁上げする処理と言うことができる。
【０１１３】
図１７(a) に示す８ビットのデータ「０００１１０１０」を上位側に１ビットだけシフトすると、図１７(b) に示すデータ「００１１０１００」が得られる（最下位ビットには０を追加する）。符号ビットの値は変化しないが、太枠で示す有意桁は１ビットだけ桁上げされ、十進表現では「＋５２」となり、値は元の２倍になる。このデータを、上位側に更に１ビットだけシフトすると、図１７(c) に示すデータ「０１１０１０００」が得られる（やはり最下位ビットには０を追加する）。この場合も、符号ビットの値は変化しないが、太枠で示す有意桁は更に１ビットだけ桁上げされ、十進表現では「＋１０４」となり、値は元の４倍になる。
【０１１４】
図１７(c) に示す状態から、更に１ビットのシフトを行うと、符号ビットが「０」から「１」に変わってしまう。正規化処理は、符号ビットが変わる直前までシフトさせる処理であり、図示の例の場合、図１７(c) に示す状態が正規化処理を完了したときの状態ということになる。別言すれば、図１７(a) に示すように、先頭の符号ビットと、太枠で示した有意桁との間に挟まれている冗長桁がなくなるまで、全体を上位側にシフトさせる処理を行えば、正規化処理が完了することになる。
【０１１５】
図１８は、負の数の正規化の一例を示す図である。図１８(a) に示す８ビットのデータ「１１１００１１０」は、先頭の１ビット「１」により符号「負」が示され、残りの７ビット「１１００１１０」により絶対値「２６」が示され、全体として、十進表現の「−２６」なる数値が示されている。ただ、絶対値「２６」を示す有意桁は「００１１０」の部分（図の太枠内：「１１０１０」の２の補数に対応）であり、第２，３ビット目の「１１」は、固定８ビット長のデータを採用する上で空欄を埋めるための冗長桁になっている。したがって、正の数の場合と同様に、この冗長桁がなくなるまで、全体を上位側にシフトさせる処理を行えば、正規化処理が完了することになる。
【０１１６】
図１８(a) に示す８ビットのデータ「１１１００１１０」を上位側に１ビットだけシフトすると、図１８(b) に示すデータ「１１００１１００」が得られる（最下位ビットには０を追加する）。符号ビットの値は変化しないが、太枠で示す有意桁は１ビットだけ桁上げされ、十進表現では「−５２」となり、値は元の２倍になる。このデータを、上位側に更に１ビットだけシフトすると、図１８(c) に示すデータ「１００１１０００」が得られる（やはり最下位ビットには０を追加する）。この場合も、符号ビットの値は変化しないが、太枠で示す有意桁は更に１ビットだけ桁上げされ、十進表現では「−１０４」となり、値は元の４倍になる。更に１ビットのシフトを行うと、符号ビットが「１」から「０」に変わってしまうため、正規化処理は、図１８(c) に示す状態で完了である。
【０１１７】
結局、符号付きの二進数に対する正規化処理とは、先頭ビットと第２番目のビットとが異なる値になるまで、全ビットを上位側に１ビットだけずらし末尾にビット「０」を付加するシフト動作を繰り返す処理ということになる。本発明に係る除算では、演算前に、除数Ｄに対して正規化処理を施しておくことになる。ただ、この正規化処理により、除数Ｄは２のべき乗倍になってしまうため、最後に剰余の補正を行う必要が生じる。
【０１１８】
＜２−１．  第１の実施形態の特徴＞
続いて、本発明の第１の実施形態を説明する。本発明による除算演算のプロセスは、基本的には、§１で述べた非回復法による従来の除算演算のプロセスを踏襲するものであるが、図１９に示すように、３つの特徴を有している。ここでは、ｍビットの符号付き二進数として与えられた被除数Ｚと、ｎビットの符号付き二進数として与えられた除数Ｄとの間で除算演算を行う場合について、この３つの特徴を説明する。
【０１１９】
まず、第１の実施形態の特徴１は、被除数Ｚに対して、αビット分だけ符号拡張を行う点である。既に、§１−２で述べたとおり、二進数についての除算を行うには、「部分被除数Ｚｉの絶対値が、除数Ｄの絶対値の２倍未満である」という除算成立条件が満たされている必要がある。しかも、第１回目の演算処理時に除算成立条件が満たされていれば、第２回目以降の演算処理時にも条件が満たされる、という性質を有している。そこで、従来から、被除数Ｚに対する符号拡張処理を行い、第１回目の演算処理時に除算成立条件が満たされるような工夫が施す方法が採用されている。
【０１２０】
ただ、従来の一般的な除算回路では、被除数Ｚおよび除数Ｄがどのような値であっても必ず除算成立条件が満たされるようにするため、被除数Ｚの先頭に、除数Ｄのビット数ｎに相当する個数の「０」（被除数Ｚが正の場合）もしくは「１」（被除数Ｚが負の場合）を追加する符号拡張処理が行われている。別言すれば、先頭に追加する「０」もしくは「１」の個数を符号拡張数αとすれば、従来の一般的な除算回路では、α＝ｎなる設定が行われていたことになる。たとえば、図１０に示す例の場合、４ビットの被除数Ｚ（ｍ＝４）と４ビットの除数Ｄ（ｎ＝４）についての除算を行うために、符号拡張数α＝４として、被除数Ｚの先頭に「００００」なる４ビットのデータを付加して、８ビットの拡張被除数Ｚ′「０００００１０１」を作成する処理が行われている。
【０１２１】
しかしながら、拡張被除数Ｚ′の桁数が増えれば増えるほど、除算に必要な演算回数Ｋも増えることになる。たとえば、図１０に示す「５÷２」の演算を行う場合、図１２に示すように、Ｋ＝５に設定して、全５回の演算処理が必要になる。除算処理を高速化するためには、できるだけ演算回数Ｋを減らし、図１３の流れ図のステップＳ１５〜Ｓ２２までの一巡プロセスの繰り返し回数を減らすことが効果的である。
【０１２２】
本願発明者は、予め除数Ｄに対して§２−０で述べた正規化処理を施しておけば、符号拡張数αをｎより小さくしても除算成立条件が満たされる、との着想に基づき（この着想については、§５で詳述する）、ｎ−１≧αに設定して演算回数Ｋの低減を図ることにした。なお、除数Ｄに対して正規化処理を施すという前提では、ここで述べる第１の実施形態の場合の符号拡張数αの最小値は１になる（詳細は、§５を参照）。したがって、第１の実施形態の特徴１は、符号拡張処理における符号拡張数αの値を、従来のｎ（除数Ｄのビット数）ではなく、ｎ−１≧α≧１の範囲内の値に設定した点ということになる。もちろん、符号拡張数αの値を最小値１に設定すれば、演算回数Ｋを最も低減させる効果が得られるので、実用上は、α＝１に設定するのが好ましい。
【０１２３】
第１の実施形態の特徴２は、図１９に示すとおり、除数Ｚを正規化する点である。本発明では、除数Ｚに対する正規化処理が不可欠であり、上述したように、この正規化処理を前提とすることにより、符号拡張数αの低減を図ることが可能になる。具体的な正規化処理の内容は、既に§２−０で述べたとおりである。ここでは、この正規化処理後の除数Ｄを正規化除数Ｄ′と呼び、正規化処理によってシフトされたビット数を桁上数βと呼ぶことにする。たとえば、図１７や図１８に示す例の場合、各図(a) に示されているデータを除数Ｄとした場合、各図(c) に示されているデータが正規化除数Ｄ′ということになる。この場合、正規化処理のために合計２ビットのシフトが行われているため、桁上数βはβ＝２ということになる。この正規化処理により、正規化除数Ｄ′は、除数Ｄの２のβ乗倍の値になる。
【０１２４】
なお、正規化処理を行う際の桁上数βは、元の除数Ｄの内容によって異なる。たとえば、除数Ｄが、図１７(a) に示す「０００１１０１０」であった場合は、合計２ビットのシフトを行うことにより、正規化除数Ｄ′「０１１０１０００」が得られ、桁上数β＝２ということになるが、除数Ｄが、「００００１１０１」であった場合は、合計３ビットのシフトを行うことにより、正規化除数Ｄ′「０１１０１０００」が得られ、桁上数β＝３になる。また、除数Ｄが、「０１１０１０００」であった場合は、そのままの値が正規化除数Ｄ′ということになるので、桁上数β＝０になる。
【０１２５】
第１の実施形態の特徴３は、図１９に示すとおり、演算回数Ｋを、Ｋ＝１＋（ｍ−ｎ）＋α＋βなる式で求める点である。本発明は、ｍビットの符号付き整数で表される被除数Ｚとｎビットの符号付き整数で表される除数Ｄとに基づく整数除算に係るものであり、整数の商Ｑと整数の剰余Ｒを得ることを目的とする。一般に、ｍビットの符号付き整数をｎビットの符号付き整数で除する場合の演算回数Ｋは、Ｋ＝１＋（ｍ−ｎ）回で与えられる。たとえば、図４に示す例の場合、被除数Ｚは８ビット、除数Ｄは４ビットであるため、演算回数Ｋは、Ｋ＝１＋（８−４）＝５になる。
【０１２６】
演算回数Ｋをこのように設定して、第１回目の演算処理を、拡張被除数Ｚ′の先頭に除数Ｄの桁を揃えた位置で行うようにすれば、以下、演算位置を１桁ずつずらしながら、拡張被除数Ｚ′の末尾の桁についての演算が完了するまで、演算処理を繰り返してゆくことができる。そして、全Ｋ回の演算処理を完了した時点で得られる仮の商Ｑ′および仮の剰余Ｒ′（第Ｋ回目の部分剰余Ｒｋ）をβビットだけ桁下げして得られる剰余は、除算結果として正しい桁をもった整数になる。別言すれば、第Ｋ回目の演算処理時に得られる仮の商Ｑ′およびβビットだけ桁下げ後の仮の剰余Ｒ′の末尾のビットの桁は、小数点のすぐ左隣りの桁になるので、小数点位置の調整などの処理を行う必要はない。
【０１２７】
ただ、ここで述べる第１の実施形態では、特徴１に示すとおり、被除数Ｚに対しては、αビットだけ符号を拡張する処理が行われており、拡張被除数Ｚ′のビット数は、αビットだけ増えることになる。また、特徴２に示すとおり、除数Ｄに対しては、正規化処理により、有意桁がβビットだけ上位側にシフトしているため、その分だけ演算回数を増やす必要がある。このような理由により、第１の実施形態の場合、特徴３に示すように、演算回数Ｋを、Ｋ＝１＋（ｍ−ｎ）＋α＋βなる式で定めると、全Ｋ回の演算処理を完了した時点で得られる仮の商Ｑ′およびβビットだけ桁下げ後の仮の剰余Ｒ′（第Ｋ回目の部分剰余Ｒｋ）は、除算結果として正しい桁をもった整数になる。
【０１２８】
結局、本発明の第１の実施形態では、特徴２に示すように、除数Ｄに対する正規化を行うようにしたため、特徴１に示すように、符号拡張数αを除数Ｄのビット数ｎよりも小さな値に設定することができるようになり、特徴３に示す式で定まる演算回数Ｋを従来よりも小さく設定することができるようになる。その結果、除算に必要な演算回数を低減することが可能になり、高速な非回復法除算を実行することができるようになる。しかも、全Ｋ回の演算処理に基づいて得られる最終的な商Ｑおよび剰余Ｒは、除算結果として正しい桁をもった整数になるため、本除算回路の外部で小数点位置を調整するための余分な構成要素は不要になり、回路構成を単純化することも可能になる。
【０１２９】
＜２−２．  第１の実施形態による除算演算のプロセス＞
ここでは、図１９に示す３つの特徴をもった除算演算を行うことにより正しい除算がなされることを、「５÷２」なる簡単な除算についての演算プロセスを例にとりながら説明する。図２０に示すとおり、「５÷２」なる演算は、二進表示では「０１０１」÷「００１０」なる演算になる。ここで、被除数Ｚ「０１０１」のビット数ｍは４ビット、除数Ｄ「００１０」のビット数ｎは４ビットである。
【０１３０】
まず、特徴１により、被除数Ｚをαビット符号拡張する処理が行われる。前述したとおり、第１の実施形態における符号拡張数αの最小値は１であるが、ここでは、後述する第２の実施形態との対比を容易にするため、符号拡張数αとして、α＝２なる設定を行った例を述べることにする（後述するように、第２の実施形態における符号拡張数αの最小値は２になる）。したがって、ここに示す例の場合、図２０の「特徴１」に示すとおり、被除数Ｚ「０１０１」に対して、２ビット分の符号拡張処理が行われ、６ビットからなる拡張被除数Ｚ′「０００１０１」が作成される（図において、上にドットが付された０は、拡張部分を示している）。
【０１３１】
次に、特徴２により、除数Ｄに対する正規化処理が行われる。ここに示す例の場合、図２０の「特徴２」に示すとおり、除数Ｄ「００１０」に対して、１ビット分のシフトを行うことにより、正規化除数Ｄ′「０１００」が作成される。この場合、桁上数βは、β＝１になり、正規化除数Ｄ′の値は、元の除数Ｄの２倍、すなわち、２×２＝４ということになる。
【０１３２】
そして、特徴３により、演算回数Ｋが、Ｋ＝１＋（ｍ−ｎ）＋α＋βなる式に基づいて決定される。ここに示す例の場合、図２０の「特徴３」に示すとおり、上式に、ｍ＝４、ｎ＝４、α＝２、β＝１を代入することにより、Ｋ＝４が得られる。
【０１３３】
図２１は、こうして得られた拡張被除数Ｚ′「０００１０１」と正規化除数Ｄ′「０１００」とについて、具体的な除算を実行する演算処理プロセスを示す図である。Ｋ＝４であるため、全４回の演算処理が実行される。図２１の下段の右欄に示す丸数字１〜４は、各演算処理の回数を示しており、各部分商の上の丸数字１〜４は、当該部分商が何回目の演算処理によって得られたものであるかを示している。個々の演算処理における具体的な処理手順は、§１−３において、従来の非回復法による除算演算プロセスとして述べた手順と基本的には同じである（図１２参照）。
【０１３４】
すなわち、図２１の下段に示す、「０００１０１」÷「０１００」なる除算の演算プロセスにおいて、楕円で囲った部分が、各回の部分被除数Ｚｉ（ｉ＝１〜４）であり、この部分被除数Ｚｉ（いずれも４ビット）と正規化除数Ｄ′（こちらも４ビット）との間で、減算処理もしくは加算処理（部分被除数Ｚｉが零の場合は、無演算処理）が行われる。また、円で囲った「０」（丸０）および円で囲った「１」（丸１）は、実行する演算種別を決定するための比較対象ビットであり、両ビットの値が同一である場合は減算処理、異なる場合は加算処理が行われる。４ビット同士の演算結果を示す４ビットの値は部分剰余Ｒｉになり、この部分剰余Ｒｉの下位３ビットに、拡張被除数Ｚ′の後続ビットを付加したものが、第（ｉ＋１）回目の演算処理で用いる部分被除数Ｚ（ｉ＋１）ということになる。
【０１３５】
具体的には、まず、第１回目の演算処理では、図に楕円で囲って示すように、拡張被除数Ｚ′の先頭４ビットのデータが部分被除数Ｚ１となり、その先頭ビット（丸０）と正規化除数Ｄ′の先頭ビット（丸０）とが比較される。この場合、両者は同一であるから、第１回目の演算処理としては、「丸−」と記述されているように減算処理が実行される。
【０１３６】
なお、既に述べたとおり、本願の図における記号「丸−」は、実質的には減算処理（引き算）が行われることを示しているが、形式上は、２の補数についての加算処理（足し算）を示すものである。したがって、図示の例の場合、第１の演算処理の部分の下段には、正規化除数Ｄ′「０１００」の代わりに、２の補数「１１００」が記されており、実際には、「０００１」と「１１００」との加算が行われ、部分剰余Ｒ１「１１０１」が得られる。そして、部分被除数Ｚ１の末尾ビットの上方には、減算処理が行われたことを示す部分商「＋１」が立てられる。
【０１３７】
続く、第２回目の演算処理では、１桁繰り下げた４ビットのデータが部分被除数Ｚ２になる。すなわち、図に楕円で囲って示すように、第１回目の演算処理で得られた部分剰余Ｒ１の下位３ビットに拡張被除数Ｚ′の第５ビット目（矩形枠で示す）を加えた４ビットのデータが部分被除数Ｚ２となる。一方、第２回目以降の演算処理では、直前の演算処理で得られた部分剰余の先頭ビットが比較対象ビットになるので、第２回目の演算処理では、部分剰余Ｒ１の先頭ビット（丸１）、すなわち、部分被除数Ｚ２を構成するデータの先頭ビットよりも１ビットだけ上位側に位置するビットと、正規化除数Ｄ′の先頭ビット（丸０）との比較が行われる。両者は異なるため、加算処理が行われることになる。結局、第２回目の演算処理としては、図に丸＋と記述されているように、４ビットの部分被除数Ｚ２「１０１０」と４ビットの正規化除数Ｄ′「０１００」との間で加算処理が実行され、部分剰余Ｒ２「１１１０」が得られる。そして、部分被除数Ｚ２の末尾ビットの上方には、加算処理が行われたことを示す部分商「−１」が立てられる。
【０１３８】
第３回目の演算処理では、更に１桁繰り下げた４ビットのデータが部分被除数Ｚ３になる。すなわち、図に楕円で囲って示すように、第２回目の演算処理で得られた部分剰余Ｒ２の下位３ビットに拡張被除数Ｚ′の第６ビット目（矩形枠で示す）を加えた４ビットのデータが部分被除数Ｚ３となる。そして、部分剰余Ｒ２の先頭ビット（すなわち、楕円で囲った部分被除数Ｚ３の先頭ビットよりも１ビットだけ上位側に位置するビット丸１）と正規化除数Ｄ′の先頭ビット（丸０）とが比較される。両者は異なるため、加算処理が行われることになる。結局、第３回目の演算処理としては、丸＋と記述されているように、４ビットの部分被除数Ｚ３「１１０１」と４ビットの正規化除数Ｄ′「０１００」との間で加算処理が実行され、部分剰余Ｒ３「０００１」が得られる。そして、部分被除数Ｚ３の末尾ビットの上方には、加算処理が行われたことを示す部分商「−１」が立てられる。
【０１３９】
最後の第４回目の演算処理では、更に１桁繰り下げた４ビットのデータが部分被除数Ｚ４になる。すなわち、図に楕円で囲って示すように、第３回目の演算処理で得られた部分剰余Ｒ３の下位３ビットに拡張被除数Ｚ′の第７ビット目（実際には、図に星印を記したように、拡張被除数Ｚ′には第７ビット目は存在しないので、末尾に０を補うことになる）を加えた４ビットのデータが部分被除数Ｚ４となる。そして、部分剰余Ｒ３の先頭ビット（すなわち、楕円で囲った部分被除数Ｚ４の先頭ビットよりも１ビットだけ上位側に位置するビット丸０）と正規化除数Ｄ′の先頭ビット（丸０）とが比較される。両者は同一であるから、減算処理が行われることになる。結局、第４回目の演算処理としては、丸−と記述されているように、４ビットの部分被除数Ｚ４と４ビットの正規化除数Ｄ′との間で減算処理（実際には、上述したように、２の補数「１１００」を足し算する処理）が実行され、部分剰余Ｒ４「１１１０」が得られる。そして、部分被除数Ｚ４の末尾ビットの上方には、減算処理が行われたことを示す部分商「＋１」が立てられる。
【０１４０】
以上で全４回の演算処理は完了する。こうして、全Ｋ回（この例では、Ｋ＝４）の演算処理が完了した段階で得られた部分剰余Ｒｋ（図示の例の場合はＲ４）は、仮の剰余Ｒ′となる。一方、全Ｋ回の演算処理が完了した段階で得られた部分商の集合（図示の例の場合は「＋１，−１，−１，＋１」なる４桁のデータ）は、仮の商Ｑ′となる。後述するように、これら仮の商Ｑ′および仮の剰余Ｒ′に対して所定の補正処理を施すことにより、真の商Ｑおよび真の剰余Ｒが得られる。
【０１４１】
＜２−３．  第１の実施形態による除算演算の手順＞
図２２は、本発明の第１の実施形態に係る非回復法による除算演算の手順を示す流れ図である。この図２２に示す手順は、図１３に示した従来の一般的な非回復法による除算手順をほぼ踏襲したものになっている。そこで、図１３の流れ図に対応するステップが存在する場合は、当該対応ステップと同一の記号を用い、末尾にＡを付して示すことにした。以下、図２０，図２１に示す具体例に即して、図２２の流れ図に示す手順を説明する。
【０１４２】
まず、ステップＳ１１Ａにおいて、被除数Ｚと除数Ｄを入力する処理が行われる。図２０に示す例の場合は、被除数Ｚ「０１０１」および除数Ｄ「００１０」が入力される。そして、ステップＳ１２Ａでは、図２０の特徴１に示すように、被除数Ｚ「０１０１」に対してαビット分の符号拡張が行われ（この例では、α＝２）、拡張被除数Ｚ′「０００１０１」が生成される。また、ステップＳ４１Ａでは、図２０の特徴２に示すように、除数Ｄ「００１０」に対する正規化処理が行われ（この例では、桁上数β＝１）、正規化除数Ｄ′「０１００」が生成される。更に、ステップＳ１３Ａでは、図２０の特徴３に示すように、Ｋ＝１＋（ｍ−ｎ）＋α＋βなる式に、ｍ＝４、ｎ＝４，α＝２、β＝１を代入することにより、演算回数Ｋ＝４が決定される。
【０１４３】
こうして、演算回数Ｋが決定したら、ステップＳ１４Ａにおいて、回数パラメータｉを初期値１に設定した上で、ステップＳ１５Ａ〜Ｓ２２Ａの処理が、ステップＳ２３Ａを介してｉを１ずつ増加させながら繰り返されることになる。ここでも、このステップＳ１５Ａ〜Ｓ２２Ａの処理を「一巡プロセス」と呼ぶ。１回の一巡プロセスでは、１回の演算処理（無演算処理を含む）が行われるので、ここに示す例の場合、合計４回の演算処理が実行されることになる。図２１に示すように、第１回目の演算処理は、拡張被除数Ｚ′「０００１０１」の先頭に正規化除数Ｄ′「０１００」の桁を揃えた位置で行われ、以下、演算位置を１桁ずつずらしながら、演算回数がＫ回に達するまで、同様の演算処理が繰り返されることになる。
【０１４４】
この「一巡プロセス」の最初の処理であるステップＳ１５Ａでは、第ｉ回目の演算処理として、加減算が必要か否かが判断される。図１３のステップＳ１５と同様に、当該判断は、第ｉ回目の部分被除数Ｚｉが零か否かに基づいて行われる。すなわち、部分被除数Ｚｉが零の場合（全ビットが０の場合）は加減算不要と判断され、それ以外の場合は加減算必要と判断される。
【０１４５】
加減算不要と判断された場合は、ステップＳ１５ＡからステップＳ１６Ａへと分岐し、無演算処理が実行される。すなわち、部分被除数Ｚｉの末尾ビットに対応する桁に零の部分商Ｑｉ＝０を立て、部分被除数Ｚｉをそのまま部分剰余Ｒｉとする処理が行われる。
【０１４６】
一方、加減算必要と判断された場合は、ステップＳ１５ＡからステップＳ１７Ａへと分岐し、減算処理・加算処理のいずれを行うべきかを決定するための符号の比較が行われる。具体的には、直前の演算処理（第（ｉ−１）回目の一巡プロセスにおける演算処理）で得られた部分剰余Ｒ（ｉ−１）の符号と、正規化除数Ｄ′の符号とが比較される。但し、第１回目（ｉ＝１）の場合は、まだ演算処理は行われていないため、直前の演算処理で得られた部分剰余の符号の代わりに拡張被除数Ｚ′の符号が比較対象となる。前述したとおり、符号付き二進数では先頭ビットが符号ビットであるため、実際には、比較対象となる２つの数値の先頭ビット同士を比べ、数値が同じであれば同符号、数値が異なれば異符号ということになる。
【０１４７】
ここで、同符号の場合には、ステップＳ１８ＡからステップＳ１９Ａへと分岐して減算処理が実行され、異符号の場合には、ステップＳ１８ＡからステップＳ２０Ａへと分岐して加算処理が実行される。ステップＳ１９Ａの減算処理では、部分被除数Ｚｉの末尾ビットに対応する桁に正の部分商Ｑｉ＝１を立て、部分被除数Ｚｉから正規化除数Ｄ′を引き算した結果を部分剰余Ｒｉとする処理が行われる。これに対して、ステップＳ２０Ａの加算処理では、部分被除数Ｚｉの末尾ビットに対応する桁に負の部分商Ｑｉ＝−１を立て、部分被除数Ｚｉに正規化除数Ｄ′を足し算した結果を部分剰余Ｒｉとする処理が行われる。
【０１４８】
図２１に示す例の場合、円で囲ったビット０（丸０）もしくはビット１（丸１）が、ステップＳ１７Ａの符号比較処理で利用される比較対象ビットになる。そして、丸数字１，４で示す第１回目および第４回目の一巡プロセスでは、ステップＳ１９Ａの減算処理が選択され、丸数字２，３で示す第２回目および第３回目の一巡プロセスでは、ステップＳ２０Ａの加算処理が選択されることになる。なお、図２１に示す例の場合、ステップＳ１６Ａの無演算処理が選択される一巡プロセスはない。
【０１４９】
こうして、いずれかの演算処理が実行されたら、ステップＳ２１Ａにおいて、回数パラメータｉがステップＳ１３Ａで決定した演算回数Ｋに達しているか否かが判断される。ｉ＝Ｋになっていたら、後述する補正処理（図２３のステップＳ２４Ａ以降の処理）へと進むことになる。ｉ＜Ｋの場合は、ステップＳ２２Ａの更新処理が行われる。
【０１５０】
ステップＳ２２Ａの更新処理の目的は、第ｉ回目の演算処理で得られた部分剰余Ｒｉに基づいて、第（ｉ＋１）回目の演算処理で用いる部分被除数Ｚ（ｉ＋１）を作成することである。具体的には、部分剰余Ｒｉを１ビット分シフトアップし、末尾に拡張被除数Ｚ′の後続ビットを追加することにより、第（ｉ＋１）回目の部分被除数Ｚ（ｉ＋１）が作成される。
【０１５１】
たとえば、図２１に示す例の場合、第１回目の演算処理で得られた部分剰余Ｒ１に基づいて第２回目の演算処理で用いる部分被除数Ｚ２が作成される。具体的には、部分剰余Ｒ１「１１０１」を１ビット分シフトアップし（先頭の「１」を削除して「１０１」とする）、末尾に拡張被除数Ｚ′の後続ビット（第５ビット目の「０」）を追加して、部分被除数Ｚ２「１０１０」を作成する。
【０１５２】
こうして、更新処理が完了したら、ステップＳ２３Ａにおいて、回数パラメータｉを１だけ増加させれば、一巡プロセスは完了である。このようにして、回数パラメータｉがＫに達するまで、ステップＳ１５Ａ〜Ｓ２２Ａの一巡プロセスが繰り返される。
【０１５３】
なお、ｉがＫに達した場合、ステップＳ２１Ａから図２３のステップＳ２４Ａに分岐することになるので、第Ｋ回目の一巡プロセスでは、ステップＳ２２Ａの更新処理は省かれる。これは、第（Ｋ＋１）回目の一巡プロセスは存在しないため、部分被除数Ｚ（Ｋ＋１）を作成する必要がないためである。もちろん、全Ｋ回の一巡プロセスを全く同じ手順にした方が回路設計の上で好ましい場合は、ステップＳ２１ＡとＳ２２Ａの順序を入れ替えて、第Ｋ回目も更新処理を実行するようにしてもかまわない（この場合、第Ｋ回目の更新処理は意味のない処理ということになる）。
【０１５４】
＜２−４．  第１の実施形態における補正処理＞
図２１に示す例の場合、全４回の演算処理により、仮の商Ｑ′「＋１，−１，−１，＋１」と仮の剰余Ｒ′「１１１０」が得られることになるが、非回復法によって得られたこれらの値は、あくまでも仮の値であり、真の商Ｑや真の剰余Ｒを得るためには、これらに対して所定の補正処理を施す必要がある。図２３は、図２２に示す手順に後続して行われる補正処理手順を示す流れ図である。図２２のステップＳ２１Ａにおいて、ｉがＫに達していた場合、全Ｋ回の一巡プロセスは完了し、図２３のステップＳ２４Ａ以降に示す補正処理が実行されることになる。
【０１５５】
この図２３に示す補正処理手順は、図１４に示した従来の一般的な非回復法における補正処理手順とほぼ同じである。そこで、図１４の流れ図に対応するステップが存在する場合は、当該対応ステップと同一の記号を用い、末尾にＡを付して示すことにした。実際、図１４の各ステップと図２３の各ステップとの相違は、前者のステップＳ３１，Ｓ３２では、真の剰余Ｒを求める補正で除数Ｄを増減しているのに対して、後者の対応ステップＳ３１Ａ，Ｓ３２Ａでは、真の剰余Ｒを求める補正で正規化除数Ｄ′を増減する点と、後者では、仮の剰余Ｒ′に対して桁をβビット分補正するステップＳ４２Ａが付加されている点だけである。以下、図２１に示す具体例に即して、図２３の流れ図に示す補正処理手順を説明する。
【０１５６】
まず、ステップＳ２４Ａでは、仮の商Ｑ′に対する演算が行われる。仮の商Ｑ′は、全Ｋ回の演算処理によってそれぞれ立てられた１ビットの部分商から構成され、実行した演算処理の種別を示すビットを対応桁に並べたものである。すなわち、減算処理が実行された場合は正の部分商「＋１」、加算処理が実行された場合は負の部分商「−１」、無演算処理が実行された場合は零の部分商「０」が立てられている。§１−４でも述べたとおり、実際には、部分商を構成するデータは、正の部分商を格納するための正の商レジスタと、負の部分商を格納するための負の商レジスタとに格納される。
【０１５７】
そこで、ステップＳ２４Ａでは、正の商レジスタに格納されている正の商から、負の商レジスタに格納されている負の商を引く減算処理を行うことにより、「−１」なる桁を含まない、通常の二進数で表現された商を導出する処理が行われる。ここでも、このステップＳ２４Ａの演算処理後に得られた商を「仮の商Ｑ′（演算済）」と呼ぶ。
【０１５８】
図２４は、図２１に示す仮の商Ｑ′に対して、ステップＳ２４Ａの演算を実行した具体例を示す図である。上述したように、仮の商Ｑ′「＋１，−１，−１，＋１」は、実際には、正の商「１，０，０，１」（仮の商Ｑ′の「＋１」の部分のみビット１、他をビット０としたもの）と、負の商「０，１，１，０」（仮の商Ｑ′の「−１」の部分のみビット１、他をビット０としたもの）とに分けて、正の商レジスタおよび負の商レジスタに格納されている。ここで、正の商のビット１は、減算処理によって立てられた部分商であり、負の商のビット１は、加算処理によって立てられた部分商である。図２３のステップＳ２４Ａでは、正の商から負の商を減ずる演算が行われ、図２４に示すとおり、仮の商Ｑ′（演算済）として、「００１１」なる値が得られることになる。
【０１５９】
続いて、図２３のステップＳ２５Ａでは、全Ｋ回の一巡プロセスにおいて、最後（第Ｋ回目）に得られた部分剰余Ｒｋ（すなわち、仮の剰余Ｒ′）が、０か否かの確認が行われる。もし、仮の剰余Ｒ′が０であった場合は、商については、補正を行う必要はないので、仮の商Ｑ′をそのまま真の商Ｑとすればよい。ただ、剰余については、後述するように、桁上数βに関する補正が必要になる。したがって、仮の剰余Ｒ′が０であった場合は、ステップＳ２６ＡからステップＳ４２Ａへ進めばよい。
【０１６０】
仮の剰余Ｒ′が０でなかった場合は、ステップＳ２６ＡからステップＳ２７Ａへと進み、当該仮の剰余Ｒ′の符号と被除数Ｚの符号（拡張被除数Ｚ′の符号でも同じ）とを比較する（実際には、両者の最上位に位置する符号ビットが同一か否かの判断を行う）。そして、両者が同符号であった場合は、商に関する補正を行う必要はないので、やはり仮の商Ｑ′をそのまま真の商Ｑとし、ステップＳ４２Ａへと進めばよい。一方、両者が異符号であった場合は、商および剰余に対して補正を行う必要がある。仮の剰余Ｒ′の符号が被除数Ｚの符号と異なるということは、本来は行うべきでない処理が行われてしまっている（いわば、引き過ぎや足し過ぎが生じている）ことを意味する。このため、仮の商Ｑ′を１だけ補正するとともに、仮の剰余Ｒ′を正規化除数Ｄ′の分だけ補正する必要が生じる。
【０１６１】
ただ、符号付きの除算演算の場合、仮の商Ｑ′の増減補正や、仮の剰余Ｒ′の増減補正は、符号を考慮して行う必要がある。そこで、商についての補正の必要がある場合は、ステップＳ２８ＡからステップＳ２９Ａへと進み、まず、被除数Ｚの符号（拡張被除数Ｚ′の符号でも同じ）と除数Ｄの符号（正規化除数Ｄ′の符号でも同じ）とを比較する（実際には、両者の最上位に位置する符号ビットが同一か否かの判断を行う）。そして、両者が同符号であった場合は、ステップＳ３１Ａへと進み、仮の商Ｑ′を１だけ減少補正して真の商Ｑを定め、仮の剰余Ｒ′に正規化除数Ｄ′を加える補正処理を行う。一方、両者が異符号であった場合は、ステップＳ３２Ａへと進み、仮の商Ｑ′を１だけ増加補正して真の商Ｑを定め、仮の剰余Ｒ′から正規化除数Ｄ′を減じる補正処理を行う。
【０１６２】
第１の実施形態に係る除算演算では、いずれの場合も、ステップＳ４２Ａにおいて、仮の剰余Ｒ′の桁をβビット分補正する処理を行う必要がある。これは、図２２のステップＳ４１Ａにおいて、除数Ｄに対する正規化処理が行われているためである。正規化処理を行うと、図１７および図１８に示すように、除数Ｄに対してβビット分の桁上げが行われる。このため、図２１に示す演算プロセスで得られた仮の剰余Ｒ′は、βビット分の桁上げが行われた正規化除数Ｄ′を用いた除算で得られた剰余ということになる。したがって、本来の除数Ｄを用いた除算で得られるべき真の剰余を得るには、仮の剰余Ｒ′に対して桁の補正を行う必要がある。ステップＳ４２Ａにおける補正は、このような理由に基づく桁の補正であり、仮の剰余Ｒ′の桁をβビット分桁下げする補正ということになる。
【０１６３】
なお、商に関しては、βビット分の桁補正を行う必要はない。これは、図２１に星印で示したように、拡張被除数Ｚ′に対しては、桁上数βに相当するビット数だけ末尾に０を追加する形で全Ｋ回の演算処理が行われるため、除数Ｄ、被除数Ｚともにβビット分の桁上げが行われた状態で除算の演算プロセスが行われるためである。
【０１６４】
図２１に示す例の場合、仮の剰余Ｒ′「１１１０」は零ではないので、図２３の流れ図では、ステップＳ２６ＡからステップＳ２７Ａへと進み、仮の剰余Ｒ′の符号ビット「１」と被除数Ｚの符号ビット「０」（拡張被除数Ｚ′の符号ビットでもよい）とが比較される。両者は同じではないので（すなわち、仮の剰余Ｒ′と被除数Ｚとは異符号なので）、ステップＳ２８ＡからステップＳ２９Ａへと進み、被除数Ｚの符号ビット「０」（拡張被除数Ｚ′の符号ビットでもよい）と除数Ｄの符号ビット「０」とが比較される。両者は同じなので（すなわち、被除数Ｚと除数Ｄとは同符号なので）、ステップＳ３０ＡからステップＳ３１Ａへと進み、仮の商Ｑ′を１だけ減少補正して真の商Ｑを決定し、仮の剰余Ｒ′に正規化除数Ｄ′を加える補正処理が行われる。
【０１６５】
図２５(a) ，(b) は、このようなステップＳ３１Ａにおける補正処理手順の具体例を示す図である。すなわち、商については、図２５(a) に示すように、図２４で求めた仮の商Ｑ′（演算済）「００１１」に対して１だけ減少補正することにより、真の商Ｑ「００１０」（１０進表現では２）が定まる。一方、剰余については、図２５(b) に示すように、補正前の仮の剰余Ｒ′「１１１０」に正規化除数Ｄ′「０１００」を加える補正処理を行うことにより、補正後の仮の剰余Ｒ′「００１０」（１０進表現では２）が求まる。
【０１６６】
ただ、この図２５(a) ，(b) に示す補正（ステップＳ３１Ａの補正）は、いわゆる引き過ぎを是正するための補正であるため、補正後の剰余Ｒ′「００１０」は、依然として「仮」の剰余ということになる。真の剰余Ｒは、この補正後の仮の剰余Ｒ′「００１０」に対して、ステップＳ４２Ａにおける桁の補正を行うことによって求まる。図２５(c) は、このような桁の補正を示すものである。すなわち、この例の場合、桁上数β＝１として、正規化処理時に除数Ｄに対して１ビット分の桁上げが行われていたため、ステップＳ４２Ａの補正処理では、補正後の仮の剰余Ｒ′「００１０」に対して、１ビット分の桁下げ処理が行われる。その結果、真の剰余Ｒ「０００１」（１０進表現では１）が求まる。
【０１６７】
結局、「５÷２」なる除算の結果として、商Ｑ＝２、剰余Ｒ＝１という正しい結果が得られたことになる。
【０１６８】
こうして、真の商Ｑおよび真の剰余Ｒが定まったら、最後にステップＳ３３Ａにおいて、これらを除算の結果として出力すればよい。
【０１６９】
＜２−５．  第１の実施形態に係る除算回路の構成＞
図２６は、第１の実施形態に係る除算回路の基本構成を示すブロック図である。この除算回路は、図の上方に示されているように、ｍビットの符号付き整数からなる被除数Ｚと、ｎビットの符号付き整数からなる除数Ｄとを入力し、これらについて整数除算演算を行い、図の下方に示されているように、整数からなる商Ｑおよび整数からなる剰余Ｒを出力する機能を有している。
【０１７０】
まず、データ入力部１０は、図２２の流れ図のステップＳ１１Ａを行う構成要素であり、ｍビットからなる符号付きビット列のデータとして被除数Ｚを入力するとともに、ｎビットからなる符号付きビット列のデータとして除数Ｄを入力する。入力された被除数Ｚは被除数レジスタ２０に格納され、入力された除数Ｄは除数レジスタ３０に格納される。
【０１７１】
符号拡張部２５は、図２２の流れ図のステップＳ１２Ａを行う構成要素であり、予め設定されている所定数α（但し、ｎ−１≧α≧１）に基づいて、被除数Ｚに対して、先頭の符号ビットと同じビットをα個だけ先頭部分に付加し、（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する符号拡張処理を行う。§１−２で述べたとおり、この符号拡張処理は、第１回目の演算処理時に除算成立条件が満たされるようにするためのものである。従来の方法では、符号拡張数αを除数Ｄのビット数ｎに設定する必要があったが、本発明の第１の実施形態では、除数Ｄに対する正規化が行われることを前提として、αを最小値１まで低減させることができる（その理由は、§５で述べる）。
【０１７２】
演算回数Ｋは、αが小さくなれば少なくなるので、αをｎより小さく設定することにより、従来の方法に比べて演算回数を低減させる効果が得られ、演算速度を向上させるメリットが得られる。要するに、§１で述べた従来の除算回路に比べて演算速度の向上を図るには、符号拡張数αの値をｎ−１≧α≧１の範囲内に設定すればよい。もちろん、αが小さければ小さいほど演算回数Ｋを低減できるので、実用上は、符号拡張部２５は、符号拡張数αが最小値となるように、すなわち、α＝１となるように設定を行うのが好ましい。
【０１７３】
なお、被除数レジスタ２０は、実際には、ｍ＋αビット分の格納場所を有しており、データ入力部１０から与えられた被除数Ｚは、下位ｍビット分の位置に格納され、符号拡張部２５によって拡張された符号が、上位αビット分の位置に格納される。したがって、被除数レジスタ２０は、ｍ＋αビットからなる拡張被除数Ｚ′を格納する機能を果たす。後述するように、この被除数レジスタ２０の所定の桁位置には、各回の演算処理で得られた部分剰余Ｒｉが書き戻され、上位側に１ビットシフトさせる処理が行われる。
【０１７４】
符号拡張部２５としては、たとえば、被除数レジスタ２０内に格納されている被除数Ｚの符号ビット（下位側から数えてｍビット目）を読み出し、これをα個コピーして、上位αビットの位置に書き込む処理を行う回路を用いることもできる。ただ、実用上は、この符号拡張部２５を、データ入力部１０によって入力された被除数Ｚの最上位ビット（符号ビット）を示す信号線を分岐することによって得られたα本の分岐信号線によって構成し、これらの分岐信号線を、被除数レジスタ２０の先頭からαビット分の入力信号線として用いるようにするのが好ましい。
【０１７５】
たとえば、ｍ＝８、α＝２の場合、下位側から８ビット目（被除数Ｚの符号ビット）の信号線から２本の信号線を分岐し、この分岐信号線を、被除数レジスタの下位側から９ビット目および１０ビット目の入力信号線として用いるようにすれば、被除数レジスタ２０に８ビットの被除数Ｚを格納するのと同時に、２ビット分の拡張された符号を格納することができる。
【０１７６】
一方、正規化処理部３５は、図２２の流れ図のステップＳ４１Ａを行う構成要素であり、入力された除数Ｄに対して正規化処理を行うことにより正規化除数Ｄ′を生成する処理を行う。この正規化処理は、§２−０で述べたとおり、先頭ビットと第２番目のビットとが異なる値になるまで、全ビットを上位側に１ビットだけずらし末尾にビット「０」を付加するシフト動作を繰り返す処理ということができる。この処理は、図１７や図１８に例示するとおり、符号桁と有意桁との間に存在する冗長桁を削除する意味をもつ。除数Ｄも正規化除数Ｄ′も、同じｎビットのデータであるため、正規化処理は、除数レジスタ３０内におけるシフト動作として行うことができ、得られた正規化除数Ｄ′は、そのまま除数レジスタ３０内に格納される。
【０１７７】
この正規化処理部３５には、除数レジスタ３０に格納されている除数Ｄの先頭から（ｇ＋１）ビット分のデータ（ｇ＝１，２，３... ）について各ビットの論理和演算（除数Ｄが正の場合）もしくは論理積演算（除数Ｄが負の場合）を行う機能をもたせておき、得られる論理値が「１」（除数Ｄが正の場合）もしくは「０」（除数Ｄが負の場合）となるｇの最小値ｇminを求め、シフト動作の回数βを、β＝ｇmin −１なる式で決定するのが好ましい。そうすれば、除数レジスタ３０に格納されている除数Ｄを上位側にβビット分シフトすることにより正規化除数Ｄ′を生成することができる。
【０１７８】
具体的には、正の除数Ｄについての処理を行うためには、除数レジスタ３０の先頭２ビットの論理和演算を行う第１番目の論理回路Ｌ（１）、先頭３ビットの論理和演算を行う第２番目の論理回路Ｌ（２）、先頭４ビットの論理和演算を行う第３番目の論理回路Ｌ（３）、... 、先頭（ｇ＋１）ビットの論理和演算を行う第ｇ番目の論理回路Ｌ（ｇ）、... を設けておき、出力される論理値が「１」となる論理回路のうち、番号の最も若い論理回路Ｌ（ｇmin）を求め、シフト動作の回数βを、β＝ｇmin −１なる式で決定すればよい。負の除数Ｄについての処理を行うためには、同様に、論理積演算を行う各論理回路を設けておけばよい。
【０１７９】
たとえば、図１７(a) に示す例の場合、先頭２ビットの論理和は０、先頭３ビットの論理和は０、先頭４ビットの論理和は１、であるから、ｇmin ＝３ということになり、β＝３−１＝２になる。したがって、除数Ｄを上位側に２ビット分シフトすることにより、図１７(c) に示すような正規化除数Ｄ′を生成することができる。もちろん、正規化処理部３５を構成する論理回路は上例に限定されるものではない。たとえば、負の除数Ｄについては正の数に変換した後に正規化し、その後、負の数に戻す処理を行うようにすれば、論理和演算回路のみを用意しておけば足りる。その他、２入力の排他的論理和回路を用いて、「１および２ビット目」、「２および３ビット目」、「３および４ビット目」と入力する構成を採ることもできる。
【０１８０】
演算処理部４０は、この第１の実施形態における一巡プロセス、すなわち、図２２の流れ図におけるステップＳ１５Ａ〜Ｓ２２Ａの手順を実行するための構成要素であり、図示のとおり、加減算要否判定部４１、符号比較部４２、加減算部４３、部分商格納部４４、レジスタ更新部４５によって構成されている。ここで、加減算要否判定部４１は、ステップＳ１５Ａの判定を行う構成要素であり、符号比較部４２は、ステップＳ１７Ａの比較を行う構成要素であり、加減算部４３は、ステップＳ１９ＡおよびＳ２０Ａにおける加減算を行う構成要素であり、部分商格納部４４は、ステップＳ１６Ａ，Ｓ１９Ａ，Ｓ２０Ａにおける部分商Ｑｉの書き込みを行う構成要素であり、レジスタ更新部４５は、ステップＳ２２Ａの更新処理を行う構成要素である。これらの各構成要素の具体的な処理動作については後述する。
【０１８１】
演算回数決定部５０は、図２２の流れ図のステップＳ１３Ａを行う構成要素であり、符号拡張部２５に設定された符号拡張数αと、正規化処理部３５における正規化処理において実行されたシフト動作の回数βと、に基づいて、演算回数ＫをＫ＝１＋（ｍ−ｎ）＋α＋βなる式で求める処理を行う。ここに示す例は、被除数Ｚのビット数ｍ、除数Ｄのビット数ｎ、符号拡張数αを、予め所定の値に固定した除算回路の例であるため、上記式の中での変数は桁上数βだけである。正規化処理部３５は、除算処理の開始時に、前述した方法で桁上数βを決定し、βビット分のシフト処理を行うとともに、当該桁上数βを演算回数決定部５０に通知する。演算回数決定部５０は、こうして通知された桁上数βを用いて上記演算を行い、演算回数Ｋを決定し、これを演算処理部４０に通知する。
【０１８２】
もちろん、任意のビット長ｍをもった被除数Ｚと、任意のビット長ｎをもった除数Ｄについての除算演算を可能にするため、十分なビット長をもった被除数レジスタ２０および除数レジスタ３０を用意しておくことも可能である。また、符号拡張部２５が、適宜、任意の符号拡張数αを設定できるようにしておくことも可能である。その場合、演算回数決定部５０は、各除算処理を行うたびに、被除数Ｚのビット長ｍ、除数Ｄのビット長ｎ、符号拡張数αの値を入力し、更に、正規化処理部３５から与えられる桁上数βを用いて、演算回数Ｋを決定することになる。
【０１８３】
演算処理部４０は、こうして決定された演算回数Ｋに基づいて、合計Ｋ回の一巡プロセスを実行し、毎回、当該回数に対応した桁に対応する部分商Ｑｉを出力する。また、第Ｋ回目の一巡プロセスの演算処理で得られた部分剰余Ｒｋを、仮の剰余Ｒ′として出力する。
【０１８４】
商レジスタ６０は、商を格納するためのレジスタであり、個々の桁に対応するビット位置には、部分商格納部４４から与えられる部分商Ｑｉが格納される。図２２の流れ図に示すとおり、部分商Ｑｉとしては、「０（無演算）」、「＋１（減算）」、「−１（加算）」のいずれかが立つことになる。ただ、二進数の１つの桁で「−１」なる値を表現することはできないので、実際には、図２６に示すとおり、商レジスタ６０は、正の部分商を格納するための正の商レジスタ６１と、負の部分商を格納するための負の商レジスタ６２と、によって構成される。
【０１８５】
ここに示す例の場合、除算演算の開始時に、商レジスタ６０はリセットされ、すべての桁のビットが０に初期化される。そして、部分商格納部４４は、加減算部４３によって減算処理が実行された場合には、正の部分商を示すデータとして、正の商レジスタ６１の対応桁には「１」を格納し、負の商レジスタ６２の対応桁には「０」を格納する処理を行う（実際には、正の商レジスタ６１に対して「１」を書き込む処理を行い、負の商レジスタ６２は初期値のままとすればよい）。
【０１８６】
一方、加減算部４３によって加算処理が実行された場合には、部分商格納部４４は、負の部分商を示すデータとして、負の商レジスタ６２の対応桁には「１」を格納し、正の商レジスタ６１の対応桁には「０」を格納する処理を行う（実際には、負の商レジスタ６２に対して「１」を書き込む処理を行い、正の商レジスタ６１は初期値のままとすればよい）。
【０１８７】
また、演算処理部４０によって無演算処理が実行された場合（すなわち、加減算要否判定部４１によって加減算不要と判定された場合）には、部分商格納部４４は、零の部分商を示すデータとして、正の商レジスタ６１の対応桁および負の商レジスタ６２の対応桁ともに「０」が格納されるような処理を行う（実際には、正の商レジスタ６１および負の商レジスタ６２は、ともに初期値のままでよいので、商レジスタ６０に対する書き込みは行わない）。
【０１８８】
たとえば、図２１に示す演算例では、「＋１，−１，−１，＋１」という仮の商Ｑ′が得られることになるが、当該仮の商Ｑ′は、実際には、図２４に示すように、正の商「１００１」と負の商「０１１０」とに別けられ、正の商レジスタ６１および負の商レジスタ６２に格納される。
【０１８９】
なお、図２４の最上段の丸数字１〜４に示されているように、各回の演算処理で得られた部分商Ｑｉは、当該演算処理の桁に合わせて、それぞれ上位ビット側から１ビットずつ繰り下げながら各商レジスタ６１，６２に格納してゆく必要がある。ただ、実用上は、部分商格納部４４に、正の商レジスタ６１および負の商レジスタ６２の最下位ビットに対する書き込みを行う書込処理と、正の商レジスタ６１および負の商レジスタ６２内のデータを１ビット分上位側にシフトさせるシフト処理と、を実行する機能をもたせておくようにすればよい。そうすれば、各商レジスタ６１，６２に対する書き込みは常に最下位ビットに対して行えば足り、その後、上位側へ１ビットシフトする処理を行えばよい。
【０１９０】
補正処理部７０は、図２３の流れ図に示す補正処理を実行するための構成要素であり、演算処理部４０が第Ｋ回目の一巡プロセスを完了した後、商レジスタ６０内に格納されているデータに基づいて商Ｑを決定し、第Ｋ回目の一巡プロセスで得られた部分剰余Ｒｋ（仮の剰余Ｒ′）に基づいて剰余Ｒを決定し、決定した商Ｑおよび剰余Ｒを出力する処理を行う。
【０１９１】
具体的には、補正処理部７０は、まず、正の商レジスタ６１に格納されているデータから負の商レジスタ６２に格納されているデータを減算して得られるデータ（たとえば、図２４に仮の商Ｑ′（演算済）として示すデータ）を、商レジスタ６０に格納されているデータとして取り扱う。当該データは、第Ｋ回目の一巡プロセス後に商レジスタ６０に格納されている仮の商Ｑ′ということになる。
【０１９２】
そして、補正処理部７０は、この仮の商Ｑ′と、演算処理部４０から与えられる仮の剰余Ｒ′（すなわち、第Ｋ回目の一巡プロセスにおいて得られた部分剰余Ｒｋ）とを用いて、次の(a) ，(b) に記載する２つの処理を実行する。
【０１９３】
(a) 商の補正処理
仮の剰余Ｒ′が０でなく、かつ、その符号が被除数Ｚの符号と異なる場合に実行される処理であり、図２３の流れ図では、ステップＳ２６ＡおよびＳ２８Ａの双方において否定的判定がなされた場合になされる処理ということになる。具体的には、被除数Ｚと除数Ｄとが同符号のときには、仮の商Ｑ′を１だけ減少させ、仮の剰余Ｒ′を正規化除数Ｄ′だけ増加させる補正を行が行われる（ステップＳ３１Ａ）。また、被除数Ｚと除数Ｄとが異符号のときには、仮の商Ｑ′を１だけ増加させ、仮の剰余Ｒ′を正規化除数Ｄ′だけ減少させる補正が行われる（ステップＳ３２Ａ）。
【０１９４】
(b) 剰余の補正処理
正規化処理部３５による正規化処理において実行されたシフト動作の回数（桁上数）βを用いて、仮の剰余Ｒ′をβビット分桁下げする処理である。図２３の流れ図では、ステップＳ４２Ａの処理に対応する。
【０１９５】
以上、図２６のブロック図を参照しながら、本発明の第１の実施形態に係る除算回路の基本構成を説明したが、実際には、これらの各構成要素からなる除算回路は、半導体集積回路としてチップ上に組み込んだ形で具現化することができる。
【０１９６】
＜２−６．  第１の実施形態に係る除算回路の動作＞
続いて、図２６に示す除算回路の具体的な動作、特に、演算処理部４０の動作を説明する。上述したとおり、この演算処理部４０は、図２２の流れ図における一巡プロセス（ステップＳ１５Ａ〜Ｓ２２Ａの手順）を、演算回数決定部５０により決定された演算回数Ｋに応じて、第１回目〜第Ｋ回目まで繰り返し行う機能を有している。
【０１９７】
具体的には、第ｉ回目の一巡プロセスでは、まず、被除数レジスタ２０に格納されているデータの所定の抽出位置を先頭としてｎビット分のデータを、第ｉ回目の部分被除数Ｚｉとして抽出する処理（被除数レジスタ２０からの読出処理）が行われる。そして、抽出した部分被除数Ｚｉに対して、次の３通りの演算処理のいずれかが行われる。すなわち、部分被除数Ｚｉに対して除数レジスタ３０に格納されているｎビットの正規化除数Ｄ′を減じる減算処理、部分被除数Ｚｉに対して除数レジスタ３０に格納されているｎビットの正規化除数Ｄ′を加える加算処理、部分被除数Ｚｉに対して何ら演算を施さない無演算処理、のいずれかの演算処理が実行される。
【０１９８】
そして、実行した演算処理の種別を示すデータ（減算処理の場合は正の部分商「＋１」、加算処理の場合は負の部分商「−１」、無演算処理の場合は零の部分商「０」）を、商レジスタ６０の対応桁に格納する処理が行われる。
【０１９９】
一方、実行した演算処理によって得られたｎビットのデータは、第ｉ回目の部分剰余Ｒｉとなり、被除数レジスタ２０の所定位置にこれを書き戻すレジスタ更新処理（被除数レジスタ２０への書込処理）が実行される。このレジスタ更新処理は、図２２のステップＳ２２Ａに相当する処理であり、第（ｉ＋１）回目の一巡プロセスで抽出されることになる部分被除数Ｚ（ｉ＋１）を、被除数レジスタ２０上に作成しておくことを目的とする処理である。したがって、このレジスタ更新処理は、少なくとも第１回目〜第（Ｋ−１）回目の一巡プロセスにおいて実行すれば足り、第Ｋ回目の一巡処理では実行を省略することができる。また、無演算処理が行われた場合も、元の部分被除数Ｚｉがそのまま部分剰余Ｒｉになるため、部分剰余Ｒｉを被除数レジスタ２０に書き戻す処理は必要ない。
【０２００】
合計（ｍ＋α）ビットのデータが格納されている被除数レジスタ２０からｎビットの部分被除数Ｚｉを抽出する位置や、被除数レジスタ２０にｎビットの部分剰余Ｒｉを書き戻す位置は、図２１の演算例を参照すれば容易に理解できよう。
【０２０１】
すなわち、回数パラメータがｉ＝１に設定された第１回目の抽出位置は、拡張被除数Ｚ′の先頭位置にすればよい。図２１に示す例の場合、拡張被除数Ｚ′の先頭から４ビットのデータを抽出すれば、第１回目の演算処理に用いる部分被除数Ｚ１を抽出することができる。一方、回数パラメータがｉ≧２に設定された第２回目以降の抽出位置は、前回の抽出位置から１ビットだけ下位側にずれた位置となるようにすればよい。図２１に示す例の場合、部分被除数Ｚ２，Ｚ３，Ｚ４は、それぞれ１ビットずつ下位側にずれた位置から抽出したものになっている。
【０２０２】
また、部分剰余Ｒｉを書き戻す位置は、部分被除数Ｚｉを抽出した位置と同じ位置にすればよい。図２１に示す例の場合、たとえば、第１回目の部分剰余Ｒ１「１１０１」を、拡張被除数Ｚ′から部分被除数Ｚ１「０００１」を抽出した位置に書き戻すようにすれば、拡張被除数Ｚ′の内容は「１１０１０１」に書き換えられることになり、第２回目の一巡プロセスでは、その２〜５ビット目の「１０１０」を部分被除数Ｚ２として抽出することができる。
【０２０３】
このように、理論的には、被除数レジスタ２０に拡張被除数Ｚ′を格納した後、ｎビットの部分被除数Ｚｉの抽出処理と、ｎビットの部分剰余Ｒｉの書戻処理とを、位置を１ビットずつ下位側にずらしながら繰り返し実行してゆけばよいことになる。ただ、レジスタからの読出位置やレジスタに対する書込位置を、回数パラメータｉに応じて変える処理を行うためには、桁位置を示すカウンタなどを用意する必要があり、回路構成が複雑になる。そこで実用上は、毎回できるだけ同じ桁位置から部分被除数Ｚｉを読み出し、毎回できるだけ同じ桁位置に部分剰余Ｒｉを書き込む処理が行えるようにするのが好ましい。そのためには、被除数レジスタ２０に対する読出位置や書込位置を１ビットずつずらしてゆく代わりに、被除数レジスタ２０内のデータを１ビットずつずらすシフト処理を行うようにすればよい。
【０２０４】
すなわち、第１の実施形態に係る除算回路の場合、演算処理部４０は、一巡プロセスを行う際に、第１回目の一巡プロセス（ｉ＝１）では、被除数レジスタ２０に格納されているデータの先頭のｎビットを部分被除数Ｚ１として抽出し、加算処理もしくは減算処理で得られた部分剰余Ｒ１を被除数レジスタ２０の先頭からｎビットの部分に格納すればよい。要するに、ｉ＝１の場合は、先頭部分から読み出し、先頭部分に書き込むことになる。この第１回目の一巡プロセスが完了した後は、被除数レジスタ２０内のデータについてのシフト処理は不要である。
【０２０５】
これに対して、第２回目以降の一巡プロセス（ｉ≧２）では、被除数レジスタ２０に格納されているデータの第２ビット目〜第（ｎ＋１）ビット目を部分被除数Ｚｉとして抽出し、かつ、少なくとも第２回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理で得られた部分剰余Ｒｉを被除数レジスタ２０の第２ビット目〜第（ｎ＋１）ビット目の部分に格納し、被除数レジスタ２０内のデータを１ビット分上位側にシフトさせるレジスタ更新処理を実行するようにすればよい。要するに、ｉ≧２の場合は、先頭から１ビットずらした位置から読み出し、先頭から１ビットずらした位置に書き込み、その後、被除数レジスタ２０内のデータについて、１ビット上位側へずらすシフト処理を行うことになる。
【０２０６】
このように、被除数レジスタ２０に対するシフト処理を行う形態を採用する場合、図２６に示す演算処理部４０を構成する各要素には、次のような機能をもたせておけばよい。
【０２０７】
まず、加減算要否判定部４１については、第ｉ回目（１≦ｉ≦Ｋ）の一巡プロセスにおいて加算処理もしくは減算処理が必要か否かを判定する機能をもたせておく。既に述べたように、ここに示す実施形態の場合、部分被除数Ｚｉが零の場合（全ビットが０の場合）に、加減算不要との判定がなされることになるので、加減算要否判定部４１は、被除数レジスタ２０から抽出した部分被除数Ｚｉの全ビットが０か否かを調べ、部分被除数Ｚｉが零の場合（全ビットが０の場合）には否定的判定（加減算不要との判定）を行い、部分被除数Ｚｉが零でない場合（いずれかのビットが１の場合）には肯定的判定（加減算必要との判定）を行うようにすればよい。
【０２０８】
一方、符号比較部４２は、加減算部４３が行うべき演算が、減算処理か加算処理かを決定する処理を行う役割を果たす構成要素である。図２１に示す演算例の場合、円で囲って示すビット「丸０」もしくはビット「丸１」が符号の比較に利用される比較対象ビットになる。上述したように、第２回目以降の一巡プロセスにおいて、被除数レジスタ２０に対してシフト処理が行われることを考慮すれば、図２１に示す被除数側の比較対象ビットは、いずれも各時点において被除数レジスタ２０に格納されているデータの先頭ビットになることがわかるであろう。
【０２０９】
したがって、符号比較部４２は、その時点において、被除数レジスタ２０に格納されているデータの先頭ビット（ｉ＝１の場合は、拡張被除数Ｚ′の先頭ビットになり、ｉ≧２の場合は、直前の一巡プロセスで得られた部分剰余の先頭ビットになる）と、除数レジスタ３０に格納されているデータの先頭ビット（正規化除数Ｄ′の先頭ビット）とを比較し、比較対象ビットの値が同一であれば同符号、異なれば異符号との判定を行えばよい。
【０２１０】
加減算部４３は、加減算要否判定部４１が肯定的判定を行ったときに、符号比較部４２による比較結果が同符号の場合には抽出したｎビットの部分被除数Ｚｉからｎビットの正規化除数Ｄ′を減じる減算処理を実行し、異符号の場合には抽出したｎビットの部分被除数Ｚｉにｎビットの正規化除数Ｄ′を加える加算処理を実行し、ｎビットからなる部分剰余Ｒｉを得る処理を行う。
【０２１１】
また、部分商格納部４４は、加減算部４３によって減算処理が実行された場合には正の部分商を示すデータを、加算処理が実行された場合には負の部分商を示すデータを、無演算処理が実行された場合には零の部分商を示すデータを、それぞれ商レジスタ６０の対応桁に格納する処理を行う。なお、実際には、正の部分商および負の部分商は、それぞれ正の商レジスタ６１および負の商レジスタ６２にビット「１」として別個に格納され、零の部分商は、これら２つのレジスタ６１，６２にビット「０」として格納されることは、既に説明したとおりである。
【０２１２】
そして、レジスタ更新部４５は、第１回目の一巡プロセス（ｉ＝１）では、加算処理もしくは減算処理で得られた部分剰余Ｒ１を被除数レジスタ２０の先頭からｎビットの部分に格納し、第２回目以降の一巡プロセス（ｉ≧２）では、加算処理もしくは減算処理で得られた部分剰余Ｒｉを被除数レジスタ２０の第２ビット目〜第（ｎ＋１）ビット目の部分に格納する書込処理を行う。また、レジスタ更新部４５は、第２回目以降の一巡プロセス（ｉ≧２）において、被除数レジスタ２０内のデータを１ビット分上位側にシフトさせるシフト処理を実行する。なお、第Ｋ回目の一巡プロセス（ｉ＝Ｋ）では、上記書込処理やシフト処理を行う必要はない。
【０２１３】
最後に、図２６に示す除算回路について、上述したシフト処理を行う実施形態を採用した場合の動作を、図２７〜図３０に示しておく。これらの図に示された例は、図２１に例示した演算手順によって「５÷２」なる除算を実行する際の、第１回目〜第４回目の一巡プロセスにおけるレジスタの変遷を示すものである。
【０２１４】
図２７は、第１回目（ｉ＝１）の一巡プロセスの動作を示している。まず、初期状態では、図(a) に示すように、除数レジスタ３０に、ｎ＝４ビットの正規化除数Ｄ′「０１００」が格納されており、図(b) に示すように、被除数レジスタ２０に、ｍ＝４ビットの被除数Ｚをα＝２ビット分拡張することによって得られた６ビットの拡張被除数Ｚ′「０００１０１」が格納されている。ここで、太枠で囲った両レジスタの先頭ビットは、符号比較部４２による比較対象となるビットである。前述したように、符号比較部４２は、常に、被除数レジスタ２０に格納されているデータの先頭ビットと、除数レジスタ３０に格納されているデータの先頭ビットとを比較する。
【０２１５】
一方、第１回目の一巡プロセスでは、図(c) に示すように、被除数レジスタ２０の先頭の４ビット「０００１」が部分被除数Ｚ１として抽出される。この部分被除数Ｚ１「０００１」は零ではないので、加減算要否判定部４１によって演算必要との判定がなされ、しかも、符号比較部４２による比較結果は同符号であるため、加減算部４３によって減算処理が実行される。図(c) には、部分被除数Ｚ１「０００１」と正規化除数Ｄ′「０１００」との減算処理により、部分剰余Ｒ１「１１０１」が得られた状態が示されている（図には、正規化除数Ｄ′が２の補数「１１００」として記載されている）。
【０２１６】
こうして得られた部分剰余Ｒ１「１１０１」は、レジスタ更新部４５によって、図(d) に示すように、被除数レジスタ２０の先頭から４ビットの部分に書き戻される。すなわち、先頭の４ビットは、上書きされて内容が書き換えられ、被除数レジスタ２０には「１１０１０１」なるデータが格納されている状態になる。なお、図(e) に示されているとおり、第１回目の一巡プロセスでは、被除数レジスタ２０に対するシフト処理は行われない。
【０２１７】
また、部分商格納部４４によって、正の商レジスタ６１および負の商レジスタ６２の最下位ビットに対する書込処理が行われる。ここでは、減算処理が行われたため、正の商レジスタ６１の最下位ビットには「１」が、負の商レジスタ６２の最下位ビットには「０」が、それぞれ書き込まれる。図(f) は、このときの状態を示している。
【０２１８】
なお、各商レジスタの上位ビットに記された「＊」は、当該ビットが未書込状態であることを示している。除算開始時に、商レジスタをリセットして、全ビットを初期値「０」にする操作を行うようにした場合、「＊」のビットはすべて「０」ということになる。また、この場合、部分商格納部４４は、正の商レジスタ６１の最下位ビットに「１」を書き込む処理を行えば足り、負の商レジスタ６２の最下位ビットに「０」を書き込む処理を省略することができる（以下も同様である）。
【０２１９】
こうして、商レジスタ６１，６２に対する書込処理を行った後、商レジスタ６１，６２に格納されているデータを１ビット分上位側にシフトする（最下位ビットには、任意のビットを新たに付加すればよい）。
【０２２０】
図２８は、第２回目（ｉ＝２）の一巡プロセスの動作を示している。除数レジスタ３０の内容は、図(a) に示すように「０１００」のまま変わりないが、被除数レジスタ２０の内容は、図(b) に示す状態（図２７(d) に示す状態）に更新されている。やはり太枠で囲った両レジスタの先頭ビットは、符号比較部４２による比較対象ビットである。
【０２２１】
前述したとおり、第２回目の一巡プロセスでは（第２回目以降すべて）、図(c) に示すように、被除数レジスタ２０の先頭ビットからではなく、第２番目のビットからの４ビット「１０１０」が部分被除数Ｚ２として抽出される。この部分被除数Ｚ２「１０１０」は零ではないので、加減算要否判定部４１によって演算必要との判定がなされ、しかも、符号比較部４２による比較結果は異符号であるため、加減算部４３によって加算処理が実行される。図(c) には、部分被除数Ｚ２「１０１０」と正規化除数Ｄ′「０１００」との加算処理により、部分剰余Ｒ２「１１１０」が得られた状態が示されている。
【０２２２】
こうして得られた部分剰余Ｒ２「１１１０」は、レジスタ更新部４５によって、図(d) に示すように、被除数レジスタ２０の先頭から２〜５番目のビットの部分に書き戻される。すなわち、これらの部分に相当する４ビットは、上書きされて内容が書き換えられ、被除数レジスタ２０には「１１１１０１」なるデータが格納されている状態になる。更に、レジスタ更新部４５によって、被除数レジスタ２０内のデータを１ビット分上位側にシフトするシフト処理が実行される。これにより、最上位ビットは押し出され、末尾に新たなビット「０」が付加され、被除数レジスタ２０の内容は、図(e) に示すように、「１１１０１０」になる。図において上部にドットを付した「０」は、新たに付加されたビットであることを示している。
【０２２３】
また、部分商格納部４４によって、正の商レジスタ６１および負の商レジスタ６２の最下位ビットに対する書込処理が行われる。ここでは、加算処理が行われたため、正の商レジスタ６１の最下位ビットには「０」が、負の商レジスタ６２の最下位ビットには「１」が、それぞれ書き込まれる。図(f) は、このときの状態を示している。最後に、部分商格納部４４により、商レジスタ６１，６２に対するシフト処理が行われる。
【０２２４】
図２９は、第３回目（ｉ＝３）の一巡プロセスの動作を示している。除数レジスタ３０の内容は、図(a) に示すように「０１００」のまま変わりないが、被除数レジスタ２０の内容は、図(b) に示す状態（図２８(e) に示す状態）に更新されている。やはり太枠で囲った両レジスタの先頭ビットは、符号比較部４２による比較対象ビットである。
【０２２５】
第３回目の一巡プロセスでは、図(c) に示すように、被除数レジスタ２０の先頭ビットからではなく、第２番目のビットからの４ビット「１１０１」が部分被除数Ｚ３として抽出される。この部分被除数Ｚ３「１１０１」は零ではないので、加減算要否判定部４１によって演算必要との判定がなされ、しかも、符号比較部４２による比較結果は異符号であるため、加減算部４３によって加算処理が実行される。図(c) には、部分被除数Ｚ３「１１０１」と正規化除数Ｄ′「０１００」との加算処理により、部分剰余Ｒ３「０００１」が得られた状態が示されている。
【０２２６】
こうして得られた部分剰余Ｒ３「０００１」は、レジスタ更新部４５によって、図(d) に示すように、被除数レジスタ２０の先頭から２〜５番目のビットの部分に書き戻される。すなわち、これらの部分に相当する４ビットは、上書きされて内容が書き換えられ、被除数レジスタ２０には「１０００１０」なるデータが格納されている状態になる。更に、レジスタ更新部４５によって、被除数レジスタ２０内のデータを１ビット分上位側にシフトするシフト処理が実行される。これにより、最上位ビットは押し出され、末尾に新たなビット「０」が付加され、被除数レジスタ２０の内容は、図(e) に示すように、「０００１００」になる。図において上部にドットを付した「０」は、新たに付加されたビットであることを示している。
【０２２７】
また、部分商格納部４４によって、正の商レジスタ６１および負の商レジスタ６２の最下位ビットに対する書込処理が行われる。ここでは、加算処理が行われたため、正の商レジスタ６１の最下位ビットには「０」が、負の商レジスタ６２の最下位ビットには「１」が、それぞれ書き込まれる。図(f) は、このときの状態を示している。最後に、部分商格納部４４により、商レジスタ６１，６２に対するシフト処理が行われる。
【０２２８】
図３０は、第４回目（ｉ＝４）の一巡プロセスの動作を示している。除数レジスタ３０の内容は、図(a) に示すように「０１００」のまま変わりないが、被除数レジスタ２０の内容は、図(b) に示す状態（図２９(e) に示す状態）に更新されている。やはり太枠で囲った両レジスタの先頭ビットは、符号比較部４２による比較対象ビットである。
【０２２９】
第４回目の一巡プロセスでは、図(c) に示すように、被除数レジスタ２０の先頭ビットからではなく、第２番目のビットからの４ビット「００１０」が部分被除数Ｚ４として抽出される。この部分被除数Ｚ４「００１０」は零ではないので、加減算要否判定部４１によって演算必要との判定がなされ、しかも、符号比較部４２による比較結果は同符号であるため、加減算部４３によって減算処理が実行される。図(c) には、部分被除数Ｚ４「００１０」と正規化除数Ｄ′「０１００」との減算処理により、部分剰余Ｒ４「１１１０」が得られた状態が示されている（図には、正規化除数Ｄ′が２の補数「１１００」として記載されている）。
【０２３０】
ここで、演算回数Ｋ＝４であり、回数パラメータｉ＝４に達しているため、この時点で得られた部分剰余Ｒ４「１１１０」は、仮の剰余Ｒ′になる。また、第５回目の一巡プロセスは行われないため、レジスタ更新部４５による被除数レジスタ２０の更新処理（部分剰余Ｒ４の書戻処理やシフト処理）を行う必要はない。そのため、図(d) ，(e) は空欄になっている。
【０２３１】
部分商格納部４４は、正の商レジスタ６１および負の商レジスタ６２の最下位ビットに対する書込処理を行う。ここでは、減算処理が行われたため、正の商レジスタ６１の最下位ビットには「１」が、負の商レジスタ６２の最下位ビットには「０」が、それぞれ書き込まれる。図(f) は、このときの状態を示しており、正の商レジスタ６１に格納されている正の商「１００１」から負の商レジスタ６２に格納されている負の商「０１１０」を引き算して得られる「００１１」が仮の商Ｑ′になる（図２４参照）。こうして得られた仮の商Ｑ′「００１１」と仮の剰余Ｒ′「１１１０」に基づく補正処理を行うことにより、真の商Ｑ「００１０」と真の剰余Ｒ「０００１」が得られることは、図２５で説明したとおりである。
【０２３２】
＜２−７．  第１の実施形態のまとめ＞
これまで述べてきた第１の実施形態の要点をまとめると、結局、図１９に示す特徴１，特徴２，特徴３に集約されることになる。特徴１を実施するためには、ｍビットの符号付き被除数Ｚの先頭部分に、その先頭ビットと同じビットを所定数α（但し、ｎ−１≧α≧１）だけ付加して（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する手段を設けておけばよい。特徴２を実施するためには、ｎビットの符号付き除数Ｄを、冗長桁がなくなるように上位側にβビットずらし末尾にビット「０」をβ個だけ付加することにより、正規化除数Ｄ′を生成する手段を設けておけばよい。特徴３を実施するためには、Ｋ＝１＋（ｍ−ｎ）＋α＋βなる式により、演算回数Ｋを求める手段を設けておけばよい。
【０２３３】
そして、一巡プロセスを実行するために、拡張被除数Ｚ′の所定の抽出位置からｎビットの部分被除数Ｚｉを抽出し、当該部分被除数Ｚｉと正規化除数Ｄ′との間で、減算処理、加算処理、もしくは無演算処理のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余Ｒｉとし、実行した演算処理の種別を示すデータを部分商Ｑｉとし、部分剰余Ｒｉを拡張被除数Ｚ′の所定位置に書き戻す処理を実行する機能をもった手段を向けておき、各一巡プロセスにおける演算処理を、部分被除数Ｚｉの抽出位置を拡張被除数Ｚ′の先頭ビット位置から順次１ビットずつ繰り下げながら、演算回数Ｋだけ繰り返し実行した後、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求めるようにすればよい。
【０２３４】
また、この第１の実施形態を、除算回路が被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算方法として捉えると、当該除算方法は、
ｍビットの符号付き被除数Ｚの先頭部分に、その先頭ビットと同じビットを所定数α（但し、ｎ−１≧α≧１）だけ付加して（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する第１の段階と、
ｎビットの符号付き除数Ｄを、冗長桁がなくなるように上位側にβビットだけずらし末尾にビット「０」をβ個だけ付加することにより、正規化除数Ｄ′を生成する第２の段階と、
拡張被除数Ｚ′の所定の抽出位置からｎビットの部分被除数Ｚｉを抽出し、当該部分被除数Ｚｉと正規化除数Ｄ′との間で、減算処理、加算処理、もしくは無演算処理のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余Ｒｉとし、実行した演算処理の種別を示すデータを部分商Ｑｉとし、部分剰余Ｒｉを拡張被除数Ｚ′の所定位置に書き戻す処理を実行する第３の段階と、
を有し、
第３の段階における演算処理を、部分被除数Ｚｉの抽出位置を拡張被除数Ｚ′の先頭ビット位置から順次１ビットずつ繰り下げながら、Ｋ＝１＋（ｍ−ｎ）＋α＋βなる式で定義される演算回数Ｋだけ繰り返し実行した後、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求める除算方法ということができる。
【０２３５】
より具体的には、この除算方法は、図２２の流れ図に示す除算手順と、図２３の流れ図に示す補正処理手順とによって構成されている。
【０２３６】
ここで、図２２の流れ図に示す除算手順は、ｍビットからなる符号付きビット列のデータとして被除数Ｚを入力するとともに、ｎビットからなる符号付きビット列のデータとして除数Ｄを入力するデータ入力段階（ステップＳ１１Ａ）と、予め設定されている所定数α（但し、ｎ−１≧α≧１）に基づいて、被除数Ｚに対して、先頭の符号ビットと同じビットをα個だけ先頭部分に付加し、（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する符号拡張処理を行う符号拡張処理段階（ステップＳ１２Ａ）と、除数Ｄに対して、先頭ビットと第２番目のビットとが異なる値になるまで、全ビットを上位側に１ビットだけずらし末尾にビット「０」を付加するシフト動作を繰り返す正規化処理を実行し、ｎビットからなる正規化除数Ｄ′を生成する正規化処理段階（ステップＳ４１Ａ）と、所定数αと、正規化処理において実行されたシフト動作の回数βと、に基づいて、演算回数ＫをＫ＝１＋（ｍ−ｎ）＋α＋βなる式で求める演算回数決定段階（ステップＳ１３Ａ）と、以下の(a) 〜(f) の各段階を有する一巡プロセスを実行する一巡プロセス段階と、を有している。
【０２３７】
(a) 拡張被除数Ｚ′から、所定の抽出位置を先頭としてｎビット分を部分被除数Ｚｉとして抽出し、抽出した部分被除数Ｚｉに対して加減算を行う必要があるか否かを判定する加減算要否判定段階（ステップＳ１５Ａ）、
(b) 加減算要否判定段階において肯定的判定が行われたときに、直前の一巡プロセスで得られた部分剰余（但し、第１回目の一巡プロセスの場合は拡張被除数Ｚ′）の先頭ビットと、正規化除数Ｄ′の先頭ビットと、を比較する符号比較段階（ステップＳ１７Ａ）、
(c) 符号比較段階における比較結果が同一の場合に、部分被除数Ｚｉに対応する桁の部分商として正の部分商Ｑｉを生成し、部分被除数Ｚｉから正規化除数Ｄ′を減じる減算処理を実行して部分剰余Ｒｉを得る減算段階（ステップＳ１９Ａ）、
(d) 符号比較段階における比較結果が異なる場合に、部分被除数Ｚｉに対応する桁の部分商として負の部分商Ｑｉを生成し、部分被除数Ｚｉに正規化除数Ｄ′を加える加算処理を実行して部分剰余Ｒｉを得る加算段階（ステップＳ２０Ａ）、
(e) 加減算要否判定段階において否定的判定が行われたときに、部分被除数Ｚｉに対応する桁の部分商として零の部分商Ｑｉを生成し、部分被除数Ｚｉをそのまま部分剰余Ｒｉとする無演算段階（ステップＳ１６Ａ）、
(f) 減算段階もしくは加算段階が行われたときに、得られた部分剰余Ｒｉによって拡張被除数Ｚ′の対応桁位置を書き換える更新段階（ステップＳ２２Ａ）。
【０２３８】
そして、この除算手順では、一巡プロセス段階を、部分被除数Ｚｉの抽出位置を拡張被除数Ｚ′の先頭ビット位置から順次１ビットずつ繰り下げながら、合計Ｋ回実行し（ただし、(f) 更新段階については、第Ｋ回目は実行しなくてもよい）、得られた部分商と部分剰余とに基づいて、以下のような補正処理手順を実行することにより、商Ｑおよび剰余Ｒを求めることになる。
【０２３９】
すなわち、図２３の流れ図に示す補正処理手順として、第Ｋ回目の一巡プロセスにおいて得られた部分剰余Ｒｋを仮の剰余Ｒ′とし、合計Ｋ回の一巡プロセスの実行により得られた部分商Ｑｉの集合を仮の商Ｑ′として、次の(g) ，(h) に記載する２つの処理、
(g) 商の補正処理
仮の剰余Ｒ′が０でなく、かつ、その符号が被除数Ｚの符号と異なる場合に実行される処理であって、被除数Ｚと除数Ｄとが同符号のときには仮の商Ｑ′を１だけ減少させ、仮の剰余Ｒ′を正規化除数Ｄ′だけ増加させる補正を行い、被除数Ｚと除数Ｄとが異符号のときには仮の商Ｑ′を１だけ増加させ、仮の剰余Ｒ′を正規化除数Ｄ′だけ減少させる補正を行う処理、
(h) 剰余の補正処理
正規化処理において実行されたシフト動作の回数βを用いて、仮の剰余をβビット分桁下げする処理、
を実行することにより商Ｑおよび剰余Ｒを求めることになる。
【０２４０】
従来の非回復法除算で、「５÷２」（二進表現では「０１０１」÷「００１０」）なる除算演算を行うと、図１２に示すように、演算回数Ｋ＝５となり、５回の演算処理が必要になる。これに対して、本発明の第１の実施形態に係る非回復法除算で同じ除算演算を行うと、図２１に示すように、演算回数Ｋ＝４となり、４回の演算処理で済む。このように、必要な演算回数が低減する効果は、桁数がより多い数値についての除算演算では、更に顕著になる。したがって、本発明の第１の実施形態に係る除算回路や除算方法を採用すれば、従来に比べて高速な非回復法除算を実行することができるようになる。しかも、全Ｋ回の演算処理に基づいて得られる商Ｑおよび剰余Ｒは、除算結果として正しい桁をもった整数になるため、本除算回路の外部で小数点位置を調整するための余分な構成要素は不要になり、回路構成を単純化することも可能になる。
【０２４１】
＜＜＜  §３．  本発明の第２の実施形態  ＞＞＞
続いて、本発明の第２の実施形態を説明する。この第２の実施形態も、基本的には、前述した第１の実施形態と同様に、§１で述べた非回復法による従来の除算演算のプロセスを踏襲しつつ、除数Ｄに対する正規化処理を行うことを前提として、演算回数Ｋの低減を図るものである。第１の実施形態との相違は、拡張被除数Ｚ′から第１回目の部分被除数Ｚ１を抽出する位置にある。第２の実施形態では、部分被除数Ｚ１の抽出位置を１桁下げることにより、演算回数Ｋを更に低減することが可能になる。
【０２４２】
＜３−１．  第２の実施形態の特徴＞
第１の実施形態の重要な特徴は、図１９に示す特徴１，特徴２，特徴３である。これに対して、第２の実施形態の重要な特徴は、図３１に示す特徴１′，特徴２，特徴３′である。ここでも、ｍビットの符号付き二進数として与えられた被除数Ｚと、ｎビットの符号付き二進数として与えられた除数Ｄとの間で除算演算を行う場合について、この３つの特徴を説明する。
【０２４３】
特徴１′は、第１の実施形態の特徴１と同様に、被除数Ｚの符号拡張処理に関するものである。前述したとおり、この符号拡張処理は、第１回目の演算処理時に「部分被除数Ｚｉの絶対値が、除数Ｄの絶対値の２倍未満である」という除算成立条件を満足させるために行われる処理であり、第２の実施形態においても必要な処理である。第２の実施形態における符号拡張処理も、予め設定されている所定の符号拡張数αに基づいて、被除数Ｚに対して、先頭の符号ビットと同じビットをα個だけ先頭部分に付加し、（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する処理であり、当該処理自体に変わりはない。
【０２４４】
ただ、符号拡張数αの設定範囲が、前述した第１の実施形態とは若干異なってくる。すなわち、第１の実施形態の場合、符号拡張数αの最小値は１になり、特徴１におけるαの設定範囲の条件は「ｎ−１≧α≧１」であるのに対して、第２の実施形態の場合、符号拡張数αの最小値は２になり、図３１に示すとおり、特徴１′におけるαの設定範囲の条件は「ｎ−１≧α≧２」になる。別言すれば、以下に述べる第２の実施形態の場合、符号拡張数αを２まで低減させても、除算成立条件が満たされることになる（その理由については、§５で詳述する）。
【０２４５】
第１の実施形態における特徴１（図１９）と第２の実施形態における特徴１′（図３１）との相違は、この符号拡張数αの設定範囲だけである。もちろん、符号拡張数αの値を最小値に設定すれば、演算回数Ｋを最も低減させる効果が得られるので、第２の実施形態を採用する場合、実用上は、α＝２に設定するのが好ましい。
【０２４６】
第２の実施形態の特徴２は、図３１に示すとおり、除数Ｚを正規化する点である。上述したように、この正規化処理を前提とすることにより、符号拡張数αの低減を図ることが可能になるので、第２の実施形態を採用する場合も、この正規化処理は不可欠な処理ということになる。
【０２４７】
なお、第２の実施形態における特徴２（図３１）は、第１の実施形態における特徴２（図１９）と全く同じであり、具体的な正規化処理の方法は、§２−０で述べたとおりである。ここでも、正規化処理後の除数Ｄを正規化除数Ｄ′と呼び、正規化処理によってシフトされたビット数を桁上数βと呼ぶことにする。
【０２４８】
第２の実施形態の特徴３′は、図３１に示すとおり、演算回数Ｋを、Ｋ＝（ｍ−ｎ）＋α＋βなる式で求める点である。第１の実施形態の特徴３では、Ｋ＝１＋（ｍ−ｎ）＋α＋βなる式が用いられていたので、第２の実施形態の方がＫの値は１だけ小さくなる。したがって、ｍ，ｎ，α，βが同じ場合、第２の実施形態は第１の実施形態よりも、必要な演算処理の回数が１回少なくなり、より高速化が図れることになる。
【０２４９】
演算回数Ｋをこのように設定しておけば、第１回目の演算処理を、拡張被除数Ｚ′の先頭から１ビット分下位側に下げた位置に除数Ｄの桁を揃えた位置で行い、以下、演算位置を１桁ずつずらしながら、拡張被除数Ｚ′の末尾の桁についての演算が完了するまで、演算処理を繰り返してゆくことができ、全Ｋ回の演算処理を完了した時点で得られる仮の商Ｑ′およびβビット桁下げ後の仮の剰余Ｒ′（第Ｋ回目の部分剰余Ｒｋ）は、除算結果として正しい桁をもった整数になる。別言すれば、第Ｋ回目の演算処理時に得られる仮の商Ｑ′およびβビット桁下げ後の仮の剰余Ｒ′の末尾のビットの桁は、小数点のすぐ左隣りの桁になるので、小数点位置の調整などの処理を行う必要はない。
【０２５０】
この第２の実施形態においても、特徴１′に示すとおり、被除数Ｚに対しては、αビットだけ符号を拡張する処理が行われており、拡張被除数Ｚ′のビット数は、αビットだけ増えることになる。また、特徴２に示すとおり、除数Ｄに対しては、正規化処理により、有意桁がβビットだけ上位側にシフトしているため、その分だけ演算回数を増やす必要がある。このような理由により、第２の実施形態の場合、特徴３′に示すように、演算回数Ｋを、Ｋ＝（ｍ−ｎ）＋α＋βなる式で定めると、全Ｋ回の演算処理を完了した時点で得られる仮の商Ｑ′およびβビット桁下げ後の仮の剰余Ｒ′（第Ｋ回目の部分剰余Ｒｋ）は、除算結果として正しい桁をもった整数になる。
【０２５１】
結局、本発明の第２の実施形態では、特徴２に示すように、除数Ｄに対する正規化を行うようにしたため、特徴１′に示すように、符号拡張数αを除数Ｄのビット数ｎよりも小さな値に設定することができるようになり、特徴３′に示す式で定まる演算回数Ｋを従来よりも小さく設定することができるようになる。その結果、除算に必要な演算回数を低減することが可能になり、高速な非回復法除算を実行することができるようになる。しかも、全Ｋ回の演算処理に基づいて得られる最終的な商Ｑおよび剰余Ｒは、除算結果として正しい桁をもった整数になるため、本除算回路の外部で小数点位置を調整するための余分な構成要素は不要になり、回路構成を単純化することも可能になる。
【０２５２】
＜３−２．  第２の実施形態による除算演算のプロセス＞
ここでは、図３１に示す３つの特徴をもった除算演算を行うことにより正しい除算がなされることを、第１の実施形態の説明と同様に、「５÷２」（二進表示では「０１０１」÷「００１０」）なる簡単な除算についての演算プロセスを例にとりながら説明する。
【０２５３】
この演算では、被除数Ｚ「０１０１」のビット数ｍは４ビット、除数Ｄ「００１０」のビット数ｎは４ビットであるが、まず、特徴１′により、被除数Ｚをαビット符号拡張する処理が行われる。前述したとおり、第２の実施形態における符号拡張数αの最小値は２であるので、以下、α＝２なる設定を行った例を述べることにする。被除数Ｚ「０１０１」に対して、２ビット分の符号拡張処理を行うと、６ビットからなる拡張被除数Ｚ′「０００１０１」が作成される。
【０２５４】
次に、特徴２により、除数Ｄに対する正規化処理が行われる。ここに示す例の場合、除数Ｄ「００１０」に対して、１ビット分のシフトを行うことにより、正規化除数Ｄ′「０１００」が作成される。この場合、桁上数βは、β＝１になり、正規化除数Ｄ′の値は、元の除数Ｄの２倍、すなわち、２×２＝４ということになる。
【０２５５】
そして、特徴３′により、演算回数Ｋが、Ｋ＝（ｍ−ｎ）＋α＋βなる式に基づいて決定される。ここに示す例の場合、上式に、ｍ＝４、ｎ＝４、α＝２、β＝１を代入することにより、Ｋ＝３が得られる。
【０２５６】
結局、第２の実施形態による除算では、図３２の上段に示すように、拡張被除数Ｚ′「０００１０１」÷正規化除数Ｄ′「０１００」なる演算処理が行われ、演算回数Ｋは、Ｋ＝３という設定がなされることになる。図３２の下段は、こうして得られた拡張被除数Ｚ′「０００１０１」と正規化除数Ｄ′「０１００」とについて、具体的な除算を実行する演算処理プロセスを示す図である。図２０に示す第１の実施形態による除算では、第２の実施形態による除算との対比を容易にするため、符号拡張数αとして、α＝２なる設定を行った例を述べた（第１の実施形態における符号拡張数αの最小値は１である）。したがって、図２１の下段に示す第１の実施形態による演算処理プロセスと、図３２の下段に示す第２の実施形態による演算処理プロセスとは、いずれも「０００１０１」÷「０１００」なる除算演算のプロセスになっており、互いに比較するのに好都合である。そこで、以下、両者を対比しながら、第１の実施形態と第２の実施形態との相違を説明する。
【０２５７】
まず、両者を対比すればわかるとおり、図２１に示す第１の実施形態の場合、演算回数Ｋ＝４であるため、丸数字１〜４に示すように合計４回の演算処理が実施されている。これに対して、図３２に示す第２の実施形態の場合、演算回数Ｋ＝３であるため、丸数字１〜４に示すように合計３回の演算処理で足りる。
【０２５８】
図３２に示す演算処理プロセスにおいても、楕円で囲った部分が、各回の部分被除数Ｚｉ（ｉ＝１〜３）であり、この部分被除数Ｚｉ（いずれも４ビット）と正規化除数Ｄ′（こちらも４ビット）との間で、減算処理もしくは加算処理（部分被除数Ｚｉが零の場合は、無演算処理）が行われる。ただ、各回の部分被除数Ｚｉの抽出位置が、図２１に示す第１の実施形態の演算処理プロセスと比べて、１ビットだけ下位側にずれていることがわかる。
【０２５９】
すなわち、図２１に示す第１の実施形態の場合、第１回目の部分被除数Ｚ１は、拡張被除数Ｚ′の先頭から抽出した４ビット「０００１」によって構成されているのに対して、図３２に示す第２の実施形態の場合、第１回目の部分被除数Ｚ１は、拡張被除数Ｚ′の先頭から２〜５番目の位置から抽出した４ビット「００１０」によって構成されている。同様に、第２回目以降の部分被除数Ｚ２，Ｚ３の桁位置も、第２の実施形態の演算処理プロセスでは、１ビットずつ下位側にずれている。
【０２６０】
その結果、第２の実施形態の場合、第１の実施形態に比べて演算回数Ｋが１回分少ないにもかかわらず、最後の演算処理（第３回目の演算処理）では、拡張被除数Ｚ′の末尾に星印で示すように１ビットの「０」を追加して部分被除数Ｚ３が作成されており、この点においては、第１の実施形態の演算処理プロセスの最後の演算処理と共通している。既に述べたとおり、図に星印で示すように、拡張被除数Ｚ′の末尾に追加すべき「０」の個数は、正規化処理時の桁上数βに一致するものであり、この点に関して、第１の実施形態と第２の実施形態とに相違はない。
【０２６１】
一方、各回の演算処理を行うにあたり、正規化除数Ｄ′の桁位置は、部分被除数Ｚｉの位置に揃える必要があるので、第２の実施形態における正規化除数Ｄ′の桁位置は、第１の実施形態における正規化除数Ｄ′の桁位置に比べて、１ビットずつ下位側にずれることになる。図３２の演算処理プロセスにおける黒矢印は、このような正規化除数Ｄ′の桁ずれを示している。
【０２６２】
これに対して、実行する演算種別を決定するために符号を比較すべき対象については、第１の実施形態も第２の実施形態も、基本的な考え方に相違はない。すなわち、いずれの実施形態でも、直前の一巡プロセスで得られた部分剰余と正規化除数Ｄ′とが符号比較の対象となる。もっとも、第１回目の一巡プロセスの場合は、直前の一巡プロセスが存在しないので、拡張被除数Ｚ′と正規化除数Ｄ′とが符号比較の対象となる。実際には、比較対象となるデータの先頭ビット（符号ビット）の比較が行われるので、符号比較段階では、いずれの実施形態の場合も、直前の一巡プロセスで得られた部分剰余（但し、第１回目の一巡プロセスの場合は拡張被除数Ｚ′）の先頭ビットと、正規化除数Ｄ′の先頭ビットと、の比較が行われる。
【０２６３】
図３２の演算処理プロセスにおいても、円で囲った「０」（丸０）および円で囲った「１」（丸１）が、実行する演算種別を決定するための比較対象ビットであり、両ビットの値が同一である場合は減算処理、異なる場合は加算処理が行われる。そして、第ｉ回目の演算処理では、４ビットの部分被除数Ｚｉと４ビットの正規化除数Ｄ′との間で演算が行われ、得られた４ビットの演算結果が部分剰余Ｒｉになり、この部分剰余Ｒｉの下位３ビットに、拡張被除数Ｚ′の後続ビットを付加したものが、第（ｉ＋１）回目の演算処理で用いる部分被除数Ｚ（ｉ＋１）ということになる。
【０２６４】
具体的には、まず、第１回目の演算処理では、図３２に楕円で囲って示すように、拡張被除数Ｚ′の第２〜５ビット目のデータが部分被除数Ｚ１となるが、第１回目の演算の種別を決定するための比較対象ビットは、部分被除数Ｚ１の先頭ビットではなく、拡張被除数Ｚ′の先頭ビット（丸０）ということになる。すなわち、図２１に示す第１の実施形態の場合は、楕円で囲って示す部分被除数Ｚ１の先頭ビット（丸０）と正規化除数Ｄ′の先頭ビット（丸０）とが比較されていたが、図３２に示す第２の実施形態の場合は、楕円で囲って示す部分被除数Ｚ１の先頭ビットより１ビットだけ上位側に位置するビット（丸０）と正規化除数Ｄ′の先頭ビット（丸０）とが比較されることになる。この場合、両者は同一であるから、第１回目の演算処理としては、「丸−」と記述されているように減算処理が実行される。
【０２６５】
既に述べたとおり、本願の図における記号「丸−」は、実質的には減算処理（引き算）が行われることを示しているが、形式上は、２の補数についての加算処理（足し算）を示すものである。したがって、図示の例の場合も、第１の演算処理の部分の下段には、正規化除数Ｄ′「０１００」の代わりに、２の補数「１１００」が記されており、実際には、「０００１」と「１１００」との加算が行われ、部分剰余Ｒ１「１１１０」が得られる。そして、部分被除数Ｚ１の末尾ビットの上方には、減算処理が行われたことを示す部分商「＋１」が立てられる。
【０２６６】
続く、第２回目の演算処理では、１桁繰り下げた４ビットのデータが部分被除数Ｚ２になる。すなわち、図に楕円で囲って示すように、第１回目の演算処理で得られた部分剰余Ｒ１の下位３ビットに拡張被除数Ｚ′の第６ビット目（矩形枠で示す）を加えた４ビットのデータ「１１０１」が部分被除数Ｚ２となる。
【０２６７】
一方、第２回目以降の演算処理では、第１の実施形態と同様に、直前の演算処理で得られた部分剰余の先頭ビットが比較対象ビットになる。したがって、図３２に示す第２回目の演算処理では、部分剰余Ｒ１の先頭ビット（丸１）、すなわち、部分被除数Ｚ２を構成するデータの先頭ビットよりも１ビットだけ上位側に位置するビットと、正規化除数Ｄ′の先頭ビット（丸０）との比較が行われる。この例の場合、両者は異なるため、加算処理が行われる。結局、第２回目の演算処理としては、図に丸＋と記述されているように、４ビットの部分被除数Ｚ２「１１０１」と４ビットの正規化除数Ｄ′「０１００」との間で加算処理が実行され、部分剰余Ｒ２「０００１」が得られる。そして、部分被除数Ｚ２の末尾ビットの上方には、加算処理が行われたことを示す部分商「−１」が立てられる。
【０２６８】
最後の第３回目の演算処理では、更に１桁繰り下げた４ビットのデータが部分被除数Ｚ３になる。すなわち、図に楕円で囲って示すように、第２回目の演算処理で得られた部分剰余Ｒ２の下位３ビットに拡張被除数Ｚ′の第７ビット目（実際には、図に星印を記したように、拡張被除数Ｚ′には第７ビット目は存在しないので、末尾に０を補うことになる）を加えた４ビットのデータ「００１０」が部分被除数Ｚ３となる。そして、部分剰余Ｒ２の先頭ビット（すなわち、楕円で囲った部分被除数Ｚ３の先頭ビットよりも１ビットだけ上位側に位置するビット丸０）と正規化除数Ｄ′の先頭ビット（丸０）とが比較される。両者は同一であるから、減算処理が行われることになる。結局、第３回目の演算処理としては、丸−と記述されているように、４ビットの部分被除数Ｚ３と４ビットの正規化除数Ｄ′との間で減算処理（実際には、上述したように、２の補数「１１００」を足し算する処理）が実行され、部分剰余Ｒ３「１１１０」が得られる。そして、部分被除数Ｚ３の末尾ビットの上方には、減算処理が行われたことを示す部分商「＋１」が立てられる。
【０２６９】
以上で全３回の演算処理は完了する。こうして、全Ｋ回（この例では、Ｋ＝３）の演算処理が完了した段階で得られた部分剰余Ｒｋ（図示の例の場合はＲ３）は、仮の剰余Ｒ′となる。一方、全Ｋ回の演算処理が完了した段階で得られた部分商の集合（図示の例の場合は「＋１，−１，＋１」なる３桁のデータ）は、仮の商Ｑ′となる。後述するように、これら仮の商Ｑ′および仮の剰余Ｒ′に対して所定の補正処理を施すことにより、真の商Ｑおよび真の剰余Ｒが得られる。
【０２７０】
ここで、図２１に示す第１の実施形態の演算処理も、図３２に示す第２の実施形態の演算処理も、同じ「５÷２」（二進表示では「０１０１」÷「００１０」）なる除算を行う処理であるが、前者では「＋１，−１，−１，＋１」なる４桁の仮の商Ｑ′が得られ、後者では「＋１，−１，＋１」なる３桁の仮の商Ｑ′が得られている。しかしながら、後述する補正処理を施すことにより、両実施形態で最終的に得られる商Ｑは同一の値になる。
【０２７１】
＜３−３．  第２の実施形態による除算演算の手順＞
図３３は、本発明の第２の実施形態に係る非回復法による除算演算の手順を示す流れ図である。この図３３に示す手順は、図２２に示す第１の実施形態に係る非回復法による除算演算の手順とほぼ同じである。そこで、この図３３の流れ図における各ステップのうち、図２２の流れ図に示されているステップと同一のステップについては、同一の記号を用いて示すことにした。また、同一ではないが、図２２の流れ図に類似するステップが存在する場合は、当該類似ステップの記号の末尾のＡをＢに変更した記号を用いることにした。
【０２７２】
結局、図３３の流れ図に示す各ステップのうち、末尾にＢをもつ記号で示されたステップＳ１２Ｂ，Ｓ１３Ｂ，Ｓ１５Ｂについては、図２２の流れ図に示すステップＳ１２Ａ，Ｓ１３Ａ，Ｓ１５Ａと若干異なる処理が行われるが、その他のステップについては、図２２の流れ図に同記号で示されたステップと全く同じ処理が行われることになる。以下、図３２に示す具体例に即して、図３３の流れ図に示す手順を説明する。
【０２７３】
まず、ステップＳ１１Ａにおいて、被除数Ｚと除数Ｄを入力する処理が行われる。図３２に示す例の場合は、被除数Ｚ「０１０１」および除数Ｄ「００１０」が入力される。そして、ステップＳ１２Ｂでは、図３１の特徴１′に示すように、被除数Ｚ「０１０１」に対してαビット分の符号拡張が行われ、拡張被除数Ｚ′「０００１０１」が生成される。ここで述べた例の場合、いずれの実施形態についてもα＝２に設定されているため、ステップＳ１２ＡとＳ１２Ｂとで、実際に行われる処理に変わりはないが、ステップＳ１２Ａの符号拡張処理では、符号拡張数αの範囲が「ｎ−１≧α≧１」（特徴１）であるのに対して、ステップＳ１２Ｂの符号拡張処理では、符号拡張数αの範囲が「ｎ−１≧α≧２」（特徴１′）になる。
【０２７４】
続く、ステップＳ４１Ａでは、図３１の特徴２に示すように、除数Ｄ「００１０」に対する正規化処理が行われ（この例では、桁上数β＝１）、正規化除数Ｄ′「０１００」が生成される。そして、ステップＳ１３Ｂでは、図３１の特徴３′に示すように、Ｋ＝（ｍ−ｎ）＋α＋βなる式に、ｍ＝４、ｎ＝４，α＝２、β＝１を代入することにより、演算回数Ｋ＝３が決定される（ステップＳ１３Ａでは、Ｋ＝４である）。
【０２７５】
こうして、演算回数Ｋが決定したら、ステップＳ１４Ａにおいて、回数パラメータｉを初期値１に設定した上で、ステップＳ１５Ｂ〜Ｓ２２Ａに示す一巡プロセスが、ステップＳ２３Ａを介してｉを１ずつ増加させながら繰り返されることになる。１回の一巡プロセスでは、１回の演算処理が行われるので、ここに示す例の場合、合計３回の演算処理が実行されることになる。図３２の下段に示すように、第１回目の演算処理は、拡張被除数Ｚ′「０００１０１」の先頭から２〜５ビット目の桁位置に正規化除数Ｄ′「１１００」（２の補数）の桁を揃えた位置で行われ、以下、演算位置を１桁ずつずらしながら、演算回数がＫ回に達するまで、同様の演算処理が繰り返されることになる。
【０２７６】
この「一巡プロセス」の最初の処理であるステップＳ１５Ｂでは、第ｉ回目の演算処理として、加減算が必要か否かが判断される。当該判断は、第ｉ回目の部分被除数Ｚｉが零か否かに基づいて行われる。すなわち、部分被除数Ｚｉが零の場合（全ビットが０の場合）は加減算不要と判断され、それ以外の場合は加減算必要と判断される。
【０２７７】
なお、部分被除数Ｚｉが零か否かの判断を行うという点では、ステップＳ１５ＡとＳ１５Ｂとに変わりはないが、図２１と図３２とを比較すればわかるとおり、第１の実施形態と第２の実施形態とでは、拡張被除数Ｚ′に対する部分被除数Ｚｉの抽出位置が異なるため（後者では、抽出位置が１ビット分下位側にずれている）、ここでは、便宜上、ステップＳ１５ＡとＳ１５Ｂとを別な記号を用いて区別している。ステップＳ１６Ａ以降の各ステップについては、第１の実施形態と第２の実施形態との間で相違はない。
【０２７８】
ステップＳ１５Ｂにおいて、加減算不要と判断された場合は、ステップＳ１５ＢからステップＳ１６Ａへと分岐し、無演算処理が実行される。すなわち、部分被除数Ｚｉの末尾ビットに対応する桁に零の部分商Ｑｉ＝０を立て、部分被除数Ｚｉをそのまま部分剰余Ｒｉとする処理が行われる。
【０２７９】
一方、加減算必要と判断された場合は、ステップＳ１５ＢからステップＳ１７Ａへと分岐し、減算処理・加算処理のいずれを行うべきかを決定するための符号の比較が行われる。具体的には、直前の演算処理（第（ｉ−１）回目の一巡プロセスにおける演算処理）で得られた部分剰余Ｒ（ｉ−１）の符号と、正規化除数Ｄ′の符号とが比較される。但し、第１回目（ｉ＝１）の場合は、まだ演算処理は行われていないため、直前の演算処理で得られた部分剰余の符号の代わりに拡張被除数Ｚ′の符号が比較対象となる。符号付き二進数では先頭ビットが符号ビットであるため、実際には、比較対象となる２つの数値の先頭ビット同士を比べ、数値が同じであれば同符号、数値が異なれば異符号ということになる。
【０２８０】
ここで、同符号の場合には、ステップＳ１８ＡからステップＳ１９Ａへと分岐して減算処理が実行され、異符号の場合には、ステップＳ１８ＡからステップＳ２０Ａへと分岐して加算処理が実行される。ステップＳ１９Ａの減算処理では、部分被除数Ｚｉの末尾ビットに対応する桁に正の部分商Ｑｉ＝１を立て、部分被除数Ｚｉから正規化除数Ｄ′を引き算した結果を部分剰余Ｒｉとする処理が行われる。これに対して、ステップＳ２０Ａの加算処理では、部分被除数Ｚｉの末尾ビットに対応する桁に負の部分商Ｑｉ＝−１を立て、部分被除数Ｚｉに正規化除数Ｄ′を足し算した結果を部分剰余Ｒｉとする処理が行われる。
【０２８１】
既に述べたとおり、図３２に示す例の場合、円で囲ったビット０（丸０）もしくはビット１（丸１）が、ステップＳ１７Ａの符号比較処理で利用される比較対象ビットになる。そして、丸数字１，３で示す第１回目および第３回目の一巡プロセスでは、ステップＳ１９Ａの減算処理が選択され、丸数字２で示す第２回目の一巡プロセスでは、ステップＳ２０Ａの加算処理が選択されることになる。なお、図３２に示す例の場合、ステップＳ１６Ａの無演算処理が選択される一巡プロセスはない。
【０２８２】
こうして、いずれかの演算処理が実行されたら、ステップＳ２１Ａにおいて、回数パラメータｉがステップＳ１３Ｂで決定した演算回数Ｋに達しているか否かが判断される。ｉ＝Ｋになっていたら、後述する補正処理（第１の実施形態と同様に、図２３のステップＳ２４Ａ以降の処理）へと進むことになる。ｉ＜Ｋの場合は、ステップＳ２２Ａの更新処理が行われる。
【０２８３】
ステップＳ２２Ａの更新処理の目的は、第ｉ回目の演算処理で得られた部分剰余Ｒｉに基づいて、第（ｉ＋１）回目の演算処理で用いる部分被除数Ｚ（ｉ＋１）を作成することであり、部分剰余Ｒｉを１ビット分シフトアップし、末尾に拡張被除数Ｚ′の後続ビットを追加することにより、第（ｉ＋１）回目の部分被除数Ｚ（ｉ＋１）が作成される。
【０２８４】
たとえば、図３２に示す例の場合、第１回目の演算処理で得られた部分剰余Ｒ１に基づいて第２回目の演算処理で用いる部分被除数Ｚ２が作成される。具体的には、部分剰余Ｒ１「１１１０」を１ビット分シフトアップし（先頭の「１」を削除して「１１０」とする）、末尾に拡張被除数Ｚ′の後続ビット（第６ビット目の「１」）を追加して、部分被除数Ｚ２「１１０１」を作成する。
【０２８５】
こうして、更新処理が完了したら、ステップＳ２３Ａにおいて、回数パラメータｉを１だけ増加させれば、一巡プロセスは完了である。このようにして、回数パラメータｉがＫに達するまで、ステップＳ１５Ｂ〜Ｓ２２Ａの一巡プロセスが繰り返される。
【０２８６】
なお、第１の実施形態と同様に、ｉがＫに達した場合、ステップＳ２１Ａから図２３のステップＳ２４Ａに分岐することになるので、第Ｋ回目の一巡プロセスでは、ステップＳ２２Ａの更新処理は省かれる。これは、第（Ｋ＋１）回目の一巡プロセスは存在しないため、部分被除数Ｚ（Ｋ＋１）を作成する必要がないためである。もちろん、全Ｋ回の一巡プロセスを全く同じ手順にした方が回路設計の上で好ましい場合は、ステップＳ２１ＡとＳ２２Ａの順序を入れ替えて、第Ｋ回目も更新処理を実行するようにしてもかまわない（この場合、第Ｋ回目の更新処理は意味のない処理ということになる）。
【０２８７】
＜３−４．  第２の実施形態における補正処理＞
図３２に示す例の場合、全３回の演算処理により、仮の商Ｑ′「＋１，−１，＋１」と仮の剰余Ｒ′「１１１０」が得られることになる。第２の実施形態の場合も、これらの仮の値に対して図２３に示す補正処理を施し、真の商Ｑや真の剰余Ｒを得ることになる。以下、図３２に示すように、仮の商Ｑ′「＋１，−１，＋１」と仮の剰余Ｒ′「１１１０」が得られた場合について、図２３の流れ図に示す補正処理手順を説明する。
【０２８８】
まず、ステップＳ２４Ａでは、仮の商Ｑ′に対する演算が行われる。既に述べたとおり、実際には、部分商を構成するデータは、正の部分商を格納するための正の商レジスタと、負の部分商を格納するための負の商レジスタとに格納される。そこで、ステップＳ２４Ａでは、正の商レジスタに格納されている正の商から、負の商レジスタに格納されている負の商を引く減算処理を行うことにより、「−１」なる桁を含まない、通常の二進数で表現された商（仮の商Ｑ′（演算済））を導出する処理が行われる。
【０２８９】
図３４は、図３２に示す仮の商Ｑ′に対して、ステップＳ２４Ａの演算を実行した具体例を示す図である。上述したように、仮の商Ｑ′「＋１，−１，＋１」は、実際には、正の商「１，０，１」と、負の商「０，１，０」とに分けて、正の商レジスタおよび負の商レジスタに格納されている。ここで、正の商のビット１は、減算処理によって立てられた部分商であり、負の商のビット１は、加算処理によって立てられた部分商である。図２３のステップＳ２４Ａでは、正の商から負の商を減ずる演算が行われ、図３４に示すとおり、仮の商Ｑ′（演算済）として、「０１１」なる値が得られることになる。
【０２９０】
続いて、図２３のステップＳ２５Ａでは、全Ｋ回の一巡プロセスにおいて、最後（第Ｋ回目）に得られた部分剰余Ｒｋ（すなわち、仮の剰余Ｒ′）が、０か否かの確認が行われる。もし、仮の剰余Ｒ′が０であった場合は、商については、補正を行う必要はないので、仮の商Ｑ′をそのまま真の商Ｑとすればよい。ただ、剰余については、後述するように、桁上数βに関する補正が必要になる。したがって、仮の剰余Ｒ′が０であった場合は、ステップＳ２６ＡからステップＳ４２Ａへ進めばよい。
【０２９１】
仮の剰余Ｒ′が０でなかった場合は、ステップＳ２６ＡからステップＳ２７Ａへと進み、当該仮の剰余Ｒ′の符号と被除数Ｚの符号（拡張被除数Ｚ′の符号でも同じ）とを比較する（実際には、両者の最上位に位置する符号ビットが同一か否かの判断を行う）。そして、両者が同符号であった場合は、商に関する補正を行う必要はないので、やはり仮の商Ｑ′をそのまま真の商Ｑとし、ステップＳ４２Ａへと進めばよい。一方、両者が異符号であった場合は、商および剰余に対して補正を行う必要がある。仮の剰余Ｒ′の符号が被除数Ｚの符号と異なるということは、本来は行うべきでない処理が行われてしまっている（いわば、引き過ぎや足し過ぎが生じている）ことを意味する。このため、仮の商Ｑ′を１だけ補正するとともに、仮の剰余Ｒ′を正規化除数Ｄ′の分だけ補正する必要が生じる。
【０２９２】
ただ、符号付きの除算演算の場合、仮の商Ｑ′の増減補正や、仮の剰余Ｒ′の増減補正は、符号を考慮して行う必要がある。そこで、商についての補正の必要がある場合は、ステップＳ２８ＡからステップＳ２９Ａへと進み、まず、被除数Ｚの符号（拡張被除数Ｚ′の符号でも同じ）と除数Ｄの符号（正規化除数Ｄ′の符号でも同じ）とを比較する（実際には、両者の最上位に位置する符号ビットが同一か否かの判断を行う）。そして、両者が同符号であった場合は、ステップＳ３１Ａへと進み、仮の商Ｑ′を１だけ減少補正して真の商Ｑを定め、仮の剰余Ｒ′に正規化除数Ｄ′を加える補正処理を行う。一方、両者が異符号であった場合は、ステップＳ３２Ａへと進み、仮の商Ｑ′を１だけ増加補正して真の商Ｑを定め、仮の剰余Ｒ′から正規化除数Ｄ′を減じる補正処理を行う。
【０２９３】
この第２の実施形態に係る除算演算においても、除数Ｄに対する正規化処理（βビット分の桁上処理）が行われているため、ステップＳ４２Ａにおいて、仮の剰余Ｒ′の桁をβビット分補正する処理（βビット分桁下げする処理）が必要になる。なお、商に関しては、第１の実施形態と同様に、拡張被除数Ｚ′に対して桁上数βに相当するビット数だけ末尾に０を追加する形で全Ｋ回の演算処理が行われ（図３２の星印参照）、除数Ｄ、被除数Ｚともにβビット分の桁上げが行われた状態で除算の演算プロセスが実行されたことになるため、補正を行う必要はない。
【０２９４】
図３２に示す例の場合、仮の剰余Ｒ′「１１１０」は零ではないので、図２３の流れ図では、ステップＳ２６ＡからステップＳ２７Ａへと進み、仮の剰余Ｒ′の符号ビット「１」と被除数Ｚの符号ビット「０」（拡張被除数Ｚ′の符号ビットでもよい）とが比較される。両者は同じではないので（すなわち、仮の剰余Ｒ′と被除数Ｚとは異符号なので）、ステップＳ２８ＡからステップＳ２９Ａへと進み、被除数Ｚの符号ビット「０」（拡張被除数Ｚ′の符号ビットでもよい）と除数Ｄの符号ビット「０」とが比較される。両者は同じなので（すなわち、被除数Ｚと除数Ｄとは同符号なので）、ステップＳ３０ＡからステップＳ３１Ａへと進み、仮の商Ｑ′を１だけ減少補正して真の商Ｑを決定し、仮の剰余Ｒ′に正規化除数Ｄ′を加える補正処理が行われる。
【０２９５】
図３５(a) ，(b) は、このようなステップＳ３１Ａにおける補正処理手順の具体例を示す図である。すなわち、商については、図３５(a) に示すように、図３４で求めた仮の商Ｑ′（演算済）「０１１」に対して１だけ減少補正することにより、真の商Ｑ「０１０」（１０進表現では２）が定まる。一方、剰余については、図３５(b) に示すように、補正前の仮の剰余Ｒ′「１１１０」に正規化除数Ｄ′「０１００」を加える補正処理を行うことにより、補正後の仮の剰余Ｒ′「００１０」（１０進表現では２）が求まる。
【０２９６】
ただ、この図３５(a) ，(b) に示す補正（ステップＳ３１Ａの補正）は、いわゆる引き過ぎを是正するための補正であるため、補正後の剰余Ｒ′「００１０」は、依然として「仮」の剰余ということになる。真の剰余Ｒは、この補正後の仮の剰余Ｒ′「００１０」に対して、ステップＳ４２Ａにおける桁の補正を行うことによって求まる。図３５(c) は、このような桁の補正を示すものである。すなわち、この例の場合、桁上数β＝１として、正規化処理時に除数Ｄに対して１ビット分の桁上げが行われていたため、ステップＳ４２Ａの補正処理では、補正後の仮の剰余Ｒ′「００１０」に対して、１ビット分の桁下げ処理が行われる。その結果、真の剰余Ｒ「０００１」（１０進表現では１）が求まる。
【０２９７】
結局、この第２の実施形態においても第１の実施形態と同様に、「５÷２」なる除算の結果として、商Ｑ＝２、剰余Ｒ＝１という正しい結果が得られたことになる。
【０２９８】
こうして、真の商Ｑおよび真の剰余Ｒが定まったら、最後にステップＳ３３Ａにおいて、これらを除算の結果として出力すればよい。
【０２９９】
＜３−５．  第２の実施形態に係る除算回路の構成＞
図３６は、第２の実施形態に係る除算回路の基本構成を示すブロック図である。この除算回路も、ｍビットの符号付き整数からなる被除数Ｚと、ｎビットの符号付き整数からなる除数Ｄとを入力し、これらについて整数除算演算を行い、整数からなる商Ｑおよび整数からなる剰余Ｒを出力する機能を有しており、その構成は、図２６に示す第１の実施形態に係る除算回路の基本構成とほぼ同じである。そこで、図３６の除算回路の構成要素のうち、図２６の除算回路の構成要素と実質的に同一のものについては、同一の記号を用いて示すことにした。
【０３００】
具体的には、図２６に示す除算回路と図３６に示す除算回路との相違点は、前者における被除数レジスタ２０，符号拡張部２５，演算処理部４０，演算回数決定部５０が、後者では被除数レジスタ２０′，符号拡張部２５′，演算処理部８０，演算回数決定部９０に置き換えられた点だけである。そこで以下、これら相違する構成要素についての説明を重点的に行い、その他の構成要素についての説明は省略もしくは簡略化する。
【０３０１】
まず、データ入力部１０は、図３３の流れ図のステップＳ１１Ａを行う構成要素であり、ｍビットからなる符号付きビット列のデータとして被除数Ｚを入力するとともに、ｎビットからなる符号付きビット列のデータとして除数Ｄを入力する。入力された被除数Ｚは被除数レジスタ２０′に格納され、入力された除数Ｄは除数レジスタ３０に格納される。
【０３０２】
符号拡張部２５′は、図３３の流れ図のステップＳ１２Ｂを行う構成要素であり、予め設定されている所定の符号拡張数αに基づいて、被除数Ｚに対して、先頭の符号ビットと同じビットをα個だけ先頭部分に付加し、（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する符号拡張処理を行う。この符号拡張処理の内容は、図２６に示す符号拡張部２５によって行われる符号拡張処理と全く同じであるが、符号拡張数αの設定範囲に関しては、図２６に示す符号拡張部２５とは若干異なっている。
【０３０３】
既に述べたとおり、第１の実施形態の場合、符号拡張数αの設定範囲は、ｎ−１≧α≧１であるが、第２の実施形態の場合、符号拡張数αの設定範囲は、ｎ−１≧α≧２になる。符号拡張部２５と２５′の相違は、このような符号拡張数αの設定範囲の相違のみである。同様に、図２６に示す被除数レジスタ２０と図３６に示す被除数レジスタ２０′の相違点も、符号拡張数αの設定範囲の相違のみである。すなわち、被除数レジスタ２０，２０′には、ビット長が（ｍ＋α）ビットの拡張被除数Ｚ′が格納されることになるが、両者の相違は、値αの許容範囲が異なるだけである。
【０３０４】
結局、図３６に示す第２の実施形態に係る除算回路における被除数レジスタ２０′および符号拡張部２５′の実質的な構成は、図２６に示す第１の実施形態に係る除算回路における被除数レジスタ２０および符号拡張部２５の実質的な構成と変わりはない。また、図３６に示す第２の実施形態に係る除算回路における除数レジスタ３０および正規化処理部３５は、図２６に示す第１の実施形態に係る除算回路における除数レジスタ３０および正規化処理部３５と全く同じである。したがって、これらの構成要素についての説明は省略する。
【０３０５】
一方、図３６に示す演算回数決定部９０は、図２６に示す演算回数決定部５０に対応する構成要素であり、両者の相違は、演算回数Ｋの決定に用いる式にある。すなわち、演算回数決定部５０は、第１の実施形態に係る演算回数Ｋを決定するため、Ｋ＝１＋（ｍ−ｎ）＋α＋βなる式でＫの決定を行うのに対して、演算回数決定部９０は、第２の実施形態に係る演算回数Ｋを決定するため、Ｋ＝（ｍ−ｎ）＋α＋βなる式でＫの決定を行う。したがって、ｍ，ｎ，α，βが同じ場合、演算回数決定部９０によって決定された演算回数Ｋは、演算回数決定部５０によって決定された演算回数Ｋよりも１だけ小さくなる。
【０３０６】
また、図３６に示す演算処理部８０は、図２６に示す演算処理部４０に対応する構成要素であり、演算回数決定部９０により決定された演算回数Ｋに基づいて、合計Ｋ回の一巡プロセスを実行し、毎回、当該回数に対応した桁に対応する部分商Ｑｉを出力する。また、第Ｋ回目の一巡プロセスの演算処理で得られた部分剰余Ｒｋを、仮の剰余Ｒ′として出力する。図示のとおり、演算処理部８０は、加減算要否判定部８１、符号比較部８２、加減算部８３、部分商格納部８４、レジスタ更新部８５によって構成されている。これらは、それぞれ図２６に示す加減算要否判定部４１、符号比較部４２、加減算部４３、部分商格納部４４、レジスタ更新部４５に対応するものであり、一部の相違点を除いて、ほぼ同じ動作を行う。この演算処理部８０の具体的な動作については、§３−６で実例に即して説明を行うことにする。
【０３０７】
図３６に示す商レジスタ６０は、図２６に示す商レジスタ６０と全く同じ構成要素である。すなわち、商レジスタ６０は、正の部分商を格納するための正の商レジスタ６１と、負の部分商を格納するための負の商レジスタ６２と、によって構成され、部分商格納部８４により部分商の書き込みを受けることになる。また、補正処理部７０は、図２３の流れ図に示す補正処理を実行するための構成要素であり、演算処理部８０が第Ｋ回目の一巡プロセスを完了した後、商レジスタ６０内に格納されているデータに基づいて商Ｑを決定し、第Ｋ回目の一巡プロセスで得られた部分剰余Ｒｋ（仮の剰余Ｒ′）に基づいて剰余Ｒを決定し、決定した商Ｑおよび剰余Ｒを出力する処理を行う。
【０３０８】
このように、第２の実施形態に係る商レジスタ６０および補正処理部７０の構成は、第１の実施形態に係る商レジスタ６０および補正処理部７０の構成と全く同じであるため、ここでは、詳しい説明は省略する。
【０３０９】
以上、図３６のブロック図を参照しながら、本発明の第２の実施形態に係る除算回路の基本構成を説明したが、実際には、これらの各構成要素からなる除算回路は、半導体集積回路としてチップ上に組み込んだ形で具現化することができる。
【０３１０】
＜３−６．  第２の実施形態に係る除算回路の動作＞
続いて、図３６に示す除算回路の具体的な動作、特に、演算処理部８０の動作を説明する。この演算処理部８０は、図３３の流れ図における一巡プロセス（ステップＳ１５Ｂ〜Ｓ２２Ａの手順）を、演算回数決定部９０により決定された演算回数Ｋに応じて、第１回目〜第Ｋ回目まで繰り返し行う機能を有している。
【０３１１】
具体的には、第ｉ回目の一巡プロセスでは、まず、被除数レジスタ２０′に格納されているデータの所定の抽出位置を先頭としてｎビット分のデータを、第ｉ回目の部分被除数Ｚｉとして抽出する処理（被除数レジスタ２０′からの読出処理）が行われる。そして、抽出した部分被除数Ｚｉに対して、次の３通りの演算処理のいずれかが行われる。すなわち、部分被除数Ｚｉに対して除数レジスタ３０に格納されているｎビットの正規化除数Ｄ′を減じる減算処理、部分被除数Ｚｉに対して除数レジスタ３０に格納されているｎビットの正規化除数Ｄ′を加える加算処理、部分被除数Ｚｉに対して何ら演算を施さない無演算処理、のいずれかの演算処理が実行される。
【０３１２】
そして、実行した演算処理の種別を示すデータ（減算処理の場合は正の部分商「＋１」、加算処理の場合は負の部分商「−１」、無演算処理の場合は零の部分商「０」）を、商レジスタ６０の対応桁に格納する処理が行われる。
【０３１３】
一方、実行した演算処理によって得られたｎビットのデータは、第ｉ回目の部分剰余Ｒｉとなり、被除数レジスタ２０′の所定位置にこれを書き戻すレジスタ更新処理（被除数レジスタ２０′への書込処理）が実行される。このレジスタ更新処理は、図３３のステップＳ２２Ａに相当する処理であり、第（ｉ＋１）回目の一巡プロセスで抽出されることになる部分被除数Ｚ（ｉ＋１）を、被除数レジスタ２０′上に作成しておくことを目的とする処理である。したがって、このレジスタ更新処理は、少なくとも第１回目〜第（Ｋ−１）回目の一巡プロセスにおいて実行すれば足り、第Ｋ回目の一巡処理では実行を省略することができる。また、無演算処理が行われた場合も、元の部分被除数Ｚｉがそのまま部分剰余Ｒｉになるため、部分剰余Ｒｉを被除数レジスタ２０′に書き戻す処理は必要ない。
【０３１４】
合計（ｍ＋α）ビットのデータが格納されている被除数レジスタ２０′からｎビットの部分被除数Ｚｉを抽出する位置や、被除数レジスタ２０′にｎビットの部分剰余Ｒｉを書き戻す位置は、図３２の演算例を参照すれば容易に理解できよう。
【０３１５】
すなわち、回数パラメータがｉ＝１に設定された第１回目の抽出位置は、拡張被除数Ｚ′の先頭から２ビット目の位置にすればよい。図３２に示す例の場合、拡張被除数Ｚ′の先頭から２〜５ビット目のデータを抽出すれば、第１回目の演算処理に用いる部分被除数Ｚ１を抽出することができる。一方、回数パラメータがｉ≧２に設定された第２回目以降の抽出位置は、前回の抽出位置から１ビットだけ下位側にずれた位置となるようにすればよい。図３２に示す例の場合、部分被除数Ｚ２，Ｚ３は、それぞれ１ビットずつ下位側にずれた位置から抽出したものになっている。
【０３１６】
また、部分剰余Ｒｉを書き戻す位置は、部分被除数Ｚｉを抽出した位置と同じ位置にすればよい。図３２に示す例の場合、たとえば、第１回目の部分剰余Ｒ１「１１１０」を、拡張被除数Ｚ′から部分被除数Ｚ１「００１０」を抽出した位置に書き戻すようにすれば、拡張被除数Ｚ′の内容は元の「０００１０１」から「０１１１０１」に書き換えられることになり、第２回目の一巡プロセスでは、その３〜６ビット目の「１１０１」を部分被除数Ｚ２として抽出することができる。
【０３１７】
このように、理論的には、被除数レジスタ２０′に拡張被除数Ｚ′を格納した後、ｎビットの部分被除数Ｚｉの抽出処理と、ｎビットの部分剰余Ｒｉの書戻処理とを、位置を１ビットずつ下位側にずらしながら繰り返し実行してゆけばよいことになる。ただ、レジスタからの読出位置やレジスタに対する書込位置を、回数パラメータｉに応じて変える処理を行うためには、桁位置を示すカウンタなどを用意する必要があり、回路構成が複雑になる。そこで実用上は、第１の実施形態と同様に、毎回できるだけ同じ桁位置から部分被除数Ｚｉを読み出し、毎回できるだけ同じ桁位置に部分剰余Ｒｉを書き込む処理が行えるようにするのが好ましい。そのためには、被除数レジスタ２０′に対する読出位置や書込位置を１ビットずつずらしてゆく代わりに、被除数レジスタ２０′内のデータを１ビットずつずらすシフト処理を行うようにすればよい。
【０３１８】
すなわち、第２の実施形態に係る除算回路の場合、演算処理部８０は、一巡プロセスを行う際に、常に、被除数レジスタ２０′に格納されているデータの第２ビット目〜第（ｎ＋１）ビット目を部分被除数Ｚｉとして抽出し、少なくとも第１回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理で得られた部分剰余Ｒｉを被除数レジスタ２０′の第２ビット目〜第（ｎ＋１）ビット目の部分に格納し、更に、被除数レジスタ２０′内のデータを１ビット分上位側にシフトさせるレジスタ更新処理を実行すればよい。要するに、回数パラメータｉにかかわらず、常に、被除数レジスタ２０′内の第２ビット目〜第（ｎ＋１）ビット目の部分から読み出したデータを部分被除数Ｚｉとし、回数パラメータｉが１〜Ｋ−１をとる際には、加減算処理で得られた部分剰余Ｒｉを、被除数レジスタ２０′内の第２ビット目〜第（ｎ＋１）ビット目の部分に書き込んだ上、被除数レジスタ２０′内のデータを１ビット分シフトすればよい。
【０３１９】
このように、被除数レジスタ２０′に対するシフト処理を行う形態を採用する場合、図３６に示す演算処理部８０を構成する各要素には、次のような機能をもたせておけばよい。
【０３２０】
まず、加減算要否判定部８１については、第ｉ回目（１≦ｉ≦Ｋ）の一巡プロセスにおいて加算処理もしくは減算処理が必要か否かを判定する機能をもたせておく。ここに示す第２の実施形態でも、前述した第１の実施形態と同様に、部分被除数Ｚｉが零の場合（全ビットが０の場合）に、加減算不要との判定がなされることになるので、加減算要否判定部８１は、被除数レジスタ２０′から抽出した部分被除数Ｚｉの全ビットが０か否かを調べ、部分被除数Ｚｉが零の場合（全ビットが０の場合）には否定的判定（加減算不要との判定）を行い、部分被除数Ｚｉが零でない場合（いずれかのビットが１の場合）には肯定的判定（加減算必要との判定）を行うようにすればよい。
【０３２１】
一方、符号比較部８２は、加減算部８３が行うべき演算が、減算処理か加算処理かを決定する処理を行う役割を果たす構成要素である。図３２に示す演算例の場合、円で囲って示すビット「丸０」もしくはビット「丸１」が符号の比較に利用される比較対象ビットになる。上述したように、各一巡プロセスにおいて、被除数レジスタ２０′に対してシフト処理が行われることを考慮すれば、図３２に示す被除数側の比較対象ビットは、いずれも各時点において被除数レジスタ２０′に格納されているデータの先頭ビットになることがわかるであろう。
【０３２２】
したがって、符号比較部８２は、その時点において、被除数レジスタ２０′に格納されているデータの先頭ビット（ｉ＝１の場合は、拡張被除数Ｚ′の先頭ビットになり、ｉ≧２の場合は、直前の一巡プロセスで得られた部分剰余の先頭ビットになる）と、除数レジスタ３０に格納されているデータの先頭ビット（正規化除数Ｄ′の先頭ビット）とを比較し、比較対象ビットの値が同一であれば同符号、異なれば異符号との判定を行えばよい。
【０３２３】
加減算部８３は、加減算要否判定部８１が肯定的判定を行ったときに、符号比較部８２による比較結果が同符号の場合には抽出したｎビットの部分被除数Ｚｉからｎビットの正規化除数Ｄ′を減じる減算処理を実行し、異符号の場合には抽出したｎビットの部分被除数Ｚｉにｎビットの正規化除数Ｄ′を加える加算処理を実行し、ｎビットからなる部分剰余Ｒｉを得る処理を行う。
【０３２４】
また、部分商格納部８４は、加減算部８３によって減算処理が実行された場合には正の部分商を示すデータを、加算処理が実行された場合には負の部分商を示すデータを、無演算処理が実行された場合には零の部分商を示すデータを、それぞれ商レジスタ６０の対応桁に格納する処理を行う。前述したとおり、実際には、正の部分商および負の部分商は、それぞれ正の商レジスタ６１および負の商レジスタ６２にビット「１」として別個に格納され、零の部分商は、これら２つのレジスタ６１，６２にビット「０」として格納される。
【０３２５】
そして、レジスタ更新部８５は、少なくとも第１回目〜第（Ｋ−１）回目の各一巡プロセスにおいて、加算処理もしくは減算処理で得られた部分剰余Ｒｉを被除数レジスタ２０′の第２ビット目〜第（ｎ＋１）ビット目の部分に格納する書込処理と、被除数レジスタ２０′内のデータを１ビット分上位側にシフトさせるシフト処理と、を実行する。なお、第Ｋ回目の一巡プロセス（ｉ＝Ｋ）では、これらの処理を行う必要はない。
【０３２６】
最後に、図３６に示す除算回路について、上述したシフト処理を行う実施形態を採用した場合の動作を、図３７〜図３９に示しておく。これらの図に示された例は、図３２に例示した演算手順によって「５÷２」なる除算を実行する際の、第１回目〜第３回目の一巡プロセスにおけるレジスタの変遷を示すものである。
【０３２７】
図３７は、第１回目（ｉ＝１）の一巡プロセスの動作を示している。まず、初期状態では、図(a) に示すように、除数レジスタ３０に、ｎ＝４ビットの正規化除数Ｄ′「０１００」が格納されており、図(b) に示すように、被除数レジスタ２０′に、ｍ＝４ビットの被除数Ｚをα＝２ビット分拡張することによって得られた６ビットの拡張被除数Ｚ′「０００１０１」が格納されている。ここで、太枠で囲った両レジスタの先頭ビットは、符号比較部８２による比較対象となるビットである。前述したように、符号比較部８２は、常に、被除数レジスタ２０′に格納されているデータの先頭ビットと、除数レジスタ３０に格納されているデータの先頭ビットとを比較する。
【０３２８】
一方、第１回目の一巡プロセスでは、図(c) に示すように、被除数レジスタ２０′の第２〜５ビット目に位置する４ビット「００１０」が部分被除数Ｚ１として抽出される。この部分被除数Ｚ１「００１０」は零ではないので、加減算要否判定部８１によって演算必要との判定がなされ、しかも、符号比較部８２による比較結果は同符号であるため、加減算部８３によって減算処理が実行される。図(c) には、部分被除数Ｚ１「００１０」と正規化除数Ｄ′「０１００」との減算処理により、部分剰余Ｒ１「１１１０」が得られた状態が示されている（図には、正規化除数Ｄ′が２の補数「１１００」として記載されている）。
【０３２９】
こうして得られた部分剰余Ｒ１「１１１０」は、レジスタ更新部８５によって、図(d) に示すように、被除数レジスタ２０′の第２〜５ビット目の部分に書き戻される。すなわち、第２〜５ビット目の４ビットは、上書きされて内容が書き換えられ、被除数レジスタ２０′には「０１１１０１」なるデータが格納されている状態になる。更に、レジスタ更新部８５によって、被除数レジスタ２０′内のデータを１ビット分上位側にシフトするシフト処理が実行される。これにより、最上位ビットは押し出され、末尾に新たなビット「０」が付加され、被除数レジスタ２０′の内容は、図(e) に示すように、「１１１０１０」になる。図において上部にドットを付した「０」は、新たに付加されたビットであることを示している。
【０３３０】
また、部分商格納部８４によって、正の商レジスタ６１および負の商レジスタ６２の最下位ビットに対する書込処理が行われる。ここでは、減算処理が行われたため、正の商レジスタ６１の最下位ビットには「１」が、負の商レジスタ６２の最下位ビットには「０」が、それぞれ書き込まれる。図(f) は、このときの状態を示している。
【０３３１】
なお、各商レジスタの上位ビットに記された「＊」は、当該ビットが未書込状態であることを示している。除算開始時に、商レジスタをリセットして、全ビットを初期値「０」にする操作を行うようにした場合、「＊」のビットはすべて「０」ということになる。また、この場合、部分商格納部８４は、正の商レジスタ６１の最下位ビットに「１」を書き込む処理を行えば足り、負の商レジスタ６２の最下位ビットに「０」を書き込む処理を省略することができる（以下も同様である）。
【０３３２】
こうして、商レジスタ６１，６２に対する書込処理を行った後、商レジスタ６１，６２に格納されているデータを１ビット分上位側にシフトする（最下位ビットには、任意のビットを新たに付加すればよい）。
【０３３３】
図３８は、第２回目（ｉ＝２）の一巡プロセスの動作を示している。除数レジスタ３０の内容は、図(a) に示すように「０１００」のまま変わりないが、被除数レジスタ２０′の内容は、図(b) に示す状態（図３７(e) に示す状態）に更新されている。やはり太枠で囲った両レジスタの先頭ビットは、符号比較部８２による比較対象ビットである。
【０３３４】
第２回目の一巡プロセスにおいても、図(c) に示すように、被除数レジスタ２０′の第２〜５ビット目に位置する４ビット「１１０１」が部分被除数Ｚ２として抽出される。この部分被除数Ｚ２「１１０１」は零ではないので、加減算要否判定部８１によって演算必要との判定がなされ、しかも、符号比較部８２による比較結果は異符号であるため、加減算部８３によって加算処理が実行される。図(c) には、部分被除数Ｚ２「１１０１」と正規化除数Ｄ′「０１００」との加算処理により、部分剰余Ｒ２「０００１」が得られた状態が示されている。
【０３３５】
こうして得られた部分剰余Ｒ２「０００１」は、レジスタ更新部８５によって、図(d) に示すように、被除数レジスタ２０′の先頭から２〜５番目のビットの部分に書き戻される。すなわち、これらの部分に相当する４ビットは、上書きされて内容が書き換えられ、被除数レジスタ２０′には「１０００１０」なるデータが格納されている状態になる。更に、レジスタ更新部８５によって、被除数レジスタ２０′内のデータを１ビット分上位側にシフトするシフト処理が実行される。これにより、最上位ビットは押し出され、末尾に新たなビット「０」が付加され、被除数レジスタ２０′の内容は、図(e) に示すように、「０００１００」になる。図において上部にドットを付した「０」は、新たに付加されたビットであることを示している。
【０３３６】
また、部分商格納部８４によって、正の商レジスタ６１および負の商レジスタ６２の最下位ビットに対する書込処理が行われる。ここでは、加算処理が行われたため、正の商レジスタ６１の最下位ビットには「０」が、負の商レジスタ６２の最下位ビットには「１」が、それぞれ書き込まれる。図(f) は、このときの状態を示している。最後に、部分商格納部８４により、商レジスタ６１，６２に対するシフト処理が行われる。
【０３３７】
図３９は、第３回目（ｉ＝３）の一巡プロセスの動作を示している。除数レジスタ３０の内容は、図(a) に示すように「０１００」のまま変わりないが、被除数レジスタ２０′の内容は、図(b) に示す状態（図３８(e) に示す状態）に更新されている。やはり太枠で囲った両レジスタの先頭ビットは、符号比較部８２による比較対象ビットである。
【０３３８】
第３回目の一巡プロセスでは、図(c) に示すように、被除数レジスタ２０′の第２〜５ビット目に位置する４ビット「００１０」が部分被除数Ｚ３として抽出される。この部分被除数Ｚ３「００１０」は零ではないので、加減算要否判定部８１によって演算必要との判定がなされ、しかも、符号比較部８２による比較結果は同符号であるため、加減算部８３によって減算処理が実行される。図(c) には、部分被除数Ｚ３「００１０」と正規化除数Ｄ′「０１００」との減算処理により、部分剰余Ｒ３「１１１０」が得られた状態が示されている（図には、正規化除数Ｄ′が２の補数「１１００」として記載されている）。
【０３３９】
ここで、演算回数Ｋ＝３であり、回数パラメータｉ＝３に達しているため、この時点で得られた部分剰余Ｒ３「１１１０」は、仮の剰余Ｒ′になる。また、第４回目の一巡プロセスは行われないため、レジスタ更新部８５による被除数レジスタ２０′の更新処理（部分剰余Ｒ３の書戻処理やシフト処理）を行う必要はない。そのため、図(d) ，(e) は空欄になっている。
【０３４０】
部分商格納部８４は、正の商レジスタ６１および負の商レジスタ６２の最下位ビットに対する書込処理を行う。ここでは、減算処理が行われたため、正の商レジスタ６１の最下位ビットには「１」が、負の商レジスタ６２の最下位ビットには「０」が、それぞれ書き込まれる。図(f) は、このときの状態を示しており、正の商レジスタ６１に格納されている正の商「１０１」から負の商レジスタ６２に格納されている負の商「０１０」を引き算して得られる「０１１」が仮の商Ｑ′になる（図３４参照）。こうして得られた仮の商Ｑ′「０１１」と仮の剰余Ｒ′「１１１０」に基づく補正処理を行うことにより、真の商Ｑ「０１０」と真の剰余Ｒ「０００１」が得られることは、図３５で説明したとおりである。
【０３４１】
＜３−７．  第２の実施形態のまとめ＞
これまで述べてきた第２の実施形態の要点をまとめると、結局、図３１に示す特徴１′，特徴２，特徴３′に集約されることになる。特徴１′を実施するためには、ｍビットの符号付き被除数Ｚの先頭部分に、その先頭ビットと同じビットを所定数α（但し、ｎ−１≧α≧２）だけ付加して（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する手段を設けておけばよい。特徴２を実施するためには、ｎビットの符号付き除数Ｄを、冗長桁がなくなるように上位側にβビットずらし末尾にビット「０」をβ個だけ付加することにより、正規化除数Ｄ′を生成する手段を設けておけばよい。特徴３′を実施するためには、Ｋ＝（ｍ−ｎ）＋α＋βなる式により、演算回数Ｋを求める手段を設けておけばよい。
【０３４２】
そして、一巡プロセスを実行するために、拡張被除数Ｚ′の所定の抽出位置からｎビットの部分被除数Ｚｉを抽出し、当該部分被除数Ｚｉと正規化除数Ｄ′との間で、減算処理、加算処理、もしくは無演算処理のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余Ｒｉとし、実行した演算処理の種別を示すデータを部分商Ｑｉとし、部分剰余Ｒｉを拡張被除数Ｚ′の所定位置に書き戻す処理を実行する機能をもった手段を向けておき、各一巡プロセスにおける演算処理を、部分被除数Ｚｉの抽出位置を拡張被除数Ｚ′の先頭から２ビット目の位置から順次１ビットずつ繰り下げながら、演算回数Ｋだけ繰り返し実行した後、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求めるようにすればよい。
【０３４３】
また、この第２の実施形態を、除算回路が被除数Ｚと除数Ｄとを入力して除算演算を行い、商Ｑおよび剰余Ｒを求めて出力する除算方法として捉えると、当該除算方法は、
ｍビットの符号付き被除数Ｚの先頭部分に、その先頭ビットと同じビットを所定数α（但し、ｎ−１≧α≧２）だけ付加して（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する第１の段階と、
ｎビットの符号付き除数Ｄを、冗長桁がなくなるように上位側にβビットだけずらし末尾にビット「０」をβ個だけ付加することにより、正規化除数Ｄ′を生成する第２の段階と、
拡張被除数Ｚ′の所定の抽出位置からｎビットの部分被除数Ｚｉを抽出し、当該部分被除数Ｚｉと正規化除数Ｄ′との間で、減算処理、加算処理、もしくは無演算処理のいずれかの演算処理を実行し、得られたｎビットのデータを部分剰余Ｒｉとし、実行した演算処理の種別を示すデータを部分商Ｑｉとし、部分剰余Ｒｉを拡張被除数Ｚ′の所定位置に書き戻す処理を実行する第３の段階と、
を有し、
第３の段階における演算処理を、部分被除数Ｚｉの抽出位置を拡張被除数Ｚ′の先頭から２ビット目の位置から順次１ビットずつ繰り下げながら、Ｋ＝（ｍ−ｎ）＋α＋βなる式で定義される演算回数Ｋだけ繰り返し実行した後、得られた部分商と部分剰余とに基づいて商Ｑおよび剰余Ｒを求める除算方法ということができる。
【０３４４】
より具体的には、この除算方法は、図３３の流れ図に示す除算手順と、図２３の流れ図に示す補正処理手順とによって構成されている。
【０３４５】
ここで、図３３の流れ図に示す除算手順は、ｍビットからなる符号付きビット列のデータとして被除数Ｚを入力するとともに、ｎビットからなる符号付きビット列のデータとして除数Ｄを入力するデータ入力段階（ステップＳ１１Ａ）と、予め設定されている所定数α（但し、ｎ−１≧α≧２）に基づいて、被除数Ｚに対して、先頭の符号ビットと同じビットをα個だけ先頭部分に付加し、（ｍ＋α）ビットからなる拡張被除数Ｚ′を生成する符号拡張処理を行う符号拡張処理段階（ステップＳ１２Ｂ）と、除数Ｄに対して、先頭ビットと第２番目のビットとが異なる値になるまで、全ビットを上位側に１ビットだけずらし末尾にビット「０」を付加するシフト動作を繰り返す正規化処理を実行し、ｎビットからなる正規化除数Ｄ′を生成する正規化処理段階（ステップＳ４１Ａ）と、所定数αと、正規化処理において実行されたシフト動作の回数βと、に基づいて、演算回数ＫをＫ＝（ｍ−ｎ）＋α＋βなる式で求める演算回数決定段階（ステップＳ１３Ｂ）と、以下の(a) 〜(f) の各段階を有する一巡プロセスを実行する一巡プロセス段階と、を有している。
【０３４６】
(a) 拡張被除数Ｚ′から、所定の抽出位置を先頭としてｎビット分を部分被除数Ｚｉとして抽出し、抽出した部分被除数Ｚｉに対して加減算を行う必要があるか否かを判定する加減算要否判定段階（ステップＳ１５Ｂ）、
(b) 加減算要否判定段階において肯定的判定が行われたときに、直前の一巡プロセスで得られた部分剰余（但し、第１回目の一巡プロセスの場合は拡張被除数Ｚ′）の先頭ビットと、正規化除数Ｄ′の先頭ビットと、を比較する符号比較段階（ステップＳ１７Ａ）、
(c) 符号比較段階における比較結果が同一の場合に、部分被除数Ｚｉに対応する桁の部分商として正の部分商Ｑｉを生成し、部分被除数Ｚｉから正規化除数Ｄ′を減じる減算処理を実行して部分剰余Ｒｉを得る減算段階（ステップＳ１９Ａ）、
(d) 符号比較段階における比較結果が異なる場合に、部分被除数Ｚｉに対応する桁の部分商として負の部分商Ｑｉを生成し、部分被除数Ｚｉに正規化除数Ｄ′を加える加算処理を実行して部分剰余Ｒｉを得る加算段階（ステップＳ２０Ａ）、
(e) 加減算要否判定段階において否定的判定が行われたときに、部分被除数Ｚｉに対応する桁の部分商として零の部分商Ｑｉを生成し、部分被除数Ｚｉをそのまま部分剰余Ｒｉとする無演算段階（ステップＳ１６Ａ）、
(f) 減算段階もしくは加算段階が行われたときに、得られた部分剰余Ｒｉによって拡張被除数Ｚ′の対応桁位置を書き換える更新段階（ステップＳ２２Ａ）。
【０３４７】
そして、この除算手順では、一巡プロセス段階を、部分被除数Ｚｉの抽出位置を拡張被除数Ｚ′の先頭から２ビット目の位置から順次１ビットずつ繰り下げながら、合計Ｋ回実行し（ただし、(f) 更新段階については、第Ｋ回目は実行しなくてもよい）、得られた部分商と部分剰余とに基づいて、以下のような補正処理手順を実行することにより、商Ｑおよび剰余Ｒを求めることになる。
【０３４８】
すなわち、図２３の流れ図に示す補正処理手順として、第Ｋ回目の一巡プロセスにおいて得られた部分剰余Ｒｋを仮の剰余Ｒ′とし、合計Ｋ回の一巡プロセスの実行により得られた部分商Ｑｉの集合を仮の商Ｑ′として、次の(g) ，(h) に記載する２つの処理、
(g) 商の補正処理
仮の剰余Ｒ′が０でなく、かつ、その符号が被除数Ｚの符号と異なる場合に実行される処理であって、被除数Ｚと除数Ｄとが同符号のときには仮の商Ｑ′を１だけ減少させ、仮の剰余Ｒ′を正規化除数Ｄ′だけ増加させる補正を行い、被除数Ｚと除数Ｄとが異符号のときには仮の商Ｑ′を１だけ増加させ、仮の剰余Ｒ′を正規化除数Ｄ′だけ減少させる補正を行う処理、
(h) 剰余の補正処理
正規化処理において実行されたシフト動作の回数βを用いて、仮の剰余をβビット分桁下げする処理、
を実行することにより商Ｑおよび剰余Ｒを求めることになる。
【０３４９】
§１で述べた従来の非回復法除算で、「５÷２」（二進表現では「０１０１」÷「００１０」）なる除算演算を行うと、図１２に示すように、演算回数Ｋ＝５となり、５回の演算処理が必要になるが、§２で述べた本発明の第１の実施形態に係る非回復法除算で同じ除算演算を行うと、図２１に示すように、演算回数Ｋ＝４となり、４回の演算処理で済む。そして、ここで述べた本発明の第２の実施形態に係る非回復法除算処理で同じ除算演算を行うと、図３２に示すように、演算回数Ｋ＝３となり、３回の演算処理で済み、必要な演算回数が更に低減する。この効果は、桁数がより多い数値についての除算演算では、更に顕著になる。
【０３５０】
したがって、本発明の第２の実施形態に係る除算回路や除算方法を採用すれば、やはり従来に比べて高速な非回復法除算を実行することができるようになる。しかも、全Ｋ回の演算処理に基づいて得られる商Ｑおよび剰余Ｒは、除算結果として正しい桁をもった整数になるため、本除算回路の外部で小数点位置を調整するための余分な構成要素は不要になり、回路構成を単純化することも可能になる。
【０３５１】
なお、第２の実施形態の場合の符号拡張数αの最小値が２であるのに対して、第１の実施形態の場合の符号拡張数αの最小値は１である。したがって、上例の第１の実施形態の場合、α＝１に設定すれば、必要な演算回数Ｋは第２の実施形態と同じように、Ｋ＝３になる。ただ、第１の実施形態と第２の実施形態とを比較すると、前者では、第１回目（ｉ＝１）の一巡処理における一部の取り扱いが、第２回目以降（ｉ≧２）の一巡処理における取り扱いと異ならせる必要が生じるが、後者では、そのような区別を行う必要はない。
【０３５２】
たとえば、拡張被除数Ｚ′から部分被除数Ｚｉを抽出する際の抽出位置は、第１の実施形態では、ｉ＝１の場合は先頭位置（図２７参照）、ｉ≧２の場合は先頭から１ビット下位側へずらした位置（図２８〜図３０参照）とする必要があるのに対して、第２の実施形態では、ｉの値にかかわらず、常に先頭から１ビット下位側へずらした位置（図３７〜図３９参照）でよい。
【０３５３】
また、被除数レジスタを更新する際の部分剰余Ｒｉの書戻位置は、第１の実施形態では、ｉ＝１の場合は先頭位置（図２７参照）、ｉ≧２の場合は先頭から１ビット下位側へずらした位置（図２８〜図３０参照）とする必要があるのに対して、第２の実施形態では、ｉの値にかかわらず、常に先頭から１ビット下位側へずらした位置（図３７〜図３９参照）でよい。また、シフト処理についても、第１の実施形態では、ｉ＝１の場合はシフトせず（図２７参照）、ｉ≧２の場合は１ビットシフトする（図２８〜図３０参照）必要があるのに対して、第２の実施形態では、ｉの値にかかわらず、常に１ビットシフトすればよい（図３７〜図３９参照）。
【０３５４】
したがって、回路構成をより単純化できる、という点では、第１の実施形態よりも第２の実施形態の方が好ましいと言える。
【０３５５】
＜＜＜  §４．  加減算要否判定方法の変形例  ＞＞＞
第１の実施形態の除算手順を示す図２２の流れ図のステップＳ１５Ａおよび第２の実施形態の除算手順を示す図３３の流れ図のステップＳ１５Ｂでは、各回の一巡プロセスの最初に、加減算の要否を判定する処理が行われる。この処理で、肯定的な判定が行われた場合は、ステップＳ１９Ａにおける減算処理もしくはステップＳ２０Ａにおける加算処理が実行されることになるが、否定的な判定が行われた場合は、ステップＳ１６Ａにおける無演算処理が実行されることになる。
【０３５６】
これまで述べてきた実施形態では、いずれも、この加減算要否判定の方法として、抽出した部分被除数Ｚｉが零の場合（全ビットが０の場合）は加減算不要と判断し、それ以外の場合は加減算必要と判断する方法を採用していた。これは、第ｉ回目の一巡プロセスにおいて、抽出した部分被除数Ｚｉが零であった場合は、何ら演算を行わずに、抽出位置を１桁下げて、第（ｉ＋１）回目の一巡プロセスに移行しても問題が生じないためである。部分被除数Ｚｉが零であった場合に加減算を省略すれば、演算速度の向上に寄与することができる。
【０３５７】
このように、部分被除数Ｚｉが零の場合に加減算を省略し、無演算処理を行い、対応する桁には零の部分商を立てる手法は、従来から一般に行われていた除算の演算手法である。ただ、本発明のように、除数Ｄに対する正規化処理を行うことを前提とした除算では、加減算を省略できるのは、必ずしも部分被除数Ｚｉが零の場合に限られるわけではなく、演算処理に関与する特定ビットが特定パターンをとる場合にも、加減算の省略が可能になる。そこで、以下、加減算不要との判定が可能な固有のビットパターンをいくつか説明する。
【０３５８】
＜４−１．  固有ビットパターン「０００」および「１１１」＞
本願発明者は、第１の実施形態における第１回目の一巡プロセスに関しては、部分被除数Ｚ１の先頭の３ビットが「０００」もしくは「１１１」という固有ビットパターンをとる場合に、加減算を省略することができることを見出した。以下、その理由を説明する。
【０３５９】
いま、図４０(a) に示すように、任意のビット数をもった部分被除数Ｚ１（この例では６ビットであるが、後続する７ビット目が破線枠で示されている。）と同じビット数をもった正規化除数Ｄ′との間で加減算を行う場合を考えてみる。第１の実施形態における第１回目の一巡プロセスでは、図２１の演算処理１（丸数字１の区画の演算処理）に示すように、拡張被除数Ｚ′側の符号ビット（符号比較の対象となる先頭のビット丸０）と、正規化除数Ｄ′の符号ビット（先頭ビット：図示の例では、２の補数が表示されているため、符号は反転している）の桁位置が揃えられている。そこで、図４０(a) に示す例でも、部分被除数Ｚ１の符号ビットＳと正規化除数Ｄ′の符号ビットＳを揃えて示してある。
【０３６０】
ここで、部分被除数Ｚ１は、正規化処理が施されているわけではないので、先頭ビットは符号ビットＳであるものの、２ビット目以降は、冗長桁（符号ビットと有意桁ビットとの間に介在するビット）であるのか、有意桁であるのかは不明である。そこで、図では、２ビット目以降を「？」で示してある。一方、正規化除数Ｄ′には、正規化処理が施されているため、冗長桁は存在しない。すなわち、元の除数Ｄに冗長桁が存在していたとしても、図１７や図１８に示す例のように、正規化処理によって当該冗長桁は削除され、正規化除数Ｄ′には冗長桁は含まれていない。したがって、正規化除数Ｄ′は、先頭ビットが符号ビットＳであり、２ビット目以降が有意桁ビットである。図では、この有意桁ビットを「Ｖ」で示してある。
【０３６１】
さて、次に、図４０(b) に示すように、部分被除数Ｚ１の先頭の３ビットが太枠で示すように「０００」であった場合を考える。４ビット目以降は任意の値でよいので「？」で示されている。正規化除数Ｄ′は、上述したとおり、先頭は符号ビット「Ｓ」、２ビット目以降は有意桁ビット「Ｖ」である。この図４０(b) に示す状態において、部分被除数Ｚ１と正規化除数Ｄ′との間で減算や加算を行わずに、無演算処理とした場合に、第２回目の一巡プロセスで問題が生じるか否かを考えてみる。第１回目の一巡プロセスで無演算処理が行われると、第２回目の一巡プロセスでは、図４０(c) に実線枠で示すように、１ビットだけ下位側にシフトした位置から第２回目の部分被除数Ｚ２が抽出されることになり、同じく１ビットだけ下位側にシフトした位置に、正規化除数Ｄ′が桁合わせされることになる。
【０３６２】
この図４０(c) に示す状態で減算処理や加算処理を行った場合に、問題が生じないためには、当該状態において、除算成立条件が満足されていればよい。すなわち、「部分被除数Ｚ２の絶対値が、正規化除数Ｄ′の絶対値の２倍未満である」という条件が満たされていればよい。図４０(c) に示す状態において、もし、この除算成立条件が満足されていなかったとすると、図４０(b) に示す状態において、減算処理もしくは加算処理を行っておくべきであったことになり、図４０(b) に示す状態での無演算処理という選択は誤っていたことになる。逆に、図４０(c) に示す状態において、除算成立条件が満足されていれば、図４０(b) に示す状態での無演算処理という選択は正しかったことになる。
【０３６３】
そこで、図４０(c) に示す状態において、除算成立条件が満足されるのか否かという点を検討するために、除算成立条件を満たす上で最も厳しい状況を当てはめて考えてみよう。すなわち、部分被除数Ｚ２の絶対値が最大をとり、正規化除数Ｄ′の絶対値が最小をとる、というクリティカルなケースを想定してみる。
【０３６４】
図４０(d) は、図４０(c) に示す状態において、正規化除数Ｄ′の先頭に位置する符号ビットＳが０の場合（すなわち、正規化除数Ｄ′が正の数の場合）におけるクリティカルなケースを示す図である。ここで、部分被除数Ｚ２は正の数であるので、絶対値が最大をとる場合、図４０(c) に示すＺ２の下位４ビットの「？？？？」の部分は「１１１１」となり、結局、部分被除数Ｚ２は図４０(d) に示すように「００１１１１」（１０進表現では＋１５）ということになる。また、正規化除数Ｄ′も正の数である。しかも、正規化除数Ｄ′は正規化されているため、図４０(c) に示すＤ′の有意桁ビット「ＶＶＶＶＶ」の先頭の「Ｖ」は、符号ビットＳとは異なる値になる。すなわち、図４０(c) に示すＤ′の符号ビットＳが０であれば、先頭の「Ｖ」は必ず１ということになる。結局、正規化除数Ｄ′は、その絶対値が最小をとる場合、図４０(d) に示すように「０１００００」（１０進表現では＋１６）ということになる。
【０３６５】
この図４０(d) に示すクリティカルなケースでは、第２回目の一巡プロセスにおける符号比較対象ビットは、部分被除数Ｚ２に１ビットだけ先行する破線枠内のビット０と、正規化除数Ｄ′の先頭ビット０ということになるので、同符号になり、減算処理が行われることになるが、除算成立条件は満たされている。すなわち、「部分被除数Ｚ２の絶対値１５は、正規化除数Ｄ′の絶対値１６の２倍未満である」との条件が満たされている。
【０３６６】
一方、図４０(e) は、図４０(c) に示す状態において、正規化除数Ｄ′の先頭に位置する符号ビットＳが１の場合（すなわち、正規化除数Ｄ′が負の数の場合）におけるクリティカルなケースを示す図である。上述したとおり、部分被除数Ｚ２は正の数であるので、絶対値が最大をとる場合、図４０(e) に示すように「００１１１１」（１０進表現では＋１５）ということになる。これに対して、正規化除数Ｄ′は負の数である。しかも、正規化除数Ｄ′は正規化されているため、図４０(c) に示すＤ′の有意桁ビット「ＶＶＶＶＶ」の先頭の「Ｖ」は、符号ビットＳとは異なる値になる。すなわち、図４０(c) に示すＤ′の符号ビットＳが１であれば、先頭の「Ｖ」は必ず０ということになる。結局、正規化除数Ｄ′は、その絶対値が最小をとる場合、図４０(e) に示すように「１０１１１１」（１０進表現では−１７）ということになる。
【０３６７】
この図４０(e) に示すクリティカルなケースでは、第２回目の一巡プロセスにおける符号比較対象ビットは、部分被除数Ｚ２に１ビットだけ先行する破線枠内のビット０と、正規化除数Ｄ′の先頭ビット１ということになるので、異符号になり、加算処理が行われることになるが、除算成立条件は満たされている。すなわち、「部分被除数Ｚ２の絶対値１５は、正規化除数Ｄ′の絶対値１７の２倍未満である」との条件が満たされている。
【０３６８】
このように、クリティカルなケースにおいて、除算成立条件が満たされるので、結局、図４０(c) に示す状態では、どのような場合であっても除算成立条件が満たされることになる。これは、図４０(b) に示すように、第１回目の一巡プロセスにおいて、部分被除数Ｚ１の先頭の３ビットが太枠で示すように「０００」であった場合、無演算処理を行うという選択が正しかったことを示している。
【０３６９】
次に、図４１を参照しながら、部分被除数Ｚ１の先頭の３ビットが「１１１」であった場合を考えてみよう。図４１(a) は、図４０(a) と全く同じ図であり、先頭に符号ビットＳ、２ビット目以降に任意ビット「？？？？？」を有する部分被除数Ｚ１と、先頭に符号ビットＳ、２ビット目以降に有意桁ビット「ＶＶＶＶＶ」を有する正規化除数Ｄ′とが、先頭の桁位置を合わせて配置されている。
【０３７０】
ここでは、図４１(b) に示すように、部分被除数Ｚ１の先頭の３ビットが太枠で示すように「１１１」であった場合を考える。４ビット目以降は任意の値でよいので「？」で示されている。そこで、この図４１(b) に示す状態において、部分被除数Ｚ１と正規化除数Ｄ′との間で減算や加算を行わずに、無演算処理とした場合に、第２回目の一巡プロセスで問題が生じるか否かを考えてみよう。第１回目の一巡プロセスで無演算処理が行われると、第２回目の一巡プロセスでは、図４１(c) に実線枠で示すように、１ビットだけ下位側にシフトした位置から第２回目の部分被除数Ｚ２が抽出されることになり、同じく１ビットだけ下位側にシフトした位置に、正規化除数Ｄ′が桁合わせされることになる。
【０３７１】
この図４１(c) に示す状態で減算処理や加算処理を行った場合に、問題が生じないためには、前述の例と同様に、除算成立条件が満足されていればよい。そこで、ここでも、部分被除数Ｚ２の絶対値が最大をとり、正規化除数Ｄ′の絶対値が最小をとる、というクリティカルなケースを想定してみる。
【０３７２】
図４１(d) は、図４１(c) に示す状態において、正規化除数Ｄ′の先頭に位置する符号ビットＳが１の場合（すなわち、正規化除数Ｄ′が負の数の場合）におけるクリティカルなケースを示す図である。ここで、部分被除数Ｚ２は負の数であるので、絶対値が最大をとる場合、図４１(c) に示すＺ２の下位４ビットの「？？？？」の部分は「００００」となり、結局、部分被除数Ｚ２は図４１(d) に示すように「１１００００」（１０進表現では−１６）ということになる。また、正規化除数Ｄ′も負の数である。しかも、正規化除数Ｄ′は正規化されているため、図４１(c) に示すＤ′の有意桁ビット「ＶＶＶＶＶ」の先頭の「Ｖ」は、符号ビットＳとは異なる値になる。すなわち、図４１(c) に示すＤ′の符号ビットＳが１であれば、先頭の「Ｖ」は必ず０ということになる。結局、正規化除数Ｄ′は、その絶対値が最小をとる場合、図４１(d) に示すように「１０１１１１」（１０進表現では−１７）ということになる。
【０３７３】
この図４１(d) に示すクリティカルなケースでは、第２回目の一巡プロセスにおける符号比較対象ビットは、部分被除数Ｚ２に１ビットだけ先行する破線枠内のビット１と、正規化除数Ｄ′の先頭ビット１ということになるので、同符号になり、減算処理が行われることになるが、除算成立条件は満たされている。すなわち、「部分被除数Ｚ２の絶対値１６は、正規化除数Ｄ′の絶対値１７の２倍未満である」との条件が満たされている。
【０３７４】
一方、図４１(e) は、図４１(c) に示す状態において、正規化除数Ｄ′の先頭に位置する符号ビットＳが０の場合（すなわち、正規化除数Ｄ′が正の数の場合）におけるクリティカルなケースを示す図である。上述したとおり、部分被除数Ｚ２は負の数であるので、絶対値が最大をとる場合、図４１(e) に示すように「１１００００」（１０進表現では−１６）ということになる。これに対して、正規化除数Ｄ′は正の数である。しかも、正規化除数Ｄ′は正規化されているため、図４１(c) に示すＤ′の有意桁ビット「ＶＶＶＶＶ」の先頭の「Ｖ」は、符号ビットＳとは異なる値になる。すなわち、図４１(c) に示すＤ′の符号ビットＳが０であれば、先頭の「Ｖ」は必ず１ということになる。結局、正規化除数Ｄ′は、その絶対値が最小をとる場合、図４１(e) に示すように「０１００００」（１０進表現では＋１６）ということになる。
【０３７５】
この図４１(e) に示すクリティカルなケースでは、第２回目の一巡プロセスにおける符号比較対象ビットは、部分被除数Ｚ２に１ビットだけ先行する破線枠内のビット１と、正規化除数Ｄ′の先頭ビット０ということになるので、異符号になり、加算処理が行われることになるが、除算成立条件は満たされている。すなわち、「部分被除数Ｚ２の絶対値１６は、正規化除数Ｄ′の絶対値１６の２倍未満である」との条件が満たされている。
【０３７６】
このように、クリティカルなケースにおいて、除算成立条件が満たされるので、結局、図４１(c) に示す状態では、どのような場合であっても除算成立条件が満たされることになる。これは、図４１(b) に示すように、第１回目の一巡プロセスにおいて、部分被除数Ｚ１の先頭の３ビットが太枠で示すように「１１１」であった場合、無演算処理を行うという選択が正しかったことを示している。
【０３７７】
なお、ここでは説明を省略するが、第１回目の一巡プロセスにおいて、部分被除数Ｚ１の先頭の２ビットが「００」や「１１」であった場合に無演算処理を行うと、第２回目の一巡プロセスにおいて、除算成立条件が満足されないケースが生じる。したがって、第１の実施形態における第１回目の一巡プロセスに関しては、部分被除数Ｚ１の先頭の３ビット（すなわち、拡張被除数Ｚ′の先頭３ビット）が、「０００」もしくは「１１１」という固有ビットパターンをとる場合に、加減算を省略することができることになる。もちろん、先頭の４ビットが「００００」もしくは「１１１１」である場合や、先頭の５ビットが「０００００」もしくは「１１１１１」である場合等も、「先頭の３ビットが『０００』もしくは『１１１』という固有ビットパターンをとる場合」に含まれるので、先頭３ビットのみの確認を行えば十分である。
【０３７８】
＜４−２．  固有ビットパターン「００００」および「１１１１」＞
上記§４−１では、第１の実施形態における第１回目の一巡プロセスに関する固有ビットパターンについて説明したが、ここでは、それ以外の一巡プロセス、すなわち、第１の実施形態の第２回目以降の一巡プロセスおよび第２の実施形態のすべての一巡プロセスに関する固有パターンについての説明を行う。
【０３７９】
本願発明者は、第１の実施形態の第２回目以降の一巡プロセスおよび第２の実施形態のすべての一巡プロセスに関しては、直前の一巡プロセスで得られた部分剰余（但し、第１回目の一巡プロセスの場合は拡張被除数Ｚ′）の先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に、加減算を省略することができることを見出した。以下、その理由を説明する。
【０３８０】
図２１に示すとおり、第１の実施形態における第２回目以降の一巡プロセス（丸数字２〜４の区画に示されている演算処理２〜４）では、上段に示す符号比較用ビット（丸１や丸０）に対して、下段に示す正規化除数Ｄ′（もしくは、その２の補数）は、１ビットだけ下位側にずれている。すなわち、上段の数値の符号ビット（円で囲ったビット）に対して、下段の数値の符号ビットは、１ビット右へずれていることになる。第２の実施形態におけるすべての演算処理についても同様のことが言える。たとえば、図３２に示す第２の実施形態の例では、丸数字１〜３の区画に示されている演算処理１〜３のすべてについて、上段の数値の符号ビット（円で囲ったビット）に対して、下段の数値の符号ビットは、１ビット右へずれていることになる。
【０３８１】
そこで、このように、符号ビットが１ビットずれた位置関係にある２つの数値についての演算処理を考えてみる。ここでは、具体的に、図４２(a) に示すように、任意のビット数をもった部分被除数Ｚｉ（この例では、６ビットであるが、後続する７ビット目が破線枠で示されている。）と同じビット数をもった正規化除数Ｄ′との間で加減算を行う場合を考えてみよう。
【０３８２】
図４２(a) の上段に示す部分被除数Ｚｉは、実線枠で囲って示す「？？？？？？」の部分であり、符号の比較に利用される符号ビットは、これに先行する破線枠内のＳということになる。一方、下段に示す正規化除数Ｄ′については、その先頭ビットが符号の比較に利用される符号ビットＳになる。このため、上段の数値の符号ビットＳと下段の数値の符号ビットＳとは、黒矢印で示すとおり、桁位置が１ビットずれた関係になる。図２１や図３２に示す実例を見れば、第１の実施形態における第２回目以降の一巡プロセス（ｉ≧２）や、第２の実施形態におけるすべての一巡プロセス（ｉ≧１）では、部分被除数Ｚｉと正規化除数Ｄ′との位置関係が、図４２(a) に示す状態になっていることが理解できよう。
【０３８３】
ここで、部分被除数Ｚｉは、正規化処理が施されているわけではないので、１ビット先行する破線枠内のビットは符号ビットＳであるものの、部分被除数Ｚｉを構成する実線枠内のビットは、冗長桁であるのか、有意桁であるのかは不明である。そこで、図では、部分被除数Ｚｉを構成する６ビットおよびそれに後続する７ビット目を「？」で示してある。一方、正規化除数Ｄ′には、正規化処理が施されているため、冗長桁は存在しない。したがって、正規化除数Ｄ′は、先頭ビットが符号ビットＳであり、２ビット目以降が有意桁ビットである。図では、この有意桁ビットを「Ｖ」で示してある。
【０３８４】
さて、次に、図４２(b) に示すように、第ｉ回目の一巡プロセスの開始時に、上段の数値（破線枠内の符号ビットＳと実線枠内の部分被除数Ｚｉ）の先頭の４ビットが太枠で示すように「００００」であった場合を考える。５ビット目以降は任意の値でよいので「？」で示されている。正規化除数Ｄ′は、上述したとおり、先頭は符号ビット「Ｓ」、２ビット目以降は有意桁ビット「Ｖ」である。この図４２(b) に示す状態において、部分被除数Ｚｉと正規化除数Ｄ′との間で減算や加算を行わずに、無演算処理とした場合に、第（ｉ＋１）回目の一巡プロセスで問題が生じるか否かを考えてみる。第ｉ回目の一巡プロセスで無演算処理が行われると、第（ｉ＋１）回目の一巡プロセスでは、図４２(c) に実線枠で示すように、１ビットだけ下位側にシフトした位置から第（ｉ＋１）回目の部分被除数Ｚ（ｉ＋１）が抽出されることになり、同じく１ビットだけ下位側にシフトした位置に、正規化除数Ｄ′が桁合わせされることになる。
【０３８５】
この図４２(c) に示す状態で減算処理や加算処理を行った場合に、問題が生じないためには、当該状態において、除算成立条件が満足されていればよい。すなわち、「部分被除数Ｚ（ｉ＋１）の絶対値が、正規化除数Ｄ′の絶対値の２倍未満である」という条件が満たされていればよい。図４２(c) に示す状態において、もし、この除算成立条件が満足されていなかったとすると、図４２(b) に示す状態において、減算処理もしくは加算処理を行っておくべきであったことになり、図４２(b) に示す状態での無演算処理という選択は誤っていたことになる。逆に、図４２(c) に示す状態において、除算成立条件が満足されていれば、図４２(b) に示す状態での無演算処理という選択は正しかったことになる。
【０３８６】
そこで、図４２(c) に示す状態において、除算成立条件が満足されるのか否かという点を検討するために、除算成立条件を満たす上で最も厳しい状況を当てはめて考えてみよう。すなわち、部分被除数Ｚ（ｉ＋１）の絶対値が最大をとり、正規化除数Ｄ′の絶対値が最小をとる、というクリティカルなケースを想定してみる。
【０３８７】
図４２(d) は、図４２(c) に示す状態において、正規化除数Ｄ′の先頭に位置する符号ビットＳが０の場合（すなわち、正規化除数Ｄ′が正の数の場合）におけるクリティカルなケースを示す図である。ここで、部分被除数Ｚ（ｉ＋１）は正の数であるので、絶対値が最大をとる場合、図４２(c) に示すＺ（ｉ＋１）の下位４ビットの「？？？？」の部分は「１１１１」となり、結局、部分被除数Ｚ（ｉ＋１）は図４２(d) に示すように「００１１１１」（１０進表現では＋１５）ということになる。また、正規化除数Ｄ′も正の数である。しかも、正規化除数Ｄ′は正規化されているため、図４２(c) に示すＤ′の有意桁ビット「ＶＶＶＶＶ」の先頭の「Ｖ」は、符号ビットＳとは異なる値になる。すなわち、図４２(c) に示すＤ′の符号ビットＳが０であれば、先頭の「Ｖ」は必ず１ということになる。結局、正規化除数Ｄ′は、その絶対値が最小をとる場合、図４２(d) に示すように「０１００００」（１０進表現では＋１６）ということになる。
【０３８８】
この図４２(d) に示すクリティカルなケースでは、第（ｉ＋１）回目の一巡プロセスにおける符号比較対象ビットは、部分被除数Ｚ（ｉ＋１）に１ビットだけ先行する破線枠内のビット０と、正規化除数Ｄ′の先頭ビット０ということになるので、同符号になり、減算処理が行われることになるが、除算成立条件は満たされている。すなわち、「部分被除数Ｚ２の絶対値１５は、正規化除数Ｄ′の絶対値１６の２倍未満である」との条件が満たされている。
【０３８９】
一方、図４２(e) は、図４２(c) に示す状態において、正規化除数Ｄ′の先頭に位置する符号ビットＳが１の場合（すなわち、正規化除数Ｄ′が負の数の場合）におけるクリティカルなケースを示す図である。上述したとおり、部分被除数Ｚ（ｉ＋１）は正の数であるので、絶対値が最大をとる場合、図４２(e) に示すように「００１１１１」（１０進表現では＋１５）ということになる。これに対して、正規化除数Ｄ′は負の数である。しかも、正規化除数Ｄ′は正規化されているため、図４２(c) に示すＤ′の有意桁ビット「ＶＶＶＶＶ」の先頭の「Ｖ」は、符号ビットＳとは異なる値になる。すなわち、図４２(c) に示すＤ′の符号ビットＳが１であれば、先頭の「Ｖ」は必ず０ということになる。結局、正規化除数Ｄ′は、その絶対値が最小をとる場合、図４２(e) に示すように「１０１１１１」（１０進表現では−１７）ということになる。
【０３９０】
この図４２(e) に示すクリティカルなケースでは、第（ｉ＋１）回目の一巡プロセスにおける符号比較対象ビットは、部分被除数Ｚ（ｉ＋１）に１ビットだけ先行する破線枠内のビット０と、正規化除数Ｄ′の先頭ビット１ということになるので、異符号になり、加算処理が行われることになるが、除算成立条件は満たされている。すなわち、「部分被除数Ｚ２の絶対値１５は、正規化除数Ｄ′の絶対値１７の２倍未満である」との条件が満たされている。
【０３９１】
このように、クリティカルなケースにおいて、除算成立条件が満たされるので、結局、図４２(c) に示す状態では、どのような場合であっても除算成立条件が満たされることになる。これは、図４２(b) に示すように、第ｉ回目の一巡プロセスにおいて、上段の数値の先頭の４ビットが太枠で示すように「００００」であった場合、無演算処理を行うという選択が正しかったことを示している。
【０３９２】
次に、図４３を参照しながら、上段の数値の先頭の４ビットが「１１１１」であった場合を考えてみよう。図４３(a) は、図４２(a) と全く同じ図であり、破線枠で示す符号ビットＳに、実線枠で示す任意ビット「？？？？？？」からなる部分被除数Ｚｉを後続配置した数値（上段）と、先頭に符号ビットＳ、２ビット目以降に有意桁ビット「ＶＶＶＶＶ」を有する正規化除数Ｄ′（下段）とについての演算処理を示すものである。上段の数値の符号ビットＳと下段の数値の符号ビットＳとは、黒矢印で示すように１ビットずれている。
【０３９３】
ここで、図４３(b) に示すように、上段の数値の先頭の４ビットが太枠で示すように「１１１１」であった場合を考える。５ビット目以降は任意の値でよいので「？」で示されている。いま、第ｉ回目の一巡プロセスの開始時に、図４３(b) に示す状態になっていたものとして、部分被除数Ｚｉと正規化除数Ｄ′との間で減算や加算を行わずに、無演算処理とした場合に、第（ｉ＋１）回目の一巡プロセスで問題が生じるか否かを考えてみよう。第ｉ回目の一巡プロセスで無演算処理が行われると、第（ｉ＋１）回目の一巡プロセスでは、図４３(c) に実線枠で示すように、１ビットだけ下位側にシフトした位置から第（ｉ＋１）回目の部分被除数Ｚ（ｉ＋１）が抽出されることになり、同じく１ビットだけ下位側にシフトした位置に、正規化除数Ｄ′が桁合わせされることになる。
【０３９４】
この図４３(c) に示す状態で減算処理や加算処理を行った場合に、問題が生じないためには、前述の例と同様に、除算成立条件が満足されていればよい。そこで、ここでも、部分被除数Ｚ（ｉ＋１）の絶対値が最大をとり、正規化除数Ｄ′の絶対値が最小をとる、というクリティカルなケースを想定してみる。
【０３９５】
図４３(d) は、図４３(c) に示す状態において、正規化除数Ｄ′の先頭に位置する符号ビットＳが１の場合（すなわち、正規化除数Ｄ′が負の数の場合）におけるクリティカルなケースを示す図である。ここで、部分被除数Ｚ（ｉ＋１）は負の数であるので、絶対値が最大をとる場合、図４３(c) に示すＺ（ｉ＋１）の下位４ビットの「？？？？」の部分は「００００」となり、結局、部分被除数Ｚ（ｉ＋１）は図４３(d) に示すように「１１００００」（１０進表現では−１６）ということになる。また、正規化除数Ｄ′も負の数である。しかも、正規化除数Ｄ′は正規化されているため、図４３(c) に示すＤ′の有意桁ビット「ＶＶＶＶＶ」の先頭の「Ｖ」は、符号ビットＳとは異なる値になる。すなわち、図４３(c) に示すＤ′の符号ビットＳが１であれば、先頭の「Ｖ」は必ず０ということになる。結局、正規化除数Ｄ′は、その絶対値が最小をとる場合、図４３(d) に示すように「１０１１１１」（１０進表現では−１７）ということになる。
【０３９６】
この図４３(d) に示すクリティカルなケースでは、第（ｉ＋１）回目の一巡プロセスにおける符号比較対象ビットは、部分被除数Ｚ（ｉ＋１）に１ビットだけ先行する破線枠内のビット１と、正規化除数Ｄ′の先頭ビット１ということになるので、同符号になり、減算処理が行われることになるが、除算成立条件は満たされている。すなわち、「部分被除数Ｚ２の絶対値１６は、正規化除数Ｄ′の絶対値１７の２倍未満である」との条件が満たされている。
【０３９７】
一方、図４３(e) は、図４３(c) に示す状態において、正規化除数Ｄ′の先頭に位置する符号ビットＳが０の場合（すなわち、正規化除数Ｄ′が正の数の場合）におけるクリティカルなケースを示す図である。上述したとおり、部分被除数Ｚ（ｉ＋１）は負の数であるので、絶対値が最大をとる場合、図４３(e) に示すように「１１００００」（１０進表現では−１６）ということになる。これに対して、正規化除数Ｄ′は正の数である。しかも、正規化除数Ｄ′は正規化されているため、図４３(c) に示すＤ′の有意桁ビット「ＶＶＶＶＶ」の先頭の「Ｖ」は、符号ビットＳとは異なる値になる。すなわち、図４３(c) に示すＤ′の符号ビットＳが０であれば、先頭の「Ｖ」は必ず１ということになる。結局、正規化除数Ｄ′は、その絶対値が最小をとる場合、図４３(e) に示すように「０１００００」（１０進表現では＋１６）ということになる。
【０３９８】
この図４３(e) に示すクリティカルなケースでは、第（ｉ＋１）回目の一巡プロセスにおける符号比較対象ビットは、部分被除数Ｚ（ｉ＋１）に１ビットだけ先行する破線枠内のビット１と、正規化除数Ｄ′の先頭ビット０ということになるので、異符号になり、加算処理が行われることになるが、除算成立条件は満たされている。すなわち、「部分被除数Ｚ２の絶対値１６は、正規化除数Ｄ′の絶対値１６の２倍未満である」との条件が満たされている。
【０３９９】
このように、クリティカルなケースにおいて、除算成立条件が満たされるので、結局、図４３(c) に示す状態では、どのような場合であっても除算成立条件が満たされることになる。これは、図４３(b) に示すように、第ｉ回目の一巡プロセスにおいて、上段の数値の先頭の４ビットが太枠で示すように「１１１１」であった場合、無演算処理を行うという選択が正しかったことを示している。
【０４００】
なお、ここでは説明を省略するが、第ｉ回目の一巡プロセスにおいて、上段の数値の先頭の３ビットが「０００」や「１１１」であった場合に無演算処理を行うと、第（ｉ＋１）回目の一巡プロセスにおいて、除算成立条件が満足されないケースが生じる。したがって、第１の実施形態における第２回目以降の一巡プロセスや、第２の実施形態におけるすべての一巡プロセスに関しては、上段の数値の先頭の４ビットが「００００」もしくは「１１１１」という固有ビットパターンをとる場合に、加減算を省略することができることになる。もちろん、先頭の５ビットが「０００００」もしくは「１１１１１」である場合等も、「先頭の４ビットが『００００』もしくは『１１１１』という固有ビットパターンをとる場合」に含まれるので、先頭４ビットのみの確認を行えば十分である。
【０４０１】
最後に、これまでの説明における「上段の数値の先頭の４ビット」の実体を考えておくと、第２回目以降の一巡プロセスの場合、「上段の数値の先頭の４ビット」とは、「直前の一巡プロセスで得られた部分剰余の先頭４ビット」であることがわかる。
【０４０２】
たとえば、第１の実施形態に対応する図２１の丸数字２の区画に示されている演算処理２の場合、上段の数値「１１０１０」の先頭の４ビット「１１０１」は、第１回目の一巡プロセスで得られた部分剰余Ｒ１の先頭４ビットである。同様に、丸数字３の区画に示されている演算処理３の場合、上段の数値「１１１０１」の先頭の４ビット「１１１０」は、第２回目の一巡プロセスで得られた部分剰余Ｒ２の先頭４ビットである。また、第２の実施形態に対応する図３２の丸数字２の区画に示されている演算処理２の場合、上段の数値「１１１０１」の先頭の４ビット「１１１０」は、第１回目の一巡プロセスで得られた部分剰余Ｒ１の先頭４ビットであり、丸数字３の区画に示されている演算処理３の場合、上段の数値「０００１０」の先頭の４ビット「０００１」は、第２回目の一巡プロセスで得られた部分剰余Ｒ２の先頭４ビットである。
【０４０３】
一方、第２の実施形態における第１回目の一巡プロセスの場合、「上段の数値の先頭の４ビット」とは、「拡張被除数Ｚ′の先頭４ビット」であることがわかる。たとえば、図３２の丸数字１の区画に示されている演算処理１の場合、上段の数値「０００１０１」は拡張被除数Ｚ′そのものであるから、その先頭の４ビット「０００１」は、「拡張被除数Ｚ′の先頭４ビット」に他ならない。
【０４０４】
結局、第１の実施形態の第２回目以降の一巡プロセスおよび第２の実施形態のすべての一巡プロセスについてまとめると次のようになる。すなわち、第ｉ回目の一巡プロセスにおける加減算要否判定方法としては、ｉ＝１の場合（すなわち、第１回目の一巡プロセスの場合）は、拡張被除数Ｚ′の先頭４ビットが「００００」もしくは「１１１１」という固有ビットパターンをとる場合に、加減算不要との判断を行い、ｉ≧２の場合（すなわち、第２回目以降の一巡プロセスの場合）は、直前の一巡プロセス（すなわち、第（ｉ−１）回目の一巡プロセス）で得られた部分剰余Ｒ（ｉ−１）の先頭の４ビットが「００００」もしくは「１１１１」という固有ビットパターンをとる場合に、加減算不要との判断を行えばよいことになる。
【０４０５】
＜４−３．  加減算要否判定方法に変形例を採用した処理＞
さて、これまで述べた第１の実施形態では、図２２の流れ図のステップＳ１５Ａに示す加減算要否判定処理の方法として、§２−３において、部分被除数Ｚｉが零の場合（全ビットが０の場合）に加減算不要と判定する方法を示した。これに対して、§４で述べる変形例を採用する場合には、第１回目の一巡プロセス（ｉ＝１）に関しては、部分被除数Ｚ１を構成するｎビットのうち、先頭の３ビットが「０００」もしくは「１１１」なる固有のビットパターンをとる場合に否定的判定（加減算不要との判定）を行い、第２回目以降（ｉ≧２）の一巡プロセスに関しては、第（ｉ−１）回目の部分剰余を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定（加減算不要との判定）を行い、それ以外の場合には肯定的判定（加減算必要との判定）を行う方法を採用すればよい。
【０４０６】
図２６に示す第１の実施形態の除算回路において、この変形例に係る加減算要否判定方法を採用する場合は、加減算要否判定部４１が、第１回目の一巡プロセスに関しては、部分被除数を構成するｎビットのうち、先頭の３ビットが「０００」もしくは「１１１」なる固有のビットパターンをとる場合に否定的判定を行い、第ｉ回目（但し、ｉ≧２）の一巡プロセスに関しては、第（ｉ−１）回目の部分剰余を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定を行い、それ以外の場合には肯定的判定を行うようにすればよい。
【０４０７】
図２７〜図３０に示す実施例のように、被除数レジスタ２０に対してシフト処理を施す形態を採用する場合は、第１回目（ｉ＝１）は、被除数レジスタ２０の先頭３ビットが「０００」もしくは「１１１」なる固有のビットパターンであれば加減算不要との判定を行うことができ、第ｉ回目（ｉ≧２）は、被除数レジスタ２０の先頭４ビットが「００００」もしくは「１１１１」なる固有のビットパターンであれば加減算不要との判定を行うことができる。もちろん、加減算要否判定部４１は、その都度、判定に必要なビットのみを読み出して判定を行えばよい。
【０４０８】
一方、第２の実施形態については、図３３の流れ図のステップＳ１５Ｂに示す加減算要否判定処理の方法として、§３−３において、部分被除数Ｚｉが零の場合（全ビットが０の場合）に加減算不要と判定する方法を示した。これに対して、§４で述べる変形例を採用する場合には、第１回目の一巡プロセス（ｉ＝１）に関しては、部分被除数Ｚ１を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定（加減算不要との判定）を行い、第２回目以降（ｉ≧２）の一巡プロセスに関しては、第（ｉ−１）回目の部分剰余を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定（加減算不要との判定）を行い、それ以外の場合には肯定的判定（加減算必要との判定）を行う方法を採用すればよい。
【０４０９】
図３６に示す第２の実施形態の除算回路において、この変形例に係る加減算要否判定方法を採用する場合は、加減算要否判定部８１が、第１回目の一巡プロセスに関しては、部分被除数を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定を行い、第ｉ回目（但し、ｉ≧２）の一巡プロセスに関しては、第（ｉ−１）回目の部分剰余を構成するｎビットのうち、先頭の４ビットが「００００」もしくは「１１１１」なる固有のビットパターンをとる場合に否定的判定を行い、それ以外の場合には肯定的判定を行うようにすればよい。
【０４１０】
図３７〜図３９に示す実施例のように、被除数レジスタ２０′に対してシフト処理を施す形態を採用する場合は、いずれの一巡プロセスにおいても（すなわち、ｉの値にかかわらず）、被除数レジスタ２０′の先頭４ビットが「００００」もしくは「１１１１」なる固有のビットパターンであれば加減算不要との判定を行うことができる。第１の実施形態のように、ｉ＝１の場合とｉ≧２の場合とで、異なる判定処理を行う必要はないので、回路構成をより単純化することが可能である。もちろん、加減算要否判定部８１は、その都度、判定に必要なビットのみを読み出して判定を行えばよい。
【０４１１】
＜４−４．  変形例を採用した除算演算プロセスの実例＞
図２１や図３２に示す例は、部分被除数Ｚｉの桁数がたまたま４であるため、部分被除数Ｚｉの全ビットが０であることを判定する処理と、先頭の４ビットが「００００」であることを判定する処理は同じになるが、部分被除数Ｚｉの桁数は、除数Ｄの桁数に一致させる必要があるため、除数Ｄの桁数が多くなればなるほど、部分被除数Ｚｉが零であることを判定するために必要なビット数は多くなる。たとえば、除数Ｄのビット数ｎが１６であった場合、部分被除数Ｚｉも１６ビットの数値になるため、部分被除数Ｚｉが零か否かを判定するためには、１６ビットすべてについて０か否かの判定を行う必要がある。
【０４１２】
ところが、加減算要否判定方法として、上述した変形例を採用すれば、先頭の４ビットが「００００」もしくは「１１１１」であることを認識できれば足りるため、演算負担を軽減し、演算時間の短縮を図ることができるようになる。以下、この変形例を採用した除算演算プロセスの実例を提示しておく。
【０４１３】
図４４は、第２の実施形態に、図４２および図４３で説明した原理に基づく加減算要否判定法の変形例を適用して、「３３÷５」なる除算を実行する演算処理プロセスを示す図である。この例では、８ビットの被除数Ｚ（ｍ＝８）÷８ビットの除数Ｄ（ｎ＝８）という除算が行われるため、二進表示では、「００１００００１」÷「０００００１０１」なる除算演算が行われることになる。
【０４１４】
図４４の上段に示すとおり、特徴１′に基づき、被除数Ｚ「００１００００１」に対しては、符号拡張数α＝２として、２ビットの符号拡張処理が施され、拡張被除数Ｚ′「００００１００００１」が作成される（図において、上部にドットを付して示す０は、拡張ビット）。また、特徴２に基づき、除数Ｄ「０００００１０１」に対しては、正規化処理が行われ、桁上数β＝４として、正規化除数Ｄ′「０１０１００００」が作成される。そして、特徴３′に基づき、演算回数Ｋ＝６が求められる。
【０４１５】
図４４の下段には、丸数字１〜６で示す各区画に分けて、合計６回の演算処理が行われた状態が示されている。個々の演算処理の内容は、§３で説明した手順に従ったものであるため、ここでは説明を省略するが、演算処理１および演算処理４では、無演算処理が行われている。丸数字１および４で示す区画に示されている破線枠は、本来、正規化除数Ｄ′「０１０１００００」もしくはその２の補数「１０１１００００」が配置されるべき桁位置を示している。
【０４１６】
第１回目の一巡プロセス（ｉ＝１）において、無演算処理が選択された理由は、実線枠で囲って示す上段の数値の先頭４ビット（すなわち、拡張被除数Ｚ′の先頭４ビット）が、固有のビットパターン「００００」をとっているためであり、第４回目の一巡プロセス（ｉ＝４）において、無演算処理が選択された理由は、実線枠で囲って示す上段の数値の先頭４ビット（すなわち、第３回目の一巡プロセスで得られた部分剰余Ｒ３の先頭４ビット）が、固有のビットパターン「１１１１」をとっているためである。すなわち、図３３の流れ図で、ｉ＝１およびｉ＝４の一巡プロセスにおけるステップＳ１５Ｂで、加減算不要との否定的判定がなされ、ステップＳ１６Ａにおける無演算処理が実行されたことになる。
【０４１７】
図４５は、図４４に示す演算処理プロセスに後続して行われる仮の商に関する演算手順を示す図である。すなわち、図４４に示す演算処理プロセスが完了すると、正の商レジスタ６１には正の商「０１０００１」が格納され、負の商レジスタ６２には負の商「００１０１０」が格納された状態になっているので、前者から後者を引き算することにより、仮の商Ｑ′（演算済）として、「０００１１１」が得られる（図２３の補正処理手順におけるステップＳ２４Ａの処理）。
【０４１８】
また、図４６は、図４４に示す演算処理プロセスに後続して行われる補正処理の具体的な手順を示す図である。すなわち、図２３のステップＳ２５Ａにおいて、仮の剰余Ｒ′が０でないことが確認されるので、ステップＳ２６ＡからＳ２７Ａへと進み、仮の剰余Ｒ′の符号と被除数Ｚの符号とが比較される。両者は異符号であるため、ステップＳ２８ＡからＳ２９Ａへと進み、被除数Ｚの符号と除数Ｄの符号とが比較される。両者は同符号であるため、ステップＳ３０Ａから３１Ａへと進み、仮の商Ｑ′を１だけ減少補正して真の商Ｑを求め（図４６(a) の処理）、仮の剰余Ｒ′を正規化除数Ｄ′だけ増加補正する処理（図４６(b) の処理）が行われる。
【０４１９】
最後に、ステップＳ４２Ａにおいて、仮の剰余Ｒ′の桁をβビットだけ桁下げして、真の剰余Ｒを求める処理（図４６(c) の処理）が行われる。かくして、「３３÷５」なる整数除算に対して、商Ｑ＝６、剰余Ｒ＝３なる正しい結果が得られることになる。
【０４２０】
一方、図４７は、第２の実施形態に、図４２および図４３で説明した原理に基づく加減算要否判定法の変形例を適用して、「−１３９２５÷７２３６」なる除算を実行する演算処理プロセスを示す図である。この例では、１６ビットの被除数Ｚ（ｍ＝１６）÷１６ビットの除数Ｄ（ｎ＝１６）という除算が行われるため、二進表示では、「１１００１００１１００１１０１１」÷「０００１１１０００１０００１００」なる除算演算が行われることになる。
【０４２１】
図４７に示すとおり、まず、特徴１′に基づき、被除数Ｚ「１１００１００１１００１１０１１」に対して、符号拡張数α＝２として、２ビットの符号拡張処理が施され、拡張被除数Ｚ′「１１１１００１００１１００１１０１１」が作成される（図において、上部にドットを付して示す１は、拡張ビット）。また、特徴２に基づき、除数Ｄ「０００１１１０００１０００１００」に対しては、正規化処理が行われ、桁上数β＝２として、正規化除数Ｄ′「０１１１０００１０００１００００」（十進表現では、＋２８９４４となり、元の除数Ｄの４倍の値になる）が作成される。そして、特徴３′に基づき、演算回数Ｋ＝４が求められる。
【０４２２】
図４８の上段には、こうして得られた正規化除数Ｄ′「０１１１０００１０００１００００」と、その２の補数「１０００１１１０１１１１００００」が示されており、下段には、拡張被除数Ｚ′「１１１１００１００１１００１１０１１」と正規化除数Ｄ′「０１１１０００１０００１００００」との除算演算プロセスとして、丸数字１〜４で示す各区画に分けて、合計４回の演算処理が行われた状態が示されている。個々の演算処理の内容は、§３で説明した手順に従ったものであるため、ここでは説明を省略するが、演算処理１および演算処理４では、無演算処理が行われている。丸数字１および４で示す区画に示されている破線枠は、本来、正規化除数Ｄ′もしくはその２の補数が配置されるべき桁位置を示している。また、この図４８では、個々の部分商Ｑｉが、正の商と負の商とに分けてレジスタに格納された状態が示されている。
【０４２３】
第１回目の一巡プロセス（ｉ＝１）において、無演算処理が選択された理由は、太線枠で囲って示す上段の数値の先頭４ビット（すなわち、拡張被除数Ｚ′の先頭４ビット）が、固有のビットパターン「１１１１」をとっているためであり、第４回目の一巡プロセス（ｉ＝４）において、無演算処理が選択された理由は、太線枠で囲って示す上段の数値の先頭４ビット（すなわち、第３回目の一巡プロセスで得られた部分剰余Ｒ３の先頭４ビット）が、固有のビットパターン「００００」をとっているためである。すなわち、図３３の流れ図で、ｉ＝１およびｉ＝４の一巡プロセスにおけるステップＳ１５Ｂで、加減算不要との否定的判定がなされ、ステップＳ１６Ａにおける無演算処理が実行されたことになる。
【０４２４】
図４９は、図４８に示す演算処理プロセスに後続して行われる仮の商に関する演算手順を示す図である。すなわち、図４８に示す演算処理プロセスが完了すると、正の商レジスタ６１には正の商「００１０」が格納され、負の商レジスタ６２には負の商「０１００」が格納された状態になっているので、前者から後者を引き算することにより、仮の商Ｑ′（演算済）として、「１１１０」が得られる（図２３の補正処理手順におけるステップＳ２４Ａの処理）。
【０４２５】
また、図５０は、図４８に示す演算処理プロセスに後続して行われる補正処理の具体的な手順を示す図である。すなわち、図２３のステップＳ２５Ａにおいて、仮の剰余Ｒ′が０でないことが確認されるので、ステップＳ２６ＡからＳ２７Ａへと進み、仮の剰余Ｒ′の符号と被除数Ｚの符号とが比較される。両者は異符号であるため、ステップＳ２８ＡからＳ２９Ａへと進み、被除数Ｚの符号と除数Ｄの符号とが比較される。両者は異符号であるため、ステップＳ３０Ａから３２Ａへと進み、仮の商Ｑ′を１だけ増加補正して真の商Ｑを求め、部分剰余Ｒｋを正規化除数Ｄ′だけ減少補正する処理が行われる。
【０４２６】
最後に、ステップＳ４２Ａにおいて、仮の剰余Ｒ′の桁をβビットだけ桁下げして、真の剰余Ｒを求める処理が行われる。かくして、「−１３９２５÷７２３６」なる整数除算に対して、商Ｑ＝−１、剰余Ｒ＝−６６８９なる正しい結果が得られることになる。
【０４２７】
以上、図４４には、８ビット÷８ビットなる除算例を示し、図４８には、１６ビット÷１６ビットなる除算例を示したが、いずれも加減算要否判定を行う際に、被除数レジスタ２０′の先頭４ビットが「００００」もしくは「１１１１」という固有のビットパターンをとっているか否かを調べるだけで足りるため、部分被除数Ｚｉの全ビットが０であるか否かを調べる手法に比べて、演算負担を軽減し、演算時間の短縮を図ることができるようになる。
【０４２８】
＜＜＜  §５．  符号拡張数αの最小値  ＞＞＞
本発明における重要な着想は、除数Ｄに対して正規化処理を施しておけば、符号拡張数αを除数Ｄのビット数ｎより小さくしても除算成立条件が満たされる、という点にある。演算回数Ｋは、αが小さくなれば少なくなるので、αをｎより小さく設定することにより、従来の方法に比べて演算回数を低減させる効果が得られ、演算速度を向上させるメリットが得られる。
【０４２９】
§２で述べた第１の実施形態の場合、符号拡張数αの最小値は１であり、§３で述べた第２の実施形態の場合、符号拡張数αの最小値は２であることを述べた。したがって、§１で述べた従来の一般的な非回復法（符号拡張数αを除数Ｄのビット数ｎに等しく設定する方法）に比べて、演算回数を低減して演算速度の高速化を図る上では、第１の実施形態の場合は、符号拡張数αをｎ−１≧α≧１の範囲内の値に設定し、第２の実施形態の場合は、符号拡張数αをｎ−１≧α≧２の範囲内の値に設定すればよい。特に、第１の実施形態の場合は、α＝１という最小値に設定し、第２の実施形態の場合は、α＝２という最小値に設定すれば、最も好ましい効果が得られることになる。
【０４３０】
ここでは、第１の実施形態の場合のαの最小値が１になり、第２の実施形態の場合のαの最小値が２になる理由を、図５１を参照しながら簡単に説明しておく。除算成立条件は「部分被除数Ｚｉの絶対値が、正規化除数Ｄ′の絶対値の２倍未満である」というものである。そこで、ここでは４ビット÷４ビットという演算処理を行う上でのクリティカルなケースとして、図５１の上段に示すように、「１０００」÷「０００１」という除算のケースを考えてみる。この除算は、被除数Ｚ＝−８、除数Ｄ＝１というケースであるので、４ビット÷４ビットという演算処理の中で、被除数Ｚの絶対値が最大、除数Ｄの絶対値が最小のケースになり（図８参照）、上記除算成立条件が最も成立しにくいクリティカルなケースということになる。
【０４３１】
図５１の下段のテーブルは、第１の実施形態および第２の実施形態について、それぞれ符号拡張数αを複数通りに設定した場合に、除算成立条件が満たされるか否かを示すものである。既に述べたとおり、除算演算では、第１回目の演算処理時に除算成立条件が満たされていれば、第２回目以降の演算処理でも除算成立条件が満たされることになるので、条件の成否は、第１回目の演算処理を考慮して決めることができる。
【０４３２】
まず、第１の実施形態の場合、図２１に示す例のように、第１回目の演算処理では、拡張被除数Ｚ′の先頭ビットと正規化除数Ｄ′の先頭ビットとが同じ桁位置に揃えられる。そこで、図５１のテーブルにおける「絶対値の倍率」欄にも、両者の先頭が揃うような配置を行っている。
【０４３３】
まず、α＝０に設定した場合、すなわち、０ビット分の符号拡張を行った場合（符号拡張処理を行わなかった場合）は、演算対象となる数値は、拡張被除数Ｚ′＝「１０００」、正規化除数Ｄ′＝「０１００」であるから、絶対値の倍率は８÷４＝２倍となり、「２倍未満である」という除算成立条件は満たされない。
【０４３４】
これに対して、α＝１に設定した場合、すなわち、１ビット分の符号拡張を行った場合は、演算対象となる数値は、拡張被除数Ｚ′＝「１１０００」、正規化除数Ｄ′＝「０１００」であるから、絶対値の倍率は４÷４＝１倍となり、「２倍未満である」という除算成立条件は満たされる。この結果から、第１の実施形態では、符号拡張数αは少なくとも１にする必要があることがわかる。すなわち、αの最小値は１ということになる。
【０４３５】
一方、第２の実施形態の場合、図３２に示す例のように、第１回目の演算処理では、拡張被除数Ｚ′の先頭ビットに対して、正規化除数Ｄ′の先頭ビットは、黒矢印で示すとおり、１ビットだけ下位側にずらした桁位置に揃えられる。そこで、図５１のテーブルにおける「絶対値の倍率」欄にも、黒矢印で示すとおり、正規化除数Ｄ′の先頭を１ビットだけ下位側にずらした配置を行っている。このため、除算成立条件の成否を判定する上では、実際の演算が、４ビットの拡張被除数Ｚ′と、１桁ずらした３ビットの正規化除数Ｄ′と、の間で行われるものとして取り扱う必要がある。
【０４３６】
まず、α＝０に設定した場合、すなわち、０ビット分の符号拡張を行った場合（符号拡張処理を行わなかった場合）は、演算対象となる数値は、拡張被除数Ｚ′＝「１０００」、正規化除数Ｄ′＝「０１００」であるから、考慮の対象となる演算は、「１０００」と「０１０」との間で行われるものとすればよい。この場合、絶対値の倍率は８÷２＝４倍となり、「２倍未満である」という除算成立条件は満たされない。
【０４３７】
また、α＝１に設定した場合、すなわち、１ビット分の符号拡張を行った場合は、演算対象となる数値は、拡張被除数Ｚ′＝「１１０００」、正規化除数Ｄ′＝「０１００」であるから、考慮の対象となる演算は、「１１００」と「０１０」との間で行われるものとすればよい。この場合、絶対値の倍率は４÷２＝２倍となり、「２倍未満である」という除算成立条件は満たされない。
【０４３８】
これに対して、α＝２に設定した場合、すなわち、２ビット分の符号拡張を行った場合は、演算対象となる数値は、拡張被除数Ｚ′＝「１１１０００」、正規化除数Ｄ′＝「０１００」であるから、考慮の対象となる演算は、「１１１０」と「０１０」との間で行われるものとすればよい。この場合、絶対値の倍率は２÷２＝１倍となり、「２倍未満である」という除算成立条件は満たされる。この結果から、第２の実施形態では、符号拡張数αは少なくとも２にする必要があることがわかる。すなわち、αの最小値は２ということになる。
【０４３９】
＜＜＜  §６．  具体的なレジスタ構成とその動作  ＞＞＞
最後に、本発明に係る除算回路を設計する上で好ましい具体的なレジスタ構成とその動作を説明する。
【０４４０】
＜６−１．  第２の実施形態に係る具体的な回路＞
図５２は、§３で述べた第２の実施形態に係る除算回路における具体的なレジスタの構成例を示すブロック図であり、図３６に示す各構成要素のうち、被除数レジスタ２０′、除数レジスタ３０、商レジスタ６０という３つのレジスタと、演算処理部８０に含まれる加減算要否判定部８１、符号比較部８２、加減算部８３、部分商格納部８４、レジスタ更新部８５が、それぞれブロックとして示されている。
【０４４１】
ここに示す除算回路は、図の上段に示されているとおり、ビット数ｍ＝１６ビットをもった被除数Ｚと、ビット数ｎ＝８ビットをもった除数Ｄについての除算演算を行う機能をもった第２の実施形態に係る回路であり、符号拡張数αは最小値２に設定されている。したがって、符号拡張処理によって得られる拡張被除数Ｚ′は、α＝２ビット分拡張され、合計１８ビットのデータになる。
【０４４２】
そこで、被除数レジスタ２０′としては、１８ビットのデータを収容可能なレジスタが設けられている。ここでは、説明の便宜上、この被除数レジスタ２０′の個々のセルに、図示のとおり、下位ビット側から順に０〜１７までの番号を付すことにする。セル０〜１５には、データ入力部１０によって入力された１６ビットの被除数Ｚが収容される。一方、セル１６，１７には、符号拡張部２５による拡張処理によって、セル１５に収容された符号ビットと同じビットが収容される。
【０４４３】
実際には、図示のとおり、符号拡張部２５は、被除数Ｚの最上位ビット（符号ビット）をセル１５に収容するための信号線Ｌ１５を分岐することによって得られた２本の分岐信号線Ｌ１６，Ｌ１７によって構成されている。なお、図示は省略されているが、実際には、セル０〜１４に対しても、データ入力部１０からの各信号線Ｌ０〜Ｌ１４が接続されている。結局、データ入力部１０が、１６ビットの被除数Ｚを入力し、これを各信号線Ｌ０〜Ｌ１５を介して被除数レジスタ２０′の各セル０〜１５に収容させる処理を行うと、信号線Ｌ１５に与えられた符号ビットの情報はセル１５に収容されるだけでなく、分岐信号線Ｌ１６，Ｌ１７によってセル１６，１７にも収容されることになる。このように、符号拡張部２５を、分岐信号線Ｌ１６，Ｌ１７によって構成すれば、構成も動作も単純化することができる。
【０４４４】
一方、除数レジスタ３０としては、８ビットのデータを収容可能なレジスタが設けられている。ここでは、説明の便宜上、この除数レジスタ３０の個々のセルに、図示のとおり、上位ビット側から順にａ〜ｈまでの記号を付すことにする。データ入力部１０によって入力された８ビットの除数Ｄは、この除数レジスタ３０の個々のセルに収容される。その後、図５２には示されていない正規化処理部３５（図３６参照）による正規化処理により、桁上数βビット分だけ上位側にシフトされるため、この除数レジスタ３０内には、正規化除数Ｄ′が収容された状態になる。
【０４４５】
§２−５で述べたとおり、正規化処理部３５には、除数レジスタ３０のセルａ，ｂの論理演算を行う第１番目の論理回路Ｌ（１）、セルａ，ｂ，ｃの論理演算を行う第２番目の論理回路Ｌ（２）、セルａ，ｂ，ｃ，ｄの論理演算を行う第３番目の論理回路Ｌ（３）、... 等を設けておくようにすれば、出力される論理値が「１」もしくは「０」となる論理回路のうち、番号の最も若い論理回路Ｌ（ｇmin）を求めることにより、シフト動作の回数βを、β＝ｇmin −１なる式で決定することができる。
【０４４６】
加減算部８３は、図に一点鎖線の枠で囲って示す内容の演算処理を行う。すなわち、被除数レジスタ２０′のセル９〜１６に収容されている８ビットのデータを部分被除数Ｚｉとして取り込み、除数レジスタ３０に収容されている８ビットのデータを正規化除数Ｄ′として取り込み、これら８ビットのデータについて加算処理もしくは減算処理を行い、得られた８ビットの演算結果を部分剰余Ｒｉとする処理を行う。ここでは、説明の便宜上、こうして得られた部分剰余Ｒｉの各データビットに対して、上位ビット側から順にｉ〜viiiまでのローマ数字を付すことにする。この部分剰余Ｒｉは、レジスタ更新部８５に引き渡され、後述するように、被除数レジスタ２０′に対する更新処理が行われる。
【０４４７】
加減算部８３が加算処理を行うべきか、減算処理を行うべきかは、符号比較部８２の比較結果に基づいて決定される。符号比較部８２は、被除数レジスタ２０′のセル１７に収容されている先頭ビットと、除数レジスタ３０のセルａに収容されている先頭ビットとを比較し、両者が同一の場合には減算処理、異なる場合には加算処理を行うよう加減算部８３に指示を与える。この比較処理は、図３２に示す個々の演算処理において、上段の数値の先頭ビット（円で囲った丸０もしくは丸１）と正規化除数Ｄ′の先頭ビット（円で囲った丸０）とを比較する処理に相当する。
【０４４８】
なお、加減算部８３は、加算処理を行う場合は、除数レジスタ３０内に収容されている正規化除数Ｄ′をそのまま用いて足し算を行うが、減算処理を行う場合は、これまでの演算処理の例でも述べたように、正規化除数Ｄ′をそのまま用いて引き算を行う代わりに、その２の補数を用いて足し算を行う。したがって、実用上は、除数レジスタ３０とは別個に、図示されていない２の補数レジスタを設けておき、除数レジスタ３０に正規化除数Ｄ′が準備できた段階で、その２の補数を求めて２の補数レジスタに格納しておくようにし、加減算部８３が減算処理を行う際には、２の補数レジスタに格納されている２の補数を読み込んで足し算を行うようにするのが好ましい。
【０４４９】
なお、この加減算部８３による減算処理や加算処理は、各一巡プロセスにおいて必ず行われるわけではなく、加減算要否判定部８１によって加減算必要との判定がなされたときにのみ実行される。この図５２に示す除算回路は、§４で述べた加減算要否判定方法の変形例を採用した回路であるため、加減算要否判定部８１は、被除数レジスタ２０′の先頭の４ビットに基づいて、加減算要否の判定を行う。
【０４５０】
すなわち、加減算要否判定部８１は、図に太枠で囲って示すように、被除数レジスタ２０′のセル１４〜１７に収容されている先頭４ビットを読み出し、この４ビットのパターンが「００００」もしくは「１１１１」であるか否かを調べる。もし、読み出した４ビットのパターンが「００００」もしくは「１１１１」であった場合には、加減算不要との判定を行い、その結果を加減算部８３に伝達する。この場合、加減算部８３は、何ら演算を行う必要はないので、被除数レジスタ２０′から部分被除数Ｚｉを読み出す処理や、レジスタ更新部８５に対して部分剰余Ｒｉを引き渡す処理を行う必要はない。
【０４５１】
加減算要否判定部８１が読み出した４ビットのパターンが「００００」もしくは「１１１１」でなかった場合には、加減算必要との判定を行い、その結果を加減算部８３に伝達する。この場合、加減算部８３は、上述したとおり、符号比較部８２の比較結果に応じて、減算処理もしくは加算処理を実行する。図５３は、図５２に示すレジスタ構成を採用した場合に、各一巡プロセスで実施すべき演算処理を選択する方法を示す図である。
【０４５２】
まず、図５３(a) に示すように、加減算要否判定部８１による判定処理が行われる。具体的には、上述したように、被除数レジスタ２０′のセル１４〜１７に収容されている４ビットのデータが、「００００」または「１１１１」の場合には、加減算不要との判定がなされ、無演算処理が選択される。この場合、理論的には、第ｉ回目の部分被除数Ｚｉがそのまま第ｉ回目の部分剰余Ｒｉということになり、商レジスタ６０には、零の部分商Ｑｉ＝０が書き込まれることになる。もっとも、実際には、上述したとおり、加減算部８３は、被除数レジスタ２０′から部分被除数Ｚｉを読み出す処理や、レジスタ更新部８５に対して部分剰余Ｒｉを引き渡す処理を行う必要はない。
【０４５３】
一方、被除数レジスタ２０′のセル１４〜１７に収容されている４ビットのデータが、「００００」または「１１１１」ではなかった場合には、加減算必要との判定がなされ、図５３(b) に示す減算処理か、図５３(c) に示す加算処理が選択される。いずれを選択するかは、符号比較部８２の比較結果によって定まる。すなわち、被除数レジスタ２０′のセル１７内のビットと除数レジスタ３０のセルａ内のビットとが同一の場合は、減算処理が選択され、第ｉ回目の部分剰余Ｒｉが、Ｚｉ−Ｄ′なる引き算によって求まり（実際は、２の補数を用いた足し算によって求まる）、商レジスタ６０には、正の部分商Ｑｉ＝１が書き込まれることになる。また、比較対象ビットが異なる場合は、加算処理が選択され、第ｉ回目の部分剰余Ｒｉが、Ｚｉ＋Ｄ′なる足し算によって求まり、商レジスタ６０には、負の部分商Ｑｉ＝−１が書き込まれることになる。
【０４５４】
部分商格納部８４は、商レジスタ６０に対して、実行された演算処理の種別を示すデータを書き込む処理を行う。すなわち、加減算部８３によって減算処理が行われた場合には、正の商を示すデータの書き込みを行い、加減算部８３によって加算処理が行われた場合には、負の商を示すデータの書き込みを行う。また、加減算要否判定部８１によって加減算不要と判定され、無演算処理が行われた場合には、零の商を示すデータの書き込みを行う。
【０４５５】
既に§２−５で述べたとおり、商レジスタ６０は、８ビットの正の商レジスタ６１と８ビットの負の商レジスタ６２によって構成されており、正の部分商は、正の商レジスタ６１の対応桁を１、負の商レジスタ６２の対応桁を０とすることにより格納され、負の部分商は、正の商レジスタ６１の対応桁を０、負の商レジスタ６２の対応桁を１とすることにより格納され、零の部分商は、正の商レジスタ６１および負の商レジスタ６２の対応桁を双方とも０とすることにより格納される。なお、実際には、既に述べたとおり、部分商格納部８４から商レジスタ６０への書き込みは、常に最下位ビット（図にハッチングを施して示すセル）に対して行われ、その後、商レジスタ６０の内容が上位側に１ビットシフトされることになる。
【０４５６】
レジスタ更新部８５は、加減算部８３が減算処理もしくは加算処理を実行し、部分剰余Ｒｉを生成したときに、これを被除数レジスタ２０′の所定の桁位置に書き戻して、被除数レジスタ２０′の内容を更新する処理を行う。このように、被除数レジスタ２０′には、除算演算を開始した時点では、拡張被除数Ｚ′が収容された状態になっているが、各回の演算処理が進むにつれて、その一部が部分剰余Ｒｉによって書き換えられてゆくことになる。結局、レジスタ更新部８５によって、被除数レジスタ２０′に収容されているデータは部分的に書き換えられ、加減算部８３によって、その書き換えられたデータの一部が部分被除数Ｚｉとして読み出されることになる。
【０４５７】
＜６−２．  第２の実施形態に係る回路動作（全体シフト法）＞
図５４は、この第２の実施形態における被除数レジスタ２０′に対する読み書きの手順を示す図である。この手順は、基本的に、§３−６において、図３７〜図３９を参照しながら説明した手順に対応するものであり、被除数レジスタ２０′の全セルを対象としてシフトアップする手法を採るため、ここでは「全体シフト法」と呼ぶことにする。
【０４５８】
まず、加減算部８３は、図５４(a) に示すように、常に、被除数レジスタ２０′のセル９〜１６に収容されている８ビットのデータを部分被除数Ｚｉとして読み込む処理を行う。すなわち、レジスタの先頭ビットの次のビットからｎビット分の読み出しが行われる（図３７〜図３９の例と同様）。このように、第２の実施形態の場合、被除数レジスタ２０′からの読み出し位置は、常にセル９〜１６の位置として固定しておくことができる。
【０４５９】
次に、加減算部８３による減算処理もしくは加算処理が実行され、部分剰余Ｒｉが得られたら、レジスタ更新部８５は、被除数レジスタ２０′のセル９〜１６の位置（部分被除数Ｚｉの読出位置と同じ）に、得られた８ビットの部分剰余Ｒｉを書き戻す処理を行う。図５４(b) には、部分剰余Ｒｉを構成する８ビットのデータビットｉ〜viiiを、被除数レジスタ２０′に書き戻す書込処理を行った状態が示されている。こうして、部分剰余Ｒｉの書込処理が完了したら、続いて、被除数レジスタ２０′内に収容されているデータ全体を１ビット分上位側にシフトアップするシフト処理を実行する。
【０４６０】
図５４(c) は、このようなシフト処理を行った後の状態を示している（説明の便宜上、データビットｉ〜viiiとともに、セル番号を示す０〜８の数字も併せてシフトさせて示してある）。シフト処理前にセル１７に収容されていたビットは、シフト処理によって押し出されて削除され、最下位ビットのセルには新たなビット（任意のビットでよいので、図では＊が記されている）が追加される。レジスタ更新部８５による更新処理は、このように、部分剰余Ｒｉを書き戻す書込処理と、被除数レジスタ２０′内のデータ全体を１ビット分シフトアップするシフト処理と、を含んでいる。
【０４６１】
こうして、第ｉ回目の一巡プロセスが完了したら、続いて、第（ｉ＋１）回目の一巡プロセスが実行されることになるが、その時に読み出される部分被除数Ｚ（ｉ＋１）は、図５４(c) に示すように、データビットii〜viiiおよびセル番号８で示されたビットになる。
【０４６２】
なお、無演算処理が選択された場合は、加減算部８３による部分被除数Ｚｉの読み出しや、レジスタ更新部８５による部分剰余Ｒｉの書き込みは行われない。この場合、レジスタ更新部８５によって、被除数レジスタ２０′のセル全体をシフトアップする処理のみが行われることになる。もちろん、加減算部８３により部分被除数Ｚｉを読み出した後、レジスタ更新部８５によって、この部分被除数Ｚｉをそのまま部分剰余Ｒｉとして書き込む処理を行ってもかまわないが、結果は同じであるため、無演算処理が選択された場合は、被除数レジスタ２０′に対する読出処理および書込処理は省略するのが好ましい。
【０４６３】
＜６−３．  第２の実施形態に係る回路動作（部分シフト法）＞
一方、図５５は、この第２の実施形態における被除数レジスタ２０′に対する読み書きの別な手順を示す図である。図５４に示す「全体シフト法」では、部分剰余Ｒｉを構成するデータビットｉ〜viiiを、被除数レジスタ２０′のセル９〜１６の位置に書き込んだ後、全体をシフトアップする、という方法を採っていたが、図５５に示す別法では、データビットｉ〜viiiを１ビット分シフトアップした位置に書き込み、被除数レジスタ２０′のそれ以外のビットをシフトアップする、という方法を採用することになる。このように、被除数レジスタ２０′の一部のセルを対象としてシフトアップする手法を採るため、ここでは「部分シフト法」と呼ぶことにする。
【０４６４】
この図５５に示す部分シフト法では、部分被除数Ｚｉの読み出しに関しては、図５４に示す全体シフト法と全く同じである。すなわち、加減算部８３は、図５５(a) に示すように、常に、被除数レジスタ２０′のセル９〜１６に収容されている８ビットのデータを部分被除数Ｚｉとして読み込む処理を行う。
【０４６５】
一方、部分剰余Ｒｉの書き込みに関しては、若干、動作が異なる。すなわち、加減算部８３による減算処理もしくは加算処理が実行され、部分剰余Ｒｉが得られたら、レジスタ更新部８５は、被除数レジスタ２０′のセル１０〜１７の位置（部分被除数Ｚｉの読出位置よりも１ビットだけ上位側にシフトアップさせた位置）に、得られた８ビットの部分剰余Ｒｉを書き戻す処理を行う。図５５(b) には、部分剰余Ｒｉを構成する８ビットのデータビットｉ〜viiiを、被除数レジスタ２０′に書き戻す書込処理を行った状態が示されている。図５５(b) を図５４(b) と対比すれば、部分剰余Ｒｉの書込位置の違いがよくわかる。
【０４６６】
こうして、部分剰余Ｒｉの書込処理が完了したら、続いて、被除数レジスタ２０′内に収容されているデータのうち、図示されているシフト区間内（セル０〜９）のみを１ビット分上位側にシフトアップするシフト処理を実行する。図５５(c) は、このようなシフト処理を行った後の状態を示している（説明の便宜上、セル番号を示す０〜８の数字をシフトさせて示してある）。このシフト処理は、あくまでもシフト区間内でのみ行われ、部分剰余Ｒｉを構成するデータビットｉ〜viiiが書き込まれたセルは、何ら影響を受けない。その結果、シフト処理前にセル９に収容されていたビットは、シフト処理によって押し出されて削除され、最下位ビットのセルには新たなビット（任意のビットでよいので、図では＊が記されている）が追加される。レジスタ更新部８５による更新処理は、このように、部分剰余Ｒｉ（データビットｉ〜viii）を書き戻す書込処理と、被除数レジスタ２０′内のシフト区間（データビットｉ〜viiiの書き込みが行われた区間以外の区間）のデータを１ビット分シフトアップするシフト処理と、を含んでいる。
【０４６７】
こうして、第ｉ回目の一巡プロセスが完了したら、続いて、第（ｉ＋１）回目の一巡プロセスが実行されることになるが、その時に読み出される部分被除数Ｚ（ｉ＋１）は、図５５(c) に示すように、データビットii〜viiiおよびセル番号８で示されたビットになる。
【０４６８】
なお、無演算処理が選択された場合は、加減算部８３による部分被除数Ｚｉの読み出しや、レジスタ更新部８５による部分剰余Ｒｉの書き込みは行われない。この場合、レジスタ更新部８５によって、被除数レジスタ２０′のセル全体（シフト区間だけではない）をシフトアップする処理を行えばよい。もちろん、加減算部８３により部分被除数Ｚｉを読み出した後、レジスタ更新部８５によって、この部分被除数Ｚｉをそのまま部分剰余Ｒｉとして図５５(b) に示す位置に書き込み、シフト区間についてシフト処理を行ってもかまわないが、結果は同じである。
【０４６９】
図５５に示す部分シフト法の利点は、図５５(b) に示す部分剰余Ｒｉの書込動作とシフト区間内でのシフトアップ動作とを同時に行うことができる点である。すなわち、図５４(b) に示す全体シフト法のプロセスでは、シフト処理は被除数レジスタ２０′のセル全体に及ぶため、部分剰余Ｒｉの書込動作とセルのシフトアップ動作を同時に行うことができないので、部分剰余Ｒｉの書込処理のサイクルが完了した後にシフト処理のサイクルを実行する必要がある。これに対して、図５５(b) に示す部分シフト法のプロセスでは、ｉ〜viiiと記されたセルに対する書込処理のサイクルを実行中に、同時に、セル０〜９に対するシフト処理のサイクルを実行することができるので、処理時間を短縮し、演算時間の短縮化を図ることができる。
【０４７０】
ここで、この図５５に示す部分シフト法を採用した第２の実施形態に係る除算回路における演算処理部８０の動作手順を、除数Ｚのビット数をｎとして一般論として述べれば、一巡プロセスを行う際に、常に、被除数レジスタ２０′に格納されているデータの第２ビット目〜第（ｎ＋１）ビット目を部分被除数として抽出し、少なくとも第１回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理が行われたときに、得られた部分剰余を被除数レジスタ２０′の先頭からｎビットの部分に格納し、被除数レジスタ２０′の先頭から（ｎ＋１）番目以降のビット位置として設定されたシフト区間内についてのみ、データを１ビット分上位側にシフトさせるレジスタ更新処理を実行する手順ということができる。
【０４７１】
結局、この図５５に示す部分シフト法を採用した第２の実施形態に係る除算回路の演算処理部８０は、図５２に示すとおり、第ｉ回目（１≦ｉ≦Ｋ）の一巡プロセスにおいて加算処理もしくは減算処理が必要か否かを判定する加減算要否判定部８１と、被除数レジスタ２０′に格納されているデータの先頭ビットと、除数レジスタ３０に格納されているデータの先頭ビットとを比較する符号比較部８２と、加減算要否判定部８１が肯定的判定を行ったときに、符号比較部８２による比較結果が同符号の場合には抽出したｎビットの部分被除数Ｚｉからｎビットの正規化除数Ｄ′を減じる減算処理を実行し、異符号の場合には抽出したｎビットの部分被除数Ｚｉにｎビットの正規化除数Ｄ′を加える加算処理を実行し、ｎビットからなる部分剰余Ｒｉを得る加減算部８３と、減算処理が実行された場合には正の部分商を示すデータを、加算処理が実行された場合には負の部分商を示すデータを、加減算要否判定部８１が否定的判定を行うことにより無演算処理が実行された場合には零の部分商を示すデータを、商レジスタ６０の対応桁に格納する部分商格納部８４と、少なくとも第１回目〜第（Ｋ−１）回目の各一巡プロセスにおいて、加算処理もしくは減算処理が行われたときに、得られた部分剰余Ｒｉを被除数レジスタ２０′の先頭からｎビットの部分に格納する書込処理と、被除数レジスタ２０′の先頭から（ｎ＋１）番目以降のビット位置として設定されたシフト区間内についてのみ、データを１ビット分上位側にシフトさせるシフト処理と、を実行するレジスタ更新部８５と、を備えていることになる。
【０４７２】
＜６−４．  第１の実施形態に係る回路動作＞
§６−２で図５４を参照して述べた全体シフト法による動作や、§６−３で図５５を参照して述べた部分シフト法による動作は、いずれも第２の実施形態に係るものである。そこで、ここでは、第１の実施形態に係る回路動作についての説明を行う。
【０４７３】
第２の実施形態に係る除算回路の場合、演算処理部８０は、各回の一巡プロセスを区別せずに実施すればよい。たとえば、図３７〜図３９には、ｉ＝１〜３について、被除数レジスタ２０′に対する読み出しおよび書き込みの手順が示されているが、読出位置や書込位置は常に同じ桁位置になる。このため、図５４に示す読み書き方法を採用しても、図５５に示す読み書き方法を採用しても、読出位置や書込位置は常に固定位置に設定しておくことができる。
【０４７４】
これに対して、第１の実施形態に係る除算回路の場合、演算処理部８０は、第１回目の一巡プロセスと、第２回目の一巡プロセスとを区別して、若干異なる処理を行う必要がある。たとえば、図２７〜図３０には、ｉ＝１〜４について、被除数レジスタ２０′に対する読み出しおよび書き込みの手順が示されている。この手順によると、第１回目（ｉ＝１）の一巡プロセスでは、図２７に示すとおり、被除数レジスタ２０の先頭から４ビットを部分被除数Ｚ１として読み出し、演算によって得られた部分剰余Ｒ１を先頭から４ビットの位置に書き込む処理を行うのに対して、第２回目以降（ｉ≧２）の一巡プロセスでは、図２８〜図３０に示すとおり、被除数レジスタ２０の第２〜５ビット目を部分被除数Ｚｉとして読み出し、演算によって得られた部分剰余Ｒｉを第２〜５ビット目の位置に書き込む処理を行う必要がある。
【０４７５】
したがって、第１の実施形態に係る除算回路では、図５４に示す全体シフト法を採用する場合でも、図５５に示す部分シフト法を採用する場合でも、第１回目（ｉ＝１）の一巡プロセスだけを特例として取り扱う必要がある。すなわち、全体シフト法を採用する場合は、第１回目については、図５４(a) に示す部分被除数Ｚｉの読み出し位置を、セル９〜１６ではなくセル１０〜１７（先頭から８ビットの位置）とし、図５４(b) に示す部分剰余Ｒｉの書き込み位置を、セル９〜１６ではなくセル１０〜１７（先頭から８ビットの位置）とする必要がある。第２回目以降（ｉ≧２）の一巡プロセスについては、第２の実施形態と同様であり、図５４に示すとおりでよい。
【０４７６】
また、第１の実施形態に係る除算回路について、図５５に示す部分シフト法を採用する場合も、第１回目（ｉ＝１）の一巡プロセスのみ特例とする取り扱いが必要になる。すなわち、図５６に示すとおり、部分剰余Ｒｉの書き込み位置に関しては、第２の実施形態と同様に、ｉの値にかかわらず、常に、セル１０〜１７（先頭から８ビットの位置）とすればよいが、部分被除数Ｚｉの読み出し位置に関しては、第１回目（ｉ＝１）については、セル１０〜１７（先頭から８ビットの位置）とし、第２回目以降（ｉ≧２）については、セル９〜１６（先頭から第２〜９ビット目の位置）とする必要がある。また、第１回目については、シフト動作は行わない。
【０４７７】
ここで、この図５６に示す部分シフト法を採用した第１の実施形態に係る除算回路における演算処理部８０の動作手順を、除数Ｚのビット数をｎとして一般論として述べれば、一巡プロセスを行う際に、第１回目の一巡プロセスでは、被除数レジスタ２０に格納されているデータの先頭のｎビットを部分被除数Ｚ１として抽出し、加算処理もしくは減算処理で得られた部分剰余Ｒ１を被除数レジスタ２０の先頭からｎビットの部分に格納し、第２回目以降の一巡プロセスでは、被除数レジスタ２０に格納されているデータの第２ビット目〜第（ｎ＋１）ビット目を部分被除数Ｚｉとして抽出し、かつ、少なくとも第２回目〜第（Ｋ−１）回目の一巡プロセスでは、加算処理もしくは減算処理が行われたときに、得られた部分剰余を被除数レジスタ２０の先頭からｎビットの部分に格納し、被除数レジスタ２０の先頭から（ｎ＋１）番目以降のビット位置として設定されたシフト区間内についてのみ、データを１ビット分上位側にシフトさせるレジスタ更新処理を実行する手順ということができる。
【０４７８】
結局、図２６に示す第１の実施形態に係る除算回路に、図５６に示す部分シフト法を採用した場合、演算処理部４０は、第ｉ回目（１≦ｉ≦Ｋ）の一巡プロセスにおいて加算処理もしくは減算処理が必要か否かを判定する加減算要否判定部４１と、被除数レジスタ２０に格納されているデータの先頭ビットと、除数レジスタ３０に格納されているデータの先頭ビットとを比較する符号比較部２５と、加減算要否判定部４１が肯定的判定を行ったときに、符号比較部２５による比較結果が同符号の場合には抽出したｎビットの部分被除数Ｚｉからｎビットの正規化除数Ｄ′を減じる減算処理を実行し、異符号の場合には抽出したｎビットの部分被除数Ｚｉにｎビットの正規化除数Ｄ′を加える加算処理を実行し、ｎビットからなる部分剰余Ｒｉを得る加減算部４３と、減算処理が実行された場合には正の部分商を示すデータを、加算処理が実行された場合には負の部分商を示すデータを、加減算要否判定部４１が否定的判定を行うことにより無演算処理が実行された場合には零の部分商を示すデータを、商レジスタ６０の対応桁に格納する部分商格納部４４と、第１回目の一巡プロセスでは、加算処理もしくは減算処理で得られた部分剰余Ｒ１を被除数レジスタ２０の先頭からｎビットの部分に格納し、第２回目以降の一巡プロセスでは、少なくとも第２回目〜第（Ｋ−１）回目の各一巡プロセスにおいて、加算処理もしくは減算処理が行われたときに、得られた部分剰余Ｒｉを被除数レジスタ２０の先頭からｎビットの部分に格納する書込処理と、被除数レジスタ２０の先頭から（ｎ＋１）番目以降のビット位置として設定されたシフト区間内についてのみ、データを１ビット分上位側にシフトさせるシフト処理と、を実行するレジスタ更新部４５と、を備えていることになる。
【０４７９】
＜６−５．  第２の実施形態に係るレジスタの変遷例その１＞
ここでは、第２の実施形態に係る除算回路における各レジスタの内容の変遷を、具体例に即して説明する。図５７は、§３で述べた第２の実施形態に係る方法で「５÷３」なる除算を実行する際に行われる３つの特徴（図３１参照）に関連した処理を示す図である。図示のとおり、この例は、４ビット÷４ビットの除算を実行する例であり、二進表現で「０１０１」÷「００１１」なる演算が実行される。
【０４８０】
まず、特徴１′の符号拡張処理により、被除数Ｚ「０１０１」に対してα＝２ビットの符号拡張が行われ、拡張被除数Ｚ′「０００１０１」が作成される。また、特徴２の正規化処理により、除数Ｄ「００１１」が正規化され（桁上数β＝１）、正規化除数Ｄ′「０１１０」が作成される。そして、特徴３′の式に基づいて、演算回数Ｋ＝３が決定される。
【０４８１】
図５８および図５９は、図３６に示す第２の実施形態に係る除算回路を用いて、図５７に示す除算を実行する際の演算処理プロセスにおける各レジスタの変遷を示す図である。具体的には、分図(a) 〜(f) に分けて、それぞれ図の左から順に、除数レジスタ３０、被除数レジスタ２０′、商レジスタ６０、演算カウンタを配置し、その内容の変遷が示されている。ここで、演算カウンタは、一巡プロセスの実行回数ｉを計数するためのカウンタであり、実行回数ｉが更新されるごとに１ずつ増加する。そして、このカウンタ値がＫに達するまで、一巡プロセスが繰り返し実行されることになる。
【０４８２】
まず、図５８(a) に示すように、各レジスタに、それぞれ初期値が入力される。すなわち、除数レジスタ３０には、データ入力部１０が入力した除数Ｄ「００１１」が初期値として入力され、被除数レジスタ２０′の下位４ビットには、データ入力部１０が入力した被除数Ｚ「０１０１」が入力される（上位２ビットの＊は、拡張ビットを示す）。また、商レジスタ６０（実際には、正の商レジスタ６１と負の商レジスタ６２）の各ビットおよび演算カウンタは、初期値０にリセットされる。
【０４８３】
続いて、図５８(b) に示すように、正規化処理および符号拡張処理が実行される。すなわち、除数レジスタ３０内の除数Ｄ「００１１」は正規化され、正規化除数Ｄ′「０１１０」となり（桁上数β＝１）、被除数レジスタ２０′内の被除数Ｚ「０１０１」は符号拡張され、拡張被除数Ｚ′「０００１０１」となる（符号拡張数α＝２）。
【０４８４】
なお、ここでは便宜上、図５８(a) に示すように、被除数レジスタ２０′の下位４ビットに被除数Ｚ「０１０１」が入力された後、符号拡張処理を行うことにより、図５８(b) に示すように、被除数レジスタ２０′の先頭２ビット（図(a) に「＊＊」で示すビット）に「００」が追加され、拡張被除数Ｚ′「０００１０１」が作成される、という説明を行っているが、図５２に示す例のように、符号拡張部２５を分岐信号線によって構成した場合は、図５８(a) の初期値入力段階において、被除数Ｚ「０１０１」が入力されるのと同時に、「＊＊」で示す拡張ビット部分にも分岐信号線を介して符号ビット「０」が同時に入力されることになり、被除数レジスタ２０′には、初期段階から拡張被除数Ｚ′「０００１０１」が格納された状態になる。
【０４８５】
続いて、図５８(c) に示すように、第１回目の演算処理（ｉ＝１）が実行される。すなわち、演算処理部８０によって、被除数レジスタ２０′の第２〜５ビット目から部分被除数Ｚ１「００１０」が読み出される。そして、この部分被除数Ｚ１は零ではないので、加減算部８３による加減算が実行される。すなわち、符号比較部８２によって、除数レジスタ３０の先頭ビット「０」と被除数レジスタ２０′の先頭ビット「０」とが比較され、この例の場合は同符号であるため、減算処理が実行されることになる。
【０４８６】
具体的には、部分被除数Ｚ１「００１０」と除数レジスタ３０内の正規化除数Ｄ′「０１１０」とを用いた引き算（実際には、２の補数「１０１０」を用いた足し算）が実行され、部分剰余Ｒ１「１１００」が得られる。この部分剰余Ｒ１「１１００」は、レジスタ更新部８５によって被除数レジスタ２０′の先頭４ビットの桁位置に書き込まれる。また、被除数レジスタ２０′の末尾２ビットの桁位置はシフト区間となるので、このシフト区間内のデータのみ、上位側へ１ビットだけシフトされる（この例では、空いた最下位ビットには０を入れている）。その結果、被除数レジスタ２０′の内容は、図の最下段に示すとおり「１１００１０」になる。
【０４８７】
一方、部分商格納部８４により、商レジスタ６０に対する部分商の書き込みが行われる。すなわち、第１回目の演算処理としては減算処理が行われたため、正の部分商「１」が商レジスタ６０の最下位ビットに書き込まれる。実際には、商レジスタ６０を構成する正の商レジスタの最下位ビットに１を書き込む処理が行われ、負の商レジスタの最下位ビットは初期値０のままでよい。こうして、最下位ビットへの書き込みが完了したら、商レジスタ６０全体に対して、上位側に１ビット分シフトする処理が行われる。
【０４８８】
以上で、第１回目の演算処理は完了である。この時点において、除数レジスタ３０の内容は「０１１０」、被除数レジスタ２０′の内容は「１１００１０」、商レジスタ６０の内容は「正の段：００１０、負の段：００００」、演算カウンタの内容は「１」ということになる。
【０４８９】
次に、図５９(d) に示すように、第２回目の演算処理（ｉ＝２）が実行される。すなわち、演算処理部８０によって、被除数レジスタ２０′の第２〜５ビット目から部分被除数Ｚ２「１００１」が読み出される（図５８の最下段参照）。この部分被除数Ｚ２は零ではないので、加減算部８３による加減算が実行される。すなわち、符号比較部８２によって、除数レジスタ３０の先頭ビット「０」と被除数レジスタ２０′の先頭ビット「１」とが比較され（図５８の最下段参照）、この例の場合は異符号であるため、加算処理が実行されることになる。
【０４９０】
具体的には、部分被除数Ｚ２「１００１」と除数レジスタ３０内の正規化除数Ｄ′「０１１０」とを用いた足し算が実行され、部分剰余Ｒ２「１１１１」が得られる。この部分剰余Ｒ２「１１１１」は、レジスタ更新部８５によって被除数レジスタ２０′の先頭４ビットの桁位置に書き込まれる。また、被除数レジスタ２０′の末尾２ビットの桁位置はシフト区間となるので、このシフト区間内のデータのみ、上位側へ１ビットだけシフトされる。その結果、被除数レジスタ２０′の内容は、図示のとおり「１１１１００」になる。
【０４９１】
一方、部分商格納部８４により、商レジスタ６０に対する部分商の書き込みが行われる。すなわち、第２回目の演算処理としては加算処理が行われたため、負の部分商「０」が商レジスタ６０の最下位ビットに書き込まれる。実際には、商レジスタ６０を構成する負の商レジスタの最下位ビットに１を書き込む処理が行われ、正の商レジスタの最下位ビットは初期値０のままでよい。こうして、最下位ビットへの書き込みが完了したら、商レジスタ６０全体に対して、上位側に１ビット分シフトする処理が行われる。
【０４９２】
以上で、第２回目の演算処理は完了である。この時点において、除数レジスタ３０の内容は「０１１０」、被除数レジスタ２０′の内容は「１１１１００」、商レジスタ６０の内容は「正の段：０１００、負の段：００１０」、演算カウンタの内容は「２」ということになる。
【０４９３】
続いて、図５９(e) に示すように、第３回目の演算処理（ｉ＝３）が実行される。すなわち、演算処理部８０によって、被除数レジスタ２０′の第２〜５ビット目から部分被除数Ｚ３「１１１０」が読み出される。この部分被除数Ｚ３は零ではないので、加減算部８３による加減算が実行される。すなわち、符号比較部８２によって、除数レジスタ３０の先頭ビット「０」と被除数レジスタ２０′の先頭ビット「１」とが比較され、この例の場合は異符号であるため、加算処理が実行されることになる。
【０４９４】
具体的には、部分被除数Ｚ３「１１１０」と除数レジスタ３０内の正規化除数Ｄ′「０１１０」とを用いた足し算が実行され、部分剰余Ｒ３「０１００」が得られる。この時点で、演算カウンタの内容は「３」になっており、演算回数Ｋに達している。したがって、この第３回目の演算処理は最終回であり、被除数レジスタ２０′に対する更新処理は行う必要はない。すなわち、得られた部分剰余Ｒ３「０１００」を被除数レジスタ２０′に書き込む処理や、被除数レジスタ２０′の末尾２ビットのシフト区間についてのシフト処理は行う必要はない。ただ、図５９(e) では、後続する補正処理の説明を行う便宜上、部分剰余Ｒ３「０１００」を被除数レジスタ２０′の先頭４ビットの桁位置に書き込む処理を行った状態を示すことにする。
【０４９５】
一方、部分商格納部８４により、商レジスタ６０に対する部分商の書き込みが行われる。すなわち、第３回目の演算処理としては加算処理が行われたため、負の部分商「０」が商レジスタ６０の最下位ビットに書き込まれる。実際には、商レジスタ６０を構成する負の商レジスタの最下位ビットに１を書き込む処理が行われ、正の商レジスタの最下位ビットは初期値０のままでよい。なお、既に演算回数Ｋに達しているため、商レジスタ６０に対するシフトも行う必要はない。
【０４９６】
以上で、第３回目の演算処理、すなわち、最終回の演算処理は完了である。こうして、全３回の演算処理が完了した時点で得られた部分剰余Ｒ３「０１００」は、仮の剰余Ｒ′ということになり、この時点での商レジスタ６０の内容「正の段：０１００、負の段：００１１」は、仮の商Ｑ′を示すことになる。
【０４９７】
最後に、図５９(f) に示すように、補正処理が実行される（手順の詳細は、図２３の流れ図参照）。仮の剰余Ｒ′「０１００」は零ではないが、その符号（先頭ビット０）は被除数Ｚの符号（先頭ビット０）と同符号であるため、商に関する補正は不要である（図２３のステップＳ２８Ａ）。そこで、商レジスタ６０の正の段「０１００」から負の段「００１１」を引き算することにより、仮の商Ｑ′（演算済）「０００１」を求めれば、これが真の商Ｑ＝１ということになる。
【０４９８】
一方、仮の剰余Ｒ′「０１００」については、桁上数β＝１に相当するビット数だけ桁下げ処理を行い（図２３のステップＳ４２Ａ）、真の剰余Ｒ「００１０」（＝２）が得られる。かくして、「５÷３」なる除算に対して、商Ｑ＝１、剰余Ｒ＝２なる正しい演算結果が得られる。
【０４９９】
＜６−６．  結合レジスタの採用＞
上述した図５９(f) の補正処理において、商に関する補正の要否を判定するためには、仮の剰余Ｒ′の符号と被除数Ｚの符号（拡張被除数Ｚ′の符号と同じ）とを比較する必要がある（図２３のステップＳ２７Ａ）。また、どのような補正を行うかを決定するためには、被除数Ｚの符号（拡張被除数Ｚ′の符号と同じ）と除数Ｄの符号（正規化除数Ｄ′の符号と同じ）とを比較する必要がある（図２３のステップＳ２９Ａ）。
【０５００】
ここで、仮の剰余Ｒ′は、最終回（図示の例の場合は、第３回目）の演算処理で得られるものであり、正規化除数Ｄ′は除数レジスタ３０に格納されたまま、最終回の演算処理が完了する時点まで書き換えられずにいる。しかしながら、被除数Ｚ（拡張被除数Ｚ′）は、図５８(a) に示す初期値入力段階では被除数レジスタ２０′に格納されているものの、その後、全３回の一巡プロセスにおける更新処理によって書き換えられてしまう。したがって、全Ｋ回の一巡プロセスを完了した時点において、商に関する補正の要否を判定するためには、初期値入力段階で取り込んだ被除数Ｚの符号（１ビットのデータ）を符号保存用ビットとしてどこかに保存しておく必要がある。
【０５０１】
もちろん、この符号保存用ビットは、除算回路内のどこに保存しておいてもかまわないが、ここでは好適な一例として、被除数レジスタ２０の最上位ビットの更に上位側のビットとして配置された符号保存用レジスタを設け、この符号保存用レジスタに符号保存用ビットを格納する例を説明する。
【０５０２】
図６０は、第２の実施形態に係る被除数レジスタ２０′と符号保存用レジスタ２１とを結合して、結合レジスタ２２を構成した例を示す図である（もちろん、第１の実施形態に係る被除数レジスタ２０と符号保存用レジスタとを結合して、結合レジスタを構成することもできる）。
【０５０３】
ここで、被除数レジスタ２０′は、これまで述べてきたとおり、拡張被除数Ｚ′を格納するためのレジスタであり、初期段階では、下位ｍビットの部分に被除数Ｚが格納され、上位αビットの部分に符号の拡張部分が格納されることになる。すなわち、被除数レジスタ２０′は、（ｍ＋α）ビットのデータを収容する機能をもったレジスタである。一方、符号保存用レジスタ２１は、符号保存用ビットを収容するためのレジスタであり、１ビットのデータを収容する機能をもったレジスタであればよい。
【０５０４】
結合レジスタ２２は、この符号保存用レジスタ２１と被除数レジスタ２０′とを結合して構成されるレジスタであり、（１＋ｍ＋α）ビットのデータを収容する機能を有している。もっとも、実用上は、一般的な単一のレジスタ回路を結合レジスタ２２として用い、その上位１ビット分を符号保存用レジスタ２１として利用し、これに後続する（ｍ＋α）ビット分を被除数レジスタ２０′として利用すればよい。
【０５０５】
図６１は、図６０に示す結合レジスタ２２の具体的なビット構成例を示す図である。この例では、全１９ビットのデータを収容する機能をもったレジスタを結合レジスタ２２として用い、１６ビットからなる被除数Ｚ（ｍ＝１６）、２ビットからなる符号拡張部分（α＝２）、１ビットからなる符号保存用ビットを収容できるようにしている。
【０５０６】
具体的には、この結合レジスタ２２の個々のセルに、図示のとおり、下位ビット側から順に０〜１８までの番号を付して示すと、セル０〜１５には、データ入力部１０によって入力された１６ビットの被除数Ｚが収容され、セル１６，１７には、符号拡張部２５による拡張処理によって、セル１５に収容された符号ビットと同じビットが収容される。一方、セル１８は、符号拡張処理とは直接的には関係ないが、被除数Ｚの符号を保存しておくためのセルであり、ここに収容される符号保存用ビットは、セル１５に収容される符号ビットと同じビットになる。そこで、実用上は、符号拡張部２５による拡張処理によって、セル１５に収容される符号ビットと同じビットをセル１６，１７に収容する際に、セル１８にも同じビットを収容するようにすればよい。
【０５０７】
結局、図６１に示す結合レジスタ２２は、１８ビットからなる拡張被除数Ｚ′を格納する被除数レジスタ２０′（セル０〜１７）と、この被除数レジスタ２０′の最上位ビットの更に上位側に配置された符号保存用ビットを格納する符号保存用レジスタ２１（セル１８）と、を結合したレジスタということになる。
【０５０８】
このような結合レジスタ２２を利用して被除数Ｚの符号ビットを保存する実施形態を採る場合は、符号拡張部２５が、被除数Ｚに対して、先頭の符号ビットと同じビットをα＋１個だけ先頭部分に付加し、（ｍ＋α＋１）ビットからなるデータを生成し、生成したデータの下位（ｍ＋α）ビットからなる拡張被除数Ｚ′を結合レジスタ２２のうちの被除数レジスタ２０′の部分に格納し、生成したデータの上位１ビットからなる符号保存用ビットを結合レジスタ２２のうちの符号保存用レジスタ２１の部分に格納する処理を行うようにすればよい。
【０５０９】
もちろん、符号保存用レジスタ２１は、機能上は、被除数レジスタ２０′とは別個のレジスタであるため、部分剰余Ｒｉの書き込みの影響を受けることはなく、被除数レジスタ２０′に対するシフト処理が行われても、何ら影響を受けることはない。すなわち、初期段階において符号保存用レジスタ２１に書き込まれた符号保存用ビットは、全Ｋ回の一巡プロセスが完了した段階においても、初期段階のまま維持されていることになる。したがって、補正処理部７０は、この符号保存用レジスタ２１内に格納されている符号保存用ビットに基づいて被除数Ｚの符号を認識することができる。
【０５１０】
なお、この図６１に示す例においても、符号拡張部２５は、データ入力部１０によって入力された被除数Ｚの最上位ビットを示す信号線Ｌ１５から分岐された分岐信号線Ｌ１６〜Ｌ１８によって構成されている。ここで、分岐信号線Ｌ１６，Ｌ１７は、セル１６，１７に対して、拡張された符号ビットを書き込む符号拡張用信号線としての役割を果たし、分岐信号線Ｌ１８は、セル１８（符号保存用レジスタ２１）に対して、保存用の符号ビットを書き込む保存用分岐信号線としての役割を果たす。結局、被除数Ｚの最上位ビットの値は、４本の信号線によって、セル１５〜１８に同時に書き込まれることになる。このように、符号拡張部２５を、分岐信号線Ｌ１６〜Ｌ１８によって構成すれば、構成も動作も単純化することができる。
【０５１１】
＜６−７．  第２の実施形態に係るレジスタの変遷例その２＞
最後に、図６２および図６３を参照しながら、図３６に示す第２の実施形態に係る除算回路を用いて、図５７に示す除算を実行する際の演算処理プロセスにおける各レジスタの変遷の変形例を説明する。ここに示す変形例は、基本的には、§６−５で述べた例（図５８および図５９に示す例）と同様の演算処理プロセスを示すものであり、相違点は次の２点だけである。すなわち、第１の相違点は、§６−６で述べた結合レジスタを採用している点であり、第２の相違点は、§４で述べた加減算要否判定方法の変形例（ビットパターン「００００」および「１１１１」により加減算不要のケースを判定する変形例）を採用している点である。
【０５１２】
ここでも、全体の演算処理プロセスを、分図(a) 〜(f) に分けて示すことにする。ただ、この変形例では、被除数レジスタ２０′の代わりに結合レジスタ２２が用いられているため、各分図における配置は、それぞれ左から順に、除数レジスタ３０、結合レジスタ２２、商レジスタ６０、演算カウンタということになる。結合レジスタ２２は、７ビットのデータを収容可能なレジスタであるが、下位６ビットは、図５８および図５９に示す例で述べた被除数レジスタ２０′として機能し、上位１ビットが、§６−６で述べた符号保存用レジスタ２１として機能する。なお、ここでも演算カウンタは、一巡プロセスの実行回数ｉを計数するためのカウンタであり、実行回数ｉが更新されるごとに１ずつ増加する。そして、このカウンタ値がＫに達するまで、一巡プロセスが繰り返し実行されることになる。
【０５１３】
まず、図６２(a) に示すように、各レジスタに、それぞれ初期値が入力される。すなわち、除数レジスタ３０には、データ入力部１０が入力した除数Ｄ「００１１」が初期値として入力され、結合レジスタ２２の下位４ビットには、データ入力部１０が入力した被除数Ｚ「０１０１」が入力される（上位３ビットの＊は、拡張ビットおよび符号保存用ビットを示す）。また、商レジスタ６０（実際には、正の商レジスタ６１と負の商レジスタ６２）の各ビットおよび演算カウンタは、初期値０にリセットされる。
【０５１４】
続いて、図６２(b) に示すように、正規化処理および符号拡張処理が実行される。すなわち、除数レジスタ３０内の除数Ｄ「００１１」は正規化され、正規化除数Ｄ′「０１１０」となり（桁上数β＝１）、結合レジスタ２２内の被除数Ｚ「０１０１」は符号拡張され、拡張被除数Ｚ′「０００１０１」となる（符号拡張数α＝２）。このとき、符号保存用ビットも符号保存用レジスタ２１に収容されることになるので、実質的には、図６２(a) において「＊＊＊」と記した３ビットの部分に、被除数Ｚの符号ビット「０」が拡張されて保存されることになる。
【０５１５】
なお、ここでは便宜上、図６２(a) に示すように、結合レジスタ２２の下位４ビットに被除数Ｚ「０１０１」が入力された後、符号拡張処理を行うことにより、図６２(b) に示すように、結合レジスタ２２の先頭３ビット（図(a) に「＊＊＊」で示すビット）に「０００」が追加され、７ビットのデータ「００００１０１」が作成される、という説明を行っているが、図６１に示す例のように、符号拡張部２５を分岐信号線によって構成した場合は、図６２(a) の初期値入力段階において、被除数Ｚ「０１０１」が入力されるのと同時に、「＊＊＊」で示すビット部分にも分岐信号線を介して符号ビット「０」が同時に入力されることになり、結合レジスタ２２には、初期段階から７ビットのデータ「００００１０１」が格納された状態になる。
【０５１６】
続いて、図６２(c) に示すように、第１回目の演算処理（ｉ＝１）が実行される。ただ、この変形例では、上述したとおり、§４で述べた加減算要否判定方法の変形例を採用しているため、はじめに、加減算要否判定部８１によって、図６２(b) に太枠で囲って示す４ビット（被除数レジスタ２０′の先頭４ビット）のビットパターンが、「００００」もしくは「１１１１」であるか否かの判定が行われる。図示の例の場合、太枠内のビットパターンは「０００１」であるから、演算必要との判定がなされ、加減算部８３により部分被除数Ｚ１「００１０」が読み出され、加減算が実行される。
【０５１７】
すなわち、演算処理部８０によって、結合レジスタ２２の第３〜６ビット目（被除数レジスタ２０′としては、第２〜５ビット目）から部分被除数Ｚ１「００１０」が読み出される。そして符号比較部８２によって、除数レジスタ３０の先頭ビット「０」と被除数レジスタ２０′の先頭ビット「０」（結合レジスタ２２としては、先頭から２ビット目）とが比較され、この例の場合は同符号であるため、減算処理が実行される。
【０５１８】
具体的には、部分被除数Ｚ１「００１０」と除数レジスタ３０内の正規化除数Ｄ′「０１１０」とを用いた引き算（実際には、２の補数「１０１０」を用いた足し算）が実行され、部分剰余Ｒ１「１１００」が得られる。この部分剰余Ｒ１「１１００」は、レジスタ更新部８５によって被除数レジスタ２０′の先頭４ビットの桁位置（結合レジスタ２２としては、先頭から第２〜５ビット目の桁位置）に書き込まれる。また、結合レジスタ２２の末尾２ビットの桁位置はシフト区間となるので、このシフト区間内においてのみ、上位側へ１ビットだけシフトする処理が行われる（この例では、空いた最下位ビットには０を入れている）。その結果、結合レジスタ２２の内容は、図の最下段に示すとおり「０１１００１０」になる。
【０５１９】
一方、部分商格納部８４により、商レジスタ６０に対する部分商の書き込みが行われる。すなわち、第１回目の演算処理としては減算処理が行われたため、正の部分商「１」が商レジスタ６０の最下位ビットに書き込まれる。実際には、商レジスタ６０を構成する正の商レジスタの最下位ビットに１を書き込む処理が行われ、負の商レジスタの最下位ビットは初期値０のままでよい。こうして、最下位ビットへの書き込みが完了したら、商レジスタ６０全体に対して、上位側に１ビット分シフトする処理が行われる。
【０５２０】
以上で、第１回目の演算処理は完了である。この時点において、除数レジスタ３０の内容は「０１１０」、結合レジスタ２２の内容は「０１１００１０」、商レジスタ６０の内容は「正の段：００１０、負の段：００００」、演算カウンタの内容は「１」ということになる。
【０５２１】
次に、図６３(d) に示すように、第２回目の演算処理（ｉ＝２）が実行される。はじめに、加減算要否判定部８１によって、図６２(c) に太枠で囲って示す４ビット（被除数レジスタ２０′の先頭４ビット）のビットパターンが、「００００」もしくは「１１１１」であるか否かの判定が行われる。図示の例の場合、太枠内のビットパターンは「１１００」であるから、演算必要との判定がなされ、加減算部８３により部分被除数Ｚ２「１００１」が読み出され、加減算が実行される。
【０５２２】
すなわち、符号比較部８２によって、除数レジスタ３０の先頭ビット「０」と被除数レジスタ２０′の先頭ビット「１」（結合レジスタ２２としては、先頭から２ビット目）とが比較され（図６２の最下段参照）、この例の場合は異符号であるため、加算処理が実行されることになる。
【０５２３】
具体的には、部分被除数Ｚ２「１００１」と除数レジスタ３０内の正規化除数Ｄ′「０１１０」とを用いた足し算が実行され、部分剰余Ｒ２「１１１１」が得られる。この部分剰余Ｒ２「１１１１」は、レジスタ更新部８５によって被除数レジスタ２０′の先頭４ビットの桁位置（結合レジスタ２２としては、先頭から第２〜５ビット目の桁位置）に書き込まれる。また、結合レジスタ２２の末尾２ビットの桁位置はシフト区間となるので、このシフト区間内においてのみ、上位側へ１ビットだけシフトする処理が行われる。その結果、結合レジスタ２２の内容は、図示のとおり「０１１１１００」になる。
【０５２４】
一方、部分商格納部８４により、商レジスタ６０に対する部分商の書き込みが行われる。すなわち、第２回目の演算処理としては加算処理が行われたため、負の部分商「０」が商レジスタ６０の最下位ビットに書き込まれる。実際には、商レジスタ６０を構成する負の商レジスタの最下位ビットに１を書き込む処理が行われ、正の商レジスタの最下位ビットは初期値０のままでよい。こうして、最下位ビットへの書き込みが完了したら、商レジスタ６０全体に対して、上位側に１ビット分シフトする処理が行われる。
【０５２５】
以上で、第２回目の演算処理は完了である。この時点において、除数レジスタ３０の内容は「０１１０」、結合レジスタ２２の内容は「０１１１１００」、商レジスタ６０の内容は「正の段：０１００、負の段：００１０」、演算カウンタの内容は「２」ということになる。
【０５２６】
続いて、図６３(e) に示すように、第３回目の演算処理（ｉ＝３）が実行される。はじめに、加減算要否判定部８１によって、図６３(d) に太枠で囲って示す４ビット（被除数レジスタ２０′の先頭４ビット）のビットパターンが、「００００」もしくは「１１１１」であるか否かの判定が行われる。図示の例の場合、太枠内のビットパターンは「１１１１」であるから、演算不要との判定がなされ、加減算部８３による加減算は実行されない。すなわち、第３回目の演算処理としては、無演算処理が選択されることになる。
【０５２７】
その結果、第３回目の演算処理では、部分被除数Ｚ３「１１１０」がそのまま部分剰余Ｒ３ということになる。この時点で、演算カウンタの内容は「３」になっており、演算回数Ｋに達している。したがって、この第３回目の演算処理は最終回であり、被除数レジスタ２０′に対する更新処理は行う必要はない。すなわち、得られた部分剰余Ｒ３「１１１０」を被除数レジスタ２０′に書き込む処理や、結合レジスタ２２の末尾２ビットのシフト区間についてのシフト処理は行う必要はない。ただ、図６３(e) では、後続する補正処理の説明を行う便宜上、部分剰余Ｒ３「１１１０」を被除数レジスタ２０′の先頭４ビットの桁位置に書き込む処理を行った状態を示すことにする。
【０５２８】
一方、部分商格納部８４により、商レジスタ６０に対する部分商の書き込みが行われる。すなわち、第３回目の演算処理としては無演算処理が行われたため、零の部分商「０」が商レジスタ６０の最下位ビットに書き込まれる。もっとも実際には、商レジスタ６０を構成する負の商レジスタおよび正の商レジスタに対する実質的な書き込みは行われず、これら両レジスタの最下位ビットは初期値０のままになる。なお、既に演算回数Ｋに達しているため、商レジスタ６０に対するシフトも行う必要はない。
【０５２９】
以上で、第３回目の演算処理、すなわち、最終回の演算処理は完了である。こうして、全３回の演算処理が完了した時点で得られた部分剰余Ｒ３「１１１０」は、仮の剰余Ｒ′ということになり、この時点での商レジスタ６０の内容「正の段：０１００、負の段：００１０」は、仮の商Ｑ′を示すことになる。
【０５３０】
最後に、図６３(f) に示すように、補正処理が実行される（手順の詳細は、図２３の流れ図参照）。仮の剰余Ｒ′「１１１０」は零ではないので、その符号と被除数Ｚの符号とを比較する必要がある（図２３のステップＳ２７Ａ）。ここで述べる変形例は、結合レジスタを採用するものであり、被除数Ｚの符号は、符号保存用レジスタ２１に符号保存用ビットとして保存されている（結合レジスタ２２の先頭ビット）。そこで、補正処理部７０は、図６３(e) に示すように、結合レジスタ２２の先頭ビット「０」（保存されていた被除数Ｚの符号）と２番目のビット「１」（仮の剰余Ｒ′の符号）との比較を行う。
【０５３１】
この例の場合、比較結果は異符号であるため、図２３のステップＳ２８ＡからステップＳ２９Ａと進み、今度は、被除数Ｚの符号と除数Ｄの符号との比較を行うことになる。具体的には、補正処理部７０は、図６３(e) に示すように、結合レジスタ２２の先頭ビット「０」（保存されていた被除数Ｚの符号）と除数レジスタ３０の先頭ビット「０」（除数Ｄの符号）の比較を行えばよい。この例の場合、比較結果は同符号であるため、図２３のステップＳ３０ＡからステップＳ３１Ａへと進み、商に関する補正および剰余に関する補正が行われる。
【０５３２】
まず、商レジスタ６０の正の段「０１００」から負の段「００１０」を引き算することにより、仮の商Ｑ′（演算済）「００１０」を求める。そして、この仮の商Ｑ′を１だけ減少補正することにより、真の商Ｑ「０００１」＝１を得ることができる。
【０５３３】
一方、仮の剰余Ｒ′「１１１０」については、まず、除数Ｄ′「０１１０」だけ増加させる補正を行って「０１００」なる値を得た後、桁上数β＝１に相当するビット数だけ桁下げ処理を行い（図２３のステップＳ４２Ａ）、真の剰余Ｒ「００１０」（＝２）を得る。かくして、「５÷３」なる除算に対して、商Ｑ＝１、剰余Ｒ＝２なる正しい演算結果が得られる。図５８および図５９に示す例と、図６２および図６３に示す例とでは、若干、演算処理プロセスが異なるが、最終的には同一の正しい演算結果が得られることになる。
【符号の説明】
【０５３４】
１０：データ入力部
２０，２０′：被除数レジスタ
２１：符号保存用レジスタ
２２：結合レジスタ
２５，２５′：符号拡張部
３０：除数レジスタ
３５：正規化処理部
４０：演算処理部
４１：加減算要否判定部
４２：符号比較部
４３：加減算部
４４：部分商格納部
４５：レジスタ更新部
５０：演算回数決定部
６０：商レジスタ
６１：正の商レジスタ
６２：負の商レジスタ
７０：補正処理部
８０：演算処理部
８１：加減算要否判定部
８２：符号比較部
８３：加減算部
８４：部分商格納部
８５：レジスタ更新部
９０：演算回数決定部
ｂ１〜ｂ４：各ビット
Ｄ：除数
Ｄ′：正規化除数
ｄ：除数の各ビット
ｉ：一巡プロセスを示すパラメータ
Ｋ：演算回数
Ｌ１５：被除数の最上位ビットの信号線
Ｌ１６〜Ｌ１８：分岐信号線
ｍ：被除数Ｚのビット数
ｎ：除数Ｄのビット数
Ｑ：商
Ｑ′：仮の商
Ｑｉ：第ｉ回目の一巡プロセスで得られた部分商
Ｒ：剰余
Ｒ′：仮の剰余
Ｒｉ：第ｉ回目の一巡プロセスで得られた部分剰余
Ｒｋ：第Ｋ回目の一巡プロセスで得られた部分剰余
Ｓ：符号ビット
Ｓ１１〜Ｓ４２Ａ：流れ図の各ステップ
Ｖ：有意桁ビット
ｖ，ｗ，ｘ，ｙ：演算により得られた各ビット
Ｚ：被除数
Ｚ′：拡張被除数
Ｚｉ：第ｉ回目の一巡プロセスで用いる部分被除数
ｚ：被除数の各ビット
α：符号拡張数
β：正規化処理における桁上数
φ：無演算処理の記号
【図１】
2015018329.tif 000003
【図２】
2015018329.tif 000004
【図３】
2015018329.tif 000005
【図４】
2015018329.tif 000006
【図５】
2015018329.tif 000007
【図６】
2015018329.tif 000008
【図７】
2015018329.tif 000009
【図８】
2015018329.tif 000010
【図９】
2015018329.tif 000011
【図１０】
2015018329.tif 000012
【図１１】
2015018329.tif 000013
【図１２】
2015018329.tif 000014
【図１３】
2015018329.tif 000015
【図１４】
2015018329.tif 000016
【図１５】
2015018329.tif 000017
【図１６】
2015018329.tif 000018
【図１７】
2015018329.tif 000019
【図１８】
2015018329.tif 000020
【図１９】
2015018329.tif 000021
【図２０】
2015018329.tif 000022
【図２１】
2015018329.tif 000023
【図２２】
2015018329.tif 000024
【図２３】
2015018329.tif 000025
【図２４】
2015018329.tif 000026
【図２５】
2015018329.tif 000027
【図２６】
2015018329.tif 000028
【図２７】
2015018329.tif 000029
【図２８】
2015018329.tif 000030
【図２９】
2015018329.tif 000031
【図３０】
2015018329.tif 000032
【図３１】
2015018329.tif 000033
【図３２】
2015018329.tif 000034
【図３３】
2015018329.tif 000035
【図３４】
2015018329.tif 000036
【図３５】
2015018329.tif 000037
【図３６】
2015018329.tif 000038
【図３７】
2015018329.tif 000039
【図３８】
2015018329.tif 000040
【図３９】
2015018329.tif 000041
【図４０】
2015018329.tif 000042
【図４１】
2015018329.tif 000043
【図４２】
2015018329.tif 000044
【図４３】
2015018329.tif 000045
【図４４】
2015018329.tif 000046
【図４５】
2015018329.tif 000047
【図４６】
2015018329.tif 000048
【図４７】
2015018329.tif 000049
【図４８】
2015018329.tif 000050
【図４９】
2015018329.tif 000051
【図５０】
2015018329.tif 000052
【図５１】
2015018329.tif 000053
【図５２】
2015018329.tif 000054
【図５３】
2015018329.tif 000055
【図５４】
2015018329.tif 000056
【図５５】
2015018329.tif 000057
【図５６】
2015018329.tif 000058
【図５７】
2015018329.tif 000059
【図５８】
2015018329.tif 000060
【図５９】
2015018329.tif 000061
【図６０】
2015018329.tif 000062
【図６１】
2015018329.tif 000063
【図６２】
2015018329.tif 000064
【図６３】
2015018329.tif 000065