(57)【要約】【課題】複数ビット毎に乗数を処理してキャリーレス乗算を実行する演算回路を提供する。【解決手段】演算回路は、被乗数を保持する被乗数保持回路と、乗数を保持する乗数保持回路と、被乗数のｎ倍数（ｎは整数）を出力するｎ倍数算出回路と、被乗数と被乗数を１ビット左シフトした結果との排他的論理和である中間排他的論理和演算結果を出力する中間排他的論理和演算回路と、乗数の第１の部分に応じて、第１の選択信号を出力する第１のデコード回路と、乗数の第２の部分に応じて、第２の選択信号を出力する第２のデコーダ回路と、第１の選択信号に応じて、被乗数のｎ倍数又は中間排他的論理和演算結果のいずれかを選択する第１部分積選択回路と、第２の選択信号に応じて、被乗数のｎ倍数又は中間排他的論理和演算結果のいずれかを選択する第２部分積選択回路と、第１部分積選択回路の第１部分積と第２部分積選択回路の第２部分積とを加算する加算回路を有する。【選択図】図６
2013210837.tif 000002
【特許請求の範囲】
【請求項１】
被乗数を保持する被乗数保持回路と、
乗数を保持する乗数保持回路と、
前記被乗数のｎ倍数（ｎは整数）を出力するｎ倍数算出回路と、
前記被乗数と前記被乗数を１ビット左シフトした結果との排他的論理和である中間排他的論理和演算結果を出力する中間排他的論理和演算回路と、
前記保持された乗数の第１の部分に応じて、第１の選択信号を出力する第１のデコード回路と、
前記保持された乗数の第２の部分に応じて、第２の選択信号を出力する第２のデコーダ回路と、
前記第１の選択信号に応じて、前記ｎ倍数算出回路が出力した前記被乗数のｎ倍数又は前記中間排他的論理和演算回路が出力した前記中間排他的論理和演算結果のいずれかを選択する第１部分積選択回路と、
前記第２の選択信号に応じて、前記ｎ倍数算出回路が出力する前記被乗数のｎ倍数又は前記中間排他的論理和演算回路が出力する前記中間排他的論理和演算結果のいずれかを選択する第２部分積選択回路と、
前記第１部分積選択回路が選択した第１部分積と前記第２部分積選択回路が選択した第２部分積とを加算した加算結果を出力する加算回路
を有することを特徴とする演算回路。
【請求項２】
前記加算回路は、前記第１部分積と前記第２部分積との重複部分に設けられた排他的演算回路であり、前記排他的演算回路は前記第１部分積と前記第２部分積との重複部分の排他的論理和演算結果を求めることを特徴とする請求項１記載の演算回路。
【請求項３】
前記加算回路は、前記第１部分積と前記第２部分積との重複部分に設けられた桁上保存加算回路であり、前記桁上保存加算回路は前記第１部分積と前記第２部分積との重複部分の加算結果を求めることを特徴とする請求項１記載の演算回路。
【請求項４】
前記桁上保存加算回路は、前記第１部分積と前記第２部分積との重複部分の加算結果により生じたキャリーの伝搬を抑止するマスク回路を有することを特徴とする請求項３記載の演算回路。
【請求項５】
被乗数のｎ倍数（ｎは整数）を算出し、
前記被乗数と前記被乗数を１ビット左シフトした結果との排他的論理和である中間排他的論理和演算結果を算出し、
乗数の第１の部分に応じて、第１の選択信号を生成し、
前記乗数の第２の部分に応じて、第２の選択信号を生成し、
前記第１の選択信号に応じて、前記被乗数のｎ倍数又は前記中間排他的論理和演算結果のいずれかを選択して第１部分積とし、
前記第２の選択信号に応じて、前記被乗数のｎ倍数又は前記中間排他的論理和演算結果のいずれかを選択して第２部分積とし、
前記第１部分積と前記第２部分積とを加算した加算結果を出力する
各段階を含むことを特徴とする演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算回路及び演算方法に関する。
【背景技術】
【０００２】
近年、セキュリティ意識の高まりから暗号演算が必要となる機会が増えており、それに伴い計算機に暗号機能を搭載するケースが増えている。暗号演算においては複雑な計算を繰り返し行うことが多く、演算器をハードウェアとして実装することが高速化のために有効である。しかしながら、計算が複雑であるために、演算器の回路のコストと回路遅延とが問題となる。
【０００３】
暗号関連の演算のひとつに、キャリーレス乗算という演算がある。通常の乗算では、乗数の各桁と被乗数との積である部分積を求め、これら複数の部分積の総和をとる過程においてキャリーを伝搬させるが、キャリーレス乗算では、部分積の総和をとる過程でキャリーを伝搬させない。この演算では、結果的にＳＵＭ成分だけが最終積となるので、実質的には部分積の各ビットのＸＯＲ（排他的論理和）が積となる。
【０００４】
通常の２進数の乗算においては、１ビット毎に乗数を処理する場合、乗数の各ビット（０又は１）と被乗数との積である部分積（被乗数の０倍又は１倍）を求め、全ビットに対して求められた部分積の総和を求める。それに対して、高速化のために乗数を２ビット毎に処理する計算の仕方がある。その場合には、乗数の各２ビットに現れ得る４通りの２進数００、０１、１０、及び１１に対応して、被乗数の０倍、１倍、２倍、及び３倍を、それぞれ部分積として求めることになる。この際、０倍数、１倍数、及び２倍数を計算するのは容易だが、３倍数を計算する回路は複雑になることが問題となる。これを解決する方法してＢｏｏｔｈアルゴリズムが一般に用いられ、３倍数を直接計算することなく、４倍数＋（−１倍数）として実効的に３倍数を実現する。
【０００５】
キャリーレス乗算においても、１ビット毎に乗数を処理するのではなく、複数ビット（例えば２ビット）毎に乗数を処理することで、高速な乗算を実現することが望まれる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１０−３２６１８３号公報
【特許文献２】特開昭６３−２４０２１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
１つの側面では、演算回路が高速にキャリーレス乗算を実行可能となるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
演算回路は、被乗数を保持する被乗数保持回路と、乗数を保持する乗数保持回路と、前記被乗数のｎ倍数（ｎは整数）を出力するｎ倍数算出回路と、前記被乗数と前記被乗数を１ビット左シフトした結果との排他的論理和である中間排他的論理和演算結果を出力する中間排他的論理和演算回路と、前記保持された乗数の第１の部分に応じて、第１の選択信号を出力する第１のデコード回路と、前記保持された乗数の第２の部分に応じて、第２の選択信号を出力する第２のデコーダ回路と、前記第１の選択信号に応じて、前記ｎ倍数算出回路が出力した前記被乗数のｎ倍数又は前記中間排他的論理和演算回路が出力した前記中間排他的論理和演算結果のいずれかを選択する第１部分積選択回路と、前記第２の選択信号に応じて、前記ｎ倍数算出回路が出力する前記被乗数のｎ倍数又は前記中間排他的論理和演算回路が出力する前記中間排他的論理和演算結果のいずれかを選択する第２部分積選択回路と、前記第１部分積選択回路が選択した第１部分積と前記第２部分積選択回路が選択した第２部分積とを加算した加算結果を出力する加算回路を有することを特徴とする。
【０００９】
演算方法は、被乗数のｎ倍数（ｎは整数）を算出し、前記被乗数と前記被乗数を１ビット左シフトした結果との排他的論理和である中間排他的論理和演算結果を算出し、乗数の第１の部分に応じて、第１の選択信号を生成し、前記乗数の第２の部分に応じて、第２の選択信号を生成し、前記第１の選択信号に応じて、前記被乗数のｎ倍数又は前記中間排他的論理和演算結果のいずれかを選択して第１部分積とし、前記第２の選択信号に応じて、前記被乗数のｎ倍数又は前記中間排他的論理和演算結果のいずれかを選択して第２部分積とし、前記第１部分積と前記第２部分積とを加算した加算結果を出力する各段階を含むことを特徴とする。
【発明の効果】
【００１０】
少なくとも１つの実施例によれば、演算回路は、高速にキャリーレス乗算を実行することができる。
【図面の簡単な説明】
【００１１】
【図１】コンピュータシステムの構成の一例を示す図である。
【図２】通常の乗算の例とキャリーレス乗算の例とを対比して示す図である。
【図３】２ビット毎に乗数を処理する場合のキャリーレス乗算における部分積の計算例を示す図である。
【図４】乗数の２ビットのビットパターンに応じて何れの部分積を選択するかを示す表である。
【図５】２ビット毎に乗数を処理する場合のキャリーレス乗算の一例を示す図である。
【図６】乗数が４ビットである場合において２ビット毎に乗数を処理してキャリーレス乗算を行う演算回路の一例を示す図である。
【図７】中間排他的論理和演算回路の構成の一例を示す図である。
【図８】着目２ビットと１ビット下位のビットとの合計３ビットのビットパターンに応じて何れの部分積を選択するかを示す表である。
【図９】乗数が４ビットである場合において２ビット毎に乗数を処理して通常の乗算又はキャリーレス乗算の何れかを選択的に実行する演算回路の一例を示す図である。
【図１０】Ｂｏｏｔｈデコーダの入出力関係を示す真理値表の一例を示す図である。
【図１１】ＣＳＡ回路の構成の一例を示す図である。
【図１２】乗数の３ビットのビットパターンに応じて何れの部分積を選択するかを示す表である。
【図１３】乗数が４ビットである場合において３ビット毎に乗数を処理してキャリーレス乗算を実行する演算回路の一例を示す図である。
【図１４】ＸＯＲ２算出回路の構成の一例を示す図である。
【図１５】ＸＯＲ３算出回路の構成の一例を示す図である。
【図１６】ＸＯＲ４算出回路の構成の一例を示す図である。
【図１７】着目３ビットとその直ぐ下の位の２ビットとの合計５ビットのビットパターンに応じて何れの部分積を選択するかを示す表である。
【図１８】乗数が４ビットである場合において３ビット毎に乗数を処理して通常の乗算又はキャリーレス乗算の何れかを選択的に実行する演算回路の一例を示す図である。
【図１９Ａ】デコーダの入出力関係を示す真理値表の一例を示す図である。
【図１９Ｂ】デコーダの入出力関係を示す真理値表の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
【００１３】
図１は、コンピュータシステムの構成の一例を示す図である。図１に示すコンピュータシステムは、演算処理装置としてのプロセッサ１０及び主記憶装置としてのメモリ１１を含む。プロセッサ１０は、２次キャッシュ部１２、１次キャッシュ部１３、制御部１４、及び演算部１５を含む。１次キャッシュ部１３は、命令キャッシュ１３Ａ及びデータキャッシュ１３Ｂを含む。演算部１５は、例えばプロセッサコアであり、レジスタ１６、演算制御部１７、及び演算器１８を含む。演算器１８には演算回路１９が含まれる。なお図１及び以降の同様の図において、各ボックスで示される各機能ブロックと他の機能ブロックとの境界は、基本的には機能的な境界を示すものであり、物理的な位置の分離、電気的な信号の分離、制御論理的な分離等に対応するとは限らない。各機能ブロックは、他のブロックと物理的に分離された１つのハードウェアモジュールであってもよいし、或いは他のブロックと物理的に一体となったハードウェアモジュール中の１つの機能を示したものであってもよい。各機能ブロックは、他のブロックと論理的に分離された１つのモジュールであってもよいし、或いは他のブロックと論理的に一体となったモジュール中の１つの機能を示したものであってもよい。
【００１４】
プロセッサ１０では、１次キャッシュ部１３及び２次キャッシュ部１２を設けることにより、キャッシュメモリを多階層化した構成となっている。具体的には、１次キャッシュ部１３と主記憶（メモリ１１）との間に、主記憶よりは高速にアクセスできる２次キャッシュ部１２を設けている。これにより、１次キャッシュ部１３においてキャッシュミスが発生した場合に、主記憶にアクセスが必要になる頻度を低くして、キャッシュミス・ペナルティーを軽減することができる。
【００１５】
制御部１４は、命令フェッチアドレスと命令フェッチリクエストとを１次命令キャッシュ４０に発行し、この命令フェッチアドレスから命令をフェッチする。制御部１４は、フェッチした命令をデコードし、デコード結果に従い演算部１５を制御して、フェッチされた命令を実行する。演算制御部１７は、制御部１４の制御下で動作し、演算対象のレジスタ１６からのデータを演算器１８に供給したり、演算結果のデータを指定されたレジスタ１６に格納したりする。また演算制御部１７は、演算器１８が実行する演算のタイプを指定する。更に演算制御部１７は、アクセス先のアドレスを指定し、１次キャッシュ部１３の当該アドレスに対してロード命令やストア命令を実行する。ロード命令により、指定アドレスから読み出されたデータは、指定されたレジスタ１６に格納される。またストア命令により、指定されたレジスタ１６のデータが、指定されたアドレスに書き込まれる。演算器１８に含まれる演算回路１９が、キャリーレス乗算を実行する回路である。
【００１６】
図２は、通常の乗算の例とキャリーレス乗算の例とを対比して示す図である。図２の（ａ）には被乗数１１０１と乗数１０１１との４ビット数同士の乗算が示される。乗数の各ビット（０又は１）と被乗数との積である部分積（被乗数の０倍又は１倍）を求め、乗数の４つのビットに対してそれぞれ求められた４つの部分積の総和を求めている。総和を求める際には、キャリーが伝搬している。図２の（ｂ）には被乗数１１０１と乗数１０１１との４ビット数同士のキャリーレス乗算が示される。乗数の各ビット（０又は１）と被乗数との積である部分積（被乗数の０倍又は１倍）を求め、乗数の４つのビットに対してそれぞれ求められた４つの部分積の総和を求めている。総和を求める際には、キャリーが伝搬していない。キャリーレス乗算の結果は、４つの部分積のＸＯＲ（排他的論理和）に等しい。図２の（ａ）に示される演算及び図２の（ｂ）に示される演算は、双方共に、１ビット毎に乗数を処理する場合の乗算である。
【００１７】
図３は、２ビット毎に乗数を処理する場合のキャリーレス乗算における部分積の計算例を示す図である。被乗数１１０１に対して、図３の（ａ）には乗数側の２ビットが００の場合、図３の（ｂ）には乗数側の２ビットが０１の場合、図３の（ｃ）には乗数側の２ビットが１０の場合、図３の（ｄ）には乗数側の２ビットが１１の場合が示される。
【００１８】
図３の（ａ）に示すように被乗数１１０１に対して乗数側の２ビットが００の場合、第１ビットの０に対する部分積と第２ビットの０に対する部分積が両方共に００００であり、それら２つの部分積のＸＯＲ演算の結果は０００００となる。このＸＯＲ演算の結果０００００が、２ビット毎に乗数を処理するキャリーレス乗算において、被乗数１１０１に対して乗数側の２ビットが００の場合の部分積となる。この部分積は、被乗数１１０１の０倍数である。
【００１９】
図３の（ｂ）に示すように被乗数１１０１に対して乗数側の２ビットが０１の場合、第１ビットの１に対する部分積は１１０１、第２ビットの０に対する部分積は００００であり、それら２つの部分積のＸＯＲ演算の結果は０１１０１となる。このＸＯＲ演算の結果０１１０１が、２ビット毎に乗数を処理するキャリーレス乗算において、被乗数１１０１に対して乗数側の２ビットが０１の場合の部分積となる。この部分積は、被乗数１１０１の１倍数である。
【００２０】
図３の（ｃ）に示すように被乗数１１０１に対して乗数側の２ビットが１０の場合、第１ビットの０に対する部分積は００００、第２ビットの１に対する部分積は１１０１であり、それら２つの部分積のＸＯＲ演算の結果は１１０１０となる。このＸＯＲ演算の結果１１０１０が、２ビット毎に乗数を処理するキャリーレス乗算において、被乗数１１０１に対して乗数側の２ビットが１０の場合の部分積となる。この部分積は、被乗数１１０１の２倍数である。
【００２１】
図３の（ｄ）に示すように被乗数１１０１に対して乗数側の２ビットが１１の場合、第１ビットの１に対する部分積は１１０１、第２ビットの１に対する部分積は１１０１であり、それら２つの部分積のＸＯＲ演算の結果は１０１１１となる。このＸＯＲ演算の結果１０１１１が、２ビット毎に乗数を処理するキャリーレス乗算において、被乗数１１０１に対して乗数側の２ビットが１１の場合の部分積となる。この部分積は、被乗数１１０１と被乗数１１０１を１ビット左シフトした結果とのＸＯＲ演算の結果である。
【００２２】
以上のように考えると、２ビット毎に乗数を処理するキャリーレス乗算においては、被乗数の０倍数、被乗数の１倍数、被乗数の２倍数、及び被乗数と被乗数を１ビット左シフトした結果とのＸＯＲ演算結果を、部分積候補として考えればよい。これら４つの部分積候補から、乗数の一部分である２ビットのビットパターンに応じて、１つを部分積として選択すればよい。なお被乗数の０倍数、被乗数の１倍数、被乗数の２倍数は、何れも、被乗数のｎ倍数（ｎは整数）に相当する。
【００２３】
図４は、乗数の２ビットのビットパターンに応じて何れの部分積を選択するかを示す表である。表の左側の列には、乗数の２ビットのビットパターン００，０１，１０，１１が示される。表の右側の列には、各ビットパターンに対して選択されるべき部分積が示される。ここでｘ０は０倍数、ｘ１は１倍数、ｘ２は２倍数、ＸＯＲは被乗数と被乗数を１ビット左シフトした結果とのＸＯＲ演算結果を示す。例えば、乗数の着目２ビットが１０であれば、２倍数（ｘ２）を部分積にすればよいことが、この表から分かる。
【００２４】
図５は、２ビット毎に乗数を処理する場合のキャリーレス乗算の一例である。図２の場合と同様に、被乗数１１０１と乗数１０１１との４ビット数同士の乗算が示される。乗数の下位側（ＬＳＢ（Least Significant Bit）側）２ビット１１に対して、図４の表に従って、被乗数と被乗数を１ビット左シフトした結果とのＸＯＲ演算結果である１０１１１が部分積として得られる。また乗数の上位側（ＭＳＢ（Most Significant Bit）側）２ビット１０に対して、図４の表に従って、被乗数の２倍数である１１０１０が部分積として得られる。こうして求められた２つの部分積同士のＸＯＲ演算結果を求めれば、そのＸＯＲ演算の結果０１１１１１１１がキャリーレス乗算の結果となる。
【００２５】
図６は、乗数が４ビットである場合において２ビット毎に乗数を処理してキャリーレス乗算を行う演算回路の一例を示す図である。図６の演算回路は、被乗数保持回路２１、乗数保持回路２２、２倍数算出回路２３、中間排他的論理和演算回路２４、第１のデコーダ２５、第２のデコーダ２６、第１部分積選択回路２７、第２部分積選択回路２８、ビットシフト回路２９、ＸＯＲ回路３０を含む。またＸＯＲ回路３０の演算結果を格納する演算結果格納回路３１が設けられてよい。図６は、乗数が４ビットの場合の構成を示すが、これは限定的でない一例に過ぎず、乗数のビット数は特に制限されるものではない。乗数のビット数がＭ（偶数）であれば、２個のデコーダ２５及び２６の代わりにＭ／２個のデコーダが設けられ、部分積選択回路２７及び２８の代わりにＭ／２個の部分積選択回路が設けられることになる。その場合であっても、各デコーダ及び各部分積選択回路の動作は本実施例におけるデコーダ２５及び２６並びに部分積選択回路２７及び２８の動作と同様である。また乗数のビット数が大きくなると、ＸＯＲ回路３０に入力されるビット数が大きくなるが、ＸＯＲ回路３０においてＸＯＲ演算が実行されることに変わりはない。
【００２６】
被乗数保持回路２１は、被乗数を保持するレジスタであってよい。乗数保持回路２２は、乗数を保持するレジスタであってよい。２倍数算出回路２３は、被乗数の２倍数を出力する２倍数算出回路である。なお信号線３２は、被乗数の１倍数を出力する１倍数算出回路に相当する。また被乗数の０倍数を出力する０倍数算出回路は明示的には示されていないが、部分積選択回路２７及び２８には固定値０を選択して出力する機能が含まれている。これにより、０倍数選択を指示する選択信号が対応するデコーダ２５及び２６から印加されると、部分積選択回路２７及び２８は、０を出力することができる。この固定値０を提供する回路部分、１倍数算出回路に相当する信号線３２、及び２倍数算出回路２３を纏めて、被乗数のｎ倍数（ｎは整数）を出力するｎ倍数算出回路と考えることができる。
【００２７】
中間排他的論理和演算回路２４は、被乗数と被乗数を１ビット左シフトした結果との排他的論理和であるＸＯＲ演算結果を出力する。第１のデコーダ２５は、乗数保持回路２２に保持された乗数の第１の部分（例えば下位側（ＬＳＢ側）２ビット）に応じて、第１の選択信号を出力する。第２のデコーダ２６は、乗数保持回路２２に保持された乗数の第２の部分（例えば上位側（ＭＳＢ側）２ビット）に応じて、第２の選択信号を出力する。具体的には、第１のデコーダ２５及び第２のデコーダ２６の各々は、図４に示す表に従って、乗数の対応する２ビット部分（即ち下位側（ＬＳＢ側）２ビット又は上位側（ＭＳＢ側）２ビット）に対応する選択信号を生成する。即ち、０倍数、１倍数、２倍数、及び、被乗数と被乗数を１ビット左シフトした結果とのＸＯＲ演算結果の何れか１つを指定する例えば少なくとも２ビットの選択信号が、第１のデコーダ２５及び第２のデコーダ２６の各々により別個に生成される。
【００２８】
第１部分積選択回路２７は、第１の選択信号に応じて、ｎ倍数算出回路が出力した被乗数のｎ倍数又は中間排他的論理和演算回路２４が出力したＸＯＲ演算結果のいずれかを選択する。より具体的には、第１部分積選択回路２７は、第１の選択信号に応じて、固定値０、信号線３２からの被乗数の１倍数、２倍数算出回路２３からの被乗数の２倍数、又は中間排他的論理和演算回路２４からのＸＯＲ演算結果のいずれかを選択する。
【００２９】
第２部分積選択回路２８は、第２の選択信号に応じて、ｎ倍数算出回路が出力した被乗数のｎ倍数又は中間排他的論理和演算回路２４が出力したＸＯＲ演算結果のいずれかを選択する。より具体的には、第２部分積選択回路２８は、第２の選択信号に応じて、固定値０、信号線３２からの被乗数の１倍数、２倍数算出回路２３からの被乗数の２倍数、又は中間排他的論理和演算回路２４からのＸＯＲ演算結果のいずれかを選択する。
【００３０】
第１部分積選択回路２７の出力する第１部分積と第２部分積選択回路２８の出力する第２部分積とは、ＸＯＲ回路３０に供給される。但し第２部分積については、第１部分積とのビット位置の違いを反映させるために、ビットシフト回路２９により２ビット左にシフトさせてから、ＸＯＲ回路３０に供給される。
【００３１】
ＸＯＲ回路３０は、第１部分積選択回路２７が選択した第１部分積と第２部分積選択回路２８が選択した第２部分積とを加算した加算結果を出力する加算回路である。より具体的には、この加算演算においてキャリーは伝搬されることなく、加算結果はＸＯＲ演算結果となる。従って、ＸＯＲ回路３０は、単にＸＯＲ演算のみを実行するよう設計された回路であってもよいし、キャリー伝搬しないようにキャリー伝搬経路を遮断した構成の加算回路であってもよい。このような加算回路として、桁上保存加算回路（Carry Save Adder回路）を用いてもよい。
【００３２】
ＸＯＲ回路３０がＸＯＲ演算のみを実行するＸＯＲ回路である場合、例えば図５に示すような２つの部分積同士のＸＯＲ演算結果を求めればよい。即ち、ＸＯＲ回路を第１部分積と前記第２部分積との重複部分（即ち３ビット分）に設け、このＸＯＲ回路により第１部分積と第２部分積との重複部分のＸＯＲ演算結果を求めればよい。なお乗数のビット数がＭ（偶数）であれば、Ｍ／２個の部分積がＸＯＲ演算の対象となる。その場合、第１部分積と第２部分積との重複部分のＸＯＲ演算結果を求め、更にそのＸＯＲ演算結果と第３部分積等の他の部分積との重複する部分についてＸＯＲ演算を行うことになる。
【００３３】
図７は、中間排他的論理和演算回路２４の構成の一例を示す図である。中間排他的論理和演算回路２４は、ビットシフト回路３５及びＸＯＲ回路３６を含む。ビットシフト回路３５は、被乗数を１ビット左シフトした結果を生成する。ＸＯＲ回路３６は、被乗数とビットシフト回路３５の出力とのＸＯＲ演算結果を求めることにより、被乗数と被乗数を１ビット左シフトした結果との排他的論理和を求める。
【００３４】
以下において、通常の乗算とキャリーレス乗算との両方を選択的に実行可能な演算回路について説明する。前述のように、通常の２進数の乗算において、高速化のために乗数を２ビット毎に処理する計算の仕方がある。その場合には、乗数の各２ビットに現れ得る４通りの数００、０１、１０、及び１１に対応して、被乗数の０倍、１倍、２倍、及び３倍を、それぞれ部分積として求めることになる。この際、０倍数、１倍数、及び２倍数を計算するのは容易だが、３倍数を計算する回路は複雑になることが問題となる。これを解決する方法してＢｏｏｔｈアルゴリズムが一般に用いられ、３倍数を直接計算することなく、実効的に３倍数を実現する。
【００３５】
より具体的には、Ｂｏｏｔｈアルゴリズムでは、３倍数の計算に際して、３倍数＝４倍数＋（−１倍数）であることを利用している。即ち、３倍数を足し込んだ最終結果を得るためには、乗数のある２ビットで−１倍数を足しこみ、乗数の次の２ビットで１倍数を足しこめばよい。なぜなら、乗数の次の２ビットの１倍数は、直前の２ビットから見ると４倍数だからである。このようにして、−１倍数と４倍数とを足し込んだ最終結果を得ることにより、３倍数を足し込むのと同等の計算が可能となる。
【００３６】
ただし、次の２ビットに着目した場合、そのビット自身に応じて足し込むべき倍数を決める作業に加え、前の２ビットのために足し込むべき１倍数があるか否かの判断が必要になる。そこで、前の２ビットのための１倍数が必要かどうかの判断のために、自身のビットの１ビット下位のビットをチェックしている。そして、そのチェックしたビットが１であれば、前の２ビットのための１倍数が必要であると判断する。このため、前の２ビットにおいて２倍数を足し込む場合（即ち前の２ビットが１０の場合）も、次の２ビットから見た１ビット下位のビットが１となるので、２倍数＝４倍数＋（−２倍数）として計算する。このようにして、自身の２ビットと１ビット下位のビットとの合計３ビットのみを参照することで、前の２ビットのための倍数と自身のビットのための倍数との両方を考慮した倍数を選びことが可能となる。
【００３７】
図８は、着目２ビットと１ビット下位のビットとの合計３ビットのビットパターンに応じて何れの部分積を選択するかを示す表である。Ｂｏｏｔｈアルゴリズムによる通常の乗算とキャリーレス乗算との両方に対応可能とするためには、３ビットのビットパターンに対して、Ｂｏｏｔｈアルゴリズムにより選択すべき部分積とキャリーレス乗算により選択すべき部分積との両方を規定する必要がある。表の左側の列には、乗数の３ビットのビットパターン０００乃至１１１が示される。ここで、一番右側の１ビットが１ビット下位のビットであり、その上位にある２ビットが着目２ビットである。
【００３８】
表の真ん中の列には、各ビットパターンに対して、Ｂｏｏｔｈアルゴリズムにより通常の乗算のために選択されるべき部分積が示される。なおここで、ｘ−１及びｘ−２の表記はそれぞれ、被乗数の−１倍数及び被乗数の−２倍数を示す。例えば乗数の３ビットが１０１の場合には、自身の２ビット１０に対して２倍数が必要であるが、２倍数は前述のように４倍数＋（−２倍数）として計算するので、自身の２ビット１０に対して−２倍数が選択される。また１ビット下位のビット１は、前の２ビットのための１倍数が必要になることを示している。従って乗数の３ビットが１０１の場合には、−２倍数＋１倍数により、結果として、−１倍数（ｘ−１）が部分積として選択されることになる。
【００３９】
表の右側の列には、各ビットパターンに対して、キャリーレス乗算のために選択されるべき部分積が示される。表記は図４の場合と同様である。前述の説明から分かるように、キャリーレス乗算では乗数の各２ビットに着目すればよく、その下位の１ビットをチェックする必要はない。従って、乗数の３ビットの最下位ビットの値に関わりなく、上位２ビットの値のみに応じて、選択する部分積が決まってくる。即ち、図８に示す表において乗数の上位２ビットの値に着目した場合にキャリーレス乗算用に選択する部分積は、図４に示す乗数２ビットの同一の値に対して選択する部分積と同一である。
【００４０】
図９は、乗数が４ビットである場合において２ビット毎に乗数を処理して通常の乗算又はキャリーレス乗算の何れかを選択的に実行する演算回路の一例を示す図である。図９の演算回路は、制御値保持回路４０、被乗数保持回路４１、乗数保持回路４２、信号線４３、２倍数算出回路４４、マイナス２倍数算出回路４５、マイナス１倍数算出回路４６、中間排他的論理和演算回路４７、及びＢｏｏｔｈデコーダ４８乃至５０を含む。演算回路は更に、部分積選択回路５１乃至５３、ビットシフト回路５４、ビットシフト回路５５、及びＣＳＡ（Carry Save Adder）回路５６を含む。またＣＳＡ回路５６の演算結果を格納する加算結果格納回路５７及びキャリー格納回路５８が設けられてよい。図９は、乗数が４ビットの場合の構成を示すが、これは限定的でない一例に過ぎず、乗数のビット数は特に制限されるものではない。乗数のビット数がＭ（偶数）であれば、３個のデコーダ４８乃至５０の代わりにＭ／２＋１個のデコーダが設けられ、部分積選択回路５１乃至５３の代わりにＭ／２＋１個の部分積選択回路が設けられることになる。その場合であっても、各デコーダ及び各部分積選択回路の動作は本実施例におけるデコーダ４８乃至５０及び部分積選択回路５１乃至５３の動作と同様である。また乗数のビット数が大きくなると、ＣＳＡ回路５６に入力されるビット数が大きくなるが、ＣＳＡ回路５６において桁上保存加算が実行されることに変わりはない。
【００４１】
制御値保持回路４０は、Ｂｏｏｔｈアルゴリズムを用いた通常の乗算又はキャリーレス乗算の何れかを示す制御値を格納する。この格納値は、例えば０であるときに通常の乗算を示し、例えば１であるときにキャリーレス乗算を示してよい。
【００４２】
被乗数保持回路４１は、被乗数を保持するレジスタであってよい。乗数保持回路４２は、乗数を保持するレジスタであってよい。信号線４３は、被乗数の１倍数を出力する１倍数算出回路に相当する。２倍数算出回路４４は、被乗数の２倍数を出力する。マイナス２倍数算出回路４５は、被乗数の−２倍数を出力する。マイナス１倍数算出回路４６は、被乗数の−１倍数を出力する。また被乗数の０倍数を出力する０倍数算出回路は明示的には示されていないが、部分積選択回路５１乃至５３には固定値０を選択して出力する機能が含まれている。これにより、０倍数選択を指示する選択信号が対応するデコーダ４８乃至５０から印加されると、部分積選択回路５１乃至５３は、０を出力することができる。この固定値０を提供する回路部分、１倍数算出回路に相当する信号線４３、２倍数算出回路４４、マイナス２倍数算出回路４５、及びマイナス１倍数算出回路４６を纏めて、被乗数のｎ倍数（ｎは整数）を出力するｎ倍数算出回路と考えることができる。
【００４３】
中間排他的論理和演算回路４７は、被乗数と被乗数を１ビット左シフトした結果との排他的論理和であるＸＯＲ演算結果を出力する。Ｂｏｏｔｈデコーダ４８は、乗数保持回路２２に保持された乗数の第１の部分（例えば下位側（ＬＳＢ側）２ビット＋その下位の仮想１ビット０）に応じて、第１の選択信号を出力する。Ｂｏｏｔｈデコーダ４９は、乗数保持回路４２に保持された乗数の第２の部分（例えば上位側（ＭＳＢ側）２ビット＋その下位の１ビット）に応じて、第２の選択信号を出力する。Ｂｏｏｔｈデコーダ５０は、乗数保持回路４２に保持された乗数の第３の部分（例えば上位側（ＭＳＢ側）２ビットの上の仮想２ビット００＋その下位の１ビット）に応じて、第３の選択信号を出力する。具体的には、Ｂｏｏｔｈデコーダ４８乃至５０の各々は、図８に示す表に従って、乗数の対応する３ビット部分に対応する選択信号を生成する。即ち、０倍数、１倍数、２倍数、−２倍数、−１倍数、及び、被乗数と被乗数を１ビット左シフトした結果とのＸＯＲ演算結果の何れか１つを指定する選択信号が、Ｂｏｏｔｈデコーダ４８乃至５０の各々により別個に生成される。
【００４４】
図１０は、Ｂｏｏｔｈデコーダの入出力関係を示す真理値表の一例を示す。図９に示すＢｏｏｔｈデコーダ４８乃至５０の各々は、図１０に示す真理値表に従って、各演算を選択するデコード信号を出力してよい。制御値保持回路４０の制御値が０であり通常の乗算を示す場合、例えば乗数の着目３ビットが０１１であれば、２倍数（ｘ２）を選択する選択信号が出力される。また同様に制御値保持回路４０の制御値が０であり通常の乗算を示す場合、例えば乗数の着目３ビットが１１０であれば、−１倍数（ｘ−１）を選択する選択信号が出力される。更に、制御値保持回路４０の制御値が１でありキャリーレス乗算を示す場合、例えば乗数の着目３ビットが０１１であれば、１倍数（ｘ１）を選択する選択信号が出力される。また同様に制御値保持回路４０の制御値が１でありキャリーレス乗算を示す場合、例えば乗数の着目３ビットが１１０であれば、被乗数と被乗数を１ビット左シフトした結果とのＸＯＲ演算結果を選択する選択信号が出力される。
【００４５】
図９を再び参照し、部分積選択回路５１は、第１の選択信号に応じて、ｎ倍数算出回路が出力した被乗数のｎ倍数又は中間排他的論理和演算回路４７が出力したＸＯＲ演算結果のいずれかを選択する。より具体的には、部分積選択回路５１は、第１の選択信号に応じて、０倍数、１倍数、２倍数、−２倍数、−１倍数、及び、被乗数と被乗数を１ビット左シフトした結果とのＸＯＲ演算結果の何れか１つを選択して出力する。部分積選択回路５２も、第２の選択信号に応じて、同様の選択動作を実行する。部分積選択回路５３も、第３の選択信号に応じて、同様の選択動作を実行する。
【００４６】
部分積選択回路５１乃至５３がそれぞれ出力する３つの部分積は、ＣＳＡ回路５６に供給される。但し部分積選択回路５２からの部分積については、ビット位置の違いを反映させるために、ビットシフト回路５４により２ビット左にシフトさせてから、ＣＳＡ回路５６に供給される。また部分積選択回路５３からの部分積については、ビット位置の違いを反映させるために、ビットシフト回路５５により４ビット左にシフトさせてから、ＣＳＡ回路５６に供給される。
【００４７】
図１１は、ＣＳＡ回路５６の構成の一例を示す図である。ＣＳＡ回路５６は、３入力２出力のＣＳＡ回路６０乃至６８、及びＡＮＤ回路６９を含む。Ｌ０［４：０］は部分積選択回路５１からの５ビットの部分積、Ｌ１［６：２］は部分積選択回路５２からの５ビットの部分積、Ｌ２［８：４］は部分積選択回路５３からの５ビットの部分積である。括弧内の［ｘ：ｙ］は、ビットシフト回路による桁合わせ後の加算時のビット位置において下からｙビット目からｘビット目までのデータであることを示す。
【００４８】
ＣＳＡ回路６０乃至６２、ＣＳＡ回路６８、及びＣＳＡ回路６４乃至６７から出力される加算結果Ｓ［０］及びＳ［２］乃至Ｓ［８］、及び、Ｌ０［１］に等しいＳ［１］からなるデータＳ［８：０］が、加算結果ＳＵＭ［８：０］として出力される。またＣＳＡ回路６０乃至６２、ＣＳＡ回路６８、及びＣＳＡ回路６４乃至６７から出力されるキャリーＣ［１］及びＣ［３］乃至Ｃ［９］からなるデータＣ［９：３，１］が、キャリーＣＲＹ［９：３，１］として出力される。
【００４９】
ＣＳＡ回路５６は、部分積選択回路５１乃至５３が選択したそれぞれの部分積を加算した加算結果ＳＵＭ［８：０］を出力する加算回路である。より具体的には、この加算演算においてキャリーは伝搬されることはない。３入力２出力のＣＳＡ回路６０乃至６８は、複数の部分積の重複部分に設けられ、部分積の重複部分の加算結果を求める。この場合、第１部分積と第２部分積との重複部分の加算結果を求め、更にその加算結果と第３部分積等の他の部分積との重複する部分について加算演算を行っているとみなすことができる。またＡＮＤ回路６９は、部分積同士の重複部分の加算結果により生じたキャリーの伝搬を抑止するマスク回路として機能する。ＡＮＤ回路６９は、制御値保持回路４０の制御値が通常の乗算を示す場合にキャリーの伝搬を許可し、制御値保持回路４０の制御値がキャリーレス乗算を示す場合にキャリーの伝搬を抑止してよい。
【００５０】
以上の説明では、２ビット毎に乗数を処理する場合について説明したが、一纏まりとするビット数は２に限らず、３又はそれ以上のビット数を一纏めとしてもよい。以下に、一例として、３ビット毎に乗数を処理する演算回路について説明する。
【００５１】
図１２は、乗数の３ビットのビットパターンに応じて何れの部分積を選択するかを示す表である。表の左側の列には、乗数の３ビットのビットパターン０００乃至１１１が示される。表の右側の列には、各ビットパターンに対して選択されるべき部分積が示される。ここでｘ０は０倍数、ｘ１は１倍数、ｘ２は２倍数、ｘ４は４倍数を示す。またＸＯＲは被乗数と被乗数を１ビット左シフトした結果とのＸＯＲ演算結果を示す。以下においてこのような演算をＸＯＲ１と呼ぶ。ＸＯＲ２は被乗数と被乗数を２ビット左シフトした結果とのＸＯＲ演算結果を示す。以下においてこのような演算をＸＯＲ２と呼ぶ。ＸＯＲ３は被乗数を２ビット左シフトした結果と被乗数を１ビット左シフトした結果とのＸＯＲ演算結果を示す。以下においてこのような演算をＸＯＲ３と呼ぶ。ＸＯＲ４は被乗数を２ビット左シフトした結果と、被乗数を１ビット左シフトした結果と、被乗数とのＸＯＲ演算結果を示す。以下においてこのような演算をＸＯＲ４と呼ぶ。例えば、乗数の着目３ビットが０１０であれば、２倍数（ｘ２）を部分積にすればよいことが、この表から分かる。
【００５２】
図１３は、乗数が４ビットである場合において３ビット毎に乗数を処理してキャリーレス乗算を実行する演算回路の一例を示す図である。図１３の演算回路は、被乗数保持回路７１、乗数保持回路７２、信号線７３、２倍数算出回路７４、４倍数算出回路７５、ＸＯＲ１算出回路７６、ＸＯＲ２算出回路７７、ＸＯＲ３算出回路７８、ＸＯＲ４算出回路７９、デコーダ８０、及びデコーダ８１を含む。演算回路は更に、部分積選択回路８２、部分積選択回路８３、ビットシフト回路８４、及びＸＯＲ回路８５を含む。またＸＯＲ回路８５の演算結果を格納する演算結果格納回路８６が設けられてよい。図１３は、乗数が４ビットの場合の構成を示すが、これは限定的でない一例に過ぎず、乗数のビット数は特に制限されるものではない。乗数のビット数に関わらず、各デコーダ及び各部分積選択回路の動作は本実施例におけるデコーダ及び部分積選択回路の動作と同様である。また乗数のビット数が大きくなると、ＸＯＲ回路８５に入力されるビット数が大きくなるが、ＸＯＲ回路８５においてＸＯＲ演算が実行されることに変わりはない。
【００５３】
図６の演算回路においてデコーダ２５及び２６は図４の表に従った選択信号を出力するが、図１３の演算回路においてデコーダ８０及び８１は図１２の表に従った選択信号を出力する。また図６の演算回路において、部分積選択回路２７及び２８による選択対象は、０倍数、１倍数、２倍数、及びＸＯＲ１演算結果の何れかである。それに対して図６の演算回路において、部分積選択回路８２及び８３による選択対象は、０倍数、１倍数、２倍数、４倍数、ＸＯＲ１演算結果、ＸＯＲ２演算結果、ＸＯＲ３演算結果、及びＸＯＲ４演算結果、の何れかである。また図６の演算回路においてビットシフト回路２９は左へ２ビットのシフトを行うが、図１３の演算回路においてビットシフト回路８４は左へ３ビットのシフトを行う。それ以外の点において、図６の演算回路と図１３の演算回路とは、基本的に同様であり、詳細な説明は省略する。
【００５４】
図１４は、ＸＯＲ２算出回路７７の構成の一例を示す図である。ＸＯＲ２算出回路７７は、ビットシフト回路９１及びＸＯＲ回路９２を含む。ビットシフト回路９１は、被乗数を２ビット左シフトした結果を生成する。ＸＯＲ回路９２は、被乗数とビットシフト回路９１の出力とのＸＯＲ演算結果を求めることにより、被乗数と被乗数を２ビット左シフトした結果との排他的論理和を求める。なお図１３に示すＸＯＲ１算出回路７６は、図７に示す中間排他的論理和演算回路２４と同一の回路構成であってよい。
【００５５】
図１５は、ＸＯＲ３算出回路７８の構成の一例を示す図である。ＸＯＲ３算出回路７８は、ビットシフト回路９３及び９４並びにＸＯＲ回路９５を含む。ビットシフト回路９３は、被乗数を２ビット左シフトした結果を生成する。ビットシフト回路９４は、被乗数を１ビット左シフトした結果を生成する。ＸＯＲ回路９５は、ビットシフト回路９３の出力とビットシフト回路９４の出力とのＸＯＲ演算結果を求めることにより、被乗数を２ビット左シフトした結果と被乗数を１ビット左シフトした結果との排他的論理和を求める。
【００５６】
図１６は、ＸＯＲ４算出回路７９の構成の一例を示す図である。ＸＯＲ４算出回路７９は、ビットシフト回路９６及び９７並びにＸＯＲ回路９８を含む。ビットシフト回路９６は、被乗数を２ビット左シフトした結果を生成する。ビットシフト回路９７は、被乗数を１ビット左シフトした結果を生成する。ＸＯＲ回路９８は、ビットシフト回路９６の出力と、ビットシフト回路９７の出力と、被乗数のＸＯＲ演算結果を求めることにより、被乗数を２ビット左シフトした結果と被乗数を１ビット左シフトした結果と被乗数との排他的論理和を求める。
【００５７】
図１７は、着目３ビットとその直ぐ下の位の２ビットとの合計５ビットのビットパターンに応じて何れの部分積を選択するかを示す表である。通常の乗算とキャリーレス乗算との両方に対応可能とするために、これら５ビットのビットパターンに対して、通常の乗算に対して選択すべき部分積とキャリーレス乗算に対して選択すべき部分積との両方が規定されている。表の左側の列には、乗数の５ビットのビットパターン０００００乃至１１１１１が示される。ここで、一番右側の２ビットが着目３ビットの直ぐ下の位の２ビットであり、その上位にある３ビットが着目３ビットである。
【００５８】
表の真ん中の列には、各ビットパターンに対して、通常の乗算のために選択されるべき部分積が示される。なおここで、ｘ−１及びｘ−２等の表記はそれぞれ、被乗数の−１倍数及び被乗数の−２倍数等を示す。
【００５９】
表の右側の列には、各ビットパターンに対して、キャリーレス乗算のために選択されるべき部分積が示される。表記は図１２の場合と同様である。前述の説明から分かるように、キャリーレス乗算では乗数の各３ビットに着目すればよく、その下の位の２ビットをチェックする必要はない。従って、乗数の５ビットの最下位２ビットの値に関わりなく、上位３ビットの値のみに応じて、選択する部分積が決まってくる。即ち、図１７に示す表において乗数の上位３ビットの値に着目した場合にキャリーレス乗算用に選択する部分積は、図１２に示す乗数３ビットの同一の値に対して選択する部分積と同一である。
【００６０】
図１８は、乗数が４ビットである場合において３ビット毎に乗数を処理して通常の乗算又はキャリーレス乗算の何れかを選択的に実行する演算回路の一例を示す図である。図１８の演算回路は、制御値保持回路１００、被乗数保持回路１０１、乗数保持回路１０２、信号線１０３、４倍数算出回路１０４、３倍数算出回路１０５、２倍数算出回路１０６、及びマイナス１倍数算出回路１０７を含む。演算回路は更に、ＸＯＲ１算出回路１０８、ＸＯＲ３算出回路１０９、マイナス４倍数算出回路１１０、マイナス３倍数算出回路１１１、マイナス２倍数算出回路１１２、ＸＯＲ２算出回路１１３、ＸＯＲ４算出回路１１４、デコーダ１１５、及びデコーダ１１６を含む。演算回路は更に、部分積選択回路１１７、部分積選択回路１１８、ビットシフト回路１１９、及びＣＳＡ回路１２０を含む。またＣＳＡ回路１２０の演算結果を格納する加算結果格納回路１２２及びキャリー格納回路１２１が設けられてよい。図１８は、乗数が４ビットの場合の構成を示すが、これは限定的でない一例に過ぎず、乗数のビット数は特に制限されるものではない。乗数のビット数に関わらず、各デコーダ及び各部分積選択回路の動作は本実施例におけるデコーダ及び部分積選択回路の動作と同様である。また乗数のビット数が大きくなると、ＣＳＡ回路１２０に入力されるビット数が大きくなるが、ＣＳＡ回路１２０においてＸＯＲ演算が実行されることに変わりはない。
【００６１】
図１９Ａ及び図１９Ｂは、デコーダの入出力関係を示す真理値表の一例を示す。図１８に示すデコーダ１１５乃至１１６の各々は、図１９Ａ及び図１９Ｂに示す真理値表に従って、各演算を選択するデコード信号を出力してよい。制御値保持回路１００の制御値が０であり通常の乗算を示す場合、例えば乗数の着目５ビットが０１０１１であれば、３倍数（ｘ３）を選択する選択信号が出力される。また同様に制御値保持回路４０の制御値が０であり通常の乗算を示す場合、例えば乗数の着目５ビットが１１００１であれば、−２倍数（ｘ−２）を選択する選択信号が出力される。更に、制御値保持回路１１０の制御値が１でありキャリーレス乗算を示す場合、例えば乗数の着目５ビットが０１０１１であれば、２倍数（ｘ２）を選択する選択信号が出力される。また同様に制御値保持回路１１０の制御値が１でありキャリーレス乗算を示す場合、例えば乗数の着目５ビットが１１００１であれば、ＸＯＲ３演算結果を選択する選択信号が出力される。
【００６２】
図９の演算回路においてデコーダ４８乃至５０は図１０の表に従った選択信号を出力するが、図１８の演算回路においてデコーダ１１５及び１１６は図１９Ａ及び図１９Ｂの表に従った選択信号を出力する。また図９の演算回路において、部分積選択回路５１乃至５３による選択対象は、０倍数、１倍数、２倍数、−２倍数、−１倍数、及びＸＯＲ１演算結果の何れかである。それに対して図１８の演算回路において、部分積選択回路１１７及び１１８による選択対象は、０倍数及び図１８に示される各演算結果の何れかである。また図９の演算回路においてビットシフト回路５４及び５５は左へ２ビットのシフト及び４ビットのシフトを行うが、図１８の演算回路においてビットシフト回路１１９は左へ３ビットのシフトを行う。それ以外の点において、図９の演算回路と図１８の演算回路とは、基本的に同様であり、詳細な説明は省略する。
【００６３】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【符号の説明】
【００６４】
２１  被乗数保持回路
２２  乗数保持回路
２３  ２倍数算出回路
２４  中間排他的論理和演算回路
２５  第１のデコーダ
２６  第２のデコーダ
２７  第１部分積選択回路
２８  第２部分積選択回路
２９  ビットシフト回路
３０  ＸＯＲ回路
【図１】
2013210837.tif 000003
【図２】
2013210837.tif 000004
【図３】
2013210837.tif 000005
【図４】
2013210837.tif 000006
【図５】
2013210837.tif 000007
【図６】
2013210837.tif 000008
【図７】
2013210837.tif 000009
【図８】
2013210837.tif 000010
【図９】
2013210837.tif 000011
【図１０】
2013210837.tif 000012
【図１１】
2013210837.tif 000013
【図１２】
2013210837.tif 000014
【図１３】
2013210837.tif 000015
【図１４】
2013210837.tif 000016
【図１５】
2013210837.tif 000017
【図１６】
2013210837.tif 000018
【図１７】
2013210837.tif 000019
【図１８】
2013210837.tif 000020
【図１９Ａ】
2013210837.tif 000021
【図１９Ｂ】
2013210837.tif 000022