"ダイレクトメモリアクセス部とプロセッサ部とを有するダイレクトメモリアクセスシステムにおいて、前記プロセッサ部は、メモリと、前記メモリから命令を読み出して実行することで、前記ダイレクトメモリアクセス部が実行する命令を当該ダイレクトメモリアクセス部に書き込むプロセッサとを備え、前記ダイレクトメモリアクセス部は、複数のプログラムカウンタと、前記複数のプログラムカウンタを順に選択する選択手段と、前記プロセッサによって書き込まれた命令を保持する命令保持手段と、前記選択手段で選択されたプログラムカウンタにより示される前記命令保持手段のアドレスに格納されている前記命令を出力する出力手段と、前記出力手段によって出力される命令に応じてダイレクトメモリアクセスによるデータ転送を実行する実行手段とを備えていることを特徴とするダイレクトメモリアクセスシステム。前記出力手段によって前記命令保持手段から出力された命令に関するデバイスから当該命令に対応する要求が出力されていない場合、前記実行手段による前記命令の実行を抑制するとともに、対応する要求の出力されていない命令を示すプログラムカウンタの前記選択手段による選択を制限する制御手段を前記ダイレクトメモリアクセス部が更に備えることを特徴とする請求項1に記載のダイレクトメモリアクセスシステム。前記制御手段は、前記出力手段によって前記命令保持手段から出力された命令の内容に対応した要求がデバイスから出力されている場合には、対応する要求が出力されている命令を保持するプログラムカウンタの前記選択手段による選択を許可し、前記出力された命令の内容に対応した要求がデバイスから出力されていない場合には、前記出力された命令の内容に対応した要求が前記デバイスから出力されるまで、該命令に対応するプログラムカウンタを前記選択手段が選択することを制限することを特徴とする請求項2に記載のダイレクトメモリアクセスシステム。前記制御手段は、前記出力手段によって前記命令保持手段から出力された命令が、当該命令の示すプログラムカウンタを中断させる中断命令である場合には、前記選択手段による当該中断命令の示すプログラムカウンタの選択を制限し、前記命令保持手段から出力された命令が、当該命令の示すプログラムカウンタを再開させる再開命令である場合には、前記選択手段による、当該再開命令の示すプログラムカウンタの選択を許可することを特徴とする請求項2又は3に記載のダイレクトメモリアクセスシステム。前記制御手段は、前記出力手段によって前記命令保持手段から出力された命令が、当該命令の示すプログラムカウンタを当該命令の示すトリガ命令が発生するまで中断させるトリガ待ち中断命令である場合に、当該トリガ待ち中断命令以前にトリガが発行されていない際には、前記選択手段による前記トリガ待ち中断命令の示すプログラムカウンタの選択を制限し、当該トリガ待ち中断命令以前にトリガが発行されている際には、前記選択手段による前記トリガ待ち中断命令の示すプログラムカウンタの選択を制限しないことを特徴とする請求項4に記載のダイレクトメモリアクセスシステム。前記実行手段は、レジスタを有し、前記出力手段により前記命令保持手段から出力された命令がストア命令である場合には前記実行手段が前記レジスタの保持するデータを外部メモリへ転送し、前記出力手段により前記命令保持手段から出力された命令がロード命令である場合には前記実行手段が前記外部メモリの保持するデータを前記レジスタに転送することを特徴とする請求項1乃至5の何れか1項に記載のダイレクトメモリアクセスシステム。前記出力手段により前記命令保持手段から出力された命令がループ命令である場合には、前記命令保持手段が前記ループ命令により示される範囲に格納している命令を、前記実行手段が繰り返し実行することを特徴とする請求項1乃至6の何れか1項に記載のダイレクトメモリアクセスシステム。前記実行手段がデータ転送を実行する毎に、当該データ転送に関する命令を示すプログラムカウンタの値を更新するプログラムカウンタ更新手段を前記ダイレクトメモリアクセス部が更に備えることを特徴とする請求項1乃至7の何れか1項に記載のダイレクトメモリアクセスシステム。前記再開命令が、当該再開命令の示すプログラムカウンタを指定した中断命令に先立って実行された場合、前記実行手段が該中断命令を無効にすることを特徴とする請求項4に記載のダイレクトメモリアクセスシステム。前記命令保持手段は、複数の領域を有し、当該複数の領域のそれぞれに独立なプログラムを格納し、前記複数のプログラムカウンタは、前記複数の領域のうち、それぞれ異なる領域のプログラムをカウントすることを特徴とする請求項1乃至9の何れか1項に記載のダイレクトメモリアクセスシステム。前記出力手段は、前記命令保持手段からの命令を解釈して、当該命令の示す処理内容を示す信号を前記実行手段へ出力することを特徴とする請求項1乃至10の何れか1項に記載のダイレクトメモリアクセスシステム。前記実行手段により転送されるデータが画像データである場合、前記複数のプログラムカウンタの1つで当該画像データをx方向に参照し、他のプログラムカウンタのうちの1つで当該画像データをy方向に参照することで、前記実行手段によるデータの転送とともに前記画像データを回転させることを特徴とする請求項1乃至11の何れか1項に記載のダイレクトメモリアクセスシステム。前記デバイスは、前記実行手段によって転送されるデータを圧縮するためのエンコーダであることを特徴とする請求項2又は3に記載のダイレクトメモリアクセスシステム。ダイレクトメモリアクセス部とプロセッサ部とを有するダイレクトメモリアクセスシステムにおいて、前記プロセッサ部は、メモリと、前記メモリから命令を読み出して実行することで、前記ダイレクトメモリアクセス部が実行する命令を当該ダイレクトメモリアクセス部に書き込むプロセッサとを備え、前記ダイレクトメモリアクセス部は、第1領域と第2領域とを有するダブルバッファと、複数の命令を格納する命令保持手段と、前記命令保持手段の格納する命令のうち、外部デバイスからのデータを前記第1領域又は前記第2領域へ転送させる第1転送命令と、前記第1転送命令の示す転送が完了したことを示す第1転送完了命令と、第2転送完了命令が発行されるまで自ら中断状態に遷移する第1中断命令とを順に示す第1プログラムカウンタと、前記命令保持手段の格納する命令のうち、前記第1領域又は前記第2領域に格納しているデータを記憶装置へ転送させる第2転送命令と、前記第2転送命令の示す転送が完了したことを示す前記第2転送完了命令と、前記第1転送完了命令が発行されるまで自ら中断状態に遷移する第2中断命令と順に示す第2プログラムカウンタと、前記第1又は第2プログラムカウンタの示す命令を時分割処理し、前記第1、第2中断命令を処理した際に当該第1、第2中断命令に対応する転送完了命令が発行されていなければ対応するプログラムカウンタを中断状態に遷移させ、前記第1、第2中断命令を処理した際に当該第1、第2中断命令に対応する転送完了命令が発行されていれば対応するプログラムカウンタを中断状態に遷移させない実行手段とを備えることを特徴とするダイレクトメモリアクセスシステム。前記命令保持手段の格納する命令のうち、外部デバイスの処理するデータを前記外部デバイスへ転送させる第3転送命令と、前記第1プログラムカウンタを起動する第1起動命令とを示す第3プログラムカウンタを更に有し、前記第1プログラムカウンタは、前記第2プログラムカウンタを起動させる第2起動命令を示し、前記実行手段は、前記第1プログラムカウンタを起動させ、前記第1転送命令を実行した際に前記第1転送完了命令の代わり前記第2起動命令を実行することを特徴とする請求項14に記載のダイレクトメモリアクセスシステム。メモリと、前記メモリから命令を読み出して実行することで、ダイレクトメモリアクセス部が実行する命令を当該ダイレクトメモリアクセス部に書き込むプロセッサとを備えるプロセッサ部と、複数のプログラムカウンタと、前記プロセッサによって書き込まれた命令を保持する命令保持手段と、を備えるダイレクトメモリアクセス部とを有するダイレクトメモリアクセスシステムの制御方法であって、前記複数のプログラムカウンタを順に選択する選択工程と、前記選択工程で選択されたプログラムカウンタにより示される前記命令保持手段のアドレスに格納されている命令を出力する出力工程と、前記出力工程において出力された命令に応じてダイレクトメモリアクセスによるデータ転送を実行する実行工程とを有することを特徴とするダイレクトメモリアクセスシステムの制御方法。メモリと、前記メモリから命令を読み出して実行することで、ダイレクトメモリアクセス部が実行する命令を当該ダイレクトメモリアクセス部に書き込むプロセッサとを備えるプロセッサ部と、第1領域と第2領域とを有するダブルバッファと、複数の命令を格納する命令保持手段と、前記命令保持手段の格納する命令のうち、外部デバイスからのデータを前記第1領域又は前記第2領域へ転送させる第1転送命令と、前記第1転送命令の示す転送が完了したことを示す第1転送完了命令と、第2転送完了命令が発行されるまで自ら中断状態に遷移する第1中断命令とを順に示す第1プログラムカウンタと、前記命令保持手段の格納する命令のうち、前記第1領域又は前記第2領域に格納しているデータを記憶装置へ転送させる第2転送命令と、前記第2転送命令の示す転送が完了したことを示す前記第2転送完了命令と、前記第1転送完了命令が発行されるまで自ら中断状態に遷移する第2中断命令と順に示す第2プログラムカウンタと、実行手段とを備えるダイレクトメモリアクセス部と、を有するダイレクトメモリアクセスシステムの制御方法であって、前記実行手段が、前記第1又は第2プログラムカウンタの示す命令を時分割処理し、前記第1、第2中断命令を処理した際に当該第1、第2中断命令に対応する転送完了命令が発行されていなければ対応するプログラムカウンタを中断状態に遷移させ、前記第1、第2中断命令を処理した際に当該第1、第2中断命令に対応する転送完了命令が発行されていれば対応するプログラムカウンタを中断状態に遷移させないことを特徴とするダイレクトメモリアクセスシステムの制御方法。しかしながら、従来のダイレクトメモリアクセス装置によるダブルバッファ操作は、DMA完了毎にCPUによる2つのダイレクトメモリアクセス装置の設定、起動が必要となるためCPUの負荷が増大するという問題点があった。また、CPUの割り込みレイテンシによるオーバーヘッドのために、データ転送レートが低下するという問題もあった。さらに、ダブルバッファ動作の例においては、圧縮符号処理の方が撮像素子からのデータ転送よりも常に早いものと仮定したが、どちらの転送が早いのかが不確定である場合、CPUはDMA2の完了割り込みも処理する必要があり、どちらが早く終わったかによって処理を切り替える必要がある。この場合には、CPUの負荷はますます増大する。CPUの負荷を軽減するために、それぞれのダイレクトメモリアクセス装置の転送データ量を監視して、データ転送を中断、再開するための専用ハードウエアを装備する方法も考えられるが、様々なアクセスパターンによる複雑なデータ転送を実行するためには、専用ハードウエアが複雑化し回路規模が増大してしまうという問題点があった。また、ハードウエア開発後に新たなアクセスパターンに対応する必要が生じた場合に、ハードウエアを作り直す必要があるという問題点があった。本発明は上記従来例に鑑みてなされたもので、高機能かつ高性能のダイレクトメモリアクセス転送を、CPUに対する負荷を増大させることなく、かつ、回路規模を増大することなく実現することを目的とする。以上の目的を達成するために、本発明によるダイレクトメモリアクセス部とプロセッサ部とを有するダイレクトメモリアクセスシステムにおいては、前記プロセッサ部は、メモリと、前記メモリから命令を読み出して実行することで、前記ダイレクトメモリアクセス部が実行する命令を当該ダイレクトメモリアクセス部に書き込むプロセッサとを備え、前記ダイレクトメモリアクセス部は、複数のプログラムカウンタと、前記複数のプログラムカウンタを順に選択する選択手段と、前記プロセッサによって書き込まれた命令を保持する命令保持手段と、前記選択手段で選択されたプログラムカウンタにより示される前記命令保持手段のアドレスに格納されている命令を出力する出力手段と、前記出力手段によって出力される命令に応じてダイレクトメモリアクセスによるデータ転送を実行する実行手段とを備えていることを特徴とする。本発明によれば、高機能かつ高性能のダイレクトメモリアクセス転送を、CPUに対する負荷を増大させることなく、かつ、回路規模を増大することなく実現可能である。特に、ダブルバッファ等を用いて複数のデータ転送を同期を取りながら実行する際に、CPUの関与を必要としないため、システム全体の性能が向上するという効果がある。以下に、図面を参照して、この発明の好適な実施の形態を例示的に詳しく説明する。ただし、この実施の形態に記載されている構成要素はあくまで例示であり、この発明の範囲をそれらのみに限定する趣旨のものではない。概要本実施形態に係るダイレクトメモリアクセス装置は、簡易な構成で、様々なアクセスパターンによる複雑な複数のデータ転送をコンカレントにかつ同期を取りながら実行するためのものである。この目的のため、複数のプログラムカウンタを備え、プログラムカウンタが順次参照するデータ転送命令に従い、複数のDMA要求に対応するDMA転送が実行される。参照されるデータ転送命令列は予め所定のメモリに格納されている。すなわち、1つのデータ転送実行部に対し、命令メモリを複数の領域に分け、複数の独立したプログラムを格納可能とし、それぞれの領域に対応する複数のプログラムカウンタを設けて、各プログラムの進行を独立に制御する。これにより、複数のデバイスからのデータ転送要求毎に異なるアクセスパターンをプログラム可能となっている。さらに、複数のプログラムカウンタをデータ転送毎に選択することで、複数のプログラムを時分割処理することができ、マルチタスクを可能としている。また、あるプログラムカウンタの参照するデータ転送命令のソースまたはデスティネーションがDMAのデータポートでありかつDMA要求が無い場合、このプログラムカウンタは休眠状態となり、他のプログラムカウンタの参照する命令が実行される。DMAデータポートのDMA要求イベントが発生すると、休眠状態のプログラムカウンタは実行状態に復帰する。すなわち、ダイレクトメモリアクセスの対象となるデバイスからの転送要求信号を監視して、転送命令の可否を判断し、転送命令に対応する転送要求がデバイスから出力されていない場合には、データ転送を出口側転送実行部で抑制し、ノットレディーなデバイスに対するデータ転送を回避している。また、この場合更に、入口側プログラムカウンタの選択でも制限を加え、無駄な命令の実行を回避し全体としての処理速度の向上を図っている。さらにデータ転送命令の他に、特定のプログラムカウンタを明示的に休眠させる命令と休眠中のプログラムカウンタを実行状態に復帰させる命令を備える。つまり、プログラムの中断、再開の命令を予めプログラム可能に用意しておき、そのような命令に応じて、プログラムカウンタの選択を制御する。このようにすることで、命令メモリに対するプログラムの書き込み以外にCPUの関与無しに、複数のデータ転送を同期を取りながら実行することを実現する。特に、ダブルバッファ等を用いて複数のデータ転送を同期を取りながら実行する際に、CPUの関与を必要としないため、システム全体の性能が向上するという効果がある。具体的構成図1は本発明の実施形態であるダイレクトメモリアクセス装置の電気的な構成を示すブロック図である。ブロック間を結合する線の表記は、データ系の接続を幅を持つ矢印で図示し、制御系の接続を幅を持たない矢印で図示した。ただし、すべての接続が図示されているわけではなく、説明に必要な代表的な接続のみを図示した。本装置には、データ転送要求を行う2個のDMAダイレクトメモリアクセスデバイス101、102、CPUバスに接続され、データを格納し、データ転送元またはデータ転送先となるメモリ2と、実行中の命令の命令メモリ5上のアドレスを示す3個のプログラムカウンタ図中はPC301、302、303と、選択信号に基づいて、複数のプログラムカウンタ301~303のうちいずれかのプログラムカウンタに格納された値を、命令メモリ5のアドレスとして選択するプログラムカウンタ選択部4と、データ転送命令を格納する命令メモリ5と、命令メモリ5のデータ出力であるデータ転送命令を解読し転送方向、転送先元等を判定する命令デコード部6とが含まれている。命令メモリ5は、プログラムカウンタ選択部4で選択されたプログラムカウンタが示すアドレスから命令を出力する。また、解読された命令に従って2つのDMAポート701、702またはバスIFインターフェース703を駆動してデータ転送を実行するデータ転送実行部7を含む。更に、命令デコード部6の出力から転送元または先を検出する転送元/先検出部801、DMAデバイスからのデータ転送要求を検出するDMA要求検出部802、転送元/先検出部801で検出された転送元または先と、データ転送要求を出しているDMAデバイスとが一致しているか否かを判定する一致判定部803、判定結果が不一致であればデータ転送実行部7のデータ転送を抑制する信号を出力する実行抑制信号生成部804、及び、判定結果が不一致ならば現在実行中の命令に対応するプログラムカウンタを非選択とするための第1選択許可信号を生成する第1選択許可信号生成部805とを含む信号生成部8を含む。実行抑制信号生成部804は、命令メモリ5から出力された命令の内容に対応した転送要求がダイレクトメモリアクセスデバイス101、102から出力されていない場合、データ転送実行部7のデータ転送を抑制する転送抑制部として機能する。また、第1選択許可信号生成部805及び選択信号生成部10は、命令メモリ5から出力された命令の内容に対応した転送要求がダイレクトメモリアクセスデバイス101、102から出力されている場合には、プログラムカウンタ選択部4による、出力された命令に対応するプログラムカウンタ301~303の選択を許可し、命令メモリ5から出力された命令の内容に対応した転送要求がダイレクトメモリアクセスデバイス101、102から出力されていない場合には、出力された命令の内容に対応した転送要求が出力されるまで、プログラムカウンタ選択部4による、命令を出力するプログラムカウンタ301~303の選択を不許可にする選択許可部として機能する。また、命令デコード部6の出力がサスペンド命令かレジューム命令かを判定し、プログラムカウンタ301~303を選択または非選択とするための第2選択許可信号を生成する第2選択信号生成部9と、第1および第2選択許可信号に基づきデータ転送実行毎にプログラムカウンタ選択部4に送出する選択信号を生成する選択信号生成部10と、選択信号に基づきデータ転送実行毎に選択されたプログラムカウンタの値を1ずつ更新するプログラムカウンタ更新部11と、図示しないデータポートを経由して命令メモリ5に命令を格納し、ダイレクトメモリアクセス装置の動作を制御するCPUバスに接続されたCPU12とを含む。第2選択信号生成部9及び選択信号生成部10は、命令メモリ5から出力された命令が、いずれかのプログラムカウンタ301~303を指定した中断命令である場合には、プログラムカウンタ選択部4による、指定されたプログラムカウンタ301~303の選択を不許可にし、前記命令メモリ5から出力された命令が、いずれかのプログラムカウンタ301~303を指定した再開命令である場合には、プログラムカウンタ選択部4による、指定されたプログラムカウンタ301~303の選択を許可にする第2の選択許可部として機能する。ここで、本装置内のブロックのうち、まずCPU12のリセットが解除され、CPU12は内蔵ROMから命令をフェッチし実行することにより、図示しないリセット信号を制御して順次各ブロックのリセットを解除することが可能である。CPU12以外のモジュールがすべてリセットの状態において、まずCPU12は、命令メモリ5に対し、ダイレクトメモリアクセス装置が実行する命令を書き込む。図2は、本実施の形態において使用する命令メモリ5の構成および入出力ポートを示す。命令メモリ5は2ポートのSRAMであり、データ幅は32ビット、ワード長は64である。読み出しアドレスは6ビットであり、読み出し許可信号をアサートすると32ビットの読み出しデータがREADDATAポートより読み出される。本実施の形態においては、読み出しアドレスはプログラムカウンタ選択部4から供給され、読み出しデータは命令デコード部6に供給される。書き込みアドレスは6ビットであり、書き込み許可信号をアサートすると、32ビットの書き込みデータWRITEDATA信号上にドライブされているデータがSRAMの書き込みアドレスに書き込まれる。本実施の形態では、書き込みアドレス、書き込みデータともにCPU12から供給される。図1に戻り、命令メモリ5への命令データの書き込みが終わると、CPU12が順次各ブロックのリセットを解除し、これによりダイレクトメモリアクセス装置は動作を開始する。プログラムカウンタ301、302、303はおのおの6ビットのフリップフロップから構成されており、リセット時の初期値はおのおの000000010000100000となっている。すなわちプログラムカウンタ301は0x0番地からの命令を実行し、プログラムカウンタ302は0x10番地からの命令を実行し、プログラムカウンタ303は0x20番地からの命令を実行する。プログラムカウンタ301302303、プログラムカウンタ選択部4およびプログラムカウンタ更新部11の詳細ブロック図を図3に示す。プログラムカウンタ301にはセレクタ1101の出力が入力される。セレクタ1101は、プログラムカウンタの現在の値、現在の値に1を加算した値、LOAD命令によりローディングされる値stored、LOOP命令によりループバックする際のプログラムカウンタの戻り値lpbackpc、JUMP命令によるジャンプ先アドレスのうちの1つを選択して出力する。セレクタ1102はプログラムカウンタの出力自身、プログラムカウンタの値に1を加えた値のうちの何れかをプログラムカウンタ選択信号pcselに基づいて選択する。すなわち、当該クロックサイクルにおいて当該プログラムカウンタが選択されている場合は1を加えた値を選択し、非選択の場合は現在の値を選択する。プログラムカウンタ302および303においても同様の構成が取られており、プログラムカウンタの更新がなされる。プログラムカウンタ選択部4は3ビットのプログラム選択信号pcsel20に応じてプログラムカウンタ301、302、303の出力のうちの1つを選択し、命令メモリの読み取りアドレスとして出力する。pcsel20はonehotの信号であり、001のときプログラムカウンタ301を選択し、010のときプログラムカウンタ302を選択し、100のときプログラムカウンタ303を選択する。すなわち、pcseln1のときPCを選択するただしn012。図4に選択信号生成部10の詳細ブロック図を示す。フリップフロップ1001、1002、1003は各々クロック信号とリセット信号に接続されており、出力がプログラムカウンタ選択信号となる。フリップフロップ1001はリセットにより1がセットされ、D入力にはセレクタ1004の出力が接続され、Q出力がpcsel0となる。フリップフロップ1002はリセットにより0がセットされ、D入力にはセレクタ1005の出力が接続され、Q出力がpcsel1となる。フリップフロップ1003はリセットにより0がセットされ、D入力にはセレクタ1006の出力が接続され、Q出力がpcsel2となる。デコーダ1007は第1選択許可信号生成部805の出力する第1選択許可信号pcen120と第2選択許可信号生成部9の出力する第2選択許可信号pcen220のゲート1008、1009、1010による論理積演算出力pcen20と、命令実行のストール指示を示すストール信号とをデコードし、セレクタ1004、1005、1006に対して選択信号を生成する。デコード方式を図5に示す。入力であるストール、論理積演算出力pcen20に対する出力である選択信号selcnt20の関係を示す。例えば、ストールが1の場合、selcntは全て2となり、全フリップフロップは現在の値を保持する。すなわち、pcselは更新されない。ストールが0でpcen111の場合、selcntは全て0となり、pcselはシフトレジスタ動作する。すなわち、001→010→100→001と遷移し、PC→PC→PC→PCの順に選択される。ストールが0でpcen011の場合は、PCが選択不許可となるように、selcnt301となり、pcselは001→010→001→010→001と遷移し、PC→PC→PC→PC→PCの順に選択される。プログラムカウンタ選択部4によって選択されたプログラムカウンタに対応する命令は命令メモリ5から読み出され、命令デコード部6に入力される。命令は32ビットからなり、図6に示すように解読される。32ビット命令をInst310と表記すると、Inst313000のとき特殊命令、01のときロード命令、10のときストア命令、11は無効命令と解読する。ロード命令とは、メモリからダイレクトメモリアクセス装置の内部リソースDMAポートを含むへのデータ転送命令であり、ストア命令とは、内部リソースからメモリへのデータ転送命令である。特殊命令にはNOP命令なにもしない命令やループ命令LOOP、ジャンプ命令JUMP等の一般的なプロセッサに備わっている命令が含まれる。Inst2927はデータサイズを示すフィールドであり、詳細は図7に示されている。例えば000の場合は1バイト、100の場合は5バイトの転送であることを示す。Inst2623は転送元リソースのインデックスを示すフィールド、Inst2219は転送先リソースのインデックスを示すフィールドであり、Inst1816で示される内部リソースの識別子ロード命令の場合は転送先、ストア命令の場合は転送元を示すとともにどの内部リソースの何番目のリソースを転送対象にするかを示す。内部リソース識別子の詳細は図8に示されている。000の場合PCすなわちプログラムカウンタを示し、001の場合ARすなわちアドレスレジスタを示し、010の場合GPRすなわち汎用レジスタを示し、010の場合INOUTすなわちDMAポートを示しINOUTはロードかストアかにより識別される、100の場合LPすなわちループレジスタを示し、101の場合OFSTすなわちオフセットレジスタを示す。ロード命令の場合の転送元とストア命令の場合の転送先を示す内部リソース識別子はアドレスレジスタに固定されており、インデックスのみをそれぞれのインデックスフィールドにより指定する。Inst1513はデータ転送元または先の有効バイトレーンを示すフィールドであり、データサイズフィールドとともに何バイトをどのバイトレーンにまたはどのバイトレーンから転送するかを示す。図9A、図9Bは、サイズとバイトレーンの組み合わせにより有効となるバイトレーンを詳細に示している。データは64ビットであり、バイトレーンは6356、5548、4740、3932、3124、2316、158、70の8レーンあり、有効レーンにvが表記されている。例えばサイズフィールドが000すなわち1バイトで、バイトレーンフィールドが011すなわち第4バイトレーンの場合、データ3124に1バイトのデータが転送される。より理解を深めるために、いくつかの命令の実例を示す。Inst0100000010010100001000000000000の場合、ロード命令であり、アドレスレジスタARの示すメモリ上の1バイトデータを、ループレジスタLPの158にロードする。Inst1011100010010011000000000000000の場合、ストア命令であり、DMA入力ポートINから読み込まれた8バイトデータを、アドレスレジスタARの示すメモリ上にストアする。図10は特殊命令のエンコーディングを示す。EnableThreadは特定のプログラムカウンタを有効にする命令であり、当該プログラムカウンタ以外休眠中の他のプログラムカウンタを起動するときに使用できる。DisableThreadは特定のプログラムカウンタを無効にする命令であり、当該プログラムカウンタ以外の実行中の他のプログラムカウンタを休眠状態にする場合や、プログラムの実行が終了した際に自分自身を休眠状態にする際に使用できる。SuspendThread、ResumeThread、WaitTrigger、EmitTriggerは、それぞれ、特定のプログラムカウンタをサスペンド状態にする命令、特定のプログラムカウンタをレジューム実行再開する命令、特定のトリガイベントを待って自プログラムカウンタをサスペンド状態にする命令、特定のトリガイベントを発生させる命令である。JUMPはジャンプ命令であり、オペランドInst2312を現在選択中のプログラムカウンタにコピーする。本実施の形態においてはプログラムカウンタは6ビットであるので、実際はInst1712がコピーされる。LoadImmidiateByteは即値を内部リソースにロードする命令であり、オペランドInst70で示される1バイトを、その他のオペランドにより特定される内部リソースにコピーする。ClearResigerは内部リソースを0クリアする命令である。LoopInはループ突入命令であり、LoopIndicatorInst2219で指定されるループレジスタLPおよびオフセットレジスタOFSTの組み合わせによりループを実現する。データ転送実行部7は命令デコード部6の命令解読結果に応じてデータ転送を実行する。また、内部リソースとして、図示しない汎用レジスタGPR、アドレスレジスタAR、ループレジスタLP、オフセットレジスタOFSTをそれぞれ4本ずつ備える。さらに、ダイレクトメモリアクセスデバイス101とのデータ転送のためにDMAポート701INおよびOUTと、ダイレクトメモリアクセスデバイス102とのデータ転送のためにDMAポート702INおよびOUTと、メモリ1とのデータ転送のためにバスインターフェース703を備える。汎用レジスタは、データを一時的に保持するレジスタであり、例えばメモリからロードしたデータを1バイトごとに別の内部リソースにコピーするなどに用いる。ここで、アドレスレジスタARは、バスインターフェースに対して出力するアドレスを生成する。一般的なプロセッサと同様に1データ転送毎にアドレスレジスタARの値を更新するモードを備える構成も好ましい。ループレジスタLPは、命令のループ回数を示し、オフセットレジスタOFSTはループバックすべき命令アドレスを示す。ループレジスタLPとオフセットレジスタOFSTに所定値をロードし、ループ命令を実行することによりループ内に入る。プログラムカウンタが進行してオフセットレジスタOFSTに格納された値と一致したときにプログラムカウンタの値をループ命令の次の命令を示すアドレスに更新するとともにループレジスタの値を1減じる。ループレジスタLPが0になった場合は、ループを脱出する、すなわちプログラムカウンタの値にただ1加える。非常に単純なループを用いたプログラム例を示す。命令アドレス命令0x00AR70に即値0x20をロード0x01LPにARの示すメモリ上の値をロード0x02OFSTに即値0x04をロード0x03LoopIn命令インディケータ00x04DMAPortから読み出したデータをARの示すメモリアドレスにストアしAR0x05DisableThreadにより自分自身を休眠させる。上記命令列によれば、0x03番地の命令実行によりループに入り、0x04番地に記述されているように、DMAポートからメモリへデータを転送し、プログラムカウンタがオフセットレジスタと一致するためループバックしLoopIn命令の次アドレスすなわち0x04にジャンプする。これをLPの回数、すなわち32回繰り返してループを抜けて終了する。信号生成部8は、命令デコード部4による命令デコード結果と、ダイレクトメモリアクセスデバイス101,102のダイレクトメモリアクセス要求とプログラムカウンタ選択信号生成部10からのプログラムカウンタ選択信号をもとに、データ転送実行部7への実行抑制信号とプログラムカウンタ選択信号生成部10への第1選択許可信号を生成する。図11は信号生成部8の内部構成を示すブロック図である。601,602、603、604、605は命令デコード部6に含まれる比較器であるが、説明に好都合のため図11に示した。比較器601は命令がロード命令であるかどうかを判定する。ロード命令である場合にはload信号をアサートする。比較器602は命令がストア命令であるかどうかを判定する。ストア命令である場合にはstore信号をアサートする。比較器603は転送元または転送先インデックスが0であるかどうかを判定する。インデックスが0である場合にはPort0信号をアサートする。比較器604は転送元または転送先インデックスが1であるかどうかを判定する。インデックスが1である場合にはPort1信号をアサートする。比較器605は転送元または転送先がDMAポートであるかどうかを判定する。DMAポートである場合にはDMA信号をアサートする。ゲート811、812、813、814は転送元先検出部801を構成する。ゲート811にはloadPort0DMA信号が入力され、3入力のANDがLDOUT0信号として出力される。LDOUT0信号はDMAポート0に対してデータをロードする命令が発行されていることを示す。ゲート812にはloadPort1DMA信号が入力され、3入力のANDがLDOUT1信号として出力される。LDOUT1信号はDMAポート1に対してデータをロードする命令が発行されていることを示す。ゲート813にはstorePort0DMA信号が入力され、3入力のANDがSTIN0信号として出力される。STIN0信号はDMAポート0からデータを読み出してメモリにストアする命令が発行されていることを示す。ゲート814にはstorePort1DMA信号が入力され、3入力のANDがSTIN1信号として出力される。STIN1信号はDMAポート1からデータを読み出してメモリにストアする命令が発行されていることを示す。ゲート831、832、833、834は発行された命令に対応するダイレクトメモリアクセス要求がアサートされているかどうかを検出する一致判定部803を構成する。DMAOReq0はダイレクトメモリアクセスデバイス101がメモリからのデータ転送を要求しているときに1にアサートされ、DMAOReq1はダイレクトメモリアクセスデバイス102がメモリからのデータ転送を要求しているときに1にアサートされ、DMAIReq0はダイレクトメモリアクセスデバイス101がメモリへのデータ転送を要求しているときに1にアサートされ、DMAIReq1はダイレクトメモリアクセスデバイス102がメモリへのデータ転送を要求しているときに1にアサートされる。ゲート831、832、833、834の出力は、発行された命令がアクセスしようとしているDMAポートから、データ転送要求がない場合に、0レベルとなる。ゲート841は、実行抑制信号生成部804を構成するゲートであり、ゲート831、832、833、834の出力のいずれか1つが0になると出力が0となる。従って、ゲート841の出力が実行抑制信号抑制すべき時0レベルとなる。ゲート851、852、853、854は、ダイレクトメモリアクセス命令を発行したプログラムカウンタのどれが、どのDMAポートをアクセスしたときに実行抑制を受けたかを検出する。フリップフロップ855、856、857、858は実行抑制の検出結果を保持する。ゲート821、822、823、824は、実行抑制中のダイレクトメモリアクセス命令に対応するダイレクトメモリアクセス要求が発生したことを検出するDMA要求検出部802を構成する。実行抑制中のダイレクトメモリアクセス命令に対応するダイレクトメモリアクセス要求が発生したことを検出すると、フリップフロップ855、856、857、858はクリアされる。ゲート8591は実行抑制状態を生成し、ゲート8592は実行抑制解除状態を生成する。ゲート8593により、特定のプログラムカウンタの実行抑制状態が生成され、これを第1選択許可信号pcen120としてプログラム選択信号生成部10へ出力する。すなわちpcen1nが1の場合、選択が許可され、0の場合、選択が不許可となる。図11においてはどのプログラムカウンタであるかを整数nで示している。nは0,1,2の何れかであるので、本実施の形態においてはゲート821、822、823、824、851、852、853、854、8591、8592、8593およびフリップフロップ855、856、857、858はプログラムカウンタの数すなわち3セット存在するが図示を省略している。第2選択許可信号生成部9は、命令デコード部4による命令デコード結果とプログラムカウンタ選択信号生成部10からのプログラムカウンタ選択信号をもとに、プログラムカウンタ選択信号生成部10への第2選択許可信号を生成する。図12は第2選択許可信号生成部9の内部構成を示すブロック図である。606,607、608、609、610は命令デコード部6に含まれる比較器であり、611、612、613、614は命令デコード部6に含まれるゲート論理積であるが、説明に好都合のため図12に示した。比較器606は命令の最上位2ビットをデコードして、命令が特殊命令であるかどうかを判定する。特殊命令である場合にはspecial信号をアサートする。比較器607、608、609、610は命令の続く上位6ビットをデコードして、命令がサスペンド命令、レジューム命令ResumeThread、トリガ待ちサスペンド命令WaitTriggerトリガ発生命令EmitTriggerであるかどうかを判定し、それぞれの出力信号をゲート611、612、613、614によりspecial信号と論理積をとることにより、それぞれSUSP信号、RESU信号、WAIT信号、EMIT信号を生成する。命令のビット23から8は、サスペンド命令またはレジューム命令の場合に、どのプログラムカウンタをサスペンドまたはレジュームさせるかを示す識別子であり、本実施の形態の場合は3個のプログラムカウンタを備えるので、ビット10から8が有効となる。ビット8Inst8、ビット9Inst9、ビット10Inst10は、それぞれプログラムカウンタPC、PC、PC2に対応する。以下にサスペンド命令およびレジューム命令により選択許可信号を生成するロジックを解説する。フリップフロップ91はPCの動作状態実行状態か、サスペンド状態かを保持しており、リセット時の初期値は1、すなわち実行状態を示す。サスペンド命令が実行されSUSP1、かつプログラムカウンタ識別子がPCを示している場合Inst81、ゲート92の論理積出力が1となり、これがフリップフロップ91のクリア端子を駆動してフリップフロップ91の出力が0となる。すなわち、プログラムカウンタPCをサスペンド状態とする一要因を生成する。一方、レジューム命令が実行されRESU1、かつプログラムカウンタ識別子がPCを示している場合Inst81、ゲート903の論理積出力が1となり、これがフリップフロップ91のセット端子を駆動してフリップフロップ91の出力が1となる。すなわち、プログラムカウンタPCを実行状態とする一要因を生成する。同様に、フリップフロップ904はSUSP信号およびRESU信号とInst[9]の値に応じて、ゲート905、906によりセットまたはリセットされて、プログラムカウンタPCの実行状態を制御する。全く同様に、フリップフロップ907はSUSP信号およびRESU信号とInst[10]の値に応じて、ゲート908、909によりセットまたはリセットされて、プログラムカウンタPCの実行状態を制御する。次に、トリガ待ちサスペンド命令およびトリガ発生命令により選択許可信号を生成するロジックを解説する。フリップフロップ群910はトリガ発生命令によるトリガ発生の履歴を保持する8ビットのフリップフロップからなり、リセット時の初期値は00000000である。トリガ発生命令が実行されるとEMIT=1、ゲート911により、すでにトリガを保持している場合はそのままの値を保ち、トリガを保持していない場合はトリガ識別子であるInst2316をロードする。フリップフロップ912はPCの動作状態実行状態か、サスペンド状態かを保持しており、リセット時の初期値は1、すなわち実行状態を示す。トリガ待ちサスペンド命令が実行されWAIT1、プログラムカウンタ選択信号生成部10からのプログラムカウンタ選択信号がPCを示している場合pcsel01、ゲート913の論理積出力が1となる。さらに、フリップフロップ群910の保持するトリガ履歴とトリガ待ちサスペンド命令の待ち受けトリガ識別子Inst2316がゲート914および915により比較され、1ビットも共に1であるビットがない場合はゲート915の出力=0、トリガ待ちサスペンド命令実行以前にトリガが発行されていないと判定され、ゲート916によってフリップフロップ912のクリア信号が生成される。この結果、フリップフロップ912の出力が0となり、プログラムカウンタPCをサスペンド状態とする一要因を生成する。この時、フリップフロップ群917にはトリガ待ちサスペンド命令の待ち受けトリガ識別子Inst2316がロードされる。なお、フリップフロップ群917のリセット時の初期値は00000000である。ゲート914および915により比較された結果、1ビットでも共に1であるビットがある場合は、トリガ待ちサスペンド命令実行以前にトリガが発行されたと判定され、フリップフロップ912をクリアしない。すなわち、サスペンド状態には遷移しない請求項2に対応。さて、トリガ発生命令が実行されるとEMIT=1、トリガ識別子であるInst2316と待ち受けトリガであるフリップフロップ群917の出力がゲート918および919により比較され、1ビットでも共に1のビットがあるならばゲート920の出力が1となる。この時、フリップフロップ912の出力が0すなわちプログラムカウンタPCがサスペンド状態にある場合、ゲート921によりフリップフロップ912がセットされ、プログラムカウンタPCを実行状態とする一要因を生成する。この時、同時に、フリップフロップ群910をクリアし、トリガ履歴をリセットする。プログラムカウンタPC1およびPC2に関しても、PCと全く同様に作用し、プログラムカウンタを実行状態とする一要因が生成される。PCにおける910から921が、PCにおける922から934にそれぞれ対応し、また、PCにおける934から945にそれぞれ対応する。フリップフロップ901、904、907によって生成される、各々のプログラムカウンタの実行状態を制御する信号と、それぞれフリップフロップ912、924、936によって生成される、各々のプログラムカウンタの実行状態を制御する信号との論理積がゲート947、948、949により生成され、第2選択許可信号pcen220を形成し、プログラム選択信号生成部10へ出力される。以上に説明した各ブロックの動作説明に基づいて、本実施の形態のダイレクトメモリアクセス装置の全体的な動作を説明する。まず、サスペンド、レジューム操作を伴わない一般的なダイレクトメモリアクセス動作例を、図13に示すタイミング図を用いて説明する。基本的にプログラムカウンタPCの示すプログラムがダイレクトメモリアクセスデバイス101のデータ転送を行い、プログラムカウンタPCの示すプログラムがダイレクトメモリアクセスデバイス102のデータ転送を行うように設定されている。クロックサイクル0はreset信号がアサートされており、リセット状態である。リセット状態においては、プログラムカウンタ選択信号pcselは001を出力し、プログラムカウンタ選択許可信号pcenは111を出力している。また、プログラムカウンタの初期値はPC=0x0、PC=0x10、PC=0x20である。クロックサイクル1においてリセットが解除され、まずプログラムカウンタPCが選択されselectedPCPC、命令が実行される。クロックサイクル2ではpcselが010となりPCが選択され、クロックサイクル3ではpcselが100となりPCが選択される。このように順次PC→PC→PC→PCが選択されて命令が実行される。クロックサイクル4ではダイレクトメモリアクセスデバイス102のデータ転送要求DMAReq1がアサートされるが、当該デバイスに対するデータ転送命令が実行されないため転送応答信号DMAAck1はアサートされない。クロックサイクル6においてPCは0x12となり、このプログラムカウンタがダイレクトメモリアクセスデバイス102へのデータ転送命令を示している。実際に実行されるのは次にpcselが010になるクロックサイクル8であり、このサイクルにおいてDMAAck1がアサートされる。一方、クロックサイクル10においてプログラムカウンタPCが示すダイレクトメモリアクセスデバイス101へのデータ転送命令が発行されるが、当該サイクルにおいてDMAReq0がアサートされていないため、プログラムカウンタPCの示す命令は実行を抑制される。すなわちpcenの値は110となりPCは0x03を示したまま更新されない。DMAReq0がアサートされるクロックサイクル14までの間、プログラムカウンタPCPCの示すプログラムが順に実行される。クロックサイクル14においてDMAReq0がアサートされるとpcenは111に更新され、クロックサイクル15においてPCが選択され実行される。すなわち転送応答信号DMAAck0がアサートされてデータ転送が完了する。クロックサイクル19においてはPC=0x16の示すデータ転送命令が発行されるが、当該サイクルにおいてDMAReq1がアサートされていないためpcenは101となりPCPCの示す命令が順に実行される状態となる。PCの実行が抑制されている間のクロックサイクル21においてPC=0x05の示すデータ転送命令が発行されるが、当該サイクルにおいてはDMAReq0がすでにアサート状態のため直ちに実行され、DMAAck0がアサートされる。クロックサイクル23においてDAMReq1がアサートされるとpcenは111に復帰し、クロックサイクル24においてデータ転送命令が実行されDMAAck1がアサートされる。以上の説明により、容易に理解できることは、各ダイレクトメモリアクセスデバイスのデータ転送要求レートが2サイクルだった場合、2つのプログラムカウンタをイネーブルにしておけば、毎クロックサイクルデータ転送が可能である。すなわち、命令デコード部やデータ転送実行部の回路は共通しながらインターリーブ的にダイレクトメモリアクセスデバイスとのデータ転送を行えるため、回路規模を大きくすることなく効率のよいデータ転送を行うことが可能である。しかも、2つのダイレクトメモリアクセスのメモリアドレスの生成パターンを全く異なるものに設定することが可能であるため、非常に柔軟なデータ転送が可能である。例えば、一方のプログラムカウンタでx方向の画像データ参照を行い、もう一方のプログラムカウンタでy方向のデータ参照を行うようにすればデータ処理を行いながら回転操作を行うことも可能である。次に、サスペンド、レジューム操作に着目した動作例を、図14に示すタイミング図を用いて説明する。サイクル0からサイクル7までの動作は、データ転送要求DMAReq1がアサートされていない点を除いて図13に示した動作と同等である。サイクル8において、プログラムカウンタPCの実行する命令はPCを対象としたサスペンド命令SUSP0である。この結果、サイクル9においてpcenは111から110に遷移する。そして、サイクル10において、pcenが111であれば実行されるはずであったPCは実行されず、代わりにPCの命令が実行される。サイクル12において、プログラムカウンタPCはPCをレジュームする命令RESU0を実行する。この結果、サイクル13においてpcenは110から111に遷移し、サイクル14においてサスペンドされていたPCの命令が実行される。次に、サイクル16においてプログラムカウンタPCはトリガ識別子1を待って自らをサスペンドする命令、すなわちトリガ待ちサスペンド命令WAIT1を実行する。この結果、サイクル17においてpcenは111から011に遷移する。そして、サイクル19において、pcenが111であれば実行されるはずであったPCは実行されず、代わりにPCの命令が実行される。このサイクル19において実行されるPCの命令は、トリガ識別子1のトリガを発生するトリガ発生命令EMIT1である。この結果、サイクル20においてpcenは011から111に遷移する。そして、サイクル21において、サスペンドされていたPCの命令が実行される。さらに、サイクル22においてPCの実行する命令は、トリガ識別子2のトリガを発生するトリガ発生命令EMIT2である。この時点でトリガ待ちサスペンド命令によってサスペンドしているプログラムカウンタは存在しないため、前記第2選択許可信号生成部9内のフリップフロップ群910、922,934に00000100がロードされる。サイクル24において、プログラムカウンタPCはトリガ識別子2を待って自らをサスペンドする命令、すなわちトリガ待ちサスペンド命令WAIT2を実行するが、トリガ待ちサスペンド命令に先立ってサイクル22、同一トリガ識別子のトリガ発生命令が実行されているため、サイクル24におけるトリガ待ちサスペンド命令WAIT2は無効化され、pcenは111のまま変化しない。その結果、サイクル27においてプログラムカウンタPC2の命令は順番通りに実行される。本説明から容易に理解されるように、1つのトリガ発生命令は、トリガ待ちサスペンド命令によってサスペンド状態にある2つ以上のプログラムカウンタをレジュームすることも可能である。具体例本実施の形態のダイレクトメモリアクセス装置の応用への適用例として、JPEGエンコーダ装置のブロック図を図15に示す。ダイレクトメモリアクセスデバイスの実際例としてJPEGエンコーダモジュール13が適用されている。エンコーダモジュール13の入力部にDMAポート701が接続され、出力部にDMAポート702が接続されている。また、CPUバス上にメモリマップされたストレージ14が接続され、JPEG圧縮されたデータを格納することができる。このような構成の場合、プログラムカウンタPCはメモリ2から画像データを読み出してJPEGエンコーダ13に入力するためのシーケンスを実行する。JPEGエンコーダ13は、入力された画像データをJPEG圧縮し、入力データのデータレートとは異なるデータレートを持った圧縮された符号データを生成し、データ転送要求をアサートする。この要求に応じてプログラムカウンタPCが起動され、符号データをメモリ2に転送する。ストレージ14のアクセススピードはメモリ2に比べて遅い場合があるので、プログラムカウンタPCにより制御されるシーケンスは、符号データを、ダブルバッファを用いてバックグラウンドでストレージ14に転送する。このような動作においては、プログラムカウンタPCは、メモリ上の画像データを8x8のブロック単位でロードアクセスし、プログラムカウンタPCは、符号データを連続アドレスにストアアクセスし、プログラムカウンタPCは、符号データを連続アドレスからロードアクセスしてストレージのデータポートである固定アドレスにストアアクセスする。以上のようなデータ転送において重要なことは、データ転送間の同期である。例えば、プログラムカウンタPCにより制御されるシーケンスメモリ2上の符号データのストレージ14への転送は、プログラムカウンタPCにより制御されるシーケンス生成された符号データのメモリ2上への転送を追い越すことはできない。すなわち、生成されたデータ以上のデータをストレージに転送することがあってはならない。逆に、プログラムカウンタPCにより制御されるシーケンス生成された符号データのメモリ2上への転送は、確保されているメモリ領域の空き容量以上にデータを生成転送してはならない。つまり、ストレージに転送されていないメモリ領域に符号データを生成転送することがあってはならない。図16は、上述したダブルバッファの同期制御を、トリガ待ちサスペンド命令とトリガ発生命令により実現するための、プログラムカウンタPC、PCおよびPCのシーケンス図である。なお、プログラムカウンタPCに関しては、プログラムカウンタPCがサスペンドすることにより符号データ出力部が停止すると、JPEGエンコーダ13の画像データ入力部のデータ転送要求信号がアサートされないため、信号生成部8の作用により自動的にプログラムカウンタがサスペンドする。本動作の説明はシーケンス図からは省いた。まず、デフォルトのプログラムカウンタであるPCが起動し、プログラムカウンタPCをイネーブルにするENABLEPC1。次に、メモリ上の画像データをJPEGエンコーダ13に転送するダイレクトメモリアクセス転送をデータ転送要求信号に応じて実行するシーケンス図中1。起動されたプログラムカウンタPC1はJPEGエンコーダ13の生成する符号データをデータ転送要求信号に応じてメモリ領域Aに転送するシーケンス図中2。メモリ領域Aへのデータ転送が完了すると、プログラムカウンタPC2をイネーブルにしENABLEPC2、引き続きJPEGエンコーダ13の生成する符号データをデータ転送要求信号に応じてメモリ領域Bに転送するシーケンス図中3。プログラムカウンタPCは起動されると、メモリ領域A上の符号データをストレージ14に転送開始するシーケンス図中4。プログラムカウンタPCは符号データをメモリ領域Bに転送完了すると、トリガ識別子0のトリガ発生命令を発行するEMIT0。この時点で、トリガ待ちサスペンド状態にあるプログラムカウンタは存在しない。プログラムカウンタPCは引き続きトリガ識別子1のトリガ待ちサスペンド命令を発行しWAIT1、自らサスペンド状態に遷移する。プログラムカウンタPCはメモリ領域A上の符号データをストレージ14に転送し終わると、トリガ識別子1のトリガ発生命令を発行しEMIT1、続いてトリガ識別子0のトリガ待ちサスペンド命令を発行しWAIT0、自らサスペンド状態に遷移しようとするが、すでにトリガ識別子0のトリガ発生命令がプログラムカウンタPC1により発行されているため、サスペンドはキャンセルされ、引き続きメモリ領域B上の符号データをストレージ14に転送開始するシーケンス図中5。プログラムカウンタPCの発行したトリガ識別子1のトリガにより、サスペンド中のプログラムカウンタPCはレジュームし、JPEGエンコーダ13の生成する符号データをデータ転送要求信号に応じてメモリ領域Aに転送するシーケンス図中6。プログラムカウンタPCは、メモリ領域Bの符号データをストレージ14に転送し終わると、トリガ識別子1のトリガ発生命令を発行しEMIT1、続いてトリガ識別子0のトリガ待ちサスペンド命令を発行しWAIT0、自らサスペンド状態に遷移する。プログラムカウンタPCは、JPEGエンコーダ13の生成する符号データをデータ転送要求信号に応じてメモリ領域Aに転送し終わると、トリガ識別子0のトリガ発生命令を発行しEMIT0、続いてトリガ識別子1のトリガ待ちサスペンド命令を発行しWAIT1、自らサスペンド状態に遷移しようとするが、すでにトリガ識別子1のトリガ発生命令がプログラムカウンタPC2により発行されているため、サスペンドはキャンセルされ、引き続きJPEGエンコーダ13の生成する符号データをデータ転送要求信号に応じてメモリ領域Bに転送開始するシーケンス図中7。プログラムカウンタPCの発行したトリガ識別子0のトリガにより、サスペンド中のプログラムカウンタPCはレジュームし、メモリ領域A上の符号データをストレージ14に転送開始するシーケンス図中8。以下同様に、プログラムカウンタPCによるメモリ領域Aへの転送シーケンス図中9、プログラムカウンタPCによるメモリ領域Bからの転送シーケンス図中10のように、順次メモリ領域AおよびBを交互に同期を取りながらアクセスする。本シーケンス図の例においては、符号データのメモリ領域への転送時間は、入力画像データに依存するためにまちまちであり、一方、ストレージへの転送時間もストレージのステータスに依存してまちまちであるため、2つの転送のどちらが早く終了するかは不確定である。このような例においても、本装置を適用することにより、非常に簡便にダブルバッファを用いて同期を取りながらデータ転送を行うことが可能となる。以上のように、それぞれ異なるデータレートとアクセスパターンをもつ3種類のデータ転送を、それぞれのデータ転送要求に応じて並列的に同期を取りながら実行することができる。また、命令デコード部やデータ転送実行部は時分割的に動作させることができるため、効率的かつ複雑なアクセスパターンのデータ転送を、比較的少ない回路規模によって実現することが可能となる。なお、上記実施形態では、DMA装置に3つのプログラムカウンタを設けたが、本発明はこれに限定されるものではなく、2つまたは4つ以上のプログラムカウンタを設けたDMA装置も本発明の範疇に含まれうる。ただし、DMAポートの数以上のプログラムカウンタが設けられていることが望ましい。"