(57)【特許請求の範囲】
【請求項１】
所定のビット幅の第１ビット列と第１ビット列よりもビット幅が大きい第２ビット列との絶対値加算を行う演算処理装置であって、
第２ビット列を第１ビット列と等しいビット幅の下位ビット部分と下位ビット部分よりも上位の上位ビット部分とに分割する分割手段と、
前記分割手段によって分割されて得られた上位ビット部分に対する桁上げおよび桁下げの演算を行う第１演算手段と、
前記分割手段によって分割されて得られた下位ビット部分と第１ビット列の絶対値加算を行う第２演算手段と、
前記上位ビット部分に関する情報、第１ビット列および第２ビット列の符号情報、ならびに前記第２演算手段による絶対値加算の中間結果に応じて、前記第１演算手段の出力を桁上げ演算結果、桁下げ演算結果、または前記上位ビット部分そのものから選択する選択手段と
を有することを特徴とする演算処理装置。
【請求項２】
前記選択手段は、
前記上位ビット部分が０であるか否かに応じて前記第１演算手段の出力を選択することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記選択手段は、
第１ビット列および第２ビット列の符号が同符号である場合に、前記桁上げ演算結果または前記上位ビット部分そのものを選択することを特徴とする請求項１記載の演算処理装置。
【請求項４】
前記選択手段は、
第１ビット列および第２ビット列の符号が異符号である場合に、前記桁下げ演算結果または前記上位ビット部分そのものを選択することを特徴とする請求項１記載の演算処理装置。
【請求項５】
所定のビット幅の第１ビット列と第１ビット列よりもビット幅が大きい第２ビット列との絶対値加算を行う演算処理方法であって、
第２ビット列を第１ビット列と等しいビット幅の下位ビット部分と下位ビット部分よりも上位の上位ビット部分とに分割する分割工程と、
前記分割工程にて分割されて得られた上位ビット部分に対する桁上げおよび桁下げの演算を行う第１演算工程と、
前記分割工程にて分割されて得られた下位ビット部分と第１ビット列の絶対値加算を行う第２演算工程と、
前記上位ビット部分に関する情報、第１ビット列および第２ビット列の符号情報、ならびに前記第２演算工程における絶対値加算の中間結果に応じて、前記第１演算工程の結果を桁上げ演算結果、桁下げ演算結果、または前記上位ビット部分そのものから選択する選択工程と
を有することを特徴とする演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ビット幅が異なる２つのビット列の絶対値加算を行う演算処理装置および演算処理方法であって、特に、さらなる処理時間の短縮を図り、回路規模を削減することができる演算処理装置および演算処理方法に関する。
【背景技術】
【０００２】
通常、コンピュータなどのプロセッサにおける演算においては、限られたビット数で表現可能な数値範囲が大きくなることから浮動小数点数が用いられている。浮動小数点数は、符号部、指数部、および仮数部からなっており、浮動小数点数の演算においては、指数部や仮数部の絶対値加算が頻繁に行われる。
【０００３】
一般的な絶対値加算を行う演算処理装置には、２つの２進数Ａ、Ｂを加減算するために２つの加算器が備えられている。一方の加算器は、第３入力であるキャリーインが０とされており、２進数Ａ、Ｂの正負が同じである場合は、この加算器の出力が演算結果となる。また、２進数Ａ、Ｂの正負が異なり、かつ、加算結果が負となる場合には、この加算器の出力が絶対値を求めるために反転されて演算結果となる。
【０００４】
また、他方の加算器は、第３入力であるキャリーインが１とされており、２の補数表現を用いた減算を実行する。したがって、２進数Ａ、Ｂの正負が異なり、かつ、加算結果が正となる場合には、この加算器の出力が演算結果となる。
【０００５】
このような演算処理装置を備えた浮動小数点数演算装置においては、回路規模や消費電力が大きくなる傾向にあるため、例えばインバータの追加やシフトの調整などによって回路規模を縮小するための種々の構成が検討されている（例えば特許文献１参照）。
【０００６】
【特許文献１】特開２０００−１５５６７１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、加算器でビット幅（すなわち桁数）が異なる２つの２進数Ａ、Ｂの加減算を行う場合、ビット幅が小さい方の上位に０を補完して加減算が行われるため、処理時間の短縮に限界があるという問題がある。すなわち、例えば２進数Ａの方が２進数Ｂよりもビット幅が大きい場合、両者が同じビット幅になるように、２進数Ｂの上位に０が補完されてから加減算が行われる。
【０００８】
このような場合、加算器としては、２進数Ａのビット幅に対応するものが必要となるため、回路規模が増大するとともに、２進数Ｂの上位ビットがすべて０であるにも関わらずすべてのビットについて演算が実行されて、処理時間が必要以上に長くなる。
【０００９】
本発明はかかる点に鑑みてなされたものであり、ビット幅が異なる２つの数の演算を行う場合に、さらなる処理時間の短縮を図り、回路規模を削減することができる演算処理装置および演算処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、演算処理装置は、所定のビット幅の第１ビット列と第１ビット列よりもビット幅が大きい第２ビット列との絶対値加算を行う演算処理装置であって、第２ビット列を第１ビット列と等しいビット幅の下位ビット部分と下位ビット部分よりも上位の上位ビット部分とに分割する分割手段と、前記分割手段によって分割されて得られた上位ビット部分に対する桁上げおよび桁下げの演算を行う第１演算手段と、前記分割手段によって分割されて得られた下位ビット部分と第１ビット列の絶対値加算を行う第２演算手段と、前記上位ビット部分に関する情報、第１ビット列および第２ビット列の符号情報、ならびに前記第２演算手段による絶対値加算の中間結果に応じて、前記第１演算手段の出力を桁上げ演算結果、桁下げ演算結果、または前記上位ビット部分そのものから選択する選択手段とを有する構成を採る。
【００１１】
また、演算処理装置は、上記構成において、前記選択手段は、前記上位ビット部分が０であるか否かに応じて前記第１演算手段の出力を選択する構成を採る。
【００１２】
また、演算処理装置は、上記構成において、前記選択手段は、第１ビット列および第２ビット列の符号が同符号である場合に、前記桁上げ演算結果または前記上位ビット部分そのものを選択する構成を採る。
【００１３】
また、演算処理装置は、上記構成において、前記選択手段は、前記第２演算手段による絶対値加算において桁上げが発生した場合に前記桁上げ演算結果を選択する一方、前記第２演算手段による絶対値加算において桁上げが発生しない場合に前記上位ビット部分そのものを選択する構成を採る。
【００１４】
また、演算処理装置は、上記構成において、前記選択手段は、第１ビット列および第２ビット列の符号が異符号である場合に、前記桁下げ演算結果または前記上位ビット部分そのものを選択する構成を採る。
【００１５】
また、演算処理装置は、上記構成において、前記選択手段は、前記上位ビット部分が０である場合に、前記上位ビット部分そのものを選択する構成を採る。
【００１６】
また、演算処理装置は、上記構成において、前記選択手段は、前記上位ビット部分が０ではなくかつ前記下位ビット部分が前記第１ビット列未満である場合に、前記桁下げ演算結果を選択する構成を採る。
【００１７】
また、演算処理装置は、上記構成において、前記選択手段は、前記下位ビット部分が前記第１ビット列以上である場合に、前記上位ビット部分そのものを選択する構成を採る。
【００１８】
また、演算処理装置は、上記構成において、前記第１演算手段は、前記上位ビット部分に桁上げに相当する１を加える第１演算器と、前記上位ビット部分から桁下げに相当する１を減じる第２演算器と、前記上位ビット部分に０を加える第３演算器と、前記選択手段の選択に従って、前記第１演算器、前記第２演算器、および前記第３演算器のいずれかの演算結果を出力する出力手段とを含む構成を採る。
【００１９】
また、演算処理方法は、所定のビット幅の第１ビット列と第１ビット列よりもビット幅が大きい第２ビット列との絶対値加算を行う演算処理方法であって、第２ビット列を第１ビット列と等しいビット幅の下位ビット部分と下位ビット部分よりも上位の上位ビット部分とに分割する分割工程と、前記分割工程にて分割されて得られた上位ビット部分に対する桁上げおよび桁下げの演算を行う第１演算工程と、前記分割工程にて分割されて得られた下位ビット部分と第１ビット列の絶対値加算を行う第２演算工程と、前記上位ビット部分に関する情報、第１ビット列および第２ビット列の符号情報、ならびに前記第２演算工程における絶対値加算の中間結果に応じて、前記第１演算工程の結果を桁上げ演算結果、桁下げ演算結果、または前記上位ビット部分そのものから選択する選択工程とを有するようにした。
【発明の効果】
【００２０】
本発明によれば、第２ビット列を第１ビット列と等しいビット幅の下位ビット部分と下位ビット部分よりも上位の上位ビット部分とに分割し、上位ビット部分に対する桁上げおよび桁下げの演算を行い、下位ビット部分と第１ビット列の絶対値加算を行い、上位ビット部分に関する情報、第１ビット列および第２ビット列の符号情報、ならびに絶対値加算の中間結果に応じて、上位ビット部分に関する演算結果を桁上げ演算結果、桁下げ演算結果、または上位ビット部分そのものから選択する。このため、ビット幅が異なる２つの数の演算を行う場合に、下位ビット部分に関する演算が完了すれば上位ビット部分については適切な演算結果を選択するのみで良く、実質的に下位ビット部分の演算に要する時間のみですべての演算が完了し、さらなる処理時間の短縮を図ることができるとともに、上位ビット部分に関する加算を行うための回路が不要となり、回路規模を削減することができる。
【００２１】
また、本発明によれば、上位ビット部分が０であるか否かに応じて上位ビット部分に関する演算結果を選択するため、第２ビット列のビット幅が実質的に第１ビット列のビット幅以下である場合でも正確な演算を行うことができる。
【００２２】
また、本発明によれば、第１ビット列および第２ビット列の符号が同符号である場合に、桁上げ演算結果または上位ビット部分そのものを選択するため、正の値同士の加算における桁上げの有無を上位ビット部分に関する演算結果に反映することができる。
【００２３】
また、本発明によれば、絶対値加算において桁上げが発生した場合に桁上げ演算結果を選択する一方、絶対値加算において桁上げが発生しない場合に上位ビット部分そのものを選択する。このため、下位ビット部分と第１ビット列の加算における桁上げの有無を上位ビット部分に関する演算結果に正確に反映することができる。
【００２４】
また、本発明によれば、第１ビット列および第２ビット列の符号が異符号である場合に、桁下げ演算結果または上位ビット部分そのものを選択するため、正の値と負の値の加算における桁下げの有無を上位ビット部分に関する演算結果に反映することができる。
【００２５】
また、本発明によれば、上位ビット部分が０である場合に、上位ビット部分そのものを選択するため、第２ビット列のビット幅が実質的に第１ビット列のビット幅以下である場合は、上位ビット部分に関する演算結果を０のままにしておき、第１ビット列から下位ビット部分を減算して絶対値加算結果を得ることができる。
【００２６】
また、本発明によれば、上位ビット部分が０ではなくかつ下位ビット部分が第１ビット列未満である場合に、桁下げ演算結果を選択するため、下位ビット部分から第１ビット列を減算する過程で発生する桁下げを上位ビット部分に関する演算結果に正確に反映することができる。
【００２７】
また、本発明によれば、下位ビット部分が第１ビット列以上である場合に、上位ビット部分そのものを選択するため、下位ビット部分から第１ビット列を減算する過程で桁下げが発生しないことを上位ビット部分に関する演算結果に正確に反映することができる。
【００２８】
また、本発明によれば、上位ビット部分に桁上げに相当する１を加える第１演算器、上位ビット部分から桁下げに相当する１を減じる第２演算器、および上位ビット部分に０を加える第３演算器のいずれかの演算結果を選択に従って出力する。このため、上位ビット部分に関する演算結果を得る回路構成が簡易なものになり、確実に回路規模を削減することができる。
【発明を実施するための最良の形態】
【００２９】
以下、本発明の一実施の形態について、図面を参照して詳細に説明する。なお、以下においては、浮動小数点数の仮数部の加減算を例に挙げて説明するが、本発明は、浮動小数点数に限らず種々の絶対値加算に適用することができる。
【００３０】
図１は、本発明の一実施の形態に係る浮動小数点数演算装置の概略構成を示すブロック図である。図１に示す浮動小数点数演算装置は、分割部１００、分割部２００、指数差計算部３００、符号判定部４００、上下位分割部５００、絶対値加算部６００、正規化シフト部７００、および丸め演算部８００を有している。
【００３１】
分割部１００は、浮動小数点数Ａを浮動小数点数Ａの正負を示す符号ビット、浮動小数点数Ａの桁数に対応する指数ビット、および浮動小数点数Ａの数値に対応する仮数ビットに分割し（図２参照）、符号ビットを符号判定部４００へ出力し、指数ビットを指数差計算部３００へ出力し、仮数ビットを上下位分割部５００へ出力する。
【００３２】
分割部２００は、浮動小数点数Ｂを浮動小数点数Ｂの正負を示す符号ビット、浮動小数点数Ｂの桁数に対応する指数ビット、および浮動小数点数Ｂの数値に対応する仮数ビットに分割し、符号ビットを符号判定部４００へ出力し、指数ビットを指数差計算部３００へ出力し、仮数ビットを絶対値加算部６００へ出力する。
【００３３】
指数差計算部３００は、浮動小数点数Ａ、Ｂの指数ビットを比較し、浮動小数点数Ａと浮動小数点数Ｂとの指数差を上下位分割部５００へ通知し、浮動小数点数Ａの仮数ビットにおいて、浮動小数点数Ａと浮動小数点数Ｂの桁数の差分に相当する上位ビットＡＨが０であるか否かを示す上位ビット情報ＡＨ＿０を絶対値加算部６００へ出力する。上位ビット情報ＡＨ＿０は、上位ビットＡＨが０である場合に１の値をとり、上位ビットＡＨが０ではない場合に０の値をとる信号である。
【００３４】
符号判定部４００は、浮動小数点数Ａ、Ｂの符号ビットを比較し、浮動小数点数Ａ、Ｂが同符号であるか異符号であるかを判定し、判定結果と浮動小数点数Ａ、Ｂそれぞれの符号とを含む符号情報を絶対値加算部６００へ出力する。
【００３５】
上下位分割部５００は、指数差計算部３００からの通知に従い、浮動小数点数Ａの仮数ビットと浮動小数点数Ｂの仮数ビットとの桁合わせシフトを行い、桁数の差分に相当する上位ビットＡＨと浮動小数点数Ｂの仮数ビットの桁数と共通する下位ビットＡＬとに分割する。すなわち、浮動小数点数Ａと浮動小数点数Ｂとは、桁合わせを行うと仮数ビットのビット幅が異なることがあるため、上下位分割部５００は、例えば図２に示すように、浮動小数点数Ａの仮数ビットを上位ビットＡＨと下位ビットＡＬとに分割し、下位ビットＡＬのビット幅は浮動小数点数Ｂの仮数ビットＢＬのビット幅に揃える。
【００３６】
絶対値加算部６００は、浮動小数点数Ａの下位ビットＡＬと浮動小数点数Ｂの仮数ビットＢＬとを加算するとともに、浮動小数点数Ａの上位ビットＡＨに対する桁上げ（キャリー）および桁下げ（ボロー）については別途演算しておき、最終的に、上位ビット情報ＡＨ＿０および符号情報などに応じて上位ビット部分の演算結果ＳＨおよび下位ビット部分の演算結果ＳＬを選択する。絶対値加算部６００による具体的な演算については、後に詳述する。
【００３７】
正規化シフト部７００は、絶対値加算部６００による演算結果ＳＨおよび演算結果ＳＬからなるビット列を浮動小数点数の仮数ビットとするように正規化シフトして指数ビットを適切に決定する。
【００３８】
丸め演算部８００は、絶対値加算部６００による演算結果ＳＨおよび演算結果ＳＬからなるビット列を丸め演算して、浮動小数点数の仮数ビットとすることにより、浮動小数点数Ａと浮動小数点数Ｂとの加算結果である浮動小数点数Ｓを出力する。
【００３９】
図３は、本実施の形態に係る絶対値加算部６００の内部構成を示すブロック図である。図３に示す絶対値加算部６００は、大きく分けて上位演算部６１０、下位演算部６２０、および出力選択部６３０を有している。また、上位演算部６１０は、＋１演算器６１１、−１演算器６１２、＋０演算器６１３、および出力部６１４を有しており、下位演算部６２０は、論理否定算出部６２１、論理否定算出部６２２、加算器６２３、加算器６２４、インバータ６２５、および出力部６２６を有している。
【００４０】
上位演算部６１０は、上位ビットＡＨに対する桁上げおよび桁下げを演算し、上位ビット情報ＡＨ＿０、符号情報、および下位演算部６２０における下位ビットの演算の中間結果に応じて、上位ビットＡＨが桁上げされた結果、上位ビットＡＨが桁下げされた結果、および上位ビットＡＨそのもののいずれかを上位ビットの演算結果ＳＨとして出力する。
【００４１】
具体的には、＋１演算器６１１は、下位ビットの演算結果からの桁上げ（キャリー）に相当する＋１を上位ビットＡＨに加算し、出力部６１４への入力Ｘとする。−１演算器６１２は、下位ビットの演算結果からの桁下げ（ボロー）に相当する−１を上位ビットＡＨに加算し、出力部６１４への入力Ｙとする。＋０演算器６１３は、下位ビットの演算結果から桁上げも桁下げも発生しない場合のために、上位ビットＡＨをそのまま出力部６１４への入力Ｚとする。出力部６１４は、出力選択部６３０からの指示に従って、入力Ｘ、Ｙ、Ｚのうちいずれか１つを上位ビットの演算結果ＳＨとして出力する。
【００４２】
下位演算部６２０は、下位ビットＡＬおよび仮数ビットＢＬの加減算を行い、上位ビット情報ＡＨ＿０、符号情報、および加減算の中間結果に応じて、下位ビットの演算結果ＳＬを出力する。
【００４３】
具体的には、論理否定算出部６２１は、符号情報から浮動小数点数Ａおよび浮動小数点数Ｂが異符号かつ浮動小数点数Ａが負の値と判断された場合に、下位ビットＡＬの論理否定を算出し、加算器６２３および加算器６２４へ出力する。また、論理否定算出部６２１は、符号情報から浮動小数点数Ａおよび浮動小数点数Ｂが同符号あるいは浮動小数点数Ａが正の値と判断された場合は、下位ビットＡＬをそのまま加算器６２３および加算器６２４へ出力する。同様に、論理否定算出部６２２は、符号情報から浮動小数点数Ａおよび浮動小数点数Ｂが異符号かつ浮動小数点数Ｂが負の値と判断された場合に、仮数ビットＢＬの論理否定を算出し、加算器６２３および加算器６２４へ出力する。また、論理否定算出部６２２は、符号情報から浮動小数点数Ａおよび浮動小数点数Ｂが同符号あるいは浮動小数点数Ｂが正の値と判断された場合は、仮数ビットＢＬをそのまま加算器６２３および加算器６２４へ出力する。
【００４４】
ここで、２進数における負の値の加算（すなわち減算）は、２の補数表現における次式（１）を用いることにより、正の値の加算に変換することができる。ただし、式（１）において、Ｐは所望の２進数を示し、！ＰはＰの論理否定を示す。
−Ｐ＝！Ｐ＋１  …（１）
【００４５】
したがって、浮動小数点数Ａまたは浮動小数点数Ｂが負の値の場合には、論理否定算出部６２１または論理否定算出部６２２が下位ビットＡＬまたは仮数ビットＢＬの論理否定を算出しておく。
【００４６】
加算器６２３は、最下位ビットへのキャリーインとして０が入力されており、キャリーインを０として論理否定算出部６２１からの出力と論理否定算出部６２２からの出力とを加算し、加算結果を出力部６２６への入力ｚとする。したがって、入力ｚは、ＡＬ（または！ＡＬ）＋ＢＬ（または！ＢＬ）となる。また、加算器６２３は、加算過程におけるキャリーアウトＣＯ＿０を出力選択部６３０へ出力する。
【００４７】
加算器６２４は、最下位ビットへのキャリーインとして１が入力されており、キャリーインを１として論理否定算出部６２１からの出力と論理否定算出部６２２からの出力とを加算し、加算結果を出力部６２６への入力ｘとする。したがって、入力ｘは、ＡＬ（または！ＡＬ）＋ＢＬ（または！ＢＬ）＋１となる。加算器６２４におけるキャリーインの１は、上式（１）の右辺の＋１に対応している。したがって、加算器６２４が例えばＡＬ＋！ＢＬ＋１を演算する場合には、ＡＬ−ＢＬが演算されたことに他ならない（ただし結果が正になるときに限る）。また、加算器６２４は、加算過程におけるキャリーアウトＣＯ＿１を出力選択部６３０へ出力する。
【００４８】
インバータ６２５は、加算器６２３の加算結果を反転し、論理否定を出力部６２６への入力ｙとする。したがって、入力ｙは、！（ＡＬ（または！ＡＬ）＋ＢＬ（または！ＢＬ））となる。ここで、例えばＡＬ−ＢＬが演算される場合、結果が負になるときは、絶対値加算結果として−（ＡＬ−ＢＬ）が必要となる。このとき、上式（１）を用いて−（ＡＬ−ＢＬ）を変形すると、次式（２）のようになる。
−（ＡＬ−ＢＬ）＝−（ＡＬ＋！ＢＬ＋１）
＝−（ＡＬ＋！ＢＬ）−１
＝！（ＡＬ＋！ＢＬ）＋１−１
＝！（ＡＬ＋！ＢＬ）          …（２）
【００４９】
つまり、インバータ６２５は、−（ＡＬ−ＢＬ）として、！（ＡＬ＋！ＢＬ）もしくは！（！ＡＬ＋ＢＬ）を得るために設けられている。出力部６２６は、出力選択部６３０からの指示に従って、入力ｘ、ｙ、ｚのうちいずれか１つを下位ビットの演算結果ＳＬとして出力する。
【００５０】
出力選択部６３０は、上位ビット情報ＡＨ＿０、符号情報、キャリーアウトＣＯ＿０、およびキャリーアウトＣＯ＿１に基づいて、上位演算部６１０における演算結果ＳＨを出力部６１４への入力Ｘ、Ｙ、Ｚから選択するとともに、下位演算部６２０における演算結果ＳＬを出力部６２６への入力ｘ、ｙ、ｚから選択する。具体的には、出力選択部６３０は、図４に示す表に従って、演算結果ＳＨおよび演算結果ＳＬを選択する。図４に示す表において、斜線部分については、０および１のいずれでも良いことを示している。
【００５１】
図４におけるキャリーアウトＣＯ＿１は、加算器６２４による加算結果の正負を示している。すなわち、加算器６２４による加算結果が０以上であれば、加算器６２４において桁上げが発生する、換言すればキャリーアウトＣＯ＿１が１となり、加算器６２４による加算結果が負であれば、加算器６２４において桁上げが発生しない、換言すればキャリーアウトＣＯ＿１が０となる。
【００５２】
図４における上位ビット情報ＡＨ＿０は、上位ビットＡＨが０であるか否かを示している。すなわち、浮動小数点数Ａの指数ビットの値と浮動小数点数Ｂの指数ビットの値とが等しく、浮動小数点数Ａの桁数が浮動小数点数Ｂの桁数以下であれば、上位ビットＡＨは０となり、上位ビット情報ＡＨ＿０は１となる。一方、浮動小数点数Ａの桁数が浮動小数点数Ｂの桁数を超えていれば、上位ビットＡＨは０となることはなく、上位ビット情報ＡＨ＿０は０となる。
【００５３】
図４におけるキャリーアウトＣＯ＿０は、加算器６２３による加算結果に桁上げが発生するか否かを示している。すなわち、加算器６２３において桁上げが発生すれば、キャリーアウトＣＯ＿０が１となり、加算器６２３において桁上げが発生しなければ、キャリーアウトＣＯ＿０が０となる。
【００５４】
このような図４においては、Ａ＋Ｂ（−Ａ−Ｂを含む）、−Ａ＋Ｂ、およびＡ−Ｂの３種類の演算が網羅されている。これらのうち、Ａ＋Ｂの演算においては、下位ビットＡＬと仮数ビットＢＬの演算において桁上げが発生するか否かによって、上位ビットＡＨをそのままにするか桁上げ分の１を加算するかが決定される。すなわち、下位ビットＡＬと仮数ビットＢＬの加算に桁上げが発生しない場合は、上位ビットＡＨはそのままとなり、下位ビットＡＬと仮数ビットＢＬの加算に桁上げが発生する場合は、上位ビットＡＨに１が加算される。
【００５５】
また、−Ａ＋ＢおよびＡ−Ｂの演算においては、下位ビットＡＬと仮数ビットＢＬの大小関係および上位ビットＡＨが０か否かによって、上位ビットＡＨをそのままにするか桁下げ分の−１を加算するかが決定される。すなわち、下位ビットＡＬが仮数ビットＢＬより小さく（ＡＬ＜ＢＬ）、かつ、上位ビットＡＨが０ではない場合は、下位ビットＡＬから仮数ビットＢＬが減算される際に上位ビットＡＨからのボローが発生し、上位ビットに−１が加算される。また、下位ビットＡＬが仮数ビットＢＬ以上（ＡＬ≧ＢＬ）かまたは上位ビットＡＨが０の場合は、下位ビットＡＬから仮数ビットＢＬが減算される際に上位ビットＡＨからのボローが発生することはなく、上位ビットＡＨはそのままとなる。
【００５６】
次いで、図４に示す表について、より具体的に説明する。
【００５７】
図４に示す表において、浮動小数点数Ａと浮動小数点数Ｂが同符号の場合（すなわちＡ＋Ｂの場合）、絶対値加算部６００は、通常の加算を行えば良いため、下位ビットについては、キャリーインが０の加算器６２３からの加算結果が選択される。すなわち、下位ビットの演算結果ＳＬは、出力部６２６の入力ｚとなる。また、加算器６２３による加算過程で桁上げが発生しなければキャリーアウトＣＯ＿０は０となり、上位ビットについては、＋０演算器６１３からの出力が選択される。すなわち、上位ビットの演算結果ＳＨは、出力部６１４の入力Ｚとなる。一方、加算器６２３による加算過程で桁上げが発生すればキャリーアウトＣＯ＿０は１となり、上位ビットについては、＋１演算器６１１からの出力が選択される。すなわち、上位ビットの演算結果ＳＨは、出力部６１４の入力Ｘとなる。
【００５８】
次に、浮動小数点数Ａが負の値かつ浮動小数点数Ｂが正の値である場合（すなわち−Ａ＋Ｂの場合）、下位ビットについては、−ＡＬ＋ＢＬが演算されることになる。このとき、浮動小数点数Ａが負であるため、論理否定算出部６２１からは下位ビットＡＬの論理否定！ＡＬが出力され、加算器６２３および加算器６２４における演算とインバータ６２５とにより、出力部６２６の入力ｘ、ｙ、ｚは、それぞれ以下の式（３）のようになる。
ｘ＝！ＡＬ＋ＢＬ＋１
ｙ＝！（！ＡＬ＋ＢＬ）  …（３）
ｚ＝！ＡＬ＋ＢＬ
【００５９】
ここで、加算器６２４のキャリーアウトＣＯ＿１が０の場合、−ＡＬ＋ＢＬが負であることになり、絶対値加算結果は−（−ＡＬ＋ＢＬ）となる。このため、上式（２）と同様に、−（−ＡＬ＋ＢＬ）を次式（４）のように変形する。
−（−ＡＬ＋ＢＬ）＝！（！ＡＬ＋ＢＬ）  …（４）
【００６０】
これは、上式（３）における入力ｙに等しく、下位ビットの演算結果ＳＬは、出力部６２６の入力ｙとなる。また、このとき、−ＡＬ＋ＢＬが負であることから、ＡＬ＞ＢＬなる関係が成立し、上位ビットＡＨからのボローが発生することはなく、上位ビットの演算結果ＳＨは、出力部６１４の入力Ｚとなる。
【００６１】
一方、加算器６２４のキャリーアウトＣＯ＿１が１の場合、−ＡＬ＋ＢＬが０以上であることになるが、特に加算器６２３のキャリーアウトＣＯ＿０が０となるケースに着目すると、加算器６２３の加算（上式（３）におけるｚ）においては桁上げが発生せず、加算器６２４の加算（上式（３）におけるｘ）においては桁上げが発生している。これは、加算器６２４におけるキャリーインの１が伝播して桁上げが発生していることを意味しているため、加算器６２３における加算結果！ＡＬ＋ＢＬ（＝ｚ）は、すべて１からなるビット列であることがわかる。すなわち、下位ビットＡＬの論理否定！ＡＬと仮数ビットＢＬとが互いに論理否定の関係にあることになり、これは下位ビットＡＬと仮数ビットＢＬが等しいことを意味している。このため、下位ビットの演算結果ＳＬ（＝−ＡＬ＋ＢＬ）は０であり、すべて１からなる加算器６２３の加算結果がインバータ６２５によって反転された入力ｙが選択される。このとき、−ＡＬ＋ＢＬが０であることから、上位ビットＡＨからのボローが発生することはなく、上位ビットの演算結果ＳＨは、出力部６１４の入力Ｚとなる。
【００６２】
また、加算器６２４のキャリーアウトＣＯ＿１が１かつ加算器６２３のキャリーアウトＣＯ＿０が１となるケースでは、−ＡＬ＋ＢＬが正であることから、ＡＬ＜ＢＬなる関係が成立し、上位ビットＡＨからのボローが発生する可能性がある。具体的には、上位ビットＡＨが０でない、すなわち上位ビット情報ＡＨ＿０が０ならば、ボローが発生することになる。ボローが発生する場合は、−ＡＬ＋ＢＬが正であっても、実質的には上位ビットＡＨからの桁下げによって下位ビットＡＬの方が仮数ビットＢＬよりも大きくなり、−ＡＬ＋ＢＬが負となる場合の演算と同様になる。したがって、下位ビットの演算結果ＳＬは、出力部６２６の入力ｙとなる。このとき、上位ビットＡＨからのボローが発生しているため、上位ビットの演算結果ＳＨは、出力部６１４の入力Ｙとなる。
【００６３】
さらに、上位ビットＡＨが０である、すなわち上位ビット情報ＡＨ＿０が１ならば、浮動小数点数Ａの桁数が浮動小数点数Ｂの桁数以下であることを意味しており、ボローは発生しない。ボローが発生しない場合は、−ＡＬ＋ＢＬが正であることから、単純にＢＬ−ＡＬの減算を行えば良い。したがって、下位ビットの演算結果ＳＬは、出力部６２６の入力ｘとなる。このとき、上位ビットＡＨからのボローが発生していないため、上位ビットの演算結果ＳＨは、出力部６１４の入力Ｚとなる。
【００６４】
次に、浮動小数点数Ａが正の値かつ浮動小数点数Ｂが負の値である場合（すなわちＡ−Ｂの場合）、下位ビットについては、ＡＬ−ＢＬが演算されることになる。このとき、浮動小数点数Ｂが負であるため、論理否定算出部６２２からは仮数ビットＢＬの論理否定！ＢＬが出力され、加算器６２３および加算器６２４における演算とインバータ６２５とにより、出力部６２６の入力ｘ、ｙ、ｚは、それぞれ以下の式（５）のようになる。
ｘ＝ＡＬ＋！ＢＬ＋１
ｙ＝！（ＡＬ＋！ＢＬ）  …（５）
ｚ＝ＡＬ＋！ＢＬ
【００６５】
ここで、加算器６２４のキャリーアウトＣＯ＿１が１の場合、ＡＬ−ＢＬが０以上であることになり、単純にＡＬ−ＢＬの減算を行えば良い。したがって、下位ビットの演算結果ＳＬは、出力部６２６の入力ｘとなる。このとき、ＡＬ−ＢＬが正であることから、ＡＬ＞ＢＬなる関係が成立し、上位ビットＡＨからのボローが発生することはなく、上位ビットの演算結果ＳＨは、出力部６１４の入力Ｚとなる。
【００６６】
一方、加算器６２４のキャリーアウトＣＯ＿１が０の場合、ＡＬ−ＢＬが負であることから、ＡＬ＜ＢＬなる関係が成立し、上位ビットＡＨからのボローが発生する可能性がある。具体的には、上位ビットＡＨが０でない、すなわち上位ビット情報ＡＨ＿０が０ならば、ボローが発生することになる。ボローが発生する場合は、ＡＬ−ＢＬが負であっても、実質的には上位ビットＡＨからの桁下げによって下位ビットＡＬの方が仮数ビットＢＬよりも大きくなり、ＡＬ−ＢＬが０以上の場合の演算と同様になる。したがって、下位ビットの演算結果ＳＬは、出力部６２６の入力ｘとなる。このとき、上位ビットＡＨからのボローが発生しているため、上位ビットの演算結果ＳＨは、出力部６１４の入力Ｙとなる。
【００６７】
さらに、上位ビットＡＨが０である、すなわち上位ビット情報ＡＨ＿０が１ならば、浮動小数点数Ａの桁数が浮動小数点数Ｂの桁数以下であることを意味しており、ボローは発生しない。ボローが発生しない場合は、ＡＬ−ＢＬが負であることから、絶対値加算結果は−（ＡＬ−ＢＬ）となる。これは、上式（２）によって、上式（５）における入力ｙに等しいことがわかり、下位ビットの演算結果ＳＬは、出力部６２６の入力ｙとなる。また、このとき、上位ビットＡＨからのボローが発生していないため、上位ビットの演算結果ＳＨは、出力部６１４の入力Ｚとなる。
【００６８】
このように、出力選択部６３０が図４に示す表に従って、出力部６１４からの演算結果ＳＨおよび出力部６２６からの演算結果ＳＬを選択することにより、浮動小数点数Ａおよび浮動小数点数Ｂの絶対値加算結果が得られることになる。このとき、上位ビットＡＨに関する演算を下位ビットＡＬおよび仮数ビットＢＬに関する演算と分けたことにより、下位演算部６２０における加算器６２３および加算器６２４は、下位ビットＡＬおよび仮数ビットＢＬのビット幅に対応したもので十分であるとともに、上位ビットＡＨに関して０と加算するために設けられていた回路を削減することができる。加えて、本実施の形態において上位ビットＡＨの演算に関して付加される回路は、非常に簡易な構成であるため、絶対値加算部６００の回路規模を削減することができる。
【００６９】
また、上位ビットＡＨについては、あらかじめ桁上げが発生する場合、桁下げが発生する場合、および桁上げおよび桁下げのいずれも発生しない場合に関する演算を行っておき、下位演算部６２０による演算の過程で適切な上位ビットの演算結果ＳＨを選択する。このため、下位演算部６２０による下位ビットＡＬおよび仮数ビットＢＬの演算が終了すれば、改めて上位ビットＡＨに関する演算を行う必要がなく、実質的には浮動小数点数Ａの仮数ビットよりも小さいビット幅の演算に要する時間だけで浮動小数点数Ａの仮数ビットおよび浮動小数点数Ｂの仮数ビットの絶対値加算が完了する。
【００７０】
以上のように、本実施の形態によれば、ビット幅が異なる２つの数の演算を行う場合に、ビット幅が大きい数を上位ビットと下位ビットに分割し、上位ビットについては、下位ビットの演算からの桁上げおよび桁下げを想定した演算をあらかじめ行っておき、下位ビットに関する演算の過程で適切な上位ビットの演算結果を選択する。このため、下位ビットの演算に要する時間のみで演算が完了し、さらなる処理時間の短縮を図ることができるとともに、上位ビットに関する加算を行うための回路が不要となり、回路規模を削減することができる。
【産業上の利用可能性】
【００７１】
本発明は、ビット幅が異なる２つの数の演算を行う場合に、さらなる処理時間の短縮を図り、回路規模を削減する場合に適用することができる。
【図面の簡単な説明】
【００７２】
【図１】図１は、本発明の一実施の形態に係る浮動小数点数演算装置の概略構成を示すブロック図である。
【図２】図２は、一実施の形態に係る浮動小数点数の一例を示す図である。
【図３】図３は、一実施の形態に係る絶対値加算部の内部構成を示すブロック図である。
【図４】図４は、一実施の形態に係る絶対値加算部の演算結果の選択を示す図である。
【符号の説明】
【００７３】
１００、２００  分割部
３００  指数差計算部
４００  符号判定部
５００  上下位分割部
６００  絶対値加算部
６１０  上位演算部
６１１  ＋１演算器
６１２  −１演算器
６１３  ＋０演算器
６１４  出力部
６２０  下位演算部
６２１、６２２  論理否定算出部
６２３、６２４  加算器
６２５  インバータ
６２６  出力部
６３０  出力選択部
７００  正規化シフト部
８００  演算部
【図１】
0004500358.tif 000002
【図２】
0004500358.tif 000003
【図３】
0004500358.tif 000004
【図４】
0004500358.tif 000005