(57)【要約】    【課題】      制御シーケンスを増大させることなく、容易かつ正確にリングバッファのフルおよびエンプティを検出すること。    【解決手段】  書込みポインタ生成部１０５は、書込みポインタ（ＷＰ）の値をインクリメントしてＷＰを更新する。読出しポインタ生成部１０７は、読出しポインタ（ＲＰ）の値をインクリメントしてＲＰを更新する。書込みポインタ生成部１０５と読出しポインタ生成部１０７は、リングバッファ１０４のサイズで決まるアドレスビット数に１ビット付加したビット数でポインタを管理し、リングバッファ１０４の最終アドレスからカウントアップして先頭アドレスに戻る際に付加したビットを反転させる。比較演算部１１０は、ＷＰとＲＰを比較してリングバッファ１０４のフルおよびエンプティを検出する。  【選択図】      図１
2005148904.tif 000002
【特許請求の範囲】
【請求項１】
リングバッファを用いたデータの転送を制御するリングバッファ制御装置であって、
次回に転送データを格納するリングバッファアドレスを示す書込みポインタを生成する書込みポインタ生成手段と、
次回に読み出す転送データのリングバッファアドレスを示す読出しポインタを生成する読出しポインタ生成手段と、を備え、
前記書込みポインタ生成手段および前記読出しポインタ生成手段は、それぞれリングバッファで使用する第１アドレスビットに前記リングバッファで使用しない第２アドレスビットを付加したポインタを生成し、前記ポインタの前記第１アドレスビットが前記リングバッファの最終アドレスにあるときに前記ポインタを更新する場合に前記ポインタの前記第１アドレスビットを前記リングバッファの先頭アドレスに戻すと同時に前記第２アドレスビットを反転することを特徴とするリングバッファ制御装置。
【請求項２】
前記書込みポインタと前記読出しポインタとの排他的論理和（ＥＸＯＲ）演算を行い、演算結果が、前記第１アドレスビットがゼロであり前記第２アドレスビットが１である場合はリングバッファの残量がゼロであることを検出し、前記第１アドレスビットと前記第２アドレスビットがともにゼロである場合にはリングバッファの使用量がゼロであることを検出する比較演算手段を備えることを特徴とする請求項１記載のリングバッファ制御装置。
【請求項３】
リングバッファを用いてデータの転送元である送信手段からデータの転送先である受信手段へデータを転送するリングバッファ制御装置であって、
前記比較演算手段は、演算結果が、前記第１アドレスビットがゼロであり前記第２アドレスビットが１である場合に前記送信手段へリングバッファのオーバーフローを警告する第１割り込み信号を出力し、前記第１アドレスビットと前記第２アドレスビットがともにゼロである場合に前記受信手段へデータの転送完了を示す第２割込み信号を出力することを特徴とする請求項２に記載のリングバッファ制御装置。
【請求項４】
デュアルポートメモリを使用して第１プロセッサと第２プロセッサの間でデータ転送を行う通信装置であって、
前記第１プロセッサから前記第２プロセッサへのデータ転送に用いる請求項３記載の第１リングバッファ制御装置と、
前記第２プロセッサから前記第１プロセッサへのデータ転送に用いる請求項３記載の第２リングバッファ制御装置と、を備え、
前記第１リングバッファ制御装置の第１割り込み信号と前記第２リングバッファ制御装置の第２割り込み信号を前記第１プロセッサへ入力し、
前記第２リングバッファ制御装置の第１割り込み信号と前記第１リングバッファ制御装置の第２割り込み信号を前記第２プロセッサへ入力することを特徴とするプロセッサ間通信装置。
【請求項５】
リングバッファで使用する第１アドレスビットに、前記リングバッファで使用しない第２アドレスビットを付加したポインタを生成し、前記ポインタの前記第１アドレスビットが前記リングバッファの最終アドレスにあるときに前記ポインタを更新する場合に、前記ポインタの前記第１アドレスビットを前記リングバッファの先頭アドレスに戻すと同時に前記第２アドレスビットを反転することを特徴とするリングバッファ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ポインタ値からリングバッファの残量を算出するシステム上でリングバッファの状態を制御するリングバッファ制御装置およびリングバッファ制御方法に関する。
【背景技術】
【０００２】
従来、メモリ制御方式において、書込みポインタ（ＷＰ）と読出しポインタ（ＲＰ）の２つのアドレスポインタを用いてメモリバッファを管理するリングバッファ方式と呼ばれるメモリ制御方式が知られている。
【０００３】
ＷＰはメモリへのデータ書込みアクセス後にインクリメントし、ＲＰはメモリからのデータ読出しアクセス後にインクリメントする。ＷＰとＲＰの両ポインタの可変範囲はバッファメモリ領域に対応する。バッファ領域の先頭アドレスを初期値として、インクリメント後にバッファ領域の最終アドレスを超える場合には初期値に戻される。
【０００４】
リングバッファ方式では、これらのポインタ値を用いてバッファの全領域を使用している状態（フル）とバッファの全領域が未使用の状態（エンプティ）とを判断する。書込み後にＷＰ＝ＲＰとなる場合にはフルと判断し、読出し後にＷＰ＝ＲＰとなる場合にはエンプティと判断する。
【特許文献１】特開平５−２８９８４７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の方式では、書込みによってバッファがフル（ＷＰ＝ＲＰ）になった後に、読出しイベントが発生したが何らかの原因で読出しを行うことができなかった場合には、読出しイベント後にＲＰがインクリメントされないためにＷＰ＝ＲＰのままである。この場合、書込み制御部は、読出しイベント後のＷＰ＝ＲＰと見なして、実際にはフルのままにも関わらず、これをエンプティと判断してしまう。
【０００６】
逆の場合も同様で、読出しによってバッファがエンプティ（ＷＰ＝ＲＰ）になった後に、書込みイベントが発生したが何らかの原因で書込みを行うことができなかった場合には、書込みイベント後にＷＰがインクリメントされないためにＷＰ＝ＲＰのままである。この場合、読出し制御部は、書込みイベント後のＷＰ＝ＲＰと見なして、実際にはエンプティのままにも関わらず、これをフルと判断してしまう。
【０００７】
このような事態の対策としてＷＰ値とＲＰ値の差分を計算し、例えばＷＰ−ＲＰ＝１の場合、即ち残量が１の場合にバッファフルと判断する方法がある。しかし、この方法では、ＲＰ値からＷＰ値を減算する機能が必要になることに加え、バッファ領域を完全には使用できないという課題がある。
【０００８】
また、他の方法として、新たにレジスタにフラグを追加して、書込み完了後にＷＰ＝ＲＰとなった場合には書込み制御部がフラグを「書込み終了」に書き換え、読出し完了後にＷＰ＝ＲＰとなった場合には読出し制御部が同じフラグを「読出し終了」に書き換える方法がある。これにより、書込みあるいは読出しが完了してＷＰ＝ＲＰとなったのか、書込みあるいは読出しが行われずＷＰ＝ＲＰのままであったのか、区別することが可能になる。しかし、この方法では、追加したフラグレジスタへの読出しと書込みアクセス等の制御シーケンスが増加するという課題がある。
【０００９】
本発明は係る点に鑑みてなされたものであり、容易に、かつ正確に、リングバッファのフルとエンプティを判断することのできるリングバッファ制御装置およびリングバッファ制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明のリングバッファ制御装置は、リングバッファを用いたデータの転送を制御するリングバッファ制御装置であって、次回に転送データを格納するリングバッファアドレスを示す書込みポインタを生成する書込みポインタ生成手段と、次回に読み出す転送データのリングバッファアドレスを示す読出しポインタを生成する読出しポインタ生成手段と、を備え、前記書込みポインタ生成手段および前記読出しポインタ生成手段は、それぞれリングバッファで使用する第１アドレスビットに前記リングバッファで使用しない第２アドレスビットを付加したポインタを生成し、前記ポインタの前記第１アドレスビットが前記リングバッファの最終アドレスにあるときに前記ポインタを更新する場合に前記ポインタの前記第１アドレスビットを前記リングバッファの先頭アドレスに戻すと同時に前記第２アドレスビットを反転する構成を採る。
【００１１】
本発明のリングバッファ制御装置は、前記書込みポインタと前記読出しポインタとの排他的論理和（ＥＸＯＲ）演算を行い、演算結果が、前記第１アドレスビットがゼロであり前記第２アドレスビットが１である場合はリングバッファの残量がゼロであることを検出し、前記第１アドレスビットと前記第２アドレスビットがともにゼロである場合にはリングバッファの使用量がゼロであることを検出する比較演算手段を備える構成を採る。
【００１２】
本発明のリングバッファ制御装置は、リングバッファを用いてデータの転送元である送信手段からデータの転送先である受信手段へデータを転送するリングバッファ制御装置であって、前記比較演算手段は、演算結果が、前記第１アドレスビットがゼロであり前記第２アドレスビットが１である場合に前記送信手段へリングバッファのオーバーフローを警告する第１割り込み信号を出力し、前記第１アドレスビットと前記第２アドレスビットがともにゼロである場合に前記受信手段へデータの転送完了を示す第２割込み信号を出力する構成を採る。
【００１３】
これらの構成により、リングバッファを余すことなく効率的に使用することができ、かつ、制御シーケンスを増大させることなく容易にリングバッファのフルおよびエンプティを検出することができる。
【００１４】
本発明のプロセッサ間通信装置は、デュアルポートメモリを使用して第１プロセッサと第２プロセッサの間でデータ転送を行う通信装置であって、前記第１プロセッサから前記第２プロセッサへのデータ転送に用いる請求項３記載の第１リングバッファ制御装置と、前記第２プロセッサから前記第１プロセッサへのデータ転送に用いる請求項３記載の第２リングバッファ制御装置と、を備え、前記第１リングバッファ制御装置の第１割り込み信号と前記第２リングバッファ制御装置の第２割り込み信号を前記第１プロセッサへ入力し、前記第２リングバッファ制御装置の第１割り込み信号と前記第１リングバッファ制御装置の第２割り込み信号を前記第２プロセッサへ入力する構成を採る。
【００１５】
この構成により、第１プロセッサと第２プロセッサは、リングバッファの書込みポインタと読出しポインタの比較管理することなく、割込み信号によってリングバッファのフルまたはエンプティを、容易、かつ正確に検知することができる。また、このような装置を小規模なハードウェア構成で実現することができる。
【００１６】
本発明のリングバッファ制御方法は、リングバッファで使用する第１アドレスビットに、前記リングバッファで使用しない第２アドレスビットを付加したポインタを生成し、前記ポインタの前記第１アドレスビットが前記リングバッファの最終アドレスにあるときに前記ポインタを更新する場合に、前記ポインタの前記第１アドレスビットを前記リングバッファの先頭アドレスに戻すと同時に前記第２アドレスビットを反転する方法を採る。
【００１７】
この方法により、リングバッファを余すことなく効率的に使用することができ、かつ、制御シーケンスを増大させることなく容易にリングバッファのフルおよびエンプティを検出することができる。
【発明の効果】
【００１８】
本発明によれば、リングバッファを余すことなく効率的に使用することができ、かつ、制御シーケンスを増大させることなく容易にリングバッファのフルおよびエンプティを検出することができる。
【発明を実施するための最良の形態】
【００１９】
本発明の骨子は、リングバッファの書込みポインタと読み出しポインタを、バッファサイズから決まるアドレスビット数に１ビットを付加したビット数にし、ポインタがリングバッファの最終アドレスにあるときにインクリメントする場合はポインタをリングバッファの先頭アドレスに移すと同時に付加ビットを反転することで、リングバッファのフルまたはエンプティの誤検出を防ぐことである。
【００２０】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００２１】
（実施の形態１）
図１は、本発明の第１の形態におけるリングバッファ制御装置の構成を示すブロック図である。
【００２２】
リングバッファ制御装置１００は、書込み制御部１０１と、読出し制御部１０２と、データバス１０３、リングバッファ１０４と、書込みポインタ生成部１０５と、書込みポインタ保持部１０６と、読出しポインタ生成部１０７と、読出しポインタ保持部１０８と、切替え部１０９と、比較演算部１１０とから主に構成される。
【００２３】
書込み制御部１０１は、書込みイベントが発生するとデータバス１０３を介してリングバッファ１０４へデータを書き込む。また、書込み制御部１０１は、書込みイベントが終了すると書込みポインタ生成部１０５へ書込みイベント終了を通知する。
【００２４】
読出し制御部１０２は、読出しイベントが発生するとデータバス１０３を介してリングバッファ１０４からデータを読み出す。読出し制御部１０２は、読出しイベントが終了すると読出しポインタ生成部１０７へ読出しイベント終了を通知する。
【００２５】
リングバッファ１０４は、切替え部１０９から出力されたアドレスに対して、データバス１０３のデータを書込み、あるいは読出しを行う。
【００２６】
書込みポインタ生成部１０５は、書込み制御部１０１から書込みイベント終了の通知を受けると書込みポインタ（ＷＰ）の値をインクリメントしてＷＰを更新し、書込みポインタ保持部１０６と切替え部１０９へ出力する。なお、書込みポインタ生成部１０５の動作の詳細は後述する。
【００２７】
書込みポインタ保持部１０６は、書込みポインタ生成部１０５から出力された書込みアドレスを保持するとともに、比較演算部１１０へ出力する。
【００２８】
読出しポインタ生成部１０７は、読出し制御部１０２から読出しイベント終了の通知を受けると読出しポインタ（ＲＰ）の値をインクリメントしてＲＰを更新し、読出しポインタ保持部１０８と切替え部１０９へ出力する。なお、読出しポインタ生成部１０７の動作の詳細は後述する。
【００２９】
読出しポインタ保持部１０８は、読出しポインタ生成部１０７から出力された読出しアドレスを保持するとともに、比較演算部１１０へ出力する。
【００３０】
切替え部１０９は、書込みポインタ生成部１０５から出力されたＷＰの値（書込みアドレス）と、読出しポインタ生成部１０７から出力されたＲＰの値（読出しアドレス）とを切替えてリングバッファのアドレスバスへ出力する。
【００３１】
比較演算部１１０は、書込みアドレスと読み出しアドレスの比較演算を行い、結果を書込み制御部１０１と読出し制御部１０２へ出力する。なお、比較演算部１１０の動作の詳細は後述する。
【００３２】
以下、本発明の主要部分である書込みポインタ生成部１０５、読出しポインタ生成部１０７及び比較演算部１１０の動作について、図２及び図３を用いて詳細に説明する。
【００３３】
図２はポインタとリングバッファのビット構成を表している。
【００３４】
書込みポインタと読出しポインタは、リングバッファアドレスの上位に１ビット幅のビット（以下、「付加ビット」という）２０１を付加した構成とする。例えば、リングバッファのアドレスのビット幅が１０ビットの場合、書込みポインタと読出しポインタのビット幅は１１ビットである。
【００３５】
図３はポインタの遷移と対応するリングバッファのアドレスを表した図である。
【００３６】
書込みポインタ生成部１０５と読出しポインタ生成部１０７の動作は同じである。ＷＰとＲＰの両ポインタのうちの付加ビット２０１を除くリングバッファアドレス部分は、リングバッファの先頭アドレス３０１を初期値として順次インクリメントしていき、リングバッファの最終アドレス３０２までカウントアップしていく。ポインタが最終アドレス３０２に到達した場合、次のカウントでリングバッファの先頭アドレス３０１に戻される。この時に付加ビット２０１を反転する。
【００３７】
具体例をあげて説明する。例えば、リングバッファのアドレスを、図３に示すように、先頭アドレス３０１を０００ｈで最終アドレス３０２を２ＦＦｈとする１０ビット構成とする。ポインタは、図２で示したように上位に付加ビット２０１を付加した１１ビット構成とする。付加ビット２０１の初期値は０であるとする。
【００３８】
ポインタの値がリングバッファの最終アドレス３０２、すなわち２ＦＦｈである場合には、次のカウントで、ポインタの下位１０ビットはリングバッファの先頭アドレス３５１である０００ｈとして、付加ビット２０１は反転して１とする。すなわちポインタの値は４００ｈとする。更にカウントが進むと、やがて、ポインタの下位１０ビットがリングバッファの最終アドレス３５２の２ＦＦｈとなり、付加ビット２０１（値は１）と合わせて６ＦＦｈになる。この場合には、次のカウントで、ポインタの下位１０ビットはリングバッファの先頭アドレスである０００ｈとして、付加ビット２０１は反転して０とする。すなわちポインタの値は０００ｈとする。
【００３９】
これにより、ポインタの値は、０００ｈから２ＦＦｈまで加算されていき、次に４００ｈとなり、その後６ＦＦｈまで加算され、また０００ｈに戻される。このとき、リングバッファのアドレスはポインタの下位１０ビットであるので、対応するリングバッファアドレスは、いずれも０００ｈから２ＦＦｈまでである。
【００４０】
このようにポインタを管理することでリングバッファのフルとエンプティを容易に区別できる。
【００４１】
リングバッファがフルになるのは、読出しアドレス（ＲＰの値）と書込みアドレス（ＷＰの値）の下位１０ビットが等しく、上位１ビットの付加ビットのみが異なる場合である。すなわち、例えば、ＲＰ＝１ＡＡｈである時に、ＷＰ＝５ＡＡｈとなった場合や、ＲＰ＝５ＡＡｈである時に、ＷＰ＝１ＡＡｈとなった場合である。ここで、ポインタ値１ＡＡｈおよび５ＡＡｈに対応するリングバッファのアドレスはいずれも１ＡＡｈである。
【００４２】
一方、リングバッファがエンプティになるのは、読出しアドレスと書込みアドレスが等しい場合である。すなわち、例えば、ＷＰ＝１８Ｂｈである時に、ＲＰ＝１８Ｂとなった場合や、ＷＰ＝５８Ｂｈである時に、ＲＰ＝５８Ｂｈとなった場合などである。ここで、ポインタ値１８Ｂｈおよび５８Ｂｈに対応するリングバッファのアドレスはいずれも１８Ｂｈである。
【００４３】
ここで、比較演算部１１０は、ＷＰとＲＰとの各ビット同士で排他的論理和（ＥＸＯＲ）を演算する。演算結果が０００ｈであればリングバッファはエンプティであり、結果が４００ｈであればリングバッファはフルであり、それ以外であれば書込みおよび読出しがともに可能な状態であるということができる。
【００４４】
このような処理により、書込みによってバッファがフル（ＷＰとＲＰとが上位１ビットのみ異なる）になった後に、読出しイベントが発生したが何らかの原因で読出しを行えなかった場合にも、読出しイベント後にＲＰがインクリメントされないがＷＰ＝ＲＰではない。したがって、この場合にエンプティ（ＷＰ＝ＲＰ）と判断されることはない。
【００４５】
逆の場合も同様で、読出しによってバッファがエンプティ（ＷＰ＝ＲＰ）になった後に、書込みイベントが発生したが何らかの原因で書込みを行えなかった場合にも、書込みイベント後にＷＰがインクリメントされずにＷＰ＝ＲＰのままである。したがって、この場合にフル（ＷＰとＲＰとが最上位１ビットのみ異なる）と判断されることはない。
【００４６】
なお、付加ビットの初期値を１とした場合には、リングバッファのフルとエンプティの条件が入れ替わる。すなわち、ＷＰ＝ＲＰのときにフルであり、ＷＰとＲＰとが最上位１ビットのみ異なるときにエンプティである。
【００４７】
また、比較演算部１１０をハードで構成する場合には、書込みポインタと読出しポインタをレジスタに入力して、２つのレジスタのＥＸＯＲ演算によりリングバッファのフルないしエンプティを検知することができ、減算機能などを持たせる必要はなく、小規模な回路規模で構成することができる。
【００４８】
また、フルとエンプティの誤検出を防ぐためにリングバッファ領域の一部をマージンとして使用しない処理などは必要なく、リングバッファ領域の全てを効率的に使用することができる。
【００４９】
また、汎用プロセッサなどポインタのビット幅があらかじめ決められていて、リングバッファアドレスのビット幅がそれより小さい場合には、従来使用していなかった上位ビットを使用すれば、新たにフラグを追加してフラグレジスタへの書込みや読出しといったアクセスのための制御シーケンスが増大するといった課題が生じることはない。
【００５０】
（実施の形態２）
図４は、デュアルポートＲＡＭを用いたＣＰＵ間通信におけるリングバッファ制御装置の構成を示すブロック図である。なお、図４に示すリングバッファ制御装置４００において、図１に示したリングバッファ制御装置１００と共通する構成部分には図１と同一符号を付してその説明を省略する。
【００５１】
図４に示すリングバッファ制御装置４００は、比較演算部４０１の作用が図１の比較演算部１１０と異なる。また、図４に示すリングバッファ制御装置４００の送信ＣＰＵ４０２は、図１の書込み制御部１０１の機能と書込みポインタ生成部１０５の機能を含む。図４に示すリングバッファ制御装置４００の受信ＣＰＵ４０３は、図１の読出し制御部１０２の機能と読出しポインタ生成部１０７の機能を含む。図４のデュアルポートＲＡＭ（ＤＰＲＡＭ）４０４は、その記憶領域の一部を、図１のリングバッファ１０４として用いる。
【００５２】
送信ＣＰＵ４０２は、書込みイベントが発生するとＤＰＲＡＭ４０４へデータを書き込む。送信ＣＰＵ４０２は、書込みイベントが終了すると書込みポインタ（ＷＰ）の値をインクリメントしてＷＰを更新し、書込みポインタ保持部１０６と比較演算部４０１とへＷＰを出力する。
【００５３】
受信ＣＰＵ４０３は、読出しイベントが発生するとＤＰＲＡＭ４０４からデータを読み出す。受信ＣＰＵ４０３は、読出しイベントが終了すると読出しポインタ（ＲＰ）の値をインクリメントしてＲＰを更新し、読出しポインタ保持部１０８と比較演算部４０１とへＲＰを出力する。
【００５４】
比較演算部４０１は、書込みポインタ保持部１０６に保持されたＷＰと読出しポインタ保持部１０８に保持されたＲＰとを比較して、比較結果によって送信ＣＰＵ４０２または受信ＣＰＵ４０３へ割込み信号を出力する。ＷＰ＝ＲＰである場合には、リングバッファはエンプティであり、比較演算部４０１は、受信ＣＰＵ４０３へエンプティを示す割り込み信号を出力する。ＷＰとＲＰとが付加ビット（１ビット）のみ異なる場合は、リングバッファはフルであり、比較演算部４０１は、送信ＣＰＵ４０２へフルを示す割り込み信号を出力する。
【００５５】
このような構成で、実施の形態１に示したように、リングバッファの管理に必要なアドレスビットに１ビットを付加したビット数でＷＰとＲＰを管理する。
【００５６】
これにより、送信ＣＰＵと受信ＣＰＵはＤＰＲＡＭ上に設けたリングバッファの書込みポインタと読出しポインタの比較管理することなく、割込み信号によってリングバッファのフルまたはエンプティを、容易、かつ正確に検知することができる。また、このような装置を小規模なハードウェア構成で実現することができる。
【産業上の利用可能性】
【００５７】
本発明は、小さなバッファを用いて効率的なデータ転送を行う通信装置に用いるに好適である。
【図面の簡単な説明】
【００５８】
【図１】本発明の実施の形態１に係るリングバッファ制御装置の構成を示すブロック図
【図２】上記実施の形態に係るポインタとリングバッファアドレスのビット構成を示す図
【図３】上記実施の形態に係るポインタの遷移と対応するリングバッファのアドレスを示す図
【図４】本発明の実施の形態２に係るリングバッファ制御装置の構成を示すブロック図
【符号の説明】
【００５９】
１０１  書込み制御部
１０２  読出し制御部
１０３  データバス
１０４  リングバッファ
１０５  書込みポインタ生成部
１０６  書込みポインタ保持部
１０７  読出しポインタ生成部
１０８  読出しポインタ保持部
１０９  切替え部
１１０、４０１  比較演算部
４０２  送信ＣＰＵ
４０３  受信ＣＰＵ
４０４  ＤＰＲＡＭ
【図１】
2005148904.tif 000003
【図２】
2005148904.tif 000004
【図３】
2005148904.tif 000005
【図４】
2005148904.tif 000006