(57)【要約】【課題】  複数種類の命令セットの命令コードから成るプログラムを、処理のリアルタイム性を保証しつつ実行させられるようにする。【解決手段】  命令コードフェッチ部１０１は、メモリから命令コードをフェッチし、デコード部１０２は、複数種類の命令セットに対応したデコードを行い、処理実行部１０４は、デコード結果に応じた処理を実行する。コンテキスト保持部１０５は、複数のスレッドに対応した内部情報を保持する複数のレジスタセットを有し、スレッド制御部１０６は、上記レジスタセットを切り替えることにより、所定のクロックサイクルごとにスレッドを順次切り替える。命令セット判定部１０７は、切り替えられたコンテキスト保持部１０５に保持されているプロセスＩＤに応じた命令セット番号を出力し、これによって、上記デコード部１０２のデコードする命令セットが切り替えられる。【選択図】  図１
2005209105.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも２種類の互いに異なる命令セットの命令コードを解読可能な命令デコード部と、
時分割で複数のタスクを切り替えるスレッド制御部と、
上記スレッド制御部によるタスクの切り替えに応じて、上記命令デコード部によって解読される命令セットを制御する命令セット制御部と、
を備えたことを特徴とするマルチスレッドプロセッサ。
【請求項２】
請求項１のマルチスレッドプロセッサであって、
さらに、各タスクに対応して、各タスクで用いられる命令セットに対応した情報を保持する情報保持部を備え、
上記命令セット制御部は、上記情報保持部に保持された情報に基づいて、上記命令デコード部によって解読される命令セットを制御するように構成されていることを特徴とするマルチスレッドプロセッサ。
【請求項３】
請求項２のマルチスレッドプロセッサであって、
上記情報保持部に保持される情報は、上記命令セットを示す情報であることを特徴とするマルチスレッドプロセッサ。
【請求項４】
請求項２のマルチスレッドプロセッサであって、
上記情報保持部に保持される情報は、上記タスクを示す情報であるとともに、
さらに、上記情報保持部に保持された上記タスクを示す情報に基づいて命令セットを示す情報を出力する命令セット判定部を備え、
上記命令セット制御部は、上記命令セット判定部から出力された情報に応じて、上記命令デコード部によって解読される命令セットを制御するように構成されていることを特徴とするマルチスレッドプロセッサ。
【請求項５】
請求項２のマルチスレッドプロセッサであって、
上記情報保持部は、初期状態またはその後に実行される命令コードの実行によって、上記命令セットに対応した情報を保持し得るように構成されていることを特徴とするマルチスレッドプロセッサ。
【請求項６】
請求項１のマルチスレッドプロセッサであって、
上記命令セット制御部は、初期状態の際に、あらかじめ設定された命令セットの命令コードが命令デコード部によって解読されるように制御することを特徴とするマルチスレッドプロセッサ。
【請求項７】
請求項６のマルチスレッドプロセッサであって、
あらかじめ設定される、上記命令デコード部によって初期状態の際に解読される命令セットは、可変に設定し得るように構成されていることを特徴とするマルチスレッドプロセッサ。
【請求項８】
請求項１のマルチスレッドプロセッサであって、
上記命令デコード部は、命令コードのデコード内容に対応する情報を保持し、保持される情報に応じて命令コードを解読するように構成されるとともに、
上記命令セット制御部は、上記命令デコード部に保持される情報を変更するように構成されていることを特徴とするマルチスレッドプロセッサ。
【請求項９】
請求項８のマルチスレッドプロセッサであって、
上記命令セット制御部は、初期状態またはその後に実行される命令コードの実行によって、上記命令デコード部に保持される情報を変更するように構成されていることを特徴とするマルチスレッドプロセッサ。
【請求項１０】
請求項１のマルチスレッドプロセッサであって、
上記命令デコード部は、それぞれ互いに異なる命令セットの命令コードを解読可能な少なくとも２つのデコード回路を備え、
上記命令セット制御部は、上記デコード回路を切り替えるように構成されていることを特徴とするマルチスレッドプロセッサ。
【請求項１１】
請求項１０のマルチスレッドプロセッサであって、
上記少なくとも２つのデコード回路のうち命令コードの解読が必要とされないデコード回路は、動作を停止させるように構成されていることを特徴とするマルチスレッドプロセッサ。
【請求項１２】
請求項１のマルチスレッドプロセッサであって、
さらに、命令コードの実行によってメモリに対するデータの読み書きが行われる際に、上記データのエンディアンを変換するエンディアン変換部を備えたことを特徴とするマルチスレッドプロセッサ。
【請求項１３】
請求項１のマルチスレッドプロセッサであって、
さらに、所定の鍵情報に基づいて、暗号化された命令コードを復号化する復号化部を備え、
上記命令デコード部は、上記復号化部によって復号化された命令コードを解読するように構成されていることを特徴とするマルチスレッドプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数種類の命令セットの命令コードから成るプログラムを並列に実行可能なマルチスレッドプロセッサに関するものである。
【背景技術】
【０００２】
近年、種々の機器のディジタル化が進んでおり、コンパクトディスク（ＣＤ）やディジタルビデオディスク（ＤＶＤ）を筆頭に、国内におけるオーディオ機器やビデオ機器の大半はディジタル化がなされている。さらに、テレビジョンの分野では、日本国内では２０１１年の完全ディジタル化に向けてディジタル受像機の開発が盛んに行われている。
【０００３】
これらの機器は、以前は、システム制御を担当するマイクロプロセッサと、オーディオデータやビデオデータ等のディジタル処理を行う専用ＬＳＩ（大規模集積回路）により構成されていたが、最近では、半導体集積回路の高速化を背景に、さまざまな規格フォーマットに柔軟に対応し得るようにメディアプロセッサと呼ばれる信号処理能力を強化したプロセッサで構成される例が多く見られる。
【０００４】
さらに、半導体集積回路の高集積化に伴い、従来別々のＬＳＩで構成されていたマイクロプロセッサとメディアプロセッサとを１チップ化したシステムＬＳＩが提案されている。このように複数種類のプロセッサが１チップの集積回路上に搭載されるのは、これらのプロセッサが、それぞれの生い立ちによって互いに異なる命令セットアーキテクチャ（以下「ＩＳＡ」という。）を持ち、また、開発環境も異なる場合が多く、各プロセッサの処理能力の向上を有効に活用すべく処理を切り分けて統合や再分配等することが困難なためである。
【０００５】
そこで、ＩＳＡが互いに異なる複数のプロセッサで実行されるような処理（プログラム）を単一のプロセッサで実行させ得るようにする技術が提案されている（例えば、特許文献１参照）。この技術では、命令解読部が２種類の命令セットの命令コードを解読可能に構成され、命令コードのフェッチアドレスに応じて命令セットを示すフラグが設定されるとともに、そのフラグに基づいて、命令セットに応じた解読がなされるようになっている。
【０００６】
ここで、例えばオーディオデータやビデオデータの処理においては、決まった時間内に決まった処理を行わなければならないというリアルタイム性を強く要求する処理が多く含まれている。具体的には、例えばオーディオデータの処理では、規定時間内にディジタルデータをデコードし、外部（または内蔵の）ＤＡ変換機を通してアナログのオーディオ信号を出力しなければならず、処理が規定時間内に間に合わない場合には音飛びが起こる。また、同様に、ビデオデータの処理では、処理の遅延は画像の乱れなどを起こす。すなわち、何れの場合も、ディジタルオーディオ、ビデオ機器としての要件を満たせないことになる。
【特許文献１】特開平３−１７１２３１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記のように命令コードのフェッチアドレスに応じて命令セットが切り替えられるプロセッサでは、各命令セットの命令コードによる処理は、各処理の流れに応じて切り替えられることになり、各処理が規定の時間内に行われるかどうかは、互いに他の処理が行われる時間に影響されることになる。したがって、各処理に対するリアルタイム性を保障することができないという問題点を有していた。
【０００８】
本発明は上記の問題点に鑑みてなされたものであり、複数種類の命令セットの命令コードから成るプログラムを、処理のリアルタイム性を保証しつつ実行させることが可能なマルチスレッドプロセッサの提供を目的としている。
【課題を解決するための手段】
【０００９】
上記の課題を解決するため、本発明の請求項１の発明は、
少なくとも２種類の互いに異なる命令セットの命令コードを解読可能な命令デコード部と、
時分割で複数のタスクを切り替えるスレッド制御部と、
上記スレッド制御部によるタスクの切り替えに応じて、上記命令デコード部によって解読される命令セットを制御する命令セット制御部と、
を備えたことを特徴とする。
【００１０】
これにより、各タスクは、それぞれ他のタスクの処理の流れに係わらず、スレッド制御部によって時分割で切り替えられ、命令セット制御部の制御により、切り替えられたタスクに応じた命令セットのデコードが命令デコード部によって行われる。
【００１１】
また、請求項２の発明は、
請求項１のマルチスレッドプロセッサであって、
さらに、各タスクに対応して、各タスクで用いられる命令セットに対応した情報を保持する情報保持部を備え、
上記命令セット制御部は、上記情報保持部に保持された情報に基づいて、上記命令デコード部によって解読される命令セットを制御するように構成されていることを特徴とする。
【００１２】
これにより、情報保持部に保持された、各タスクで用いられる命令セットに対応した情報によって、命令デコード部により解読される命令セットが制御される。
【００１３】
また、請求項３の発明は、
請求項２のマルチスレッドプロセッサであって、
上記情報保持部に保持される情報は、上記命令セットを示す情報であることを特徴とする。
【００１４】
これにより、情報保持部に保持される情報の変換等を要することなく、デコードされる命令セットが制御される。
【００１５】
また、請求項４の発明は、
請求項２のマルチスレッドプロセッサであって、
上記情報保持部に保持される情報は、上記タスクを示す情報であるとともに、
さらに、上記情報保持部に保持された上記タスクを示す情報に基づいて命令セットを示す情報を出力する命令セット判定部を備え、
上記命令セット制御部は、上記命令セット判定部から出力された情報に応じて、上記命令デコード部によって解読される命令セットを制御するように構成されていることを特徴とする。
【００１６】
これにより、デコードされる命令セットを直接示す情報を情報保持部に保持させなくても、タスクを示す情報に基づいて、デコードされる命令セットが制御される。
【００１７】
また、請求項５の発明は、
請求項２のマルチスレッドプロセッサであって、
上記情報保持部は、初期状態またはその後に実行される命令コードの実行によって、上記命令セットに対応した情報を保持し得るように構成されていることを特徴とする。
【００１８】
これにより、命令コードの実行によって、デコードされる命令セットが柔軟に設定される。
【００１９】
また、請求項６の発明は、
請求項１のマルチスレッドプロセッサであって、
上記命令セット制御部は、初期状態の際に、あらかじめ設定された命令セットの命令コードが命令デコード部によって解読されるように制御することを特徴とする。
【００２０】
これにより、初期状態では、あらかじめなされた設定に応じた命令セットに対するデコードが行われる。
【００２１】
また、請求項７の発明は、
請求項６のマルチスレッドプロセッサであって、
あらかじめ設定される、上記命令デコード部によって初期状態の際に解読される命令セットは、可変に設定し得るように構成されていることを特徴とする。
【００２２】
これにより、初期状態でデコードされる命令セットが柔軟に設定される。
【００２３】
また、請求項８の発明は、
請求項１のマルチスレッドプロセッサであって、
上記命令デコード部は、命令コードのデコード内容に対応する情報を保持し、保持される情報に応じて命令コードを解読するように構成されるとともに、
上記命令セット制御部は、上記命令デコード部に保持される情報を変更するように構成されていることを特徴とする。
【００２４】
これにより、命令デコード部に保持される情報が命令制御部の制御によって変更され、命令デコード部では、その変更された情報に応じた命令コードのデコードが行われる。
【００２５】
また、請求項９の発明は、
請求項８のマルチスレッドプロセッサであって、
上記命令セット制御部は、初期状態またはその後に実行される命令コードの実行によって、上記命令デコード部に保持される情報を変更するように構成されていることを特徴とする。
【００２６】
これにより、命令コードの実行によって、デコードされる命令セットが柔軟に設定される。
【００２７】
また、請求項１０の発明は、
請求項１のマルチスレッドプロセッサであって、
上記命令デコード部は、それぞれ互いに異なる命令セットの命令コードを解読可能な少なくとも２つのデコード回路を備え、
上記命令セット制御部は、上記デコード回路を切り替えるように構成されていることを特徴とする。
【００２８】
これにより、複数のデコード回路が切り替えられることによって、デコードされる命令セットが制御される。
【００２９】
また、請求項１１の発明は、
請求項１０のマルチスレッドプロセッサであって、
上記少なくとも２つのデコード回路のうち命令コードの解読が必要とされないデコード回路は、動作を停止させるように構成されていることを特徴とする。
【００３０】
これにより、命令コードをデコードしないデコード回路で消費される電力が抑制される。
【００３１】
また、請求項１２の発明は、
請求項１のマルチスレッドプロセッサであって、
さらに、命令コードの実行によってメモリに対するデータの読み書きが行われる際に、上記データのエンディアンを変換するエンディアン変換部を備えたことを特徴とする。
【００３２】
これにより、デコードされる命令セットに応じたバイトオーダーで転送命令が実行される。
【００３３】
また、請求項１３の発明は、
請求項１のマルチスレッドプロセッサであって、
さらに、所定の鍵情報に基づいて、暗号化された命令コードを復号化する復号化部を備え、
上記命令デコード部は、上記復号化部によって復号化された命令コードを解読するように構成されていることを特徴とする。
【００３４】
これにより、暗号化されてメモリ等に記憶された命令コードが復号化されて実行される。
【発明の効果】
【００３５】
本発明によれば、複数種類の命令セットの命令コードから成るプログラムを、処理のリアルタイム性を保証しつつ実行させることができる。
【発明を実施するための最良の形態】
【００３６】
以下、本発明の実施形態として、４段のパイプラインを有し、少なくとも２種類の命令セットの命令コードを３つのスレッドで実行し得るマルチスレッドプロセッサの例を図面に基づいて詳細に説明する
《発明の実施形態１》
（ＣＰＵコア１００の全体構成）
図１は、マルチスレッドプロセッサを構成するＣＰＵコア１００の構成を示すブロック図である。このＣＰＵコア１００は、バス制御部１２１および外部バス１２２を介して、図示しないメモリに接続され、以下のような各部によって、メモリに記憶された命令コードで示される処理を実行するようになっている。
【００３７】
命令コードフェッチ部１０１は、命令用バス１１１を介して、メモリから命令コードをフェッチするようになっている。
【００３８】
デコード部１０２は、フェッチされた命令コードに対して、複数種類の命令セットに対応したデコードを行い、内部命令コードに変換して出力するようになっている。上記命令セットは、後述するように各スレッドで処理されるプロセス（タスク）に対応づけられている。
【００３９】
セレクタ１０３は、デコード部１０２からの出力のうち、上記フェッチされた命令コードに対応するデコードが行われた内部命令コードを選択して出力するようになっている。
【００４０】
処理実行部１０４は、上記内部命令コードに応じた処理の実行、例えばデータ用バス１１２を介したデータの入出力等の処理を行うようになっている。
【００４１】
コンテキスト保持部１０５は、内部バス１１３を介して処理実行部１０４に接続され、後述するように複数組の汎用レジスタやプログラムカウンタ等を有して、各スレッドごとに、命令コードのフェッチアドレスや、実行されるプロセスを識別するプロセスＩＤ、プロセッサの状態を示す状態情報等の内部情報を保持するようになっている。
【００４２】
スレッド制御部１０６は、コンテキスト保持部１０５に含まれる上記内部情報を切り替えることにより、複数のスレッド、すなわちプロセスの実行を制御するようになっている。
【００４３】
命令セット判定部１０７は、コンテキスト保持部１０５に保持されているプロセスＩＤに基づいて、実行されるプロセスに応じた命令セットを示す命令セット番号を出力するようになっている。
【００４４】
アクセス監視部１０８は、処理実行部１０４による、ＣＰＵローカルバス１１４を介したコンテキスト保持部１０５等へのアクセス（書き込みや参照）を監視し、初期状態で起動されるスレッドに対してだけ、ＣＰＵローカルバス１１４を介したアクセスを許可するようになっている。
【００４５】
以下、上記デコード部１０２、処理実行部１０４、コンテキスト保持部１０５、スレッド制御部１０６、命令セット判定部１０７、およびアクセス監視部１０８の詳細な構成について説明する。
【００４６】
（デコード部１０２）
デコード部１０２は、図２に示すように、可変デコーダ２０１と、固定デコーダ２０２と、ビット列変換部２０３と、セレクタ２０４とを備えている。
【００４７】
上記可変デコーダ２０１は、ラッチ回路２０１ａと、フラッシュメモリ２０１ｂと、ＰＬＡ２０１ｃ（プログラマブル論理アレイ）とを有している。ラッチ回路２０１ａは、命令セット判定部１０７から出力される命令セット番号の下位２ビットの値が２である場合に、セレクタ２０４から出力される命令コードをＰＬＡ２０１ｃに出力するようになっている。フラッシュメモリ２０１ｂは、命令セットに対応した論理構成情報を保持し、ＰＬＡ２０１ｃは、上記論理構成情報に基づいて、ラッチ回路２０１ａから出力される命令コードをデコードするようになっている。
【００４８】
固定デコーダ２０２は、ラッチ回路２０２ａと、初期スレッド用デコード回路２０２ｂとを有している。ラッチ回路２０２ａは、命令セット番号の下位２ビットの値が１である場合に、セレクタ２０４から出力される命令コードを初期スレッド用デコード回路２０２ｂに出力し、出力された命令コードを初期スレッド用デコード回路２０２ｂがデコードするようになっている。上記初期スレッド用デコード回路２０２ｂのデコード内容は、あらかじめハードワイヤードによって設定され、ＣＰＵコア１００のリセット直後に実行される命令コードがデコードされ得るようになっている。
【００４９】
上記可変デコーダ２０１および固定デコーダ２０２の出力は、前記セレクタ１０３により、命令セット番号に応じた何れか一方が選択され、内部命令コードとして処理実行部１０４に出力される。
【００５０】
また、ビット列変換部２０３は、ラッチ回路２０３ａと、ビット列変換回路２０３ｂとを有している。ラッチ回路２０３ａは、命令セット番号の最上位ビット（ＭＳＢ）の値が１である場合に、命令コードフェッチ部１０１から出力された暗号化された命令コードをビット列変換回路２０３ｂに出力し、ビット列変換回路２０３ｂは、例えば所定の鍵情報に基づいたビット列変換処理を行うことにより、上記暗号化された命令コードを復号化して出力するようになっている。
【００５１】
セレクタ２０４は、命令セット番号のＭＳＢが０である場合には、命令コードフェッチ部１０１から出力された命令コードを出力する一方、命令セット番号のＭＳＢが１である場合には、ビット列変換部２０３によって復号化された命令コードを出力するようになっている。
【００５２】
（処理実行部１０４）
処理実行部１０４は、図３に示すように、実行回路２１１と、エンディアン変換部２１２とを備えて構成されている。実行回路２１１は、デコード部１０２によってデコードされ、セレクタ１０３によって選択された内部命令コードに基づいて、命令コードの実行処理を行うようになっている。具体的には、例えば、内部バス１１３またはデータ用バス１１２を介して、コンテキスト保持部１０５の各レジスタやメモリ等へのアクセスが行われる。ここで、メモリがアクセスされる場合には、命令セット判定部１０７から出力される命令セット番号に基づき、必要に応じてエンディアンの変換が行われることにより、命令セットに応じた適切なバイトオーダーでのアクセスが行われるようになっている。また、実行回路２１１は、命令セットの切り替えが行われる際には、後に詳述するようにスレッド制御部１０６の制御により一旦アイドル（ＩＤＬＥ）状態にされるようになっている。
【００５３】
（コンテキスト保持部１０５）
コンテキスト保持部１０５は、図４に示すように、３つのレジスタセット２２１〜２２３と、セレクタ２２４とを備えている。
【００５４】
レジスタセット２２１〜２２３は、それぞれ実行されるスレッドに応じた内部情報を保持するもので、例えば汎用レジスタ２３０〜２３３（Ｒ０〜Ｒ３）、フェッチアドレスを保持するプログラムカウンタ２３４（ＰＣ）、プロセッサの状態を示す状態情報を保持するプロセッサ状態レジスタ２３５（ＰＳＲ）、ソフトウェアプロセスを識別するプロセスＩＤを保持するプロセスＩＤレジスタ２３６（ＰＩＤ）、およびシステム情報を保持するシステムレジスタ２３７（Ｓｙｓ）が設けられている。
【００５５】
セレクタ２２４は、スレッド制御部１０６から出力されるスレッド番号に応じて、レジスタセット２２１〜２２３の何れかに含まれているレジスタからの出力を選択するようになっている。なお、何れのレジスタセット２２１〜２２３に対して書き込みがなされるかは、やはり上記スレッド番号に応じて、図示しない書き込み信号がアサートされることにより制御される。
【００５６】
（スレッド制御部１０６）
スレッド制御部１０６は、図５に示すように、割り当てサイクル数格納部２４１と、セレクタ２４２と、Ｄフリップフロップ２４３と、加算器２４４と、ゼロ検出回路２４５と、スレッド判定部２４６と、パイプライン状態監視部２４７と、ラッチ回路２４８とを備えている。
【００５７】
割り当てサイクル数格納部２４１には、サイクルカウントレジスタ２４１ａ〜２４１ｃと、セレクタ２４１ｄとが設けられている。各サイクルカウントレジスタ２４１ａ〜２４１ｃには、３つのスレッドにそれぞれ割り当てられた割り当てサイクル数、および各スレッドが有効かどうかを示すスレッド有効情報が格納される。セレクタ２４１ｄは、スレッドが切り替わる際に、次に実行されるスレッドに割り当てられた割り当てサイクル数を選択するようになっている。
【００５８】
Ｄフリップフロップ２４３は、上記割り当てサイクル数を初期値として、加算器２４４によりデクリメントされるサイクルカウント値をクロック信号に同期して保持するようになっている。
【００５９】
ゼロ検出回路２４５は、上記サイクルカウント値が０になったことを検出したときに、ゼロ検出信号を加算器２４４、およびスレッド判定部２４６に出力するようになっている。
【００６０】
スレッド判定部２４６は、上記ゼロ検出信号が入力されたときに、実行中だったスレッドの他に有効なスレッドがあるかどうかを判定し、有効なスレッドがあれば、パイプライン状態監視部２４７に、処理実行部１０４にＩＤＬＥ要求を出力するよう指示した後、パイプライン状態監視部２４７から処理実行部１０４がＩＤＬＥ状態になったことを通知されるのを待つようになっている。すなわち、処理実行部１０４ではパイプライン処理が行われているため、パイプラインが空になってＩＤＬＥ状態になったことが通知されてから、スレッドの切り替えが行われるようになっている。ＩＤＬＥ状態になったことが通知されると、スレッド判定部２４６がコンテキスト保持部１０５に次に実行されるスレッドのスレッド番号を出力することにより、スレッドの切り替えが行われる。上記スレッド番号は、また、割り当てサイクル数格納部２４１のセレクタ２４１ｄにも出力されるとともに、セレクタ２４２に割り当てサイクル数セット信号が出力されて、Ｄフリップフロップ２４３に次のスレッドの割り当てサイクル数がセットされる。ここで、ＣＰＵコア１００のリセット時に最初に実行されるスレッドは、外部から与えられる初期スレッド番号がリセット信号に応じてラッチ回路２４８に保持されることにより指定されるようになっている。上記スレッド番号、および初期スレッド番号は、また、アクセス監視部１０８にも出力されて、実行されるスレッドに応じたアクセス制御が行われるようになっているが、この点については後述する。
【００６１】
（命令セット判定部１０７）
命令セット判定部１０７は、コンテキスト保持部１０５から出力されるプロセスＩＤに基づいて、実行されるプロセスに応じた命令セット番号を出力する一種の連想メモリとしての機能を有するものである。この命令セット判定部１０７は、図６に示すように、プロセスＩＤを命令セット番号に変換するための変換テーブルを構成するエントリ２５１〜２５４と、セレクタ２５５と、初期命令セット番号レジスタ２５６と、ＮＯＲ回路２５７と、セレクタ２５８と、プロセスＩＤマスクレジスタ２５９と、ＡＮＤ回路２６０とを備えている。
【００６２】
上記エントリ２５１〜２５４には、それぞれ、比較プロセスＩＤレジスタ２６１と、命令セット番号レジスタ２６２と、比較器２６３とが設けられている。各エントリ２５１〜２５４には、コンテキスト保持部１０５から出力されたプロセスＩＤ（正確には、さらにプロセスＩＤマスクレジスタ２５９とＡＮＤ回路２６０とによって取り出された一部のビットの値）が入力され、比較器２６３によって、比較プロセスＩＤレジスタ２６１に保持された値と比較されるようになっている。そして一致した場合には、対応する命令セット番号レジスタ２６２に保持されている命令セット番号が、セレクタ２５５・２５８を介して、デコード部１０２と、セレクタ１０３と、処理実行部１０４とに出力される。
【００６３】
なお、コンテキスト保持部１０５から出力されたプロセスＩＤが何れのエントリ２５１〜２５４でもヒットしなかった場合には、セレクタ２５８により、初期命令セット番号レジスタ２５６に保持された命令セット番号が選択されて出力されるようになっている。
【００６４】
（アクセス監視部１０８）
アクセス監視部１０８は、前記のように、初期状態で実行されるスレッドに対してだけ、処理実行部１０４にＣＰＵローカルバス１１４を介したコンテキスト保持部１０５等へのアクセスを許可するもので、図７に示すように、スレッド判定回路２７１と、アドレス空間判定回路２７２とが設けられて構成されている。
【００６５】
スレッド判定回路２７１は、スレッド制御部１０６のスレッド判定部２４６から出力されるスレッド番号と、ラッチ回路２４８に保持されている初期スレッド番号とを比較し、実行中のスレッドが初期スレッドあるかどうかを判定するようになっている。アドレス空間判定回路２７２は、スレッド判定回路２７１の判定結果とアドレスとに基づいて、初期状態で実行されるスレッドに対して、ＣＰＵローカルバス１１４上のアドレス空間に存在する、コンテキスト保持部１０５等の各レジスタなどへのアクセスを許可する一方、他のスレッドに対してはアクセスを拒絶するようになっている。より具体的には、アドレスのうちの一部のビットの値（例えば上位４ビットが０ｘＤかどうか）に基づいて、ＣＰＵローカルバスに接続されたレジスタ等へのアクセスかどうかを判定し、上記レジスタ等へのアクセスで、かつ、スレッド判定回路２７１によって初期スレッドであると判定された場合にだけ、データ用バス１１２とＣＰＵローカルバス１１４とを接続するするようになっている。
【００６６】
（アドレス空間のマッピング）
上記コンテキスト保持部１０５における各レジスタや、スレッド制御部１０６におけるサイクルカウントレジスタ２４１ａ〜２４１ｃ等は、処理実行部１０４にＣＰＵローカルバス１１４、およびデータ用バス１１２を介して接続され、図８に示すように、アドレス空間における例えばアドレス（０ｘＤ０００＿００００〜０ｘＤＦＦＦ＿ＦＦＦＦ）にマッピングされて、処理実行部１０４による転送命令の実行によりアクセスできるようになっている。（上記０ｘは１６進表記であることを示す。）なお、処理実行部１０４によるレジスタセット２２１〜２２３へのアクセスは、レジスタ転送命令によって行われる場合には、内部バス１１３を介して、実行中のスレッドのスレッド番号に応じて選択されたレジスタセットに対してだけ行われるが、上記アドレス空間に対する転送命令によるアクセスは、データ用バス１１２、およびＣＰＵローカルバス１１４を介して行われ、実行中のスレッドに係わらず、何れのレジスタセット２２１〜２２３に対してもアクセスすることができる（ただし、本実施形態ではそのようなアクセスは上記のようにアクセス監視部１０８によってスレッド１に対してだけ許可される。）。また、同図の例では、各スレッドｎ（ｎ＝１〜３）で実行されるプログラムは、それぞれ、メモリにおける０ｘ００００＿００００＋１０００×（ｎ−１）を先頭アドレスとする領域に格納され、例えば上記先頭アドレスが各レジスタセット２２１〜２２３のプログラムカウンタ２３４に初期値として設定されることにより、リセット後のスレッド切り替え時にこれらの先頭アドレスから各プロセスの実行が開始される。
【００６７】
（ＣＰＵコア１００の動作：リセット後に実行されるスレッド）
ＣＰＵコア１００にリセット信号が入力されると、ＣＰＵコア１００内の各部は、例えば、ハードウェアによって図９に示すような初期状態に設定される。また、ラッチ回路２４８には初期スレッド番号“１”が入力される。ここで、図９の例では、ＰＩＤマスク情報の（０ｘＦＦＦＦ）はプロセスＩＤの全ビットが比較されることを示し、比較プロセスＩＤの（０ｘＦＦＦＦ）は初期状態では常にプロセスＩＤと一致しないようにすることを示している。これによって、後述するようにリセット後の命令セット判定部１０７からは、初期命令セット番号レジスタ２５６に保持されている命令セット番号（０ｘ０００１）が出力される。
【００６８】
そこで、ラッチ回路２４８に入力されるリセット信号が解除されると、ラッチ回路２４８は入力された初期スレッド番号“１”を保持し、スレッド判定部２４６は、リセット解除時に実行されるスレッドとして、上記初期スレッド番号“１”を割り当てサイクル数格納部２４１のセレクタ２４１ｄに出力するとともに、割り当てサイクルセット信号をセレクタ２４２に出力する。そこで、サイクルカウントレジスタ２４１ａに保持されたサイクル数（０ｘ１０００）がセレクタ２４１ｄおよびセレクタ２４２を介してＤフリップフロップ２４３に入力され、クロック信号に同期して保持される。このＤフリップフロップ２４３に保持された値は、クロック信号が入力されるごとに加算器２４４によってデクリメント（−１が加算）されて、その値が０になると、後述するようにスレッドの切り替えが行われる。
【００６９】
上記スレッド判定部２４６から出力されるスレッド番号“１”は、また、コンテキスト保持部１０５、およびアクセス監視部１０８にもに入力される。そこで、コンテキスト保持部１０５では、レジスタセット２２１〜２２３のうち、スレッド１に対応するレジスタセット２２１が使用される状態になる。より詳しくは、上記スレッド番号に基づいて、書き込みに関してはレジスタセット２２１に対する図示しない書き込み信号が有効になり、読み出しに関してはセレクタ２２４によりレジスタセット２２１からの出力が選択されるようになる。
【００７０】
上記レジスタセット２２１のプログラムカウンタ２３４に保持されているフェッチアドレスは、命令コードフェッチ部１０１に入力され、命令コードがメモリからフェッチされてデコード部１０２に出力される。
【００７１】
また、レジスタセット２２１のプロセスＩＤレジスタ２３６に保持されているプロセスＩＤ（０ｘ１０００）は、命令セット判定部１０７に入力され、各エントリ２５１〜２５４の比較プロセスＩＤレジスタ２６１に保持されている比較プロセスＩＤ（何れも０ｘＦＦＦＦ）と比較され、初期状態（図９）では何れも一致しないので、初期命令セット番号レジスタ２５６に保持された命令セット番号（０ｘ０００１）がセレクタ２５８に選択されて、デコード部１０２、セレクタ１０３、および処理実行部１０４に出力される。
【００７２】
デコード部１０２では、上記命令セット番号のＭＳＢが０（命令コードは暗号化されていないことを示す）なので、セレクタ２０４は命令コードフェッチ部１０１によってフェッチされた命令コードを選択する。また、上記命令セット番号の下位２ビットの値は１なので、固定デコーダ２０２のラッチ回路２０２ａが、セレクタ２０４から出力された命令コードを初期スレッド用デコード回路２０２ｂに出力する。そこで、初期スレッド用デコード回路２０２ｂによりスレッド１の命令セットに応じたデコードが行われ、出力された内部コードがセレクタ１０３により選択されて処理実行部１０４に入力され、実行される。上記のような命令コードのフェッチ、デコード、および実行の動作は、例えば図１０に示すように４段のパイプライン処理によって行われるが、このパイプライン処理の動作自体は、基本的に一般的なプロセッサと同様である。
【００７３】
ここで、上記スレッド１の動作においては、スレッド制御部１０６におけるスレッド判定部２４６から出力されるスレッド番号と、ラッチ回路２４８から出力される初期スレッド番号とは一致するので、アクセス監視部１０８によって、データ用バス１１２からＣＰＵローカルバス１１４を介した各レジスタ等へのアクセスが許可される。そこで、例えば図１１に示すような設定が行われることにより、後述するようにスレッド２のプロセスを実行させることができるようになる。具体的には、例えば、次のようにして、メモリに格納されているデータを転送命令で転送することによって、このような設定をすることができる。まず、メモリから汎用レジスタ２３０〜２３３への転送命令によって、メモリに格納されているデータがデータ用バス１１２を介して読み込まれ、内部バス１１３を介して汎用レジスタ２３０〜２３３に格納される。次に、汎用レジスタ２３０〜２３３からメモリへの転送命令によって（デスティネーションアドレスはメモリと同じアドレス空間だが、実際にはマッピングされたスレッド２用のプログラムカウンタ２３４等へのアクセス）、汎用レジスタ２３０〜２３３のデータが、データ用バス１１２、アクセス監視部１０８、およびＣＰＵローカルバス１１４を介して、プログラムカウンタ２３４等に書き込まれる。なお、本実施形態のように不揮発性のフラッシュメモリ２０１ｂが用いられる場合には、リセットごとに論理構成情報を記憶させなくてもよいが、揮発性のメモリを用いて、リセットごとに論理構成情報を記憶させるようにしてもよい。
【００７４】
また、上記転送命令が実行される際には、処理実行部１０４では、エンディアン変換部２１２により、命令セット番号に基づき必要に応じてバイトオーダーの変換が行われる。これにより、命令セットに応じて、命令コードのデコードだけでなく、データの読み書きも適切に行われる。なお、上記バイトオーダーの変換は、命令セット番号に基づくだけでなく、ソースアドレスやデスティネーションアドレスにも基づいて行われるようにしてもよい。例えば、外部のメモリに対するアクセスについてはバイトオーダーの変換を行う一方、ＣＰＵローカルバス１１４を介したアクセスについては、変換を行わないようにすることができる。
【００７５】
（ＣＰＵコア１００の動作：スレッドの切り替え）
Ｄフリップフロップ２４３のカウント値が、例えば上記のようにスレッド１に割り当てられたサイクル数（０ｘ１０００）になるとスレッドの切り替え動作が行われる。
【００７６】
より詳しくは、スレッド制御部１０６でＤフリップフロップ２４３の保持する値が順次デクリメントされて０になると、ゼロ検出回路２４５は、ゼロ検出信号を加算器２４４とスレッド判定部２４６とに出力する。そこで、加算器２４４は加算動作を停止する。また、スレッド判定部２４６は、サイクルカウントレジスタ２４１ａ〜２４１ｃに保持されているスレッド有効情報に基づいて、実行中のスレッド以外に有効なスレッドがあるかどうかを判定する。
【００７７】
ここで、例えばリセット後のようにスレッド１だけが有効な場合（スレッド１の処理によって図１１のような設定が行われていない限り）は、スレッド判定部２４６は、再度スレッド番号“１”を割り当てサイクル数格納部２４１のセレクタ２４１ｄに出力するとともに、セレクタ２４２に割り当てサイクル数セット信号を出力する。そこで、Ｄフリップフロップ２４３にスレッド１への割り当てサイクル数が再セットされる。また、上記スレッド番号“１”がコンテキスト保持部１０５およびアクセス監視部１０８にも出力され、レジスタセット２２１が引き続き使用されて、スレッド１のプロセスの実行が継続される。
【００７８】
一方、スレッド制御部１０６でＤフリップフロップ２４３のカウント値が０になったときに、スレッド判定部２４６が、サイクルカウントレジスタ２４１ａ〜２４１ｃに保持されているスレッド有効情報によって実行中のスレッド以外に有効なスレッドがあると判定した場合（すなわち、図１１に示すようにスレッド２が有効となる設定が行われていた場合）には、次のようにしてスレッド２のプロセスの実行が開始される。
【００７９】
スレッド判定部２４６は、まず、パイプライン状態監視部２４７にＩＤＬＥ要求指示を出力し、これに応じて、パイプライン状態監視部２４７は、処理実行部１０４にＩＤＬＥ要求を出力する。そこで、処理実行部１０４の実行回路２１１は、命令コードフェッチ部１０１、およびデコード部１０２に図示しない制御信号を出力して、図１２に示すように命令コードのフェッチ、およびデコードを順次停止させ、既にフェッチされた命令コードのデコード、実行、および書き込みサイクルが終了した時点で、スレッド制御部１０６にＩＤＬＥ状態信号を出力する。
【００８０】
パイプライン状態監視部２４７は、上記ＩＤＬＥ状態信号を受け取ると、ＩＤＬＥ要求の出力を停止するとともに、スレッド判定部２４６にＩＤＬＥ状態通知（スレッドの切り替えが可能であることを示す通知）を出力し、これに応じて、スレッド判定部２４６は、スレッド番号“２”を割り当てサイクル数格納部２４１のセレクタ２４１ｄに出力するとともに、セレクタ２４２に割り当てサイクル数セット信号を出力する。そこで、サイクルカウントレジスタ２４１ｂに保持されているスレッド２に割り当てられたサイクル数（０ｘ１０００）がＤフリップフロップ２４３にセットされる。
【００８１】
また、上記スレッド番号“２”はコンテキスト保持部１０５にも出力され、使用されるレジスタセットがスレッド１用のレジスタセット２２１からスレッド２用のレジスタセット２２２に切り替えられる。このレジスタセット２２２への切り替えが行われると、命令コードフェッチ部１０１にはプログラムカウンタ２３４に保持されたアドレス（０ｘ００００＿１０００）が出力され、このアドレスから命令コードのフェッチが開始される。また、プロセスＩＤレジスタ２３６に保持されたプロセスＩＤ（０ｘ２０００）が命令セット判定部１０７に出力され、エントリ２５１の比較プロセスＩＤレジスタ２６１に保持されている比較プロセスＩＤ（０ｘ２０００）と一致するので、命令セット番号レジスタ２６２に保持された命令セット番号（０ｘ８００２）がセレクタ２５５およびセレクタ２５８に選択されて、デコード部１０２、セレクタ１０３、および処理実行部１０４に出力される。
【００８２】
デコード部１０２では、上記命令セット番号のＭＳＢが１なので、セレクタ２０４はビット列変換部２０３によって復号化された命令コードを選択する。すなわち、外部のメモリには暗号化されたプログラムを格納しておくことができるので、命令コードのハッキングに対しての耐性を向上させることができる。セレクタ２０４から出力された復号化された命令コードは、上記命令セット番号の下位２ビットの値が２なので、可変デコーダ２０１のラッチ回路２０１ａを介してＰＬＡ２０１ｃに入力され、スレッド２で実行されるプログラムの命令セットに応じてデコードされた内部命令コードが、セレクタ１０３を介して処理実行部１０４に入力され、実行される。
【００８３】
さらに、スレッド制御部１０６のスレッド判定部２４６から出力される上記スレッド番号“２”は、リセット時にラッチ回路２４８に保持された初期スレッド番号“１”とともにアクセス監視部１０８に出力され、処理実行部１０４によるＣＰＵローカルバス１１４を介したアクセスが禁止される。すなわち、アクセス監視部１０８のスレッド判定回路２７１が、上記両者が一致しないと判定することにより、アドレス空間判定回路２７２がデータ用バス１１２とＣＰＵローカルバス１１４とを遮断し、各レジスタ等へのＣＰＵローカルバス１１４を介したアクセスができないようになる。
【００８４】
以下、Ｄフリップフロップ２４３のカウント値が０になるごとに、スレッド１、２が有効であれば、同様にしてスレッド１、２のプロセスの実行が、それぞれの命令セットに応じたデコードがなされるとともに、順に繰り返される。また、スレッド３に対応して各レジスタ等に図１１と同じような設定が行われた場合には、同様にして、スレッド１〜３のプロセスの実行が順に繰り返される。すなわち、複数種類の命令セットの命令コードから成るプログラムを実行させることができるとともに、各プログラムが実行されるスレッドの切り替えが、スレッド制御部１０６の割り当てサイクル数格納部２４１によって示されるサイクルごとに定期的に行われるため、各処理のリアルタイム性を保証することが容易にできる。
【００８５】
（その他の事項）
なお、上記の例では、命令セット判定部１０７を設け、コンテキスト保持部１０５のプロセスＩＤレジスタ２３６に保持されたプロセスＩＤ（正確には上記の例ではこれがプロセスＩＤマスクレジスタ２５９の値によってマスクされた値）に基づいて得られた命令セット番号により、デコード部１０２が命令セットに応じた命令コードのデコードをする例を示したが、例えば図１３、図１４に示すように、コンテキスト保持部１０５に代えて、命令セット番号レジスタ３３６を有するレジスタセット３３１〜３３３を備えたコンテキスト保持部３０５を設け、命令セット番号レジスタ３３６に保持された命令セット番号が直接セレクタ１０３等に入力されるようにしてもよい。
【００８６】
また、ＰＬＡ２０１ｃを備えた可変デコーダ２０１用い、論理構成情報によって命令コードのデコード内容を設定し得るようにすることにより、小さな回路規模で、ＣＰＵコア１００ごとに実行可能な命令セットを異ならせるようにしたり、論理構成情報を変更しながら種々の（２つ以上の）命令セットのプログラムを実行させたりすることができるが、これに限らず、固定デコーダ２０２と同様のデコーダを複数設けるようにしてもよいし、可変デコーダ２０１を複数設けるようにしてもよい。さらに、フラッシュメモリ２０１ｂを複数設け、論理構成情報を切り替えることにより、ＰＬＡ２０１ｃに複数種類の命令セットの命令コードをデコードさせられるようにしてもよい。
【００８７】
また、上記のように可変デコーダ２０１等の入力段にラッチ回路２０１ａ等を設けると、使用されない回路への入力信号が変化しないので、回路内の各ノードでの不要なトグルによる電力消費が生じないようにできるが、必ずしもラッチ回路２０１ａ等を設けなくても、これらの回路の出力がセレクタ１０３・２０４によって選択されることにより適切な動作が行われるようにすることはできる。また、ラッチ回路２０１ａ等に代えてゲート回路を用いたり、使用されない回路への電力の供給が停止されるようにするなどしてもよい。
【００８８】
また、エンディアン変換部２１２を設け、命令セットやデータ転送の対象などに応じてバイトオーダーを変更することにより、適宜適切なバイトオーダーでのアクセスが行われるようにすることができるが、複数の命令セット間でバイトオーダーが等しい場合などには、必ずしもエンディアン変換部２１２を設けなくてもよい。
【００８９】
また、アクセス監視部１０８を設けて、各スレッドの命令セットや処理サイクルに関する設定が、初期状態で使用されるスレッドにだけ許可されるようにすることによって、その他のスレッドでの処理の暴走によりこれらの設定が不用意に行われてシステムがダウンするような危険性を低下させ、システムの信頼性を向上させることができるが、必ずしもこのようなアクセス監視部１０８を設けなくても、やはり命令セットが異なる複数のプログラムを、リアルタイム性を保証しつつ実行させることはできる。
【００９０】
また、リセット時にＣＰＵコア１００の外部から初期スレッド番号が与えられるようにすることにより、例えばＢＩＯＳ（Basic Input Output System）プログラムの実行など、リセット後に最初に処理されるスレッドを容易に変更することができるが（ただし、処理させる可能性のあるスレッドについてのコンテキスト保持部１０５などの設定は必要。）、これに限らず、常にあらかじめ設定されたスレッドの処理が行われるようにしてもよい。一方、初期命令セット番号レジスタ２５６には、あらかじめ初期命令セット番号が設定される例を示したが、初期スレッド番号と同様に外部から与えられるようにしてもよい。この場合、初期スレッド番号と初期命令セット番号とを対応させて変更することにより、リセット後に、命令セットが異なる場合も含めて複数のプログラムを選択的に実行させることができる。また、初期命令セット番号レジスタ２５６を設けるのに代えて、エントリ２５１〜２５４に初期スレッド番号に対応した比較プロセスＩＤや命令セット番号が（コンテキスト保持部１０５などの設定とともに）初期設定されるようにすれば、初期スレッド番号を変更するだけで、やはり、リセット後に、命令セットが異なる場合も含めて複数のプログラムを選択的に実行させることができる。これらによって、処理内容や命令セットの異なるブート処理を切り替えて行わせる得るようにすることもできる。
【００９１】
また、上記各初期設定値や、外部から与えられるとして説明した初期スレッド番号は、半導体製造工程でのマスクパターンなどで所定の信号線が電源やグラウンドに接続されるようにして固定的に設定されるようにしてもよいし、パッケージに封止する際のボンディングによって製造時に変更し得るようにしたり、半導体メモリにおける冗長セルによる不良セル救済などに用いられるようなフューズによって製造後に変更し得るようにしてもよい。
【００９２】
また、ビット列変換部２０３のような復号化回路を設けることによって、一般的な（公知の）命令セットのプログラムであっても、命令コードをバイナリデータとしてのビット操作等により暗号化処理してメモリに記憶させ、実行時に復号化させることができるので、メモリに記憶された命令コードのハッキングなどに対しての耐性を向上させることができるが、このようなビット列変換部２０３も、必ずしも設けなくてもよい。
【産業上の利用可能性】
【００９３】
本発明にかかるマルチスレッドプロセッサは、複数種類の命令セットの命令コードから成るプログラムを、処理のリアルタイム性を保証しつつ実行させることができるという効果を有し、上記のようなプログラムを並列に実行可能なマルチスレッドプロセッサ等として有用である。
【図面の簡単な説明】
【００９４】
【図１】ＣＰＵコア１００の構成を示すブロック図である。
【図２】デコード部１０２の詳細な構成を示すブロック図である。
【図３】処理実行部１０４の詳細な構成を示すブロック図である。
【図４】コンテキスト保持部１０５の詳細な構成を示すブロック図である。
【図５】スレッド制御部１０６の詳細な構成を示すブロック図である。
【図６】命令セット判定部１０７の詳細な構成を示すブロック図である。
【図７】アクセス監視部１０８の詳細な構成を示すブロック図である。
【図８】アドレス空間のマッピングを示す説明図である。
【図９】各レジスタ等の初期設定を示す説明図である。
【図１０】通常のパイプライン処理の状態を示す説明図である。
【図１１】プログラムによって設定される各レジスタ等の設定を示す説明図である。
【図１２】スレッド切り替え時のパイプライン処理の状態を示す説明図である。
【図１３】ＣＰＵコア１００の他の構成を示すブロック図である。
【図１４】ＣＰＵコア１００の他の構成におけるコンテキスト保持部３０５の詳細な構成を示すブロック図である。
【符号の説明】
【００９５】
１００      ＣＰＵコア
１０１      命令コードフェッチ部
１０２      デコード部
１０３      セレクタ
１０４      処理実行部
１０５      コンテキスト保持部
１０６      スレッド制御部
１０７      命令セット判定部
１０８      アクセス監視部
１１１      命令用バス
１１２      データ用バス
１１３      内部バス
１１４      ＣＰＵローカルバス
１２１      バス制御部
１２２      外部バス
２０１      可変デコーダ
２０１ａ    ラッチ回路
２０１ｂ    フラッシュメモリ
２０１ｃ    ＰＬＡ
２０２      固定デコーダ
２０２ａ    ラッチ回路
２０２ｂ    初期スレッド用デコード回路
２０３      ビット列変換部
２０３ａ    ラッチ回路
２０３ｂ    ビット列変換回路
２０４      セレクタ
２１１      実行回路
２１２      エンディアン変換部
２２１〜２２３    レジスタセット
２２４      セレクタ
２３０〜２３３    汎用レジスタ
２３４      プログラムカウンタ
２３５      プロセッサ状態レジスタ
２３６      プロセスＩＤレジスタ
２３７      システムレジスタ
２４１      割り当てサイクル数格納部
２４１ａ〜２４１ｃ      サイクルカウントレジスタ
２４１ｄ    セレクタ
２４２      セレクタ
２４３      Ｄフリップフロップ
２４４      加算器
２４５      ゼロ検出回路
２４６      スレッド判定部
２４７      パイプライン状態監視部
２４８      ラッチ回路
２５１〜２５４    エントリ
２５５      セレクタ
２５６      初期命令セット番号レジスタ
２５７      ＮＯＲ回路
２５８      セレクタ
２５９      プロセスＩＤマスクレジスタ
２６０      ＡＮＤ回路
２６１      比較プロセスＩＤレジスタ
２６２      命令セット番号レジスタ
２６３      比較器
２７１      スレッド判定回路
２７２      アドレス空間判定回路
３０５      コンテキスト保持部
３３１〜３３３    レジスタセット
３３６      命令セット番号レジスタ
【図１】
2005209105.tif 000003
【図２】
2005209105.tif 000004
【図３】
2005209105.tif 000005
【図４】
2005209105.tif 000006
【図５】
2005209105.tif 000007
【図６】
2005209105.tif 000008
【図７】
2005209105.tif 000009
【図８】
2005209105.tif 000010
【図９】
2005209105.tif 000011
【図１０】
2005209105.tif 000012
【図１１】
2005209105.tif 000013
【図１２】
2005209105.tif 000014
【図１３】
2005209105.tif 000015
【図１４】
2005209105.tif 000016