(57)【特許請求の範囲】
【請求項１】
リードポインタとライトポインタとを用いてバッファメモリを先入れ先出し式リングバッファとして制御するバッファ制御装置であって、
リードポインタおよびライトポインタとは異なる仮想ポインタを保持するポインタ保持手段と、
リードポインタおよびライトポインタに従ってリングバッファへのアクセスを制御するアクセス制御手段と、
前記リードポインタおよび前記ライトポインタのうちの一方のポインタが前記仮想ポインタと実質的に同じアドレスに追いついた状態であるか否かを判定する判定手段と、
追いついた状態であると判定されたとき、前記アクセス制御手段による前記一方のポインタを用いた通常のアクセスを停止する停止手段とを備え、
前記アクセス制御手段は、さらに、外部装置からの要求に従って、前記仮想ポインタにより示されるアドレスから、前記リードポインタおよび前記ライトポインタのうちの他方のポインタにより示されるアドレスまでのアドレス範囲内でリングバッファへの再アクセスを制御し、
前記一方のポインタはリードポインタであり、
前記停止手段は、前記判定手段による判定結果を停止フラグとして保持するフラグ保持部を有し、
前記アクセス制御手段は、
停止フラグに従ってリングバッファへのリードアクセスを停止し、
外部装置からの要求に従って、前記仮想ポインタにより示されるアドレスから前記ライトポインタにより示されるアドレスまでのアドレス範囲内でリングバッファへの再ライトを制御する
ことを特徴とするバッファ制御装置。
【請求項２】
前記バッファ制御装置は、さらに、
外部装置からの要求に従って前記仮想ポインタの値を設定するポインタ設定手段を備える
ことを特徴とする請求項１記載のバッファ制御装置。
【請求項３】
前記ポインタ設定手段は、さらに、外部装置からの要求に従って、前記仮想ポインタが有効であるか否かを示す有効フラグを保持し、
前記判定手段は、
前記有効フラグが無効を示すとき、前記リードポインタが前記ライトポインタと実質的に同じアドレスに追いついた状態であるか否かを判定する第１判定部と、
前記有効フラグが有効を示すとき、前記リードポインタが前記仮想ポインタと実質的に同じアドレスに追いついた状態であるか否かを判定する第２判定部とを備え、
前記停止フラグは、前記有効フラグが無効を示すとき、第１判定部による判定結果を保持し、前記有効フラグが有効を示すとき、第２判定部による判定結果を保持する
ことを特徴とする請求項２記載のバッファ制御装置。
【請求項４】
前記バッファ制御装置は、さらに、
前記ライトポインタと前記仮想ポインタの値との差分を一定に保つよう仮想ポインタを設定するポインタ設定手段を備える
ことを特徴とする請求項１記載のバッファ制御装置。
【請求項５】
前記ポインタ設定手段は、外部装置からの要求に従って、前記ライトポインタを前記アドレス範囲内のアドレスを指すように変更し、
前記アクセス制御手段は、変更後の前記ライトポインタに従ってバッファメモリへの再ライトを制御する
ことを特徴とする請求項２または４記載のバッファ制御装置。
【請求項６】
前記アクセス制御手段は、外部装置からの指示に従って前記仮想ポインタに従ってリングバッファへの再ライトを制御し、
前記仮想ポインタは、前記アクセス制御手段による再ライドに伴って更新される
ことを特徴とする請求項２または４記載のバッファ制御装置。
【請求項７】
前記ポインタ保持手段は、さらに、前記アドレス範囲内のアドレスを指す再ライト用ポインタを保持し、
前記アクセス制御手段は、再ライト用ポインタに従ってリングバッファの再ライトを制御し、
前記再ライト用ポインタは、前記アクセス制御手段による再ライトに伴って更新される
ことを特徴とする請求項２または４記載のバッファ制御装置。
【請求項８】
前記ポインタ保持手段は、複数のポインタを保持し、
前記バッファ制御装置は、さらに、前記リードポインタ、前記ライトポインタ、前記仮想ポインタのそれぞれを、前記複数のポインタから選択する選択手段を備える
ことを特徴とする請求項１から７の何れかに記載のバッファ制御装置。
【請求項９】
データを一時的に保持するためのバッファメモリと、
前記バッファメモリの読み出し先アドレスであるリードポインタと、前記バッファメモリの書き込み先アドレスであるライトポインタと、リードポインタおよびライトポインタとは異なる仮想ポインタとを保持するポインタ保持手段と、
前記バッファメモリを先入れ先出し式リングバッファとして機能させるために、前記リードポインタおよびライトポインタを制御するポイン制御手段と、
リードポインタおよびライトポインタに従ってリングバッファへのアクセスを制御するアクセス制御手段と、
前記リードポインタおよび前記ライトポインタのうちの一方のポインタが前記仮想ポインタと実質的に同じアドレスに追いついた状態であるか否かを判定する判定手段と、
実質的に同じアドレスに追いついた状態であると判定されたとき、前記アクセス制御手段による前記一方のポインタに従う通常アクセスを停止する停止手段とを備え、
前記アクセス制御手段は、さらに、外部装置からの要求に従って、前記仮想ポインタにより示されるアドレスから、前記リードポインタおよび前記ライトポインタのうちの他方のポインタにより示されるアドレスまでのアドレス範囲内でリングバッファへのアクセスを制御し、
前記一方のポインタはリードポインタであり、
前記停止手段は、前記判定手段による判定結果を停止フラグとして保持するフラグ保持部を有し、
前記アクセス制御手段は、
停止フラグに従ってリングバッファへのリードアクセスを停止し、
外部装置からの要求に従って、前記仮想ポインタにより示されるアドレスから前記ライトポインタにより示されるアドレスまでのアドレス範囲内でリングバッファへの再ライトを制御する
ことを特徴とするバッファメモリ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リードポインタとライトポインタとを用いてバッファメモリを先入れ先出し式リングバッファとして制御するバッファ制御装置およびバッファメモリに関する。
【背景技術】
【０００２】
従来、バッファメモリを先入れ先出し（ＦＩＦＯ：First In First Out）式のリングバッファとして機能させる技術がある。このようなリングバッファは、たとえば圧縮動画像データであるビットストリームの復号化装置において、入力ビットストリームを一時保存に利用される。バッファメモリをリングバッファとして制御するコントローラは、現在のデータ書き込みアドレスを示す一つのライトポインタと、現在のデータ読み出しアドレスでいるアドレスを示す一つのリードポインタを有する。
【０００３】
ライトポインタは、バッファメモリにデータが書き込まれる毎に、次の書き込み可能なアドレスに更新される。リードポインタは、バッファメモリからデータが読み出される毎に、次の読み出し可能なアドレスに更新される。リードポインタは、データが書き込まれているアドレスつまり、ライトポインタが指し示すアドレスまで更新可能であるが、ライトポインタが示すアドレスより先に更新することは出来ない。ライトポインタは、データが読み出されたアドレスつまり、リードポインタが指し示すアドレスまで更新可能であるが、リードポインタが示すアドレスより先に更新することは出来ない。ライトポインタおよびリードポインタの更新は、共に同じ方向にリング状にインクリメントまたはデクリメントされる。
【０００４】
これにより、リードポインタが指し示すアドレスまでバッファにデータを書き込むことが可能である。また、ライトポインタが指し示すアドレスまで、データの読み込みが可能である。このように、バッファメモリの記録領域はリング状に先入れ先出し式に管理される。このような従来技術を紹介する文献として、特許文献１がある。
【特許文献１】特開平５-２８９８４７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記従来技術によれば、一旦読み出したデータをバッファメモリから再読み出して再利用することができないという問題がある。なぜなら、バッファメモリからデータが読み出された後、そのデータは上書き可能な状態になるので、再読み出ししたとしても以前読み出しを行ったデータと同一である保証はないからである。
【０００６】
上記問題は具体的には、バッファメモリがビットストリームを一時保持し、読み出されたビットストリームのヘッダ解析等においてエラーが発生した場合に、再読み出しに時間がかかり、動画再生のリアルタイム性を阻害するという問題を引き起こす。従来技術において再読み出しするには、一旦バッファをクリアしてビットストリームを記録している媒体等から再度バッファを介して読み出す必要があるからである。
【０００７】
また同様の課題として、一旦書き込んだデータをバッファに上書きして更新することができないという問題がある。バッファに一旦書き込まれたデータは、バッファより読み込み可能な状態になり、一旦書き込んだデータが未だ読み出されていないという保証はないからである。
【０００８】
本発明では、上記の問題を解決する発明で、リードポインタとライトポインタとを用いてバッファメモリを先入れ先出し式リングバッファにおいて、一度読み出したデータを再利用すること可能とするバッファ制御装置およびバッファメモリ装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、本発明のバッファ制御装置は、リードポインタとライトポインタとを用いてバッファメモリを先入れ先出し式リングバッファとして制御するバッファ制御装置であって、リードポインタおよびライトポインタとは異なる仮想ポインタを保持するポインタ保持手段と、リードポインタおよびライトポインタに従ってリングバッファへのアクセスを制御するアクセス制御手段と、前記リードポインタおよび前記ライトポインタのうちの一方のポインタが前記仮想ポインタと実質的に同じアドレスに追いついた状態であるか否かを判定する判定手段と、実質的に同じアドレスであると判定されたとき、前記アクセス制御手段による前記一方のポインタを用いた通常のアクセスを停止する停止手段とを備え、前記アクセス制御手段は、さらに、外部装置からの要求に従って、前記仮想ポインタにより示されるアドレスから、前記リードポインタおよび前記ライトポインタのうちの他方のポインタにより示されるアドレスまでのアドレス範囲内でリングバッファへの再アクセスを制御する。
【００１０】
この構成によれば、仮想ポインタにより示されるアドレスから、前記他方のポインタにより示されるアドレスまでのアドレス範囲内では、一旦アクセスしたデータに対して再度アクセスすることができる。これにより、バッファメモリに一時的に保持されたデータの再利用またはデータの上書き更新することができる。
【００２０】
また、前記一方のポインタはリードポインタであり、前記停止手段は、前記アドレスが実質的に同じアドレスに追いついた状態であると判定されたことを示す停止フラグを保持するフラグ保持部とを有し、前記アクセス制御手段は、停止フラグに従ってリングバッファへのリードアクセスを停止し、外部装置からの要求に従って、前記仮想ポインタにより示されるアドレスから前記ライトポインタにより示されるアドレスまでのアドレス範囲内でリングバッファへの再ライトを制御するようにしてもよい。
【００２１】
この構成によれば、何らかの原因でバッファへ書き込んだデータに対して、再書き込みを行う必要がある場合は、あらかじめデータの再書き込みを実行する可能性があるデータがあるバッファのアドレスを仮想ポインタに設定しておけば、上記のアドレス範囲内でのデータリードの実行が停止されるとともに、データの再書き込みを行うことができる。このとき、上記アドレス範囲内ではリードが停止されているため、再書き込みを行う対象のデータが、すでに読み出されていないことが保証される。
【発明の効果】
【００２２】
本発明のバッファ制御装置によれば、一度読み出したデータを再利用することができる。このとき、再利用データが以前の読み出しデータと同一であることが保証される。また、一度書き込んだデータに再度上書きすることができる。このとき、再書き込みを行う対象のデータが、すでに読み出されていないことが保証される。
【発明を実施するための最良の形態】
【００２３】
（実施の形態１）
以下、本発明の実施形態１について、図を示しながら説明をする。
【００２４】
図１は、本発明の実施の形態１におけるバッファ制御装置を有するバッファメモリ装置を含むシステムの構成を示すブロック図である。同図のシステムは、バッファメモリを先入れ先出し式リングバッファとして制御するとともに、リングバッファに保持されたデータの再利用を実現するバッファ制御装置（バッファコントローラ１０１および制御プロセッサ１１８）と、外部のデータ読出装置としてのＤＭＡコントローラ１１６と、外部のデータ書き込み装置としてのＤＭＡコントローラ１１７と、バッファメモリ１１９とを備える。
【００２５】
バッファコントローラ１０１は、通常のリードポインタと再利用すべきデータの先頭アドレスを示す仮想リードポインタとを保持するリードポインタ保持部１０２と、通常のライトポインタと再書き込み可能な領域の先頭アドレスを示す仮想ライトポインタを保持するライトポインタ保持部１０７と、バッファメモリ１１９への通常のアクセスと再度の読み出しアクセスとを制御するリードアクセス制御部１２０と、バッファメモリ１１９の通常の書き込みアクセスと再度の書き込みアクセスとを制御するライトアクセス制御部１３０とを備え、バッファメモリ１１９と制御プロセッサ１１８とＤＭＡコントローラ１１６とＤＭＡコントローラ１１７とに接続される。
【００２６】
リードアクセス制御部１２０は、仮想リードポインタが有効か否かを示す有効フラグＶｒおよびバッファメモリ１１９へのリードアクセスの停止すべきか否かを示す停止フラグＳｒを保持するフラグ保持部１０３と、仮想ライトポインタが無効であるとき、通常のリードポインタが通常のライトポインタと実質的に同じアドレスに追いついた状態であるか否かを判定する第１リードポインタ判定部（以下、第１ＲＰ判定部と呼ぶ。）１０４ａと、仮想ライトポインタが有効であるとき、通常のリードトポインタが仮想ライトポインタと実質的に同じアドレス追いついた状態であるか否かを判定する第２リードポインタ判定部（以下、第２ＲＰ判定部と呼ぶ。）１０４ｂと、リードアクセスがなされる毎に通常のリードポインタを更新（本実施形態ではインクリメント）するリードポインタ制御部１０５と、データリード制御部１０６とを備えている。
【００２７】
ライトアクセス制御部１３０は、仮想ライトポインタが有効か否かを示す有効フラグＶｗおよびバッファメモリ１１９へのライトアクセスの停止すべきか否かを示す停止フラグＳｗを保持するフラグ保持部１０８と、仮想リードポインタが無効であるとき、通常のライトポインタが通常のリードポインタと実質的に同じアドレスに追いついた状態であるか否かを判定する第１ライトポインタ判定部（以下、第１ＷＰ判定部と呼ぶ。）１０９ａと、仮想リードポインタが有効であるとき、通常のライトポインタが仮想リードポインタと実質的に同じアドレスに追いついた状態であるか否かを判定する第２ライトポインタ判定部（以下、第２ＷＰ判定部と呼ぶ。）１０９ｂと、ライトアクセスがなされる毎に通常のライトポインタを更新（本実施形態ではインクリメント）するライトポインタ制御部１１０と、データライト制御部１１１を備えている。
【００２８】
リードポインタ保持部１０２は、第１〜第ｎのリードポインタを保持する。本実施形態では、ｎは２であるものとし、第１リードポインタが通常のリードポインタ、第２リードポインタが仮想リードポインタであるものとする。
【００２９】
第１リードポインタは、バッファメモリ１１９の読み出し先アドレスを示す通常のリードポインタとして使用され、さらに本実施形態では再リードアクセスにおいてもリードポインタとして使用される。図２に、第１リードポインタの説明図を示す。図中の斜線部はバッファメモリ１１９中の有効なデータが保持されている領域を、ブランク領域は有効でないデータが保持されている領域を示す。第１リードポインタは、図２（ａ）に示すように、先入れ先出し式のリングバッファとしてのバッファメモリに保持されたデータのうち、未読み出しの先頭データのアドレスを示す。また、バッファメモリ１１９がリードアクセスされた直後に、図２（ｂ）に示すように、第１リードポインタは次のアドレスに更新され、未読み出しの先頭データのアドレスを指す。
【００３０】
第２リードポインタは、第２リードポインタが有効であるか否かを示す有効フラグＶｒ
が有効であるとき、既に読み出したデータで再利用を所望するデータの先頭アドレスを示す仮想リードポインタとして使用される。そのため、第２リードポインタ（以下仮想リードポインタと呼ぶ。）は、ライトポインタが仮想リードポインタを超えないように、ライトポインタのアドレス更新を阻止するために設定される。図３に、仮想リードポインタの説明図を示す。図中の斜線部は、図２と同様に有効なデータを保持している領域を示し、網目部は、再リード可能なデータを保持している領域を示す。図３（ａ）に示すように、第１リードポインタ、仮想リードポインタおよび第１ライトポインタがそれぞれ領域を指しているものとする。仮想リードポインタが示すアドレスから第１リードポインタが示すアドレスまでのアドレス範囲内のデータ（図３（ａ）ではアドレス００５〜アドレス００８までのデータ）は、再リード可能なデータであり、前回リードしたデータと同一データであることが保証される。なぜなら、図３（ａ）の状態でバッファメモリ１１９へのライトアクセスが続行しても、ライトポインタ（第１ライトポインタ）が仮想リードポインタを追い越さないように制御されるからである。つまり、バッファメモリ１１９へのライトアクセスが繰り返されて図３（ｂ）の状態になれば、バッファメモリ１１９へのライトアクセスが停止される。これにより、第１リードポインタが示すアドレスまでのアドレス範囲内のデータは、ライトされないように保護される。
【００３１】
ライトポインタ保持部１０７は、第１〜第ｎのライトポインタを保持する。本実施形態では、ｎは２であるものとし、第１ライトポインタが通常のライトポインタ、第２ライトポインタが仮想ライトポインタであるものとする。
【００３２】
第１ライトポインタは、バッファメモリ１１９のライトアドレスを示す通常のライトポインタとして使用され、さらに本実施形態では再ライトアクセスにおいてもライトポインタとして使用される。図４に、第１ライトポインタの説明図を示す。図中の斜線部は有効なデータが保持されている領域を示す。第１ライトポインタは、図４（ａ）に示すように、先入れ先出し式のリングバッファとしてのバッファメモリに保持されたデータのうち、未書き込みの先頭領域のアドレスを示す。また、バッファメモリ１１９がライトアクセスされた直後に、図４（ｂ）に示すように、第１ライトポインタは次のアドレスに更新され、未書き込みの領域のアドレスを指す。
【００３３】
第２ライトポインタは、第２ライトポインタが有効であるか否かを示す有効フラグＶｗが有効であるとき、既にライトした領域で再ライトを所望する領域の先頭アドレスを示す仮想ライトポインタとして使用される。そのため、第２ライトポインタ（以下仮想ライトポインタと呼ぶ。）は、リードポインタが仮想ライトポインタを超えないように、リードポインタのアドレス更新を阻止するために設定される。図５に、仮想ライトポインタの説明図を示す。図中の左下がりの斜線部は、図２と同様に有効なデータを保持している領域を示し、右下がりの斜線部は、再ライト可能な領域を示す。図５（ａ）に示すように、第１ライトポインタ、仮想ライトポインタおよび第１リードポインタがそれぞれ領域を指しているものとする。仮想ライトポインタが示すアドレスから第１ライトポインタが示すアドレスまでのアドレス範囲内のデータ（図５（ａ）ではアドレス００５〜アドレス００８までの領域）は、再ライト可能な領域であり、前回ライトしたデータに対して上書きすること可能となる。なぜなら、図５（ａ）の状態でバッファメモリ１１９へのリードトアクセスが続行しても、リードポインタ（第１リードポインタ）が仮想ライトポインタを追い越さないように制御されるからである。つまり、バッファメモリ１１９へのリードアクセスが繰り返されて図５（ｂ）の状態になったとき、バッファメモリ１１９へのリードアクセスが停止される。これにより、仮想ライトポインタが示すアドレスから第１ライトポインタが示すアドレスまでのアドレス範囲内のデータは、リードされないように保護される。
【００３４】
リードアクセス制御部１２０内のフラグ保持部１０３は、仮想リードポインタが有効か否かを示す有効フラグＶｒおよびバッファメモリ１１９へのリードアクセスの停止すべきか否かを示す停止フラグＳｒを保持する。このうち有効フラグＶｒは、ＤＭＡコントローラ１１６などの外部装置からの指示に従って設定可能なフラグである。
【００３５】
また、停止フラグＳｒには、有効フラグＶｒが無効を示すときは第１ＲＰ判定部１０４ａによりその判定結果が設定される。つまり、停止フラグＳｒは、有効フラグＶｒが無効を示すときは第１ＲＰ判定部１０４ａによって通常のリードポインタが通常のライトポインタに追いついた状態であると判定されれば停止を意味する”１”に設定され、追いついた状態でないと判定されれば停止しないことを意味する”０”に設定される。また、停止フラグＳｒは、有効フラグＶｒが有効を示すとき第２ＲＰ判定部１０４ｂによりその判定結果が設定される。つまり、停止フラグＳｒは、有効フラグＶｒが有効を示すときは通常のリードポインタと仮想ライトポインタとに追いついた状態であると判定されれば停止を意味する”１”にセットされ、追いついた状態でないと判定されれば停止しないことを意味する”０”にリセットされる。
【００３６】
有効フラグＶｗが有効を示す場合の、仮想ライトポインタ、第１リードポインタ、停止フラグＳｒの変化例を示すタイムチャートを図６に示す。同図において、サイクル時間毎の仮想ライトポインタのアドレス、第１リードポインタのアドレス、停止フラグＳｒの状態を示している。サイクル時間ｔ０〜ｔ３では仮想ライトポインタはアドレス”００２”を指している。第１リードポインタは、サイクル時間ｔ０からｔ２での各リードアクセスによりアドレス”０００”から”００２”に更新されている。サイクル時間ｔ２において、第１リードポインタは仮想ライトポインタに追いついて実質的に同じアドレスになっている。サイクル時間ｔ２において第２ＲＰ判定部１０４ｂは、第１リードポインタが仮想ライトポインタとに追いついた状態であると判定し、停止フラグＳｒを”１”にセットする。また、サイクル時間ｔ（ｎ＋２）においても、第２ＲＰ判定部１０４ｂは、第１リードポインタが仮想ライトポインタとに追いついた状態であると判定し、停止フラグＳｒを”１”にセットする。一旦セットされた停止フラグは、仮想ライトポインタが変更されることにより、または仮想ライトポインタが無効化されることによりクリアされる。
【００３７】
データリード制御部１０６は、停止フラグＳｒが停止を示していないとき、第１リードポインタに従ってバッファメモリ１１９へのリードアクセスを制御し、停止フラグＳｒが停止を示すとき、リードアクセス動作を停止する（つまり新たに開始しない）。加えて、データリード制御部１０６は、停止フラグＳｒの値とは無関係に、外部装置からの要求に従って、仮想リードポインタにより示されるアドレスから、第１リードポインタにより示されるアドレスまでのアドレス範囲内でリングバッファへの再リードアクセスを制御する。もっとも本実施形態では、制御プロセッサ１１８が外部装置からの要求に従って第１リードポインタを上記のアドレス範囲内で変更することにより再リードを実現するので、この第１リードポインタの変更と同時に停止フラグＳｒは停止しないことを示すように変更されるので停止フラグＳｒによる停止機能は有効に活用される。
【００３８】
ライトアクセス制御部１３０内のフラグ保持部１０８は、仮想ライトポインタが有効か否かを示す有効フラグＶｗおよびバッファメモリ１１９へのライトアクセスの停止すべきか否かを示す停止フラグＳｗを保持する。このうち有効フラグＶｗは、ＤＭＡコントローラ１１７などの外部装置からの指示に従って設定可能なフラグである。
【００３９】
また、停止フラグＳｗには、有効フラグＶｗが無効を示すときは第１ＷＰ判定部１０９ａによりその判定結果が設定される。つまり、停止フラグＳｗは、有効フラグＶｒが無効を示すときは第１ＷＰ判定部１０９ａによって通常のライトポインタが通常のリードポインタに追いついた状態であると判定されれば停止を意味する”１”に設定され、追いついた状態でないと判定されれば停止しないことを意味する”０”に設定される。また、停止フラグＳｒは、有効フラグＶｒが有効を示すとき第２ＷＰ判定部１０９ｂによりその判定結果が設定される。つまり、停止フラグＳｒは、有効フラグＶｒが有効を示すときは通常のライトポインタが仮想リードポインタに追いついた状態であると判定されれば停止を意味する”１”にセットされ、追いついた状態でないと判定されれば停止しないことを意味する”０”にリセットされる。
【００４０】
有効フラグＶｒが有効を示す場合の、仮想リードポインタ、第１ライトポインタ、停止フラグＳｗの変化例を示すタイムチャートを図７に示す。同図において、サイクル時間毎の仮想リードポインタのアドレス、第１ライトポインタのアドレス、停止フラグＳｗの状態を示している。サイクル時間ｔ０〜ｔ３では仮想リードポインタはアドレス”００２”を指している。第１ライトポインタは、サイクル時間ｔ０からｔ２での各ライトアクセスによりアドレス”０００”から”００２”に更新されている。サイクル時間ｔ２において、第１ライトポインタは仮想リードポインタに追いついて実質的に同じアドレスになっている。サイクル時間ｔ２において第２ＷＰ判定部１０９ｂは、第１ライトポインタが仮想リードポインタとに追いついた状態であると判定し、停止フラグＳｗを”１”にセットする。また、サイクル時間ｔ（ｎ＋２）においても、第２ＷＰ判定部１０９ｂは、第１ライトポインタが仮想リードポインタとに追いついた状態であると判定し、停止フラグＳｗを”１”にセットする。一旦セットされた停止フラグＳｗは、仮想ライトポインタが変更されることにより、または仮想ライトポインタが無効化されることによりクリアされる。
【００４１】
データライト制御部１１１は、停止フラグＳｗが停止を示していないとき、第１ライトポインタに従ってバッファメモリ１１９へのライトアクセスを制御し、停止フラグＳｗが停止を示すとき、リードアクセス動作を停止する（つまり新たに開始しない）。加えて、データリード制御部１０６は、停止フラグＳｗの値とは無関係に、外部装置からの要求に従って、仮想ライトポインタにより示されるアドレスから、第１ライトポインタより示されるアドレスまでのアドレス範囲内でリングバッファへの再ライトアクセスを制御する。もっとも本実施形態では、制御プロセッサ１１８が外部装置からの要求に従って第１ライトポインタを上記のアドレス範囲内で変更することにより再リードを実現するので、この第１ライトポインタの変更と同時に停止フラグＳｗは停止しないことを示すように変更されるので停止フラグＳｗによる停止機能は有効に活用される。
【００４２】
以上のように構成された本発明の実施の形態におけるバッファ制御装置についてその動作を説明する。
【００４３】
図８は、制御プロセッサ１１８における、外部装置からの要求に従って仮想ポインタを設定する処理を示すフローチャートを示す。
【００４４】
制御プロセッサ１１８は、バッファメモリをアクセスするマスタとなる装置（ＤＭＡコントローラ１１６、１１７など）から、仮想ポインタに関する要求を受け付ける。この要求示には、ポインタ読出指示、仮想リードポインタ設定指示、有効フラグＶｒ設定指示、仮想ライトポインタ設定指示、有効フラグＶｗ設定指示などがある。
【００４５】
同図のように、制御プロセッサ１１８は、ポインタ種別の指定とともにポインタ読出指示を受け付けたとき、リードポインタ保持部１０２およびライトポインタ保持部１０７から指定されたポインタの値を読み出して、読み出した値を外部装置に応答する（Ｓ１０１、Ｓ１０２）。これにより外部装置は、第１リードポインタの現在の値を取得することができ、再リードを所望するデータサイズに応じて仮想リードポインタのアドレスを決定することができる。同様に、第１ライトポインタの現在の値を取得することができ、再ライトを所望するデータサイズに応じて仮想ライトポインタのアドレスを決定することができる。また、ポインタ種別および値の指定とともにポインタ書込指示を受け付けたとき、リードポインタ保持部１０２およびライトポインタ保持部１０７から指定された値をポインタに設定する。
【００４６】
制御プロセッサ１１８は、アドレスの指定とともに仮想リードポインタ設定指示を受け付けたとき、リードポインタ保持部１０２内の仮想リードポインタにそのアドレスを設定し（Ｓ１０３、１０４）、また、フラグの値の指定とともに有効フラグＶｒ設定指示を受け付けたとき、フラグ保持部１０３内の有効フラグＶｒに指定された値を設定する（Ｓ１０５、Ｓ１０６）。
【００４７】
同様に、制御プロセッサ１１８は、アドレスの指定とともに仮想ライトポインタ設定指示を受け付けたとき、ライトポインタ保持部１０７内の仮想ライトポインタにそのアドレスを設定し（Ｓ１０７、１０８）、また、フラグの値の指定とともに有効フラグＶｗ設定指示を受け付けたとき、フラグ保持部１０８内の有効フラグＶｗ指定された値を設定する（Ｓ１０５、Ｓ１０６）。
【００４８】
このように、バッファメモリをアクセスするマスタとなる装置は、有効フラグＶｒを無効に設定したときはバッファメモリ１１９からのリードは通常のリングバッファとして使用でき、有効フラグＶｒを有効に設定したときはバッファメモリ１１９をデータの再利用機能を有するリングバッファとして使用できる。つまり、有効フラグの設定により、単純なリングバッファとデータの再利用機能付きリングバッファとを切り換えて利用することができる。同様に、バッファメモリをアクセスするマスタとなる装置は、有効フラグＶｒを設定することにより、単純な一度だけライトリングバッファとデータの再ライト可能なリングバッファとを切り換えて利用することができる。
【００４９】
次に、図３（ｂ）、（ｃ）を用いて第１動作例として仮想リートポインタが有効に設定されている場合の動作例について説明する。
【００５０】
ＤＭＡコントローラ１１７はデータを書き込むために、転送要求をバッファコントローラ１０１に発行する。このとき、バッファコントローラ１０１は、ライトポインタ制御部１１０、データライト制御部１１１を用い、第１ライトポインタが示すバッファの位置にデータのライトアクセスを実行する。このライトアクセスにより第１ライトポインタは更新される。このとき、第２ＷＰ判定部１０９ｂは仮想リードポインタと第１ライトポインタの関係を判断し、仮想リードポインタと第１ライトポインタが実質的に同じバッファの位置を指し示している場合は、データライトを実行できないと判断し、フラグ保持部１０８内のライト停止フラグＳｗをセットする。このとき、バッファコントローラ１０１は、転送停止要求１１４をＤＭＡコントローラ１１７に通知し、データライトの実行を停止させる。このときの状態を図３（ｂ）に示す。
【００５１】
この状態において、制御プロセッサ１１８がデータリード制御部１０６に要求を出すことにより、データリード制御部１０６はリードポインタ制御部１０５を用いて第１リードポインタが指し示すバッファの位置を仮想リードポインタが指し示す位置に変更する。このときの状態を図３（ｃ）に示す。その後、ＤＭＡコントローラ１１６は変更された第１リードポインタの指し示す位置よりデータリードを実行する。
【００５２】
このように、このバッファコントローラ１０１は過去に読み出したデータに対して、書き込み保護を行いながら、過去に読み出したデータを再リードすることができる。
【００５３】
なお、第１リードポインタが指し示す位置は、制御プロセッサ１１８より通知される要求により変更されるとしたが、制御プロセッサ１１８以外の外部デバイスよりバッファコントローラ１０１に通知されるイベントを用いても良い。
【００５４】
また、第１リードポインタの指し示す位置を移動させる場合、ライトポインタの指し示す位置によらず、仮想リードポインタの指し示す位置に移動させても良い。
【００５５】
また、仮想リードポインタは、過去にＤＭＡコントローラによりリードが実行されたバッファの位置を指し示しているが、ＤＭＡコントローラがまだデータリードを実行していない場所を指し示しても良い。
【００５６】
また、リードポインタの移動先は仮想リードポインタとしたが、これ以外のリードポインタの位置に移動しても良い。
【００５７】
また、本実施形態ではデータリードを実行するＤＭＡコントローラ１１６とデータライトを実行するＤＭＡコントローラ１１７を別々のＤＭＡコントローラとしているが、同一のＤＭＡコントローラであっても良い。
【００５８】
さらに、図５（ｂ）、（ｃ）を用いて第２の動作例として仮想ライトポインタが有効に設定されている場合の動作例について説明する。
【００５９】
仮想ライトポインタは、データリードの実行を停止する位置を示すと同時に、ＤＭＡコントローラが過去にデータライトを実行したバッファのある位置を指し示している。
【００６０】
ＤＭＡコントローラ１１６がデータを読み込むために、転送要求を１０１のバッファコントローラ１０１に発行する。このとき、バッファコントローラ１０１は、リードポインタ制御部１０５、データリード制御部１０６を用い、第１リードポインタが示すバッファの位置にデータリードを実行する。第２ＲＰ判定部１０４ｂは仮想ライトポインタと第１リードポインタの関係を判断する。このとき、図５（ｂ）のように、仮想ライトポインタと第１リードポインタが同じバッファの位置を指し示している場合は、第２ＲＰ判定部１０４ｂはデータリードを実行できないと判断し、リードの停止フラグＳｒをセットする。このとき、バッファコントローラ１０１は１１２で示される転送停止要求をＤＭＡコントローラに通知し、データリードの実行を停止させる。
【００６１】
この状態において、制御プロセッサ１１８がデータライト制御部１１１に要求を出すことにより、データライト制御部１１１はライトポインタ制御部１１０を用いて第１ライトポインタが指し示すバッファの位置を仮想ライトポインタが指し示す位置に変更する。その状態を図５（ｃ）に示す。その後、ＤＭＡコントローラは変更された第１ライトポインタの指し示す位置よりデータライトを実行する。
【００６２】
このように、バッファコントローラ１０１は過去に書き込んだデータに対して、読み込み保護を行いながら、過去に書き込んだデータを再書き込みすることができる。
【００６３】
なお、第１リードポインタが指し示す位置は、制御プロセッサ１１８より通知される要求により変更されるとしたが、制御プロセッサ以外の外部デバイスよりバッファコントローラ１０１に通知されるイベントを用いても良い。
【００６４】
また、第１ライトポインタの指し示す位置を移動させる場合、リードポインタの指し示す位置によらず、仮想ライトポインタの指し示す位置に移動させても良い。
【００６５】
また、仮想ライトポインタは、過去にＤＭＡコントローラによりデータライトが実行されたバッファの位置を指し示しているが、ＤＭＡコントローラがまだデータライトを実行していない場所を指し示しても良い。
【００６６】
また、ライトポインタの移動先は仮想ライトポインタとしたが、これ以外のライトポインタの位置に移動しても良い。
【００６７】
また、本実施形態ではデータリードを実行するＤＭＡコントローラとデータライトを実行するＤＭＡコントローラを別々のＤＭＡコントローラとしているが、同一のＤＭＡコントローラでも良い。
【００６８】
続いて、図９（ａ）から（ｃ）を用いて、第３の動作例として仮想リードポインタおよび仮想ライトポインタが有効に設定されている場合の動作例を説明する。同図において仮想リードポインタは、データライトの実行を停止する位置を示すと同時に、ＤＭＡコントローラ１１６が過去にデータリードを実行したバッファのある位置を指し示している。仮想ライトポインタは、データライトの実行を停止する位置を示すと同時に、ＤＭＡコントローラ１１７が過去にデータライトを実行したバッファのある位置を指し示している。
【００６９】
図９(ａ）において、第１ライトポインタが仮想リードポインタと同じバッファの位置を指し示している状態を、つまりバッファメモリ１１９に対しデータライトの実行が停止された状態を表している。データライトの実行が停止された状態において、制御プロセッサ１１８がデータリード制御部１０６とデータライト制御部１１１に要求を出すことにより、データライト制御部１１１はライトポインタ制御部１１０を用いて第１ライトポインタが指し示すバッファの位置を仮想ライトポインタが指し示す位置に変更する。この状態を図９（ｂ）に示す。その後、データリード制御部１０６はリードポインタ制御部１０５を用いて、仮想リードポインタが指し示す位置を第１ライトポインタが指し示す位置に変更する。図９（ｃ）は仮想リードポインタの位置を変更し、書き込み保護対象に新しいデータを加えて保護対象とした状態を表している。
【００７０】
このように、バッファコントローラ１０１は書き込み保護を行っている対象を変更することが可能になり、この場合は、書き込み保護対象に新しいデータを加えて保護対象とすることが出来る。
【００７１】
なお、上記では、第１ライトポインタを仮想ライトポインタの位置に移動した後に、仮想リードポインタを仮想ライトポインタの位置に移動するとしたが、第１ライトポインタと仮想リードポインタを同時に仮想ライトポインタの位置に移動させても良い。
【００７２】
また、仮想ライトポインタ、仮想リードポインタが指し示す位置は、制御プロセッサより通知される要求により変更されるとしたが、制御プロセッサ以外の外部デバイスよりバッファコントローラ１０１に通知されるイベントを用いても良い。
【００７３】
また、上記では、リードポインタ、ライトポインタをそれぞれ２個として説明したが、２個以上の構成でも良い。
【００７４】
また、本実施形態ではデータリードを実行するＤＭＡコントローラとデータライトを実行するＤＭＡコントローラを別々のＤＭＡコントローラとしているが、同一のＤＭＡコントローラでも良い。
【００７５】
さらに、図１０（ａ）から（ｃ）を用いて、第４の動作例として仮想リードポインタおよび仮想ライトポインタが有効に設定されている場合の動作例を説明する。
【００７６】
図１０（ａ）は、第１リードポインタが仮想ライトポインタと同じバッファの位置を指し示している状態、すなわち、データリードの実行が停止された状態を示している。
【００７７】
この状態において、制御プロセッサ１１８がデータリード制御部１０６とデータライト制御部１１１に要求を出すことにより、データリード制御部１０６はリードポインタ制御部１０５を用いて第１リードポインタが指し示すバッファの位置を仮想リードポインタが指し示す位置に変更する。この状態を図１０（ｂ）に示す。その後、データライト制御部１１１はライトポインタ制御部１１０を用いて、仮想ライトポインタが指し示す位置を第１リードポインタが指し示す位置に変更する。
【００７８】
このように、バッファコントローラ１０１は読み込み保護を行っている対象を変更することが可能になり、この場合は、読み込み保護対象に一度読み込みを行ったデータを加えて保護対象とすることが出来る。
【００７９】
なお、上記では、第１リードポインタを仮想リードポインタの位置に移動した後に、仮想ライトポインタを仮想リードポインタの位置に移動するとしたが、第１リードポインタと仮想ライトポインタを同時に仮想リードポインタの位置に移動させても良い。
【００８０】
また、第１リードポインタ、仮想ライトポインタが指し示す位置は、制御プロセッサより通知される要求により変更されるとしたが、制御プロセッサ以外の外部デバイスよりバッファコントローラ１０１に通知されるイベントを用いても良い。
【００８１】
また、本実施形態では、リードポインタ、ライトポインタをそれぞれ２個として説明したが、２個以上の構成でも良い。
【００８２】
また、本実施形態ではデータリードを実行するＤＭＡコントローラとデータライトを実行するＤＭＡコントローラを別々のＤＭＡコントローラとしているが、同一のＤＭＡコントローラでも良い。
【００８３】
続いて、図１１を用いて、本発明のバッファ制御装置およびバッファメモリ装置の適用例として、画像復号化システムの構成について説明する。本システムは、制御プロセッサ１００１、バッファコントローラ１００２、バッファメモリ１００３、画像復号化装置１００４、ストリーム入力制御部１００５で構成される。このうち、制御プロセッサ１００１、バッファコントローラ１００２、バッファメモリ１００３は、制御プロセッサ１１８、バッファコントローラ１０１、バッファメモリ１１９と同じである。
【００８４】
ストリーム入力制御部１００５より、バッファコントローラ１００２を用いてバッファメモリ１００３に、入力ストリームデータを入力し、画像復号化装置１００４はバッファコントローラ１００２を用いてバッファメモリ１００３より入力ストリームデータを読み込み、画像復号化処理を行う。ストリーム入力制御部１００５、画像復号化装置１００４、バッファコントローラ１００２は、制御プロセッサ１００１により制御される。
【００８５】
この構成によれば、画像復号化装置１００４が、入力ストリームデータの処理においてエラー（例えばヘッダ解析エラー）が発生した場合に、予め仮想リードポインタを設定しておくことにより、エラーが発生したストリームデータをバッファメモリ１１０３から再度読出すことができ、エラー回復処理を高速化することができる。
【００８６】
なお、画像復号化装置１００４の代わりに音声復号化装置を備えてもよい。
【００８７】
また、図１１を用いて、本発明のバッファ制御装置およびバッファメモリ装置の適用例として、画像復号化システムの構成について説明する。同図は、図１０と比べて、画像復号化装置１００４、ストリーム入力制御部１００５の代わりに、画像符号化装置１１０５、ストリーム出力制御部１１０４を備える点が異なっている。同じ点は説明を省略し異なる点を中心に説明する。画像符号化装置１１０５より、バッファコントローラ１１０２を用いてバッファメモリ１１０３に、符号化済みストリームデータを入力し、ストリーム出力制御部１１０４はバッファコントローラ１１０２を用いてバッファメモリ１１０３より符号化済みストリームデータを読み込み、ストリーム出力を行う。ストリーム出力制御部１１０４、画像符号化装置１１０５、バッファコントローラ１１０２は、制御プロセッサ１１０１により制御される。
【００８８】
この構成によれば、画像符号化装置１１０５は、予め仮想ライトポインタを設定しておくことにより、ストリームデータの出力においてバッファメモリ１１０３のアクセス境界に不足するデータを一旦出力し、再度、アクセス境界に達するデータを上書きすることができる。
【００８９】
なお、ここで画像符号化装置１１０５の代わりに音声符号化装置を備えてもよい。
【００９０】
なお、仮想リードポインタの値を固定としないで、第１リードポインタと仮想ポインタの値との差分を一定値に保つようリードポインタ制御部１０５が、更新するようにしてもよい。例えば、前記差分を一定値は、ストリームデータのヘッダサイズとしてもよいし、外部の読出し装置が処理するデータ単位と同じ程度のサイズとしてもよい。
【００９１】
また、第１リードポインタは、未読み出しの先頭データのアドレスではなく、最後に読み出したデータのアドレスを示すようにしてもよい、その場合、第１リードポインタの更新は、リードアクセスの直後でなく、リードアクセスの直前にすればよい。
【００９２】
第１リードポインタはリードアクセスされる毎にインクリメントされ、第１ライトポインタはライトアクセスされる毎にインクリメントされる例を示したが、第１リードポインタはリードアクセスされる毎にデクリメントされ、第１ライトポインタはライトアクセスされる毎にデクリメントされるようにしてもよい。
【００９３】
（実施の形態２）
本実施の形態における、バッファ制御装置を有するバッファメモリ装置を含むシステムの構成を示すブロック図である。以下実施の形態１と同じ点は説明を省略して、異なる点を中心に説明する。実施の形態１では、再リード動作は第１リードポインタを用い、再ライト動作は第１ライトポインタを用いて行っているが、本実施の形態では再リード動作は第１リードポインタではなく再リード専用のポインタを用い、再ライト動作は第１ライトポインタではなく再ライト専用のポインタを用いる点が異なっている。
【００９４】
そのため、リードポインタ保持部１０２が保持するポインタ数は３（ｎ＝３）であり、リードポインタ保持部１０２は第１から第３リードポインタを保持する。また、ライトポインタ保持部１０７が保持するポインタ数は３（ｎ＝３）であり、ライトポインタ保持部１０７は第１から第３ライトポインタを保持する。
【００９５】
第１リードポインタは、実施の形態１の第１リードポインタとほぼ同じであるが、再リードには用いられない点が異なる。つまり、再リードのために第１リードポインタが変更されることがない。第２リードポインタは、実施の形態１の第２リードポインタと同じ仮想リードポインタである。第３リードポインタは、再リード用のポインタであり、マスタからの指示によって第１リードポインタと第２リードポインタのアドレス範囲内のアドレスが設定され、リードアクセス毎に更新（インクリメント）される。その際、第３リードポインタは、第１リードポインタのアドレスを超えることができない。
【００９６】
第１ライトポインタは、実施の形態１の第１ライトポインタとほぼ同じであるが、再ライトには用いられない点が異なる。つまり、再ライトのために第１ライトポインタが変更されることがない。第２ライトポインタは、実施の形態１の第２ライトポインタと同じ仮想仮想ポインタである。第３ライトポインタは、再ライト用のポインタであり、マスタからの指示によって第１ライトポインタと第２ライトポインタのアドレス範囲内のアドレスが設定され、ライトアクセス毎に更新（インクリメント）される。その際、第３ライトポインタは、第１ライトポインタのアドレスを超えることができない。
【００９７】
この構成によれば、再リード、再ライトをを行う場合に、予め設定しておいた第３リードポインタまたは第３ライトポインタに切換だけでできるという利点がある。
【００９８】
（実施の形態３）
本実施の形態における、バッファ制御装置を有するバッファメモリ装置を含むシステムの構成を示すブロック図である。以下実施の形態１と同じ点は説明を省略して、異なる点を中心に説明する。リードポインタ保持部１０２が保持するポインタ数はｎ個（例えば１０個）であり、第１、第２リードポインタが、ｎ個のポインタの中からそれぞれ選択可能になっている。リードポインタ保持部１０２が保持するポインタ数はｎ個（例えば１０個）であり、第１、第２リードポインタが、ｎ個のポインタの中からそれぞれ選択可能になっている。またライトポインタ保持部１０７が保持するポインタ数もｎ個（例えば１０個）であり、第１、第２ライトポインタが、ｎ個のポインタの中からそれぞれ選択可能になっている。
【００９９】
こうすれば、例えば第１リードポインタを現用第１リードポインタと再リード用第１リードポインタの２つから選択し、再リード用には予め第２ポインタを同じアドレスを設定しておけば、切換だけで再リードすることがきるという利点がある。
【０１００】
なお、実施の形態２においてもｎ個のリードポインタから第１〜第３リードポインタ、ｎ個のライトポインタから第１〜第３ライトポインタをそれぞれ選択するようにしてもよい。
【産業上の利用可能性】
【０１０１】
本発明はバッファコントローラに複数のリードポインタ、ライトポインタを設けることにより、データの保護や再読込、再書き込みが出来るだけでなく、読み飛ばし、書き飛ばしなどが実現できる優れたバッファコントローラを実現できる物であり、画像符号化装置、画像復号化装置等のバッファコントローラとして有用である。
【図面の簡単な説明】
【０１０２】
【図１】図１は、本発明の実施の形態１におけるバッファ制御装置を有するバッファメモリ装置を含むシステムの構成を示すブロック図である。
【図２】図２は、リードポインタの説明図である。
【図３】図３は、仮想リードポインタの説明図である。
【図４】図４は、ライトポインタの説明図である。
【図５】図５は、仮想ライトポインタの説明図である。
【図６】図６は、仮想ライトポインタ、第１リードポインタ、停止フラグＳｗの変化を説明するタイムチャート図である。
【図７】図７は、仮想リードポインタ、第１ライトポインタ、停止フラグＳｒの変化を説明するタイムチャート図である。
【図８】図８は、制御プロセッサ１１８における外部要求に従って仮想ポインタを設定する処理を示すフローチャートを示す。
【図９】図９は、第１リードポインタ、仮想リードポインタ、第１ライトポインタ、仮想ライトポインタの説明図である。
【図１０】図１０は、第１ライトポインタ、仮想ライトポインタ、第１リードポインタ、仮想リードポインタの説明図である。
【図１１】図１１は、本発明のバッファ制御装置およびバッファメモリ装置を適用した画像復号化システムの構成を示すブロック図である。
【図１２】図１２は、本発明のバッファ制御装置およびバッファメモリ装置を適用した画像符号化システムの構成を示すブロック図である。
【符号の説明】
【０１０３】
１０１  バッファコントローラ
１０２  リードポインタ保持部
１０３  フラグ保持部
１０４ａ  第１リードポインタ判定部
１０４ｂ  第２リードポインタ判定部
１０５  リードポインタ制御部
１０６  データリード制御部
１０７  ライトポインタ保持部
１０８  フラグ保持部
１０９ａ  第１ライトポインタ判定部
１０９ｂ  第２ライトポインタ判定部
１１０  ライトポインタ制御部
１１１  データライト制御部
１１６  ＤＭＡコントローラ
１１７  ＤＭＡコントローラ
１１８  制御プロセッサ
１１９  バッファメモリ
１２０  リードアクセス制御部
１３０  ライトアクセス制御部
Ｖｒ  有効フラグ
Ｖｗ  有効フラグ
Ｓｒ  停止フラグ
Ｓｗ  停止フラグ
【図１】
0004398499.tif 000002
【図２】
0004398499.tif 000003
【図３】
0004398499.tif 000004
【図４】
0004398499.tif 000005
【図５】
0004398499.tif 000006
【図６】
0004398499.tif 000007
【図７】
0004398499.tif 000008
【図８】
0004398499.tif 000009
【図９】
0004398499.tif 000010
【図１０】
0004398499.tif 000011
【図１１】
0004398499.tif 000012
【図１２】
0004398499.tif 000013