(57)【特許請求の範囲】
【請求項１】
２の補数で表現された固定小数点数である被乗数と、２の補数で表現されたＮ＋１（Ｎは２以上の整数）ビットの固定小数点数である乗数との乗算による積を求める乗算装置であって、
前記乗数を２次のブースのアルゴリズムに基づいてエンコードし、得られた複数のエンコード結果を出力するエンコード部と、
前記被乗数と前記乗数とが共に負の最大値である場合に、オーバーフローが発生することを検出するオーバーフロー検出部と、
前記被乗数と前記複数のエンコード結果のそれぞれとの間の複数の部分積と、前記複数の部分積のそれぞれに対応し、対応する部分積に加算してその部分積の２の補数を得るための複数の補正項とを生成して出力する部分積生成部と、
前記複数の部分積及び前記複数の補正項の累算を行い、２つの中間積に圧縮して出力する累算部と、
前記２つの中間積の加算を行い、その結果を乗算結果として出力する最終加算部とを備え、
前記部分積生成部は、
前記複数のエンコード結果のうちの最上位及び最下位以外のエンコード結果のそれぞれを入力とし、前記被乗数と入力されたエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、入力されたエンコード結果に対応する最上位及び最下位以外の部分積及び補正項を生成する複数の第１の部分積生成回路と、
前記被乗数と前記複数のエンコード結果のうちの最上位のエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、最上位の部分積及び補正項を生成する第２の部分積生成回路と、
前記被乗数と前記複数のエンコード結果のうちの最下位のエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、最下位の部分積及び補正項を生成する第３の部分積生成回路とを有するものであり、
前記第２の部分積生成回路は、
前記オーバーフロー検出部によってオーバーフローが発生することが検出された場合には、前記最上位の補正項として０を出力するものであり、
前記第３の部分積生成回路は、
前記被乗数及び選択信号に応じて前記最下位の部分積のうちの１ビットをそれぞれ生成する複数の選択回路と、
エンコード結果補正部とを有するものであり、
前記複数の選択回路のうち、前記最下位の部分積の下位Ｎ−１ビットを出力するＮ−１個の選択回路には前記エンコード結果補正部の出力が、その他の選択回路には前記最下位のエンコード結果が、前記選択信号として与えられており、
前記エンコード結果補正部は、
前記オーバーフロー検出部によってオーバーフローが発生することが検出された場合には、当該エンコード結果補正部の出力が与えられる選択回路から１が出力されるような値を出力し、その他の場合には、前記最下位のエンコード結果を出力するものである
ことを特徴とする乗算装置。
【請求項２】
２の補数で表現された固定小数点数である被乗数と、２の補数で表現されたＮ＋１（Ｎは２以上の整数）ビットの固定小数点数である乗数との乗算による積を求める乗算装置であって、
前記乗数を２次のブースのアルゴリズムに基づいてエンコードし、得られた複数のエンコード結果を出力するエンコード部と、
前記被乗数と前記乗数とが共に負の最大値である場合に、オーバーフローが発生することを検出するオーバーフロー検出部と、
前記被乗数と前記複数のエンコード結果のそれぞれとの間の複数の部分積と、前記複数の部分積のそれぞれに対応し、対応する部分積に加算してその部分積の２の補数を得るための複数の補正項とを生成して出力する部分積生成部と、
前記複数の部分積及び前記複数の補正項の累算を行い、２つの中間積に圧縮して出力する累算部と、
前記２つの中間積の加算を行い、その結果を乗算結果として出力する最終加算部とを備え、
前記部分積生成部は、
前記複数のエンコード結果のうちの最上位及び最下位以外のエンコード結果のそれぞれを入力とし、前記被乗数と入力されたエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、入力されたエンコード結果に対応する最上位及び最下位以外の部分積及び補正項を生成する複数の第１の部分積生成回路と、
前記被乗数と前記複数のエンコード結果のうちの最上位のエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、最上位の部分積及び補正項を生成する第２の部分積生成回路と、
前記被乗数と前記複数のエンコード結果のうちの最下位のエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、最下位の部分積及び補正項を生成する第３の部分積生成回路とを有するものであり、
前記第２の部分積生成回路は、
前記オーバーフロー検出部によってオーバーフローが発生することが検出された場合には、前記最上位の補正項として０を出力するものであり、
前記第３の部分積生成回路は、
前記被乗数及び選択信号に応じて前記最下位の部分積のうちの１ビットをそれぞれ生成する複数の選択回路と、
前記複数の選択回路のうち、前記最下位の部分積の下位Ｎ−１ビットを出力するＮ−１個の選択回路のそれぞれに対応するＮ−１個の飽和処理回路とを有するものであり、
前記複数の選択回路は、それぞれ、
前記最下位のエンコード結果を前記選択信号として用いるものであり、
前記Ｎ−１個の飽和処理回路は、それぞれ、
前記オーバーフロー検出部によってオーバーフローが発生することが検出された場合には、前記複数の選択回路のうち、対応する選択回路の出力を１に補正して出力し、その他の場合には、前記対応する選択回路の出力をそのまま出力させるものである
ことを特徴とする乗算装置。
【請求項３】
２の補数で表現された固定小数点数である被乗数と、２の補数で表現された固定小数点数である乗数との乗算による積を求める乗算装置であって、
前記乗数を２次のブースのアルゴリズムに基づいてエンコードし、得られた複数のエンコード結果を出力するエンコード部と、
前記被乗数と前記乗数とが共に負の最大値である場合に、オーバーフローが発生することを検出するオーバーフロー検出部と、
前記被乗数と前記複数のエンコード結果のそれぞれとの間の複数の部分積と、前記複数の部分積のそれぞれに対応し、対応する部分積に加算してその部分積の２の補数を得るための複数の補正項とを生成して出力する部分積生成部と、
前記複数の部分積及び前記複数の補正項の累算を行い、２つの中間積に圧縮して出力する累算部と、
前記２つの中間積の加算を行い、その結果を乗算結果として出力する最終加算部とを備え、
前記部分積生成部は、
前記複数のエンコード結果のうちの最上位以外のエンコード結果のそれぞれを入力とし、前記被乗数と入力されたエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、入力されたエンコード結果に対応する最上位以外の部分積及び補正項を生成する複数の第１の部分積生成回路と、
前記被乗数と前記複数のエンコード結果のうちの最上位のエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、最上位の部分積及び補正項を生成する第２の部分積生成回路とを有するものであり、
前記複数の第１の部分積生成回路は、それぞれ、
対応するエンコード結果に従って選択された１ビットの値と前記オーバーフロー検出部によるオーバーフローの検出結果との論理和を、対応する２ビットの補正項の下位ビットとして、前記オーバーフロー検出部によるオーバーフローの検出結果を、前記対応する２ビットの補正項の上位ビットとして出力するものであり、
前記第２の部分積生成回路は、
前記オーバーフロー検出部によってオーバーフローが発生することが検出された場合には、前記最上位の補正項として０を出力するものである
ことを特徴とする乗算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乗算を行う装置に関し、特に固定小数点数の乗算を行う装置に関する。
【背景技術】
【０００２】
ディジタル演算処理を行うＬＳＩには、乗算装置がオンチップ化されることが一般的になっている。高精度な演算が要求される音声やマルチメディア等の処理では、固定小数点数で演算が行われ、乗算の結果がオーバーフローする場合には飽和処理を行うことが要求される。固定小数点数の乗算では、被乗数と乗数とが共に負の最大値である場合のみ、乗算結果がオーバーフローする。この場合は乗算結果を正の最大値に補正する必要がある。ここで負の最大値とは、その絶対値が最大である負の数である。
【０００３】
図１５は、従来の乗算装置の構成の例を示すブロック図である。この乗算装置では、乗算の際に、オーバーフロー検出部９１４が、被乗数と乗数とが共に負の最大値である場合にはオーバーフローを検出する。出力セレクタ９２６が、オーバーフローが検出された場合には飽和値(正の最大値)を選択し、それ以外の場合には最終加算部９２４の出力を選択することにより、乗算結果がオーバーフローした時の補正を行っている（例えば、特許文献１参照）。
【特許文献１】特開平１−２６７７２８号公報（第３図）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
図１５のような乗算装置では、オーバーフロー検出結果に基づいて、最終加算の結果と飽和値とから一方を選択をするためには、各ビットについてセレクタが必要である。Ｍ＋１ビットの被乗数ＡとＮ＋１ビットの乗数Ｂとの乗算では（Ｍ，Ｎは、２以上の整数）、被乗数Ａ及び乗数Ｂが符号付きの数であるとき、乗算結果はＭ＋Ｎ＋１ビットとなる。このため、出力セレクタとしてＭ＋Ｎ＋１個のセレクタが必要であり、オーバーフロー処理のために回路規模が増大するという問題があった。
【０００５】
本発明は、乗算を行う装置において、オーバーフロー処理のための回路規模を小さくすることを目的とする。
【課題を解決するための手段】
【０００６】
本発明に係る乗算装置は、２の補数で表現された固定小数点数である被乗数と、２の補数で表現されたＮ＋１（Ｎは２以上の整数）ビットの固定小数点数である乗数との乗算による積を求める乗算装置であって、前記乗数を２次のブースのアルゴリズムに基づいてエンコードし、得られた複数のエンコード結果を出力するエンコード部と、前記被乗数と前記乗数とが共に負の最大値である場合に、オーバーフローが発生することを検出するオーバーフロー検出部と、前記被乗数と前記複数のエンコード結果のそれぞれとの間の複数の部分積と、前記複数の部分積のそれぞれに対応し、対応する部分積に加算してその部分積の２の補数を得るための複数の補正項とを生成して出力する部分積生成部と、前記複数の部分積及び前記複数の補正項の累算を行い、２つの中間積に圧縮して出力する累算部と、前記２つの中間積の加算を行い、その結果を乗算結果として出力する最終加算部とを備える。前記部分積生成部は、前記複数のエンコード結果のうちの最上位及び最下位以外のエンコード結果のそれぞれを入力とし、前記被乗数と入力されたエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、入力されたエンコード結果に対応する最上位及び最下位以外の部分積及び補正項を生成する複数の第１の部分積生成回路と、前記被乗数と前記複数のエンコード結果のうちの最上位のエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、最上位の部分積及び補正項を生成する第２の部分積生成回路と、前記被乗数と前記複数のエンコード結果のうちの最下位のエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、最下位の部分積及び補正項を生成する第３の部分積生成回路とを有する。前記第２の部分積生成回路は、前記オーバーフロー検出部によってオーバーフローが発生することが検出された場合には、前記最上位の補正項として０を出力する。前記第３の部分積生成回路は、前記被乗数及び選択信号に応じて前記最下位の部分積のうちの１ビットをそれぞれ生成する複数の選択回路と、エンコード結果補正部とを有するものであり、前記複数の選択回路のうち、前記最下位の部分積の下位Ｎ−１ビットを出力するＮ−１個の選択回路には前記エンコード結果補正部の出力が、その他の選択回路には前記最下位のエンコード結果が、前記選択信号として与えられており、前記エンコード結果補正部は、前記オーバーフロー検出部によってオーバーフローが発生することが検出された場合には、当該エンコード結果補正部の出力が与えられる選択回路から１が出力されるような値を出力し、その他の場合には、前記最下位のエンコード結果を出力する。
【０００７】
これによると、被乗数と乗数とが共に負の最大値であり、オーバーフローの発生が検出された場合に、部分積生成部の出力を補正して、乗算結果が正の最大値になるようにすることができる。オーバーフローが発生する場合においても、求められた乗算結果に対しては処理を行う必要がないので、オーバーフロー処理のために要する回路の規模を小さくすることができる。
【０００８】
オーバーフローの発生が検出された場合には、最上位の補正項として０を出力するようにし、最下位の部分積の下位Ｎ−１ビットのそれぞれとして１を出力するようにして、乗算結果が正の最大値になるようにすることができるので、オーバーフロー処理のために要する回路の規模を小さくすることができる。
【０００９】
第３の部分積生成回路においては、オーバーフローが発生することが検出された場合にエンコードの結果を補正するためのエンコード結果補正部を追加するのみでよい。
【００１０】
本発明に係る他の乗算装置は、２の補数で表現された固定小数点数である被乗数と、２の補数で表現されたＮ＋１（Ｎは２以上の整数）ビットの固定小数点数である乗数との乗算による積を求める乗算装置であって、前記乗数を２次のブースのアルゴリズムに基づいてエンコードし、得られた複数のエンコード結果を出力するエンコード部と、前記被乗数と前記乗数とが共に負の最大値である場合に、オーバーフローが発生することを検出するオーバーフロー検出部と、前記被乗数と前記複数のエンコード結果のそれぞれとの間の複数の部分積と、前記複数の部分積のそれぞれに対応し、対応する部分積に加算してその部分積の２の補数を得るための複数の補正項とを生成して出力する部分積生成部と、前記複数の部分積及び前記複数の補正項の累算を行い、２つの中間積に圧縮して出力する累算部と、前記２つの中間積の加算を行い、その結果を乗算結果として出力する最終加算部とを備える。前記部分積生成部は、前記複数のエンコード結果のうちの最上位及び最下位以外のエンコード結果のそれぞれを入力とし、前記被乗数と入力されたエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、入力されたエンコード結果に対応する最上位及び最下位以外の部分積及び補正項を生成する複数の第１の部分積生成回路と、前記被乗数と前記複数のエンコード結果のうちの最上位のエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、最上位の部分積及び補正項を生成する第２の部分積生成回路と、前記被乗数と前記複数のエンコード結果のうちの最下位のエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、最下位の部分積及び補正項を生成する第３の部分積生成回路とを有する。前記第２の部分積生成回路は、前記オーバーフロー検出部によってオーバーフローが発生することが検出された場合には、前記最上位の補正項として０を出力する。前記第３の部分積生成回路は、前記被乗数及び選択信号に応じて前記最下位の部分積のうちの１ビットをそれぞれ生成する複数の選択回路と、前記複数の選択回路のうち、前記最下位の部分積の下位Ｎ−１ビットを出力するＮ−１個の選択回路のそれぞれに対応するＮ−１個の飽和処理回路とを有するものであり、前記複数の選択回路は、それぞれ、前記最下位のエンコード結果を前記選択信号として用いるものであり、前記Ｎ−１個の飽和処理回路は、それぞれ、前記オーバーフロー検出部によってオーバーフローが発生することが検出された場合には、前記複数の選択回路のうち、対応する選択回路の出力を１に補正して出力し、その他の場合には、前記対応する選択回路の出力をそのまま出力させるものである。
【００１１】
これによると、第３の部分積生成回路においては、オーバーフローが発生することが検出された場合に最下位の部分積を補正するためのＮ−１個の飽和処理回路を追加するのみでよい。
【００１２】
本発明に係る更に他の乗算装置は、２の補数で表現された固定小数点数である被乗数と、２の補数で表現された固定小数点数である乗数との乗算による積を求める乗算装置であって、前記乗数を２次のブースのアルゴリズムに基づいてエンコードし、得られた複数のエンコード結果を出力するエンコード部と、前記被乗数と前記乗数とが共に負の最大値である場合に、オーバーフローが発生することを検出するオーバーフロー検出部と、前記被乗数と前記複数のエンコード結果のそれぞれとの間の複数の部分積と、前記複数の部分積のそれぞれに対応し、対応する部分積に加算してその部分積の２の補数を得るための複数の補正項とを生成して出力する部分積生成部と、前記複数の部分積及び前記複数の補正項の累算を行い、２つの中間積に圧縮して出力する累算部と、前記２つの中間積の加算を行い、その結果を乗算結果として出力する最終加算部とを備える。前記部分積生成部は、前記複数のエンコード結果のうちの最上位以外のエンコード結果のそれぞれを入力とし、前記被乗数と入力されたエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、入力されたエンコード結果に対応する最上位以外の部分積及び補正項を生成する複数の第１の部分積生成回路と、前記被乗数と前記複数のエンコード結果のうちの最上位のエンコード結果との間で、前記複数の部分積及び前記複数の補正項のうち、最上位の部分積及び補正項を生成する第２の部分積生成回路とを有する。前記複数の第１の部分積生成回路は、それぞれ、対応するエンコード結果に従って選択された１ビットの値と前記オーバーフロー検出部によるオーバーフローの検出結果との論理和を、対応する２ビットの補正項の下位ビットとして、前記オーバーフロー検出部によるオーバーフローの検出結果を、前記対応する２ビットの補正項の上位ビットとして出力する。前記第２の部分積生成回路は、前記オーバーフロー検出部によってオーバーフローが発生することが検出された場合には、前記最上位の補正項として０を出力する。
【００１３】
これによると、オーバーフローが発生することが検出された場合に、最上位の補正項として０を出力するようにし、最上位以外の補正項として２進数１１を出力するようにして、乗算結果が正の最大値になるようにすることができる。２次のブースのアルゴリズムに基づいてＮ＋１ビットの乗数をエンコードする場合、補正項の個数は（Ｎ＋１）／２個なので、補正項を補正するための回路が（Ｎ＋１）／２個必要となるが、従来の構成に比べてオーバーフロー処理のために要する回路の規模を小さくすることが可能になる。
【発明の効果】
【００１４】
以上のように、本発明によれば、固定小数点数の乗算結果がオーバーフローする場合の処理を行う回路の規模を小さくすることができる。したがって、回路面積を抑え、回路の低コスト化を図ることができる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００１６】
（第１の実施形態）
以下では、Ｍ＋１ビットの被乗数ＡとＮ＋１ビットの乗数Ｂとの乗算をする場合について説明する（Ｍ，Ｎは、２以上の整数）。ここで、被乗数Ａ及び乗数Ｂは２の補数で表現された符号付きの固定小数点数であり、その最上位ビットの右側に小数点が存在するとし、最上位ビットは正又は負の符号を示すとする。この固定小数点形式では、正の最大値は、０．９９…９（各ビットの値は、“０１１…１１”）であり、負の最大値は、その絶対値が最大である負の数であって、−１.００…０（各ビットの値は、“１００…００”）である。
【００１７】
図１は、本発明の第１の実施形態に係る乗算装置の構成を示すブロック図である。図１の乗算装置は、エンコード部１２と、オーバーフロー検出部１４と、部分積生成部１６と、累算部２２と、最終加算部２４とを備えている。
【００１８】
エンコード部１２は、Ｎ＋１ビットの乗数Ｂを２次のブース（Booth）のアルゴリズムに基づいてエンコードし、得られたブースエンコード結果ＢＥ＿０，ＢＥ＿１，…，ＢＥ＿Ｌを部分積生成部１６に出力する。ブースエンコード結果ＢＥ＿０，ＢＥ＿Ｌは、それぞれ最下位及び最上位のブースエンコード結果である。
【００１９】
オーバーフロー検出部１４は、被乗数Ａと乗数Ｂとが共に負の最大値であるときに、オーバーフローの発生を検出し、その結果をオーバーフロー検出結果ＯＤとして部分積生成部１６に出力する。
【００２０】
部分積生成部１６は、被乗数Ａとブースエンコード結果ＢＥ＿０，ＢＥ＿１，…，ＢＥ＿Ｌのそれぞれとの間の複数の部分積、及びこれらの部分積に対応する補正項を生成して、累算部２２に出力する。部分積生成部１６は、オーバーフロー検出部１４がオーバーフローの発生を検出した場合には、乗算結果が正の最大値になるように、これらの複数の部分積及び補正項のうちのいずれかを補正して出力する。累算部２２は、生成された複数の部分積及び補正項の累算を行い、２つの中間積に圧縮して最終加算部２４に出力する。最終加算部２４は、２つの中間積の加算を行い、求められた乗算結果を出力する。
【００２１】
部分積生成部１６は、最上位及び最下位以外の部分積、及びこれらの部分積に対応する補正項を生成する複数の第１の部分積生成回路１４０と、最上位の部分積及び補正項を生成する第２の部分積生成回路１６０と、最下位の部分積及び補正項を生成する第３の部分積生成回路１８０とを備えている。ここでいう部分積は、２の補数を得るために補正項が加算される前の部分積である。補正項は、対応する部分積の２の補数を得るために、この部分積に加算される数である。
【００２２】
図２は、第１の実施形態における第１の部分積生成回路１４０の構成を示す回路図である。図２の部分積生成回路１４０は、最上位及び最下位以外のブースエンコード結果ＢＥ＿１，ＢＥ＿２，…，ＢＥ＿Ｌ−１のうちの１つ（ＢＥ＿ｋと表記する）に基づいて、部分積ＰＢと、補正項ＣＢとを求めて出力する。部分積生成回路１４０は、部分積ＰＢのうちの最上位ビット以外を生成するＭ＋１個の選択回路１４２と、部分積ＰＢの最上位ビットを生成する選択回路１４４と、補正項生成回路１４６とを備えている。
【００２３】
これらの選択回路１４２，１４４は、全体として、ブースエンコード結果ＢＥ＿ｋが１の場合は被乗数Ａを、２の場合は被乗数Ａを１ビット左シフトさせた値を、−１の場合は被乗数Ａの各ビットを論理反転させた値を、−２の場合は被乗数Ａを１ビット左シフトさせた値の各ビットを論理反転させた値を、０の場合は“０”を、選択して出力する。補正項生成回路１４６は、ブースエンコード結果ＢＥ＿ｋが正又は０の場合は“０”を、負の場合は“１”を、２の補数の補正項ＣＢとして選択して出力する。
【００２４】
図３は、第１の実施形態における第２の部分積生成回路１６０の構成を示す回路図である。図３の部分積生成回路１６０は、最上位のブースエンコード結果ＢＥ＿Ｌに基づいて、部分積ＰＣと、補正項ＣＣとを求めて出力する。部分積生成回路１６０は、補正項生成回路１４６に代えて補正項生成回路１６６を備える点の他は、図２の第１の部分積生成回路１４０と同様に構成されている。
【００２５】
オーバーフロー検出部１４は、被乗数Ａと乗数Ｂとが共に負の最大値であることを検出した場合には、オーバーフロー検出結果ＯＤを“１”にし、その他の場合は“０”にする。補正項生成回路１６６は、オーバーフロー検出結果ＯＤが“１”である場合には、“０”を２の補数の補正項ＣＣとして出力する。また、補正項生成回路１６６は、オーバーフロー検出結果ＯＤが“０”である場合には、ブースエンコード結果ＢＥ＿Ｌが正又は０のときは“０”を、負のときは“１”を、２の補数の補正項ＣＣとして選択して出力する。
【００２６】
図４は、第１の実施形態における第３の部分積生成回路１８０の構成を示す回路図である。図４の部分積生成回路１８０は、最下位のブースエンコード結果ＢＥ＿０に基づいて、部分積ＰＡと、補正項ＣＡとを求めて出力する。部分積生成回路１８０は、図２の第１の部分積生成回路１４０において、エンコード結果補正部１８８を更に備え、下位のＮ−１個の選択回路１４２には、ブースエンコード結果ＢＥ＿０ではなく、エンコード結果補正部１８８の出力を与えるようにしたものである。
【００２７】
エンコード結果補正部１８８は、オーバーフロー検出結果ＯＤが“１”である場合には、ブースエンコード結果ＢＥ＿０を“−１”に補正して下位のＮ−１個の選択回路１４２に出力し、オーバーフロー検出結果ＯＤが“０”である場合には、ブースエンコード結果ＢＥ＿０をそのまま出力する。下位のＮ−１個の選択回路１４２は、被乗数Ａとエンコード結果補正部１８８の出力に基づき、部分積を生成して出力し、これらよりも上位の選択回路１４２は、被乗数Ａとブースエンコード結果ＢＥ＿０とに基づき、部分積を生成して出力する。
【００２８】
図５は、第１の実施形態における乗算の計算例を示す説明図である。以下では、被乗数Ａ及び乗数Ｂのそれぞれのビット数Ｍ＋１，Ｎ＋１は、いずれも８であるとして説明する。被乗数Ａと乗数Ｂとが共に負の最大値であることが検出された場合について説明する。このとき、被乗数Ａ及び乗数Ｂは、具体的には“１０００００００”である。
【００２９】
乗数Ｂが負の最大値の場合における最上位及び最下位以外のブースエンコード結果ＢＥ＿ｋは０になる。このため、第１の部分積生成回路１４０は、いずれも、部分積ＰＢとして“０００００００００”を出力し、補正項ＣＢとして“０”を出力する。
【００３０】
乗数Ｂが負の最大値の場合における最上位のブースエンコード結果ＢＥ＿Ｌは−２になり、第２の部分積生成回路１６０は、部分積ＰＣとして“０１１１１１１１１”を出力する。オーバーフロー検出結果ＯＤが“１”であるので、２の補数の補正項ＣＣは、補正項生成回路１６６により値“０”に補正される。
【００３１】
乗数Ｂが負の最大値の場合における最下位のブースエンコード結果ＢＥ＿０は０になる。オーバーフロー検出結果ＯＤが“１”であるので、エンコード結果補正部１８８は、ブースエンコード結果ＢＥ＿０を“−１”に補正する。このため、下位の６個の選択回路１４２は、被乗数Ａを論理反転させた値を選択し、下位の６ビットのそれぞれとして“１”を出力する。すなわち、第３の部分積生成回路１８０は、部分積ＰＡとして“０００１１１１１１”を出力し、補正項ＣＡとして“０”を出力する。
【００３２】
したがって、被乗数Ａと乗数Ｂとが共に負の最大値である場合には、図５のように、最終加算部２４からは“０１１１１１１１１１１１１１１”が出力される。すなわち、最終加算部２４は、正の最大値に補正された乗算結果を出力し、本来の被乗数Ａと乗数Ｂとの積に近い値を得ることができる。
【００３３】
図６は、第３の部分積生成回路の構成の他の例を示す回路図である。図６の部分積生成回路２８０は、図２の部分積生成回路１４０において、Ｎ−１個の飽和処理回路２３１を更に備えたものである。飽和処理回路２３１は、例えばＯＲゲートである。
【００３４】
Ｎ−１個の飽和処理回路２３１は、下位のＮ−１個の選択回路１４２にそれぞれ対応している。下位のＮ−１個の選択回路１４２は、それぞれ、その出力を対応する飽和処理回路２３１に与える。飽和処理回路２３１は、いずれも、オーバーフロー検出結果ＯＤが“１”である場合には“１”を出力し、その他の場合には対応する選択回路１４２の出力をそのまま出力する。
【００３５】
被乗数Ａと乗数Ｂとが共に負の最大値である場合には、部分積生成回路２８０が出力する部分積ＰＡ２は“０００１１１１１１”となるので、図４の部分積生成回路１８０に代えて図６の部分積生成回路２８０を用いても、同様の乗算結果が得られる。
【００３６】
（第２の実施形態）
図７は、本発明の第２の実施形態に係る第１の部分積生成回路３４０の構成を示す回路図である。図７の部分積生成回路３４０は、図２の部分積生成回路１４０において、補正項生成回路１４６に代えて補正項生成回路３４６を備えるものである。第２の実施形態において、ブースエンコード結果ＢＥ＿ｋは、最上位以外のブースエンコード結果を示すものとする。
【００３７】
第２の実施形態は、図１の乗算装置において、部分積生成回路１４０，１８０に代えて部分積生成回路３４０を用いるものである。その他の構成要素については、第１の実施形態において説明したものと同様であるので、説明を省略する。
【００３８】
補正項生成回路３４６は、オーバーフロー検出結果ＯＤが“１”である場合には、２進数“１１”を２の補数の補正項ＣＢ３として出力する。また、補正項生成回路３４６は、オーバーフロー検出結果ＯＤが“０”である場合には、ブースエンコード結果ＢＥ＿０，ＢＥ＿ｋが正又は０のときは“００”を、負のときは“０１”を、２の補数の補正項ＣＢ３として選択して出力する。部分積生成回路３４０が出力する部分積ＰＢ３は、図２の部分積生成回路１４０が出力する部分積ＰＢと同じである。
【００３９】
図８は、第２の実施形態における乗算の計算例を示す説明図である。被乗数Ａと乗数Ｂとが共に負の最大値であることが検出された場合について説明する。この場合、部分積生成回路３４０のそれぞれが出力する部分積ＰＢ３は“０００００００００”となる。また、補正項生成回路３４６のそれぞれが、補正項ＣＢ３として“１１”を出力する。したがって、図８のように、部分積ＰＢ３，ＰＣと補正項ＣＢ３，ＣＣとが加算されて得られる乗算結果は、正の最大値に補正されて出力される。
【００４０】
（第３の実施形態）
図９は、本発明の第３の実施形態に係る第１の部分積生成回路４４０の構成を示す回路図である。図９の部分積生成回路４４０は、図４の部分積生成回路１８０において、最下位の２個の選択回路１４２には、ブースエンコード結果ＢＥ＿ｋではなく、エンコード結果補正部１８８の出力を与え、これらよりも上位の選択回路１４２には、ブースエンコード結果ＢＥ＿ｋを与えるようにしたものである。第３の実施形態において、ブースエンコード結果ＢＥ＿ｋは、最上位以外のブースエンコード結果を示すものとする。
【００４１】
第３の実施形態は、図１の乗算装置において、部分積生成回路１４０，１８０に代えて部分積生成回路４４０を用いるものである。その他の構成要素については、第１の実施形態において説明したものと同様であるので、説明を省略する。
【００４２】
図１０は、第３の実施形態における乗算の計算例を示す説明図である。被乗数Ａと乗数Ｂとが共に負の最大値であることが検出された場合について説明する。この場合、乗数Ｂの最上位以外のブースエンコード結果ＢＥ＿ｋは“０”になる。オーバーフロー検出結果ＯＤが“１”であるので、エンコード結果補正部１８８は、ブースエンコード結果ＢＥ＿ｋを“−１”に補正する。すると、最下位の２個の選択回路１４２は、被乗数Ａの対応するビットを論理反転させた値を選択するので、部分積生成回路４４０は、いずれも、部分積ＰＢ４として“０００００００１１”を出力し、補正項ＣＢ４として“０”を出力する。したがって、図１０のように、部分積ＰＢ４，ＰＢと補正項ＣＢ４，ＣＣとが加算されて得られる乗算結果は、正の最大値に補正されて出力される。
【００４３】
図１１は、図９の第１の部分積生成回路の変形例を示す回路図である。図１１の部分積生成回路５４０は、図２の部分積生成回路１４０において、２個の飽和処理回路２３１を更に備えたものである。飽和処理回路２３１は、例えばＯＲゲートである。
【００４４】
２個の飽和処理回路２３１は、最下位の２個の選択回路１４２にそれぞれ対応している。最下位の２個の選択回路１４２は、それぞれ、出力を対応する飽和処理回路２３１に与える。飽和処理回路２３１は、いずれも、オーバーフロー検出結果ＯＤが“１”である場合には“１”を出力し、オーバーフロー検出結果ＯＤが“０”である場合には対応する選択回路１４２の出力をそのまま出力する。
【００４５】
被乗数Ａと乗数Ｂとが共に負の最大値であることが検出された場合には、部分積生成回路５４０は、いずれも、部分積ＰＢ５として“０００００００１１”を出力するので、図９の部分積生成回路４４０に代えて図１１の部分積生成回路５４０を用いても、同様の乗算結果が得られる。
【００４６】
（第４の実施形態）
図１２は、本発明の第４の実施形態に係る第１の部分積生成回路６４０の構成を示す回路図である。図１２の部分積生成回路６４０は、図２の部分積生成回路１４０において、補正項生成回路１４６に代えて補正項生成回路６４６を備え、飽和処理回路２３１を更に備えたものである。飽和処理回路２３１は、例えばＯＲゲートである。第４の実施形態において、ブースエンコード結果ＢＥ＿ｋは、最上位以外のブースエンコード結果を示すものとする。
【００４７】
最下位から２番目の選択回路１４２は、その出力を飽和処理回路２３１に与える。飽和処理回路２３１は、オーバーフロー検出結果ＯＤが“１”である場合には“１”を出力し、オーバーフロー検出結果ＯＤが“０”である場合には最下位から２番目の選択回路１４２の出力をそのまま出力する。補正項生成回路６４６は、オーバーフロー検出結果ＯＤが“１”である場合には“１”を補正項ＣＢ６として出力し、オーバーフロー検出結果ＯＤが“０”である場合には図２の補正項生成回路１４６と同様の値を補正項ＣＢ６として出力する。
【００４８】
第４の実施形態は、図１の乗算装置において、部分積生成回路１４０，１８０に代えて部分積生成回路６４０を用いるものである。その他の構成要素については、第１の実施形態において説明したものと同様であるので、説明を省略する。
【００４９】
図１３は、第４の実施形態における乗算の計算例を示す説明図である。被乗数Ａと乗数Ｂとが共に負の最大値であることが検出された場合について説明する。この場合、乗数Ｂの最上位以外のブースエンコード結果ＢＥ＿ｋは０になる。オーバーフロー検出結果ＯＤが“１”であるので、補正項生成回路６４６及び飽和処理回路２３１は、“１”を出力する。つまり、部分積生成回路６４０は、いずれも、部分積ＰＢ６として“０００００００１０”を出力し、補正項ＣＢ６として“１”を出力する。したがって、図１３のように、部分積ＰＢ６，ＰＢと補正項ＣＢ６，ＣＣとが加算されて得られる乗算結果は、正の最大値に補正されて出力される。
【００５０】
（第５の実施形態）
本実施形態では、図１の乗算装置を変形した積和演算装置について説明する。図１４は、本発明の第５の実施形態に係る積和演算装置の構成を示すブロック図である。
【００５１】
図１４の積和演算装置は、Ｍ＋１ビットの被乗数ＡとＮ＋１ビットの乗数Ｂとの間の積と、加数Ｘとの和又は差を求める。すなわち、この積和演算装置は、Ｘ±Ａ×Ｂの演算を行う。ここで、加数Ｘは２の補数で表現された符号付きの固定小数点数であり、その最上位ビットの右側に小数点が存在するとし、最上位ビットは正又は負の符号を示すとする。
【００５２】
図１４の積和演算装置は、エンコード部７１２と、オーバーフロー検出部１４と、部分積生成部１６と、累算部２２と、固定小数点シフト部３２と、桁上げ保存加算部３４と、桁上げ伝播加算部３６と、セレクタ３８とを備えている。オーバーフロー検出部１４、部分積生成部１６、及び累算部２２は、図１を参照して説明したものと同じであるので、説明を省略する。
【００５３】
エンコード部７１２は、積和演算をすべきことを演算選択信号ＳＬが示している場合には、図１のエンコード部１２と同様に、乗数Ｂを２次のブースのアルゴリズムに基づいてエンコードし、得られたブースエンコード結果ＢＥ＿０，ＢＥ＿１，…，ＢＥ＿Ｌを部分積生成部１６に出力する。また、エンコード部７１２は、積差演算をすべきことを演算選択信号ＳＬが示している場合には、乗数Ｂを２次のブースのアルゴリズムに基づいてエンコードし、得られた結果の２の補数をブースエンコード結果ＢＥ＿０，ＢＥ＿１，…，ＢＥ＿Ｌとして部分積生成部１６に出力する。
【００５４】
固定小数点シフト部３２は、小数点位置が加数Ｘと合うように、累算部２２から出力される中間積をシフトし、その結果を桁上げ保存加算部３４に出力する。セレクタ３８は、積和演算又は積差演算をすべきことを演算選択信号ＳＬが示している場合には、加数Ｘを選択し、その他の場合には、“０”を選択して、桁上げ保存加算部３４に出力する。“０”が選択された場合には、図１４の積和演算装置は、乗算（Ａ×Ｂ）を行うことになる。
【００５５】
桁上げ保存加算部３４は、セレクタ３８の出力と、固定小数点シフト部３２から出力される２つの中間積とを桁上げ保存加算し、２つの中間積を求めて桁上げ伝播加算部３６に出力する。桁上げ伝播加算部３６は、入力された２つの中間積の加算を行い、求められた演算結果を出力する。
【００５６】
このように、図１４の積和演算装置によると、演算選択信号ＳＬに応じて、積和演算、積差演算、又は乗算を行うことができる。
【００５７】
なお、部分積生成回路１４０，１６０，１８０に代えて、第１〜第４の実施形態で説明した他の部分積生成回路を用いるようにしてもよい。
【００５８】
以上のように、本発明に係る乗算装置及び積和演算装置は、被乗数Ａと乗数Ｂとが共に負の最大値であることが検出された場合には、乗算結果が正の最大値になるように、部分積生成部において部分積又は補正項に対して補正を行う。求められた乗算結果に対してはオーバーフローに対処するための処理を行わないので、回路規模を抑えることができる。
【産業上の利用可能性】
【００５９】
本発明は、固定小数点数の乗算の結果がオーバーフローした場合の処理を行う回路の規模を小さくすることができるので、乗算器として有用である。特に、高精度な演算を実現するために固定小数点数での演算が必要となる音声やメディア処理等のプロセッサに内蔵される乗算器又は積和演算器として有用である。
【図面の簡単な説明】
【００６０】
【図１】本発明の第１の実施形態に係る乗算装置の構成を示すブロック図である。
【図２】第１の実施形態における第１の部分積生成回路の構成を示す回路図である。
【図３】第１の実施形態における第２の部分積生成回路の構成を示す回路図である。
【図４】第１の実施形態における第３の部分積生成回路の構成を示す回路図である。
【図５】第１の実施形態における乗算の計算例を示す説明図である。
【図６】第３の部分積生成回路の構成の他の例を示す回路図である。
【図７】本発明の第２の実施形態に係る第１の部分積生成回路の構成を示す回路図である。
【図８】第２の実施形態における乗算の計算例を示す説明図である。
【図９】本発明の第３の実施形態に係る第１の部分積生成回路の構成を示す回路図である。
【図１０】第３の実施形態における乗算の計算例を示す説明図である。
【図１１】図９の第１の部分積生成回路の変形例を示す回路図である。
【図１２】本発明の第４の実施形態に係る第１の部分積生成回路の構成を示す回路図である。
【図１３】第４の実施形態における乗算の計算例を示す説明図である。
【図１４】本発明の第５の実施形態に係る積和演算装置の構成を示すブロック図である。
【図１５】従来の乗算装置の構成の例を示すブロック図である。
【符号の説明】
【００６１】
１２，７１２  エンコード部
１４  オーバーフロー検出部
１６  部分積生成部
２２  累算部
２４  最終加算部
３２  固定小数点シフト部
３４  桁上げ保存加算部
３６  桁上げ伝播加算部
３８  セレクタ
１４０，３４０，４４０，５４０，６４０  第１の部分積生成回路
１４２，１４４  選択回路
１４６，１６６，３４６，６４６  補正項生成回路
１６０  第２の部分積生成回路
１８０，２８０  第３の部分積生成回路
１８８  エンコード結果補正部
２３１  飽和処理回路
【図１】
0004376904.tif 000002
【図２】
0004376904.tif 000003
【図３】
0004376904.tif 000004
【図４】
0004376904.tif 000005
【図５】
0004376904.tif 000006
【図６】
0004376904.tif 000007
【図７】
0004376904.tif 000008
【図８】
0004376904.tif 000009
【図９】
0004376904.tif 000010
【図１０】
0004376904.tif 000011
【図１１】
0004376904.tif 000012
【図１２】
0004376904.tif 000013
【図１３】
0004376904.tif 000014
【図１４】
0004376904.tif 000015
【図１５】
0004376904.tif 000016