(57)【要約】  複数のデータを共通の指数によって正規化する場合に、指数の算出の高速化を図ることができ、かつ、そのための回路規模及び消費電力の低減を図ることができる半導体集積回路及び指数算出方法を提供する。本発明にかかる半導体集積回路５０は、複数のデータを共通の指数によって正規化する場合に、複数のデータの指数を算出する半導体集積回路５０である。データを構成する第１のビット列の互いに隣接するビットの組のそれぞれについて、互いに隣接するビットの値が異なることを示す遷移値、又は、互いに隣接するビットの値が異ならないことを示す非遷移値をとるビットを含む第２のビット列を生成するビット列生成回路５１と、複数のデータのそれぞれを構成する複数の第１のビット列から生成された複数の第２のビット列の遷移値のビットの位置に基づいて、複数のデータの指数を算出する指数算出回路５２と、を備える。
2011161859.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータを共通の指数によって正規化する場合に、当該複数のデータの指数を算出する半導体集積回路であって、
前記データを構成する第１のビット列の互いに隣接するビットの組のそれぞれについて、当該互いに隣接するビットの値が異なることを示す遷移値、又は、当該互いに隣接するビットの値が異ならないことを示す非遷移値をとるビットを含む第２のビット列を生成するビット列生成回路と、
前記ビット列生成回路によって前記複数のデータのそれぞれを構成する複数の第１のビット列から生成された複数の第２のビット列の前記遷移値のビットの位置に基づいて、前記複数のデータの指数を算出する指数算出回路と、
を備えたことを特徴とする半導体集積回路。
【請求項２】
前記指数算出回路は、
前記複数の第２のビット列に基づいて、前記複数の第２のビット列の少なくとも１つで、同一位置におけるビットが前記遷移値である場合、当該位置に対応するビットを第１の値とし、前記複数の第２のビット列の全てで、同一位置におけるビットが前記非遷移値である場合、当該位置に対応するビットを第２の値とした第３のビット列を生成するビット列合成回路と、
前記ビット列合成回路が生成した第３のビット列における前記第１の値のビットの位置に基づいて、前記指数を算出するビット位置検出回路と、を有することを特徴とする請求項１に記載の半導体集積回路。
【請求項３】
前記第２のビット列は、前記第１のビット列の最上位ビットからｎ（ｎは、０以上の整数）ビット目及びｎ＋１ビット目の組に対応するビットを、最上位ビットからｎビット目として配列し、
前記第３のビット列は、前記第２のビット列の最上位ビットからｎビット目に対応するビットを、最上位ビットからｎビット目として配列し、
前記ビット位置検出回路は、前記第３のビット列のうち、前記第１の値のビットの最上位ビットからの位置に基づいて、前記指数を算出することを特徴とする請求項２に記載の半導体集積回路。
【請求項４】
前記ビット列合成回路は、前記複数の第２のビット列の論理和となる第３のビット列を生成することを特徴とする請求項２又は３に記載の半導体集積回路。
【請求項５】
前記ビット列生成回路は、前記データを構成する第１のビット列に含まれ、互いに隣接するビットの排他的論理和を示すビットを含む第２のビット列を生成することを特徴とする請求項４に記載の半導体集積回路。
【請求項６】
前記半導体集積回路は、前記第３のビット列を格納するビット列記憶手段をさらに備え、
前記半導体集積回路は、前記ビット列生成回路を複数備え、
前記複数のビット列生成回路は、前記複数のデータから当該複数のビット列生成回路の数ずつ前記第２のビット列を生成し、
前記ビット列合成回路は、前記複数のビット列生成回路によって複数の第２のビット列が生成される毎に、当該複数の第２のビット列と前記ビット列記憶手段に格納された第３のビット列とに基づいて、前記第３のビット列を生成して前記ビット列記憶手段に格納された第３のビット列を更新するとともに、前記複数の第２のビット列及び前記第３のビット列の少なくとも１つで、同一位置におけるビットが前記遷移値である場合、当該位置に対応するビットを前記第１の値とし、前記複数の第２のビット列及び前記第３のビット列の全てで、同一位置におけるビット列が前記非遷移値である場合、当該位置に対応するビットを前記第２の値とした第３のビット列を生成することを特徴とする請求項２乃至５のいずれか１項に記載の半導体集積回路。
【請求項７】
前記半導体集積回路は、前記指数算出回路が算出した指数に基づいて、前記第１のビット列をシフトすることによって前記データを正規化するシフト回路をさらに備えたことを特徴とする請求項１乃至６のいずれか１項に記載の半導体集積回路。
【請求項８】
前記半導体集積回路は、前記シフト回路を複数備え、
前記複数のシフト回路は、前記複数のデータを当該複数のシフト回路の数ずつ正規化することを特徴とする請求項７に記載の半導体集積回路。
【請求項９】
前記複数のデータは、ブロック浮動小数点において同一のブロックに含まれるデータであり、
前記指数算出回路は、前記ブロックにおける最大指数を算出することを特徴とする請求項１乃至８のいずれか１項に記載の半導体集積回路。
【請求項１０】
複数のデータを共通の指数によって正規化する場合に、当該複数のデータの指数を算出する指数算出方法であって、
前記データを構成する第１のビット列の互いに隣接するビットの組のそれぞれについて、当該互いに隣接するビットの値が異なることを示す遷移値、又は、当該互いに隣接するビットの値が異ならないことを示す非遷移値をとるビットを含む第２のビット列を生成し、
前記複数のデータのそれぞれを構成する複数の第１のビット列から生成された複数の第２のビット列の前記遷移値のビットの位置に基づいて、前記複数のデータの指数を算出する、
指数算出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路及び指数算出方法に関し、特にディジタル信号処理における演算処理技術に関する。
【背景技術】
【０００２】
ディジタル信号処理において、浮動小数点による演算は、扱う信号データの値の範囲が広い場合でも高い精度で演算できるという利点があるが、複雑な回路が必要になるため、回路規模や消費電力が大きいという問題がある。また、固定小数点による演算は、回路が単純で、回路規模や消費電力が小さいという利点があるが、演算精度が低いという問題がある。【０００３】
一方、浮動小数点と固定小数点の双方の利点を兼ね備えた演算方法として、ブロック浮動小数点による演算がある。ブロック浮動小数点による演算では、複数の信号データを１つのブロックとしてまとめ、各ブロック単位で共通の指数をもつように、ブロック全体で正規化する。【０００４】
より詳細には、ブロック浮動小数点処理において、次のステップでブロック浮動小数点の正規化処理を行う。
（１）ブロック内の全データの最大指数を求める。
（２）求めた最大指数によりブロック全体をシフト（正規化）する。
ここで最大指数とは、ブロック内の全てのデータが桁あふれを起こさない最大の指数を示す。最大指数はブロック内の全データのうち、絶対値が最大のデータの指数値に等しい。【０００５】
この最大指数を効率よく求める方法として、次の方法が知られている（例えば、特許文献１）。
（１）ブロック内の各データの絶対値を算出する。
（２）算出した各データの絶対値の論理和を算出する。
（３）算出した論理和のＭＳＢ（Most Significant Bit）側のビット位置を検出し、最大指数を求める。【０００６】
以下に、上述した最大指数の算出方法を用いたブロック浮動小数点の正規化処理の具体例を説明する。
まず、正規化対象のブロックとして、次に示す８ビットの入力データである入力データ１〜入力データ８の８つのデータからなるブロックを考える。下記では各データの値を２の補数表現で示している。なお、以降に示すデータのビット列は、最も左のビットがＭＳＢであり、最も右のビットがＬＳＢであるものとして示す。なお、ＭＳＢは、符号ビットとなる。【０００７】
入力データ１：  ０００１０１１１
入力データ２：  ００１１０００１
入力データ３：  ０００００１１０
入力データ４：  １１１１００１１
入力データ５：  １１１１１０００
入力データ６：  ０００００１１０
入力データ７：  ００００１０１１
入力データ８：  ０００１１０１１【０００８】
次に、ブロック内の各データ（入力データ１〜８）の絶対値を算出する。以下に、入力データ１〜８の絶対値を、絶対値１〜８として示す。具体的には、入力データｋの絶対値は、絶対値ｋとして示している（ｋは、１〜８のいずれかの正の整数）。【０００９】
絶対値１：  ０００１０１１１
絶対値２：  ００１１０００１
絶対値３：  ０００００１１０
絶対値４：  ００００１１０１
絶対値５：  ００００１０００
絶対値６：  ０００００１１０
絶対値７：  ００００１０１１
絶対値８：  ０００１１０１１【００１０】
次に、算出した各絶対値の論理和を算出する。以下に、絶対値１〜８の論理和を示す。【００１１】
論理和  ：  ００１１１１１１【００１２】
次に、算出した論理和のＭＳＢ（Most Significant Bit）側から見て最初にビットの値が１となるビット位置として、５ビット目を検出する。ここで、ＭＳＢを７ビット目、ＬＳＢ（Least Significant Bit）を０ビット目とする。入力データ１〜８を共通の指数で正規化するために、入力データ１〜８を同一のシフト量で左にビットシフトする場合、シフト量が１ビットであれば、入力データ１〜８の符号はいずれも変化せずに正規化後の値が正しく表現されることになる。したがって、最大指数は−１になる。【００１３】
最後に、求めた最大指数に基づいて、グループ内の全データ（入力データ１〜８）を正規化して、正規化後のデータ（正規化データ１〜８）を求める。具体的には、最大指数が−１の場合、左に１ビットシフトする。以下に、入力データ１〜８の正規化後のデータを、正規化データ１〜８として示す。入力データｋの正規化後のデータは、正規化データｋとして示している（ｋは、１〜８のいずれかの正整数）。ここで、最大指数が−１であるため、正規化データ１〜８の実際の値は、それぞれのデータに２の−１乗を乗じた値となる。【００１４】
正規化データ１：  ００１０１１１０
正規化データ２：  ０１１０００１０
正規化データ３：  ００００１１００
正規化データ４：  １１１００１１０
正規化データ５：  １１１１００００
正規化データ６：  ００００１１００
正規化データ７：  ０００１０１１０
正規化データ８：  ００１１０１１０【００１５】
上述したような正規化処理は、最大指数を算出するステップにおいて、ブロック内の各データの絶対値を算出する必要がある。ここで、絶対値を算出において、負のデータを正のデータに変換するためには、ビットの反転、１の加算、及び、１を加算した場合における桁上がり等の処理を実行する必要がある。そのため、絶対値を算出するための処理は、時間がかかってしまうという問題がある。また、それらの処理を実行するための回路が必要となるため、回路規模及び消費電力が大きくなってしまうという問題もある。【００１６】
さらに、ブロック浮動小数点処理では、ブロックを構成するデータの数だけ複数回繰り返して絶対値を算出する必要がある。そのため、上述したような正規化処理では、時間がかかる絶対値の算出を繰り返すための処理時間が飛躍的に増大してしまうことになる。
以上に説明したように、上述したような正規化処理では、最大指数の算出を高速に行えず、また回路規模及び消費電力が大きいという問題がある。【００１７】
さらに、上述したような正規化処理では、負側の最大値のデータを特別に処理するか、あるいは負側の最大値を使用しないようにする必要がある、という問題がある。なぜなら、Ｘビットのデータの場合、そのデータの負側の最大値は−１ｘ（２のＸ−１乗）であるが、その絶対値である＋１ｘ（２のＸ−１乗）はＸビットでは表現できないからである（Ｘは、正の整数）。なお、ｘは、乗算記号を示す。【００１８】
具体的には、例えば、８ビットのデータの場合、そのデータの負側の最大値は−１ｘ（２の７乗）＝−１２８であるが、その絶対値である＋１ｘ（２の７乗）＝＋１２８は８ビットでは表現することができず、９ビット必要である。したがって、データの値が−１２８の場合は、その絶対値＋１２８を＋１２７に飽和させるなど、−１２８を特別に処理するか、あるいは−１２８を使用しないようにする必要がある、という問題がある。【００１９】
なお、特許文献２には、入力データにおいてビットが１となる位置を示すデータの１ビット当たりの値を決めるためのデータを抽出するマスクデータを用いて順に各々のビットの値を求める１位置検出方法が開示されている。特許文献２には、この１位置検出方法によれば、ビットが１となる位置のデータの１ビット当たりの値を決めるために、１回のマスク処理と１回の比較を行うだけでよいので、ビットが１となる位置を検出するための処理時間が短くすることができると記載されている。【００２０】
また、特許文献３には、入力データの先頭ビットと論理状態の異なるビットが最初に現れるビット位置を検出し、入力データの小数点の位置から検出したビット位置までの距離を表す情報に基づいて、入力データをシフトする正規化データ生成回路が開示されている。特許文献３には、この正規化データ生成回路によれば、シフト操作のほとんどをハード的に行うことができるため、正規化データの生成時間を短縮することができると記載されている。【００２１】
しかし、特許文献２及び３は、本願発明のように、正規化対象のデータを構成するビット列から、互いに隣接するビットの組のそれぞれについて、互いに隣接するビットの値が異なるか否かを示すビットを含むビット列を生成する技術を開示したものではない。
【先行技術文献】
【特許文献】
【００２２】
【特許文献１】特開平９−１２８２１３号公報
【特許文献１】特開平６−７５７４６号公報
【特許文献１】特開平８−２１２０５２号公報
【発明の概要】
【発明が解決しようとする課題】
【００２３】
背景技術として説明したように、複数のデータを共通の指数によって正規化する場合に、指数の算出を高速に行うことができず、かつ、回路規模及び消費電力が大きくなってしまっているという問題がある。【００２４】
本発明はこのような課題を解決するためのものであり、複数のデータを共通の指数によって正規化する場合に、指数の算出の高速化を図ることができ、かつ、そのための回路規模及び消費電力の低減を図ることができる半導体集積回路及び指数算出方法を提供することを目的としている。
【課題を解決するための手段】
【００２５】
本発明の第１の態様にかかる半導体集積回路は、複数のデータを共通の指数によって正規化する場合に、当該複数のデータの指数を算出する半導体集積回路であって、前記データを構成する第１のビット列の互いに隣接するビットの組のそれぞれについて、当該互いに隣接するビットの値が異なることを示す遷移値、又は、当該互いに隣接するビットの値が異ならないことを示す非遷移値をとるビットを含む第２のビット列を生成するビット列生成回路と、前記ビット列生成回路によって前記複数のデータのそれぞれを構成する複数の第１のビット列から生成された複数の第２のビット列の前記遷移値のビットの位置に基づいて、前記複数のデータの指数を算出する指数算出回路と、を備えたことを特徴とするものである。【００２６】
本発明の第２の態様にかかる指数算出方法は、複数のデータを共通の指数によって正規化する場合に、当該複数のデータの指数を算出する指数算出方法であって、前記データを構成する第１のビット列の互いに隣接するビットの組のそれぞれについて、当該互いに隣接するビットの値が異なることを示す遷移値、又は、当該互いに隣接するビットの値が異ならないことを示す非遷移値をとるビットを含む第２のビット列を生成し、前記複数のデータのそれぞれを構成する複数の第１のビット列から生成された複数の第２のビット列の前記遷移値のビットの位置に基づいて、前記複数のデータの指数を算出する、を備えたことを特徴とするものである。
【発明の効果】
【００２７】
上述した本発明の各態様によれば、複数のデータを共通の指数によって正規化する場合に、指数の算出の高速化を図ることができ、かつ、そのための回路規模及び消費電力の低減を図ることができる半導体集積回路及び指数算出方法を提供することができる。
【図面の簡単な説明】
【００２８】
【図１】本発明の実施の形態１にかかる半導体集積回路の構成を示すブロック図である。
【図２】本発明の実施の形態１にかかる最大指数算出回路の構成を示すブロック図である。
【図３】本発明の実施の形態１にかかるエッジ検出回路の構成を示すブロック図である。
【図４】本発明の実施の形態１にかかる最大指数算出回路の動作を示すタイミング図である。
【図５】本発明の実施の形態２にかかる正規化回路の構成を示すブロック図である。
【図６】本発明の実施の形態２にかかる正規化回路の動作を示すタイミング図である。
【図７】本発明の実施の形態３にかかる最大指数算出回路の構成を示すブロック図である。
【図８】本発明の実施の形態３にかかる最大指数算出回路の動作を示すタイミング図である。
【図９】本発明の実施の形態３にかかる最大指数算出回路の他の構成例を示すブロック図である。
【図１０】本発明の実施の形態４にかかる正規化回路の構成を示すブロック図である。
【図１１】本発明の実施の形態４にかかる正規化回路の動作を示すタイミング図である。
【図１２】本発明の実施の形態４にかかる正規化回路の他の構成例を示すブロック図である。
【発明を実施するための形態】
【００２９】
次に、本発明の実施の形態について図面を参照して説明する。
［第１の実施の形態］
まず、図１を参照して、本発明の実施の形態１にかかる最大指数算出回路の概要となる半導体集積回路５０について説明する。図１は、本発明の実施の形態１にかかる半導体集積回路の構成を示すブロック図である。
【００３０】
半導体集積回路５０は、ビット列生成回路５１及び指数算出回路５２を有する。半導体集積回路５０は、複数のデータを共通の指数によって正規化する場合に、複数のデータの指数を算出する。
ビット列生成回路５１は、データを構成する第１のビット列の互いに隣接するビットの組のそれぞれについて、互いに隣接するビットの値が異なることを示す遷移値、又は、互いに隣接するビットの値が異ならないことを示す非遷移値をとるビットを含む第２のビット列を生成する。
指数算出回路５２は、ビット列生成回路５１によって複数のデータのそれぞれを構成する複数の第１のビット列から生成された複数の第２のビット列の遷移値のビットの位置に基づいて、複数のデータの指数を算出する。
【００３１】
ビット列生成回路５１は、共通の指数によって正規化する複数のデータが入力される。ビット列生成回路５１は、データを構成する第１のビット列の互いに隣接するビットの組のそれぞれについて、互いに隣接するビットの値が異なることを示す遷移値、又は、互いに隣接するビットの値が異ならないことを示す非遷移値としたビットを含む第２のビット列を生成する。ビット列生成回路５１は、複数のデータのそれぞれを構成する複数の第１のビット列から生成された複数の第２のビット列を指数算出回路５２に出力する。
指数算出回路５２は、ビット列生成回路５１から出力された複数の第２のビット列の遷移値のビットの位置に基づいて、複数のデータの指数を算出する。指数算出回路５２は、算出した指数を出力する。
【００３２】
以上に説明したように、本実施の形態１にかかる半導体集積回路５０は、正規化対象のデータを構成する第１のビット列の互いに隣接するビットの組のそれぞれについて、互いに隣接するビットの値が異なるか否かを示すビットを含む第２のビット列を生成している。この第２のビット列によれば、第１のビット列の互いに隣接するビットの組のそれぞれについて、互いに隣接するビットの値が異なるか否かが分かる。そのため、データの符号がいずれも変化せずに正規化後の値が正しく表現されるシフト量を特定することができる。つまり、最大指数を算出することができる。
【００３３】
そして、本実施の形態１にかかる半導体集積回路５０によれば、単純に互いに隣接するビットの値が異なるか否かを論理演算するだけであるため、指数の算出の高速化を図ることができ、かつ、そのための回路規模及び消費電力の低減を図ることができる。
【００３４】
以下、図面を参照して本発明の実施の形態１について詳細に説明する。
図２は、本発明の第１の実施の形態にかかる最大指数算出回路１００の構成を示すブロック図である。最大指数算出回路１００は、複数の入力データからなるブロックに関して、ブロック内の全データの最大指数を算出する回路である。
【００３５】
具体的には、最大指数算出回路１００は、入力されるクロック信号に基づいて、ブロック内の全データを順次入力して、ブロック内の全データの最大指数を算出する。最大指数算出回路１００は、ブロックごとに算出した最大指数を出力する。このとき、最大指数算出回路１００は、入力されたブロックエンド信号を参照して、ブロックの終端を識別する。入力データは、例えば、外部回路（図示せず）から最大指数算出回路１００に入力される。そして、外部回路は、ブロックにおける最後の入力データを最大指数算出回路１００に出力するサイクルで、アサートしたブロックエンド信号を最大指数算出回路１００に出力する。
【００３６】
最大指数算出回路１００は、主な回路として、エッジ検出回路１０１、論理和回路１０２、レジスタ１０３、ＭＳＢ側ビット位置検出回路１０４、を含んでいる。
【００３７】
エッジ検出回路１０１は、入力された入力データを構成するビット列の値の遷移（エッジ）を検出する回路である。エッジ検出回路１０１は、入力された入力データを構成するビット列の値の遷移（エッジ）を検出する。エッジ検出回路１０１は、検出結果をエッジ検出結果１０５として論理和回路１０２に出力する。
【００３８】
具体的には、エッジ検出回路１０１は、入力データを構成するビット列のＭＳＢからｎビット目とｎ＋１ビット目との値が異なるか否かを示す値を算出する（ｎは、０以上の整数）。エッジ検出回路１０１は、算出した値をＭＳＢからｎビット目に配列する。エッジ検出回路１０１は、このように算出した値を配列したビット列を検出結果として生成する。なお、ＭＳＢから０ビット目と言った場合は、ＭＳＢであるものとする。本実施の形態１では、ビットの値が異なるか否かを示す値が、ビットの値が異なる場合は１（遷移値）となり、ビットの値が異ならない場合は０（非遷移値）となる場合について例示する。言い換えると、本実施の形態１では、ビットの値が異なるか否かを示す値が、ビットの値が等しい場合は０となる場合について例示する。エッジ検出回路１０１は、ビット列生成回路５１として機能する。
【００３９】
論理和回路１０２は、前記エッジ検出回路１０１が出力するエッジ検出結果１０５と、レジスタ１０３が出力するレジスタ値１０７の論理和を算出する。論理和回路１０２は、算出した論理和を論理和値１０６としてレジスタ１０３に出力する。
【００４０】
レジスタ１０３は、論理和回路１０２が出力する論理和値１０６を、入力されたクロック信号に基づいた動作サイクルごとに保持する回路である。レジスタ１０３は、保持した論理和値を動作サイクルごとにレジスタ値１０７として、論理和回路１０２およびＭＳＢ側ビット位置検出回路１０４に出力する。また、レジスタ１０３は、ブロックエンド信号を参照して、ブロックの最後の入力データに基づいた最終的な論理和値１０６が論理和回路１０２から入力される最後の動作サイクルを認識する。レジスタ１０３は、各ブロックの最後の動作サイクルの次のサイクルにおいて、ブロックごとに保持している論理和値を初期値である０にリセットする。レジスタ１０３は、最終的な論理和値１０６をＭＳＢ側ビット位置検出回路１０４に出力してから、保持している論理和値をリセットする。
【００４１】
ＭＳＢ側ビット位置検出回路１０４は、レジスタ１０３が出力するレジスタ値１０７について、レジスタ値１０７を構成するビット列のＭＳＢ側の遷移値のビット位置を検出する。ＭＳＢ側ビット位置検出回路１０４は、検出したビット位置から最大指数を算出して出力する回路である。具体的には、ＭＳＢ側ビット位置検出回路１０４は、レジスタ１０３が出力するレジスタ値１０７のビットの値が１である位置が、ＭＳＢ側から数えてＭビット目である場合（Ｍは０以上の整数）、最大指数として−１ｘＭを出力する。
【００４２】
例えば、レジスタ値１０７のビットの値が１である位置が、ＭＳＢ側から数えて１ビット目である場合、入力データの全てで、ＭＳＢ側から０ビット目と１ビット目の値が同じことになる。逆に、この場合は、入力データのいずれかが、ＭＳＢ側から１ビット目と２ビット目の値が異なることになる。したがって、上述した計算式（−１ｘＭ）によれば、入力データの符号がいずれも変化せずに正規化後の値が正しく表現されるシフト量に対応する最大指数として、−１ｘ１＝−１を算出することができる。
【００４３】
ここで、レジスタ１０３は動作サイクルごとにレジスタ値１０７を出力するが、ＭＳＢ側ビット位置検出回路１０４は、ブロックとしての最終的な論理和値を示すレジスタ値１０７に基づいて、最大指数を算出する。ＭＳＢ側ビット位置検出回路１０４は、ブロックエンド信号を参照して、ブロックとしての最終的な論理和値を示すレジスタ値１０７がレジスタ１０３から出力されるサイクルを認識する。ＭＳＢ側ビット位置検出回路１０４は、最終的な論理和値を示すレジスタ値１０７を構成するビット列のＭＳＢ側のビット位置を検出する。ＭＳＢ側ビット位置検出回路１０４は、検出したビット位置から最大指数を算出する。ＭＳＢ側ビット位置検出回路１０４は、算出した最大指数を出力する。
論理和回路１０２、レジスタ１０３及びＭＳＢ側ビット位置検出回路１０４は、指数算出回路５２として機能する。
【００４４】
つぎに、図３を参照して、エッジ検出回路１０１の構成を説明する。エッジ検出回路１０１は、複数の排他的論理和（ＸＯＲ）回路１１０を有する。エッジ検出回路１０１は、入力データを構成するビット列の隣接するビット間の排他的論理和をそれぞれ算出して出力する。すなわち、入力データがＹビットのビット列から構成される場合、エッジ検出回路１０１は、Ｙ−１個のＸＯＲ回路１１０から構成される（Ｙは、正の整数）。
【００４５】
図３は、入力データがｂ７〜ｂ０の８ビットのビット列から構成される場合の、エッジ検出回路１０１の構成例を示している。エッジ検出回路１０１は、入力データを構成するビット列の隣接するビット間の排他的論理和をそれぞれ算出する。エッジ検出回路１０１は、算出した排他的論理和をエッジ検出結果ｅ７〜ｅ１として論理和回路１０２に出力する。ここで、入力データのビットｂ７およびエッジ検出結果のビットｅ７がＭＳＢである。
【００４６】
［第１の実施の形態の動作］
次に、図４を参照して、本発明の実施の形態１にかかる最大指数算出回路の動作について説明する。図４は、本発明の実施の形態１にかかる最大指数算出回路１００の動作を示すタイミング図である。最大指数算出回路１００は、入力されたクロック信号に基づいて動作を行う。
【００４７】
正規化対象のブロックの例として、次に示す入力データ１〜入力データ８の８つのデータからなるブロックを考える。各入力データは、８ビットである。下記では各データの値を２の補数表現で示している。なお、以降に示すデータのビット列は、最も左のビットがＭＳＢであり、最も右のビットがＬＳＢであるものとして示す。なお、ＭＳＢは、符号ビットとなる。
【００４８】
入力データ１：  ０００１０１１１
入力データ２：  ００１１０００１
入力データ３：  ０００００１１０
入力データ４：  １１１１００１１
入力データ５：  １１１１１０００
入力データ６：  ０００００１１０
入力データ７：  ００００１０１１
入力データ８：  ０００１１０１１
【００４９】
（サイクル１）
まず、動作サイクルの１サイクル目（サイクル１）で、最大指数算出回路１００は、入力データ１が入力される。エッジ検出回路１０１は、入力データ１を構成するビット列の値の遷移（エッジ）を検出する。エッジ検出回路１０１は、検出した結果をエッジ検出結果１として論理和回路１０２に出力する。より詳細には、エッジ検出回路１０１は、入力データ１を構成するビット列の隣接するビット間の排他的論理和をそれぞれ算出して出力する。
【００５０】
エッジ検出結果１： ００１１１００
【００５１】
つぎに、論理和回路１０２は、エッジ検出回路１０１が出力するエッジ検出結果１と、レジスタ１０３が出力するレジスタ値１との論理和を算出する。論理和回路１０２は、算出した論理和を論理和値１としてレジスタ１０３に出力する。ここで、サイクル１におけるレジスタ値１の値は初期値の０である。
【００５２】
論理和値１： ００１１１００
【００５３】
レジスタ１０３は、サイクル１において論理和回路１０２が出力する論理和値１を保持する。レジスタ１０３は、つぎの動作サイクルであるサイクル２において、保持した論理和値１をレジスタ値２として出力する。
【００５４】
（サイクル２）
つぎに、動作サイクルの２サイクル目（サイクル２）では、最大指数算出回路１００は、入力データ２が入力される。エッジ検出回路１０１は、入力データ２を構成するビット列の値の遷移（エッジ）を検出する。エッジ検出回路１０１は、検出した結果をエッジ検出結果２として論理和回路１０２に出力する。より詳細には、エッジ検出回路１０１は、入力データ２の入力データを構成するビット列の隣接するビット間の排他的論理和をそれぞれ算出して出力する。
【００５５】
エッジ検出結果２： ０１０１００１
【００５６】
つぎに、論理和回路１０２は、エッジ検出回路１０１が出力するエッジ検出結果２と、レジスタ１０３が出力するレジスタ値２との論理和を算出する。論理和回路１０２は、算出した論理和を論理和値２としてレジスタ１０３に出力する。ここで、サイクル２におけるレジスタ１０３の出力であるレジスタ値２の値は、サイクル１で保持した論理和値１である。
【００５７】
論理和値２： ０１１１１０１
【００５８】
レジスタ１０３は、サイクル２において論理和回路１０２が出力する論理和値２を保持する。レジスタ１０３は、つぎの動作サイクルであるサイクル３において、保持した論理和値２をレジスタ値３として出力する。
【００５９】
（サイクル３〜８）
サイクル３〜８においても同様にして、最大指数算出回路１００は、入力データ３〜８を各動作サイクルにおいて入力する。エッジ検出回路１０１は、入力データ３〜８を構成するビット列の値の遷移（エッジ）をそれぞれ検出する。エッジ検出回路１０１は、検出した結果のそれぞれをエッジ検出結果３〜８として出力する。
【００６０】
エッジ検出結果３： ００００１０１
エッジ検出結果４： ０００１０１０
エッジ検出結果５： ００００１００
エッジ検出結果６： ００００１０１
エッジ検出結果７： ０００１１１０
エッジ検出結果８： ００１０１１０
【００６１】
論理和回路１０２は、各サイクルにおいて、エッジ検出回路１０１が出力するエッジ検出結果３〜８のそれぞれと、レジスタ１０３が出力するレジスタ値のそれぞれとの論理和を算出する。論理和回路１０２は、算出した論理和のそれぞれを論理和値３〜８としてレジスタ１０３に出力する。ここで、サイクル３〜８のそれぞれにおけるレジスタ１０３の出力であるレジスタ値３〜８の値はそれぞれ、サイクル２〜７で保持した論理和値２〜７である。
【００６２】
論理和値３： ０１１１１０１
論理和値４： ０１１１１１１
論理和値５： ０１１１１１１
論理和値６： ０１１１１１１
論理和値７： ０１１１１１１
論理和値８： ０１１１１１１
【００６３】
ブロックの最後の動作サイクルの次のサイクルであるサイクル９では、ＭＳＢ側ビット位置検出回路１０４は、ブロックとしての最終的な論理和値８について、論理和値８を構成するビット列のＭＳＢ側の遷移値のビット位置を検出する。ＭＳＢ側ビット位置検出回路１０４は、検出したビット位置から最大指数を算出する。ＭＳＢ側ビット位置検出回路１０４は、算出した最大指数を出力する。具体的には、論理和値８のビットの値が１となるビット位置は、ＭＳＢ側から数えて１ビット目であるので、上述した計算式（−１ｘＭ）によれば最大指数は、−１ｘ１＝−１となる。したがって、ＭＳＢ側ビット位置検出回路１０４は、最大指数として−１を出力する。
【００６４】
また、ブロックの最後の動作サイクルの次のサイクルであるサイクル９では、レジスタ１０３は、ブロックに対して保持している論理和値を初期値である０にリセットする。その結果、レジスタ１０３は、次のサイクルで初期値０を出力する。
【００６５】
ここで、ＭＳＢ側ビット位置検出回路１０４及びレジスタ１０３は、各ブロックの最後の動作サイクルを、入力されたブロックエンド信号の値が１になるサイクルとして識別する。図４においては、サイクル８でブロックエンド信号の値が１となっているため、サイクル８がブロックの最後の動作サイクルであることを示している。
【００６６】
つぎに、入力データに負側の最大値が含まれる場合について説明する。８ビットの入力データの場合、そのデータの負側の最大値は−１ｘ（２の７乗）＝−１２８であり、２の補数表現では、１０００００００である。この入力データのエッジ検出結果は１００００００になる。したがって、ブロックとしての最終的な論理和値のＭＳＢは値１になるので、入力データに負側の最大値が含まれるブロックの最大指数は０と算出される。すなわち、本実施の形態１によれば、入力データに負側の最大値が含まれる場合であっても、正しい最大指数を算出することができる。
【００６７】
［第１の実施の形態の効果］
本実施の形態１では、ブロック浮動小数点の正規化処理において、エッジ検出回路１０１を使用して最大指数を算出する、ことを特徴としている。エッジ検出回路１０１は、入力データを構成するビット列の隣接するビット間の排他的論理和をそれぞれ算出するだけでよいので、複数のＸＯＲ回路からなる論理段数が１段の単純な構成の回路で実現することができる。
【００６８】
したがって、背景技術として説明したように入力データの絶対値を算出する正規化処理と比較して、本実施の形態１による最大指数算出回路は、最大指数を高速に算出することが可能であり、かつ回路規模や消費電力を小さくすることができる。
【００６９】
さらに、本実施の形態１による最大指数算出回路は、入力データに負側の最大値が含まれる場合であっても正しく処理することが可能である。したがって、本実施の形態１にかかる最大指数算出回路によれば、データの値が負側の最大値の場合でも、そのデータを特別に処理する必要や、負側の最大値を使用しないようにする必要がない、という特徴がある。
【００７０】
［第２の実施の形態］
次に、図５を参照して、本発明の実施の形態２にかかるブロック浮動小数点正規化回路について説明する。本発明の実施の形態２では、実施の形態１にかかる最大指数算出回路を使用したブロック浮動小数点正規化回路の具体例について説明する。
【００７１】
図５は、本発明の実施の形態２にかかるブロック浮動小数点正規化回路（以下では正規化回路と表記する）の構成を示すブロック図である。
【００７２】
図５において、本実施の形態２による正規化回路は、ブロックを構成する各入力データに対してブロック浮動小数点における正規化処理を行う。正規化回路は、入力データを正規化したデータを正規化データとして出力する。
【００７３】
図５において、本実施の形態２による正規化回路は、メモリ１２０と、実施の形態１による最大指数算出回路１００と、シフト回路１３０とを有する。
【００７４】
実施の形態１による最大指数算出回路１００は、入力された入力データに対して、最大指数を算出する。最大指数算出回路１００は、算出した最大指数を最大指数１０８としてシフト回路１３０に出力する。
【００７５】
メモリ１２０は、最大指数算出回路１００が入力された入力データの最大指数を算出している間、入力データを保持する。入力データは、例えば、外部装置（図示せず）からメモリ１２０と最大指数算出回路１００のそれぞれに順次入力される。メモリ１２０は、外部装置から入力される入力データを順次保持していく。また、メモリ１２０は、最大指数算出回路１００が最大指数の算出を完了した後、保持していた入力データを、入力データ１２１として順次シフト回路１３０に出力する。
【００７６】
シフト回路１３０は、最大指数算出回路１００が算出した最大指数１０８に基づいて、メモリ１２０が出力する入力データをシフトすることで正規化処理を行う。
【００７７】
［第２の実施の形態の動作］
次に、図６を参照して、本発明の実施の形態２にかかる正規化回路の動作について説明する。図６は、本発明の実施の形態２にかかる正規化回路の動作を示すタイミング図である。本発明の実施の形態２にかかる正規化回路は、入力されたクロック信号に基づいて動作を行う。
【００７８】
正規化対象のブロックの例として、実施の形態１と同様に、次に示す入力データ１〜入力データ８の８つのデータからなるブロックを考える。各入力データは、８ビットである。下記では各データの値を２の補数表現で示している。
【００７９】
入力データ１：  ０００１０１１１
入力データ２：  ００１１０００１
入力データ３：  ０００００１１０
入力データ４：  １１１１００１１
入力データ５：  １１１１１０００
入力データ６：  ０００００１１０
入力データ７：  ００００１０１１
入力データ８：  ０００１１０１１
【００８０】
図６は、図４に示すサイクル１〜サイクル８において、最大指数算出回路１００が、入力された入力データの最大指数を算出した後の、サイクル１'〜サイクル８'における動作を示している。ここで、サイクル１〜７の動作は、図４で示したものと同様であるとして、図示を省略している。また、サイクル９とサイクル１'は同一の動作サイクルを示している。
【００８１】
メモリ１２０は、サイクル１〜８において、最大指数算出回路１００が入力された入力データの最大指数を算出している間、入力データを保持している。つぎに、メモリ１２０は、最大指数算出回路１００が最大指数の算出を完了した後、サイクル１'〜８'において、保持していた入力データを順次シフト回路１３０に出力する。ここで、メモリ１２０は、ブロックエンド信号を参照して、最大指数算出回路１００が最大指数の算出を完了するタイミングを識別する。具体的には、メモリ１２０は、ブロックエンド信号の値が１となったサイクル８の次のサイクル９から保持していた入力データ１〜８の出力を開始する。
【００８２】
また、メモリ１２０は、ブロックエンド信号を参照して、入力データの出力を終了するタイミングを識別する。具体的には、メモリ１２０は、ブロックエンド信号の値が再度１となったサイクル８'で入力データの出力を終了する。例えば、外部装置は、入力データの出力を完了したサイクル８から、入力データ１〜８のデータ数分のサイクルが経過したサイクル８'で値を１としたブロックエンド信号を出力するようにする。
【００８３】
最大指数算出回路１００は、サイクル１〜８において、入力された入力データの最大指数を算出する。つぎに、最大指数算出回路１００は、サイクル９において、算出した最大指数として−１をシフト回路１３０に出力する。最大指数算出回路１００は、メモリ１２０が保持していた入力データの出力を完了するサイクル８'まで、最大指数である−１の出力を継続する。
【００８４】
ここで、最大指数算出回路１００は、ブロックエンド信号を参照して、最大指数の出力を終了するタイミングを識別する。具体的には、最大指数算出回路１００は、ブロックエンド信号の値が再度１となったサイクル８'で最大指数の出力を終了する。
【００８５】
シフト回路１３０は、サイクル１'〜８'において、最大指数算出回路１００が算出して出力する最大指数である−１に基づいて、メモリ１２０が出力する入力データ１〜８を順次シフトすることで正規化処理を行う。そして、シフト回路１３０は、入力データ１〜８を正規化したデータを正規化データ１〜８として出力する。ここで、シフト回路１３０は、最大指数算出回路１００から出力された最大指数が−ｍである場合、入力データ１〜８を左にｍビットシフトすることによって、入力データ１〜８の正規化を行う（ｍは、０以上の整数）。
【００８６】
その結果、シフト回路１３０が出力する正規化データ１〜８は以下に示す値になり、正しく正規化処理が完了する。入力データｋの正規化後のデータは、正規化データｋとして示している（ｋは、１〜８のいずれかの正整数）。
【００８７】
正規化データ１：  ００１０１１１０
正規化データ２：  ０１１０００１０
正規化データ３：  ００００１１００
正規化データ４：  １１１００１１０
正規化データ５：  １１１１００００
正規化データ６：  ００００１１００
正規化データ７：  ０００１０１１０
正規化データ８：  ００１１０１１０
【００８８】
［第２の実施の形態の効果］
本実施の形態２では、ブロック浮動小数点の正規化処理において、演算処理量の大きい最大指数の算出に、実施の形態１による最大指数算出回路１００を使用するので、最大指数の算出処理に必要な回路規模や消費電力を小さくすることができる。さらに、本実施の形態２にかかる正規化回路は、最大指数を高速に算出することが可能であり、かつ回路規模や消費電力を小さくすることができる最大指数算出回路１００を有する。そして、正規化回路は、最大指数算出回路１００が算出した最大指数に基づいて、ブロック浮動小数点の正規化処理を実行している。その結果、本実施の形態２によれば、ブロック浮動小数点の正規化処理を高速に実行することが可能であり、かつ、回路規模や消費電力を小さくすることができる。
【００８９】
［第３の実施の形態］
つぎに、図面を参照して本発明の実施の形態３について説明する。
【００９０】
図７は、本発明の第３の実施の形態にかかる最大指数算出回路１５０の構成を示すブロック図である。最大指数算出回路１５０は、複数の入力データからなるブロックに関して、ブロック内の全データの最大指数を算出する回路である。最大指数算出回路１５０は、エッジ検出を並列に実行することで、最大指数を高速に算出することを特徴とする。図７において、本発明の第１の実施形態による最大指数算出回路１００と同一の構成要素には同一の符号を付してある。
【００９１】
具体的には、最大指数算出回路１５０は、入力されるクロック信号に基づいて、ブロック内の全データを４つ同時に順次入力して、ブロック内の全データの最大指数を算出する。最大指数算出回路１５０は、ブロックごとに算出した最大指数を出力する。このとき、最大指数算出回路１５０は、入力するブロックエンド信号を参照して、ブロックの終端を識別する。
【００９２】
最大指数算出回路１５０は、主な回路として、４つのエッジ検出回路１０１、論理和回路１５２、レジスタ１０３、ＭＳＢ側ビット位置検出回路１０４、を含んでいる。
【００９３】
エッジ検出回路１０１は、入力された入力データを構成するビット列の値の遷移（エッジ）を検出する回路である。４つのエッジ検出回路１０１は、入力データａ〜ｄがそれぞれ入力される。４つのエッジ検出回路１０１は、それぞれの入力データを構成するビット列の値の遷移（エッジ）を検出する。４つのエッジ検出回路１０１は、検出した結果をエッジ検出結果１５５ａ〜１５５ｄとして論理和回路１５２にそれぞれ出力する。
【００９４】
論理和回路１５２は、５入力の回路であり、４つのエッジ検出回路１０１が出力するエッジ検出結果１５５ａ〜１５５ｄと、レジスタ１０３が出力するレジスタ値１０７が入力される。論理和回路１５２は、入力されたエッジ検出結果１５５ａ〜１５５ｄ及びレジスタ値１０７の論理和を算出する。論理和回路１５２は、算出した論理和を論理和値１５６としてレジスタ１０３に出力する。
【００９５】
レジスタ１０３は、論理和回路１５２が出力する論理和値１５６を、入力されたクロック信号に基づいた動作サイクルごとに保持する回路である。レジスタ１０３は、保持した論理和値を動作サイクルごとにレジスタ値１０７として、論理和回路１５２およびＭＳＢ側ビット位置検出回路１０４に出力する。また、レジスタ１０３は、ブロックエンド信号を参照して、最後の動作サイクルを認識する。レジスタ１０３は、ブロックの最後の動作サイクルにおいて、ブロックに対して保持している論理和値を初期値である０にリセットする。
【００９６】
ＭＳＢ側ビット位置検出回路１０４は、レジスタ１０３が出力するレジスタ値１０７について、レジスタ値１０７を構成するビット列のＭＳＢ側の遷移値のビット位置を検出する。ＭＳＢ側ビット位置検出回路１０４は、検出したビット位置から最大指数を算出して出力する回路である。具体的には、ＭＳＢ側ビット位置検出回路１０４は、レジスタ１０３が出力するレジスタ値１０７のビットの値が１である位置が、ＭＳＢ側から数えてＭビット目である場合（Ｍは０以上の整数）、最大指数として−１ｘＭを出力する。
【００９７】
ここで、レジスタ１０３は動作サイクルごとにレジスタ値１０７を出力するが、ＭＳＢ側ビット位置検出回路１０４は、ブロックとしての最終的なレジスタ値１０７に基づいて、最大指数を算出する。ＭＳＢ側ビット位置検出回路１０４は、ブロックエンド信号を参照して、ブロックとしての最終的な論理和値を示すレジスタ値１０７がレジスタ１０３から出力されるサイクルを認識する。ＭＳＢ側ビット位置検出回路１０４は、最終的な論理和値を示すレジスタ値１０７を構成するビット列のＭＳＢ側の遷移値のビット位置を検出して、最大指数を算出する。ＭＳＢ側ビット位置検出回路１０４は、最大指数として出力する。
【００９８】
［第３の実施の形態の動作］
次に、図８を参照して、本発明の実施の形態３にかかる最大指数算出回路の動作について説明する。図８は、本発明の実施の形態３にかかる最大指数算出回路１５０の動作を示すタイミング図である。最大指数算出回路１５０は、入力されたクロック信号に基づいて動作を行う。
【００９９】
まず、正規化対象のブロックの例として、次に示す入力データ１〜入力データ８の８つのデータからなるブロックを考える。各入力データは、８ビットである。下記では各データの値を２の補数表現で示している。
【０１００】
入力データ１：  ０００１０１１１
入力データ２：  ００１１０００１
入力データ３：  ０００００１１０
入力データ４：  １１１１００１１
入力データ５：  １１１１１０００
入力データ６：  ０００００１１０
入力データ７：  ００００１０１１
入力データ８：  ０００１１０１１
【０１０１】
（サイクル１）
まず、動作サイクルの１サイクル目（サイクル１）で、最大指数算出回路１５０は、４つの入力データ１〜４が入力される。４つのエッジ検出回路１０１のそれぞれは、入力データ１〜４を構成するビット列の値のそれぞれの遷移（エッジ）を検出する。４つのエッジ検出回路１０１は、検出結果のそれぞれをエッジ検出結果１ａ〜１ｄとして論理和回路１５２に出力する。より詳細には、エッジ検出回路１０１のそれぞれは、入力データ１ａ〜１ｄを構成するビット列のそれぞれについて、隣接するビット間の排他的論理和を算出して出力する。ここで、入力データ１の検出結果はエッジ検出結果１ａであり、入力データ２の検出結果はエッジ検出結果１ｂであり、入力データ３の検出結果はエッジ検出結果１ｃであり、入力データ４の検出結果はエッジ検出結果１ｄである。
【０１０２】
エッジ検出結果１ａ： ００１１１００
エッジ検出結果１ｂ： ０１０１００１
エッジ検出結果１ｃ： ００００１０１
エッジ検出結果１ｄ： ０００１０１０
【０１０３】
つぎに、論理和回路１５２は、４つのエッジ検出回路１０１がそれぞれ出力するエッジ検出結果１ａ〜１ｄと、レジスタ１０３が出力するレジスタ値１との論理和を算出する。論理和回路１５２は、算出した論理和を論理和値１としてレジスタ１０３に出力する。ここで、サイクル１におけるレジスタ値１の値は初期値の０である。
【０１０４】
論理和値１： ０１１１１１１
【０１０５】
レジスタ１０３は、サイクル１において論理和回路１５２が出力する論理和値１を保持する。レジスタ１０３は、つぎの動作サイクルであるサイクル２において、保持した論理和値１をレジスタ値２として出力する。
【０１０６】
（サイクル２）
つぎに、動作サイクルの２サイクル目（サイクル２）では、最大指数算出回路１５０は、４つの入力データ５〜８が入力される。４つのエッジ検出回路１０１のそれぞれは、入力データ５〜８を構成するビット列の値のそれぞれの遷移（エッジ）を検出する。エッジ検出回路１０１は、検出結果のそれぞれをエッジ検出結果２ａ〜２ｄとして論理和回路１５２に出力する。より詳細には、エッジ検出回路１０１のそれぞれは、入力データ２ａ〜２ｄを構成するビット列のそれぞれについて、隣接するビット間の排他的論理和を算出して出力する。ここで、入力データ５の検出結果はエッジ検出結果２ａであり、入力データ６の検出結果はエッジ検出結果２ｂであり、入力データ７の検出結果はエッジ検出結果２ｃであり、入力データ８の検出結果はエッジ検出結果２ｄである。
【０１０７】
エッジ検出結果２ａ： ００００１００
エッジ検出結果２ｂ： ００００１０１
エッジ検出結果２ｃ： ０００１１１０
エッジ検出結果２ｄ： ００１０１１０
【０１０８】
つぎに、論理和回路１５２は、４つのエッジ検出回路１０１がそれぞれ出力するエッジ検出結果２ａ〜２ｄと、レジスタ１０３が出力するレジスタ値２との論理和を算出する。論理和回路１０２は、算出した論理和を論理和値２としてレジスタ１０３に出力する。ここで、サイクル２におけるレジスタ１０３の出力であるレジスタ値２の値は、サイクル１で保持した論理和値１である。
【０１０９】
論理和値２： ０１１１１１１
【０１１０】
サイクル３はブロックの最後の動作サイクルの次のサイクルであるので、ＭＳＢ側ビット位置検出回路１０４は、ブロックとしての最終的な論理和値２について、論理和値を構成するビット列のＭＳＢ側の遷移値のビット位置を検出する。ＭＳＢ側ビット位置検出回路１０４は、検出したビット位置から最大指数を算出する。ＭＳＢ側ビット位置検出回路１０４は、算出した最大指数を出力する。具体的には、論理和値２のビットの値が１となるビット位置は、ＭＳＢ側から数えて２ビット目であるので、ＭＳＢ側ビット位置検出回路１０４は、最大指数として−１を出力する。
【０１１１】
また、サイクル３はブロックの最後の動作サイクルの次のサイクルであるので、レジスタ１０３は、ブロックに対して保持している論理和値を初期値である０にリセットする。その結果、レジスタ１０３は、次のサイクルで初期値０を出力する。
【０１１２】
ここで、ＭＳＢ側ビット位置検出回路１０４及びレジスタ１０３は、各ブロックの最後の動作サイクルを、入力されたブロックエンド信号の値が１になるサイクルとして識別する。図８においては、サイクル２でブロックエンド信号の値が１となっているため、サイクル２がブロックの最後の動作サイクルであることを示している。
【０１１３】
つぎに、入力データに負側の最大値が含まれる場合について説明する。８ビットの入力データの場合、そのデータの負側の最大値は−１ｘ（２の７乗）＝−１２８であり、２の補数表現では、１０００００００である。この入力データのエッジ検出結果は１００００００になる。したがって、ブロックとしての最終的な論理和値のＭＳＢは値１になるので、入力データに負側の最大値が含まれるブロックの最大指数は０と算出される。すなわち、本実施の形態３においても、入力データに負側の最大値が含まれる場合であっても、正しい最大指数を算出することができる。
【０１１４】
［第３の実施の形態の効果］
本実施の形態３では、ブロック浮動小数点の正規化処理において、エッジ検出回路１０１を使用して最大指数を算出する、ことを特徴としている。エッジ検出回路１０１は、入力データを構成するビット列の隣接するビット間の排他的論理和をそれぞれ算出するだけでよいので、複数のＸＯＲ回路からなる論理段数が１段の単純な構成の回路で実現することができる。
【０１１５】
したがって、背景技術として説明したように入力データの絶対値を算出する絶対値回路が必要な正規化処理と比較して、本実施の形態３による最大指数算出回路は、最大指数を高速に算出することが可能であり、かつ回路規模や消費電力を小さくすることができる。
【０１１６】
さらに、本実施の形態３による最大指数算出回路は、入力データに負側の最大値が含まれる場合であっても正しく処理することが可能である。したがって、本実施の形態３にかかる最大指数算出回路によれば、データの値が負側の最大値の場合でも、そのデータを特別に処理する必要や、負側の最大値を使用しないようにする必要がない、という特徴がある。
【０１１７】
さらに、本実施の形態３による最大指数算出回路は、４つのエッジ検出回路１０１を備え、エッジ検出処理を並列に実行するので、最大指数を高速に算出することが可能である、という特徴がある。
【０１１８】
ここで、本実施の形態３では、４つのエッジ検出回路１０１を備え、エッジ検出処理を４並列で実行する場合について説明したが、エッジ検出回路１０１の数は任意であっても良い。例えば、Ｎ個のエッジ検出回路１０１を備え、エッジ検出処理をＮ並列で実行する最大指数算出回路１６０の構成例を図９に示す（ここでＮは２以上の整数）。
図９において、最大指数算出回路１６０が備えるＮ＋１入力の論理和回路１６２は、  Ｎ個のエッジ検出回路１０１が出力するＮ個のエッジ検出結果と、レジスタ１０３が出力するレジスタ値１０７の論理和を算出する。
【０１１９】
［第４の実施の形態］
次に、図１０を参照して、本発明の実施の形態４にかかるブロック浮動小数点正規化回路について説明する。本発明の実施の形態４では、実施の形態３にかかる最大指数算出回路を使用したブロック浮動小数点正規化回路の具体例について説明する。
【０１２０】
図１０は、本発明の実施の形態４にかかるブロック浮動小数点正規化回路（以下では正規化回路と表記する）の構成を示すブロック図である。
【０１２１】
図１０において、本実施の形態４による正規化回路は、ブロックを構成する各入力データに対してブロック浮動小数点における正規化処理を行う。正規化回路は、入力データを正規化したデータを正規化データとして出力する。ここで、本実施の形態４による正規化回路は、４つの入力データが同時に入力され、同時に入力された４つの入力データを正規化した４つの正規化データを同時に出力する。
【０１２２】
図１１において、本実施の形態４による正規化回路は、４つのメモリ１２０と、実施の形態３による最大指数算出回路１５０と、４つのシフト回路１３０とを有する。
【０１２３】
実施の形態３による最大指数算出回路１５０は、入力された入力データａ〜ｄに対して、最大指数を算出する。最大指数算出回路１５０は、算出した最大指数を最大指数１５８として４つのシフト回路１３０に出力する。
【０１２４】
４つのメモリ１２０はそれぞれ、最大指数算出回路１５０が入力された入力データの最大指数を算出している間、入力データａ〜ｄを保持する。入力データは、例えば、外部装置（図示せず）から４つのメモリ１２０と最大指数算出回路１００のそれぞれに、４つずつ順次入力される。４つのメモリ１２０のそれぞれは、外部装置から入力される入力データを順次保持していく。また、４つのメモリ１２０のそれぞれは、最大指数算出回路１５０が最大指数の算出を完了した後、保持していた入力データａ〜ｄを、入力データ１２１ａ〜ｄとして順次シフト回路１３０に対して出力する。
【０１２５】
４つのシフト回路１３０のそれぞれは、入力された入力データに対して最大指数算出回路１５０が算出した最大指数１５８に基づいて、４つのメモリ１２０が出力する入力データ１２１ａ〜ｄのそれぞれをシフトすることで正規化処理を行う。
【０１２６】
［第４の実施の形態の動作］
次に、図１１を参照して、本発明の実施の形態４にかかる正規化回路の動作について説明する。図１１は、本発明の実施の形態４にかかる正規化回路の動作を示すタイミングチャートである。本発明の実施の形態４にかかる正規化回路は、入力されたクロック信号に基づいて動作を行う。
【０１２７】
正規化対象のブロックの例として、実施の形態３と同様に、次に示す入力データ１〜入力データ８の８つのデータからなるブロックを考える。各入力データは、８ビットである。下記では各データの値を２の補数表現で示している。
【０１２８】
入力データ１：  ０００１０１１１
入力データ２：  ００１１０００１
入力データ３：  ０００００１１０
入力データ４：  １１１１００１１
入力データ５：  １１１１１０００
入力データ６：  ０００００１１０
入力データ７：  ００００１０１１
入力データ８：  ０００１１０１１
【０１２９】
図１１は、図８に示すサイクル１〜サイクル２において、最大指数算出回路１５０が、入力された入力データの最大指数を算出した後の、サイクル１'〜サイクル２'における動作を示している。ここで、サイクル１の動作は、図８で示したものと同様であるとして、図示を省略している。また、サイクル３とサイクル１'は同一の動作サイクルを示している。
【０１３０】
４つのメモリ１２０のそれぞれは、サイクル１〜２において、最大指数算出回路１５０が入力する入力データの最大指数を算出している間、入力データを保持している。つぎに、４つのメモリ１２０のそれぞれは、最大指数算出回路１５０が最大指数の算出を完了した後、サイクル１'〜２'において、保持していた入力データを順次シフト回路１３０に出力する。ここで、メモリ１２０は、ブロックエンド信号を参照して、最大指数算出回路１５０が最大指数の算出を完了するタイミングを識別する。
【０１３１】
最大指数算出回路１５０は、サイクル１〜２において、１サイクルに４つずつ入力された入力データの最大指数を算出する。つぎに、最大指数算出回路１５０は、サイクル３において、算出した最大指数として−１をシフト回路１３０に出力する。最大指数算出回路１５０は、メモリ１２０が保持していた入力データの出力を完了するサイクル２'まで、最大指数である−１の出力を継続する。
【０１３２】
４つのシフト回路１３０は、サイクル１'〜３'において、最大指数算出回路１５０が算出して出力する最大指数である−１に基づいて、メモリ１２０が出力する入力データ１〜８を１サイクルに４つずつ順次シフトすることで正規化処理を行う。そして、シフト回路１３０は、入力データ１〜８を正規化したデータを正規化データ１〜８として出力する。
【０１３３】
その結果、シフト回路１３０が出力する正規化データ１〜８は以下に示す値になり、正しく正規化処理が完了する。入力データｋの正規化後のデータは、正規化データｋとして示している（ｋは、１〜８のいずれかの正整数）。
【０１３４】
正規化データ１：  ００１０１１１０
正規化データ２：  ０１１０００１０
正規化データ３：  ００００１１００
正規化データ４：  １１１００１１０
正規化データ５：  １１１１００００
正規化データ６：  ００００１１００
正規化データ７：  ０００１０１１０
正規化データ８：  ００１１０１１０
【０１３５】
［第４の実施の形態の効果］
本実施の形態４では、ブロック浮動小数点の正規化処理において、演算処理量の大きい最大指数の算出に、実施の形態３による最大指数算出回路１５０を使用するので、最大指数の算出処理に必要な回路規模や消費電力を小さくすることができる。さらに、本実施の形態４にかかる正規化回路は、最大指数を高速に算出することが可能であり、かつ回路規模や消費電力を小さくすることができる最大指数算出回路１５０を有する。そして、正規化回路は、最大指数算出回路１５０が算出した最大指数に基づいて、ブロック浮動小数点の正規化処理を実行している。その結果、本実施の形態４によれば、ブロック浮動小数点の正規化処理を高速に実行することが可能であり、かつ、回路規模や消費電力を小さくすることができる。
【０１３６】
さらに、本実施の形態４にかかるブロック浮動小数点正規化回路は、メモリ１２０やシフト回路１３０をそれぞれ４つずつ備え、かつ、４並列で最大指数を算出する最大指数算出回路１５０を備えるので、ブロック浮動小数点の最大指数算出処理及び正規化処理を４並列で実行することができる。その結果、ブロック浮動小数点の正規化処理を高速に実行することができる、という特徴がある。
【０１３７】
ここで、本実施の形態４では、正規化処理を４並列で実行する場合について説明したが、並列数は任意であっても良い。例えば、Ｎ個のメモリ１２０と４つのシフト回路１３０を備え、かつ、Ｎ並列で最大指数を算出する最大指数算出回路１６０を備えることで、正規化処理をＮ並列で実行するブロック浮動小数点正規化回路の構成例を図１２に示す（ここでＮは２以上の整数）。
【０１３８】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【０１３９】
本実施の形態では、エッジ検出回路は、入力データを構成するビット列について、互いに隣接するビットの値が異なることを示す値（遷移値）を１とし、互いに隣接するビットの値が異ならないことを示す値（非遷移値）を０としたビット列を生成するようにしているが、これに限られない。エッジ検出回路は、互いに隣接するビットの値が異なることを示す値を０とし、互いに隣接するビットの値が異ならないことを示す値を１としたビット列を生成するようにしてもよい。つまり、エッジ検出回路が、例えば、ＸＯＲ回路ではなく、ＸＮＯＲ回路を有するようにしてもよい。この場合、例えば、論理和回路に代えて、エッジ検出回路から出力されたデータの論理積を算出する論理積回路を備えるようにする。そして、ＭＳＢ側ビット位置検出回路は、論理積回路が出力した論理積値のビットの値が０となるビット位置に基づいて、最大指数を算出するようにする。
【０１４０】
本実施の形態では、エッジ検出回路及び論理和回路が生成するビット列は、入力データを構成するビット列のＭＳＢからｎビット目及びｎ＋１ビット目の組のＸＯＲ結果を、ＭＳＢからｎビット目として配列しているが、これに限られない（ｎは、０以上の整数）。例えば、入力データのビット列が８ビットの場合、エッジ検出回路及び論理和回路は、入力データを構成するビット列のＭＳＢからｎビット目及びｎ＋１ビット目の組のＸＯＲ結果を、ＭＳＢから（７−ｎ）ビット目として配列するようにしてもよい。言い換えると、エッジ検出回路及び論理和回路は、入力データを構成するビット列のＭＳＢからｎビット目及びｎ＋１ビット目の組のＸＯＲ結果を、ＬＳＢからｎビット目として配列するようにしてもよい。この場合、例えば、ＭＳＢ側ビット位置検出回路に代えて、レジスタが出力する論理和値のビットの値が１である位置が、ＬＳＢ側から数えてＬビット目であるときに、ＬＳＢ側から最大指数として−１ｘＬを算出するビット位置検出回路を備えるようにする（Ｌは、０以上の整数）。なお、ＬＳＢから０ビット目と言った場合は、ＬＳＢであるものとする。
【０１４１】
本実施の形態では、エッジ検出回路が生成したビット列の論理和を算出して、算出した論理和に基づいて、最大指数を算出するようにしているが、これに限られない。例えば、論理和回路及びレジスタを備えずに、エッジ検出回路が生成したビット列を順次ＭＳＢ側ビット位置検出回路に直接出力するようにしてもよい。この場合、ＭＳＢ側ビット位置検出回路は、エッジ検出回路から順次出力されるビット列のそれぞれについて指数を算出する。そして、ＭＳＢ側ビット位置検出回路は、ブロック内の全データのうち、最も値が大きい指数を最大指数とするようにしてもよい。これによれば、ブロック内の各入力データの絶対値を順次算出して、算出した絶対値のそれぞれについて指数を算出して、ブロック内の全データのうち、最も値が大きい指数を最大指数とする場合と比較して、最大指数を高速に算出することが可能である。
【０１４２】
この出願は、２０１０年６月２２日に出願された日本出願特願２０１０−１４１７６５を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０１４３】
５０    半導体集積回路
５１    ビット列生成回路
５２    指数算出回路
１００    最大指数算出回路
１０１    エッジ検出回路
１０２    論理和回路
１０３    レジスタ
１０４    ＭＳＢ側ビット位置検出回路
１０５    エッジ検出結果
１０６    論理和値
１０７    レジスタ値
１１０    排他的論理和回路
１２０    メモリ
１３０    シフト回路
１５０    最大指数算出回路
１５２    論理和回路
１６０    最大指数算出回路
１６２    論理和回路
【図１】
2011161859.tif 000003
【図２】
2011161859.tif 000004
【図３】
2011161859.tif 000005
【図４】
2011161859.tif 000006
【図５】
2011161859.tif 000007
【図６】
2011161859.tif 000008
【図７】
2011161859.tif 000009
【図８】
2011161859.tif 000010
【図９】
2011161859.tif 000011
【図１０】
2011161859.tif 000012
【図１１】
2011161859.tif 000013
【図１２】
2011161859.tif 000014
【手続補正書】
【提出日】平成23年9月20日(2011.9.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ブロックに含まれる複数のデータを共通の指数によって正規化する場合に、当該複数のデータの指数を算出する半導体集積回路であって、
ビット列記憶手段と、
前記データを構成する第１のビット列の互いに隣接するビットの組のそれぞれについて、当該互いに隣接するビットの値が異なることを示す遷移値、又は、当該互いに隣接するビットの値が異ならないことを示す非遷移値をとるビットを含む第２のビット列を動作サイクル毎に生成する複数のビット列生成回路と、
前記動作サイクル毎に、前記複数のビット列生成回路によって生成される前記複数のビット列生成回路の数の複数の第２のビット列に基づいて、当該複数の第２のビット列の少なくとも１つで、同一位置におけるビットが前記遷移値である場合、当該位置に対応するビットを第１の値とし、前記複数の第２のビット列の全てで、同一位置におけるビットが前記非遷移値である場合、当該位置に対応するビットを第２の値とした第３のビット列を生成して前記ビット列記憶手段に格納するビット列合成回路と、
前記ビット列記憶手段に格納された第３のビット列における前記第１の値のビットの位置に基づいて、前記複数のデータの指数を算出するビット位置検出回路と、を備え、
前記ビット列合成回路は、前記ビット列記憶手段に前記第３のビット列が格納されているときは、前記複数の第２のビット列及び前記第３のビット列の少なくとも１つで、同一位置におけるビットが前記遷移値である場合、当該位置に対応するビットを前記第１の値とし、前記複数の第２のビット列及び前記第３のビット列の全てで、同一位置におけるビットが前記非遷移値である場合、当該位置に対応するビットを前記第２の値とした第３のビット列を生成して、生成した第３のビット列で前記ビット列記憶手段に格納された第３のビット列を更新し、
前記ビット位置検出回路は、前記ブロックにおける最後の動作サイクルを示すブロックエンド信号の入力に応じて、前記指数を算出し、
前記ビット列記憶手段は、前記ブロックにおける最後の動作サイクルを示すブロックエンド信号の入力に応じて、前記ビット列記憶手段に格納された第３のビット列を削除する、
ことを特徴とする半導体集積回路。
【請求項２】
前記第２のビット列は、前記第１のビット列の最上位ビットからｎ（ｎは、０以上の整数）ビット目及びｎ＋１ビット目の組に対応するビットを、最上位ビットからｎビット目として配列し、
前記第３のビット列は、前記第２のビット列の最上位ビットからｎビット目に対応するビットを、最上位ビットからｎビット目として配列し、
前記ビット位置検出回路は、前記第３のビット列のうち、前記第１の値のビットの最上位ビットからの位置に基づいて、前記指数を算出することを特徴とする請求項１に記載の半導体集積回路。
【請求項３】
前記ビット列合成回路は、前記複数の第２のビット列の論理和、又は、前記複数の第２のビット列及び前記第３のビット列の論理和を前記第３のビット列として生成することを特徴とする請求項１又は２に記載の半導体集積回路。
【請求項４】
前記ビット列生成回路は、前記データを構成する第１のビット列に含まれ、互いに隣接するビットの排他的論理和を示すビットを含む第２のビット列を生成することを特徴とする請求項３に記載の半導体集積回路。
【請求項５】
前記半導体集積回路は、前記ビット位置検出回路が算出した指数に基づいて、前記第１のビット列をシフトすることによって前記データを正規化するシフト回路をさらに備えたことを特徴とする請求項１乃至４のいずれか１項に記載の半導体集積回路。
【請求項６】
前記半導体集積回路は、前記シフト回路を複数備え、
前記複数のシフト回路は、前記複数のデータを当該複数のシフト回路の数ずつ正規化することを特徴とする請求項５に記載の半導体集積回路。
【請求項７】
前記半導体集積回路は、前記指数が算出されるまでの間、前記データを保持し、前記指数の算出が完了した後、前記保持していたデータを前記シフト回路に出力するメモリをさらに備えたことを特徴とする請求項６に記載の半導体集積回路。
【請求項８】
前記メモリは、前記ブロックにおける最後の動作サイクルを示すブロックエンド信号の入力に応じて、前記保持していたデータを前記シフト回路に出力することを特徴とする請求項７に記載の半導体集積回路。
【請求項９】
前記ブロックは、ブロック浮動小数点におけるブロックであり、
前記ビット位置検出回路は、前記ブロックにおける最大指数を算出することを特徴とする請求項１乃至８のいずれか１項に記載の半導体集積回路。
【請求項１０】
ブロックに含まれる複数のデータを共通の指数によって正規化する場合に、当該複数のデータの指数を算出する指数算出方法であって、
動作サイクル毎に、前記データを構成する第１のビット列の互いに隣接するビットの組のそれぞれについて、当該互いに隣接するビットの値が異なることを示す遷移値、又は、当該互いに隣接するビットの値が異ならないことを示す非遷移値をとるビットを含む第２のビット列を所定の数ずつ生成し、
前記動作サイクル毎に、前記生成された所定の数の第２のビット列に基づいて、当該複数の第２のビット列の少なくとも１つで、同一位置におけるビットが前記遷移値である場合、当該位置に対応するビットを第１の値とし、前記複数の第２のビット列の全てで、同一位置におけるビットが前記非遷移値である場合、当該位置に対応するビットを第２の値とした第３のビット列を生成してビット列記憶手段に格納し、
前記ブロックにおける最後の動作サイクルを示すブロックエンド信号の入力に応じて、前記ビット列記憶手段に格納された第３のビット列における前記第１の値のビットの位置に基づいて、前記複数のデータの指数を算出して、前記ビット列記憶手段に格納された第３のビット列を削除し、
前記第３のビット列の生成では、前記ビット列記憶手段に前記第３のビット列が格納されているときは、前記複数の第２のビット列及び前記第３のビット列の少なくとも１つで、同一位置におけるビットが前記遷移値である場合、当該位置に対応するビットを前記第１の値とし、前記複数の第２のビット列及び前記第３のビット列の全てで、同一位置におけるビットが前記非遷移値である場合、当該位置に対応するビットを前記第２の値とした第３のビット列を生成して、生成した第３のビット列で前記ビット列記憶手段に格納された第３のビット列を更新する
指数算出方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００２２
【補正方法】変更
【補正の内容】
【００２２】
【特許文献１】特開平９−１２８２１３号公報
【特許文献２】特開平６−７５７４６号公報
【特許文献３】特開平８−２１２０５２号公報
【発明の概要】
【発明が解決しようとする課題】
【国際調査報告】
2011161859.tif 000015
2011161859.tif 000016