(57)【特許請求の範囲】
【請求項１】
命令を格納しているアドレスを保持する複数のプログラムカウンタと、
前記複数のプログラムカウンタの１つを選択する選択手段と、
データ転送命令を含む複数の命令を格納し、前記選択手段により選択されたプログラムカウンタのアドレスに格納している命令を出力する命令格納手段と、
前記命令格納手段から出力された命令に従い、デバイスとメモリとの間のデータ転送を実行する実行手段と、
前記命令格納手段により出力されたデータ転送命令によるデータ転送の対象となるデバイスからデータ転送要求が出力されていない場合に、当該データ転送要求のないデバイスのデータ転送命令に対応するプログラムカウンタの前記選択手段による選択を抑制することで前記実行手段による当該データ転送命令の実行を保留し、当該データ転送命令を保持しているプログラムカウンタ以外のプログラムカウンタが保持するアドレスにより示される命令を前記実行手段に実行させる実行制御手段とを備えることを特徴とするダイレクトメモリアクセス装置。
【請求項２】
前記実行制御手段から実行を保留させている命令のアドレスを格納している前記プログラムカウンタを示す通知と前記実行手段からのデータ転送の実行通知に応じて、どのプログラムカウンタを選択すべきかを示す選択信号を前記選択手段に出力する選択制御手段と、
前記実行手段からのデータ転送の実行通知毎に、データ転送を起動した命令に対応するプログラムカウンタの格納値を更新する更新手段とを更に備え、
前記実行制御手段は、前記命令格納手段により出力されたデータ転送命令によるデータ転送の対象となるデバイスからデータ転送要求が出力されていない場合、前記実行手段によるデータ転送を抑制する実行抑制信号を前記実行手段に出力すると共に、前記データ転送命令によるデータ転送の対象となるデバイスからデータ転送要求が出力されるまで、当該データ転送命令を保持するプログラムカウンタを非選択とする選択許可信号を前記選択制御手段に出力することを特徴とする請求項１記載のダイレクトメモリアクセス装置。
【請求項３】
前記実行手段は、複数の前記デバイス及び前記メモリとそれぞれデータ転送を行う複数の通信手段を備えることを特徴とする請求項１又は２に記載のダイレクトメモリアクセス装置。 
【請求項４】
前記命令格納手段に格納される命令は、前記メモリから前記ダイレクトメモリアクセス装置の内部リソースへのデータ転送命令、前記ダイレクトメモリアクセス装置の内部リソースから前記メモリへのデータ転送命令、特定のプログラムカウンタを有効にする命令、特定のプログラムカウンタを無効にする命令を含むことを特徴とする請求項１乃至３のいずれか１項に記載のダイレクトメモリアクセス装置。
【請求項５】
前記デバイスは、画像データを圧縮して該画像データのデータレートとは異なるデータレートを有する符号データを生成するエンコーダモジュールを含むことを特徴とする請求項１乃至４のいずれか１項に記載のダイレクトメモリアクセス装置。
【請求項６】
前記命令格納手段は、前記実行手段に実行させる命令としてデータ転送命令を複数回実行させるためのループ命令を有し、前記実行手段は、前記ループ命令に関するデータ転送命令を複数回実行することを特徴とする請求項１乃至５のいずれか１項に記載のダイレクトメモリアクセス装置。
【請求項７】
前記命令格納手段は、前記ダイレクトメモリアクセス装置から前記ダイレクトメモリアクセス装置外部のメモリへ前記実行手段によりデータを転送させるストア命令と、前記ダイレクトメモリアクセス装置外部のメモリから前記ダイレクトメモリアクセス装置へ前記実行手段によりデータを転送させるロード命令とを格納していることを特徴とする請求項１乃至６のいずれか１項に記載のダイレクトメモリアクセス装置。
【請求項８】
前記デバイスからのデータ転送に関する要求を検出する検出手段と、
前記命令格納手段の出力する命令に関するデバイスと前記検出手段の検出したデータ転送に関するデバイスとが一致しているかどうかを判定する判定手段と、を更に備え、
前記実行制御手段は、前記判定手段の判定により、前記命令格納手段の出力する命令に関するデバイスと前記検出手段の検出したデータ転送に関するデバイスとが一致すると判定される場合に、前記命令格納手段の出力する命令を前記実行手段に実行させ、前記命令格納手段の出力する命令に関するデバイスと前記検出手段の検出したデータ転送に関するデバイスとが一致しないと判定される場合に、前記実行手段による前記命令格納手段の出力する命令の実行を保留し、当該保留した命令に関するアドレスを保持するプログラムカウンタとは別のプログラムカウンタの保持するアドレスの示す命令を前記実行手段に実行させるように制御することを特徴とする請求項１乃至７のいずれか１項に記載のダイレクトメモリアクセス装置。
【請求項９】
前記実行制御手段は、前記実行手段による実行を保留しているデータ転送命令に関するデバイスからデータ転送要求を受けた場合に、当該実行を保留しているデータ転送命令を前記実行手段により実行させることを特徴とする請求項１乃至８のいずれか１項に記載のダイレクトメモリアクセス装置。
【請求項１０】
前記プログラムカウンタは、アドレスを示す値を保持するプログラムカウンタであって、前記プログラムカウンタの保持するアドレスが示す命令を前記実行手段が実行した場合に、前記プログラムカウンタは前記アドレスを示す値を１ずつ増加させることを特徴とする請求項１乃至９のいずれか１項に記載のダイレクトメモリアクセス装置。
【請求項１１】
前記選択手段は、選択するプログラムカウンタをクロックサイクル毎に順に切り替えることを特徴とする請求項１乃至１０のいずれか１項に記載のダイレクトメモリアクセス装置。
【請求項１２】
解読手段を更に備え、
前記命令格納手段は、命令を示す信号を出力し、前記解読手段は、前記命令格納手段の出力する信号に基づいて前記実行手段に実行させる命令を解読し、解読した命令を前記実行手段に実行させることを特徴とする請求項１乃至１１のいずれか１項に記載のダイレクトメモリアクセス装置。
【請求項１３】
請求項１乃至１２のいずれか１項に記載の前記ダイレクトメモリアクセス装置と、前記デバイスと、前記メモリと、前記ダイレクトメモリアクセス装置の動作を制御する制御手段とを備えることを特徴とするデータ処理装置。
【請求項１４】
命令を格納しているアドレスを保持する複数のプログラムカウンタと、前記プログラムカウンタの１つを選択する選択手段と、データ転送命令を含む複数の命令を格納する命令格納手段と、を有するダイレクトメモリアクセス装置の制御方法であって、
前記複数のプログラムカウンタの１つを選択する選択ステップと、
前記命令格納手段が、前記選択ステップで選択されたプログラムカウンタのアドレスに格納している命令を出力する命令出力ステップと、
前記命令出力ステップにおいて出力された命令に従い、デバイスとメモリとの間のデータ転送を実行する実行ステップと、
前記命令出力ステップで出力されたデータ転送命令が示すデータ転送元またはデータ転送先としてのデバイスからデータ転送要求が出力されていない場合に、当該データ転送要求のないデバイスのデータ転送命令に対応するプログラムカウンタの前記選択手段による選択を抑制することで当該データ転送命令の実行を保留し、当該データ転送命令を保持しているプログラムカウンタ以外のプログラムカウンタが保持するアドレスにより示される命令を前記実行ステップによって実行させる実行制御ステップとを備えることを特徴とするダイレクトメモリアクセス装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、様々なアクセスパターンによる複雑なデータ転送を同時並行的且つ自立的に実行可能とするダイレクトメモリアクセス装置及びその制御方法、データ処理装置に関する。
【背景技術】
【０００２】
従来、デバイス（データを生成しメモリに書き込むデバイス、またはメモリからデータを読み出しデータ処理を行うデバイス）とメモリとの間のデータ転送を、ＣＰＵに負荷をかけることなく実現するために、様々なダイレクトメモリアクセス（Direct Memory Access：以下ＤＭＡと略称する）装置が提案されている（例えば、特許文献１参照）。
【０００３】
代表的なＤＭＡ装置においては、まず、データ転送先またはデータ転送元のメモリアドレス、データ転送方向（デバイスからメモリへのデータ転送方向、メモリからデバイスへのデータ転送方向）、転送するデータのサイズ等を予めＣＰＵにより設定する。次に、データ転送動作を起動すると、設定されたメモリアドレスを順次更新しながら設定されたサイズのデータを転送し終わるまで、ＣＰＵの介在なしにデバイスとメモリとの間のデータ転送を行う。データ転送が完了すると、ＤＭＡ装置がＣＰＵに割り込みを通知することで、ＣＰＵはデータ転送完了を認識し、転送されたデータの処理を行う。更に、上記同様に、引き続き別のデータ転送に関わる設定と起動を行う。
【特許文献１】特開平５−６７０３３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来のＤＭＡ装置は、固定的なアクセスパターンによってデータ転送を行っている。そのため、様々なアクセスパターンによる複雑なデータ転送を実行するためには、アクセスパターン毎にＣＰＵ（ソフトウエア）が介在して設定を切り替える必要があり、ＣＰＵの負荷が増大するという問題点があった。その解消策として、予め様々なアクセスパターンを備えたＤＭＡ装置が提案されているが、アクセスパターンを数多く備えるほど回路規模が増大してしまうという問題点があった。
【０００５】
また、ＤＭＡ装置のハードウエアの開発後に新たなアクセスパターンに対応する必要が生じた場合には、開発したハードウエアでは固定的なアクセスパターンにしか対応できないため、ハードウエアを作り直す必要があるという問題点があった。
【０００６】
更に、複数のデバイスが同時にデータ転送要求を発行し、各データ転送要求に応じたそれぞれ異なるメモリアドレスへのデータ転送を行う必要がある場合には、デバイスの数に対応した分のＤＭＡ装置を用意する必要があるため、回路規模が増大するという問題点があった。
【０００７】
本発明の目的は、複雑なデータ転送を回路規模を増大することなく実現することを可能とし、データ転送命令を受け付けた場合にデータ転送命令に関わるデバイスからのデータ転送要求が無ければ他の命令を処理するように制御することで、効率良く処理することを可能としたダイレクトメモリアクセス装置及びその制御方法、データ処理装置を提供することにある。
【課題を解決するための手段】
【０００８】
上述の目的を達成するために、本発明のダイレクトメモリアクセス装置は、命令を格納しているアドレスを保持する複数のプログラムカウンタと、前記複数のプログラムカウンタの１つを選択する選択手段と、データ転送命令を含む複数の命令を格納し、前記選択手段により選択されたプログラムカウンタのアドレスに格納している命令を出力する命令格納手段と、前記命令格納手段から出力された命令に従い、デバイスとメモリとの間のデータ転送を実行する実行手段と、前記命令格納手段により出力されたデータ転送命令によるデータ転送の対象となるデバイスからデータ転送要求が出力されていない場合に、当該データ転送要求のないデバイスのデータ転送命令に対応するプログラムカウンタの前記選択手段による選択を抑制することで前記実行手段による当該データ転送命令の実行を保留し、当該データ転送命令を保持しているプログラムカウンタ以外のプログラムカウンタが保持するアドレスにより示される命令を前記実行手段に実行させる実行制御手段とを備えることを特徴とする。
【発明の効果】
【００１１】
本発明によれば、データ転送命令を含む複数の命令を格納する命令格納手段から出力された命令に従い、デバイスとメモリとの間のデータ転送を実行する。ここで、データ転送命令によるデータ転送の対象となるデバイスからデータ転送要求が出力されていない場合に、当該データ転送要求のないデバイスのデータ転送命令に対応するプログラムカウンタの選択を抑制することで当該データ転送命令の実行を保留し、当該データ転送命令を保持しているプログラムカウンタ以外のプログラムカウンタが保持するアドレスにより示される命令を実行手段に実行させる。これにより、複数のデータ転送をそれぞれのデータ転送要求に応じて並列的に実行することが可能となる。従って、従来のように、複雑なデータ転送を実行する際にＣＰＵが介在して設定を切り替えることが不要となり、複雑なデータ転送（ダイレクトメモリアクセス転送）を回路規模を増大することなく実現することが可能となる。その結果、複数の転送命令に関するタスクの切り替えにＣＰＵを介在させることなく柔軟に切り替えることが可能となる。また、データ転送命令を受け付けた場合に、このデータ転送命令に関わるデバイスからのデータ転送要求が無ければ、データ転送要求が無いデータ転送命令の実行を保留し、他の命令を処理するように制御することで、効率良く処理することができる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明の実施の形態を図面に基づき説明する。
【００１３】
［第１の実施の形態］
図１は、本発明の第１の実施の形態に係るデータ転送装置としてのＤＭＡ装置の電気的な構成を示すブロック図である。
【００１４】
図１において、ＤＭＡ装置は、プログラムカウンタ（ＰＣ）３−１、３−２、３−３、プログラムカウンタ選択部４、命令メモリ５、命令デコード部６、データ転送実行部７、実行抑制・選択許可信号生成部８、プログラムカウンタ選択信号生成部９、プログラムカウンタ更新部１０を備えている。
【００１５】
ＤＭＡ装置には、データ転送要求を行うＤＭＡデバイス１−１、１−２と、ＣＰＵバス１４に接続され、データを格納すると共にデータ転送元またはデータ転送先となるメモリ２と、ＣＰＵバス１４に接続され、ＤＭＡ装置の動作を制御するＣＰＵ１１とが接続されている。ＤＭＡ装置、ＤＭＡデバイス１−１、１−２、メモリ２、ＣＰＵ１１が、データ処理装置を構成している。
【００１６】
尚、図１の各ブロック間を結合する線の表記は、データ系の接続を白抜きの太い実線で図示し、制御系の接続を細い実線で図示している。ただし、全ての接続が図示されているわけではなく、本実施の形態の説明に必要な代表的な接続のみを図示している。
【００１７】
プログラムカウンタ３−１、３−２、３−３は、命令メモリ５における実行中のデータ転送命令のアドレスを示すものである。プログラムカウンタ選択部４は、プログラムカウンタ３−１、３−２、３−３のうち何れかのプログラムカウンタに格納された値を、プログラムカウンタ選択信号生成部９から出力されるプログラムカウンタ選択信号に基づいて命令メモリ５のアドレスとして選択する。命令メモリ５は、データ転送命令を格納する。命令デコード部６は、命令メモリ５のデータ出力であるデータ転送命令を解読し、データ転送方向、データ転送先、データ転送元等を判定する。
【００１８】
データ転送実行部７は、命令デコード部６により解読されたデータ転送命令に従って、２つのＤＭＡポート７−１、７−２またはバスインタフェース７−３を駆動することで、ＤＭＡデバイス１−１、１−２とメモリ２との間のデータ転送を実行する。尚、データ転送実行部７の詳細については後述する。
【００１９】
実行抑制・選択許可信号生成部８は、転送元／転送先検出部８−１、ＤＭＡ要求検出部８−２、一致判定部８−３、実行抑制信号生成部８−４、選択許可信号生成部８−５を備えている。実行抑制・選択許可信号生成部８は、データ転送元またはデータ転送先としてのＤＭＡデバイスからデータ転送要求が出力されていない場合、実行中のデータ転送命令に対応するプログラムカウンタを非選択とし、他のプログラムカウンタで示されるデータ転送命令を実行可能とする。尚、実行抑制・選択許可信号生成部８の詳細については後述する。
【００２０】
転送元／転送先検出部８−１は、命令デコード部６の出力に基づき、データ転送元またはデータ転送先を検出する。ＤＭＡ要求検出部８−２は、ＤＭＡデバイス１−１、１−２からのデータ転送要求を検出する。一致判定部８−３は、転送元／転送先検出部８−１の検出結果とＤＭＡ要求検出部８−２の検出結果が一致するか否か、即ち、データ転送元またはデータ転送先がＤＭＡデバイスであり且つ当該ＤＭＡデバイスがデータ転送要求を出力しているか否かを判定する。
【００２１】
実行抑制信号生成部８−４は、一致判定部８−３の判定結果が不一致（転送元／転送先検出部８−１の検出結果とＤＭＡ要求検出部８−２の検出結果が不一致）の場合、データ転送実行部７のデータ転送を抑制する実行抑制信号を出力する。選択許可信号生成部８−５は、一致判定部８−３の判定結果が不一致の場合、当該ＤＭＡデバイスからデータ転送要求が出力されるまで現在実行中のデータ転送命令に対応するプログラムカウンタを非選択とするためのプログラムカウンタ選択許可信号を生成する。
【００２２】
プログラムカウンタ選択信号生成部９は、選択許可信号生成部８−５から出力されるプログラムカウンタ選択許可信号に基づき、データ転送実行毎にプログラムカウンタ選択部４に送出するプログラムカウンタ選択信号を生成する。プログラムカウンタ更新部１０は、プログラムカウンタ選択信号生成部９から出力されるプログラムカウンタ選択信号に基づき、データ転送実行毎に選択されたプログラムカウンタの値を１ずつ更新する。ＣＰＵ１１は、データポート（不図示）を経由して命令メモリ５にデータ転送命令を格納し、ＤＭＡ装置の動作を制御する。
【００２３】
次に、図１に示したプログラムカウンタ３−１、３−２、３−３、プログラムカウンタ選択部４、命令メモリ５、データ転送実行部７、実行抑制・選択許可信号生成部８、プログラムカウンタ更新部１０、ＣＰＵ１１について更に詳細に説明する。
【００２４】
図１の各ブロックのうち、まず、ＣＰＵ１１のリセットが解除される。ＣＰＵ１１は、内蔵しているＲＯＭから命令をフェッチし実行することにより、不図示のリセット信号を制御することで順次各ブロックのリセットを解除することが可能となっている。ＣＰＵ１１以外の全てのブロックのリセット状態において、まず、ＣＰＵ１１は、ＤＭＡ装置が実行するデータ転送命令を命令メモリ５に書き込む。
【００２５】
図２は、ＤＭＡ装置において使用する命令メモリ５の実際の構成及び入出力ポートを示すブロック図である。
【００２６】
図２において、命令メモリ５は、２ポート(1Read/1Write)のSRAMであり、データ幅は３２ビット、ワード長は６４である。命令メモリ５の読み出しアドレス(READ ADDRESS)は６ビットであり、読み出し許可信号(READ ENABLE)をアサートすると、３２ビットの読み出しデータがREAD DATAポートから読み出される。本実施の形態では、読み出しアドレスはプログラムカウンタ選択部４から供給され、読み出しデータは命令デコード部６に供給される。
【００２７】
命令メモリ５の書き込みアドレス(WRITE ADDRESS)は６ビットであり、書き込み許可信号(WRITE ENABLE)をアサートすると、３２ビットの書き込みデータ（WRITE DATA）信号上にドライブされているデータ転送命令データが書き込みアドレスに書き込まれる。本実施の形態では、書き込みアドレス、書き込みデータともにＣＰＵ１１から供給される。
【００２８】
命令メモリ５に対するデータ転送命令データの書き込みが終了すると、ＣＰＵ１１が各ブロックのリセットを解除することによりＤＭＡ装置が動作を開始する。
【００２９】
図３は、プログラムカウンタ３−１、３−２、３−３、プログラムカウンタ選択部４、プログラムカウンタ更新部１０の詳細構成を示すブロック図である。
【００３０】
図３において、プログラムカウンタ３−１、３−２、３−３は、各々６ビットのフリップフロップから構成されており、リセット時の初期値は各々“000000”、“010000”、“100000”となっている。即ち、プログラムカウンタ３−１は、0x0番地からの命令を実行し、プログラムカウンタ３−２は、0x10番地からの命令を実行し、プログラムカウンタ３−３は、0x20番地からの命令を実行する。プログラムカウンタ更新部１０は、セレクタ１０−１、セレクタ１０−２、＋１加算器１０−３を備えている。
【００３１】
プログラムカウンタ３−１には、セレクタ１０−１の出力信号が入力される。セレクタ１０−１は、プログラムカウンタの現在の値、現在の値に１を加算した値、Load命令によりローディングされる値（store_d）、Loop命令によりループバックする際のプログラムカウンタの戻り値（lp_back_pc）、Jump命令によるジャンプ先アドレス(jump_pc)、のうちの１つを選択して出力する。
【００３２】
セレクタ１０−２は、プログラムカウンタの出力自身（現在の値）、プログラムカウンタの値に１を加えた値(＋１加算器１０−３の出力)、のうちの何れかをプログラムカウンタ選択信号pc_selに基づいて選択する。即ち、セレクタ１０−２は、当該クロックサイクルにおいて、当該プログラムカウンタが選択されている場合は当該プログラムカウンタの値に１を加えた値を選択し、当該プログラムカウンタが非選択の場合は現在の値を選択する。
【００３３】
プログラムカウンタ３−２、３−３においても、プログラムカウンタ３−１と同様の構成を備えており、プログラムカウンタ更新部１０によりプログラムカウンタ値の更新が行われる。
【００３４】
プログラムカウンタ選択部４は、３ビットのプログラムカウンタ選択信号pc_sel[2:0]に応じてプログラムカウンタ３−１ (PC(0))、３−２(PC(1))、３−３(PC(2))の各出力のうちの１つを選択し、命令メモリ５の読み出しアドレスとして出力する。pc_sel[2:0]はone-hotの信号（３ビット中１ビットが“1”となる信号）であり、“001”のときプログラムカウンタ３−１を選択し、“010”のときプログラムカウンタ３−２を選択し、“100”のときプログラムカウンタ３−３を選択する。即ち、pc_sel[n]=“1”のときPC(n) を選択する（ただしn=0,1,2）。
【００３５】
図４は、プログラムカウンタ選択信号生成部９の詳細構成を示すブロック図である。
【００３６】
図４において、プログラムカウンタ選択信号生成部９のフリップフロップ９−１、９−２、９−３は、各々、クロック信号とリセット信号に接続されており、出力がプログラムカウンタ選択信号となる。フリップフロップ９−１は、リセット信号により“1”がセットされ、D入力にはセレクタ９−４の出力が接続され、Q出力がpc_sel[0]となる。フリップフロップ９−２は、リセット信号により“0”がセットされ、D入力にはセレクタ９−５の出力が接続され、Q出力がpc_sel[1]となる。フリップフロップ９−３は、リセット信号により“0”がセットされ、D入力にはセレクタ９−６の出力が接続され、Q出力がpc_sel[2]となる。
【００３７】
プログラムカウンタ選択信号生成部９のデコーダ９−７は、実行抑制・選択許可信号生成部８の選択許可信号生成部８−５が出力するプログラムカウンタ選択許可信号と、データ転送命令実行のストール指示を示すストール信号をデコードする。デコーダ９−７は、デコードの結果、どのプログラムカウンタを選択すべきかを示すプログラムカウンタ選択信号（sel_cnt[0]、sel_cnt[1]、sel_cnt[2]）を生成し、セレクタ９−４、９−５、９−６にそれぞれ出力する。
【００３８】
図５は、入力であるストールとプログラムカウンタ選択許可信号に対する出力であるプログラムカウンタ選択信号の関係を示す図である。
【００３９】
図５において、図示の表は、入力であるストールと、プログラムカウンタ選択許可信号pc_en[2:0]に対する出力であるプログラムカウンタ選択信号sel_cnt[2:0]の関係を示している。例えばストールが“1”の場合、sel_cnt[2]、sel_cnt[1]、sel_cnt[0]は全て２となり、プログラムカウンタ選択信号生成部９の全てのフリップフロップ９−１、９−２、９−３は現在の値を保持する。即ち、pc_selは更新されない。
【００４０】
ストールが“0”でpc_en=“111”の場合は、sel_cnt[2]、sel_cnt[1]、sel_cnt[0]は全て０となり、pc_selはシフトレジスタ動作する。即ち、“001”→“010”→“100”→“001”と遷移し、プログラムカウンタはPC(0)→PC(1)→PC(2)→PC(0)の順に選択される。ストールが“0”でpc_en=“011”の場合は、PC(2)が選択不許可となるように、sel_cnt=“301”となり、pc_selは“001”→“010”→“001”→“010”→“001”と遷移し、プログラムカウンタはPC(0)→PC(1)→PC(0)→PC(1)→PC(0)の順に選択される。
【００４１】
プログラムカウンタ選択部４によって選択されたプログラムカウンタに対応するデータ転送命令は、命令メモリ５から読み出され、命令デコード部６に入力される。データ転送命令は３２ビットから構成されており、命令デコード部６により図６に示すように解読される。
【００４２】
図６は、命令デコード部６により解読された命令を示す図である。
【００４３】
図６において、下記に示すInstの［ ］内の数字は図６の上段２列に記載した数字に対応している。３２ビットのデータ転送命令をInst[31:0]と表記すると、命令デコード部６は、Inst[31:30]=“00”のとき特殊命令(Special Instruction)、Inst[31:30]=“01”のときロード命令(Load Instruction) 、Inst[31:30]= “10”のときストア命令(Store Instruction)、Inst[31:30]=“11”のとき無効命令とそれぞれ解読する。
【００４４】
ロード命令とは、メモリ２からＤＭＡ装置の内部リソース（ＤＭＡポートを含む）へのデータ転送命令である。ストア命令とは、内部リソースからメモリ２へのデータ転送命令である。特殊命令には、NOP命令（なにもしない命令）、ループ命令（Loop）、ジャンプ命令（Jump）等の、一般的なプロセッサに備わっている命令が含まれる。
【００４５】
Inst[29:27]は、データサイズを示すフィールドであり、詳細は図７に示されている。例えばデータサイズが“000”の場合は１バイトのデータ転送を示し、データサイズが“100”の場合は５バイトのデータ転送であることを示す。
【００４６】
Inst[26:23]は、データ転送元リソースのインデックスを示すフィールド、Inst[22:19]は、データ転送先リソースのインデックスを示すフィールドである。これらは、Inst[18:16]で示されるリソースの識別子（ロード命令の場合はデータ転送先を示し、ストア命令の場合はデータ転送元を示す）と共に、どの内部リソースの何番目のリソースをデータ転送対象にするかを示す。
【００４７】
内部リソース識別子の詳細は図８に示されている。“000”の場合、PC即ちプログラムカウンタを示す。“001”の場合、AR即ちアドレスレジスタを示す。“010”の場合、GPR即ち汎用レジスタを示す。“011”の場合、IN/OUT即ちＤＭＡポートを示す（IN/OUTはロードかストアかにより識別される）。“100”の場合、LP即ちループレジスタを示す。“101”の場合、OFST即ちオフセットレジスタを示す。尚、アドレスレジスタAR、汎用レジスタGPR、ループレジスタLP、オフセットレジスタOFSTの詳細については後述する。
【００４８】
ロード命令の場合のデータ転送元とストア命令の場合のデータ転送先を示す内部リソース識別子は、アドレスレジスタに固定されており、インデックスのみをそれぞれのインデックスフィールドにより指定する。
【００４９】
Inst[15:13]は、データ転送元またはデータ転送先の有効バイトレーンを示すフィールドであり、データサイズフィールドと共に何バイトをどのバイトレーンにまたはどのバイトレーンから転送するかを示す。
【００５０】
図９及び図１０は、データサイズフィールドとバイトレーンフィールドと有効バイトレーンの関係を示す図である。
【００５１】
図９及び図１０において、図示の表は、データサイズとバイトレーンの組み合わせにより有効となるバイトレーンを詳細に示したものである。データは64ビットであり、バイトレーンは[63:56]、[55:48], [47:40]、[39:32]、[31:24]、[23:16]、[15:8]、[7:0]の８レーンあり、有効バイトレーンに“v”が表記されている。例えば、データサイズフィールド(size)が“000”即ち1バイトで、バイトレーンフィールド(pos_d/s)が“011”即ち第４バイトレーンの場合、データ[31:24] （データバス信号）を使用して１バイトのデータが転送される。
【００５２】
ここで、ＤＭＡ装置で扱うデータ転送命令（ロード命令、ストア命令、特殊命令）についてより理解を深めるために、以下にいくつかのデータ転送命令の実例を示す。
【００５３】
Inst=“01_000_0001_0010_100_001_000000000000”の場合、ロード命令であり、アドレスレジスタAR(1)の示すメモリ２上の１バイトデータを、ループレジスタLP(2)の[15:8]にロードする。
【００５４】
Inst=“10_111_0001_0010_011_000_000000000000”の場合、ストア命令であり、ＤＭＡ入力ポートIN(1)から読み込まれた８バイトデータを、アドレスレジスタAR(2)の示すメモリ上にストアする。
【００５５】
図１１は、特殊命令のエンコーディングを示す図である。
【００５６】
図１１において、EnableThreadは、特定のプログラムカウンタを有効にする命令であり、当該プログラムカウンタ以外の休眠状態の他のプログラムカウンタを起動するときに使用できる。DisableThreadは、特定のプログラムカウンタを無効にする命令であり、当該プログラムカウンタ以外の実行中の他のプログラムカウンタを休眠状態にする場合や、プログラムの実行が終了した際にプログラムカウンタ自身を休眠状態にする場合に使用できる。
【００５７】
Jumpは、ジャンプ命令であり、オペランドInst[23:12]を現在選択中のプログラムカウンタにコピーする。本実施の形態ではプログラムカウンタは６ビットであるので、実際はInst[17:12]がコピーされる。LoadImmidiateByteは、即値を内部リソースにロードする命令であり、オペランドInst[7:0]で示される１バイトを、その他のオペランドにより特定される内部リソースにコピーする。ClearResigerは、内部リソースを０クリアする命令である。LoopInは、ループ突入命令であり、LoopIndicator（Inst[22:19]）で指定されるループレジスタLP及びオフセットレジスタOFSTの組み合わせによりループを実現する。
【００５８】
上記図１に戻り、データ転送実行部７は、命令デコード部６の命令解読結果に応じてデータ転送を実行する。また、データ転送実行部７は、内部リソースとして、不図示の汎用レジスタGPR、アドレスレジスタAR、ループレジスタLP、オフセットレジスタOFSTをそれぞれ4本ずつ備えている。更に、データ転送実行部７は、ＤＭＡデバイス１−１とのデータ転送用にＤＭＡポート７−１（IN(0)及びOUT(0)）と、ＤＭＡデバイス１−２とのデータ転送用にＤＭＡポート７−２（IN(1)及びOUT(1)）と、メモリ１とのデータ転送用にバスインタフェース７−３を備える。
【００５９】
汎用レジスタGPRは、データを一時的に保持するレジスタであり、例えばメモリ２からロードしたデータを１バイト毎に別の内部リソースにコピーするときなどに用いる。アドレスレジスタARは、バスインタフェース７−３に対して出力するアドレスを生成するレジスタである。一般的なプロセッサと同様に、１データ転送毎にアドレスレジスタARの値を更新するモード(自動更新アドレッシングモード)を備える構成も好ましい。ループレジスタLPは、命令のループ回数を示すレジスタである。オフセットレジスタOFSTは、ループバックすべき命令アドレスを示すレジスタである。
【００６０】
ループレジスタLPとオフセットレジスタOFSTに所定値をロードし、ループ命令を実行することにより、ループ内に入る。プログラムカウンタの動作が進行してプログラムカウンタの値がオフセットレジスタOFSTに格納された値と一致したときに、プログラムカウンタの値をループ命令の次の命令を示すアドレスに更新すると共に、ループレジスタLPの値を１減じる。ループレジスタLPの値が０になった場合は、ループを脱出する、即ちプログラムカウンタの値に単に１を加える。
【００６１】
ここで、非常に単純なループを用いたプログラム例を示す。
命令アドレス      命令
0x00              AR(0)[7:0]に即値0x20をロード
0x01              LP(0)にAR(0)の示すメモリ上の値をロード(メモリの0x20番地上の
データ=0x20)
0x02              OFST(0)に即値0x04をロード
0x03              LoopIn命令 （インディケータ０）
0x04              DMAPort(0)から読み出したデータをAR(1)の示すメモリアドレスに
ストアし、AR(1)++
0x05              DisableThreadにより自分自身を休眠させる。
【００６２】
上記プログラムを構成する命令列によれば、0x03番地の命令実行によりループに入り、0x04番地のDMAポートからメモリ２へのデータ転送において、プログラムカウンタがオフセットレジスタOFSTと一致するためループバックし、LoopIn命令の次アドレス、即ち0x04番地にジャンプする。これを、LP(0)の回数、即ち３２回繰り返してループを抜けて終了する。
【００６３】
実行抑制・選択許可信号生成部８は、命令デコード部６による命令解読結果と、ＤＭＡデバイス１−１、１−２のＤＭＡ要求と、プログラムカウンタ選択信号生成部９からのプログラムカウンタ選択信号を基に、データ転送実行部７への実行抑制信号とプログラムカウンタ選択信号生成部９への選択許可信号を生成する。
【００６４】
図１２は、実行抑制・選択許可信号生成部８の詳細構成を示すブロック図である。
【００６５】
図１２において、比較器６−１、６−２、６−３、６−４、６−５は、命令デコード部６に含まれるが、説明の都合上、図１２に示している。比較器６−１は、命令がロード命令であるかどうかを判定し、ロード命令である場合にはload信号をアサートする。比較器６−２は、命令がストア命令であるかどうかを判定し、ストア命令である場合にはstore信号をアサートする。
【００６６】
比較器６−３は、データ転送元インデックスまたはデータ転送先インデックスが０であるかどうかを判定し、該インデックスが０である場合にはPort0信号をアサートする。比較器６−４は、データ転送元インデックスまたはデータ転送先インデックスが１であるかどうかを判定し、該インデックスが１である場合にはPort1信号をアサートする。比較器６−５は、データ転送元またはデータ転送先がDMAポートであるかどうかを判定し、DMAポートである場合にはDMA信号をアサートする。
【００６７】
ゲート８−１１、８−１２、８−１３、８−１４は、実行抑制・選択許可信号生成部８の転送元／転送先検出部８−１を構成する。ゲート８−１１にはload信号、Port0信号、DMA信号が入力され、３入力の論理積がLD_OUT0信号として出力される。LD_OUT0信号は、DMAポート0に対してデータをロードする命令が発行されていることを示す。ゲート８−１２にはload信号、Port1信号、DMA信号が入力され、３入力の論理積がLD_OUT1信号として出力される。LD_OUT1信号は、DMAポート1に対してデータをロードする命令が発行されていることを示す。
【００６８】
ゲート８−１３にはstore信号、Port0信号、DMA信号が入力され、３入力の論理積がST_IN0信号として出力される。ST_IN0信号は、DMAポート0からデータを読み出してメモリにストアする命令が発行されていることを示す。ゲート８−１４にはstore信号、Port1信号、DMA信号が入力され、３入力の論理積がST_IN1信号として出力される。ST_IN1信号は、DMAポート1からデータを読み出してメモリにストアする命令が発行されていることを示す。
【００６９】
ゲート８−３１、８−３２、８−３３、８−３４は、発行された命令に対応するＤＭＡ要求がアサートされているかどうかを検出する一致判定部８−３を構成する。DMAOReq0は、ＤＭＡデバイス１−１がメモリ２からのデータ転送を要求しているときに“1”にアサートされる。DMAOReq1は、ＤＭＡデバイス１−２がメモリ２からのデータ転送を要求しているときに“1”にアサートされる。DMAIReq0は、ＤＭＡデバイス１−１がメモリ２へのデータ転送を要求しているときに“1”にアサートされる。DMAIReq1は、ＤＭＡデバイス１−２がメモリ２へのデータ転送を要求しているときに“1”にアサートされる。
【００７０】
ゲート８−３１、８−３２、８−３３、８−３４の出力は、発行された命令がアクセスしようとしているDMAポートからのデータ転送要求がない場合に、何れか１つが“0”レベルとなる。
【００７１】
ゲート８−４１は、実行抑制信号生成部８−４を構成するものであり、ゲート８−３１、８−３２、８−３３、８−３４の出力の何れか１つが“0”になると出力が“0”となる。従って、ゲート８−４１の出力が実行抑制信号（抑制すべき時“０”レベル）となる。
【００７２】
ゲート８−５１、８−５２、８−５３、８−５４は、ＤＭＡ命令を発行したプログラムカウンタのどれが、どのＤＭＡポートをアクセスしたときに実行抑制を受けたかを検出する。フリップフロップ８−５５、８−５６、８−５７、８−５８は、実行抑制の検出結果を保持する。ゲート８−２１、８−２２、８−２３、８−２４は、実行抑制中のＤＭＡ命令に対応するＤＭＡ要求が発生したことを検出するＤＭＡ要求検出部８−２を構成する。
【００７３】
実行抑制中のＤＭＡ命令に対応するＤＭＡ要求が発生したことを検出すると、フリップフロップ８−５５、８−５６、８−５７、８−５８はクリアされる。ゲート８−５９１は、実行抑制状態を生成し、ゲート８−５９２は、実行抑制解除状態を生成する。ゲート８−５９３により、特定のプログラムカウンタの実行抑制状態が生成され、これをプログラムカウンタ選択許可信号pc_en[2:0]としてプログラム選択信号生成部９へ出力する。即ち、pc_en[n]が“1”の場合は選択が許可され、“0”の場合は選択が不許可となる。
【００７４】
図１２では、どのプログラムカウンタであるかを整数ｎで示している。ｎは0，1，2の何れかであるので、本実施の形態では、ゲート８−２１、８−２２、８−２３、８−２４、８−５１、８−５２、８−５３、８−５４、８−５９１、８−５９２、８−５９３及びフリップフロップ８−５５、８−５６、８−５７、８−５８は、プログラムカウンタの数、即ち３セット存在するが、図示を省略している。
【００７５】
次に、上記構成を有する本実施の形態のＤＭＡ装置の全体的な動作を図１３のタイミングチャートと図１４及び図１５のフローチャートを参照しながら詳細に説明する。
【００７６】
本実施の形態では、基本的に、プログラムカウンタPC(0)の示すプログラム(0x03番地及び0x05番地の命令)がＤＭＡデバイス１−１のデータ転送を行い、プログラムカウンタPC(1)の示すプログラム(0x12番地及び0x16番地の命令)がＤＭＡデバイス１−２のデータ転送を行うように設定されている。
【００７７】
クロックサイクル０では、Reset信号がアサート(“1”)されており、リセット状態である（ステップＳ１）。リセット状態においては、プログラムカウンタ選択信号pc_selは“001”を出力し、プログラムカウンタ選択許可信号pc_enは“111”を出力している。また、プログラムカウンタの初期値はPC(0)＝0x00、PC(1)＝0x10、PC(2)＝0x20である。
【００７８】
クロックサイクル１では、リセットが解除され、まずプログラムカウンタPC(0)が選択され（selected PC = PC(0)）、命令が実行される（ステップＳ２）。
【００７９】
クロックサイクル２では、pc_selが“010”となりプログラムカウンタPC(1)が選択され、命令が実行される（ステップＳ３）。
【００８０】
クロックサイクル３では、pc_selが“100”となりプログラムカウンタPC(2)が選択され、命令が実行される（ステップＳ４）。
【００８１】
このように、順次、プログラムカウンタPC(0)→PC(1)→PC(2)→PC(0)が選択されて命令が実行される。
【００８２】
クロックサイクル４では、ＤＭＡデバイス１−２のデータ転送要求DMAReq1がアサート(“1”)されるが、当該ＤＭＡデバイス１−２に対するデータ転送命令が実行されないため転送応答信号DMAAck1はアサートされない（ステップＳ５）。
【００８３】
クロックサイクル６では、プログラムカウンタPC(1)は0x12となり、このプログラムカウンタPC(1)がＤＭＡデバイス１−２へのデータ転送命令を示している（ステップＳ６）。データ転送命令が実際に実行されるのは、次にpc_selが“010”になるクロックサイクル８であり、このクロックサイクル８においてDMAAck1がアサートされる（ステップＳ７）。
【００８４】
一方、クロックサイクル１０では、プログラムカウンタPC(0)が示すＤＭＡデバイス１−１へのデータ転送命令が発行されるが、当該クロックサイクル１０においてDMAReq0がアサートされていないため、プログラムカウンタPC(0)の示す命令は実行を抑制される（ステップＳ８）。即ち、pc_enの値は“110”となりPC(0)は0x03を示したまま更新されない。DMAReq0がアサートされるクロックサイクル１４までの間、プログラムカウンタPC(1)、PC(2)の示すプログラムが順に実行される（ステップＳ９）。
【００８５】
クロックサイクル１４では、DMAReq0がアサートされると（ステップＳ１０）、pc_enは“111“に更新される。
【００８６】
クロックサイクル１５では、PC(0)が選択され実行される。即ち、転送応答信号DMAAck0がアサートされてデータ転送が完了する（ステップＳ１１）。
【００８７】
クロックサイクル１９では、PC(1)＝0x16の示すデータ転送命令が発行されるが、当該クロックサイクル１９においてDMAReq1がアサートされていないため、pc_enは“101”となり、PC(0)、PC(2)の示す命令が順に実行される状態となる（ステップＳ１２）。
【００８８】
クロックサイクル２１では、PC(1)の示す命令の実行が抑制されており、PC(0)＝0x05の示すデータ転送命令が発行されるが、当該クロックサイクル２１においてはDMAReq0が既にアサート状態のため、データ転送命令は直ちに実行され、DMAAck0がアサートされる（ステップＳ１３）。
【００８９】
クロックサイクル２３では、DAMReq1がアサートされると（ステップＳ１４）、pc_enは“101”から“111”に復帰する。
【００９０】
クロックサイクル２４では、データ転送命令が実行され、DMAAck1がアサートされる（ステップＳ１５）。
【００９１】
上述した動作により、ＤＭＡデバイス１−１、１−２のデータ転送要求レートが２サイクルであった場合、２つのプログラムカウンタをイネーブルにしておけば、毎クロックサイクルのデータ転送が可能であることが容易に理解できる。即ち、ＤＭＡデバイス１−１、１−２に対して命令デコード部６やデータ転送実行部７の回路は共通化しながら、インターリーブ的にＤＭＡデバイス１−１、１−２から要求されたデータ転送を行うことができるため、回路規模を大きくすることなく効率の良いデータ転送が可能となる。
【００９２】
しかも、２つのＤＭＡデバイス１−１、１−２のメモリアドレスの生成パターンを全く異なるものに設定することが可能であるため、非常に柔軟なデータ転送が可能となる。例えば、一方のプログラムカウンタでx方向の画像データ参照を行い、もう一方のプログラムカウンタでy方向の画像データ参照を行うようにすれば、画像データ処理を行いながら画像回転操作を行うことも可能である。
【００９３】
以上説明したように、本実施の形態によれば、複数のＤＭＡデバイスからのデータ転送要求毎に異なるアクセスパターンを予めプログラムすることが可能となり、複数のデータ転送をそれぞれのデータ転送要求に応じて並列的に実行することが可能となる。これにより、従来のように、複雑なデータ転送を実行する際にアクセスパターン毎にＣＰＵが介在して設定を切り替えることが不要となり、高機能且つ高性能の複雑なＤＭＡ転送を回路規模を増大することなく実現することが可能となる。
【００９４】
また、連続する同一のＤＭＡデバイスからのデータ転送要求に対しても、ＣＰＵの介在を必要とせずに途中でアクセスパターンを変更することが可能となる。これにより、ＤＭＡ装置を含むデータ処理装置全体の性能を向上させることが可能となる。
【００９５】
［第２の実施の形態］
図１６は、本発明の第２の実施の形態に係るデータ転送装置としてのＤＭＡ装置にＤＭＡデバイスとしてＪＰＥＧ（Joint Photographic Experts Group）エンコーダモジュールを接続した場合の電気的な構成を示すブロック図である。
【００９６】
図１６において、本実施の形態は、上述した第１の実施の形態に対して、ＤＭＡ装置のデータ転送実行部７にＤＭＡデバイスとしてＪＰＥＧエンコーダモジュール１２を接続した点と、ＣＰＵバス１４にストレージ１３を接続した点において相違する。本実施の形態のその他の要素は、上述した第１の実施の形態（図１）の対応するものと同一なので、説明を省略する。
【００９７】
ＪＰＥＧエンコーダモジュール１２の入力部には、データ転送実行部７のＤＭＡポート７−１が接続され、ＪＰＥＧエンコーダモジュール１２の出力部には、データ転送実行部７のＤＭＡポート７−２が接続されている。また、ＣＰＵバス１４上には、メモリマップされたストレージ１３が接続されている。ＪＰＥＧエンコーダモジュール１２によりＪＰＥＧ圧縮されたデータをストレージ１３に格納することができる。
【００９８】
上記構成において、プログラムカウンタPC(0)(３−１)は、メモリ２から画像データを読み出してＪＰＥＧエンコーダモジュール１２に入力するためのシーケンスを実行する。ＪＰＥＧエンコーダモジュール１２は、入力された画像データをＪＰＥＧ圧縮し、画像データのデータレートとは異なるデータレートを有する圧縮された符号データを生成し、データ転送要求をアサートする。
【００９９】
データ転送要求に応じてプログラムカウンタPC(1)(３−２)が起動される。プログラムカウンタPC(1)は、符号データをメモリ２に転送する。ストレージ１３のアクセス速度はメモリ２のアクセス速度に比べて遅いので、プログラムカウンタPC(2)(３−３)により制御されるシーケンスは、符号データをバックグラウンドでストレージ１３に転送する。
【０１００】
このような動作においては、プログラムカウンタPC(0)は、メモリ２上の画像データを8x8のブロック単位でロードアクセスする。プログラムカウンタPC(1)は、符号データを連続アドレスにストアアクセスする。プログラムカウンタPC(2)は、符号データを連続アドレスからロードアクセスしてストレージのデータポートである固定アドレスにストアアクセスする。
【０１０１】
上述した動作により、それぞれ異なるデータレートとアクセスパターンを有する３種類のデータ転送を、それぞれのデータ転送要求に応じて並列的に実行することが可能となる。更に、命令デコード部６及びデータ転送実行部７は時分割的に動作させることができるため、効率的なデータ転送及び複雑なアクセスパターンのデータ転送を、比較的少ない回路規模によって実現することが可能となる。
【０１０２】
以上説明したように、本実施の形態によれば、上述した第１の実施の形態と同様に、高機能且つ高性能の複雑なＤＭＡ転送を回路規模を増大することなく実現することが可能となると共に、ＤＭＡ装置を含むシステム全体の性能を向上させることが可能となる。
【０１０３】
［他の実施の形態］
上記第１及び第２の実施の形態では、ＤＭＡ装置のデータ転送実行部７に２つのＤＭＡデバイス１−１、１−２を接続した構成を説明したが、本発明は、これに限定されるものではなく、データ転送実行部７のＤＭＡポートを増設することでデータ転送実行部７に３つ以上のＤＭＡデバイスを接続するように構成してもよい。
【０１０４】
上記第１及び第２の実施の形態では、ＤＭＡ装置、ＤＭＡデバイス１−１、１−２、メモリ２、ＣＰＵ１１から構成されるデータ処理装置について説明したが、本発明は、データ処理装置のみへの適用に限定されるものではなく、データ処理装置を搭載した各種の画像処理装置（プリンタ、複写機、複合機、ファクシミリ等）に適用することができる。
【図面の簡単な説明】
【０１１２】
【図１】本発明の第１の実施の形態に係るデータ転送装置としてのＤＭＡ装置の電気的な構成を示すブロック図である。
【図２】ＤＭＡ装置において使用する命令メモリの実際の構成及び入出力ポートを示すブロック図である。
【図３】プログラムカウンタ、プログラムカウンタ選択部、プログラムカウンタ更新部の詳細構成を示すブロック図である。
【図４】プログラムカウンタ選択信号生成部の詳細構成を示すブロック図である。
【図５】入力であるストールとプログラムカウンタ選択許可信号に対する出力であるプログラムカウンタ選択信号の関係を示す図である。
【図６】命令デコード部により解読された命令を示す図である。
【図７】データサイズフィールドの意味を示す図である。
【図８】内部リソース識別子の意味を示す図である。
【図９】データサイズフィールドとバイトレーンフィールドと有効バイトレーンの関係を示す図である。
【図１０】図９の続きを示す図である。
【図１１】特殊命令のエンコーディングを示す図である。
【図１２】実行抑制・選択許可信号生成部の詳細構成を示すブロック図である。
【図１３】ＤＭＡ装置の全体動作を示すタイミングチャートである。
【図１４】ＤＭＡ装置の全体動作を示すフローチャートである。
【図１５】図１４のフローチャートの続きである。
【図１６】本発明の第２の実施の形態に係るデータ転送装置としてのＤＭＡ装置にＤＭＡデバイスとしてＪＰＥＧエンコーダモジュールを接続した場合の電気的な構成を示すブロック図である。
【符号の説明】
【０１１３】
１−１、１−２  ＤＭＡデバイス（デバイスに対応）
２  メモリ（メモリに対応）
３−１、３−２、３−３  プログラムカウンタ（アドレス格納手段に対応）
４  プログラムカウンタ選択部（選択手段に対応）
５  命令メモリ（命令格納手段に対応）
６  命令デコード部（解読手段に対応）
７  データ転送実行部（実行手段に対応）
７−１、７−２  ＤＭＡポート（通信手段に対応）
７−３  バスインタフェース（通信手段に対応）
８  実行抑制・選択許可信号生成部（実行抑制手段に対応）
９  プログラムカウンタ選択信号生成部（選択制御手段に対応）
１０  プログラムカウンタ更新部（更新手段に対応）
１１  ＣＰＵ（制御手段に対応）
１２  ＪＰＥＧエンコーダモジュール（エンコーダモジュールに対応）
【図１】
0004641391.tif 000002
【図２】
0004641391.tif 000003
【図３】
0004641391.tif 000004
【図４】
0004641391.tif 000005
【図５】
0004641391.tif 000006
【図６】
0004641391.tif 000007
【図７】
0004641391.tif 000008
【図８】
0004641391.tif 000009
【図９】
0004641391.tif 000010
【図１０】
0004641391.tif 000011
【図１１】
0004641391.tif 000012
【図１２】
0004641391.tif 000013
【図１３】
0004641391.tif 000014
【図１４】
0004641391.tif 000015
【図１５】
0004641391.tif 000016
【図１６】
0004641391.tif 000017