(57)【要約】【課題】乗算結果のオーバーフローを補正し、演算の高速化も図る。【解決手段】オーバーフロー検出部１０２は、被乗数Ａと乗数Ｂが共に負で絶対値が最大値であるかどうかによって、オーバーフローが生じることを検出する。桁上げ保存加算部１０１ｂは部分積と第１補正値の−１（全ビットが１の値）とを桁上げ保存加算し、Ａ×Ｂ−１に対応した中間和と中間桁上げとを出力する。桁上げ伝播加算部１０４は、中間和と、中間桁上げと、第２補正値とを桁上げ伝播加算して、乗算結果を出力する。上記第２補正値は、オーバーフローが生じない場合には１になり、第１補正値が相殺されてＡ×Ｂが演算結果になる。一方、オーバーフローが生じる場合には０になり、第１補正値によってオーバーフローが補正されたＡ×Ｂ−１が演算結果になる。【選択図】図１
2006227939.tif 000002
【特許請求の範囲】
【請求項１】
２の補数表現された固定小数点数である被乗数Ａと乗数Ｂとの乗算を含む演算を行う演算装置であって、
上記被乗数Ａと乗数Ｂとの積におけるオーバーフローの有無を検出するオーバーフロー検出部と、
上記被乗数Ａと乗数Ｂとの複数の部分積と、所定の第１の補正値とが桁上げ保存加算されて得られる中間和および中間桁上げを求める中間積生成部と、
上記中間和と中間桁上げとが桁上げ伝播加算された演算結果を求める桁上げ伝播加算部と、
を備え、
上記オーバーフロー検出部の検出結果に応じた所定の第２の補正値が、上記中間積生成部および桁上げ伝播加算部の何れか一方で加算されるように構成されたことを特徴とする演算装置。
【請求項２】
請求項１の演算装置であって、
上記オーバーフロー検出部が、上記被乗数Ａおよび乗数Ｂが共に負で絶対値が最大値である場合に、オーバーフローが生じたと検出するように構成されたことを特徴とする演算装置。
【請求項３】
請求項１の演算装置であって、
上記第１の補正値は、−１であり、
上記第２の補正値は、上記オーバーフローが生じる場合には０である一方、生じない場合には１であることを特徴とする演算装置。
【請求項４】
請求項１の演算装置であって、
上記中間積生成部が、上記複数の部分積と第１の補正値とを木状に並列に桁上げ保存加算するように構成されたことを特徴とする演算装置。
【請求項５】
請求項１の演算装置であって、
上記中間積生成部が、上記被乗数Ａと乗数Ｂとの複数の部分積と、上記第１の補正値と、２の補数表現された加数Ｘとが桁上げ保存加算されて得られる中間和および中間桁上げを求め、
上記桁上げ伝播加算部が、上記加数Ｘと、上記被乗数Ａと乗数Ｂとの積との和（Ｘ＋Ａ×Ｂ）を求めるように構成されたことを特徴とする演算装置。
【請求項６】
請求項５の演算装置であって、
上記第１の補正値は、−１であり、
上記第２の補正値は、上記オーバーフローが生じる場合には０である一方、生じない場合には１であることを特徴とする演算装置。
【請求項７】
請求項６の演算装置であって、
上記中間積生成部が、
上記被乗数Ａと乗数Ｂとの複数の部分積と、上記第１の補正値とが桁上げ保存加算されて得られる中間和および中間桁上げに対して、上記中間和が１ビット左シフトされて最下位ビットに１が挿入された値と、上記中間桁上げが１ビット左シフトされて最下位ビットに０が挿入された値と、上記加数Ｘとが桁上げ保存加算されて得られる中間和および中間桁上げ、または、
上記被乗数Ａと乗数Ｂとの複数の部分積と、上記第１の補正値と、上記加数Ｘとが桁上げ保存加算されて得られる中間和および中間桁上げを求めるように構成されたことを特徴とする演算装置。
【請求項８】
請求項１の演算装置であって、
上記中間積生成部が、
積和が求められる場合に、上記被乗数Ａと乗数Ｂとの複数の部分積と、上記第１の補正値と、２の補数表現された加数Ｘとが桁上げ保存加算されて得られる中間和および中間桁上げを求める一方、
積差が求められる場合に、上記被乗数Ａと乗数Ｂとの複数の部分積と、上記第１の補正値とが桁上げ保存加算されて得られる中間和および中間桁上げが、それぞれ２の補数に変換された値と、上記加数Ｘとが、桁上げ保存加算されて得られる中間和および中間桁上げを求め、
上記桁上げ伝播加算部が、上記加数Ｘと、上記被乗数Ａと乗数Ｂとの積との和または差（Ｘ＋Ａ×ＢまたはＸ−Ａ×Ｂ）を求めるように構成されたことを特徴とする演算装置。
【請求項９】
請求項８の演算装置であって、
積和が求められる場合に、
上記第１の補正値は、−１であり、
上記第２の補正値は、上記オーバーフローが生じる場合には０である一方、生じない場合には１であるとともに、
積差が求められる場合に、
上記第１の補正値は、０であり、
上記第２の補正値は、上記オーバーフローが生じる場合には１である一方、生じない場合には０であることを特徴とする演算装置。
【請求項１０】
請求項９の演算装置であって、
上記中間積生成部が、
積和が求められる場合に、上記被乗数Ａと乗数Ｂとの複数の部分積と、上記第１の補正値とが桁上げ保存加算されて得られる中間和および中間桁上げに対して、上記中間和が１ビット左シフトされて最下位ビットに１が挿入された値と、上記中間桁上げが１ビット左シフトされて最下位ビットに０が挿入された値と、上記加数Ｘとが桁上げ保存加算されて得られる中間和および中間桁上げを求める一方、
積差が求められる場合に、上記被乗数Ａと乗数Ｂとの複数の部分積と、上記第１の補正値とが桁上げ保存加算されて得られる中間和および中間桁上げに対して、それぞれ、１ビット左シフトされて最下位ビットに０が挿入された値の２の補数と、上記加数Ｘとが桁上げ保存加算されて得られる中間和および中間桁上げを求めるように構成されたことを特徴とする演算装置。
【請求項１１】
請求項１の演算装置であって、
上記中間積生成部が、
積和が求められる場合に、上記被乗数Ａと乗数Ｂとの複数の部分積と、上記第１の補正値と、２の補数表現された加数Ｘとが桁上げ保存加算されて得られる中間和および中間桁上げを求める一方、
積差が求められる場合に、上記被乗数Ａと乗数Ｂとの複数の部分積と、上記第１の補正値とが桁上げ保存加算されて得られる中間和および中間桁上げが、それぞれ各ビットの値が反転された値と、２の補数表現された加数Ｘとが桁上げ保存加算されて得られる中間和および中間桁上げを求めるとともに、
所定の第３の補正値が、上記中間積生成部および桁上げ伝播加算部の何れか一方で加算され、
上記桁上げ伝播加算部が、上記加数Ｘと、上記被乗数Ａと乗数Ｂとの積との和または差（Ｘ＋Ａ×ＢまたはＸ−Ａ×Ｂ）を求めるように構成されたことを特徴とする演算装置。
【請求項１２】
請求項１１の演算装置であって、
上記第１の補正値は、−１であり、
上記第２の補正値は、
積和が求められる場合に、上記オーバーフローが生じる場合には０である一方、生じない場合には１であるとともに、
積差が求められる場合に、上記オーバーフローが生じる場合には１である一方、生じない場合には０であり、
上記第３の補正値は、
積和が求められる場合に、０であるとともに、
積差が求められる場合に、１であることを特徴とする演算装置。
【請求項１３】
請求項１２の演算装置であって、
上記中間積生成部が、
積和が求められる場合に、上記被乗数Ａと乗数Ｂとの複数の部分積と、上記第１の補正値とが桁上げ保存加算されて得られる中間和および中間桁上げに対して、上記中間和が１ビット左シフトされて最下位ビットに１が挿入された値と、上記中間桁上げが１ビット左シフトされて最下位ビットに０が挿入された値と、上記加数Ｘとが桁上げ保存加算されて得られる中間和および中間桁上げを求める一方、
積差が求められる場合に、上記被乗数Ａと乗数Ｂとの複数の部分積と、上記第１の補正値とが桁上げ保存加算されて得られる中間和および中間桁上げに対して、それぞれ、１ビット左シフトされて最下位ビットに０が挿入された値の各ビットの値が反転された値と、上記加数Ｘとが桁上げ保存加算されて得られる中間和および中間桁上げを求めるように構成されたことを特徴とする演算装置。
【請求項１４】
請求項１の演算装置であって、さらに、
積和が求められる場合においては上記乗数Ｂ、積差が求められる場合においては上記乗数Ｂの−１倍が、ブースのアルゴリズムに従ってエンコードされたエンコード結果の乗数Ｄ、および上記乗数Ｄについての２の補数の補正項Ｅを出力する乗数エンコード部を備え、
上記中間積生成部が、上記被乗数Ａと乗数Ｄとの複数の部分積と、上記２の補数の補正項Ｅと、上記第１の補正値とが桁上げ保存加算されて得られる中間和および中間桁上げを求めるとともに、
上記桁上げ伝播加算部が、上記加数Ｘと、上記被乗数Ａと乗数Ｂとの積との和または差（Ｘ＋Ａ×ＢまたはＸ−Ａ×Ｂ）を求めるように構成されたことを特徴とする演算装置。
【請求項１５】
請求項１４の演算装置であって、
積和が求められる場合に、
上記第１の補正値は、−１であり、
上記第２の補正値は、上記オーバーフローが生じる場合には０である一方、生じない場合には１であるとともに、
積差が求められる場合に、
上記第１の補正値は、０であり、
上記第２の補正値は、上記オーバーフローが生じる場合には１である一方、生じない場合には０であることを特徴とする演算装置。
【請求項１６】
請求項１５の演算装置であって、
上記中間積生成部が、
積和が求められる場合に、上記被乗数Ａと乗数Ｄとの複数の部分積と、上記２の補数の補正項Ｅと、上記第１の補正値とが桁上げ保存加算されて得られる中間和および中間桁上げに対して、上記中間和が１ビット左シフトされて最下位ビットに１が挿入された値と、上記中間桁上げが１ビット左シフトされて最下位ビットに０が挿入された値と、上記加数Ｘとが桁上げ保存加算されて得られる中間和および中間桁上げを求める一方、
積差が求められる場合に、上記被乗数Ａと乗数Ｄとの複数の部分積と、上記２の補数の補正項Ｅと、上記第１の補正値とが桁上げ保存加算されて得られる中間和および中間桁上げに対して、それぞれ、１ビット左シフトされて最下位ビットに０が挿入された値と、上記加数Ｘとが桁上げ保存加算されて得られる中間和および中間桁上げを求めるように構成されたことを特徴とする演算装置。
【請求項１７】
請求項１４の演算装置であって、
さらに、所定の第３の補正値が、上記中間積生成部および桁上げ伝播加算部の何れか一方で加算されるように構成され、
上記第１の補正値は、−１であり、
上記第２の補正値は、
積和が求められる場合に、上記オーバーフローが生じる場合には０である一方、生じない場合には１であるとともに、
積差が求められる場合に、上記オーバーフローが生じる場合には１である一方、生じない場合には０であり、
上記第３の補正値は、
積和が求められる場合に、０であるとともに、
積差が求められる場合に、１であることを特徴とする演算装置。
【請求項１８】
請求項１７の演算装置であって、
上記中間積生成部が、上記被乗数Ａと乗数Ｄとの複数の部分積と、上記２の補数の補正項Ｅと、上記第１の補正値とが桁上げ保存加算されて得られる中間和および中間桁上げに対して、上記中間和が１ビット左シフトされて最下位ビットに１が挿入された値と、上記中間桁上げが１ビット左シフトされて最下位ビットに０が挿入された値と、上記加数Ｘとが桁上げ保存加算され、またはさらに上記第３の補正値が桁上げ保存加算されて得られる中間和および中間桁上げを求めるように構成されたことを特徴とする演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、固定小数点数の乗算や積和、積差などの演算を行なう演算装置に関するものである。
【背景技術】
【０００２】
音声データやマルチメディアデータ等に対してディジタル演算処理を行なうＬＳＩには、乗算装置や積和演算装置などの演算装置をオンチップ化することが一般的になっている。この種の演算装置では、高精度な演算が要求される処理については、２の補数表現された固定小数点数での演算が行なわれる。上記固定小数点数の演算においては、乗算の結果がオーバーフローする場合には飽和処理を行なうことが要求される。すなわち、固定小数点数のビット数をｎとすると、取り得る値の範囲は、−２n〜＋２n−１（２進表現で１００…００〜０１１…１１である。）それゆえ、被乗数と乗数とが共に最小値（負で絶対値が最大値）である場合には、乗算結果がオーバーフローすることになる（表現可能な正の値の範囲を超える。）。そこで、乗算結果を表現可能な正の最大値に補正する飽和処理が行われる。
【０００３】
上記のような飽和処理を行う従来の装置は、例えば図１７に示すように、被乗数Ａと乗数Ｂとの複数の部分積を生成する部分積生成部９０１と、生成された部分積を加算する加算器９０２と、オーバーフローの有無を検出するオーバーフロー検出部９０３と、オーバーフローの有無に応じて、加算器９０２の加算結果と飽和値（正の最大値）とを選択的に出力するセレクタ９０４とを備えている。これにより、オーバーフローが生じる場合（被乗数Ａと乗数Ｂとが共に負で絶対値が最大値である場合）には、飽和値が選択されることによって乗算結果が補正されるようになっている。
【０００４】
ところが、上記のようにセレクタ９０４によって加算器９０２の出力と飽和値とが切り換えられる場合、オーバーフローが生じない場合の乗算結果は、加算器９０２から出力されてからセレクタ９０４の遅延時間分だけ遅れて得られることになる。
【０００５】
そこで、ブースのアルゴリズムを用いた演算装置について、オーバーフローが生じる場合にはブースエンコーダに所定の値を出力させ、その値に対して乗算を行わせることにより、飽和値が得られるようにするものが提案されている（例えば、特許文献１参照。）。
【特許文献１】特開平１−２６７７２８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記のような手法は、ブースエンコーダを備えた演算装置にしか適用することができない。しかも、上記のようなブースエンコーダを用いても、実際に演算の高速化を図ることは必ずしも容易ではない。すなわち、ブースエンコーダがオーバーフローの有無に応じて制御される場合、オーバーフローの検出に要する時間が演算時間に加算されることになる。したがって、セレクタによる遅延時間は生じないとしても、オーバーフローの検出に要する時間だけ演算時間は増大するため、結果的に演算が高速化されるとは限らない。
【０００７】
本発明は、上記の点に鑑み、乗算結果のオーバーフローが適切に補正されるとともに、乗算を含む演算を容易に高速化できるようにすることを課題としている。
【課題を解決するための手段】
【０００８】
上記の課題を解決するため、本発明の演算装置は、
２の補数表現された固定小数点数である被乗数Ａと乗数Ｂとの乗算を含む演算を行う演算装置であって、
上記被乗数Ａと乗数Ｂとの積におけるオーバーフローの有無を検出するオーバーフロー検出部と、
上記被乗数Ａと乗数Ｂとの複数の部分積と、所定の第１の補正値（例えば−１）とが桁上げ保存加算されて得られる中間和および中間桁上げを求める中間積生成部と、
上記中間和と中間桁上げとが桁上げ伝播加算された演算結果を求める桁上げ伝播加算部と、
を備え、
上記オーバーフロー検出部の検出結果に応じた所定の第２の補正値（例えばオーバーフローが生じる場合には０、生じない場合には１）が、上記中間積生成部および桁上げ伝播加算部の何れか一方で加算されるように構成されたことを特徴とする。
【０００９】
上記オーバーフロー検出部は、例えば被乗数Ａおよび乗数Ｂが共に負で絶対値が最大値である場合に、オーバーフローが生じたと検出するように構成される。
【００１０】
また、上記中間積生成部は、例えば上記複数の部分積と第１の補正値とを木状に並列に桁上げ保存加算するように構成される。
【００１１】
これにより、例えば、オーバーフローが生じる場合に補正するための補正値として、全ビットの値が１であるような第１の補正値をオーバーフローの有無に係わらず桁上げ保存加算させることができるので、オーバーフローの検出タイミングの制約による遅延や、桁上げ伝播による遅延を回避することができる。一方、例えばオーバーフローの有無に応じた１か０の１ビットの第２補正値を加算させ、少ない遅延で、または遅延を生じることなく、上記第１の補正値による補正をキャンセルしたり有効にしたりするように制御することができる。また、第２の補正値が演算処理の後段で行われるようにして、オーバーフロー検出タイミングの余裕を大きくすることもできる。それゆえ、オーバーフローを適切に補正するとともに、乗算を含む演算を高速化に行わせることが容易にできる。
【００１２】
また、上記のような構成は、積を求めるだけでなく、加数Ｘとの積和を求める演算装置に適用してもよい。具体的には、部分積と第１の補正値と加数とが桁上げ保存加算されるようにしたり、部分積と第１の補正値とが加算された中間和および中間桁上げと、加数とが桁上げ保存加算されたりするようにしてもよい。この場合、演算結果のビット数が被乗数と乗数とのビット数の合計と同じになるように、中間和および中間桁上げのシフト（ビット数の拡張）が行われるようにしてもよく、その際、最下位ビットに１が埋め込まれるようにしたりして、所定の補正値が加減算されるのと同じ動作を適切に行わせることなどができる。
【００１３】
また、さらに、演算選択信号などに応じて、加数Ｘとの積和や積差を選択的に求める演算装置を構成してもよい。すなわち、部分積と第１の補正値が桁上げ保存加算された中間和および中間桁上げが、２の補数変換や、ビット反転および所定の補正値の加算がなされて、加数と加算されることにより、積差が求められるようにすることができる。この場合、例えば積和と積差とで、ビット反転の有無が制御されるとともに、第１の補正値が切り換えられるようにしたり、第１の補正値は一定で第３の補正値が切り換えられるようにしたりして、中間和および中間桁上げが加数から減算された値が得られるようにすることができる。
【００１４】
また、上記のような構成は、ブースのアルゴリズムが用いられる演算装置に適用してもよい。すなわち、乗数エンコード部によって、積和と積差とで乗数または乗数の−１倍についてのエンコードが行われるようにすることにより、積和や積差が求められるとともに、オーバーフローの補正された演算結果を高速に得ることができる。
【発明の効果】
【００１５】
本発明によれば、乗算結果のオーバーフローが適切に補正されるとともに、乗算を含む演算の高速化を容易かつ確実に図ることができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施形態を図面に基づいて詳細に説明する。なお、以下の各実施形態において、他の実施形態と同様の機能を有する構成要素については同一の符号を付して説明を省略する。
【００１７】
《発明の実施形態１》
本発明の実施形態１として、被乗数Ａと乗数Ｂとの積を求める演算装置の例を説明する。この演算装置は、図１に示すように、中間積生成部１０１と、オーバーフロー検出部１０２と、セレクタ１０３と、桁上げ伝播加算部１０４とを備えて構成されている。
【００１８】
中間積生成部１０１には、複数の部分積を生成する部分積生成部１０１ａ、および上記複数の部分積と第１補正値としての−１（全ビットが１の値）とを桁上げ保存加算する桁上げ保存加算部１０１ｂが設けられている。すなわち、中間積生成部１０１からは、Ａ×Ｂ−１に対応した中間和と中間桁上げとが出力されるようになっている。なお、上記中間積生成部１０１は、ブースのアルゴリズムが適用されるものでもよいし、乗数の各ビットごとの部分積が加算されるものでもよい。また、特に限定はされないが、上記複数の部分積と第１補正値とが木状に並列に桁上げ保存加算されるようにすれば、多くの場合、上記第１補正値を加算するための論理段数の増加を回避して、より演算を高速化することが容易にできる。
【００１９】
オーバーフロー検出部１０２は、被乗数Ａおよび乗数Ｂが共に負で絶対値が最大値であるかどうかによって、オーバーフローが生じることを検出し、オーバーフロー検出信号ＯＤを真にするようになっている。
【００２０】
セレクタ１０３は、第２補正値として、オーバーフロー検出信号ＯＤが真の場合には０、偽の場合には１を選択的に出力し、桁上げ伝播加算部１０４にＬＳＢ（最下位ビット）への桁上げ入力として入力するようになっている。
【００２１】
桁上げ伝播加算部１０４は、上記中間和と、中間桁上げと、第２補正値とを桁上げ伝播加算して、乗算結果を出力するようになっている。
【００２２】
上記のように構成された演算装置においては、中間積生成部１０１では、オーバーフローの有無に係わらず、各部分積に加えて第１補正値の−１が加算される。また、桁上げ伝播加算部１０４ではオーバーフローが生じない場合には１、生じる場合には０が第２補正値として加算される。
【００２３】
そこで、オーバーフローが生じない場合には、Ａ×Ｂ−１＋１が演算され、一旦加算された第１補正値が第２補正値によってキャンセルされるので、演算結果として適切にＡ×Ｂの値が求められることになる。
【００２４】
一方、オーバーフローが生じる場合には、オーバーフローが補正された演算結果Ａ×Ｂ−１が求められる。具体的には、例えば図２に示すような演算が行われる。（ここで、同図においては、小数点は、その左側にあるＭＳＢ（最上位ビット）が固定小数点数の符号であることを示している。なお、以下の説明では、原則として２進表記を用いる。）すなわち、被乗数Ａと乗数Ｂとが共に負で絶対値が最大値（１．００００００）である場合には、最上位桁の部分積として１００００００、その他の桁の部分積として０００００００が生成される。これらの部分積が合計されると、オーバーフローして符号ビットだけが１になる値が得られるが、これらの部分積と第１補正値の−１（＝１．１１１１１１１１１１１１）とが桁上げ保存加算部１０１ｂによって累算されると、中間和および中間桁上げは、それぞれ、０．１１１１１１１１１１１１と、０．０００００００００００になる。すなわち、正の最大値に対応する中間和と中間桁上げとが得られることになる。上記中間和と中間桁上げと第２補正値（オーバーフロー検出部１０２によってオーバーフローが検出されると値は０）とが桁上げ伝播加算部１０４によって加算されると、乗算結果０．１１１１１１１１１１１１、すなわち表現可能な正の最大値に補正された値が得られる。
【００２５】
上記のように、オーバーフローに係わらず一定の第１補正値（例えばオーバーフローが生じる場合のための補正値）が、部分積とともに桁上げ保存加算される一方、実際にオーバーフローが生じるかどうかに応じて、第２補正値（例えば第１の補正値による補正がキャンセルされる値、またはその補正に影響を与えない値）が桁上げ伝播加算等されるようにすることにより、例えば、桁上げ伝播加算されると遅延時間が長くなるような補正値をあらかじめ第１補正値として桁上げ保存加算した後に、オーバーフローの有無に応じた第２補正値によって上記第１補正値をキャンセルし得るようにすることができる。それゆえ、演算時間を短く抑えつつ、オーバーフローの補正を適切に行わせることができる。しかも、オーバーフローの検出は、第２補正値の制御が可能となるタイミングで行われればよいので、検出時間の余裕が大きくなり、演算時間の増大を容易に抑えることができる。
【００２６】
特に、前記のように、第１補正値が桁上げ保存加算される場合には、桁上げ伝播のような遅延が生じない。また、複数の部分積と第１補正値とが木状に並列に桁上げ保存加算されるようにする場合には、第１補正値を加算するための論理段数の増加を回避して演算時間を短く抑えることが容易にできる。また、第２補正値が１または０になるように制御される場合には、ＬＳＢに関しては中間和との２数加算が行われるようにするだけでよいので、第２補正値が加算されない場合に対する回路素子の遅延増加程度も容易に小さく抑えることができる。さらに、第１補正値は定数なので、これが加算されない場合に比べて、回路規模の大幅な増加を招くこともない。
【００２７】
なお、上記の例では、説明の便宜上、セレクタ１０３が設けられ、第２補正値として、オーバーフロー検出信号ＯＤに応じて０または１の値が選択的に出力されるとして説明したが、実際には、上記オーバーフロー検出信号ＯＤのレベルを第２補正値の０または１に対応させて、桁上げ伝播加算部１０４に直接（または反転されて）入力されるようにしてもよい。
【００２８】
また、第２補正値の加算は、後段で行われるほど、オーバーフローの検出タイミングの余裕が大きくなるが、検出が間に合う場合には、桁上げ保存加算部１０１ｂで桁上げ入力として加算されるようにしたりしてもよい。また、第１補正値がオーバーフローの有無に応じて−１になるか０になるかが制御されるようにしてもよい。
【００２９】
《発明の実施形態２》
本発明の実施形態２として、被乗数Ａと乗数Ｂとの積と、加数Ｘとの和（積和）を求める演算装置の例を説明する。この演算装置は、実施形態１の演算装置と比べて、図２に示すように、中間積生成部１０１に代えて中間積生成部２０１を備えている。上記中間積生成部２０１には、部分積生成部１０１ａおよび桁上げ保存加算部１０１ｂに加えて、さらにシフト部２０１ｃと桁上げ保存加算部２０１ｄが設けられている。
【００３０】
上記シフト部２０１ｃは、桁上げ保存加算部１０１ｂにより全ての部分積と第１補正値（−１）とが加算されて得られる第１中間和および第１中間桁上げをそれぞれ左１ビットシフトして、シフト中間和およびシフト中間桁上げを出力するようになっている。上記左１ビットシフトの際には、シフト中間和のＬＳＢには１が埋め込まれ、シフト中間桁上げのＬＳＢには０が埋め込まれる。
【００３１】
桁上げ保存加算部２０１ｄは、上記シフト中間和と、シフト中間桁上げと、加数Ｘとを加算して３数を２数に圧縮し、第２中間和および第２中間桁上げを出力するようになっている。
【００３２】
ここで、上記シフト部２０１ｃとしては必ずしもシフトレジスタのようにデータを保持してシフトするものを用いる必要はなく、桁上げ保存加算部１０１ｂから出力される値のＬＳＢが１ビット上位側にずれて桁上げ保存加算部２０１ｄに入力され、加数ＸのＬＳＢが１と加算されるようになっていればよい。なお、上記のようなシフトを行うことによって、例えば２の補数表現された７ビットの固定小数点数どうしが乗算される場合に、１４ビットの積を得ることができるが、例えば加数Ｘも１３ビットであるなど、必要な精度が得られる場合であれば、必ずしも上記のようなシフト（ビット数拡張）は行われなくてもよい。逆に、加数Ｘが２４ビットであるなど、積より加数のビット数が大きい場合は、積と加数Ｘの小数点位置が合う分だけ第１中間和と第１中間桁上げを左シフトし、シフト量だけ第１中間和のＬＳＢから１を埋め込めばよい。
【００３３】
上記のように構成された演算装置では、第１中間和が左シフトされてＬＳＢに１が埋め込まれることによって、ビット数拡張された積に対して−１が加算されたのと同じことになる。
【００３４】
具体的には、オーバーフローが生じる場合には、例えば図４に示すように、シフトおよび埋め込みによって、１４ビットの積に−１が加算されてオーバーフローが補正された乗算結果Ａ×Ｂ−１に対応するシフト中間和およびシフト中間桁上げ（０．１１１１１１１１１１１１１、および０．００００００００００００）が得られる。そこで、これらのシフト中間和およびシフト中間桁上げと、加数Ｘとが、桁上げ保存加算部２０１ｄで加算されて、第２中間和（ｙ．ｙ…）、および第２中間桁上げ（ｚ．ｚ…）が生成され、これらと、オーバーフローの検出によって０となる第２補正値とが桁上げ伝播加算部１０４により加算されることによって、加数Ｘと、補正された乗算結果０．１１１１１１１１１１１１１（正の最大値）との積和Ｘ＋Ａ×Ｂ−１が得られる。
【００３５】
一方、オーバーフローが生じない場合には、実施形態１で説明したのと同様に、第２補正値が１になることによって上記第１補正値による補正がキャンセルされ、Ｘ＋Ａ×Ｂ−１＋１、すなわち通常の積和Ｘ＋Ａ×Ｂが得られる。
【００３６】
なお、本実施形態２においても、第２補正値の加算は、桁上げ伝播加算部１０４で行われるのに限らず、桁上げ保存加算部２０１ｄの桁上げ入力として加算されるようにしたりしても、オーバーフローの検出が間に合い、かつ、正しい演算結果が得られる箇所で加算されるようにされればよい。また、各補正値が加算部で加減算されるのに限らず、シフト部で埋め込まれる値や、これと加減算との組み合わせによって、補正値が加減算されたのと同じことになるようにしてもよい。もっとも、遅延や回路規模をより低減するためには、木状並列加算の段数や、各桁の加算数が少なくなるようにすることが好ましい。
【００３７】
また、加数Ｘの加算も、桁上げ保存加算部２０１ｄに限らず、桁上げ保存加算部１０１ｂで加算されるようにして、シフト部２０１ｃや桁上げ保存加算部２０１ｄを設けなくてもよいようにしてもよい。また、その場合には、（実施形態１で説明したようにオーバーフローの検出が間に合う場合には、）さらに第２補正値も桁上げ保存加算部１０１ｂで加算されるようにしてもよい。
【００３８】
また、積和が求められる演算装置の例として説明したが、加数Ｘとして０が入力されるようにすれば、積Ａ×ＢまたはＡ×Ｂ−１を求めることができる。
【００３９】
《発明の実施形態３》
本発明の実施形態３として、演算選択信号の指示に応じて、被乗数Ａと乗数Ｂとの積と、加数Ｘとの和（積和）または差（積差）を選択的に求める演算装置の例を説明する。この演算装置は、実施形態２の演算装置と比べて、図５に示すように、セレクタ３０５を備えるとともに、中間積生成部２０１、およびセレクタ１０３に代えて、中間積生成部３０１、およびセレクタ３０３を備えている。上記中間積生成部３０１には、実施形態１、２と同様の部分積生成部１０１ａおよび桁上げ保存加算部１０１ｂと、実施形態２と同様の桁上げ保存加算部２０１ｄと、シフト部３０１ｃと、２の補数変換部３０１ｅとが設けられている。
【００４０】
上記セレクタ３０５、シフト部３０１ｃ、２の補数変換部３０１ｅ、およびセレクタ３０３は、それぞれ以下のような値を出力するようになっている。すなわち、
セレクタ３０５は、第１補正値として、
積和演算が行われる場合には−１、
積差演算が行われる場合には０を出力し、
シフト部３０１ｃは、桁上げ保存加算部１０１ｂから出力される第１中間和および第１中間桁上げを左１ビットシフトするとともに、これらのＬＳＢに、
中間和については、積和の場合には１を埋め込み、積差の場合には０を埋め込み、
中間桁上げについては、常に０を埋め込み、
２の補数変換部３０１ｅは、
積和の場合には、シフト中間和およびシフト中間桁上げをそのまま出力する一方、
積差の場合には、これらの２の補数を出力し、
セレクタ３０３は、第２補正値として、
積和の場合には、オーバーフローが生じれば０、生じなければ１、
積差の場合には、オーバーフローが生じれば１、生じなければ０を出力するようになっている。
【００４１】
上記のように構成された演算装置では、積和演算が行われる場合には、実施形態２の演算装置と同じ演算が行われる。すなわち、オーバーフローが生じる場合には、図６に示すように、オーバーフローの補正が行われた適切な積和Ｘ＋Ａ×Ｂ−１が求められる。一方、オーバーフローが生じない場合には、第１補正値による補正が第２補正値によってキャンセルされ、通常の積和Ｘ＋Ａ×Ｂ−１＋１＝Ｘ＋Ａ×Ｂが得られる。
【００４２】
また、積差演算が行われる場合には、前記のように第１補正値は０となり、第２補正値は、オーバーフローが生じなければ０、生じれば１となる。
【００４３】
そこで、オーバーフローが生じない場合には、桁上げ保存加算部１０１ｂからは全ての部分積と第１補正値としての０が桁上げ保存加算された第１中間和と第１中間桁上げとが出力され、それぞれ、シフト部３０１ｃで左シフトされてＬＳＢに０が埋め込まれ、２の補数変換部３０１ｅで２の補数に変換された後、桁上げ保存加算部２０１ｄで加数Ｘと桁上げ保存加算される。これによって、積差Ｘ−Ａ×Ｂに対応する第２中間和と第２中間桁上げとが得られ、これらが桁上げ伝播加算部１０４で桁上げ伝播加算される。ここで、オーバーフローが生じていなければ、上記第１中間和、第１中間桁上げ、およびこれらがシフトされて２の補数に変換された値も、適切に表現された値となる。そこで、上記のように桁上げ伝播加算部１０４によって第２中間和と第２中間桁上げと第２補正値としての０とが桁上げ伝播加算されることによって、適切な積差Ｘ−Ａ×Ｂが得られる。
【００４４】
一方、積差演算が行われる場合で、オーバーフローが生じる場合には、図７に示すように、第１中間和は、符号ビットだけが１となる値（１．００００００００００００）、すなわち、表現可能な最大値よりも１だけ大きい値となり、これが左シフトされてＬＳＢに０が埋め込まれた値（１．０００００００００００００）に関しても同じである。また、オーバーフローが生じる場合の第１中間桁上げは０．０００００００００００であり、これがシフトおよび２の補数変換された値は０．００００００００００００となる。したがって、シフト後の−Ａ×Ｂは１．０００００００００００００となり、正の最大値の２補数より１だけ大きい値、すなわちオーバーフロー補正された積の２の補数より１だけ大きい値となる。積Ａ×Ｂは、−１倍（２の補数変換）されることによって表現可能な値になるとしても、加数Ｘから減ぜられる前にオーバーフローが補正された乗算結果Ａ×Ｂ−１となっている必要があるため、第２中間和および中間桁上げが桁上げ伝播加算部１０４によって加算される際に、第２補正値としての値１が加算されることによって、加数Ｘと、補正された乗算結果１．００００００００００００１との積差Ｘ−Ａ×Ｂ＋１＝Ｘ−（Ａ×Ｂ−１）、すなわちオーバーフローが適切に補正された積差が得られる。
【００４５】
なお、上記２の補数変換のための補正値の加算が桁上げ保存加算部２０１ｄで行われるようにして、桁上げ伝播による演算時間の増大が生じないようにしたり小さく抑えられるようにして、より確実に演算時間を低減し得るようにしてもよい。
【００４６】
また、第２補正値は、実施形態２で説明したのと同じように桁上げ保存加算部２０１ｄで加算されるようにしたりしてもよく、さらに、各部で加算される種々の加算値やシフトの埋め込み値の組み合わせによって、最終的に、２の補数変換のための加算やオーバーフローの補正が行われるようになっていればよい。
【００４７】
なお、上記第１中間和のように、演算過程において、必ずしも理論的な正規の表現状態にならなくても、結果的に適切な演算結果が得られるようにすることができる。
【００４８】
《発明の実施形態４》
積和または積差演算が行われる演算装置の他の例を説明する。この演算装置は、実施形態３の演算装置と比べて、図８に示すように、中間積生成部３０１に代えて、中間積生成部４０１を備えている。この中間積生成部４０１には、実施形態１、２と同様の部分積生成部１０１ａおよび桁上げ保存加算部１０１ｂと、実施形態３と同様のシフト部３０１ｃと、桁上げ保存加算部４０１ｄと、論理反転部４０１ｅとが設けられている。
【００４９】
また、セレクタ３０５は設けられず、中間積生成部４０１の桁上げ保存加算部１０１ｂには常に−１が入力されるようになっている。一方、セレクタ４０６が設けられ、演算選択信号に応じた第３補正値が桁上げ保存加算部４０１ｄに入力されるようになっている。
【００５０】
より詳しくは、上記論理反転部４０１ｅは、積和演算が行われる場合には、シフト部３０１ｃから出力されるシフト中間和およびシフト中間桁上げをそのまま出力する一方、積差の場合には、それぞれ各ビットの値が論理反転された値を出力するようになっている。
【００５１】
桁上げ保存加算部４０１ｄは、論理反転部４０１ｅから出力される中間和および中間桁上げと、加数Ｘとに加えて、さらに、セレクタ４０６から出力される第３補正値（積和の場合には０、積差の場合には１）を桁上げ保存加算して、第２中間和および第２中間桁上げの２数に圧縮するようになっている。
【００５２】
上記のように構成された演算装置では、積和演算が行われる場合には、実施形態２、３の演算装置と同じ演算が行われる。すなわち、オーバーフローが生じる場合には、図９に示すようにオーバーフローの補正が行われて、適切な積和Ｘ＋Ａ×Ｂ−１が求められる。一方、オーバーフローが生じない場合には、第１補正値による補正が第２補正値によってキャンセルされ、通常の積和Ｘ＋Ａ×Ｂ−１＋１＝Ｘ＋Ａ×Ｂが得られる。
【００５３】
また、積差演算が行われる場合には、図１０にオーバーフローが生じる場合の例を示すように、第１補正値は積和の場合と同じく−１であるが、シフト部３０１ｃで第１中間和および第１中間桁上げがシフトされる際には、ＬＳＢ（中間桁上げについては中間和のＬＳＢよりも１つ上位の桁）に０が埋め込まれ、各ビットの値が論理反転された後、桁上げ保存加算部４０１ｄで加数Ｘが加算される際に第３補正値として１が加算される。（なお、中間和のＬＳＢに０を埋め込んで反転するのに代えて、桁上げ保存加算部４０１ｄに直接１が入力されるようにしたりしてもよい。）
すなわち、上記第１補正値（−１）の加算は、その後のシフト、および０埋めを考慮すると、−１０が加算されることに相当する。そこで、シフト中間和（Ｓ）およびシフト中間桁上げ（Ｃ）は、Ａ×Ｂ−１０に対応する中間和および中間桁上げとなる。
Ｓ＋Ｃ＝Ａ×Ｂ−１０
一方、論理反転部４０１ｅでは、上記シフト中間和に対しては全てのビット、シフト中間積に対してはシフト中間和のＬＳＢよりも１つ上位の桁までのビットに対して論理反転がされた論理反転値Ｓ’、Ｃ’が得られる。
Ｓ’＝−Ｓ−１
Ｃ’＝−Ｃ−１０
桁上げ保存加算部４０１ｄでは、これらの論理反転値Ｓ’、Ｃ’と、加数Ｘと、第３補正値である１とが加算されて、第２中間和および第２中間桁上げが出力される。つまり、
Ｘ＋Ｓ’＋Ｃ’＋１
＝Ｘ＋（−Ｓ−１）＋（−Ｃ−１０）＋１
＝Ｘ−（Ｓ＋Ｃ）−１０
＝Ｘ−（Ａ×Ｂ−１０）−１０
＝Ｘ−Ａ×Ｂ
となるので、上記第２中間和および第２中間桁上げは、実施形態３と同じく、積差Ｘ−Ａ×Ｂに対応したものとなる。
【００５４】
したがって、オーバーフローが生じる場合には、上記第２中間和および第２中間桁上げと、第２補正値としての１が、桁上げ伝播加算部１０４で桁上げ伝播加算されることによって、オーバーフローが適切に補正された積差Ｘ−Ａ×Ｂ＋１＝Ｘ−（Ａ×Ｂ−１）が得られる。しかも、２の補数変換を行うための桁上げ伝播加算を行う必要がないので、演算の高速化を容易に図ることができる。
【００５５】
また、オーバーフローが生じない場合には、第２補正値が０になるので、通常の積差Ｘ−Ａ×Ｂが得られる。
【００５６】
上記のように、０または１の値となる第３補正値を用い、演算が積和か積差かに係わらず、第１補正値が常に−１となるようにすることによって、１ビットの値の制御で、−１（全ビットが１）を加算するかどうかを制御することができ、回路規模を容易に低減することができる。
【００５７】
なお、実施形態２で説明したのと同じように、第２補正値が桁上げ保存加算部１０１ｂや桁上げ保存加算部４０１ｄで加算されるようにしたりしてもよく、第３補正値も、桁上げ保存加算部１０１ｂや桁上げ伝播加算部１０４で加算されるようにしたりしてもよい。
【００５８】
《発明の実施形態５》
ブースのアルゴリズムを用いて、積和または積差演算が行われる演算装置の例を説明する。この演算装置は、図１１に示すように、前記実施形態３の演算装置（図５）と比べて、２の補数変換部３０１ｅを有する中間積生成部３０１に代えて、乗数エンコード部５１１を有する中間積生成部５０１が設けられている。その他の構成や、第１、２補正値の値は実施形態３と同じである。
【００５９】
上記乗数エンコード部５１１は、例えば２次のブースのアルゴリズムに従って、積和が求められる場合には、乗数Ｂに対応するエンコード結果と、部分積の２の補数の補正項とを出力する一方、積差が求められる場合には、乗数Ｂの−１倍に対応するエンコード結果と、部分積の２の補数の補正項とを出力するようになっている。すなわち、積差が求められる場合には、実施形態３のように乗算結果が２の補数に変換されることによって−１倍されるのではなく、乗数エンコード部５１１によって、被乗数Ａと乗数Ｂの−１倍との積Ａ×（−Ｂ）が求められるようになっている。
【００６０】
上記のように構成された演算装置では、積和の場合には、図１２に示すように、乗数Ｂ（１００００００）に対して２次のブースエンコードが行われると、エンコード結果は、−１，０，０，０となり、これに対応する２の補数の補正項は１，０，０，０となる。そこで、桁上げ保存加算部１０１ｂから出力される第１中間和および第１中間桁上げは、実施形態３（図６）の場合と同じになり、オーバーフローの有無に応じた補正の有無も同様に行われて、適切な積和Ｘ＋Ａ×Ｂ−１、またはＸ＋Ａ×Ｂが求められる。すなわち、第１補正値の−１が加算されることによってオーバーフローの補正が行われるとともに、オーバーフローが生じない場合には、さらに第２補正値の１が加算されて上記補正がキャンセルされることにより、適切な積和が得られる。
【００６１】
一方、積差の場合には、図１３に示すように、エンコード結果は上記積和の場合の２の補数をとった１，０，０，０となり、２の補数の補正項は０，０，０，０となる。そして、オーバーフローが生じなければ、第１補正値も第２補正値も０なので正規の演算が行われ、通常の積差Ｘ−Ａ×Ｂが得られる。また、オーバーフローが生じる場合、実施形態３で説明したように、積は加数Ｘから減ぜられる前にオーバーフローが補正された乗算結果Ａ×Ｂ−１となっている必要がある。そこで、第２中間和および中間桁上げが桁上げ伝播加算部１０４によって加算される際に、第２補正値としての値１が加算されることによって、加数Ｘと、補正された乗算結果１．００００００００００００１との積差Ｘ−Ａ×Ｂ＋１＝Ｘ−（Ａ×Ｂ−１）、すなわちオーバーフローが適切に補正された積差が得られる。
【００６２】
《発明の実施形態６》
ブースのアルゴリズムを用いた演算装置の他の例を説明する。この演算装置は、図１４に示すように、実施形態５の演算装置と比べて、中間積生成部５０１に代えて中間積生成部６０１が設けられている。また、セレクタ３０５は有さず、第１補正値として常に−１が中間積生成部６０１に入力される一方、実施形態４（図８）と同様のセレクタ４０６を有し、積和または積差演算に応じた第３の補正値が中間積生成部６０１に入力されるようになっている。
【００６３】
上記中間積生成部６０１には、実施形態５の中間積生成部５０１のシフト部３０１ｃおよび桁上げ保存加算部２０１ｄに代えて、シフト部２０１ｃと、桁上げ保存加算部４０１ｄとが設けられている。シフト部２０１ｃは、１ビット左シフトされる際に、演算が積和か積差かに係わらず、常に、中間和は１、中間桁上げは０を埋め込むようになっている。桁上げ保存加算部４０１ｄは、実施形態４と同じもので、シフト部２０１ｃによってシフトされたシフト中間和およびシフト中間桁上げと、加数Ｘと、さらに第３補正値とを桁上げ保存加算するようになっている。
【００６４】
上記のように構成された演算装置では、積和の場合には、図１５に示すように、実施形態５の演算装置と同じ演算が行われる。すなわち、第１の補正値は−１、左シフト時に埋め込まれる値は、中間和は１、中間桁上げは０、第３補正値は０であり、第２補正値はオーバーフローの有無に応じて０または１になり、適切な積和Ｘ＋Ａ×Ｂ−１、またはＸ＋Ａ×Ｂが求められる。
【００６５】
一方、積差の場合には、図１６に示すような演算が行われる。すなわち、前記実施形態５では積差の場合に第１補正値が０にされるのに対し、本実施形態６では、積和、積差に係わらず第１補正値として−１が加算され、中間和は左シフトされて１が埋め込まれる。そして、桁上げ保存加算部４０１ｄによる加算の際に、積差であれば第３補正値の１が加算されることによって、上記第１補正値がキャンセルされる。そこで、桁上げ保存加算部４０１ｄから出力される第２中間和および第２中間桁上げは実施形態５と同じものになり、オーバーフローの有無に応じた第２補正値の加算も同様に行われて、適切な積差Ｘ−Ａ×Ｂ、またはＸ−（Ａ×Ｂ−１）が得られる。
【００６６】
また、上記のように、０または１の値となる第３補正値を用い、演算が積和か積差かに係わらず、第１補正値が常に−１となるようにすることによって、実施形態４で説明したのと同様、１ビットの値の制御をするだけでよいので、回路規模を容易に低減することができる。
【００６７】
ここで、積がオーバーフローする場合であっても、積の−１倍は２の補数表現として正規に表現可能であるが、上記のように第１補正値の−１が加算されると、図１６の第１中間和のように、やはり表現可能な範囲を超えることになる。ところが、これが左シフトされてＬＳＢに１が埋め込まれた後に第３補正値の１が加算されると、表現可能な値に戻るので、適切な積差が得られることになる。すなわち、前記実施形態３について説明したように、演算過程において理論的な正規の表現状態にならない場合があっても、結果的に適切な演算結果が得られるようになっていればよい。
【００６８】
一方、上記のような０または１の値となる第３補正値を用いることによって、１ビットの値の制御で、−１（全ビットが１）を加算するかどうかを制御することができ、回路規模を容易に低減することができる。
【００６９】
なお、上記各実施形態や変形例で説明した構成要素は、それぞれ論理的に可能な範囲で他の実施形態の構成に適用してもよい。具体的には、例えば実施形態１でセレクタ１０３について説明したのと同様に、オーバーフロー検出信号ＯＤや演算選択信号、またはこれらの論理反転や排他的論理和演算などされた信号が、桁上げ入力や左シフトの埋め込み値などとして桁上げ伝播加算部１０４等に入力されるようにしてもよい。また、実施形態３などにおいて、実施形態２で説明したように、加数Ｘとして０が入力されるようにすれば、加算が行われないことになるので、積和や積和だけでなく積（Ａ×ＢまたはＡ×Ｂ−１）も求めることができる。
【産業上の利用可能性】
【００７０】
本発明にかかる演算装置は、乗算結果のオーバーフローが適切に補正されるとともに、乗算を含む演算の高速化を容易かつ確実に図ることができるという効果を有し、固定小数点数の乗算や積和、積差などの演算を行なう演算装置等として有用である。
【図面の簡単な説明】
【００７１】
【図１】実施形態１の演算装置の構成を示すブロック図である。
【図２】同、オーバーフローする場合の乗算例を示す説明図である。
【図３】実施形態２の演算装置の構成を示すブロック図である。
【図４】同、オーバーフローする場合の積和演算例を示す説明図である。
【図５】実施形態３の演算装置の構成を示すブロック図である。
【図６】同、オーバーフローする場合の積和演算例を示す説明図である。
【図７】同、オーバーフローする場合の積差演算例を示す説明図である。
【図８】実施形態４の演算装置の構成を示すブロック図である。
【図９】同、オーバーフローする場合の積和演算例を示す説明図である。
【図１０】同、オーバーフローする場合の積差演算例を示す説明図である。
【図１１】実施形態５の演算装置の構成を示すブロック図である。
【図１２】同、オーバーフローする場合の積和演算例を示す説明図である。
【図１３】同、オーバーフローする場合の積差演算例を示す説明図である。
【図１４】実施形態６の演算装置の構成を示すブロック図である。
【図１５】同、オーバーフローする場合の積和演算例を示す説明図である。
【図１６】同、オーバーフローする場合の積差演算例を示す説明図である。
【図１７】従来の演算装置の構成を示すブロック図である。
【符号の説明】
【００７２】
１０１      中間積生成部
１０１ａ    部分積生成部
１０１ｂ    桁上げ保存加算部
１０２      オーバーフロー検出部
１０３      セレクタ
１０４      桁上げ伝播加算部
２０１      中間積生成部
２０１ｃ    シフト部
２０１ｄ    桁上げ保存加算部
３０１      中間積生成部
３０１ｃ    シフト部
３０１ｅ    ２の補数変換部
３０３      セレクタ
３０５      セレクタ
４０１      中間積生成部
４０１ｄ    桁上げ保存加算部
４０１ｅ    論理反転部
４０６      セレクタ
５０１      中間積生成部
５１１      乗数エンコード部
６０１      中間積生成部
６０１ｃ    シフト部
【図１】
2006227939.tif 000003
【図２】
2006227939.tif 000004
【図３】
2006227939.tif 000005
【図４】
2006227939.tif 000006
【図５】
2006227939.tif 000007
【図６】
2006227939.tif 000008
【図７】
2006227939.tif 000009
【図８】
2006227939.tif 000010
【図９】
2006227939.tif 000011
【図１０】
2006227939.tif 000012
【図１１】
2006227939.tif 000013
【図１２】
2006227939.tif 000014
【図１３】
2006227939.tif 000015
【図１４】
2006227939.tif 000016
【図１５】
2006227939.tif 000017
【図１６】
2006227939.tif 000018
【図１７】
2006227939.tif 000019