(58)【調査した分野】(Int.Cl.,DB名)
前記ワークポインタの前記更新手段は、更新用ファームウェア(40)を実行する手段(24、30)を有する、請求項1に記載のダイレクトメモリアクセスコントローラ(10、20)。
前記所定の更新回路は、前記リングバッファメモリへのアドレスジャンプを少なくとも1つ含む、請求項1または2に記載のダイレクトメモリアクセスコントローラ(10、20)。
前記読み出しロック手段(30、40)は、前記読み出しポインタ(PL)を更新することによって前記読み出しポインタの指定するアドレスが前記書き込みポインタ(PE)の指定するアドレスに到達したり追い越したりすると、前記リングバッファメモリ(16)でのデータの読み出しをすべてロックするように設計され、
前記書き込みロック手段(24、40)は、前記書き込みポインタ(PE)を更新することによって前記書き込みポインタの指定するアドレスが前記読み出しポインタ(PL)の指定するアドレスに到達したり追い越したりすると、前記リングバッファメモリ(16)でのデータの書き込みをすべてロックするように設計される、請求項1から3のいずれか一項に記載のダイレクトメモリアクセスコントローラ(10、20)。
通信ネットワークからダウンロード可能なコンピュータプログラムおよび/またはコンピュータで再生可能な媒体に記録したコンピュータプログラムおよび/またはダイレクトメモリアクセスコントローラ(10、20)で実行可能なコンピュータプログラムであって、前記コンピュータプログラムをダイレクトメモリアクセスコントローラで実行した場合に、請求項15に記載のデータ転送方法のステップを実行するためのプログラムコードの命令を含むことを特徴とするコンピュータプログラム。
【発明の概要】
【発明が解決しようとする課題】
【0012】
したがって、上記の課題および制約を緩和することができるダイレクトメモリアクセスコントローラを提供することが望まれる。
【課題を解決するための手段】
【0013】
よって本発明は、少なくとも1つのデータ転送元からこのデータの少なくとも1つの転送先へリングバッファメモリを介してデータを転送するためのダイレクトメモリアクセスコントローラであって、
− 前記少なくとも1つの転送元から受信したデータをリングバッファメモリに書き込むように設計した書き込み管理モジュールと、
− 第1の読み出しポインタおよび第2の書き込みポインタの格納手段であって、前記読み出しポインタおよび書き込みポインタが、データの読み込みおよび書き込みが可能なリングバッファメモリの基本セルを示す格納手段と、
− リングバッファメモリに格納されたデータを読み出し、このデータを前記少なくとも1つの転送先に転送するように設計した読み出し管理モジュールと、
− リングバッファメモリで読み出しおよび書き込みを、前記読み出しポインタおよび書き込みポインタが示す基本セルの位置に応じてロックするロック手段と、
− 第1および第2のポインタとは異なる読み出しまたは書き込みワークポインタを格納する格納手段と、
− ワークポインタの更新手段であって、このワークポインタが実行した各読み出しまたは書き込みの後に、所定の更新回路に従って更新する更新手段と
を有するアクセスコントローラにおいて、
所定の更新回路がワークポインタをリングバッファメモリで前方または後方に変位させることと、読み出しワークポインタが、読み出しポインタから書き込みポインタの1つ前のアドレスまでと規定した読み出し用に確保したメモリスペースの外部を指定すると、または同じように、書き込みワークポインタが、書き込みポインタから読み出しポインタの1つ前のアドレスまでと規定した書き込み用の空きスペースの外部を指定すると、読み出しまたは書き込みワークポインタをロックするロック手段を備えること
とを特徴とするアクセスコントローラを目的とする。
【0014】
したがって、リングバッファメモリは、転送元と転送先との間で読み出し/書き込みをロックする中間バッファの機能を果たす。この機能は、ダイレクトメモリアクセスコントローラが読み出しポインタおよび書き込みポインタを用いて管理し、このコントローラは、このリングバッファメモリへの書き込みおよび読み出しのアクセス権を有する。このようにすると、中央処理装置と同期する必要なく入力データフロー(転送元が生成するフロー)を出力データフロー(転送先が生成するフロー)と同期することが可能になる。
【0015】
したがって、ダイレクトメモリアクセスコントローラが入力フローと出力フローとを同期する能力を失うことなく、リングバッファメモリへのデータの読み出しおよび書き込みにより多くの柔軟性を持たせることも可能になる。
【0016】
選択的に、ワークポインタの更新手段は、更新用ファームウェアを実行する手段を有する。
【0017】
ファームウェア(micrologiciel)とは、集積回路などのハードウェアコンポーネントに組み込まれた、さらに正確にはこのコンポーネントの揮発性または不揮発性メモリに組み込まれたソフトウェアのことである。この用語は、以下の説明文では英語の「firmware」の翻訳として使用する。
【0018】
同じく選択的に、所定の更新回路は、リングバッファメモリへのアドレスジャンプを少なくとも1つ含む。
【0019】
したがって、ダイレクトメモリアクセスコントローラが読み出しおよび書き込みのトラッキングを管理するリングバッファメモリは、コントローラが単なるFIFO方式のリストとして使用するものではない。少なくとも1つのアドレスジャンプを含む所定の回路に従って第3の書き込みポインタまたは読み出しポインタを更新するようにした所定のプログラムにより、純粋にインクリメントする回路とは逆に、転送元から受信してから転送先へ発信するまでの間にリングバッファメモリを介してデータシーケンスを変更することができる。
【0020】
同じく選択的に、読み出しロック手段は、読み出しポインタを更新することによってこの読み出しポインタの指定するアドレスが書き込みポインタの指定するアドレスに到達したり追い越したりすると、リングバッファメモリへのデータの読み出しをすべてロックするように設計し、書き込みロック手段は、書き込みポインタを更新することによってこの書き込みポインタの指定するアドレスが読み出しポインタの指定するアドレスに到達したり追い越したりすると、リングバッファメモリへのデータの書き込みをすべてロックするように設計する。
【0021】
同じく選択的に、第1の読み出しポインタは、データの書き込み用にメモリスペースを空ける読み出しポインタであり、ワークポインタは、読み出したデータを保存する読み出しポインタである。
【0022】
同じく選択的に、ファームウェアは、第1の読み出しポインタおよび読み出しワークポインタのみを更新し、書き込みポインタは、リングバッファメモリでデータの書き込み演算を行うたびにアドレスジャンプすることなくインクリメントによって自動的に更新されるように設計する。
【0023】
同じく選択的に、第2の書き込みポインタは、データの読み出し用にメモリスペースを確保する書き込みポインタであり、ワークポインタは書き込みポインタである。
【0024】
同じく選択的に、ファームウェアは、第2の書き込みポインタおよび書き込みワークポインタのみを更新し、読み出しポインタは、リングバッファメモリでデータの読み出し演算を行うたびにアドレスジャンプすることなくインクリメントによって自動的に更新されるように設計する。
【0025】
同じく選択的に、データ転送は複数の転送先に送るようになっているため、格納手段は転送先ごとに、第1の読み出しポインタとは異なる読み出しワークポインタを有し、コントローラは各転送先の読み出しワークポインタの更新手段を有し、ダイレクトメモリアクセスコントローラは、第1の読み出しポインタから書き込みポインタの1つ前のアドレスまでと規定した読み出し用に確保したメモリスペースの外部を読み出しワークポインタが指定すると、読み出しワークポインタをロックするロック手段を有する。
【0026】
同じく選択的に、データ転送は複数の転送先に送るようになっているため、格納手段は転送先ごとに、読み出しワークポインタに対応する第1の読み出しポインタを有し、ダイレクトアクセスコントローラは、対象とする読み出しワークポインタに対応する第1の読み出しポインタから書き込みポインタの1つ前のアドレスまでと規定した読み出し用に確保したメモリスペースの外部を読み出しワークポインタが指定すると、読み出しワークポインタをロックするロック手段を有する。
【0027】
同じく選択的に、データ転送は複数の転送元から送られるようになっているため、格納手段は転送元ごとに、第2の書き込みポインタとは異なる書き込みワークポインタを有し、第2の読み出しポインタから第1の読み出しポインタの1つ前のアドレスまでと規定した書き込み用に空いているメモリスペースの外部を書き込みワークポインタが指定すると、この書き込みワークポインタをロックするロック手段を備える。
【0028】
同じく選択的に、データ転送は複数の転送元から送られるようになっているため、格納手段は転送元ごとに、書き込みワークポインタに対応する第2の書き込みポインタを有し、ダイレクトアクセスコントローラは、対象とする書き込みワークポインタに対応する第2の書き込みポインタから第1の読み出しポインタの1つ前のアドレスまでと規定した書き込み用に空いているメモリスペースの外部を書き込みワークポインタが指定すると、各書き込みワークポインタをロックするロック手段を有する。
【0029】
同じく選択的に、格納手段は、第2の書き込みポインタとは異なる書き込みワークポインタを有するとともに、第1の読み出しポインタとは異なる読み出しワークポインタも有する。
【0030】
同じく選択的に、所定の更新回路は、リングバッファメモリでワークポインタを前方および後方へ変位させることを含む。
【0031】
本発明はまた、少なくとも1つのデータ転送元からこのデータの少なくとも1つの転送先へ、本発明によるダイレクトメモリアクセスコントローラを用いてデータを転送する方法であって、転送元から受信した各データをコントローラによってリングバッファメモリへ発信し、転送先へ転送する各データをコントローラによってリングバッファメモリに読み出し、読み出しポインタおよび書き込みポインタが示す基本セルの相対位置に応じて、リングバッファメモリへの読み出しをコントローラによってロックするステップと、リングバッファメモリへの書き込みをコントローラによってロックするステップとを有する方法がさらに、
− リングバッファメモリでワークポインタを前方および後方に変位させるステップと、
− 読み出しポインタから書き込みポインタの1つ前のアドレスまでと規定した読み出し用に確保したメモリスペースの外部を読み出しワークポインタが指定すると、またはこれと同様に、書き込みポインタから読み出しポインタの1つ前のアドレスまでと規定した書き込み用に空いているメモリスペースの外部を書き込みワークポインタが指定すると、読み出しまたは書き込みワークポインタをロックするステップと
を有することを特徴とする方法も目的とする。
【0032】
最後に、本発明はまた、通信ネットワークからダウンロード可能なコンピュータプログラムおよび/またはコンピュータで再生可能な媒体に記録したコンピュータプログラムおよび/またはダイレクトメモリアクセスコントローラで実行可能なコンピュータプログラムであって、前記プログラムをダイレクトメモリアクセスコントローラで実行した場合に、上記のように定義したデータ転送方法のステップを実行するためのプログラムコードの命令を含むコンピュータプログラムも目的とする。
【0033】
本発明は、添付の図を参照しながら例のみを目的として挙げた以下の説明文を読めばよりよく理解できるであろう。
【発明を実施するための形態】
【0035】
図1に示すダイレクトメモリアクセスコントローラまたはDMAコントローラ10は、少なくとも1つのデータ転送元12からこのデータの少なくとも1つの転送先14へリングバッファメモリ16を介してデータを転送する機能を持ち、リングバッファメモリは、一連のメモリの基本セルを所定数有する。
【0036】
DMAコントローラ10は、データの書き込みおよび読み出しアクセスを命令するモジュールであって、DMAコントローラ10とリングバッファメモリ16を搭載する格納媒体との間のインターフェースとなるモジュール18を介して、リングバッファメモリ16の基本セルへの書き込みおよび読み出しにアクセスすることができる。一実施変形例では、符号20を付したDMAコントローラは、リングバッファメモリ16を搭載する格納媒体、および書き込みおよび読み出しアクセスを命令するモジュール18を備えていることがわかる。実際DMAコントローラは、例えばCMOS型集積回路などの自律型チップに基づくシステム形態をとることができる。
【0037】
非限定的な実施例として、検討可能ないわゆるNoC(英語の「Networkon Chip」)方式、つまりネットワーク・オン・チップのアーキテクチャによれば、DMAコントローラ10または20は、パケット通信ネットワークの接続を介して互いに通信する基本要素で構成するものと考える。
【0038】
転送元12から転送先14へのデータ転送を行うこのアーキテクチャによれば、DMAコントローラ10または20は、以下の素子:
− 転送元12から転送されるデータを受信する接続22
− コントローラ10または20がリングバッファメモリ16でのデータの書き込みを管理するモジュールであって、このモジュールは接続22から受信するデータによって作動するモジュール24
− 書き込みおよび読み出しアクセスを命令するモジュール18を介して、メモリの基本セルにデータを書き込むためにリングバッファメモリ16へデータを発信する接続26
− 書き込みおよび読み出しアクセスを命令するモジュール18を介して、メモリの基本セルにデータを読み出すためにリングバッファメモリ16から送られるデータを受信する接続28
− コントローラ10または20がリングバッファメモリ16でのデータの読み出しを管理するモジュールであって、接続28が供給するデータを受信することができるモジュール30
− 読み出したデータを転送先14へ発信する接続32
を有する。
【0039】
これらの素子により、DMAコントローラ10または20は転送元12から受信した各データをリングバッファメモリ16へ発信し、転送先14に転送するための各データは次に、DMAコントローラ10または20がリングバッファメモリ16に読み出される。このようにリングバッファメモリ16は、転送元12と転送先14との間で中間バッファの機能を果たす。
【0040】
選択的に、データを受信する接続22は、FIFO方式の入力バッファメモリ34を有し、これによって例えばリングバッファメモリ16が満杯であるために書き込みがロックされても、転送元12から受信したデータを一時的に格納することができる。
【0041】
同じく選択的に、読み出したデータを発信する接続32は、FIFO方式の出力バッファメモリ36を有し、これによって例えば転送先14がまだ受信態勢になっていなかったり、出力ネットワークが一時的に飽和していたりしても、読み出したデータを一時的にリングバッファメモリ16に格納することができる。
【0042】
DMAコントローラに入るデータフローと、DMAコントローラから出るデータフローとを同期するため、DMAコントローラはさらに、リングバッファメモリ16のディスクリプタを格納する格納手段38を有する。
【0043】
このディスクリプタは、格納媒体にあるリングバッファメモリ16のベースアドレスを指定する少なくとも1つのベースポインタPBと、格納媒体にあるリングバッファメモリ16の先頭アドレスを指定する先頭ポインタPSと、DMAコントローラ10または20が受信する次のデータを書き込むことができるリングバッファメモリ16の基本セルのアドレスを指定する書き込みポインタPEと、次のデータを読み出して転送先に転送することができるリングバッファメモリ16の基本セルのアドレスを指定する読み出しポインタPLとを有する。
【0044】
バッファメモリ16は、サイズがポインタPBおよびPSの指し示したベースアドレスから先頭アドレスまでの基本セル数によって決まる循環型メモリであることから、書き込みポインタPEおよび読み出しポインタPLが指定することのできるこのメモリの基本セルはそれぞれ、ベースアドレスから先頭アドレスまでのアドレスで識別する。
【0045】
ベースポインタPBおよび先頭ポインタPSは事前に決定し、常に一定となるようになっているが、書き込みポインタPEおよび読み出しポンタPLは変化し、例えばリングバッファメモリで書き込み演算および読み出し演算を行ってからベースアドレスから先頭アドレスに向かって基本セルをインクリメトすることによって更新するようにする。
【0046】
前述したように、このバッファメモリ16の循環は、書き込みポインタまたは読み出しポインタがメモリの先頭アドレスに到達すると、このポインタを基本セル1つ分インクリメントすることによってこのポインタがメモリのベースアドレスを指定するという事実と関係している。
【0047】
その結果、DMAコントローラ10または20が読み出して転送先14に転送するのを待つ間にリングバッファメモリ16に一時的に格納したデータは、読み出しポインタPLのアドレスと書き込みポインタPEのアドレスの1つ前のアドレスとの間で、ベースアドレスから先頭アドレスに向かう方向に位置している。逆に、書き込みポインタPEのアドレスと読み出しポインタPLのアドレスの1つ前のアドレスとの間で、先頭アドレスからベースアドレスに向かい方向でリングバッファメモリにあるメモリスペースは、書き込み用の空きスペースである。ディスクリプタPB、PS、PEおよびPLに対応するリングバッファメモリ16のこの構造を
図3Aおよび3Bに示しており、これについては後述する。
【0048】
この考えに基づき、データ書き込み管理モジュール24は、とりわけ書き込みポインタPEおよび読み出しポインタPLの値に応じて、リングバッファメモリ16にデータを書き込んだり、逆にこの書き込みをロックしたりするように設計する。この管理モジュールはまた、書き込みポインタPEを更新するようにも設計し、これには、シーケンサを用いて基本セル1つ分をインクリメントして自動的に、あるいは例えばバッファメモリ16と同じ格納媒体に格納したファームウェア40を実行することによる所定の方法で行う。さらに正確には、本発明の単純な実施形態では、リングバッファメモリ16に書き込むデータを書き込みポインタPEが示すアドレスに書き込む必要がある。書き込み管理モジュール24が事前に書き込みポインタPEを更新することにより、この書き込みポインタの指定するアドレスが読み出しポインタPLの指定するアドレスに到達したり追い越したりする場合(メモリが満杯になる)は、書き込みをロックしなければならない。
【0049】
この同じ考えに基づき、データ読み出し管理モジュール30は、とりわけ書き込みポインタPEおよび読み出しポインタPLの値に応じて、リングバッファメモリ16でデータを読み出したり、逆にこの読み出しをロックしたりするように設計する。この管理モジュールはまた、読み出しポインタPLを更新するようにも設計し、これには、シーケンサを用いて基本セル1つ分をインクリメントして自動的に、あるいは例えばバッファメモリ16と同じ格納媒体に格納したファームウェア40を実行することによる所定の方法で行う。さらに正確には、本発明の単純な実施形態では、リングバッファメモリ16に読み出すデータを読み出しポインタPLが示すアドレスに読み出す必要がある。読み出し管理モジュール30が事前に読み出しポインタPLを更新することにより、この読み出しポインタの指定するアドレスが書き込みポインタPEの指定するアドレスに到達したり追い越したりする場合(メモリが空になる)は、読み出しをロックしなければならない。
【0050】
具体的には、リングバッファメモリ16への読み出しおよび書き込みのロックおよびロック解除が上記のとおりに動作するために、書き込みポインタPEの更新後に毎回書き込み管理モジュール24を、
− 書き込みポインタPEが読み出しポインタPLに到達すると(メモリが満杯であることを示すと)、リングバッファメモリ16へのデータの書き込みをすべてロックし、
− 読み出しがロックされ、書き込みポインタPEが再び読み出しポインタPLを追い越すと、リングバッファメモリ16へのデータの読み出しのロックを解除する
ようにプログラムすることができる。
【0051】
同じく、読み出しポインタPLの更新後に毎回読み出し管理モジュール30を、
− 読み出しポインタPLが書き込みポインタPEに到達すると(メモリが空であることを示すと)、リングバッファメモリ16へのデータの読み出しをすべてロックし、
− 書き込みがロックされ、読み出しポインタPLが再び書き込みポインタPEを追い越すと、リングバッファメモリ16へのデータの書き込みのロックを解除する
ようにプログラムすることができる。
【0052】
このようにして書き込み管理モジュール24は、メモリ16が満杯のときに書き込みをロックし、空のメモリが再び満杯になると読み出しのロックを解除する機能を果たす。読み出し管理モジュール30は、メモリ16が空のときに読み出しをロックし、満杯のメモリ16が再び空になると書き込みのロックを解除する機能を果たす。
【0053】
書き込み管理モジュール24および読み出し管理モジュール30に関する上記の動作は、読み出しポインタPLおよび書き込みポインタPEを用いてリングバッファメモリ16で書き込みロック手段および読み出しロック手段を実施する一例にすぎず、読み出しポインタPLおよび書き込みポインタPEの値に応じてリングバッファメモリ16を読み出しロックおよび書き込みロックの状態にするために、これ以外の実施例または変形例を検討してもよいことは当業者には明らかであろう。
【0054】
これらの特徴により、DMAコントローラ10または20は、転送元12から送られるデータの入力フローと転送先14へ送る出力フローとを同期することができる。
【0055】
その結果、
図2に示した利点が得られる。この図では、集積回路50はマイクロプロセッサ52と、このマイクロプロセッサ52が処理または使用したデータを一時的に格納するローカルメモリなどのデータ転送元12、何らかの周辺機器または機能演算子などの転送先14、およびリングバッファメモリ16を備える実施変形例に適したDMAコントローラ20とを有する。これらの素子52、12、14および20はすべて、従来のデータ転送バス54で互いに接続されている。
【0056】
マイクロプロセッサ52およびDMAコントローラ20が正常に動作した場合、マイクロプロセッサはデータを転送元12の例えばバッファメモリに転送する(ステップB)が、これは転送元12と転送先14との間でDMAコントローラが行う転送(ステップC)とは無関係に行われる。実際これは、書き込みおよび読み出しをロックするリングバッファメモリ16があることにより、前述したようなDMAコントローラ20が果たすことができる同期機能によって可能になったことである。
【0057】
逆に、DMAコントローラ20がこの機能を果たせなかった場合、要求(ステップA)および肯定応答(ステップD)の従来のプロトコルをマイクロプロセッサ52とDMAコントローラ20との間で実施する必要があり、このプロトコルは、マイクロプロセッサ52と転送元12との間のデータブロックごとの書き込みに対応している。転送元12と転送先14との間のデータ転送は、一連のステップ:
− マイクロプロセッサ52がデータブロックを転送する要求をDMAコントローラに伝達する伝達ステップA
− マイクロプロセッサ52のデータブロックを、このために転送元12に規定したバッファメモリに伝達する伝達ステップB
− DMAコントローラが転送元12から転送先14へデータブロックを転送する転送ステップC
− 新たなデータブロックを送ることができるようにDMAコントローラが肯定応答をマイクロプロセッサ52へ伝達する伝達ステップD
によって実行する。
【0058】
したがって、送信した各データに対して同期するようになっている前述したようなDMAコントローラ20によって、データ転送のステップを簡易化することができ、とりわけステップAおよびDをなくすことができることは明らかである。
【0059】
この同期機能と組み合わせて、本発明の一実施形態では、読み出し演算または書き込み演算に柔軟性を加えるために所定の更新回路に従って、リングバッファメモリ16に対応する読み出しポインタおよび書き込みポインタの少なくとも1つを更新するように設計したファームウェア(例えばファームウェア40)を備えることができる。この場合、DMAコントローラ10または20の同期能力を失わないように、新たな読み出しポインタまたは書き込みポインタ、すなわち
図3Aおよび3Bに符号PTを付したワークポインタを規定する必要がある。このワークポインタは、前述の書き込みポインタPEおよび読み出しポインタPLとは別のものである。前述のポインタと同じく、このワークポインタは格納手段38に格納する。ワークポインタは変化し、ワークポインタが行う読み出し演算または書き込み演算後に毎回ファームウェア40によって更新するようにする。
【0060】
特に、ファームウェア40を、ワークポインタPTの更新回路がリングバッファメモリ16に少なくとも1つのアドレスジャンプを含むように規定することができる。この新たなポインタPT、およびそのファームウェアであって、
図3Aに示したように前方および後方へアドレスジャンプすることによる変位などを可能にするファームウェア40をリングバッファメモリ16に導入することにより、DMAコントローラ10または20が読み出しおよび書き込みのトラッキングを管理するこのリングバッファメモリ16は、単なるFIFO方式のリストとして使用されるものではない。リングバッファメモリによってDMAコントローラ10または20は、転送するデータシーケンスを転送元12と転送先14との間で自ら再び並び替えることができる。
【0061】
好適な一実施変形例では、ワークポインタPTは読み出しポインタである。
【0062】
この変形例では、第1の読み出しポインタPLは、データの書き込み用にメモリスペースを空ける読み出しポインタである。つまり、この読み出しポインタを更新するたびに、この第1の読み出しポインタPLが指定した旧アドレスのセルから新アドレスのセルの1つ前のセルまでのメモリスペースは、書き込み用に自動的に空けられる。これは前述したように、リングバッファメモリ16の書き込みポインタPEのアドレスと読み出しポインタPLのアドレスの1つ前のアドレスとの間で、ベースアドレスから先頭アドレスに向かう方向にあるメモリスペースが、原則として書き込み用の空きスペースとみなされるために起こることである。
【0063】
一方ワークポインタPTは、読み出したデータを保存する読み出しポインタである。つまり、リングバッファメモリ16にデータを読み出して転送先14に転送する必要があるとき、このデータはワークポインタPTが示したアドレスで読み出されるが、この読み出しの後にワークポインタPTを更新しても、これに該当する書き込み用の基本セルは空にならない。実際に、読み出しによるワークポインタPTの変位は、必ずしもインクリメントされない。この変位は、ファームウェア40が任意の順序であらかじめ自由に決定し、好ましくは第1の読み出しポインタPLと書き込みポインタPEとの間で変位する。適用例によれば、ワークポインタPTが最初に読み出したデータをとりわけ再び読み出すことができ、データはリングバッファメモリ16に格納した順序とは異なる順序で読み出すことができる。したがって、メモリスペースを空けることができるのは第1の読み出しポインタを更新する1回のみである。
【0064】
例えば、MPEG規格2または4(英語の「Moving Picture Expert Group」)に適したビデオのデータフローを転送する適用例では、リングバッファメモリ16に格納したビデオ係数の8行に対して、ファームウェア40は、マクロブロック8×8のワークポインタPTをマクロブロック8×8に、各マクロブロックで所定の順序に従って変位させるための命令を備えることができる。この8行のマクロブロックすべてをワークポインタPTが読み出すと、ビデオ係数の8行は第1の読み出しポインタPLをマイクロプログラムして更新することによってバッファメモリで空となる。
【0065】
したがって、ワークポインタPTが読み出しポインタであるこの実施変形例では、ファームウェア40は、2つの読み出しポインタを更新するために読み出し管理モジュール30が実行する、
− ワークポインタPTを対象とする適用例に従って、前方および/または後方へのアドレスジャンプを含むことができる命令と、
− アドレスジャンプを含むことができるが、前方のみに、ワークポインタPTおよび第1の読み出しポインタPLに対してプログラムした変位に応じたアドレスジャンプを含むことが出来る命令と
を有することがわかる。
【0066】
逆に、ファームウェア40は、書き込みポインタPEを更新するための命令を備えておらず、書き込みポインタは、例えばリングバッファメモリ16でデータの書き込み演算を行うたびに、アドレスジャンプなしにインクリメント方式でシーケンサによって更新する。
【0067】
また、
図3Aに示すように、ワークポインタPTの変位は、実際に読み出すデータを持っているリングバッファメモリ16の領域をこのワークポインタが指定するようにプログラムする必要があることがわかる。ワークポインタが、
図3Bに示すように、更新後にこの領域の外部を指定した場合、目的とする適用例に応じてエラーメッセージを発生させるか、書き込みポインタPEが追いつくまでワークポインタをこの位置に固定することができる。
【0068】
前例と対称的な一実施変形例では、ワークポインタPTは書き込みポインタであってもよい。
【0069】
この第2の変形例では、書き込みポインタPEは、リングバッファメモリ16にデータを書き込むためにメモリスペースを確保する書き込みポインタである。つまり、書き込みポインタを更新するたびに、旧アドレスのセルからこの書き込みポインタPEが指定する新アドレスのセルの1つ前のセルまでのメモリスペースは、読み出し用に自動的に確保される。
【0070】
一方ワークポインタPTは、ポインタPEが確保したメモリスペースに所定の任意の順序でデータを書き込むのに効果的な書き込みポインタである。つまり、リングバッファメモリ16にデータを書き込む必要があるとき、このデータはワークポインタPTが示すアドレスに書き込まれ、その更新は必ずインクリメント回路に従うわけではない。ワークポインタの変位は、確保したメモリスペースに任意の順序でファームウェア40が自由に事前に決定する。
【0071】
したがって、ワークポインタPTが書き込みポインタであるこの第2の実施変形例では、ファームウェア40は、2つの書き込みポインタを更新するために書き込み管理モジュール24が実行する、
− ワークポインタPTを対象とする適用例に従って、前方および/または後方へのアドレスジャンプを含むことができる命令と、
− アドレスジャンプを含むことができるが、前方のみに、ワークポインタPTおよび書き込みポインタPEに対してプログラムした変位に応じたアドレスジャンプを含むことが出来る命令と
を有することがわかる。
【0072】
逆に、ファームウェア40は、読み出しポインタPLを更新するための命令を備えておらず、読み出しポインタは、例えばリングバッファメモリ16でデータの読み出し演算を行うたびに、アドレスジャンプなしにインクリメント方式でシーケンサによって更新する。
【0073】
その上、変形例では、ダイレクトメモリアクセスコントローラは書き込みワークポインタと読み出しワークポインタとを同時に備えている。
【0074】
そのためダイレクトメモリアクセスコントローラは、各ワークポインタに固有の所定の更新回路であって、特にアドレスジャンプによってリングバッファメモリでの前方および/または後方への変位を含むことができる更新回路に従って、書き込み実行後に毎回書き込みワークポインタを更新する更新手段を有するとともに、読み出し実行後に毎回読み出しワークポインタを更新する更新手段も有する。前述したように、読み出しポインタの変位は、読み出し用に確保したリングバッファメモリ領域(読み出しポインタPLから書き込みポインタPEの1つ前のアドレスまでと規定した領域)をこの読み出しポインタが指定するようにプログラムする必要がある。同じく、書き込みワークポインタの変位は、書き込み用に空いているメモリ領域(書き込みポインタPEから読み出しポインタPLの1つ前のアドレスまでと規定した領域)をこの書き込みワークポインタが指定するようにプログラムする必要がある。
【0075】
次に、DMAコントローラ10または20が実施することができるデータ転送方法の例について、前述の第1の実施変形例の背景に沿って詳述すると、ワークポインタPTは、読み出したデータを保存する読み出しポインタである。この方法の一連のステップを
図4に示す。
【0076】
第1のステップ100では、コントローラ10または20は、リングバッファメモリ16にデータを読み出す、または書き込む命令を待っている状態である。
【0077】
このステップ100は、リングバッファメモリ16にデータを書き込む命令に基づいて書き込みを開始するステップ102に続く。この書き込み開始ステップでは、書き込み管理モジュール24が作動する。非限定的な実施例を挙げると、このモジュールは、リングバッファメモリ16への書き込みがロックされているか否かを示す第1のディスクリプタの値を格納手段28から引き出す。
【0078】
次にテストステップ104では、この第1のディスクリプタの値に従い、対象とするデータの書き込みを続けるか否かを判断する。第1のディスクリプタが書き込みがロックされていることを示した場合、再びステップ100に進み、そうでなければステップ106に進む。
【0079】
ステップ106では、書き込み管理モジュール24は、書き込みポインタPEが指定するアドレスを格納手段28から引き出す。そしてこのモジュールは、これに該当する基本セルに対象とするデータの書き込みを実行する。
【0080】
その後、更新ステップ108では、書き込みポインタPEが指定したアドレスを、リングバッファメモリ16で基本セル1つ分インクリメントする。
【0081】
最後に、ステップ110では、書き込み管理モジュール24は、第1の読み出しポインタPLが指定するアドレスを格納手段28から引き出したのち、
− ステップ108での更新後に、書き込みポインタPEが指定したアドレスが第1の読み出しポインタPLが指定したアドレスに到達すると(メモリ16が満杯であることを示すと)、第1のディスクリプタが書き込みのロックを示すようにこのディスクリプタを修正する状態
− ステップ108での更新後に、第2のディスクリプタが読み出しロックを示しているが、書き込みポインタPEが指定したアドレスが第1の読み出しポインタPLが指定したアドレスと異なる場合、第2のディスクリプタが読み出しの許可を示すようにこのディスクリプタを修正する状態
である場合に、書き込みをロックする第1のディスクリプタの値および読み出しをロックする第2のディスクリプタの値を更新する場合がある。
【0082】
ステップ110のあとはステップ100に戻る。
【0083】
ステップ100は、リングバッファメモリ16にデータを読み出す命令に基づいて読み出しを開始するステップ112にも続く。この読み出し開始ステップでは、読み出し管理モジュール30が作動する。非限定的な実施例を挙げると、このモジュールは、リングバッファメモリ16への読み出しがロックされているか否かを示す第2のディスクリプタの値を格納手段28から引き出す。
【0084】
次にテストステップ114では、読み出し管理モジュール30は、転送先14が対象のデータを受信する準備ができているか否かを判断する。このテストは、いくつかの方法で行うことができる。DMAコントローラ10または20が出力バッファ36を有する場合、コントローラは、この出力バッファ36が満杯になっていない限りデータ転送を実行することができると考えることができる。さもなければ、従来の通信プロトコルにより、所定フォーマットのメッセージでデータを受信する容量を転送先14がDMAコントローラ10または20に伝達するようにする。転送先14へのデータ転送が不可能な場合は再びステップ100に進み、可能な場合は別のテストステップ116に進む。
【0085】
このテストステップ116では、第2のディスクリプタの値に従い、対象とするデータの読み出しを続けるか否かを判断する。第2のディスクリプタが読み出しがロックされていることを示した場合、再びステップ100に進み、そうでなければ読み取りステップ118に進む。
【0086】
このステップ118では、読み出し管理モジュール30は、ワークポインタPTが指定するアドレスを格納手段28から引き出す。そしてこのモジュールは、これに該当する基本セルに対象とするデータの読み出しを実行する。
【0087】
その後、更新ステップ120では、ワークポインタPTが指定したアドレスを、1つまたは複数の基本セルの前方か後方に、ファームウェア40の命令に応じて読み出し管理モジュール30が更新する。これもファームウェア40の命令によるものである場合、第1の読み出しポインタPLをこのステップでも1つまたは複数の基本セルの前方に更新することができる。
【0088】
最後に、ステップ122では、読み出し管理モジュール30は、場合によっては、
− ステップ120での更新後に、第1の読み出しポインタPLが指定したアドレスが書き込みポインタPEの指定するアドレスに到達すると(メモリ16が空であることを示すと)、第2のディスクリプタが読み出しロックを示すようにこのディスクリプタを修正する状態、
− ステップ120の更新後に、第1のディスクリプタが書き込みロックを示しているが、第1の読み出しポインタPLが指定したアドレスが書き込みポインタPEの指定するアドレスと異なる場合、第1のディスクリプタが書き込み許可を示すようにこのディスクリプタを修正する状態
である場合に、書き込みをロックする第1のディスクリプタの値および読み出しをロックする第2のディスクリプタの値を更新する。
【0089】
ステップ122のあとは、ステップ100に戻る。
【0090】
本発明の第2の実施形態によるダイレクトメモリアクセスコントローラを
図5に示している。第1の実施形態と同じ素子には同じ符号を付している。この第2の実施形態では、DMAコントローラ10は、データ転送元12からこのデータの複数の転送先14
1,...,14
i,...,14
nにバッファメモリ16を介してデータを転送する機能を持つ。
【0091】
本発明を実施するため、DMAコントローラ10はバッファメモリ1016への書き込みにアクセスできる必要があり、オプションとして読み出しにアクセスできる必要がある。
図5に示した例では、命令モジュール18を介して、バッファメモリ16の基本セルへの書き込みおよび読み出しにアクセスすることができる。一実施変形例では、符号20を付したDMAコントローラは、リングバッファメモリ16を搭載する格納媒体、および書き込みおよび読み出しアクセスを命令するモジュール18を備えていることがわかる。実際に、例えばCMOS型集積回路などの自律型チップに基づくシステム形態をとることができる。
【0092】
DMAコントローラ10または20は、転送元12から受信した各データをバッファメモリ16へ発信し、転送先14
1,...,14
i,...,14
nのうちの1つに転送されるようになっている各データはその後、DMAコントローラ10または20によってバッファメモリ16で読み出される。したがってバッファメモリ16は、転送元12と転送先14
1,...,14
i,...,14
nとの間の中間バッファの機能を果たす。
【0093】
図示していない本発明のもう一つの可能な実施形態では、DMAコントローラ10がバッファメモリ16を搭載せず、さらにこのコントローラ自体もバッファメモリ16のデータの読み出しにアクセスできないときは、転送先14
1,...,14
i,...,14
nがこの転送先に向けられたデータをバッファメモリ16で直接読み出す。しかし、この場合、詳述していない従来の方法では、データがDMAコントローラ10によって転送されないとしても、このコントローラはいずれにしても転送先による読み出し開始のメカニズムを維持する。
【0094】
この第2の実施形態では、格納手段38は、第1の実施形態の単一の読み出しポインタの代わりに複数の読み出しポインタPL1,...,PLi,...,PLnを有し、各読み出しポインタが1つの転送先である14
1,...,14
i,...,14
nにそれぞれ対応している。各読み出しポインタPLiは、次のデータを読み出して転送先14
iに転送することができるリングバッファメモリ16の基本セルのアドレスを指定する。
【0095】
バッファメモリ16は、サイズがポインタPBおよびPSの指し示したベースアドレスから先頭アドレスまでの基本セル数によって決まる循環型メモリであることから、書き込みポインタPEおよび読み出しポンタPL1,...,PLi,...,PLnが指定することのできるこのメモリの基本セルはそれぞれ、ベースアドレスから先頭アドレスまでのアドレスで識別する。
【0096】
ベースポインタPBおよび先頭ポインタPSは事前に決定され、常に一定となるようになっているが、書き込みポインタPEおよび読み出しポンタPL1,...,PLi,...,PLnは変化する。実際に、両ポインタは、更新する方向を決定するアドレスジャンプの有無にかかわらずインクリメントすることによって更新することができる。
【0097】
書き込みポインタPEは、さらに正確には、例えばリングバッファメモリへの書き込み演算に従ってベースアドレスから先頭アドレスに向かって基本セルからインクリメトすることによって、更新するようになっている。
【0098】
逆に、読み出しポインタPL1,...,PLi,...,PLnは、ファームウェア40
1,...,40
i,...,40
nを実行することによってそれぞれ更新する。この更新は、実際に該当する転送先14
iに転送することによってデータが格納されている基本セルを各読み出しポインタPLiが指定するように事前に設定する。ファームウェア40
1,...,40
i,...,40
nは、例えばリングバッファメモリ16と同じ格納媒体に格納する。一般にファームウェアは、リングバッファメモリ16で読み出し管理モジュールによって実行し、このモジュールは、DMAコントローラの内部または外部に設置する。
図5の特殊な例では、ファームウェアはさらに正確には、DMAコントローラ10または20の読み出し管理モジュール30によって実行する。
【0099】
DMAコントローラ10または20に読み出されて転送先14
1,...,14
i,...,14
nによって転送されるか、転送先14
1,...,14
i,...,14
nによって直接転送されるのを待つ間、リングバッファメモリ16に一時的に格納したデータは、更新する方向を考慮して書き込みポインタに対して最も後ろにある読み出しポインタPLiのアドレスと、書き込みポインタPEのアドレスの1つ前のアドレスとの間で、ベースアドレスから先頭アドレスに向かう方向にある。逆に、リングバッファメモリの書き込みポインタPEのアドレスと、書き込みポインタに対して最も後ろにある読み出しポインタPLiのアドレスの1つ前のアドレスとの間で、先頭アドレスからベースアドレスに向かう方向にあるメモリスペースは、書き込み用の空きスペースである。ディスクリプタPB、PS、PEおよびPL1,...,PLi,...,PLnに対応するリングバッファメモリ16のこの構造は
図7に示しており、これについては後述する。
【0100】
図5のダイレクトメモリアクセスコントローラ10または20の有利な動作を
図6に特殊で単純な適用例として示しているが、これに限定されるものではない。この適用例によれば、転送元12は、転送先14
1に転送されるデータ(白点)と転送先14
2に転送されるデータ(黒点)とが交互になったデータシーケンスを供給する。
【0101】
書き込みポインタPEのアドレスごとにインクリメント式に更新することにより、これらのデータを転送元12から供給されたシーケンスの順にリングバッファメモリ16に格納する。
【0102】
転送先14
1に転送されるデータは、転送先14
1に対して読み出す次のデータの基本セルを常に指定する読み出しポインタPL1を更新するファームウェア40
1を実行することによって、リングバッファメモリ16で読み出される。したがって、目的とする適用例に対してこのファームウェア40
1が実施する更新回路は、転送先14
1に対して実行したデータの読み取りごとにアドレスジャンプして読み出しポインタPL1をインクリメントし、転送先14
2に割り当てられたデータを読み出さないようにすることである。
【0103】
同じように、転送先14
2に転送予定のデータは、転送先14
2に対して読み出す次のデータの基本セルを常に指定する読み出しポインタPL2を更新するファームウェア40
2を実行することによって、リングバッファメモリ16で読み出される。目的とする適用例に対してこのファームウェア40
2が実施する更新回路も、転送先14
2に対して実行したデータの読み取りごとにアドレスジャンプして読み出しポインタPL2をインクリメントし、転送先14
1に割り当てられたデータを読み出さないようにすることである。
【0104】
2つのファームウェア40
1および40
2は独立しているため、DMAコントローラ10または20によって平行して実行することができ、どちらか一方をロックしても、とりわけ該当する転送先が読み出しをロックするため、もう一方に影響を与えることはない。したがって、DMAコントローラが簡易かつ効率的に、複数の転送先へのデータ転送を管理することができることは明らかであり、1つの転送先のみが他の全データ転送をロックすることはできない。
【0105】
1つの転送先にロックされることなく転送するこの機能と組み合わせることによって、本発明の特殊な一実施形態では、DMAコントローラが入力フローと出力フローとを同期する機能も果たせるようにすることができる。
【0106】
この特殊な実施形態を実施するため、DMAコントローラは前述のように定義した読み出し管理モジュール30を備えている必要がある。この場合、この読み出し管理モジュール30を、
− 読み出しポインタの集合PL1,...,PLi,...,PLnのなかから、所定の更新方向を考慮して書き込みポインタPEで示した基本セルに対して最も後ろにある基本セルを示すPLSを付した読み出しポインタを選択し、
− 転送先のうちの任意の1つに対して行ったデータの読み出しに続いて、読み出しポインタPL1,...,PLi,...,PLnのうちの任意の1つを更新するたびに、この選択を実行する
ようにプログラムすることができる。
【0107】
この考えに基づき、データ書き込み管理モジュール24は、とりわけ書き込みポインタPEと選択読み出しポインタPLSとの相対値に応じて、リングバッファメモリ16にデータ書き込みを許可したり書き込みをロックしたりするように設計する。この管理モジュールはまた、シーケンサを用いて基本セル1つ分をインクリメントして書き込みポインタPEを自動的に更新するようにも設計する。さらに正確には、本発明のこの特殊な実施形態の単純な変形例では、リングバッファメモリ16に書き込むデータを書き込みポインタPEが示すアドレスに書き込む必要がある。書き込み管理モジュール24が事前に書き込みポインタPEを更新することにより、この書き込みポインタの指定するアドレスが選択読み出しポインタPLSの指定するアドレスに到達したり追い越したりする場合(メモリが満杯になる)は、書き込みをロックしなければならない。
【0108】
これと同じ考えに基づき、データ読み出し管理モジュール30は、とりわけ書き込みポインタPEと選択読み出しポインタPLSとの相対値に応じて、リングバッファメモリ16にデータ読み出しを許可したり読み出しをロックしたりするように設計する。この管理モジュールはまた、各ファームウェア40
iを実行することによって各読み出しポインタPLiを更新するようにも設計する。さらに正確には、本発明のこの特殊な実施形態の単純な変形例では、リングバッファメモリ16に読み出して転送先14
iに送るデータを読み出しポインタPLiが示すアドレスに読み出す必要がある。読み出し管理モジュール30が事前に読み出しポインタPLiを更新することにより、この選択読み出しポインタPLSの指定するアドレスが書き込みポインタPEの指定するアドレスに到達したり追い越したりする場合(メモリが空になる)は、読み出しをロックしなければならない。
【0109】
具体的には、リングバッファメモリ16への読み出しおよび書き込みのロックおよびロック解除が上記のとおりに動作するために、書き込みポインタPEの更新後に毎回書き込み管理モジュール24を、
− 書き込みポインタPEが選択読み出しポインタPLSに到到達すると(メモリが満杯であることを示すと)、リングバッファメモリ16へのデータの書き込みをすべてロックし、
− 読み出しがロックされ、書き込みポインタPEが再び選択読み出しポインタPLSを追い越すと、リングバッファメモリ16へのデータの読み出しのロックを解除する
ようにプログラムすることができる。
【0110】
同じく、読み出しポインタPLiの更新後に毎回読み出し管理モジュール30を、
− 選択読み出しポインタPLSが書き込みポインタPEに到到達すると(メモリが空であることを示すと)、リングバッファメモリ16へのデータの読み出しをすべてロックし、
− 書き込みがロックされ、選択読み出しポインタPLSが再び書き込みポインタPEを追い越すと、リングバッファメモリ16へのデータの書き込みのロックを解除する
ようにプログラムすることができる。
【0111】
このようにして書き込み管理モジュール24は、メモリ16が満杯のときに書き込みをロックし、空のメモリが再び満杯になると読み出しのロックを解除する機能を果たす。読み出し管理モジュール30は、メモリ16が空のときに読み出しをロックし、満杯のメモリ16が再び空になると書き込みのロックを解除する機能を果たす。
【0112】
書き込み管理モジュール24および読み出し管理モジュール30に関する上記の動作は、書き込みポインタPEおよび読み出しポインタPL1,...,PLi,...,PLnを用いてリングバッファメモリ16で書き込みロック手段および読み出しロック手段を実施する一例にすぎず、書き込みポインタPEおよび読み出しポインタPL1,...,PLi,...,PLnの値に応じてリングバッファメモリ16を読み出しロックおよび書き込みロックの状態にするために、これ以外の実施例または変形例を検討してもよいことは当業者には明らかであろう。
【0113】
これらの特徴により、DMAコントローラ10または20は、転送元12から送られるデータの入力フローと転送先14
1,...,14
i,...,14
nへ送る出力フローとを同期することができる。
【0114】
その結果、マイクロプロセッサと、例えばマイクロプロセッサが処理または使用したデータを一時的に格納するローカルメモリであるデータ転送元12と、例えば周辺機器または任意の機能演算子である転送先14
1,...,14
i,...,14
nと、リングバッファメモリ16を含む実施変形例20に適したDMAコントローラとを備える集積回路では、マイクロプロセッサは、転送元12と転送先14
1,...,14
i,...,14
nとの間でDMAコントローラが実行する転送とは関係なく、転送元12にデータを転送することができる。
【0115】
このDMAコントローラの同期機能と組み合わせて、第1の変形例によれば、各転送先14
iに対して新たな読み出しポインタである「ワークポインタ」と呼ぶものを規定する。各転送先14
iに対して、このワークポインタは前述のように定義した読み出しポインタPLiとは異なるものである。ワークポインタは、読み出しポインタと同じように格納手段38に格納される。ワークポインタは変化し、読み出し演算の実行後に毎回ファームウェア40
iによって更新されるようになっている。
図7は、2つの転送先14
1および14
2を備える単純な実施形態を示し、2つのワークポインタPT1およびPT2は書き込みポインタPEおよび読み出しポインタPL1およびPL2に加わる。
【0116】
したがってファームウェア40
iは、転送元12が転送するシーケンスの順序ではない順序で転送先14
iに送られるデータをワークポインタPTiの更新回路が読み出すことができるように規定する。この新たなポインタPTiを各転送先14
iに導入し、
図7に示すようにリングバッファメモリ16、さらに正確には転送先14
iに割り当てられたデータリストで前方および後方にアドレスジャンプすることによってこのワークポインタを更新する可能性が加わることにより、このデータリストは単なるFIFO方式のリストとして使用されなくなる。ワークポインタPT1...、PTi,...,PTnによって、DMAコントローラ10または20は、転送元12と転送先14
1,...,14
i,...,14
nの任意の1つとの間で転送するデータシーケンスをそれぞれ自ら再び並び替えることができる。
【0117】
この第1の変形例では、選択読み出しポインタPLSは、データを書き込むためにメモリスペースを空ける読み出しポインタである。つまり、読み出しポインタのうちの1つを選択読み出しポインタとして選択するたびに、選択読み出しポインタPLSが指定した旧アドレスのセルから新アドレスのセルの1つ前のセルまでのメモリスペースは、書き込み用に自動的に空けられる。これは前述したように、リングバッファメモリ16の書き込みポインタPEのアドレスと選択読み出しポインタPLSのアドレスの1つ前のアドレスとの間で、ベースアドレスから先頭アドレスに向かう方向にあるメモリスペースが、原則として書き込み用に空いているスペースとみなされるために起こることである。
【0118】
図7の単純な例では、書き込みポインタPEに対して最も後ろにあるのは読み出しポインタPL1である。したがってこの読み出しポインタが、読み出して転送先に転送するべきデータを格納しているメモリスペースの起点を規定するために選択され、基準点とみなされる。さらに正確には、符号Aを付したメモリスペースは、まだ読み出されていない転送先14
1に割り当てたデータと、読み出された転送先14
2に割り当てたデータとがあるメモリ領域を指している。つまり、この領域はまだ書き込み用に空いてはいない。符号Bを付したメモリスペースは、まだ読み出されていない転送先14
1および14
2に割り当てたデータがあるメモリ領域を指している。つまりこの領域は書き込み用にはなおさら空いていない。
【0119】
一方各ワークポインタPTiは、読み出したデータを保存する読み出しポインタである。つまり、リングバッファメモリ16にデータを読み出して転送先14
iに転送する必要があると、このデータはワークポインタPTiが示したアドレスで読み出されるが、この読み出しの後にワークポインタPTiを更新しても、これに該当する書き込み用の基本セルは空にならない。実際に、読み出しによるワークポインタPTiの変位は、転送先14
iに割り当てられたアドレスが昇順していくデータシーケンス通りにはならない。この変位は、ファームウェア40
iによって任意の順序であらかじめ自由に決定し、好ましくは第1の読み出しポインタPLiと書き込みポインタPEとの間に決定する。適用例によれば、ワークポインタPTiが最初に読み出したデータであれば、とりわけ再び読み出すことができ、データはリングバッファメモリ16に格納した順序とは異なる順序で読み出すことができる。したがって、メモリスペースを空けることができるのは第1の読み出しポインタを更新する1回のみである。
【0120】
したがって、各ワークポインタPTiが読み出しポインタであるこの実施変形例では、各ファームウェア40
iは、転送先14
iに対応する2つの読み出しポインタを更新するために読み出し管理モジュール30が実行する、
− ワークポインタPTiを対象とする適用例に従って、前方および/または後方へのアドレスジャンプを含むことができる命令と、
− アドレスジャンプを含むことができるが、前方のみに、転送先14
iに割り当てられたデータがあるアドレスに応じて、またワークポインタPTiおよび第1の読み出しポインタPLiに対してプログラムした変位に応じたアドレスジャンプを含むことが出来る命令と
を有することがわかる。
【0121】
逆に、どのファームウェア40
1,...,40
i,...,40
nも、書き込みポインタPEを更新するための命令を備えておらず、書き込みポインタは、例えばリングバッファメモリ16でデータの書き込み演算を行うたびに、アドレスジャンプなしにインクリメント方式でシーケンサによって更新される。
【0122】
また、
図7に示したように、ワークポインタPT1、PTi、PTnの変位は、それぞれが転送先14
1,...,14
i,...,14
nに読み出すデータを実際に持っているリングバッファメモリ16の領域をこれらのワークポインタが指定するようにプログラムする必要があることもわかる。ワークポインタの1つが、更新後にこの領域の外部を指定した場合、目的とする適用例に応じてエラーメッセージを発生させるか、書き込みポインタPEが追いつくまでワークポインタをこの位置に固定することができる。本発明によれば、これによってロックしたワークポインタPTiに相当するファームウェア40の実行をロックするが、別の転送先14
jに対応する他のファームウェア40
jすべての実行をロックすることはない。
【0123】
前例と対称的な一実施変形例では、データシーケンスを再び並び替えるため、単一のワークポインタPTを書き込みポインタとして規定する。
【0124】
この第2の変形例では、書き込みポインタPEは、リングバッファメモリ16にデータを書き込むためにメモリスペースを確保する書き込みポインタである。つまり、書き込みポインタを更新するたびに、旧アドレスのセルからこの書き込みポインタPEが指定する新アドレスのセルの1つ前のセルまでのメモリスペースは、読み出し用に自動的に確保される。一方ワークポインタPTは、ポインタPEが確保したメモリスペースに所定の任意の順序でデータを書き込むのに効果的な書き込みポインタである。
【0125】
しかし、この第2の変形例は第1の変形例ほど検討する有益性がない。なぜならこの第2の変形例では、リングバッファメモリ16でデータの書き込み側にロックが起こる可能性があるからである。そのため、DMAコントローラによってデータを転送する適用例では、書き込み側である上流よりも、リングバッファメモリの読み出し側である下流でロックを管理する方が好ましい。
【0126】
次に、複数の転送先14
iに対するデータ転送方法の一例について、前述の第1の実施変形例の背景に沿って詳述すると、DMAコントローラは、リングバッファメモリ16への書き込みおよび読み出しをロックするのを管理し、ワークポインタPT1,...,PTi,...,PΤnを、読み出したデータを保存する読み出しポインタとして導入する。この方法の一連のステップを
図8に示している。
【0127】
どのステップも
図4のステップと同じであるが、ステップ112から122は各ワークポインタPT1,...,PTi,...,ΡΤnに対して実施するため、符号は112i...122iである。さらに正確には、各ファームウェア40
iは、ステップ112iから122iを実行するようになっており、複数のファームウェアを平行して実行することができ、一方をロックすることでもう一方がロックされることはないことがわかる。
【0128】
さらに、各転送先に対して読み出しポインタPLiに対応するポインタPTiを使用することは必須ではなく、単一の読み出しポインタPLを使用してもよい。この場合、1つのみの読み出しワークポインタを使用する場合と同様に、各読み出しワークポインタの変位は、読み出し用に確保したリングバッファメモリの領域(読み出しポインタPLから書き込みポインタPEの1つ前のアドレスと規定した領域)をワークポインタが指定するようにプログラムする必要がある。
【0129】
対称的に、複数の書き込みワークポインタPTiをさまざまな転送元に使用する場合に、単一の書き込みポインタPEを使用してもよい。各書き込みワークポインタの変位は、書き込み用に空いているメモリ領域(書き込みポインタPEから読み出しポインタPLの1つ前のアドレスと規定した領域)をワークポインタが指定するようにプログラムする必要がある。
【0130】
前述したダイレクトメモリアクセスコントローラおよびそのデータ転送のための動作により、マイクロプロセッサとこれに接続するコントローラとの間で同期する必要がないだけでなく、とりわけ転送先が望むデータシーケンスが転送元から供給されるものと同じではない場合に、データ転送に柔軟性を加えることも可能になることが明らかになる。これは、例えばMPEG規格の背景で、画像または映像データの処理および転送に適用する場合に有益な特性である。
【0131】
本発明は、ここで検討した実施形態に限定されるものではないこともわかるであろう。
【0132】
とりわけ前述の実施形態では、説明を簡潔にするために1つの転送元から1つの転送先へ転送する適用例を検討したが、本発明の原理はこれと同様に、複数の転送元および/または複数の転送先にも適用される。同じく、本発明によるダイレクトメモリアクセスコントローラは、複数のリングバッファメモリを管理できるため、これに対応する複数のディスクリプタ一式(ポインタ、ロックのディスクリプタなど)も管理することができる。
【0133】
さらに、ダイレクトメモリアクセスコントローラは前述したように、1つまたは複数の書き込みポインタPEおよび1つまたは複数の読み出しポインタPLを管理できるだけでなく、複数の読み出しおよび/または書き込みワークポインタPTも管理することができる。
【0134】
さらに一般的には、ここに開示した教示に照らし合わせて、上に記載した実施形態にさまざまな修正を加えてもよいことは当業者には明らかであろう。以下の特許請求の範囲では、使用した用語が請求項を本明細書で明らかにした実施形態に限定するものと解釈してはならず、本文の記載およびそこから予見される内容は、ここに開示した教示の実装に一般知識を応用することによって当業者が到達しうる範囲内であることから、請求項が範囲に含めると想定するあらゆる同等のものも含まれると解釈すべきである。