(57)【要約】【課題】リングバッファメモリ制御装置において、ポインタにエラーが発生した場合でも、双方のポインタアドレスの誤りを自己修復することができるリングバッファのメモリ制御方法を提供することを目的とする。【解決手段】入力されたデータが循環的に書き込みおよび読み出しが可能に構成されたリングバッファメモリの制御方法であって、リングバッファメモリ１１に記憶させるデータ毎の先頭アドレスを記憶させ、先頭アドレスから書き込みアドレスをインクリメントさせて記憶させるとともに、書き込みが正常に完了する毎に、書き込み完了信号を該先頭アドレスに付随させてディスクリプタレジスタ４に記憶させ、この書き込み完了信号を読み取り、この付随させた書き込み完了信号の前記先頭アドレスから前記リングバッファメモリのデータを順次読み出すようにしたことを特徴とするリングバッファメモリの制御方法。【選択図】図１
2008108066.tif 000002
【特許請求の範囲】
【請求項１】
入力されたデータが循環的に書き込みおよび読み出しが可能に構成されたリングバッファメモリを制御するリングバッファメモリ制御装置であって、
前記リングバッファメモリに前記データを循環的に書き込むことを制御する書き込み制御部と、
前記書き込み制御部によって前記リングバッファメモリに書き込まれた前記データの読み出しを循環的に読み出すことを制御する読み出し制御部と、
前記書き込み制御部で制御され、前記リングバッファメモリに書き込むデータの先頭アドレスと、該先頭アドレスのデータが前記リングバッファメモリに正常に書き込まれたことを示すフラグとを該先頭アドレスに付随させて記憶するディスクリプタレジスタと、
前記リングバッファメモリの書き込みアドレスを指定するＷＰ（ライトポインタ）と前記リングバッファメモリの読み出しアドレスを指定するＲＰ（リードポインタ）との差を求め、前記リングバッファメモリが満杯か、または空の状態にあるかを判定し、前記ＷＰ及び前記ＲＰのアドレスの指定の誤りを検出するポインタエラー検出部と
を備え、
前記書き込み制御部は、入力されたデータが前記リングバッファメモリに正常に書き込まれた場合、その先頭アドレスを、前記ディスクリプタレジスタを介して前記読み出し制御部に転送し、前記読み出し制御部は、該先頭アドレスをもとに読み出しを制御するようにしたことを特徴とするリングバッファメモリ制御装置。
【請求項２】
前記書き込み制御部は、入力されたデータを読み取り前記リングバッファメモリの書き込みを制御する入力制御部と、
前記入力制御部で制御され、前記入力制御部から転送されたデータのワード数をカウントするワード数カウンタと、
前記入力制御部で制御され、前記入力制御部から転送された前記リングバッファメモリの前記データ毎の先頭アドレスから書き込みアドレスを順次インクリメントさせて発生させるＷＰカウンタと、
前記入力制御部で制御され、前記データ毎の書き込みアドレス（ＷＰ）を記憶させるＷＰ保持部と、
前記入力制御部で制御され、前記ＷＰ保持部に保持された前記ＷＰのデータから、正常に記憶された前記データの先頭アドレスを選択して、前記ディスクリプタレジスタに転送するセレクタとからなる請求項１に記載のリングバッファメモリ制御装置。
【請求項３】
前記読み出し制御部は、前記ディスクリプタレジスタに記憶された前記データ毎の先頭アドレスもとに、前記リングバッファメモリに記憶された前記データの読み出しを制御する出力制御部と、
前記出力制御部で制御され、前記出力制御部から転送されたデータのワード数をカウントするワード数カウンタと、
前記出力制御部で制御され、前記ディスクリプタレジスタに記憶された前記データ毎の先頭アドレスから読み出しアドレスを順次インクリメントさせて発生させるＲＰカウンタと、
前記出力制御部で制御され、前記データ毎の先頭アドレスを前記ＲＰカウンタに選択的に転送するセレクタとからなる請求項１に記載のリングバッファメモリ制御装置。
【請求項４】
入力されたデータが循環的に書き込みおよび読み出しが可能に構成されたリングバッファメモリの制御方法であって、
前記リングバッファメモリに記憶させるデータ毎の先頭アドレスを記憶させ、
前記先頭アドレスから書き込みアドレスをインクリメントさせて記憶させるとともに、書き込みが正常に完了する毎に、書き込み完了信号を該先頭アドレスに付随させて記憶させ、
前記書き込み完了信号を読み取り、この付随させた書き込み完了信号の前記先頭アドレスから前記リングバッファメモリのデータを順次読み出すようにしたことを特徴とするリングバッファメモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、循環的に書き込み及び読み出しが可能に構成されたリングバッファメモリを制御するためのリングバッファメモリ制御装置であって、書き込むべきアドレスを示すライトポインタ及び読み出すべきアドレスを示すリードポインタに誤りが発生した時に、この誤りを自己修復してリングバッファメモリの制御動作を継続可能とするリングバッファメモリ制御装置及びリングバッファメモリの制御方法に関する。
【背景技術】
【０００２】
一般に、データ処理装置では、装置の動作速度と受信するデータの受信速度との差を吸収する目的でバッファメモリが使用され、このようなバッファメモリの構成としては、データをＦＩＦＯ（First In First Out）方式で記憶が可能な、論理的にリング構造を持つリングバッファメモリが使用されている。
【０００３】
図６にこのようなリングバッファメモリを制御する従来のリングバッファメモリ制御装置の構成を示す。
【０００４】
従来のリングバッファメモリ制御装置は、リングバッファメモリ１１へ入力されたデータの書き込みを制御する書き込み制御部１２と、書き込まれたデータの読み出しを制御する読み出し制御部１３と、書き込み読み出し中のリングバッファメモリ１１の書き込みエリアが満杯であるかどうかを検出するFULL検出部１４と、空であるかどうかを検出するEMPTY検出部１５とからなる。
【０００５】
また、書き込み制御部１２は、入力されたデータのリングバッファメモリ１１の書き込みを制御する入力制御部１２ａと、リングバッファメモリ１１の書き込みアドレスを順次指定するＷＰカウンタ１２ｂとからなる。
【０００６】
同様に、読み出し制御部１３は、リングバッファメモリ１１に書き込まれたデータの読み出しを制御する出力制御部１３ａと、読み出しアドレスを順次指定するＲＰカウンタ１３ｂとからなる。
【０００７】
リングバッファメモリ１１が満杯であるか、空であるかはライトポインタ(以下ＷＰと称す)とリードポインタ(以下ＲＰと称す)のアドレスを比較して検出することができる。
【０００８】
このリングバッファメモリ１１の構成は、ＲＡＭ等のバッファメモリのアドレッシングを工夫して構成され、ＲＰを先頭、ＷＰを最後とする領域のアドレスが空状態となる。
【０００９】
このリングバッファメモリ１１がノイズ等の一時的な障害でＷＰカウンタ１２ｂ及びＲＰカウンタ１３ｂが誤動作した場合、双方のポインタがずれたまま移動し、読み出したデータ及びリングバッファメモリ内の有効データ数は異常なまま動作を続ける問題がある。
【００１０】
例えば、図７は入力されたデータを書き込み中にＷＰカウンタが何らかの理由で誤動作した場合の動作を示す。
【００１１】
このリングバッファメモリは、図７（ｂ）、（ｃ）に示すように、１Ｂｙｔｅ×０７ｈ（ｈは１６進数を示す）のメモリ容量を備え、このリングバッファメモリに図６（ａ）に示すdata１乃至data４のデータが、夫々１乃至４までの４つのワードデータで構成され、時系列に入力されるとする。
【００１２】
ここで、先頭アドレスは００ｈからインクリメントされるＷＰカウンタが、何らかの原因で００２ｈから００５ｈに誤ってカウントされたとすると、data２の書き込みは先頭アドレスが００６から開始され、ＲＰは、次のdata２のデータを００４ｈから００ｈ（５乃至８）までを順次循環して読み出す。
【００１３】
このように、ＷＰ、ＲＰのアドレスが一時的にエラーを発生すると、ＷＰ及びＲＰはずれたまま、異常な状態のまま動作を続ける。
【００１４】
ところで、リングバッファメモリ制御装置及びリングバッファメモリの制御方法に関しては、動作中にリングバッファメモリの容量を動的に変更することの出来るリングバッファメモリ制御装置がある（例えば、特許文献１参照。）。
【特許文献１】特開２０００−３３０７６１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１５】
上述したような従来のリングバッファメモリ制御装置、及びリングバッファメモリの制御方法では、ＷＰカウンタ及びＲＰカウンタがノイズ等一時的に誤動作した場合、双方のポインタがずれたまま移動し、異常な動作を続ける問題があった。
【００１６】
本発明は上述した問題点を解決するためになされたもので、ポインタにエラーが発生した場合でも、双方のポインタアドレスの誤りを自己修復することができるリングバッファメモリ制御装置、及びリングバッファメモリの制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１７】
上記目的を達成するために、本発明のングバッファ制御装置は、入力されたデータが循環的に書き込みおよび読み出しが可能に構成されたリングバッファメモリを制御するリングバッファメモリ制御装置であって、前記リングバッファメモリに前記データを循環的に書き込むことを制御する書き込み制御部と、前記書き込み制御部によって前記リングッファメモリに書き込まれた前記データの読み出しを循環的に読み出すことを制御する読み出し制御部と、前記書き込み制御部で制御され、前記リングバッファメモリに書き込むデータの先頭アドレスと、該先頭アドレスのデータが前記リングバッファメモリに正常に書き込まれたことを示すフラグとを該先頭アドレスに付随させて記憶するディスクリプタレジスタと、前記リングバッファメモリの書き込みアドレスを指定するＷＰ（ライトポインタ）と前記リングバッファメモリの読み出しアドレスを指定するＲＰ（リードポインタ）との差を求め、前記リングバッファメモリが満杯か、または空の状態にあるかを判定し、前記ＷＰ及び前記ＲＰのアドレスの指定の誤りを検出するポインタエラー検出部とを備え、前記書き込み制御部は、入力されたデータが前記リングバッファメモリに正常に書き込まれた場合、その先頭アドレスを、前記ディスクリプタレジスタを介して前記読み出し制御部に転送し、前記読み出し制御部は、該先頭アドレスをもとに読み出しを制御するようにしたことを特徴とする。
【００１８】
上記目的を達成するために、本発明のリングバッファメモリの制御方法は、入力されたデータが循環的に書き込みおよび読み出しが可能に構成されたリングバッファメモリの制御方法であって、前記リングバッファメモリに記憶させるデータ毎の先頭アドレスを記憶させ、前記先頭アドレスから書き込みアドレスをインクリメントさせて記憶させるとともに、書き込みが正常に完了する毎に、書き込み完了信号を該先頭アドレスに付随させて記憶させ、前記書き込み完了信号を読み取り、この付随させた書き込み完了信号の前記先頭アドレスから前記リングバッファメモリのデータを順次読み出すようにしたことを特徴とする。
【発明の効果】
【００１９】
本発明によれば、書き込み制御部では、ＷＰカウンタをカウントアップする前に、そのデータの先頭アドレスをＷＰ保持部で保持し、リングバッファメモリにデータが正常に書込めたことをこの先頭アドレスに付随させてディスクリプタレジスタに書込み、リングバッファメモリからの読み出しは、ディスクリプタレジスタのフラグを参照して、ＲＰの指定を書き込まれたＷＰのアドレスをもとに読み出しを開始する。
【００２０】
リングバッファメモリに書込みエラーやポインタエラーが発生した場合には、その書き込みを中止して、ディスクリプタレジスタに保存されたＷＰのアドレスを再びＷＰカウンタにセットして、次の新しいデータから順次データが書き込み及び読み出されるので、書き込みエラーや双方のポインタアドレスの誤りを自己修復することができるリングバッファメモリ制御装置、及びその制御方法を提供することができる。
【発明を実施するための最良の形態】
【００２１】
本発明による実施例について、図１及び図５を参照して説明する。本発明のリングバッファメモリ制御装置の構成を図１に示す。
【００２２】
本発明のリングバッファメモリ制御装置は、入力されたデータが循環的に書き込みおよび読み出しが可能に、ＲＡＭ等で構成されたリングバッファメモリ１１への書き込みを制御する書き込み制御部２と、リングバッファメモリ１１に書き込まれたデータの読み出しを制御する読み出し制御部３とからなる。
【００２３】
さらに、リングバッファメモリ１１にデータが正常に書き込まれた先頭アドレスと、その先頭アドレスのデータが正常に書き込まれたことで書き込まれるフラグを付随させて記憶したディスクリプタレジスタ４と、書き込み制御部２で指定するリングバッファメモリ１１の書き込みアドレスであるＷＰと、読み出し制御部３で指定するリングバッファメモリ１１からの読み出しアドレスであるＲＰとを比較して、ＷＰ＝ＲＰとなったときにエラー信号を出力するポインタエラー検出部５とからなる。
【００２４】
このリングバッファメモリ１１のアドレス構造例を図２に示す、例えば、このメモリ容量は１ワード１６ビット×４０ワードの容量があるとする。この書き込みアドレスは００ｈから２７ｈまであり、書き込みは０１ｈから順次インクリメントされ、２７ｈの次は００ｈに戻る。
【００２５】
読み出しアドレス、ＲＰの設定は、ＲＰ＝ＷＰ−１と設定され、書き込まれたデータの先頭と最後のアドレスが隣接されて循環的に書き込み読み出しがされるように構成される。
【００２６】
次に、各部の詳細について説明する。書き込み読み出し制御部２は、入力されたデータを読み取り、リングバッファメモリ１１の書き込みを制御する入力制御部２ａと、入力制御部２ａから入力されたデータのワード数をプリセットされ、そのプリセット数分をカウントダウンし、書き込みが完了したことを入力制御部２ａに通知するワード数カウンタ２ｂと、ワード数カウンタ２ｃのワード数と入力制御部２ａから書き込み許可信号（Ｅｎｗ）を得て、リングバッファメモリ１１の書き込みアドレス信号をインクリメント生成するＷＰカウンタ２ｃとからなる。
【００２７】
さらに、入力制御部２ａで制御され、ＷＰカウンタ２ｃの出力から、夫々のデータの先頭アドレスを保持し、また、リングバッファメモリ２への書き込み時に書き込みエラーやポインタエラーが検出された場合、そのＷＰをＷＰカウンタ２ｃにプリセットするＷＰ保持部２ｄと、入力制御部２ａで制御され、ＷＰ保持部２ｄに保持された先頭アドレスについて、リングバッファメモリ１１に正常に書き込めたことで先頭アドレスにフラグを付随させてディスクリプタ４に送信するセレクタゲート２ｅとからなる。
【００２８】
また、入力制御部２ａは、リングバッファメモリ１１に書き込みエラーが発生したことをワード数カウンタ２ｂからカウント終了信号が出力されないことで検知する。
【００２９】
次に、書き込み制御部３の詳細構成について説明する。書き込み制御部３は、入力制御部から送られたデータが、リングバッファメモリ１１に正常に書き込まれたことをディスクリプタレジスタ４のフラグから読み取り、リングバッファメモリ１１からの読み出しを制御する出力制御部３ａと、出力制御部３ａから転送されたデータのワード数をプリセットされ、プリセットされたデータ数分をカウントダウンするワード数カウンタ３ｂと、ワード数カウンタ３ｂのワード数と出力制御部３ａから書き込み許可信号（Ｅｎｒ）を得てリングバッファメモリ１１の読み出しアドレス信号をインクリメント生成するＲＰカウンタ３ｃとからなる。
【００３０】
さらに、出力制御部３ａで制御され、正常に書き込みがされたフラグの付随したデータの先頭アドレスを、ディスクリプタレジスタ４から選択入力してＲＰカウンタ３ｃにプリセットするセレクタ３ｅとからなる。
【００３１】
ＲＰカウンタ３ｃは、セレクタ３ｅを介して送信されたＷＰをプリセットし、出力制御部３ａの出力許可信号（Ｅｎｒ）を得て、読み出しカウンタをインクリメントして書き込まれたデータを読み出してゆく。
【００３２】
また、出力制御部３ａは、読み出し時に読み出しエラーが発生したことを、ワード数カウンタ３ｂから読み出し完了信号が出力されないことで検出する。
【００３３】
次に、ディスクリプタレジスタ４は、ＷＰ保持部２ｃに記憶された夫々のデータの先頭アドレスから、入力制御部２ａでリングバッファメモリ１１に正常に書き込みがされたと判断された場合に、そのＷＰの先頭にフラグを付随させて記憶させたもので、例えば、図３に示すように、入力制御部２ａがセレクタ２ｅを制御して選択的に矢印方向に順次記憶させる。
【００３４】
出力制御部３は、ディスクリプタレジスタ４に書き込まれたこのフラグを監視し、このフラグが立つとリングバッファメモリ１１からの読み出し制御を開始する。
【００３５】
このディスクリプタレジスタ４の容量は、書き込みと読み出しの速度の相違する分以上あればよい。
【００３６】
次に、ポインタエラー検出部５は、ＷＰカウンタ２ｃ及びＲＰカウンタ３ｃの双方のカウンタ出力を比較して、そのカウンタの値が一致する状態がある場合をエラーとして検出し、ポインタエラー信号を入力制御部２ａに送る。
【００３７】
次に、このように構成されたリングバッファメモリ制御装置の動作について図４及び図１を参照して説明する。
【００３８】
図４は書き込み制御部２及び読み出し制御部３の処理を説明するフローチャートである。
【００３９】
先ず、入力制御部２ａにデータが入力されると、そのデータを参照してそのデータのワード数をワード数カウンタ２ｂに、リングバッファメモリ１１の書き込み開始の先頭アドレスをＷＰカウンタ２ｃに、ＷＰ保持部２ｄ及びディスクリプタレジスタ４に、夫々初期値としてプリセットする（ｓ１）。
【００４０】
次に、書き込み許可信号（Ｅｎｗ）を出力し、ＷＰカウンタ２ｃの出力をインクリメントして、ワード数カウンタ２ｂにセットしたワード数分のデータの書き込み処理を実行する（ｓ２）。
【００４１】
この書き込み処理中に書き込みエラー及びポインタエラーが検出されたか否かが判定される（ｓ３）。
【００４２】
エラーが発生しない場合は、書き込みが終了すると正常に書き込みが終了したことを示すフラグを先頭アドレスに付随させてディスクリプタレジスタ４に書き込む、書き込み終了処理を実行する（ｓ４）。
【００４３】
このフラグがディスクリプタレジスタ４に書き込まれると、出力制御部３ａは、ディスクリプタレジスタ４に書き込まれたＷＰ（先頭アドレス）からＲＰカウンタ３ｂのカウンタをインクリメントし読み出しを開始する。
【００４４】
そして、そのデータのヘッダに書き込まれたワード数分のデータをカウントして、データを読み出し処理を終了する（ｓ５）。
【００４５】
書き込みエラーまたはポインタエラーが検出された場合は、書き込み中止し、及びＷＰカウンタ２ｃにＷＰ保持部２ｄに保持された、そのデータの先頭アドレスをプリセット（巻き戻し処理）し、次のデータからの書き込み及び読み出しを開始する（ｓ６）。
【００４６】
次に、リングバッファメモリ１１に書き込みエラーや読み出しエラーが検出された場合の詳細な動作について説明する。
【００４７】
入力されたデータをリングバッファメモリ１１に書込み中にポインタエラーや書込みエラーが検出された場合、入力制御部２ａは、リングバッファメモリ１１への書込み許可信号（Ｅｎｗ）を停止する。
【００４８】
そして、ＷＰ保持部２ｄに保持されたそのデータの先頭ＷＰアドレスをＷＰカウンタ２ｃへプリセットし、次のデータから再びプリセットされた先頭アドレスで書き込み動作を開始する。
【００４９】
また、リングバッファメモリ１１の読み出し中に読み出しエラーが発生した場合、出力制御部３ａは、読み出し許可信号（Ｅｎｒ）を停止してリングバッファメモリ１１からデータの読み出しを停止する。
【００５０】
そして、ディスクリプタレジスタ４を検索しフラグの立っているアドレスのデータの読み出し制御を開始する。ディスクリプタレジスタに、フラグがたっていない場合には、フラグが立つデータが入力されるまで待機する。
【００５１】
ところで、書き込みエラーまたはポインタエラーが検出された場合以外に、ＷＰカウンタ２ｃのカウンタのみが誤動作することも考えられる。この場合の修復動作の様子を図５で説明する。
【００５２】
図５は入力されたデータの書き込み中にＷＰカウンタ２ｃが何らかの理由で誤動作した場合の動作を示す。
【００５３】
このリングバッハメモリ１１は、図５（ｂ）、（ｃ）に示すように、１Ｂｙｔｅ×０７ｈのメモリ容量を備え、図５（ａ）に示す時系列に入力されるdata１乃至data４のデータが、夫々１乃至４までの４ワードデータで構成されているとする。
【００５４】
ここで、ＷＰカウンタ２ｃは先頭アドレス００ｈからカウントを開始して書き込み動作を実行するが、何らかの原因で０２ｈから０５ｈに誤ってカウントされたとすると、次のdata２の書き込みは先頭アドレスが０６ｈから開始される。
【００５５】
ところが、次のＲＰカウンタ３ｃの読み出しは、ＲＰが０４ｈからの読み出しでなく、ディスクリプタレジスタ４に書き込まれた先頭アドレス０６ｈから読み出しを開始するので、４ワードのdata２を正しく読み出しすることが出来る。
【００５６】
以上説明したように、本発明によれば、リングバッファメモリ１１に書込みエラーやポインタエラーが発生した場合には、その書き込みを中止して、ディスクリプタレジスタ４に保存されたＷＰのアドレスを再びＷＰカウンタ２ｃにセットして、次の新しいデータから順次データが書き込み読み出されるので、書き込みエラーや双方のポインタアドレスの誤りを自己修復することができるリングバッファメモリ制御装置、及びリングバッファメモリの制御方法を提供することができる。
【００５７】
本発明は、上述した実施例に何ら限定されるものではなく、書き込み制御部及び読み出し制御部の構成は、正常に書き込まれたデータの先頭アドレスが読み出し制御部に順次転送できる手段を備えたものであれば良く、また、ポインタエラー検出のロジックは、書き込み読み出しの制御の設定条件から異常と判断させるロジックを適宜変更することも可能で、本発明の主旨を逸脱しない範囲で種々変形して実施することが可能である。
【図面の簡単な説明】
【００５８】
【図１】本発明のリングバッファメモリ制御装置の構成図。
【図２】本発明のバッファメモリのＷＰとＲＰの動作説明図。
【図３】本発明のディスクリプタレジスタの例。
【図４】本発明の動作を説明するフローチャート。
【図５】本発明のＷＰカウンタエラー時の動作説明図
【図６】従来のＷＰカウンタエラー時の動作説明図。
【図７】従来のリングバッファメモリ制御装置の構成図。
【符号の説明】
【００５９】
１、１１  リングバッファメモリ
２、１２  書き込み制御部
２ａ  入力制御部
２ｂ  ワード数カウンタ
２ｃ  ＷＰカウンタ
２ｄ  ＷＰ保持部
２ｅ  セレクタ
３、１３  読み出し制御部
３ａ  出力制御部
３ｂ  ワード数カウンタ
３ｃ  ＲＰカウンタ
３ｅ  セレクタ
４  ディスクリプタレジスタ
５  ポインタエラー検出部
１４  ＦＵＬＬ検出部
１５  ＥＭＰＴＹ検出部
【図１】
2008108066.tif 000003
【図２】
2008108066.tif 000004
【図３】
2008108066.tif 000005
【図４】
2008108066.tif 000006
【図５】
2008108066.tif 000007
【図６】
2008108066.tif 000008
【図７】
2008108066.tif 000009