(57)【要約】ブロック浮動小数点処理を高精度に行うことができる小回路規模及び低消費電力の演算処理装置及び演算処理方法を提供する。  第１の正規化回路１２０は、共通の指数を持つ、複数の固定小数点表現のデータ又はブロック浮動小数点表現の仮数部のデータが複数サイクルのそれぞれにおいて入力され、複数サイクルのそれぞれの複数のデータに対する最大指数に基づいて、当該サイクルの複数のデータを当該複数のデータに共通の指数で正規化する第１の正規化を行う。丸め回路１２０は、第１の正規化が行われた複数のデータのそれぞれのビット幅を削減した複数の丸めデータを出力する。第１の記憶回路１４０は、複数サイクル分の第１の正規化が行われた複数の丸めデータを保持し、保持されている複数の丸めデータの内、複数の指定された丸めデータを出力する。第２の正規化回路１５０は、複数の指定された丸めデータのそれぞれについて、第１の正規化で用いられた最大指数と、当該最大指数の複数の指定された丸めデータについての最大値とに基づいて、複数の指定された丸めデータを当該複数の指定された丸めデータに共通の指数で正規化する第２の正規化を行い、出力する。
2012157132.tif 000002
【特許請求の範囲】
【請求項１】
共通の指数を持つ、複数の固定小数点表現のデータ又はブロック浮動小数点表現の仮数部のデータが複数サイクルのそれぞれにおいて入力され、前記複数サイクルのそれぞれの前記複数のデータに対する最大指数に基づいて、当該サイクルの複数のデータを当該複数のデータに共通の指数で正規化する第１の正規化を行う第１の正規化手段と、
前記第１の正規化が行われた前記複数のデータのそれぞれのビット幅を削減した複数の丸めデータを出力する丸め手段と、
前記複数サイクル分の前記第１の正規化が行われた前記複数の丸めデータを保持し、保持されている前記複数の丸めデータの内、複数の指定された前記丸めデータを出力する第１の記憶手段と、
前記複数の指定された前記丸めデータのそれぞれについて、前記第１の正規化で用いられた前記最大指数と、当該最大指数の前記複数の指定された前記丸めデータについての最大値とに基づいて、前記複数の指定された前記丸めデータを当該複数の指定された前記丸めデータに共通の指数で正規化する第２の正規化を行い、出力する第２の正規化手段と、
を含む演算処理装置。
【請求項２】
前記第２の正規化手段は、前記複数の指定された前記丸めデータのそれぞれについて、前記第１の正規化で用いられた前記最大指数を、当該最大指数の前記複数の指定された丸めデータについての最大値から減じた補正指数を算出し、当該補正指数に基づいて、前記複数の指定された前記丸めデータのそれぞれを正規化する、
請求項１に記載の演算処理装置。
【請求項３】
前記第１の正規化手段は、第１の正規化フェーズにおいてｎ（ｎは、２以上の整数）個の固定小数点表現のデータ又はブロック浮動小数点表現の仮数部のデータがｍ（ｍは、２以上の整数）サイクルのそれぞれにおいて入力され、前記ｎ個のデータに対する最大指数に基づいて、前記ｎ個のデータをサイクルごとに正規化し、
前記丸め手段は、前記第１の正規化手段により正規化された前記ｎ個のデータのそれぞれのビット幅を削減したｎ個の丸めデータをサイクルごとに出力し、
前記第１の記憶手段は、前記第１の正規化フェーズにおいて、前記ｍサイクル分の（ｍ×ｎ）個の前記丸めデータを保持し、前記第１の正規化フェーズ後の第２の正規化フェーズにおいて、保持されている前記丸めデータから選択したｎ個の指定された前記丸めデータをサイクルごとに出力し、
前記第２の正規化手段は、前記第２の正規化フェーズにおいて、前記ｍサイクル分のｍ個の前記最大指数からｎ個を選択し、前記ｎ個の前記最大指数の最大値から前記ｎ個の前記最大指数のそれぞれを減じたｎ個の補正指数を算出し、前記ｎ個の補正指数に基づいて前記ｎ個の指定された前記丸めデータのそれぞれをサイクルごとに正規化し、
前記第２の正規化手段で正規化されるｋ（ｋは、１以上ｎ以下の整数）番目の前記丸めデータが生成されたサイクルと、当該ｋ番目の前記丸めデータを第２の正規化手段で正規化する際に用いた前記補正指数の算出に用いた前記最大指数に対応するサイクルと、が同じである、
請求項２に記載の演算処理装置。
【請求項４】
前記第２の正規化手段は、
前記第１の正規化フェーズにおいて、前記ｍ個の前記最大指数のそれぞれを、外部からの指数書き込みアドレスで指定されたアドレスに保持し、前記第２の正規化フェーズにおいて、外部からの指数読み出しアドレスで指定されたｎ個のアドレスに保持されているｎ個の前記最大指数をサイクルごとに出力する第２の記憶手段と、
前記第２の記憶手段から出力される前記ｎ個の前記最大指数の最大値を検出し、前記最大値から前記ｎ個の前記最大指数のそれぞれを減じたｎ個の前記補正指数をサイクルごとに算出する第１の算出手段と、を含む、
請求項３に記載の演算処理装置。
【請求項５】
前記第１の記憶手段は、
前記第１の正規化フェーズにおいて、前記（ｍ×ｎ）個の前記丸めデータのそれぞれを外部からの書き込みアドレスで指定されたアドレスに保持し、前記第２の正規化フェーズにおいて、外部からの読み出しアドレスで指定されたアドレスに保持されている前記丸めデータをサイクルごとにｎ個ずつ出力する、
請求項３又は４に記載の演算処理装置。
【請求項６】
前記第２の正規化手段は、前記ｎ個の補正指数に基づいてｎ個の指定された前記丸めデータのそれぞれのビットをサイクルごとにシフトさせるｎ個の第１のシフト手段を更に含む、
請求項３乃至５のいずれか一項に記載の演算処理装置。
【請求項７】
前記第１の正規化手段は、受け取った前記ｎ個のデータのそれぞれを正規化するためのｎ個の指数をサイクルごとに算出し、前記ｎ個の指数の最大値を前記最大指数として出力する第２の算出手段と、
前記最大指数に基づいて前記ｎ個のデータのそれぞれのビットをサイクルごとにシフトさせるｎ個の第２のシフト手段と、を含む、
請求項３乃至６のいずれか一項に記載の演算処理装置。
【請求項８】
前記丸め手段は、前記第１の正規化手段で正規化された前記ｎ個のデータのそれぞれのビット幅をサイクルごとに削減するｎ個の丸め手段を含む、
請求項３乃至７のいずれか一項に記載の演算処理装置。
【請求項９】
共通の指数を持つ、複数の固定小数点表現のデータ又はブロック浮動小数点表現の仮数部のデータが複数サイクルのそれぞれにおいて入力され、前記複数サイクルのそれぞれの前記複数のデータに対する最大指数に基づいて、当該サイクルの複数のデータを当該複数のデータに共通の指数で正規化する第１の正規化を行い、
前記第１の正規化が行われた前記複数のデータのそれぞれのビット幅を削減した複数の丸めデータを出力し、
前記複数サイクル分の前記第１の正規化が行われた前記複数の丸めデータを保持し、保持されている前記複数の丸めデータの内、複数の指定された前記丸めデータを出力し、
前記複数の指定された前記丸めデータのそれぞれについて、前記第１の正規化で用いられた前記最大指数と、当該最大指数の前記複数の指定された前記丸めデータについての最大値とに基づいて、前記複数の指定された前記丸めデータを当該複数の指定された前記丸めデータに共通の指数で正規化する第２の正規化を行い、出力する
演算処理方法。
【請求項１０】
前記第２の正規化を行う場合、前記複数の指定された前記丸めデータのそれぞれについて、前記第１の正規化で用いられた前記最大指数を、当該最大指数の前記複数の指定された丸めデータについての最大値から減じた補正指数を算出し、当該補正指数に基づいて、前記複数の指定された前記丸めデータのそれぞれを正規化する
請求項９に記載の演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理方法に関し、特にブロック浮動小数点処理を行う演算処理装置及び演算処理方法に関する。
【背景技術】
【０００２】
ディジタル信号処理において、浮動小数点による演算は、扱う信号データの値の範囲が広い場合でも高い精度で演算できるという利点がある。一方で、複雑な回路が必要になるため、回路規模や消費電力が大きいという問題がある。また、固定小数点による演算は、回路が単純で、回路規模や消費電力が小さいという利点がある一方で、演算精度が低いという問題がある。
これに対し、浮動小数点と固定小数点の双方の利点を兼ね備えた演算方法として、ブロック浮動小数点による演算がある。ブロック浮動小数点による演算では、複数の信号データを１つのブロックとしてまとめ、各ブロック単位で共通の指数をもつように、ブロック全体で正規化する。
より詳細には、ブロック浮動小数点処理において、次のステップでブロック浮動小数点の正規化処理を行う（例えば、特許文献１、特許文献２）。
（１）ブロック内の全データの最大指数を求める。
（２）前記最大指数によりブロック全体をシフト（正規化）する。
ここで最大指数とは、ブロック内の全てのデータが桁あふれを起こさない最大の指数を示す。最大指数はブロック内の全データのうち、絶対値が最大のデータの指数値に等しい。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平９−１２８２１３号公報
【特許文献２】特開平８−２１２０５２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
以下に、通常のブロック浮動小数点の正規化処理の具体例を説明する。図５は、ブロック浮動小数点の正規化処理を行う通常の演算処理装置２００の構成を示すブロック図である。演算処理装置２００は、第１の演算回路２０１、正規化回路２０２、データメモリ回路２０３、丸め回路２４１〜２４３及び第２の演算回路２０４を有する。
第１の演算回路２０１は、受け取った３つの入力データに対して演算を行い、演算結果をそれぞれデータＤ２１１〜Ｄ２１３として出力する。第１の演算回路２０１には、１つのブロックを構成する異なる入力データが順次入力される。例えば、図５においては、第１の演算回路２０１は、ブロックを構成する９個の入力データを受け取る。この場合、第１の演算回路２０１は、３つの入力データを、３つのサイクルに分けて受けとる。そして、第１の演算回路２０１は、受け取った入力データに対して演算を行い、演算結果であるデータＤ２１１〜Ｄ２１３を３サイクルに分けて出力する。入力データは、例えば、外部装置（図示せず）から第１の演算回路２０１に順次出力される。
正規化回路２０２は、最大指数算出回路２１０及びシフト回路２２１〜２２３を有する。最大指数算出回路２１０は、第１の演算回路２０１から順次出力される、ブロックを構成するデータＤ２１１〜Ｄ２１３を受け取り、１つのブロックに属するデータＤ２１１〜Ｄ２１３の最大指数Ｉｍａｘを算出する。すなわち、第１の演算回路２０１からブロックを受け取るごとに、最大指数Ｉｍａｘの算出動作を行う。そして、最大指数算出回路２１０は、算出した最大指数Ｉｍａｘを出力する。
データメモリ回路２０３は、第１の演算回路２０１からデータＤ２１１〜Ｄ２１３を受け取り、最大指数算出回路２１０がブロックに属するデータＤ２１１〜Ｄ２１３の最大指数Ｉｍａｘを算出している間、同じブロックに属するデータＤ２１１〜Ｄ２１３を保持する。すなわち、データメモリ回路２０３は、データＤ２１１〜Ｄ２１３をブロック単位で保持する。具体的には、データメモリ回路２０３は、外部から受け取る書き込みアドレスＡｗ２１〜Ａｗ２３に対応するアドレスに、データＤ２１１〜Ｄ２１３のそれぞれを格納して保持する。
そして、データメモリ回路２０３は、最大指数算出回路２１０が最大指数Ｉｍａｘの算出を完了した後、保持しているデータＤ２１１〜Ｄ２１３を、データＤ２２１〜Ｄ２２３として出力する。このとき、データメモリ回路２０３は、データＤ２１１〜Ｄ２１３の順番を並べ替えて、データＤ２２１〜Ｄ２２３として出力することが可能である。具体的には、データメモリ回路２０３は、外部から受け取る読み出しアドレスＡｒ２１〜Ａｒ２３に対応するアドレスに保持しているデータを、それぞれデータＤ２２１〜Ｄ２２３として出力する。
データメモリ回路２０３に入力する書き込みアドレスＡｗ２１〜Ａｗ２３及び読み出しアドレスＡｒ２１〜Ａｒ２３は、例えば、外部装置（図示せず）からデータメモリ回路２０３に順次出力される。
正規化回路２０２のシフト回路２２１〜２２３は、データメモリ回路２０３からデータＤ２２１〜Ｄ２２３を受け取る。そして、シフト回路２２１〜２２３は、最大指数算出回路２１０が算出した最大指数Ｉｍａｘに基づいて、Ｄ２２１〜Ｄ２２３のそれぞれをシフトさせる。これにより、データＤ２２１〜Ｄ２２３は正規化処理がなされる。シフト回路２２１〜２２３は、正規化処理後のデータを、データＤ２３１〜Ｄ２３３として出力する。
丸め回路２４１〜２４３のそれぞれは、シフト回路２２１〜２２３からデータＤ２３１〜Ｄ２３３を受け取る。そして、丸め回路２４１〜２４３は、データＤ２３１〜Ｄ２３３のそれぞれに対して丸め処理を行い、データのビット幅が削減されたデータＤ２４１〜Ｄ２４３を出力する。
第２の演算回路２０４は、丸め回路２４１〜２４３からデータＤ２４１〜Ｄ２４３を受け取る。そして、第２の演算回路２０４は、データＤ２４１〜Ｄ２４３のそれぞれに対して演算を行い、演算結果を出力データとして外部装置（不図示）へ出力する。
以上より、演算処理装置２００は、丸め回路２４１〜２４３の丸め処理により、データのビット幅を削減するので、第１の演算回路２０１が出力するデータＤ２１１〜Ｄ２１３のビット幅よりも、第２の演算回路が受け取るデータＤ２４１〜Ｄ２４３のビット幅を小さくすることができる。
続いて、演算処理装置２００の動作について詳述する。図６は、演算処理装置２００の動作を示すタイミングチャートである。以下では、演算処理装置２００の処理対象となるブロックは、１２ビットのデータであるデータＤ１〜Ｄ９により構成される。また、データＤ１〜Ｄ９の値は、２の補数表現で示される。なお、データのビット列において、最も左のビットがＭＳＢ（Ｍｏｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）であり、最も右のビットがＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）である。ＭＳＢは、符号ビットを示す。
演算処理装置２００の動作は、サイクルＣ１〜Ｃ６からなる。また、演算処理装置２００の動作は、サイクルＣ１〜Ｃ３とサイクルＣ４〜Ｃ６とに大別される。以下では、まず、サイクルＣ１〜Ｃ３について説明する。サイクルの進行は、例えばクロック信号ＣＬＫを用いて制御される。
第１の演算回路２０１は、サイクルＣ１において、３つの入力データに対して演算を行い、その結果をそれぞれデータＤ２１１〜Ｄ２１３として出力する。このとき出力されるデータＤ２１１〜Ｄ２１３を、それぞれデータＤ１〜Ｄ３と表記する。次いで、第１の演算回路２０１は、サイクルＣ２において、３つの入力データに対して演算を行い、その結果をそれぞれデータＤ２１１〜Ｄ２１３として出力する。このとき出力されるデータＤ２１１〜Ｄ２１３を、それぞれデータＤ４〜Ｄ６と表記する。次いで、第１の演算回路２０１は、サイクルＣ３において、３つの入力データに対して演算を行い、その結果をそれぞれデータＤ２１１〜Ｄ２１３として出力する。このとき出力されるデータＤ２１１〜Ｄ２１３を、それぞれデータＤ７〜Ｄ９と表記する。以下に、データＤ１〜Ｄ９を例示する。
データＤ１（サイクルＣ１、データＤ２１１）：０００１０１１１０１１１
データＤ２（サイクルＣ１、データＤ２１２）：００１１０００１０００１
データＤ３（サイクルＣ１、データＤ２１３）：０００００１１０１１００
データＤ４（サイクルＣ２、データＤ２１１）：１１１１００１１１０００
データＤ５（サイクルＣ２、データＤ２１２）：１１１１１０００００００
データＤ６（サイクルＣ２、データＤ２１３）：００００００１００１０１
データＤ７（サイクルＣ３、データＤ２１１）：００００１０１１１１１０
データＤ８（サイクルＣ３、データＤ２１２）：００００１１０１０００１
データＤ９（サイクルＣ３、データＤ２１３）：００００１０１１１００１
最大指数算出回路２１０は、ブロックを構成するデータＤ１〜Ｄ９を逐次受けとる。そして、最大指数算出回路２１０は、データＤ１〜Ｄ９の最大指数を算出する。具体的には、最大指数算出回路２１０は、データＤ１〜Ｄ９のそれぞれの絶対値を算出する。以下に、データＤ１〜Ｄ９のそれぞれの絶対値ＡＢＳ１〜ＡＢＳ９を示す。
絶対値ＡＢＳ１（データＤ１の絶対値）：０００１０１１１０１１１
絶対値ＡＢＳ２（データＤ２の絶対値）：００１１０００１０００１
絶対値ＡＢＳ３（データＤ３の絶対値）：０００００１１０１１００
絶対値ＡＢＳ４（データＤ４の絶対値）：００００１１００１０００
絶対値ＡＢＳ５（データＤ５の絶対値）：００００１０００００００
絶対値ＡＢＳ６（データＤ６の絶対値）：００００００１００１０１
絶対値ＡＢＳ７（データＤ７の絶対値）：００００１０１１１１１０
絶対値ＡＢＳ８（データＤ８の絶対値）：００００１１０１０００１
絶対値ＡＢＳ９（データＤ９の絶対値）：００００１０１１１００１
次に、最大指数算出回路２１０は、絶対値ＡＢＳ１〜ＡＢＳ９の論理和ＡＤＤを算出する。以下に、絶対値ＡＢＳ１〜ＡＢＳ９の論理和を示す。
論理和ＡＤＤ（絶対値ＡＢＳ１〜ＡＢＳ９の論理和）：００１１１１１１１１１１
次に、最大指数算出回路２１０は、論理和ＡＤＤのＭＳＢ（Ｍｏｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）側から見て最初にビットの値が１となるビット位置を検出する。この例では、論理和ＡＤＤのＭＳＢ側から見て最初にビットの値が１となる、９ビット目を検出する（ここで、ＭＳＢを１１ビット目、ＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）を０ビット目とする）。
ここで、データＤ１〜Ｄ９を共通の指数で正規化するために、データＤ１〜Ｄ９を同一のシフト量で左にビットシフトする場合について検討する。この場合、シフト量が１ビットであれば、データＤ１〜Ｄ９の符号はいずれも変化せずに、正規化後の値が正しく表現される。したがって、この場合の最大指数Ｉｍａｘは「−１」である。
サイクルＣ１〜Ｃ３の間、すなわち最大指数算出回路２１０がデータＤ１〜Ｄ９の最大指数Ｉｍａｘを算出している間、データメモリ回路２０３は、データＤ１〜Ｄ９を受け取って保持する。そして、最大指数算出回路２１０が最大指数Ｉｍａｘの算出を完了した後のサイクルＣ４〜Ｃ６で、データメモリ回路２０３は、保持していたデータＤ１〜Ｄ９を、データＤ２２１〜Ｄ２２３として出力する。このとき、データメモリ回路２０３は、第２の演算回路２０４が行う演算に供するため、データＤ２２１〜Ｄ２２３を、例えば以下の要領で出力する。
サイクルＣ１において、データメモリ回路２０３は、書き込みアドレスＡｗ２１〜Ａｗ２３により指定されたアドレスＡ１〜Ａ３に、データＤ１〜Ｄ３のそれぞれを格納する。また、サイクルＣ２において、データメモリ回路２０３は、書き込みアドレスＡｗ２１〜Ａｗ２３により指定されたアドレスＡ４〜Ａ６に、データＤ４〜Ｄ６のそれぞれを格納する。また、サイクルＣ３において、データメモリ回路２０３は、書き込みアドレスＡｗ２１〜Ａｗ２３により指定されたアドレスＡ７〜Ａ９に、データＤ７〜Ｄ９のそれぞれを格納する。
続いて、サイクルＣ４〜Ｃ６について説明する。サイクルＣ４〜Ｃ６では、最大指数算出回路２１０は、算出した最大指数Ｉｍａｘである「−１」を、シフト回路２２１〜２２３に出力する。
サイクルＣ４において、データメモリ回路２０３は、読み出しアドレスＡｒ２１により指定されたアドレスＡ１に保持しているデータＤ１を、データＤ２２１として出力する。また、データメモリ回路２０３は、読み出しアドレスＡｒ２２により指定されたアドレスＡ３に保持しているデータＤ３を、データＤ２２２として出力する。さらに、データメモリ回路２０３は、読み出しアドレスＡｒ２３により指定されたアドレスＡ５に保持しているデータＤ５を、データＤ２２３として出力する。
サイクルＣ５において、データメモリ回路２０３は、読み出しアドレスＡｒ２１により指定されたアドレスＡ２に保持しているデータＤ２を、データＤ２２１として出力する。また、データメモリ回路２０３は、読み出しアドレスＡｒ２２により指定されたアドレスＡ４に保持しているデータＤ４を、データＤ２２２として出力する。さらに、データメモリ回路２０３は、読み出しアドレスＡｒ２３により指定されたアドレスＡ７に保持しているデータＤ７を、データＤ２２３として出力する。
サイクルＣ６において、データメモリ回路２０３は、読み出しアドレスＡｒ２１により指定されたアドレスＡ６に保持しているデータＤ６を、データＤ２２１として出力する。また、データメモリ回路２０３は、読み出しアドレスＡｒ２２により指定されたアドレスＡ８に保持しているデータＤ８を、データＤ２２２として出力する。さらに、データメモリ回路２０３は、読み出しアドレスＡｒ２３により指定されたアドレスＡ９に保持しているデータＤ９を、データＤ２２３として出力する。
シフト回路２２１〜２２３のそれぞれは、最大指数Ｉｍａｘの値「−１」に基づいて、データＤ２２１〜Ｄ２２３として出力されるデータＤ１〜Ｄ９をシフトして、正規化処理を行う。シフト回路２２１〜２２３は、正規化処理によりデータＤ１〜Ｄ９から生成された正規化データＮＤ１〜ＮＤ９を出力する。
具体的には、サイクルＣ４において、シフト回路２２１〜２２３のそれぞれは、データＤ２２１〜Ｄ２２３として出力されたデータＤ１、Ｄ３及びＤ５を、最大指数Ｉｍａｘの値「−１」に基づいてシフトする。これにより、正規化データＮＤ１、ＮＤ３及びＮＤ５が生成される。正規化データＮＤ１、ＮＤ３及びＮＤ５は、それぞれデータＤ２３１〜Ｄ２３３として出力される。
サイクルＣ５において、シフト回路２２１〜２２３のそれぞれは、データＤ２２１〜Ｄ２２３として出力されたデータＤ２、Ｄ４及びＤ７を、最大指数Ｉｍａｘの値「−１」に基づいてシフトする。これにより、正規化データＮＤ２、ＮＤ４及びＮＤ７が生成される。正規化データＮＤ２、ＮＤ４及びＮＤ７は、それぞれデータＤ２３１〜Ｄ２３３として出力される。
サイクルＣ６において、シフト回路２２１〜２２３のそれぞれは、データＤ２２１〜Ｄ２２３として出力されたデータＤ６、Ｄ８及びＤ９を、最大指数Ｉｍａｘの値「−１」に基づいてシフトする。これにより、正規化データＮＤ６、ＮＤ８及びＮＤ９が生成される。正規化データＮＤ６、ＮＤ８及びＮＤ９は、それぞれデータＤ２３１〜Ｄ２３３として出力される。
以下に、正規化データＮＤ１〜ＮＤ９を示す。
（サイクルＣ４）
正規化データＮＤ１：００１０１１１０１１１０
正規化データＮＤ３：００００１１０１１０００
正規化データＮＤ５：１１１１００００００００
（サイクルＣ５）
正規化データＮＤ２：０１１０００１０００１０
正規化データＮＤ４：１１１００１１１００００
正規化データＮＤ７：０００１０１１１１１００
（サイクルＣ６）
正規化データＮＤ６：０００００１００１０１０
正規化データＮＤ８：０００１１０１０００１０
正規化データＮＤ９：０００１０１１１００１０
丸め回路２４１〜２４３のそれぞれは、サイクルＣ４〜Ｃ６において、データＤ２４１〜Ｄ２４３として出力される正規化データＮＤ１〜ＮＤ９に対して、丸め処理を行う。これにより、正規化データＮＤ１〜ＮＤ９のビット幅を６ビットに削減した丸めデータＲＤ１〜ＲＤ９を生成する。
具体的には、サイクルＣ４において、丸め回路２４１〜２４３のそれぞれは、データＤ２３１〜Ｄ２３３として出力された正規化データＮＤ１、ＮＤ３及びＮＤ５を丸め、丸めデータＲＤ１、ＲＤ３及びＲＤ５を生成する。丸めデータＲＤ１、ＲＤ３及びＲＤ５は、それぞれデータＤ２４１〜Ｄ２４３として出力される。
サイクルＣ５において、丸め回路２４１〜２４３のそれぞれは、データＤ２３１〜Ｄ２３３として出力された正規化データＮＤ２、ＮＤ４及びＮＤ７を丸め、丸めデータＲＤ２、ＲＤ４及びＲＤ７を生成する。丸めデータＲＤ２、ＲＤ４及びＲＤ７は、それぞれデータＤ２４１〜Ｄ２４３として出力される。
サイクルＣ６において、丸め回路２４１〜２４３のそれぞれは、データＤ２３１〜Ｄ２３３として出力された正規化データＮＤ６、ＮＤ８及びＮＤ９を丸め、丸めデータＲＤ６、ＲＤ８及びＲＤ９を生成する。丸めデータＲＤ６、ＲＤ８及びＲＤ９は、それぞれデータＤ２４１〜Ｄ２４３として出力される。
以下に、丸めデータＲＤ１〜ＲＤ９を示す。
（サイクルＣ４）
丸めデータＲＤ１：００１０１１
丸めデータＲＤ３：００００１１
丸めデータＲＤ５：１１１１００
（サイクルＣ５）
丸めデータＲＤ２：０１１０００
丸めデータＲＤ４：１１１００１
丸めデータＲＤ７：０００１０１
（サイクルＣ６）
丸めデータＲＤ６：０００００１
丸めデータＲＤ８：０００１１０
丸めデータＲＤ９：０００１０１
第２の演算回路２０４は、シフト回路２２１〜２２３のそれぞれが出力するデータＤ２４１〜Ｄ２４３に対して演算を行い、その結果をそれぞれ出力する。
具体的には、サイクルＣ４において、第２の演算回路２０４は、丸めデータＲＤ１、ＲＤ３及びＲＤ５に対して演算を行い、その結果をそれぞれ出力する。サイクルＣ５において、第２の演算回路２０４は、丸めデータＲＤ２、ＲＤ４及びＲＤ７に対して演算を行い、その結果をそれぞれ出力する。サイクルＣ６において、第２の演算回路２０４は、丸めデータＲＤ６、ＲＤ８及びＲＤ９に対して演算を行い、その結果をそれぞれ出力する。
上述したように、演算処理装置２００は、丸め回路２４１〜２４３が丸め処理を行う前に、正規化回路２０２が正規化処理を行う。そのため、冗長ではない有効なビットを保存したまま、丸め処理によりビット幅を削減することができる。よって、固定小数点のままで丸め処理を行う場合に比べて、演算精度を高くすることができる。
また、演算処理装置２００は、丸め回路２４１〜２４３が丸め処理を行うことにより、データのビット幅を削減する。そのため、第１の演算回路２０１が出力するデータのビット幅よりも、第２の演算回路２０４が受け取るデータのビット幅を小さくすることができる。すなわち、第２の演算回路２０４が演算するデータのビット幅を小さくすることができる。従って、第２の演算回路２０４の回路規模や消費電力を小さくすることができる。
ところが、演算処理装置２００では、最大指数を算出するために、正規化処理及び丸め処理を行う前のブロック内の全データを、データメモリ回路２０３に保持する必要がある。そのため、データメモリ回路２０３に必要とされるメモリ容量が大きくなる。その結果、回路規模が大きくなってしまうという問題がある。
また、演算処理装置２００では、ブロック内の全データを共通の指数によって正規化する。そのため、データ処理のデータ数が大きくなると、各データの値の範囲（ダイナミックレンジ）が広い場合に、精度が劣化してしまうという問題がある。
本発明は上記の事情を鑑みて成されたものであり、本発明の目的は、ブロック浮動小数点処理を高精度に行うことができる、小回路規模の演算処理装置及び演算処理方法を提供することである。
【課題を解決するための手段】
【０００５】
本発明の一態様である演算処理装置は、共通の指数を持つ、複数の固定小数点表現のデータ又はブロック浮動小数点表現の仮数部のデータが複数サイクルのそれぞれにおいて入力され、前記複数サイクルのそれぞれの前記複数のデータに対する最大指数に基づいて、当該サイクルの複数のデータを当該複数のデータに共通の指数で正規化する第１の正規化を行う第１の正規化手段と、前記第１の正規化が行われた前記複数のデータのそれぞれのビット幅を削減した複数の丸めデータを出力する丸め手段と、前記複数サイクル分の前記第１の正規化が行われた前記複数の丸めデータを保持し、保持されている前記複数の丸めデータの内、複数の指定された前記丸めデータを出力する第１の記憶手段と、前記複数の指定された前記丸めデータのそれぞれについて、前記第１の正規化で用いられた前記最大指数と、当該最大指数の前記複数の指定された前記丸めデータについての最大値とに基づいて、前記複数の指定された前記丸めデータを当該複数の指定された前記丸めデータに共通の指数で正規化する第２の正規化を行い、出力する第２の正規化手段と、を含む。
本発明の一態様である演算処理方法は、共通の指数を持つ、複数の固定小数点表現のデータ又はブロック浮動小数点表現の仮数部のデータが複数サイクルのそれぞれにおいて入力され、前記複数サイクルのそれぞれの前記複数のデータに対する最大指数に基づいて、当該サイクルの複数のデータを当該複数のデータに共通の指数で正規化する第１の正規化を行い、前記第１の正規化が行われた前記複数のデータのそれぞれのビット幅を削減した複数の丸めデータを出力し、前記複数サイクル分の前記第１の正規化が行われた前記複数の丸めデータを保持し、保持されている前記複数の丸めデータの内、複数の指定された前記丸めデータを出力し、前記複数の指定された前記丸めデータのそれぞれについて、前記第１の正規化で用いられた前記最大指数と、当該最大指数の前記複数の指定された前記丸めデータについての最大値とに基づいて、前記複数の指定された前記丸めデータを当該複数の指定された前記丸めデータに共通の指数で正規化する第２の正規化を行い、出力する。
【発明の効果】
【０００６】
本発明によれば、ブロック浮動小数点処理を高精度に行うことができる、小回路規模の演算処理装置及び演算処理方法を提供することができる。
【図面の簡単な説明】
【０００７】
【図１】実施の形態１にかかる演算処理装置１００の構成を示すブロック図である。
【図２】実施の形態１にかかる演算処理装置１００の構成を更に詳細に表示したブロック図である。
【図３】実施の形態１にかかる演算処理装置１００の第１の正規化フェーズ（サイクルＣ１〜Ｃ３）における動作を示すタイミングチャートである。
【図４】実施の形態１にかかる演算処理装置１００の第２の正規化フェーズ（サイクルＣ４〜Ｃ６）における動作を示すタイミングチャートである。
【図５】ブロック浮動小数点の正規化処理を行う通常の演算処理装置２００の構成を示すブロック図である。
【図６】演算処理装置２００の動作を示すタイミングチャートである。
【図７】実施の形態１にかかる特徴的な構成を示すブロック図である。
【発明を実施するための形態】
【０００８】
以下、図面を参照して本発明の実施の形態について説明する。各図面においては、同一要素には同一の符号が付されており、必要に応じて重複説明は省略される。
実施の形態１
まず、本発明の実施の形態１にかかる演算処理装置１００について説明する。図１は、実施の形態１にかかる演算処理装置１００の構成を示すブロック図である。演算処理装置１００は、第１の正規化回路１２０、丸め回路１３０、データメモリ回路１４０、第２の正規化回路１５０を有する。なお、第１の正規化回路１２０及び第２の正規化回路１５０は、それぞれ第１及び第２の正規化手段に相当する。丸め回路１３０は、丸め手段に相当する。データメモリ回路１４０は、第１の記憶手段に相当する。
演算処理装置１００には、複数のデータからなるブロックを構成する固定小数点表現のデータ又はブロック浮動小数点表現の仮数部のデータが、第１の演算回路１１０を介して複数入力される。換言すれば、演算処理装置１００には、１サイクルあたりｎ（ｎは、２以上の整数）個のデータがｍ（ｍは、２以上の整数）サイクル入力される。この場合、１つのブロックを構成するデータ数は、（ｍ×ｎ）個となる。
以下では、説明の簡略化のため、演算処理装置１００には、３つのデータが３サイクル入力される場合について説明する。この場合、第１の演算回路１１０には、１つのブロックを構成する異なる入力データが３つずつ順次入力される。そして、第１の演算回路１１０は、受け取った３つの入力データに対して演算を行い、演算結果をそれぞれデータＤ１１１〜Ｄ１１３として出力する。入力データは、例えば、外部装置（図示せず）から第１の演算回路１１０に順次出力される。例えば、図１においては、第１の演算回路１１０は、ブロックを構成する９個の入力データを受け取る。この場合、第１の演算回路１１０は、３つの入力データを、３つのサイクルに分けて受け取る。そして、第１の演算回路１１０は、受け取った入力データに対して演算を行い、演算結果であるデータＤ１１１〜Ｄ１１３を３サイクル出力する。
演算処理装置１００は、入力されたブロックを構成するデータに対して所定の処理を行い、第２の演算回路１６０へ処理後のデータＤ１５１〜１５３を出力する。第２の演算回路１６０は、データＤ１５１〜Ｄ１５３のそれぞれに対して演算を行い、演算結果を外部装置（不図示）へ出力する。
図２は、演算処理装置１００の構成を更に詳細に表示した図である。図２に示すように、第１の正規化回路１２０は、シフト回路ＳＣ１１〜ＳＣ１３及び最大指数算出回路１２１を有する。図１では、簡略化のため、「シフト回路」を「ＳＣ」と表示している。なお、シフト回路ＳＣ１１〜ＳＣ１３は、それぞれ第２のシフト手段に相当する。最大指数算出回路１２１は、第２の算出回路に相当する。
最大指数算出回路１２１は、データＤ１１１〜Ｄ１１３を受け取り、データＤ１１１〜Ｄ１１３の最大指数Ｉｍａｘをサイクルごとに算出する。そして、最大指数算出回路１２１は、算出した最大指数Ｉｍａｘを、サイクルごとに出力する。
シフト回路ＳＣ１１〜ＳＣ１３は、最大指数算出回路１２１がサイクルごとに算出した最大指数Ｉｍａｘに基づいて、データＤ１１１〜Ｄ１１３のビットをシフトすることにより、第１の正規化処理を行う。第１の正規化処理が行われたデータＤ１２１〜Ｄ１２３は、それぞれ丸め回路１３１〜１３３へ出力される。図１では、簡略化のため、「丸め回路」を「ＲＣ」と表示している。
丸め回路１３０は、丸め回路１３１〜１３３を有する。なお、丸め回路１３１〜１３３は、それぞれ第１〜第３の丸め手段に相当する。丸め回路１３１〜１３３は、データＤ１２１〜Ｄ１２３に対して丸め処理を行うことにより、データのビット幅が削減された丸めデータＤ１３１〜Ｄ１３３を生成する。丸めデータＤ１３１〜Ｄ１３３は、データメモリ回路１４０へ出力される。
データメモリ回路１４０は、丸めデータＤ１３１〜Ｄ１３３をブロックの単位で保持する。すなわち、データメモリ回路１４０は、データＤ１３１〜Ｄ１３３をブロックの単位で保持する。具体的には、データメモリ回路１４０は、外部から受け取る書き込みアドレスＡｗ１〜Ａｗ３に対応するアドレスに、データＤ１３１〜Ｄ１３３のそれぞれを格納して保持する。
また、データメモリ回路１４０は、ブロックの単位で保持したデータを、データＤ１４１〜Ｄ１４３として出力する。このとき、データメモリ回路１４０は、データＤ１３１〜Ｄ１３３の順番を並べ替えて、データＤ１４１〜Ｄ１４３として出力することが可能である。具体的には、データメモリ回路２０３は、外部から受け取る読み出しアドレスＡｒ１〜Ａｒ３に対応するアドレスに保持しているデータを、それぞれデータＤ１４１〜Ｄ１４３として出力する。
データメモリ回路１４０が受け取る書き込みアドレスＡｗ１〜Ａｗ３及び読み出しアドレスＡｒ１〜Ａｒ３は、例えば、外部装置（図示せず）からデータメモリ回路１４０に順次出力される。
第２の正規化回路１５０は、指数メモリ回路１５１、補正指数算出回路１５２及びシフト回路ＳＣ２１〜ＳＣ２３を有する。なお、指数メモリ回路１５１は、第２の記憶手段に相当する。補正指数算出回路１５２は、第１の算出手段に相当する。シフト回路ＳＣ２１〜ＳＣ２３は、それぞれ第１のシフト手段に相当する。
指数メモリ回路１５１は、最大指数算出回路１２１がサイクルごとに出力する最大指数Ｉｍａｘを、外部から指定されたアドレスに保持する。また、指数メモリ回路１５１は、外部から指定されたアドレスに保持されている最大指数Ｉｍａｘを、指数データＩＤ１〜ＩＤ３として出力する。
補正指数算出回路１５２は、指数データＩＤ１〜ＩＤ３に基づいて、補正指数ＣＩ１〜ＣＩ３を算出する。算出された補正指数ＣＩ１〜ＣＩ３は、それぞれシフト回路ＳＣ２１〜ＳＣ２３へ出力される。
シフト回路ＳＣ２１〜ＳＣ２３は、データメモリ回路１４０からデータＤ１４１〜Ｄ１４３を受け取る。そして、シフト回路ＳＣ２１〜ＳＣ２３は、補正指数ＣＩ１〜ＣＩ３に基づいて、Ｄ１４１〜Ｄ１４３のそれぞれをシフトさせる。これにより、データＤ１４１〜Ｄ１４３は第２の正規化処理がなされる。シフト回路ＳＣ２１〜ＳＣ２３は、第２の正規化処理後のデータＤ１５１〜Ｄ１５３を出力する。
続いて、演算処理装置１００の動作について詳述する。演算処理装置１００の動作は、サイクルＣ１〜Ｃ６からなる。また、演算処理装置１００の動作は、サイクルＣ１〜Ｃ３とサイクルＣ４〜Ｃ６とに大別される。以下では、演算処理装置１００の動作を鑑み、サイクルＣ１〜Ｃ３を第１の正規化フェーズＰ１、サイクルＣ４〜Ｃ６を第２の正規化フェーズＰ２として説明する。サイクルの進行は、例えばクロック信号ＣＬＫを用いて制御される。
まず、第１の正規化フェーズＰ１（サイクルＣ１〜Ｃ３）における演算処理装置１００の動作について説明する。図３は、実施の形態１にかかる演算処理装置１００の第１の正規化フェーズＰ１（サイクルＣ１〜Ｃ３）における動作を示すタイミングチャートである。
本実施の形態において、第１の演算回路１１０は、ブロック浮動小数点の正規化処理の対象となるブロックとして、１２ビットのデータであるデータＤ１〜Ｄ９を出力する。また、以下では、データＤ１〜Ｄ９の値を２の補数表現で示す。以降に示すデータのビット列では、最も左のビットがＭＳＢ（Ｍｏｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）であり、最も右のビットがＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）である。なお、ＭＳＢは、符号ビットである。以下に、データＤ１〜Ｄ９を示す。
データＤ１：０００１０１１１０１１１
データＤ２：００１１０００１０００１
データＤ３：０００００１１０１１００
データＤ４：１１１１００１１１０００
データＤ５：１１１１１０００００００
データＤ６：００００００１００１０１
データＤ７：００００１０１１１１１０
データＤ８：００００１１０１０００１
データＤ９：００００１０１１１００１
第１の演算回路１１０は、サイクルＣ１において、入力されるデータに演算を行い、その演算結果であるデータＤ１〜Ｄ３を、それぞれデータＤ１１１〜Ｄ１１３として出力する。同様に、第１の演算回路１１０は、サイクルＣ２において、入力されるデータに演算を行い、その演算結果であるデータＤ４〜Ｄ６を、それぞれデータＤ１１１〜Ｄ１１３として出力する。第１の演算回路１１０は、サイクルＣ３において、入力されるデータに演算を行い、その演算結果であるデータＤ７〜Ｄ９を、それぞれデータＤ１１１〜Ｄ１１３として出力する。
最大指数算出回路１２１は、サイクルＣ１〜Ｃ３において、データＤ１１１〜Ｄ１１３をサイクルごとに受け取る。最大指数算出回路１２１は、サイクルごとのデータＤ１１１〜Ｄ１１３の最大指数Ｉｍａｘを算出する。
具体的には、最大指数算出回路１２１は、ブロック内のデータＤ１〜Ｄ９の絶対値をサイクルごとに算出する。以下に、データＤ１〜Ｄ９の絶対値ＡＢＳ１からＡＢＳ９を示す。
（サイクルＣ１）
絶対値ＡＢＳ１（データＤ１の絶対値）：０００１０１１１０１１１
絶対値ＡＢＳ２（データＤ２の絶対値）：００１１０００１０００１
絶対値ＡＢＳ３（データＤ３の絶対値）：０００００１１０１１００
（サイクルＣ２）
絶対値ＡＢＳ４（データＤ４の絶対値）：００００１１００１０００
絶対値ＡＢＳ５（データＤ５の絶対値）：００００１０００００００
絶対値ＡＢＳ６（データＤ６の絶対値）：００００００１００１０１
（サイクルＣ３）
絶対値ＡＢＳ７（データＤ７の絶対値）：００００１０１１１１１０
絶対値ＡＢＳ８（データＤ８の絶対値）：００００１１０１０００１
絶対値ＡＢＳ９（データＤ９の絶対値）：００００１０１１１００１
続いて、算出した絶対値ＡＢＳ１〜ＡＢＳ９の論理和ＡＤＤ１〜３を、サイクルごとに算出する。以下に、絶対値ＡＢＳ１〜ＡＢＳ３、絶対値ＡＢＳ４〜ＡＢＳ６及び絶対値ＡＢＳ７〜ＡＢＳ９のそれぞれの論理和ＡＤＤ１〜３を示す。
（サイクルＣ１）
論理和ＡＤＤ１（絶対値ＡＢＳ１〜ＡＢＳ３の論理和）：００１１０１１１１１１１
（サイクルＣ２）
論理和ＡＤＤ２（絶対値ＡＢＳ４〜ＡＢＳ６の論理和）：００００１１１０１１０１
（サイクルＣ３）
論理和ＡＤＤ３（絶対値ＡＢＳ７〜ＡＢＳ９の論理和）：００００１１１１１１０１
続いて、それぞれのサイクルにおいて、論理和のＭＳＢ（Ｍｏｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）側から見て最初にビットの値が１となるビット位置を検出する。以下では、ＭＳＢを１１ビット目、ＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）を０ビット目として説明する。
まず、サイクルＣ１では、ＭＳＢ側から見て最初にビットの値が１となるビット位置として、９ビット目を検出する。ここで、サイクルＣ１のデータＤ１〜Ｄ３を共通の指数で正規化するために、データＤ１〜Ｄ３を同一のシフト量で左にビットシフトする場合について検討する。この場合、シフト量が１ビットであれば、データＤ１〜Ｄ３の符号はいずれも変化せずに、正規化後の値が正しく表現される。したがって、サイクルＣ１の最大指数Ｉｍａｘ１は「−１」である。最大指数算出回路１２１は、サイクルＣ１において、算出した最大指数Ｉｍａｘ１である「−１」を出力する。
同様に、サイクルＣ２では、ＭＳＢ側から見て最初にビットの値が１となるビット位置として、７ビット目を検出する。データＤ４〜Ｄ６を同一のシフト量で左にビットシフトする場合、シフト量が３ビットであれば、データＤ４〜Ｄ６の符号はいずれも変化せずに、正規化後の値が正しく表現される。したがって、サイクルＣ２の最大指数Ｉｍａｘ２は「−３」である。最大指数算出回路１２１は、サイクルＣ２において、算出した最大指数Ｉｍａｘ２である「−３」を出力する。
サイクルＣ３では、ＭＳＢ側から見て最初にビットの値が１となるビット位置として、７ビット目を検出する。データＤ７〜Ｄ９を同一のシフト量で左にビットシフトする場合、シフト量が３ビットであれば、データＤ７〜Ｄ９の符号はいずれも変化せずに、正規化後の値が正しく表現される。したがって、サイクルＣ３の最大指数Ｉｍａｘ３は「−３」である。最大指数算出回路１２１は、サイクルＣ３において、算出した最大指数Ｉｍａｘ３である「−３」を出力する。
指数メモリ回路１５１は、サイクルＣ１において、書き込みアドレスＡｗｍで指定されたアドレスＡｍ１に、最大指数Ｉｍａｘ１の値「−１」を書き込む。また、指数メモリ回路１５１は、サイクルＣ２において、書き込みアドレスＡｗｍで指定されたアドレスＡｍ２に、最大指数Ｉｍａｘ２の値「−３」を書き込む。指数メモリ回路１５１は、サイクルＣ３において、書き込みアドレスＡｗｍで指定されたアドレスＡｍ３に、最大指数Ｉｍａｘ３の値「−３」を書き込む。
次いで、シフト回路ＳＣ１１〜ＳＣ１３の動作について説明する。シフト回路ＳＣ１１〜ＳＣ１３は、最大指数算出回路１２１がサイクルごとに算出した最大指数Ｉｍａｘに基づいて、データＤ１１１〜Ｄ１１３をシフトすることにより、第１の正規化処理を行う。
具体的には、サイクルＣ１において、シフト回路ＳＣ１１〜ＳＣ１３のそれぞれは、最大指数算出回路１２１が算出した最大指数Ｉｍａｘ１の値「−１」に基づいて、データＤ１１１〜Ｄ１１３として受け取ったデータＤ１〜Ｄ３をシフトする。そして、シフト回路ＳＣ１１〜ＳＣ１３のそれぞれは、第１の正規化処理後の第１の正規化データＮＤ１１〜ＮＤ１３を、データＤ１２１〜Ｄ１２３としてそれぞれ出力する。
サイクルＣ２において、シフト回路ＳＣ１１〜ＳＣ１３のそれぞれは、最大指数算出回路１２１が算出した最大指数Ｉｍａｘ２の値「−３」に基づいて、データＤ１１１〜Ｄ１１３として受け取ったデータＤ４〜Ｄ６をシフトする。そして、シフト回路ＳＣ１１〜ＳＣ１３のそれぞれは、第１の正規化処理後の第１の正規化データＮＤ１４〜ＮＤ１６を、データＤ１２１〜Ｄ１２３としてそれぞれ出力する。
サイクルＣ３において、シフト回路ＳＣ１１〜ＳＣ１３のそれぞれは、最大指数算出回路１２１が算出した最大指数Ｉｍａｘ３の値「−３」に基づいて、データＤ１１１〜Ｄ１１３として受け取ったデータＤ７〜Ｄ９をシフトする。そして、シフト回路ＳＣ１１〜ＳＣ１３のそれぞれは、第１の正規化処理後の第１の正規化データＮＤ１７〜ＮＤ１９を、データＤ１２１〜Ｄ１２３としてそれぞれ出力する。
以下に、第１の正規化フェーズＰ１（サイクルＣ１〜Ｃ３）の各サイクルにおける第１の正規化処理後の第１の正規化データＮＤ１１〜ＮＤ１９を示す。
（サイクルＣ１）
第１の正規化データＮＤ１１：００１０１１１０１１１０
第１の正規化データＮＤ１２：０１１０００１０００１０
第１の正規化データＮＤ１３：００００１１０１１０００
（サイクルＣ２）
第１の正規化データＮＤ１４：１００１１１００００００
第１の正規化データＮＤ１５：１１００００００００００
第１の正規化データＮＤ１６：０００１００１０１０００
（サイクルＣ３）
第１の正規化データＮＤ１７：０１０１１１１１００００
第１の正規化データＮＤ１８：０１１０１０００１０００
第１の正規化データＮＤ１９：０１０１１１００１０００
丸め回路１３１〜１３３のそれぞれは、サイクルＣ１〜Ｃ３において、データＤ１２１〜Ｄ１２３として出力される第１の正規化データＮＤ１１〜ＮＤ１９に対して、丸め処理を行う。これにより、丸め回路１３１〜１３３は、正規化データＮＤ１〜ＮＤ９のビット幅を６ビットに削減した丸めデータＲＤ１１〜ＲＤ１９を生成する。
つまり、サイクルＣ１において、丸め回路１３１〜１３３は、第１の正規化データＮＤ１１〜ＮＤ１３のビット幅を削減した丸めデータＲＤ１１〜ＲＤ１３を、丸めデータＤ１３１〜Ｄ１３３としてそれぞれ出力する。
サイクルＣ２において、丸め回路１３１〜１３３は、第１の正規化データＮＤ１４〜ＮＤ１６のビット幅を削減した丸めデータＲＤ１４〜ＲＤ１６を、丸めデータＤ１３１〜Ｄ１３３としてそれぞれ出力する。
サイクルＣ３において、丸め回路１３１〜１３３は、第１の正規化データＮＤ１７〜ＮＤ１９のビット幅を削減した丸めデータＲＤ１７〜ＲＤ１９を、丸めデータＤ１３１〜Ｄ１３３としてそれぞれ出力する。
以下に、第１の正規化フェーズＰ１（サイクルＣ１〜Ｃ３）の各サイクルにおける、丸め処理後の丸めデータＲＤ１１〜ＲＤ１９を示す。
（サイクルＣ１）
丸めデータＲＤ１１：００１０１１
丸めデータＲＤ１２：０１１０００
丸めデータＲＤ１３：００００１１
（サイクルＣ２）
丸めデータＲＤ１４：１００１１１
丸めデータＲＤ１５：１１００００
丸めデータＲＤ１６：０００１００
（サイクルＣ３）
丸めデータＲＤ１７：０１０１１１
丸めデータＲＤ１８：０１１０１０
丸めデータＲＤ１９：０１０１１１
データメモリ回路１４０は、第１の正規化フェーズＰ１（サイクルＣ１〜Ｃ３）において、丸め回路１３１〜１３３がデータＤ１３１〜Ｄ１３３として出力した丸めデータＲＤ１１〜ＲＤ１９を受け取り、保持する。
具体的には、サイクルＣ１において、データメモリ回路１４０は、書き込みアドレスＡｗ１〜Ａｗ３で指定されたアドレスＡ１〜Ａ３のそれぞれに、データＤ１３１〜Ｄ１３３として出力された丸めデータＲＤ１１〜ＲＤ１３を格納して保持する。
サイクルＣ２において、データメモリ回路１４０は、書き込みアドレスＡｗ１〜Ａｗ３で指定されたアドレスＡ１〜Ａ３のそれぞれに、データＤ１３１〜Ｄ１３３として出力された丸めデータＲＤ１４〜ＲＤ１６を格納して保持する。
サイクルＣ３において、データメモリ回路１４０は、書き込みアドレスＡｗ１〜Ａｗ３で指定されたアドレスＡ１〜Ａ３のそれぞれに、データＤ１３１〜Ｄ１３３として出力された丸めデータＲＤ１７〜ＲＤ１９を格納して保持する。
また、指数メモリ回路１５１は、サイクルＣ１〜Ｃ３のそれぞれで算出される最大指数Ｉｍａｘ１〜Ｉｍａｘ３を格納して保持する。
具体的には、サイクルＣ１において、指数メモリ回路１５１は、書き込みアドレスＡｗｍで指定されたアドレスＡｍ１に、最大指数Ｉｍａｘ１の値「−１」を格納して保持する。同様に、サイクルＣ２において、指数メモリ回路１５１は、書き込みアドレスＡｗｍで指定されたアドレスＡｍ２に、最大指数Ｉｍａｘ２の値「−３」を格納して保持する。サイクルＣ３において、指数メモリ回路１５１は、書き込みアドレスＡｗｍで指定されたアドレスＡｍ３に、最大指数Ｉｍａｘ３の値「−３」を格納して保持する。
続いて、第２の正規化フェーズＰ２（サイクルＣ４〜Ｃ６）における演算処理装置１００の動作について説明する。図４は、実施の形態１にかかる演算処理装置１００の第２の正規化フェーズＰ２（サイクルＣ４〜Ｃ６）における動作を示すタイミングチャートである。
データメモリ回路１４０は、保持していた丸めデータＲＤ１１〜ＲＤ１９を、データＤ１４１〜Ｄ１４３として出力する。このとき、データメモリ回路１４０は、第２の演算回路１６０が行う演算のために、入力とは異なる順番でデータを出力する。
具体的には、サイクルＣ４において、データメモリ回路１４０は、読み出しアドレスＡｒ１で指定されたアドレスＡ１に保持している丸めデータＲＤ１１を、データＤ１４１として出力する。同様に、データメモリ回路１４０は、読み出しアドレスＡｒ２で指定されたアドレスＡ３に保持している丸めデータＲＤ１３をデータＤ１４２として、読み出しアドレスＡｒ３で指定されたアドレスＡ５に保持している丸めデータＲＤ１５をデータＤ１４３として出力する。
サイクルＣ５において、データメモリ回路１４０は、読み出しアドレスＡｒ１で指定されたアドレスＡ２に保持している丸めデータＲＤ１２を、データＤ１４１として出力する。同様に、データメモリ回路１４０は、読み出しアドレスＡｒ２で指定されたアドレスＡ４に保持している丸めデータＲＤ１４をデータＤ１４２として、読み出しアドレスＡｒ３で指定されたアドレスＡ７に保持している丸めデータＲＤ１７をデータＤ１４３として出力する。
サイクルＣ６において、データメモリ回路１４０は、読み出しアドレスＡｒ１で指定されたアドレスＡ６に保持している丸めデータＲＤ１６を、データＤ１４１として出力する。同様に、データメモリ回路１４０は、読み出しアドレスＡｒ２で指定されたアドレスＡ８に保持している丸めデータＲＤ１８をデータＤ１４２として、読み出しアドレスＡｒ３で指定されたアドレスＡ９に保持している丸めデータＲＤ１９をデータＤ１４３として出力する。
指数メモリ回路１５１は、第２の正規化フェーズＰ２（サイクルＣ４〜Ｃ６）において、保持していた最大指数Ｉｍａｘ１〜Ｉｍａｘ３を、指数データＩＤ１〜ＩＤ３として出力する。
具体的には、サイクルＣ４において、指数メモリ回路１５１は、読み出しアドレスＡｒｍ１で指定されたアドレスＡｍ１に保持している最大指数Ｉｍａｘ１の値「−１」をデータＩＤ１として出力する。同様に、指数メモリ回路１５１は、読み出しアドレスＡｒｍ２で指定されたアドレスＡｍ１に保持している最大指数Ｉｍａｘ１の値「−１」を指数データＩＤ２として、読み出しアドレスＡｒｍ３で指定されたアドレスＡｍ２に保持している最大指数Ｉｍａｘ３の値「−３」を指数データＩＤ３として出力する。
サイクルＣ５において、指数メモリ回路１５１は、読み出しアドレスＡｒｍ１で指定されたアドレスＡｍ１に保持している最大指数Ｉｍａｘ１の値「−１」を指数データＩＤ１として出力する。同様に、指数メモリ回路１５１は、読み出しアドレスＡｒｍ２で指定されたアドレスＡｍ２に保持している最大指数Ｉｍａｘ２の値「−３」を指数データＩＤ２として、読み出しアドレスＡｒｍ３で指定されたアドレスＡｍ３に保持している最大指数Ｉｍａｘ３の値「−３」を指数データＩＤ３として出力する。
サイクルＣ６において、指数メモリ回路１５１は、読み出しアドレスＡｒｍ１で指定されたアドレスＡｍ２に保持している最大指数Ｉｍａｘ２の値「−３」を指数データＩＤ１として出力する。同様に、指数メモリ回路１５１は、読み出しアドレスＡｒｍ２で指定されたアドレスＡｍ３に保持している最大指数Ｉｍａｘ３の値「−３」を指数データＩＤ２として、読み出しアドレスＡｒｍ３で指定されたアドレスＡｍ３に保持している最大指数Ｉｍａｘ３の値「−３」を指数データＩＤ３として出力する。
補正指数算出回路１５２は、第２の正規化フェーズＰ２（サイクルＣ４〜Ｃ６）の各サイクルにおいて、指数データＩＤ１〜ＩＤ３に基づいて補正指数ＣＩ１〜ＣＩ３を算出する。そして、補正指数算出回路１５２は、補正指数ＣＩ１〜ＣＩ３のそれぞれを、シフト回路ＳＣ２１〜ＳＣ２３へ出力する。
まず、サイクルＣ４において、補正指数算出回路１５２は、指数データＩＤ１〜ＩＤ３のそれぞれの値「−１」、「−１」及び「−３」から、補正指数ＣＩ１〜ＣＩ３を算出する。具体的には、補正指数算出回路１５２は、入力した指数データＩＤ１〜ＩＤ３の最大値を求める。この場合、指数データＩＤ１〜ＩＤ３の最大値は指数データＩＤ１の値「−１」である。次いで、補正指数算出回路１５２は、指数データＩＤ１〜ＩＤ３の補正指数ＣＩ１〜ＣＩ３を算出する。ここで、補正指数ＣＩ１〜ＣＩ３とは、指数データＩＤ１〜ＩＤ３のそれぞれに加算することにより、加算後の値を最大値に一致させることができる数を意味する。従って、補正指数算出回路１５２は、補正指数ＣＩ１〜ＣＩ３として、それぞれ「０」、「０」及び「＋２」を出力する。
サイクルＣ５において、補正指数算出回路１５２は、指数データＩＤ１〜ＩＤ３のそれぞれの値「−１」、「−３」及び「−３」から、補正指数ＣＩ１〜ＣＩ３を算出する。この場合、指数データＩＤ１〜ＩＤ３の最大値は指数データＩＤ１の値「−１」である。従って、補正指数算出回路１５２は、補正指数ＣＩ１〜ＣＩ３として、それぞれ「０」、「＋２」及び「＋２」を出力する。
サイクルＣ６において、補正指数算出回路１５２は、指数データＩＤ１〜ＩＤ３のそれぞれの値「−３」、「−３」及び「−３」から、補正指数ＣＩ１〜ＣＩ３を算出する。この場合、指数データＩＤ１〜ＩＤ３の最大値は指数データＩＤ１の値「−３」である。従って、補正指数算出回路１５２は、補正指数ＣＩ１〜ＣＩ３として、それぞれ「０」を出力する。
シフト回路ＳＣ２１〜ＳＣ２３は、第２の正規化フェーズＰ２（サイクルＣ４〜Ｃ６）において、補正指数算出回路１５２が算出した補正指数ＣＩ１〜ＣＩ３に基づいて、データＤ１４１〜Ｄ１４３のそれぞれをシフトして、第２の正規化処理を行う。第２の正規化処理により生成されたデータＤ１５１〜Ｄ１５３は、第２の演算回路１６０に出力される。なお、第２の正規化処理により、丸めデータＲＤ１１〜ＲＤ１９のそれぞれに基づいて、第２の正規化データＮＤ２１〜ＮＤ２９が生成される。
具体的には、サイクルＣ４において、シフト回路ＳＣ２１は、データＤ１４１として受け取った丸めデータＲＤ１１を補正指数ＣＩ１の値「０」だけシフトさせ、第２の正規化データＮＤ２１を生成する。シフト回路ＳＣ２２は、データＤ１４２として受け取った丸めデータＲＤ１３を補正指数ＣＩ２の値「０」だけシフトさせ、第２の正規化データＮＤ２３を生成する。シフト回路ＳＣ２３は、データＤ１４３として受け取った丸めデータＲＤ１５を補正指数ＣＩ３の値「＋２」だけシフトさせ、第２の正規化データＮＤ２５を生成する。第２の正規化データＮＤ２１、ＮＤ２３及びＮＤ２５は、それぞれデータＤ１５１〜Ｄ１５３として出力される。
サイクルＣ５において、シフト回路ＳＣ２１は、データＤ１４１として受け取った丸めデータＲＤ１２を補正指数ＣＩ１の値「０」だけシフトさせ、第２の正規化データＮＤ２２を生成する。シフト回路ＳＣ２２は、データＤ１４２として受け取った丸めデータＲＤ１４を補正指数ＣＩ２の値「＋２」だけシフトさせ、第２の正規化データＮＤ２４を生成する。シフト回路ＳＣ２３は、データＤ１４３として受け取った丸めデータＲＤ１７を補正指数ＣＩ３の値「＋２」だけシフトさせ、第２の正規化データＮＤ２７を生成する。第２の正規化データＮＤ２２、ＮＤ２４及びＮＤ２７は、それぞれデータＤ１５１〜Ｄ１５３として出力される。
サイクルＣ６において、シフト回路ＳＣ２１は、データＤ１４１として受け取った丸めデータＲＤ１６を、補正指数ＣＩ１の値「０」だけシフトさせ、第２の正規化データＮＤ２６を生成する。シフト回路ＳＣ２２は、データＤ１４２として受け取った丸めデータＲＤ１８を補正指数ＣＩ２の値「０」だけシフトさせ、第２の正規化データＮＤ２８を生成する。シフト回路ＳＣ２３は、データＤ１４３として受け取った丸めデータＲＤ１９を補正指数ＣＩ３の値「０」だけシフトさせ、第２の正規化データＮＤ２９を生成する。第２の正規化データＮＤ２６、ＮＤ２８及びＮＤ２９は、それぞれデータＤ１５１〜Ｄ１５３として出力される。
以下に、第２の正規化フェーズＰ２（サイクルＣ４〜Ｃ６）の各サイクルにおける第２の正規化処理後の第２の正規化データＮＤ２１〜ＮＤ２９を示す。
（サイクルＣ４）
第２の正規化データＮＤ２１：００１０１１
第２の正規化データＮＤ２３：００００１１
第２の正規化データＮＤ２５：１１１１００
（サイクルＣ５）
第２の正規化データＮＤ２２：０１１０００
第２の正規化データＮＤ２４：１１１００１
第２の正規化データＮＤ２７：０００１０１
（サイクルＣ６）
第２の正規化データＮＤ２６：０００１００
第２の正規化データＮＤ２８：０１１０１０
第２の正規化データＮＤ２９：０１０１１１
次に、本発明の特徴的な構成について説明する。
図７は、実施の形態１にかかる特徴的な構成を示すブロック図である。
演算処理装置１００は、第１の正規化回路１２０、丸め回路１３０、データメモリ回路（第１の記憶回路）１４０、及び、第２の正規化回路１５０を含む。
ここで、第１の正規化回路１２０は、共通の指数を持つ、複数の固定小数点表現のデータ又はブロック浮動小数点表現の仮数部のデータが複数サイクルのそれぞれにおいて入力され、複数サイクルのそれぞれの複数のデータに対する最大指数に基づいて、当該サイクルの複数のデータを当該複数のデータに共通の指数で正規化する第１の正規化を行う。
丸め回路１２０は、第１の正規化が行われた複数のデータのそれぞれのビット幅を削減した複数の丸めデータを出力する。
データメモリ回路（第１の記憶回路）１４０は、複数サイクル分の第１の正規化が行われた複数の丸めデータを保持し、保持されている複数の丸めデータの内、複数の指定された丸めデータを出力する。
第２の正規化回路１５０は、複数の指定された丸めデータのそれぞれについて、第１の正規化で用いられた最大指数と、当該最大指数の複数の指定された丸めデータについての最大値とに基づいて、複数の指定された丸めデータを当該複数の指定された丸めデータに共通の指数で正規化する第２の正規化を行い、出力する。
上述の通り、本実施の形態では、複数のデータを並列に演算する並列演算回路を複数含むデータ処理回路において、各演算回路で同時に演算するデータをひとつのブロックとするブロック浮動小数点処理を行う。そのため、データ処理のデータ数の大きさによらず、演算の並列度でブロックのサイズを決めることができる。したがって、データ処理のデータ数が大きい場合においても、ブロックを小さくすることができるため、各データの値範囲が広い場合でも、精度が劣化しないという効果がある。
演算処理装置１００では、データを保持するデータメモリ回路１４０の前段で第１の正規化処理および丸め処理を行い、データメモリ回路１４０の後段で第２の正規化処理を行うことが可能となる。
また、第１の正規化処理の指数値を考慮して、第２の正規化処理における補正指数を決定する。すなわち、演算処理装置１００では、シフト回路ＳＣ２１〜ＳＣ２３で第２の正規化処理が行われるデータＤ１４１〜Ｄ１４３の基となった丸めデータＲＤ１１〜ＲＤ１９が生成されたサイクルと、丸めデータＲＤ１１〜ＲＤ１９を正規化するための補正指数の算出のための減算に用いられる最大指数が算出されたサイクルと、が等しくなるように、補正指数が算出される。
これにより、演算処理装置１００では、データメモリ回路１４０の前で丸め処理を行ってデータのビットを削減するので、データメモリ回路１４０に必要なメモリ容量を、より小さくすることができる。その結果、回路規模が小さく消費電力が低い演算処理装置を提供することができる。
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上述の実施の形態においては、ｎ及びｍの値を３としたが、あくまで例に過ぎない。従って、ｎ及びｍは、ともに２以上の任意の整数とすることが可能である。
上述の実施の形態において、各サイクルでデータメモリ回路１４０から出力されるデータの組み合わせは、上述の例に限られない。すなわち、ｎ個ずつ出力されるのであれば、データメモリ回路１４０は、任意の組み合わせのデータを出力することができる。
この出願は、２０１１年５月１６日に出願された日本出願特願２０１１−１０９５５４を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０００９】
１００  演算処理装置
１１０、２０１  第１の演算回路
１２０  第１の正規化回路
１３０  丸め回路
１３１  第１の丸め回路
１３２  第２の丸め回路
１３３  第３の丸め回路
１４０、２０３  データメモリ回路
１５０  第２の正規化回路
１６０、２０４  第２の演算回路
１２１、２１０  最大指数算出回路
１５１  指数メモリ回路
１５２  補正指数算出回路
２４１〜２４３  丸め回路
２００  演算処理装置
２０２  正規化回路
２２１〜２２３  シフト回路
Ａｗ１〜Ａｗ３、Ａｗ２１〜Ａｗ２３、Ａｗｍ  書き込みアドレス
Ａｒ１〜Ａｒ３、Ａｒ２１〜Ａｒ２３、Ａｒｍ１〜Ａｒｍ３  読み出しアドレス
Ｃ１〜Ｃ６  サイクル
ＣＩ１〜ＣＩ３  補正指数
Ｄ１〜Ｄ９、Ｄ１１１〜Ｄ１１３、Ｄ１２１〜Ｄ１２３、Ｄ１３１〜Ｄ１３３、Ｄ１４１〜Ｄ１４３、Ｄ１５１〜Ｄ１５３、Ｄ２１１〜Ｄ２１３、Ｄ２２１〜Ｄ２２３、Ｄ２３１〜Ｄ２３３、Ｄ２４１〜Ｄ２４３  データ
ＩＤ１〜ＩＤ３  指数データ
Ｉｍａｘ、Ｉｍａｘ１〜Ｉｍａｘ３  最大指数
Ｐ１  第１の正規化フェーズ
Ｐ２  第２の正規化フェーズ
ＳＣ１１〜ＳＣ１３、ＳＣ２１〜ＳＣ２３  シフト回路
【図１】
2012157132.tif 000003
【図２】
2012157132.tif 000004
【図３】
2012157132.tif 000005
【図４】
2012157132.tif 000006
【図５】
2012157132.tif 000007
【図６】
2012157132.tif 000008
【図７】
2012157132.tif 000009
【国際調査報告】
2012157132.tif 000010
2012157132.tif 000011