JP5966764B2 - 乗算装置及び乗算方法 - Google Patents

乗算装置及び乗算方法 Download PDF

Info

Publication number
JP5966764B2
JP5966764B2 JP2012183419A JP2012183419A JP5966764B2 JP 5966764 B2 JP5966764 B2 JP 5966764B2 JP 2012183419 A JP2012183419 A JP 2012183419A JP 2012183419 A JP2012183419 A JP 2012183419A JP 5966764 B2 JP5966764 B2 JP 5966764B2
Authority
JP
Japan
Prior art keywords
circuit
product
mantissa part
multiplier
digits
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2012183419A
Other languages
English (en)
Other versions
JP2014041474A (ja
Inventor
北村 健一
健一 北村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2012183419A priority Critical patent/JP5966764B2/ja
Priority to US13/924,661 priority patent/US20140059097A1/en
Publication of JP2014041474A publication Critical patent/JP2014041474A/ja
Application granted granted Critical
Publication of JP5966764B2 publication Critical patent/JP5966764B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • G06F5/012Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising in floating-point computations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/485Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Nonlinear Science (AREA)
  • Complex Calculations (AREA)

Description

本発明は、乗算装置及び乗算方法に関する。
正規化された浮動小数点数の仮数部の乗算を行うための乗算回路を有する浮動小数点乗算装置が知られている(例えば、特許文献1参照)。第1のゼロ検出回路は、被乗数となる固定小数点数の最上位側に連続するゼロの数を検出する。第2のゼロ検出回路は、乗数となる固定小数点数の最上位側に連続するゼロの数を検出する。第1の左シフト回路は、第1のゼロ検出回路によって検出されたゼロの数だけ被乗数を左シフトして乗算回路に供給する。第2の左シフト回路は、第2のゼロ検出回路によって検出されたゼロの数だけ乗数を左シフトして乗算回路に供給する。加算器は、第1及び第2のゼロ検出回路で検出されたゼロの数を加算する。右シフト回路は、第1及び第2の左シフト回路による左シフト後の被乗数及び乗数を対象とする乗算回路の乗算結果を加算器の加算結果の示す数だけ右シフトする。
特開平5−40605号公報
特許文献1は、右シフタ回路が最大でフォーマット精度の2倍の桁幅が必要になり、物量及び遅延時間が共に大きくなる。
1つの側面では、本発明の目的は、小さい物量及び遅延時間で浮動小数点数の乗算を行うことができる乗算装置及び乗算方法を提供することである。
乗算装置は、乗数である浮動小数点数の仮数部の上位に連続するゼロの数を計数する計数回路と、前記仮数部の固定精度の桁数及び前記計数回路が計数した計数値を基にシフト量を演算するシフト量演算回路と、前記シフト量だけ被乗数である浮動小数点数の仮数部を左シフトするシフト回路と、前記仮数部の固定精度の桁数から前記計数値を減算して前記乗数の仮数部の桁数を演算する桁数演算回路と、前記シフト回路により左シフトされた被乗数の仮数部と、前記乗数の仮数部とを基に、前記乗数の仮数部の桁単位で中間積を出力する乗算回路と、前記被乗数である浮動小数点数の指数部と前記乗数である浮動小数点の指数部とを加算した値を出力する加算回路と、前記乗算回路が出力する中間積の回数が前記桁数演算回路により演算された桁数になる場合、前記乗算回路が出力する中間積を積の浮動小数点数の仮数部として出力し、前記加算回路により出力された値を積の浮動小数点数の指数部として出力する制御回路とを有する。
小さい物量及び遅延時間で浮動小数点数の乗算を行うことができる。
図1は、固定小数点数の乗算方法を説明するための図である。 図2は、非正規化浮動小数点数の乗算方法を説明するための図である。 図3は、非正規化固定精度浮動小数点数の乗算方法を説明するための図である。 図4は、第1の実施形態による第1の乗算方法を説明するための図である。 図5は、第1の実施形態による第2の乗算方法を説明するための図である。 図6は、第1の実施形態による第3の乗算方法を説明するための図である。 図7は、第1の実施形態による第4の乗算方法を説明するための図である。 図8は、第1の実施形態による第5の乗算方法を説明するための図である。 図9は、第1の実施形態による乗算装置の構成例を示す図である。 図10は、図9の乗算ループ回路の構成例を示す図である。 図11は、図10の積生成セレクト回路の入出力の対応関係を示す図である。 図12(A)〜(D)は、図9の制御回路の制御方法を示す図である。 図13は、第2の実施形態による乗算装置の構成例を示す図である。 図14(A)〜(D)は、図13の制御回路の制御方法を示す図である。
(第1の実施形態)
図1は、固定小数点数の乗算方法を説明するための図である。「011111」は、被乗数となる固定小数点10進数である。「001111」は、乗数となる固定小数点10進数である。被乗数リーディングゼロカウント値P1は、被乗数の「011111」の上位に連続するゼロの数であり、「1」である。乗数リーディングゼロカウント値P2は、乗数の「001111」の上位に連続するゼロの数であり、「2」である。「111110」は、被乗数の「011111」を被乗数リーディングゼロカウント値P1の「1」だけ左シフトした正規化数である。「111100」は、乗数の「001111」を乗数リーディングゼロカウント値P2の「2」だけ左シフトした正規化数である。「12344321000」は、被乗数の正規化数の「111110」に対して乗数の正規化数の「111100」を乗算した積である。その右隣の値Pの「3」は、P1+P2=1+2=3で表される。積の「12344321」は、積の「12344321000」を値Pの「3」だけ右シフトした値である。この右シフトを行うための右シフト回路は、被乗数及び乗数の固定精度の桁数が「6」の場合、最大で6×2=12桁必要となり、物量が大きくなってしまう。積の出力OUT1は、6桁の固定精度の「344321」の固定小数点数であり、正確な値が得られない。
図2は、非正規化浮動小数点数の乗算方法を説明するための図である。浮動小数点数は、仮数部sf及び指数部expを有し、10進数の場合には、sf×10expで表される。被乗数は、「0.11111」の仮数部及び「0」の指数部を有する。乗数は、「0.01111」の仮数部及び「0」の指数部を有する。被乗数リーディングゼロカウント値P1は、被乗数の仮数部の「0.11111」の上位に連続するゼロの数であり、「1」である。乗数リーディングゼロカウント値P2は、乗数の「0.01111」の上位に連続するゼロの数であり、「2」である。被乗数の正規化仮数部の「1.11110」は、被乗数の仮数部の「0.11111」を被乗数リーディングゼロカウント値P1の「1」だけ左シフトした正規化数である。乗数の正規化仮数部の「1.11100」は、乗数の仮数部の「0.01111」を乗数リーディングゼロカウント値P2の「2」だけ左シフトした正規化数である。被乗数の正規化指数部の「−1」は、被乗数の指数部の「0」から被乗数リーディングゼロカウント値P1の「1」を減算し、0−1=−1で表される。乗数の正規化指数部の「−2」は、乗数の指数部の「0」から乗数リーディングゼロカウント値P2の「2」を減算し、0−2=−2で表される。積の仮数部「1.2344321000」は、被乗数の正規化仮数部の「1.11110」に対して乗数の正規化仮数部の「1.11100」を乗算した積である。積の指数部の「−3」は、被乗数の正規化指数部の「−1」と乗数の正規化指数部の「−2」とを加算し、(−1)+(−2)=−3で表される。その右隣の値Pの「3」は、P1+P2=1+2=3で表される。積の仮数部の「0.0012344321」は、積の仮数部の「1.2344321000」を値Pの「3」だけ右シフトした値である。その右隣の指数部の「0」は、その上の指数部の「−3」と値Pの「3」を加算し、−3+3=0で表される。積の仮数部は、固定精度が6桁であるので、積の仮数部の「0.0012344321」のうちの上位の6桁の「0.00123」が積の仮数部として、積の出力OUT2が出力される。積の出力OUT2は、「0.00123」の指数部と、「0」の指数部とを有する。しかし、積の出力OUT2の仮数部は、有効桁数が3桁に減ることにより精度が悪くなる。そこで、図3に示す乗算方法が考えられる。
図3は、IEEE754−2008の浮動小数点10進数形式のような、演算結果のシフトにより正確な結果を出力できる場合には、演算結果をシフトした結果を出力する旨が定義されたフォーマットにおける非正規化固定精度浮動小数点数の乗算方法を説明するための図である。被乗数は、「0.11000」の仮数部及び「0」の指数部を有する。乗数は、「0.01100」の仮数部及び「0」の指数部を有する。被乗数リーディングゼロカウント値P1は、被乗数の仮数部の「0.11000」の上位に連続するゼロの数であり、「1」である。乗数リーディングゼロカウント値P2は、乗数の仮数部の「0.01100」の上位に連続するゼロの数であり、「2」である。被乗数の正規化仮数部の「1.10000」は、被乗数の仮数部の「0.11000」を被乗数リーディングゼロカウント値P1の「1」だけ左シフトした正規化数である。乗数の正規化仮数部の「1.10000」は、乗数の仮数部の「0.01100」を乗数リーディングゼロカウント値P2の「2」だけ左シフトした正規化数である。被乗数の正規化指数部の「−1」は、被乗数の指数部の「0」から被乗数リーディングゼロカウント値P1の「1」を減算し、0−1=−1で表される。乗数の正規化指数部の「−2」は、乗数の指数部の「0」から乗数リーディングゼロカウント値P2の「2」を減算し、0−2=−2で表される。積の仮数部の「1.2210000000」は、被乗数の正規化仮数部の「1.10000」に対して乗数の正規化仮数部の「1.10000」を乗算した積である。積の指数部の「−3」は、被乗数の正規化指数部の「−1」と乗数の正規化指数部の「−2」とを加算し、(−1)+(−2)=−3で表される。その右隣の値Pの「3」は、P1+P2=1+2=3で表される。積の仮数部の「0.0012210000」は、積の仮数部の「1.2210000000」を値Pの「3」だけ右シフトした値である。その右隣の指数部の「0」は、その上の指数部の「−3」と値Pの「3」を加算し、−3+3=0で表される。積の仮数部の固定精度は6桁であるため、積の仮数部の「0.0012210000」の上位6桁の「0.00122」を積の仮数部にしようとすると、桁落ちが発生し、精度が悪化してしまう。そこで、左シフト回路により、積の仮数部の「0.0012210000」を1桁左シフトし、積の指数部の「0」から「1」を減算して「−1」の指数部とし、積の出力OUT3を出力する。積の出力OUT3は、「0.01221」の仮数部と、「−1」の指数部とを有する。これにより、桁落ちを防止し、精度を向上させることができる。しかし、左シフト回路を追加する必要があるため、物量及び遅延時間が増加してしまう課題がある。
図4は、第1の実施形態による第1の乗算方法を説明するための図である。第1の乗算方法では、非正規化固定精度浮動小数点数の乗算を行う。被乗数、乗数及び積の仮数部の固定精度の桁数mは、例えば6桁である。被乗数は、「000110」の仮数部及び「0」の指数部を有する。乗数は、「000011」の仮数部及び「0」の指数部を有する。被乗数リーディングゼロカウント値LZC1は、被乗数の仮数部の「000110」の上位に連続するゼロの数であり、「3」である。乗数リーディングゼロカウント値LZC2は、乗数の仮数部の「000011」の上位に連続するゼロの数であり、「4」である。シフト量LSAの「1」は、m−LZC2−1=6−4−1=1で表される。このシフト量LSAは、図3の最後の左シフト回路のシフト量に対応する。
シフト後の被乗数の仮数部の「001100」は、被乗数の仮数部の「000110」をシフト量LSAの「1」だけ左シフトした数である。乗数の仮数部の桁数DCは、m−LZC2=6−4=2で表される。積の指数部の「0」は、被乗数の指数部の「0」と乗数の指数部の「0」とを加算した値である。
次に、シフト後の被乗数の仮数部の「001100」に対して乗数の仮数部の「000011」の下位1桁目の「1」を乗算し、1桁右シフトすることにより、仮数部の部分積の「00110.0」が得られる。乗数の仮数部の桁数DCは、デクリメントされ、「2」から「1」になる。
次に、シフト後の被乗数の仮数部の「001100」に対して乗数の仮数部の「000011」の下位2桁目の「1」を乗算することにより、仮数部の部分積の「001100」が得られる。乗数の仮数部の桁数DCは、デクリメントされ、「1」から「0」になる。
乗数の仮数部の桁数DCが「0」になると、下位1桁目の部分積の「00110.0」と下位2桁目の部分積の「001100」とが加算され、中間積の「001210.0」が得られる。積の指数部は、「0」のままである。
次に、中間積の「001210.0」のうちの固定精度の6桁の「001210」が積の出力OUT4として出力される。積の出力OUT4は、「001210」の仮数部と、「0」の指数部とを有する。これにより、桁落ちがなく、高精度の積が得られる。また、図3のように、m×2=6×2=12桁のシフト回路又はレジスタが必要ないので、物量及び遅延時間を低減することができる。
図5は、第1の実施形態による第2の乗算方法を説明するための図である。第2の乗算方法では、非正規化固定精度浮動小数点数の乗算を行う。図4の第1の乗算方法では、最終の積の出力OUT4の仮数部の最上位桁が0の場合を示したが、図5の第2の乗算方法では、最終の積の出力OUT5の仮数部の最上位桁が1〜9になる場合を示す。被乗数は、「011100」の仮数部及び「0」の指数部を有する。乗数は、「000011」の仮数部及び「0」の指数部を有する。被乗数リーディングゼロカウント値LZC1は、被乗数の仮数部の「011100」の上位に連続するゼロの数であり、「1」である。乗数リーディングゼロカウント値LZC2は、乗数の仮数部の「000011」の上位に連続するゼロの数であり、「4」である。シフト量LSAの「1」は、m−LZC2−1=6−4−1=1で表される。
シフト後の被乗数の仮数部の「111000」は、被乗数の仮数部の「011100」をシフト量LSAの「1」だけ左シフトした数である。乗数の仮数部の桁数DCは、m−LZC2=6−4=2で表される。積の指数部の「0」は、被乗数の指数部の「0」と乗数の指数部の「0」とを加算した値である。
次に、シフト後の被乗数の仮数部の「111000」に対して乗数の仮数部の「000011」の下位1桁目の「1」を乗算し、1桁右シフトすることにより、仮数部の部分積の「11100.0」が得られる。乗数の仮数部の桁数DCは、デクリメントされ、「2」から「1」になる。
次に、シフト後の被乗数の仮数部の「111000」に対して乗数の仮数部の「000011」の下位2桁目の「1」を乗算することにより、仮数部の部分積の「111000」が得られる。乗数の仮数部の桁数DCは、デクリメントされ、「1」から「0」になる。
乗数の仮数部の桁数DCが「0」になると、下位1桁目の部分積の「11100.0」と下位2桁目の部分積の「111000」とが加算され、中間積の「122100.0」が得られる。積の指数部は、「0」のままである。
次に、中間積の「122100.0」のうちの固定精度の6桁の「122100」が積の出力OUT5として出力される。積の出力OUT5は、「122100」の仮数部と、「0」の指数部とを有する。これにより、桁落ちがなく、高精度の積が得られる。
図6は、第1の実施形態による第3の乗算方法を説明するための図である。第3の乗算方法では、乗数の仮数部の桁数が被乗数の仮数部の桁数より多い場合の非正規化固定精度浮動小数点数の乗算を行う方法を示す。被乗数は、「000011」の仮数部及び「0」の指数部を有する。乗数は、「011100」の仮数部及び「0」の指数部を有する。被乗数リーディングゼロカウント値LZC1は、被乗数の仮数部の「000011」の上位に連続するゼロの数であり、「4」である。乗数リーディングゼロカウント値LZC2は、乗数の仮数部の「011100」の上位に連続するゼロの数であり、「1」である。シフト量LSAの「1」は、m−LZC2−1=6−1−1=4で表される。
シフト後の被乗数の仮数部の「110000」は、被乗数の仮数部の「000011」をシフト量LSAの「4」だけ左シフトした数である。乗数の仮数部の桁数DCは、m−LZC2=6−1=5で表される。積の指数部の「0」は、被乗数の指数部の「0」と乗数の指数部の「0」とを加算した値である。
次に、シフト後の被乗数の仮数部の「110000」に対して乗数の仮数部の「011100」の下位1桁目の「0」を乗算し、4桁右シフトすることにより、仮数部の部分積の「00.0000」が得られる。乗数の仮数部の桁数DCは、デクリメントされ、「5」から「4」になる。
次に、シフト後の被乗数の仮数部の「110000」に対して乗数の仮数部の「011100」の下位2桁目の「0」を乗算し、3桁右シフトすることにより、仮数部の部分積の「000.000」が得られる。乗数の仮数部の桁数DCは、デクリメントされ、「4」から「3」になる。
次に、シフト後の被乗数の仮数部の「110000」に対して乗数の仮数部の「011100」の下位3桁目の「1」を乗算し、2桁右シフトすることにより、仮数部の部分積の「1100.00」が得られる。乗数の仮数部の桁数DCは、デクリメントされ、「3」から「2」になる。
次に、シフト後の被乗数の仮数部の「110000」に対して乗数の仮数部の「011100」の下位4桁目の「1」を乗算し、1桁右シフトすることにより、仮数部の部分積の「11000.0」が得られる。乗数の仮数部の桁数DCは、デクリメントされ、「2」から「1」になる。
次に、シフト後の被乗数の仮数部の「110000」に対して乗数の仮数部の「011100」の下位5桁目の「1」を乗算することにより、仮数部の部分積の「110000」が得られる。乗数の仮数部の桁数DCは、デクリメントされ、「1」から「0」になる。
乗数の仮数部の桁数DCが「0」になると、上記の下位1桁目〜5桁目の5個の部分積が加算され、中間積の「122100.0」が得られる。積の指数部は、「0」のままである。
次に、中間積の「122100.0」のうちの固定精度の6桁の「122100」が積の出力OUT6として出力される。積の出力OUT6は、「122100」の仮数部と、「0」の指数部とを有する。これにより、桁落ちがなく、高精度の積が得られる。
図7は、第1の実施形態による第4の乗算方法を説明するための図である。第4の乗算方法では、中間積が桁あふれする場合の非正規化固定精度浮動小数点数の乗算を行う方法を示す。被乗数は、「099900」の仮数部及び「0」の指数部を有する。乗数は、「000099」の仮数部及び「0」の指数部を有する。被乗数リーディングゼロカウント値LZC1は、被乗数の仮数部の「099900」の上位に連続するゼロの数であり、「1」である。乗数リーディングゼロカウント値LZC2は、乗数の仮数部の「000099」の上位に連続するゼロの数であり、「4」である。シフト量LSAの「1」は、m−LZC2−1=6−4−1=1で表される。
シフト後の被乗数の仮数部の「999000」は、被乗数の仮数部の「099900」をシフト量LSAの「1」だけ左シフトした数である。乗数の仮数部の桁数DCは、m−LZC2=6−4=2で表される。積の指数部の「0」は、被乗数の指数部の「0」と乗数の指数部の「0」とを加算した値である。
次に、シフト後の被乗数の仮数部の「999000」に対して乗数の仮数部の「000099」の下位1桁目の「9」を乗算し、1桁右シフトすることにより、仮数部の部分積の「899100.0」が得られる。乗数の仮数部の桁数DCは、デクリメントされ、「2」から「1」になる。
次に、シフト後の被乗数の仮数部の「999000」に対して乗数の仮数部の「000099」の下位2桁目の「9」を乗算することにより、仮数部の部分積の「8991000」が得られる。乗数の仮数部の桁数DCは、デクリメントされ、「1」から「0」になる。
乗数の仮数部の桁数DCが「0」になると、下位1桁目の部分積の「899100.0」と下位2桁目の部分積の「8991000」とが加算され、中間積の「9890100.0」が得られる。積の指数部は、「0」のままである。ここで、中間積の「9890100.0」の整数部は7桁であり、固定精度の桁数m=6を超え、桁あふれ状態である。
次に、中間積の「9890100.0」の整数部の下位7桁目の「9」が「1〜9」であるので、桁あふれ状態であると判断する。その場合、中間積の「9890100.0」を1桁右シフトし、積の指数部をインクリメントして「0」から「1」にし、積の出力OUT7を出力する。積の出力OUT7は、「989010」の仮数部と、「1」の指数部とを有する。これにより、桁あふれを防止し、高精度の積が得られる。
図8は、第1の実施形態による第5の乗算方法を説明するための図である。第5の乗算方法では、シフト量LSAが被乗数リーディングゼロカウント値LZC1より大きくなる場合の非正規化固定精度浮動小数点数の乗算を行う方法を示す。被乗数は、「011111」の仮数部及び「0」の指数部exp1を有する。乗数は、「000111」の仮数部及び「0」の指数部exp2を有する。被乗数リーディングゼロカウント値LZC1は、被乗数の仮数部の「011111」の上位に連続するゼロの数であり、「1」である。乗数リーディングゼロカウント値LZC2は、乗数の仮数部の「000111」の上位に連続するゼロの数であり、「3」である。シフト量LSAの「2」は、m−LZC2−1=6−3−1=2で表される。
ここで、シフト量LSAの「2」は、被乗数リーディングゼロカウント値LZC1の「1」より大きいため、被乗数の仮数部の「011111」をシフト量LSAの「2」だけ左シフトすることができない。この場合、被乗数の仮数部の「011111」を被乗数リーディングゼロカウント値LZC1の「1」だけ左シフトし、シフト後の被乗数の仮数部の「111110」を得る。乗数の仮数部の桁数DCは、m−LZC2=6−3=3で表される。積の指数部の「1」は、補正により、exp1+exp2+LSA−LZC1=0+0+2−1=1で表される。
次に、シフト後の被乗数の仮数部の「111110」に対して乗数の仮数部の「000111」の下位1桁目の「1」を乗算し、2桁右シフトすることにより、仮数部の部分積の「1111.10」が得られる。乗数の仮数部の桁数DCは、デクリメントされ、「3」から「2」になる。
次に、シフト後の被乗数の仮数部の「111110」に対して乗数の仮数部の「000111」の下位2桁目の「1」を乗算し、1桁右シフトすることにより、仮数部の部分積の「11111.0」が得られる。乗数の仮数部の桁数DCは、デクリメントされ、「2」から「1」になる。
次に、シフト後の被乗数の仮数部の「111110」に対して乗数の仮数部の「000111」の下位3桁目の「1」を乗算することにより、仮数部の部分積の「111110」が得られる。乗数の仮数部の桁数DCは、デクリメントされ、「1」から「0」になる。
乗数の仮数部の桁数DCが「0」になると、上記の下位1桁目〜3桁目の部分積が加算され、中間積の「123332.1」が得られる。積の指数部は、「1」のままである。この状態で、積の出力OUT8が出力される。積の出力OUT8は、仮数部の整数部の「123332」及び小数部の「.1」と、指数部の「1」とを有する。この後、積の仮数部は、例えば小数部が四捨五入され、「123332」の仮数部と、「1」の指数部とが出力される。上記のように、左シフト量及び指数部を補正することにより、高精度の積が得られる。
図9は、第1の実施形態による乗算装置の構成例を示す図である。この乗算装置は、上記の図4〜図8の乗算を行うことができる。被乗数となる浮動小数点数は、正負符号sg1と、仮数部sf1と、指数部exp1とを有し、10進数の場合には、(−1)sg1×sf1×10exp1で表される。乗数となる浮動小数点数は、正負符号sg2と、仮数部sf2と、指数部exp2とを有し、10進数の場合には、(−1)sg2×sf2×10exp2で表される。正負符号sg1及びsg2は、「0」が正を表し、「1」が負を表す。
排他的論理和回路901は、正負符号演算回路であり、被乗数の正負符号sg1と乗数の正負符号sg2との排他的論理和値を正負符号sg0として出力する。すなわち、排他的論理和回路901は、被乗数となる浮動小数点数の正負符号sg1及び乗数となる浮動小数点数の正負符号sg2を入力し、両者の正負符号が同じであれば、積の浮動小数点数の正負符号sg0を正(値「0」)として出力し、両者の正負符号が異なれば、積の浮動小数点数の正負符号sg0を負(値「1」)として出力する。レジスタ919は、正負符号sg0を保持し、その正負符号sg0を積の浮動小数点数の正負符号sgとして出力する。
加算回路902は、被乗数となる浮動小数点数の指数部exp1と乗数となる浮動小数点の指数部exp2とを加算した値exp0(=exp1+exp2)を出力する。
被乗数リーディングゼロカウント回路903は、被乗数となる浮動小数点数の仮数部sf1の上位に連続するゼロの数を被乗数リーディングゼロカウント値LZC1としてカウントする。乗数リーディングゼロカウント回路904は、乗数となる浮動小数点数の仮数部sf2の上位に連続するゼロの数を乗数リーディングゼロカウント値LZC2としてカウントする。
減算回路906は、シフト量演算回路であり、「15」−LZC2を演算し、シフト量LSAを出力する。具体的には、減算回路906は、次式のように、仮数部sf1及びsf2の固定精度の桁数mに対して乗数リーディングゼロカウント値LZC2を減算して1を減算することによりシフト量LSAを演算する。ここで、mは、例えば16である。
LSA=m−LZC2−1
=16−LZC2−1
=15−LZC2
減算回路908は、シフト量LSAから被乗算リーディングゼロカウント値LZC1を減算し、LSA−LZC1を出力すると共に、キャリーアウトcoを出力する。キャリーアウトcoは、LSA−LZC1がゼロ以上である場合には「1」になり、LSA−LZC1が負値である場合には「0」になる。
加算回路909は、減算回路908の出力値「LSA−LZC1」と値exp0とを加算し、exp0+LSA−LZC1を出力する。セレクタ910は、キャリーアウトcoが「1」である場合には、値exp0を選択して出力し、キャリーアウトcoが「0」である場合(例えば図8の場合)には、値exp0+LSA−LZC1を選択して出力する。
インクリメント回路911は、レジスタ920の出力値expをインクリメントし、値exp+1を出力する。セレクタ912は、初回の中間積の乗算では、セレクタ910の出力値を選択して出力し、2回目以降の中間積の乗算では、インクリメント回路911の出力値を選択して出力する。レジスタ920の値は、制御回路918が出力する補正信号ext等に応じて、セレクタ912の出力値に更新され、積の浮動小数点数の指数部expとして出力される。
インクリメント回路913は、次式のように、シフト量LSAをインクリメントし、乗数の仮数部sf2の桁数DCを出力する。
DC=LSA+1
=(15−LZC2)+1
=(m−LZC2−1)+1
=m−LZC2
上記のように、減算回路906及びインクリメント回路913は、桁数演算回路であり、仮数部の固定精度の桁数mから乗数リーディングゼロカウント値LZC2を減算することにより乗数の仮数部の桁数DCを演算する。
デクリメント回路914は、レジスタ921の出力値DC0をデクリメントし、値DC0−1を出力する。セレクタ925は、初回の中間積の乗算では、乗数の仮数部sf2の桁数DCを選択して出力し、2回目以降の中間積の乗算では、デクリメント回路914の出力値を選択して出力する。レジスタ921の値は、後述する条件で、セレクタ925の出力値に更新され、値DC0として出力される。
セレクタ907は、キャリーアウトcoが「1」である場合には、シフト量LSAを選択して出力し、キャリーアウトcoが「0」である場合(例えば図8の場合)には、被乗算リーディングゼロカウント値LZC1を選択して出力する。
左シフト回路905は、セレクタ907の出力値だけ被乗数の仮数部sf1を左シフトし、被乗数の仮数部sft1を出力する。
乗算ループ回路(乗算回路)915は、rレジスタ922が出力する中間積r、被乗数の仮数部sft1、乗数の仮数部sf2及び補正信号extを入力し、乗数の仮数部sf2の桁単位で、中間積A1及び最下位桁A2を出力する。
図10は、図9の乗算ループ回路915の構成例を示す図である。以下、乗算ループ回路915の一例を示すが、種々の構成を採用することができる。セレクタ1001は、初回の中間積の乗算では、乗数の仮数部sf2を選択して出力し、2回目以降の中間積の乗数では、右シフト回路1007の出力値を選択して出力する。レジスタ1003の値は、中間積の乗算毎に、セレクタ1001の出力値に更新され、乗数の仮数部SFT2として出力される。右シフト回路1007は、乗数の仮数部SFT2を1桁右シフトして、セレクタ1001に出力する。レジスタ1002は、被乗数の仮数部sft1を記憶し、仮数部sft1を出力する。積生成セレクト回路1005は、被乗数の仮数部sft1の0倍から9倍までの倍数値を生成し、レジスタ1003に記憶される乗数の仮数部SFT2の最下位桁(4ビット)及び補正信号extに応じて、上記の倍数値を選択して部分積A3として出力する。
図11は、図10の積生成セレクト回路1005の入出力の対応関係を示す図である。入力値STF2[3:0]は、乗数の仮数部SFT2の最下位桁(4ビット)を示す。補正信号extが「0」である場合、入力値STF2[3:0]が「0」〜「9」である場合には、それぞれ、部分積A3は被乗数の仮数部sft1の「0」倍〜「9」倍の倍数値として出力される。また、補正信号extが「1」である場合、部分積A3は被乗数の仮数部sft1の「0」倍として出力される。
図10において、中間積rの最下位桁(4ビット)は、最下位桁A2として出力される。右シフト回路1004は、中間積rを1桁右シフトして出力する。加算回路1006は、右シフト回路1004の出力値と部分積A3とを加算し、中間積A1を出力する。ここで、積生成セレクト回路1005は、固定精度の桁数mより1桁多い精度の値を出力する。加算回路1006も、固定精度の桁数mより1桁多い精度の値を入出力する。
図9において、rレジスタ922には、乗算ループ回路915の中間積A1が入力される。rレジスタ922は、固定精度の桁数mより1桁多い精度の中間積rを記憶し、中間積rを乗算ループ回路915及び丸め処理回路917に出力する。
gレジスタ923には、乗算ループ回路915の最下位桁A2が入力される。gレジスタ923は、最下位桁gを記憶し、最下位桁gを丸め処理回路917及び論理和(OR)回路916に出力する。
論理和回路916は、最下位桁(4ビット)gのビット論理和値を出力する。すなわち、論理和回路916は、最下位桁gが「0」の場合には「0」を出力し、最下位桁gが「1」〜「9」の場合には「1」を出力する。sレジスタ924には、論理和回路916の出力値が入力される。sレジスタ924は、丸め処理用のスティッキービットsを記憶し、スティッキービットsを丸め処理回路917に出力する。
rレジスタ922には、中間積の仮数部の整数部が記憶される。gレジスタ923には、中間積の仮数部の小数第一位の桁が記憶される。sレジスタ924には、中間積の仮数部の小数第二位のスティッキービットが記憶される。
図12(A)〜(D)は、図9の制御回路918の制御方法を示す図である。制御回路918は、レジスタ921の出力値DC0と、rレジスタ922の最上位桁(m+1桁目)とを入力し、補正信号extを出力する。
図12(A)は、制御回路918が乗算ループ終了条件を満たすか否かの判定方法を示す図である。値DC0が0以下である場合に、制御回路918は、乗算ループ終了条件を満たすと判定する。
図12(B)は、制御回路918が出力する補正信号extを説明するための図である。図12(A)の乗算ループ終了条件を満たし、かつ中間積rの最上位桁が「1」〜「9」である場合には、制御回路918は「1」の補正信号extを出力し、それ以外の場合には、制御回路918は「0」の補正信号extを出力する。例えば、図7の場合、7桁の中間積の「9890100」の最上位桁が「9」であるので、「1」の補正信号extが出力される。補正信号extが「1」になると、図7に示したように、レジスタ920の値は、指数部expがインクリメントされた指数部exp+1に更新され、レジスタ922は、中間積rを1桁右シフトして出力する。
図12(C)は、レジスタ919〜924の更新停止条件を示す図である。正負符号sgのレジスタ919は、初回の中間積の乗算の時に更新され、2回目以降の中間積の乗算の時には更新が停止される。指数部expのレジスタ920は、値DC0がゼロ以上、かつ補正信号extが「0」の場合に、更新が停止される。値DC0のレジスタ921、rレジスタ922、gレジスタ923及びsレジスタ924は、乗数の仮数部の桁単位の中間積が算出される毎に更新される。レジスタ919〜924は、上記の更新停止条件を満たさない場合には更新される。
図12(D)は、丸め処理回路917の処理例を示す図である。制御回路918は、丸めモードに応じて、丸め処理回路917を制御する。丸め処理回路917は、レジスタ919の正負符号sgと、rレジスタ922の中間積rと、gレジスタ923の小数第一位桁gと、sレジスタ924のスティッキービットsとを入力し、丸め処理を行い、積の浮動小数点数の仮数部sfを出力する。
まず、丸めモードが「0」の場合を説明する。この丸めモードでは、丸め処理回路917は、銀行家丸めと呼ばれている丸め処理を行う。rレジスタ922の中間積rの最下位ビットが「1」である場合(中間積が奇数である場合)、gレジスタ923の小数第一位桁gが「5」であり、かつsレジスタ924のスティッキービットsが「0」である場合には、rレジスタ922の下位m桁の中間積に1を加算し、積の仮数部sfを出力する。例えば、「3.5」は、丸め処理により「4」になる。また、gレジスタ923の小数第一位桁gが「5」であり、かつsレジスタ924のスティッキービットsが「1」である場合には、丸め処理回路917は、rレジスタ922の下位m桁の中間積に1を加算し、積の仮数部sfを出力する。例えば、「2.51」は、丸め処理により「3」になる。また、gレジスタ923の小数第一位桁gが「6」〜「9」である場合には、rレジスタ922の下位m桁の中間積に1を加算し、積の仮数部sfを出力する。例えば、「2.6」は、丸め処理により「3」になる。
次に、丸めモードが「1」の場合を説明する。この丸めモードでは、丸め処理回路917は、切り捨ての丸め処理を行う。丸め処理回路917は、rレジスタ922の下位m桁の中間積をそのまま仮数部sfとして出力する。
次に、丸めモードが「2」の場合を説明する。この丸めモードでは、丸め処理回路917は、+∞の方向に丸め処理を行う。正負符号sgが「0」であり、かつgレジスタ923の小数第一位桁gが「1」〜「9」の場合には、丸め処理回路917は、rレジスタ922の下位m桁の中間積に1を加算し、積の仮数部sfを出力する。また、正負符号sgが「0」であり、かつsレジスタ924のスティッキービットsが「1」の場合には、丸め処理回路917は、rレジスタ922の下位m桁の中間積に1を加算し、積の仮数部sfを出力する。
次に、丸めモードが「3」の場合を説明する。この丸めモードでは、丸め処理回路917は、−∞の方向に丸め処理を行う。正負符号sgが「1」であり、かつgレジスタ923の小数第一位桁gが「1」〜「9」の場合には、丸め処理回路917は、rレジスタ922の下位m桁の中間積に1を加算し、積の仮数部sfを出力する。また、正負符号sgが「1」であり、かつsレジスタ924のスティッキービットsが「1」の場合には、丸め処理回路917は、rレジスタ922の下位m桁の中間積に1を加算し、積の仮数部sfを出力する。
次に、丸めモードが「4」の場合を説明する。この丸めモードでは、丸め処理回路917は、四捨五入の丸め処理を行う。gレジスタ923の小数第一位桁gが「5」〜「9」の場合には、丸め処理回路917は、rレジスタ922の下位m桁の中間積に1を加算し、積の仮数部sfを出力する。
なお、丸め処理が必要ない場合、gレジスタ923及びsレジスタ924の更新処理をスキップし、丸め処理回路917は、丸め処理を行わずに、rレジスタ922の下位m桁の中間積を仮数部sfとして出力してもよい。
以上の処理により、乗算装置は、正負符号sgと、指数部expと、仮数部sfとを含む浮動小数点数の積を出力する。
図4〜図6の場合、制御回路918は、乗算ループ回路915が出力する中間積A1の回数が乗数の仮数部sf2の桁数DCになった場合には、乗算ループ回路915が出力する中間積A1を積の浮動小数点数の仮数部sfとして出力し、加算回路902により出力された値exp0を積の浮動小数点数の指数部expとして出力する。
また、図7の場合、制御回路918は、乗算ループ回路915が出力する中間積A1の回数が乗数の仮数部sf2の桁数DCになり、かつ乗算ループ回路915が出力する中間積A1の桁数が積の固定精度の桁数mを超える場合には、乗算ループ回路915が出力する中間積A1を1桁右シフトした値を積の浮動小数点数の仮数部sfとして出力し、加算回路902により出力された値exp0をインクリメントした値を積の浮動小数点数の指数部expとして出力する。
また、図8の場合、減算回路908及び加算回路909は、指数部補正回路であり、加算回路902により出力された値exp0に対してシフト量LSAを加算して被乗数リーディングゼロカウント値LZC1を減算した値をセレクタ910に出力する。左シフト回路905は、シフト量LSAが被乗数リーディングゼロカウント値LZC1より大きい場合(キャリーアウトcoが「0」の場合)には、被乗数リーディングゼロカウント値LZC1だけ被乗数の仮数部sf1を左シフトする。制御回路918は、シフト量LSAが被乗数リーディングゼロカウント値LZC1より大きい場合(キャリーアウトcoが「0」の場合)には、加算回路909により出力された値を積の浮動小数点数の指数部expとして出力する。
また、制御回路918は、乗算ループ回路915が出力する中間積A1の回数が乗数の仮数部sf2の桁数DCになり、かつ乗算ループ回路915が出力する中間積A1の桁数が積の固定精度の桁数mを超える場合には、乗算ループ回路915が出力する中間積A1を1桁右シフトした値を積の浮動小数点数の仮数部sfとして出力し、加算回路909により出力された値をインクリメントした値を積の浮動小数点数の指数部sfとして出力する。
また、丸め処理回路917は、乗算ループ回路915が出力する中間積A1の回数が乗数の仮数部sf2の桁数DCになり、かつ乗算ループ回路915が出力する中間積の桁数が積の固定精度の桁数mを超える場合には、乗算ループ回路915が出力する中間積に対して丸め処理を行い、その丸め処理した中間積を積の浮動小数点数の仮数部sfとして出力する。
本実施形態によれば、非正規化固定精度浮動小数点数の乗算を行うことができる。また、図2のような桁落ちがなく、高精度の積が得られる。また、図3のように、m×2桁のシフト回路又はレジスタが必要ないので、物量及び遅延時間を低減することができる。また、乗算ループ回路915の中間積の算出のアルゴリズムは問わないので、既存の乗算ループ回路915を利用することが可能である。
(第2の実施形態)
図13は、第2の実施形態による乗算装置の構成例を示す図である。図13の乗算装置は、図9の乗算装置に対して、セレクタ1301、デクリメント回路1302及びレジスタ1303を追加したものである。以下、本実施形態が第1の実施形態と異なる点を説明する。
本実施形態は、64ビットのIEEE754−2008の浮動小数点10進数形式を入出力フォーマットとした固定レイテンシ乗算装置である。レジスタ1303は、カウント値LCを保持する。デクリメント回路1302は、レジスタ1303のカウント値LCをデクリメントし、LC−1を出力する。セレクタ1301には、仮数部sf1及びsf2の桁数m(例えば「16」)が入力される。桁数「16」は、固定レイテンシのカウント値である。セレクタ1301は、初回の中間積の乗算では、初期値「16」を選択して出力し、2回目以降の中間積の乗算では、デクリメント回路1302の出力値を選択して出力する。レジスタ1303は、セレクタ1301の出力値を保持する。レジスタ1303のカウント値LCは、制御回路918に出力される。制御回路918は、レジスタ921の出力値DC0と、rレジスタ922の最上位桁と、レジスタ1303のカウント値LCとを入力し、補正信号ext及びレジスタ更新停止信号stpを出力する。
図14(A)〜(D)は、図13の制御回路918の制御方法を示す図である。図14(A)は、制御回路918が乗算ループ終了条件を満たすか否かの判定方法を示す図である。レジスタ1303のカウント値LCが0以下である場合には、制御回路918は、乗算ループ終了条件を満たすと判定する。
図14(B)は、制御回路918が出力するレジスタ更新停止信号stpを説明するための図である。値DC0が0以下であり、かつ補正信号extが「0」である場合に、制御回路918は、「1」のレジスタ更新停止信号stpを出力する。レジスタ更新停止信号stpが「1」になると、レジスタ920及び922の値の更新が停止される。
図14(C)は、制御回路918が出力する補正信号extを説明するための図である。図14(A)の乗算ループ終了条件を満たし、rレジスタ922の最上位桁が「1」〜「9」である場合(図7の場合)には、制御回路918は「1」の補正信号extを出力し、それ以外の場合には、制御回路918は「0」の補正信号extを出力する。
図14(D)は、レジスタ919〜924,1303の更新停止条件を示す図である。レジスタ919〜924は、図12(C)の更新停止条件と同様である。カウント値LCのレジスタ1303は、乗数の仮数部の桁単位の中間積が算出される毎に更新される。
以上のように、制御回路918は、固定レイテンシのカウント値LC(初期値が「16」)をカウント後に、積の浮動小数点数の正負符号sg、仮数部sf及び指数部expを出力する。第1の実施形態の乗算装置は、被乗数及び乗数を入力してから積を出力するまでの時間が、被乗数及び乗数に応じて可変となる可変レイテンシである。これに対し、本実施形態の乗算装置は、被乗数及び乗数によらず、被乗数及び乗数を入力してから積を出力するまでの時間が一定となる固定レイテンシである。これにより、乗算装置の後段の回路の処理が容易になる。
なお、第1及び第2の実施形態では、10進数の場合を例に説明したが、10進数に限定されない。
上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
901 排他的論理和回路
902,909 加算回路
903 被乗数リーディングゼロカウント回路
904 乗数リーディングゼロカウント回路
905 左シフト回路
906,908 減算回路
907,910,912,925 セレクタ
911,913 インクリメント回路
914 デクリメント回路
915 乗算ループ回路
916 論理和回路
917 丸め処理回路
918 制御回路
919〜924 レジスタ

Claims (9)

  1. 乗数である浮動小数点数の仮数部の上位に連続するゼロの数を計数する計数回路と、
    前記仮数部の固定精度の桁数及び前記計数回路が計数した計数値を基にシフト量を演算するシフト量演算回路と、
    前記シフト量だけ被乗数である浮動小数点数の仮数部を左シフトするシフト回路と、
    前記仮数部の固定精度の桁数から前記計数値を減算して前記乗数の仮数部の桁数を演算する桁数演算回路と、
    前記シフト回路により左シフトされた被乗数の仮数部と、前記乗数の仮数部とを基に、前記乗数の仮数部の桁単位で中間積を出力する乗算回路と、
    前記被乗数である浮動小数点数の指数部と前記乗数である浮動小数点の指数部とを加算した値を出力する加算回路と、
    前記乗算回路が出力する中間積の回数が前記桁数演算回路により演算された桁数になる場合、前記乗算回路が出力する中間積を積の浮動小数点数の仮数部として出力し、前記加算回路により出力された値を積の浮動小数点数の指数部として出力する制御回路と
    を有することを特徴とする乗算装置。
  2. 前記制御回路は、前記乗算回路が出力する中間積の回数が前記桁数演算回路により演算された桁数になり、かつ前記乗算回路が出力する中間積の桁数が積の固定精度の桁数を超える場合には、前記乗算回路が出力する中間積を1桁右シフトした値を積の浮動小数点数の仮数部として出力し、前記加算回路により出力された値をインクリメントした値を積の浮動小数点数の指数部として出力することを特徴とする請求項1記載の乗算装置。
  3. さらに、前記被乗数の仮数部の上位に連続するゼロの数を計数する第2の計数回路と、
    前記加算回路により出力された値に対して前記シフト量を加算して前記第2の計数回路が計数した第2の計数値を減算した値を出力する指数部補正回路とを有し、
    前記シフト回路は、前記シフト量演算回路により演算されたシフト量が前記第2の計数値より大きい場合、前記第2の計数値だけ前記被乗数の仮数部を左シフトし、
    前記制御回路は、前記シフト量演算回路により演算されたシフト量が前記第2の計数値より大きい場合、前記指数部補正回路により出力された値を積の浮動小数点数の指数部として出力することを特徴とする請求項1記載の乗算装置。
  4. 前記制御回路は、前記乗算回路が出力する中間積の回数が前記桁数演算回路により演算された桁数になり、かつ前記乗算回路が出力する中間積の桁数が積の固定精度の桁数を超える場合には、前記乗算回路が出力する中間積を1桁右シフトした値を積の浮動小数点数の仮数部として出力し、前記指数部補正回路により出力された値をインクリメントした値を積の浮動小数点数の指数部として出力することを特徴とする請求項3記載の乗算装置。
  5. さらに、前記乗算回路が出力する中間積の回数が前記桁数演算回路により演算された桁数になり、かつ前記乗算回路が出力する中間積の桁数が積の固定精度の桁数を超える場合には、前記乗算回路が出力する中間積に対して丸め処理を行い、丸め処理した前記中間積を積の浮動小数点数の仮数部として出力する丸め処理回路を有することを特徴とする請求項1〜4のいずれか1項に記載の乗算装置。
  6. さらに、入力した前記被乗数である浮動小数点数の正負符号と前記乗数である浮動小数点数の正負符号が同じである場合、積の浮動小数点数の正負符号を正として出力し、入力した前記被乗数である浮動小数点数の正負符号と前記乗数である浮動小数点数の正負符号が異なる場合、積の浮動小数点数の正負符号を負として出力する正負符号演算回路を有することを特徴とする請求項1〜5のいずれか1項に記載の乗算装置。
  7. 前記シフト量演算回路は、前記仮数部の固定精度の桁数に対して前記計数値を減算して1を減算することにより前記シフト量を演算することを特徴とする請求項1〜6のいずれか1項に記載の乗算装置。
  8. 前記制御回路は、固定レイテンシの計数値を計数後に、前記積の浮動小数点数の仮数部及び指数部を出力することを特徴とする請求項1〜7のいずれか1項に記載の乗算装置。
  9. 計数回路が、乗数である浮動小数点数の仮数部の上位に連続するゼロの数を計数値として計数し、
    シフト量演算回路が、前記仮数部の固定精度の桁数及び前記計数値を基にシフト量を演算し、
    シフト回路が、前記シフト量だけ被乗数である浮動小数点数の仮数部を左シフトし、
    桁数演算回路が、前記仮数部の固定精度の桁数から前記計数値を減算することにより前記乗数の仮数部の桁数を演算し、
    乗算回路が、前記シフト回路により左シフトされた被乗数の仮数部と、前記乗数の仮数部とを基に、前記乗数の仮数部の桁単位で中間積を出力し、
    加算回路が、前記被乗数である浮動小数点数の指数部と前記乗数である浮動小数点の指数部とを加算した値を出力し、
    制御回路が、前記乗算回路が出力する中間積の回数が前記桁数演算回路により演算された桁数になる場合には、前記乗算回路が出力する中間積を積の浮動小数点数の仮数部として出力し、前記加算回路により出力された値を積の浮動小数点数の指数部として出力することを特徴とする乗算方法。
JP2012183419A 2012-08-22 2012-08-22 乗算装置及び乗算方法 Active JP5966764B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012183419A JP5966764B2 (ja) 2012-08-22 2012-08-22 乗算装置及び乗算方法
US13/924,661 US20140059097A1 (en) 2012-08-22 2013-06-24 Multiplying device and multiplying method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012183419A JP5966764B2 (ja) 2012-08-22 2012-08-22 乗算装置及び乗算方法

Publications (2)

Publication Number Publication Date
JP2014041474A JP2014041474A (ja) 2014-03-06
JP5966764B2 true JP5966764B2 (ja) 2016-08-10

Family

ID=50148983

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012183419A Active JP5966764B2 (ja) 2012-08-22 2012-08-22 乗算装置及び乗算方法

Country Status (2)

Country Link
US (1) US20140059097A1 (ja)
JP (1) JP5966764B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10127015B2 (en) 2016-09-30 2018-11-13 International Business Machines Corporation Decimal multiply and shift instruction
US10241757B2 (en) 2016-09-30 2019-03-26 International Business Machines Corporation Decimal shift and divide instruction
US11188303B2 (en) * 2019-10-02 2021-11-30 Facebook, Inc. Floating point multiply hardware using decomposed component numbers
CN113434113B (zh) * 2021-06-24 2022-03-11 上海安路信息科技股份有限公司 基于静态配置数字电路的浮点数乘累加控制方法及系统

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59154542A (ja) * 1983-02-23 1984-09-03 Hitachi Ltd 乗算装置
JPH0383126A (ja) * 1989-08-25 1991-04-09 Fujitsu Ltd 浮動小数点乗算器
US5347481A (en) * 1993-02-01 1994-09-13 Hal Computer Systems, Inc. Method and apparatus for multiplying denormalized binary floating point numbers without additional delay
JPH086762A (ja) * 1994-06-21 1996-01-12 Matsushita Electric Ind Co Ltd 乗算回路
US5844830A (en) * 1996-08-07 1998-12-01 Sun Microsystems, Inc. Executing computer instrucrions by circuits having different latencies
US6697833B2 (en) * 2001-01-18 2004-02-24 International Business Machines Corporation Floating-point multiplier for de-normalized inputs
EP1710690A1 (en) * 2005-04-07 2006-10-11 STMicroelectronics (Research & Development) Limited Multiplication circuitry

Also Published As

Publication number Publication date
US20140059097A1 (en) 2014-02-27
JP2014041474A (ja) 2014-03-06

Similar Documents

Publication Publication Date Title
KR102430645B1 (ko) 독립형 부동소수점 변환장치
US7546328B2 (en) Decimal floating-point adder
KR102318494B1 (ko) 곱셈 가산기
US8812575B2 (en) Decimal floating-point square-root unit using Newton-Raphson iterations
JP5966764B2 (ja) 乗算装置及び乗算方法
US9552189B1 (en) Embedded floating-point operator circuitry
KR101560340B1 (ko) 포화가 적용된 정수 곱셈 연산 및 곱셈-덧셈 연산
JP5966763B2 (ja) 除算装置及び除算方法
CN109901813B (zh) 一种浮点运算装置及方法
US9851947B2 (en) Arithmetic processing method and arithmetic processor having improved fixed-point error
WO1999040508A1 (en) Fast adder/subtractor for signed floating point numbers
KR102412746B1 (ko) 부동 소수점 제곱근 연산 장치 및 방법
US9400635B1 (en) Methods and apparatus for performing dynamic data alignment for floating-point operations
JP2502836B2 (ja) 除算回路の前処理装置
JP5397061B2 (ja) 演算処理装置、その制御方法および演算処理プログラム
JP2010218197A (ja) 浮動小数点積和演算装置、浮動小数点積和演算方法、及び浮動小数点積和演算用プログラム
JP2022162183A (ja) 演算装置および演算方法
EP3647939A1 (en) Arithmetic processing apparatus and controlling method therefor
Hass Synthesizing optimal fixed-point arithmetic for embedded signal processing
JPH0283728A (ja) 浮動小数点乗算装置
JP7247418B2 (ja) 乗算のための計算ユニット、方法及びコンピュータプログラム
JP5939893B2 (ja) 画像処理装置および画像処理方法
JP2951685B2 (ja) 固定小数点演算器
JP2006023974A (ja) 剰余演算処理装置及び剰余演算処理方法
JP5376659B2 (ja) 積和演算装置及び積和演算装置の制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150512

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160530

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160607

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160620

R150 Certificate of patent or registration of utility model

Ref document number: 5966764

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150