(57)【特許請求の範囲】
【請求項１】
複数のクライアントデバイスと、
上記複数のクライアントデバイスで共用されるリソースと、
上記リソースを制御するリソース制御手段と、
上記複数のクライアントデバイスと上記リソースとの間でデータを送受信するバスと、
上記各クライアントデバイスから上記バスを介して転送されてきたリクエストを一旦蓄積し、上記リソース制御手段に読み出すバッファ手段と、
上記バッファ手段に蓄積されている上記リクエストに含まれるアクセスカウント情報を抽出し、上記バッファ手段に蓄積されている上記リクエストに含まれるアクセスカウント情報の総和を求めるアクセスカウント数総和算出手段と、
上記バッファ手段に蓄積されている上記リクエストに含まれるアクセスカウント情報の総和が所定のしきい値を越えたら、上記クライアントデバイスのアクセスを制限するようにする手段と
を備え、
上記アクセスカウント数総和算出手段は、
上記バッファ手段に蓄積されているリクエストのアクセスカウント情報の総和をカウントする総和カウンタと、
上記バスから上記バッファ手段にリクエストが入力されたら、上記リクエストからアクセスカウントの値を検出し、上記アクセスカウントの値をそれまでの上記総和カウンタの値に加算する手段と、
上記バスからリクエストが入力されたら、上記リクエストのワードからアクセスカウントの値を検出し、上記アクセスカウントの値を保持するデータ保持手段と、
上記バスから入力されるデータ量のカウント値から推定される上記バッファの残量の推定値と上記バッファ手段の実際の残量とを比較して、上記バッファ手段からのデータの読み出しがあったとことを判断するバッファ読み出し判断手段と、
上記バッファ手段からリクエストのワードが読み出されたと判断されたら、上記バッファ手段から読み出されたリクエストのワードのアクセスカウントの値に対応する値を上記データ保持手段から読み出し、上記データ保持手段から読み出された値を上記総和カウンタの値から減算する手段と
を備えるようにしたデータ転送システム。
【請求項２】
上記複数のクライアントデバイスと上記リソースとの間では、パケット構造でデータが転送される請求項１に記載のデータ転送システム。
【請求項３】
上記アクセスカウント情報は、リクエストに付加されているバイトカウントである請求項１に記載のデータ転送システム。
【請求項４】
上記アクセスカウント情報は、リクエストに付加されているワードカウントである請求項１に記載のデータ転送システム。
【請求項５】
複数のクライアントデバイスで共用されるリソースを制御するリソース制御手段と、上記複数のクライアントデバイスと上記リソースとの間でデータを送受信するバスとの間のバッファ手段に蓄積されているリクエストのアクセスカウント情報の総和をカウントする総和カウンタと、
上記バスから上記バッファ手段にリクエストが入力されたら、上記リクエストからアクセスカウントの値を検出し、上記アクセスカウントの値をそれまでの上記総和カウンタの値に加算する手段と、
上記バスからリクエストが入力されたら、上記リクエストのワードからアクセスカウントの値を検出し、上記アクセスカウントの値を保持するデータ保持手段と、
上記バスから入力されるデータ量のカウント値から推定される上記バッファの残量の推定値と上記バッファ手段の実際の残量とを比較して、上記バッファ手段からのデータの読み出しがあったとことを判断するバッファ読み出し判断手段と、
上記バッファ手段からリクエストのワードが読み出されたと判断されたら、上記バッファ手段から読み出されたリクエストのワードのアクセスカウントの値に対応する値を上記データ保持手段から読み出し、上記データ保持手段から読み出された値を上記総和カウンタの値から減算する手段と、
上記総和カウンタによりカウントされるアクセスカウントの総和の値と所定のしきい値とを比較し、上記総和カウンタアクセスの総和の値が所定のしきい値を越えたら、ストップ信号を出力する手段と
を備えるようにしたアクセスモニタ装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、複数のクライアントデバイスと、これら複数のクライアントデバイスで共用されるメモリと、メモリの制御を行うメモリコントローラとからなり、複数のクライアントとメモリコントローラとをバスを介して接続するようなデータ転送システム、およびこのようなシステムに用いて好適なアクセスモニタ装置に関するもので、特に、メモリバスとメモリコントローラとの間に設けられるＦＩＦＯメモリをモニタして、リードの場合もライトの場合も、所定時間以内のレイテンシを保証できるようにしたものに係わる。
【０００２】
【従来の技術】
例えば、ＭＰＥＧ（Moving Picture Coding Experts Group ）２のトランスポートストリームを入力し、このトランスポートストリームからビデオパケットやオーディオパケットを分離し、デコードされたビデオデータに対して、画像処理を行ったり、ＯＳＤ（On Screen Display）画像を重畳したりするような画像処理チップの開発が進められている。このような画像処理チップには、任意のソース矩形領域の画像をデスティネーション領域にコピーするためのＢｉｔＢＬＴ(Bit Block Transfer)エンジンや、背景となるような静止画の処理を行うＪＰＥＧ(Joint Photographic Experts Group)エンジン等が配される。これらのクライアントデバイスの処理には、大容量のメモリが必要であり、各クライアントデバイスでメモリが共用される。このような画像処理チップのためのメモリとしては、ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）が用いられている。
【０００３】
図１３は、このような画像処理クライアントデバイスで使用可能なメモリ制御システムの構成を示すブロック図である。
【０００４】
図１３において、クライアントデバイス１１１、１１２、１１３は、共用のリソースであるメモリ１１５をアクセスするデバイスである。例えば、画像処理チップを構成するシステムにおいては、クライアントデバイス１１１、１１２、１１３は、ＢｉｔＢＬＴエンジン、ＪＰＥＧエンジン等のプロセッサである。これらのクライアントデバイス１１１、１１２、１１３は、ＦＩＦＯ(First-In First-Out)メモリ１２１Ａ、１２１Ｂ、１２１Ｃ及びＦＩＦＯメモリ１２２Ａ、１２２Ｂ、１２２Ｃをそれぞれ介して、メモリバス１１０に接続される。また、メモリバス１１０には、ＦＩＦＯメモリ１２３及び１２４を介して、メモリコントローラ１１４が接続される。メモリコントローラ１１４は、メモリ１１５のリード／ライトを制御するリソース制御回路である。
【０００５】
メモリ１１５は、複数のクライアントデバイス１１１、１１２、１１３で共通に利用可能なリソースである。メモリ１１５としては、例えば、ＳＤＲＡＭが用いられる。ＳＤＲＡＭは、クロックに同期した連続的なデータ転送が可能であり、バースト転送を指定すると、指定したデータ数のデータ転送を１クロック単位で連続して行うことができる。ここでは、ＳＤＲＡＭの構成とされたメモリ１１５は、１クロックで６４ビットのデータを転送することができる。
【０００６】
メモリバス１１０は、クライアントデバイス１１１、１１２、１１３と、メモリコントローラ１１４との間で、データの転送を行うバスである。メモリバス１１０は、クライアントデバイス１１１、１１２、１１３側からメモリコントローラ１１４側にデータを送る送信バス１１０Ａと、メモリコントローラ１１４側からのデータをクライアントデバイス１１１、１１２、１１３側で受信する受信バス１１０Ｂとからなる。
【０００７】
各クライアントデバイス１１１、１１２、１１３とメモリバス１１０との間には、ＦＩＦＯメモリ１２１Ａ、１２１Ｂ、１２１Ｃ及びＦＩＦＯメモリ１２２Ａ、１２２Ｂ、１２２Ｃが設けられる。これらのＦＩＦＯメモリ１２１Ａ、１２１Ｂ、１２１Ｃ、ＦＩＦＯメモリ１２２Ａ、１２２Ｂ、１２２Ｃは、バッファとして設けられる。各クライアントデバイス１１１、１１２、１１３とメモリバス１１０との間には、ＦＩＦＯメモリ１２１Ａ、１２１Ｂ、１２１Ｃ及びＦＩＦＯメモリ１２２Ａ、１２２Ｂ、１２２Ｃが設けられているため、各クライアントデバイス１１１、１１２、１１３は、メモリバス１１０の転送クロックとは非同期で、リクエストの送信やデータの受信が行える。
【０００８】
また、メモリコントローラ１１４とメモリバス１１０との間には、ＦＩＦＯメモリ１２３及びＦＩＦＯメモリ１２４が設けられる。メモリコントローラ１１４とメモリバス１１０との間には、ＦＩＦＯメモリ１２３及びＦＩＦＯメモリ１２４が設けられているため、メモリコントローラ１１４は、メモリバス１１０の転送クロックとは非同期で、リクエストの受信やデータの送信が行える。
【０００９】
各クライアントデバイス１１１、１１２、１１３には、固有のデバイスＩＤが割り振られている。各クライアントデバイス１１１、１１２、１１３は、メモリ１１５をアクセスする場合には、メモリバス１１０の送信バス１１０Ａを介して、リクエストを送信する。このリクエストは、パケット構造となっている。
【００１０】
クライアントデバイス１１１、１１２、１１３は、全て、共通のメモリ１１５にアクセスすることが可能である。このため、複数のクライアントデバイス１１１、１１２、１１３で、メモリ１１５へのリクエストが同時に起こることがあり得る。そこで、クライアントデバイス１１１、１１２、１１３からのリクエストの競合を防ぐために、アービタ１１６が設けられる。
【００１１】
クライアントデバイス１１１、１１２、１１３がメモリ１１５をアクセスする場合には、まず、アービタ１１６にバスの使用権を得るためのリクエストが送られる。アービタ１１６は、複数のクライアントデバイスからのリクエストがあった場合には、そのリクエストを調停し、メモリバス１１０の使用を許可する１つのクライアントデバイスにのみ、グラントを返す。複数のクライアントデバイス１１１、１１２、１１３のうち、グラントが返されてきたクライアントデバイスのみがメモリ１５をアクセスすることができる。
【００１２】
メモリのライトのリクエストの場合には、クライアントデバイス１１１、１１２、１１３から、ライトのリクエストが送信される。このライトのリクエストが送信バス１１０Ａを介して、メモリコントローラ１１４に送られる。メモリコントローラ１１４により、ライトのリクエストに応じて、クライアントデバイス１１１、１１２、１１３から送られたライトデータがメモリ１１５の所望のアドレスに書き込まれる。
【００１３】
メモリのリードのリクエストの場合には、クライアントデバイス１１１、１１２、１１３から、リードのリクエストが送信される。このリードのリクエストが送信バス１１０Ａを介して、メモリコントローラ１１４に送られる。メモリコントローラ１１４で、リードのリクエストに応じて、メモリ１１５の所望のアドレスからデータが読み出される。このリードデータがメモリコントローラ１１４から、受信バス１１０Ｂを介して転送され、リードのリクエストを送信したクライアントデバイス１１１、１１２、１１３で受信される。
【００１４】
このように、このシステムでは、送信バス１１０Ａを介して、クライアントデバイス１１１、１１２、１１３からリクエストが送信され、このリクエストのワードがメモリバス１１０を介して、ＦＩＦＯメモリ１２３に蓄積されていく。
【００１５】
ここで、メモリバス１１０に転送されるワードのクロックと、メモリコントローラ１１４によりメモリ１１５がアクセスされるワードのクロックとは非同期になっており、ＦＯＦＯ１２２及びＦＩＦＯメモリ１２３がメモリバス１１０に転送されるワードのクロックと、メモリコントローラ１１４によりメモリ１１５がアクセスされるワードのクロックとのバッファとなっている。
【００１６】
しかしながら、仮に、メモリバス１１０に転送されるワードのクロックの周波数の方が、メモリコントローラ１１４によりメモリ１１５がアクセスされるワードのクロックの周波数より高いとすると、クライアントデバイス１１０、１１１、１１２からメモリバス１１０のバス１１０Ａを介して送られてくるワードがＦＩＦＯメモリ１２３に貯まり、ＦＩＦＯメモリ１２３がオーバーフローを起こすことになる。
【００１７】
そこで、図１４に示すように、ＦＩＦＯメモリ残量モニタ回路１２５が設けられる。このＦＩＦＯメモリ残量モニタ回路１２５により、ＦＩＦＯメモリ１２３の残量が監視される。そして、ＦＩＦＯメモリ１２３がオーバーフローを起こしそうになったら、ＦＩＦＯメモリ残量モニタ回路１２５からアービタ１１６にストップ信号が送られ、バスの調停が停止される。これにより、クライアントデバイス１１１、１１２、１１３からメモリ１１５をアクセスするためののリクエストの送信が止められ、ＦＩＦＯメモリ１２３のオーバーフローが防止される。
【００１８】
また、このＦＩＦＯメモリ残量モニタ回路１２５により、バスのレイテンシを保証できる。
【００１９】
すなわち、クライアントデバイス１１１、１１２、１１３がリクエストをバスに送ったら、その処理が所定のレイテンシ以内に終了することが保証されていないと、クライアントデバイス１１１、１１２、１１３は、次の処理に移れない。このため、クライアントデバイス１１１、１１２、１１３がリクエストをメモリバス１１０に送ったら、その処理が所定のレイテンシ時間以内に終了することを保証している。
【００２０】
ライトのリクエストの場合には、ライトのヘッダのワードに続いて、ライトデータのワードが続き、書き込みにかかる時間は、ライトのヘッダのワードに続くライトデータのワードに対応する。したがって、ＦＩＦＯメモリ１２３の空き容量が大きいときには、その前にＦＩＦＯメモリ１２３に蓄積されているリクエストに対する処理は直ぐに終わるので、リクエストに対するメモリアクセスが直ちに行われる。ＦＩＦＯメモリ１２３の空き容量が小さいと、その前にＦＩＦＯメモリ２３に蓄積されているリクエストに対する処理を終了してからでないと次の処理に入れないので、送られたリクエストに対するアクセスは時間がかかる。
【００２１】
例えば、５ワード分のデータの書き込みを行う場合には、送信バス１１０Ａを介してクライアントデバイス１１１、１１２、１１３から、ヘッダのワードに続いて５ワード分のデータが送られ、ＦＩＦＯメモリ１２３に蓄積される。メモリ１１５のアクセスは例えば１クロックで１ワード（６４ビット）がアクセスされる。したがって、このリクエストを処理するためには、メモリコントローラ１１４とメモリ１１５との間のクロックで、５クロック分の時間が必要になる。
【００２２】
これに対して、１０ワード分のデータの書き込みを行う場合には、送信バス１１０Ａを介してクライアントデバイス１１１、１１２、１１３から、ヘッダのワードに続いて１０ワード分のデータが送られ、ＦＩＦＯメモリ１２３に蓄積される。このリクエストを処理するためには、メモリコントローラ１１４とメモリ１１５との間のクロックで、１０クロック分の時間が必要になる。
【００２３】
このように、ライトの場合には、ＦＩＦＯメモリ１２３の蓄積量と処理時間とは、対応する関係となる。したがって、ＦＩＦＯメモリ１２３の残量から、処理時間が推定でき、ＦＩＦＯメモリ１２３の残量を監視し、ＦＩＦＯメモリ１２３がオーバーフローを起こしそうになったら、アービタ１１６にストップ信号が送ることで、所定時間以内のレイテンシを保証できる。
【００２４】
【発明が解決しようとする課題】
しかしながら、このように、ＦＩＦＯメモリ１２３の残量を常に監視し、ＦＩＦＯメモリ１２３の残量が所定値以下になったら、アービタ１１６にストップ信号を送るような処理だけでは、メモリバス１１０のレイテンシを必ずしも保証できない。これは、ライトリクエストについてはワード数が処理時間に対応するが、リードリクエストについては、ワード数が処理時間に係わらず一定であるからである。
【００２５】
つまり、クライアントデバイス１１１、１１２、１１３からメモリコントローラ１１４側に送るライトのリクエストの場合には、ライトを示すヘッダのワードに続いて、メモリ１１５に書き込むライトデータのワードが送られる。ＦＩＦＯメモリ１２３には、ライトのヘッダのワードと、ライトデータのワードとが蓄積される。したがって、メモリに書き込むデータ量が大きくなれば、ヘッダのワードに続いて送られるデータのワード数も多くなり、ＦＩＦＯメモリ１２３に貯まるデータ量も大きくなり、ＦＩＦＯメモリ１２３の蓄積量が処理時間に対応する。
【００２６】
これに対して、リードのときには、リードを示すヘッダのワードのみが送られる。このため、ＦＩＦＯメモリ１２３の蓄積量からでは、処理時間は分からない。
【００２７】
例えば、５ワード分のデータの読み出し行う場合にも、１０ワード分のデータの読み出しを行う場合にも、送られてくるのは、ヘッダの１ワードだけである。これに対して、処理時間は、読み出しを行うデータのワード数により変わってくる。５ワードのデータの読み出しを行うのであれば、メモリコントローラ１１４とメモリ１１５との間のクロックで５クロック分の時間が必要になり、１０ワードのデータの読み出しを行うのであれば、メモリコントローラ１１４とメモリ１１５との間のクロックで１０クロック分の時間が必要になる。
【００２８】
したがって、例えば、ＦＩＦＯメモリ１２３に３ワードのリードリクエストがあったとしても、このＦＩＦＯメモリ１２３にある３ワードのリクエストが全て５ワードの読み出しを行うものであるなら、その処理に（３×５＝１５）クロックの時間がかかるのに対して、この３ワードが全て１０ワードの読み出しを行うものであるなら、その処理に（３×１０＝３０）クロックの時間がかかる。このように、リードのリクエストの場合には、ＦＩＦＯメモリ１２３に蓄積されているリクエストのワード数が同じであっても、処理時間は大きく異なる。
【００２９】
このように、ライトのリクエストの場合には、ＦＩＦＯメモリ１２３の蓄積量と処理時間とが対応する関係となるが、リードのリクエストの場合には、ＦＩＦＯメモリ１２３の蓄積量と処理時間との間に関連性がない。したがって、ＦＩＦＯメモリ１２３の残量を常に監視し、ＦＩＦＯメモリ１２３がオーバーフローを起こしそうになったら、アービタ１１６にストップ信号を送るような処理だけでは、メモリバス１１０のレイテンシを必ずしも保証できないということになる。
【００３０】
そこで、ＦＩＦＯメモリ１２３内に存在するパケットの処理にかかるクロック数を管理する方法として、リクエストのパケット中のアクセスカウント数をＦＩＦＯメモリ１２３の入力側及び出力側で常に監視し、リクエストのパケットが入力されたらそのアクセスカウント数を加算し、リクエストのパケットがＦＩＦＯメモリ１２３からメモリコントローラ１１４に読み出されたら、そのアクセスカウント数を減算して、ＦＩＦＯメモリ１２３内にあるリクエストのパケット中のアクセスカウントの総数を求めることが考えられる。
【００３１】
アクセスカウントの総数は、リードリクエストであっても、ライトリクエストであっても、ＦＩＦＯメモリ１２３内のすべてのリクエストのパケットの処理時間の総和に対応する。したがって、このカウント値があるしきい値を越えたらストップ信号を生成することにより、メモリバスのレイテンシを保証することができる。
【００３２】
ところが、このようなアクセスカウントの総和を求めるようなカウンタを実現するためには、ＦＩＦＯメモリ１２３の入力側と出力側にそれぞれモニタ回路を持ち、これらの回路の出力に応じて、カウンタを増減させる必要がある。ＦＩＦＯメモリ１２３の入力側と出力側とが同一のクロックなら、そのような回路は実現できるが、この回路では、入力側と出力側とで、周波数が異なっているため、このような回路の実現は容易ではない。
【００３３】
すなわち、このようなカウンタをＦＩＦＯメモリ１２３の入力側に持つとすると、その出力側でパケットがＦＩＦＯメモリ１２３から出力されたことを示す信号及びそのアクセスワード数を、クロック乗り換えを行って入力側に伝える必要がある。ここで、メモリバス１１０のクロックとメモリコントローラ１１４側のクロックは、どちらが高速であるとは言えない。このように、双方のクロックの大小関係が分からないクロックの載せ変えは、困難である。
【００３４】
したがって、この発明の目的は、メモリバスとメモリコントローラとの間に設けられるＦＩＦＯメモリをモニタして、リードの場合もライトの場合も、所定時間以内のレイテンシを保証できるようにしたデータ転送システム、およびアクセスモニタ装置を提供することにある。
【００３５】
【課題を解決するための手段】
この発明は、複数のクライアントデバイスと、
複数のクライアントデバイスで共用されるリソースと、
リソースを制御するリソース制御手段と、
複数のクライアントデバイスとリソースとの間でデータを送受信するバスと、
各クライアントデバイスからバスを介して転送されてきたリクエストを一旦蓄積し、リソース制御手段に読み出すバッファ手段と、
バッファ手段に蓄積されているリクエストに含まれるアクセスカウント情報を抽出し、バッファ手段に蓄積されているリクエストに含まれるアクセスカウント情報の総和を求めるアクセスカウント数総和算出手段と、
バッファ手段に蓄積されているリクエストに含まれるアクセスカウント情報の総和が所定のしきい値を越えたら、クライアントデバイスのアクセスを制限するようにする手段と
を備え、
アクセスカウント数総和算出手段は、
バッファ手段に蓄積されているリクエストのアクセスカウント情報の総和をカウントする総和カウンタと、
バスからバッファ手段にリクエストが入力されたら、リクエストからアクセスカウントの値を検出し、アクセスカウントの値をそれまでの総和カウンタの値に加算する手段と、
バスからリクエストが入力されたら、リクエストのワードからアクセスカウントの値を検出し、アクセスカウントの値を保持するデータ保持手段と、
バスから入力されるデータ量のカウント値から推定されるバッファの残量の推定値とバッファ手段の実際の残量とを比較して、バッファ手段からのデータの読み出しがあったとことを判断するバッファ読み出し判断手段と、
バッファ手段からリクエストのワードが読み出されたと判断されたら、バッファ手段から読み出されたリクエストのワードのアクセスカウントの値に対応する値をデータ保持手段から読み出し、データ保持手段から読み出された値を総和カウンタの値から減算する手段と
を備えるようにしたデータ転送システムである。
【００３７】
この発明は、複数のクライアントデバイスで共用されるリソースを制御するリソース制御手段と、複数のクライアントデバイスとリソースとの間でデータを送受信するバスとの間のバッファ手段に蓄積されているリクエストのアクセスカウント情報の総和をカウントする総和カウンタと、
バスからバッファ手段にリクエストが入力されたら、リクエストからアクセスカウントの値を検出し、アクセスカウントの値をそれまでの総和カウンタの値に加算する手段と、
バスからリクエストが入力されたら、リクエストのワードからアクセスカウントの値を検出し、アクセスカウントの値を保持するデータ保持手段と、
バスから入力されるデータ量のカウント値から推定されるバッファの残量の推定値とバッファ手段の実際の残量とを比較して、バッファ手段からのデータの読み出しがあったとことを判断するバッファ読み出し判断手段と、
バッファ手段からリクエストのワードが読み出されたと判断されたら、バッファ手段から読み出されたリクエストのワードのアクセスカウントの値に対応する値をデータ保持手段から読み出し、データ保持手段から読み出された値を総和カウンタの値から減算する手段と、
総和カウンタによりカウントされるアクセスカウントの総和の値と所定のしきい値とを比較し、総和カウンタアクセスの総和の値が所定のしきい値を越えたら、ストップ信号を出力する手段と
を備えるようにしたアクセスモニタ装置である。
【００３８】
この発明では、リソース制御手段とバスとの間のバッファ手段に蓄積されているリクエストのアクセスカウント数の総和をモニタするアクセス総和カウントモニタ回路が設けられる。
【００３９】
すなわち、ヘッダのワードには、バイトカウント（Byte Count）が含められている。このバイトカウント（Byte Count）の値が、各クライアントで共用されるリソースであるメモリへのアクセス数を反映している。アクセス総和カウントモニタ回路で、ヘッダのバイトカウントの総和が求められる。そして、このヘッダのバイトカウントの総和が所定のしきい値以上になると、アクセス総和カウントモニタ回路からストップ信号が出力される。このストップ信号がアクセス総和カウントモニタ回路からアービタに供給される。アービタは、ＦＩＦＯメモリ残量モニタからストップ信号が送られてきたら、リクエストの調停を中止する。これにより、クライアントデバイスのメモリへのアクセスが制限される。
【００４０】
このように、ＦＩＦＯメモリに蓄積されているリクエストのアクセスカウント数の総和をモニタするアクセス総和カウントモニタ回路が設けられ、アクセスカウントの総和が所定のしきい値以上になると、アクセス総和カウントモニタ回路からストップ信号がアービタに送られ、リクエストの調停が中止されるため、メモリバスのレイテンシを保証できる。
【００４１】
また、この発明では、入力されるワードのカウント値から推定されるＦＩＦＯメモリの残量と、ＦＩＦＯメモリの実際の残量とを比較し、この比較値からＦＩＦＯメモリに読み出しがあったことを検出している。このような構成では、メモリバスからＦＩＦＯメモリに送られてくるワードのクロックと、メモリコントローラからメモリをアクセスするときのワードのクロックとの周波数関係に依存しない構成とすることができる。
【００４２】
【発明の実施の形態】
以下、この発明の実施の形態について図面を参照しながら説明する。図１は、この発明が適用されたシステムの全体構成を説明するものである。
【００４３】
図１において、クライアントデバイス１１、１２、１３は、共用のリソースであるメモリ１５をアクセスするデバイスである。例えば、信号処理チップを構成するシステムにおいては、クライアントデバイス１１、１２、１３は、ＢｉｔＢＬＴ(Bit Block Transfer)エンジン、ＪＰＥＧ(Joint Photographic Experts Group)エンジン等のプロセッサである。これらのクライアントデバイス１１、１２、１３は、ＦＩＦＯメモリ(First-In First-Out)２１Ａ、２１Ｂ、２１Ｃ及びＦＩＦＯメモリ２２Ａ、２２Ｂ、２２Ｃをそれぞれ介して、メモリバス１０に接続される。また、メモリバス１０には、ＦＩＦＯメモリ２３及び２４を介して、メモリコントローラ１４が接続される。メモリコントローラ１４は、メモリ１５のリード／ライトを制御するリソース制御回路である。
【００４４】
メモリ１５は、複数のクライアントデバイス１１、１２、１３で共通に利用可能なリソースである。メモリ１５としては、例えば、ＳＤＲＡＭ(Synchronous Dynamic Random Access Memory)が用いられる。ＳＤＲＡＭは、クロックに同期した連続的なデータ転送が可能であり、バースト転送を指定すると、指定したデータ数のデータ転送を１クロック単位で連続して行うことができる。ここでは、ＳＤＲＡＭの構成とされたメモリ１５は、１クロックで６４ビットのデータを転送することができる。ＳＤＲＡＭは、ＳＤＲ(Dingle Data Rate)でも、ＤＤＲ(Double Data Rate)でも良い。
【００４５】
メモリバス１０は、クライアントデバイス１１、１２、１３と、メモリコントローラ１４との間で、データの転送を行うバスである。メモリバス１０は、クライアントデバイス１１、１２、１３側からメモリコントローラ１４側にデータを送る送信バス１０Ａと、メモリコントローラ１４側からのデータをクライアントデバイス１１、１２、１３側で受信する受信バス１０Ｂとからなる。
【００４６】
各クライアントデバイス１１、１２、１３とメモリバス１０との間には、ＦＩＦＯメモリ２１Ａ、２１Ｂ、２１Ｃ及びＦＩＦＯメモリ２２Ａ、２２Ｂ、２２Ｃが設けられる。これらのＦＩＦＯメモリ２１Ａ、２１Ｂ、２１Ｃ、ＦＩＦＯメモリ２２Ａ、２２Ｂ、２２Ｃは、バッファとして設けられる。各クライアントデバイス１１、１２、１３とメモリバス１０との間には、ＦＩＦＯメモリ２１Ａ、２１Ｂ、２１Ｃ及びＦＩＦＯメモリ２２Ａ、２２Ｂ、２２Ｃが設けられているため、各クライアントデバイス１１、１２、１３は、メモリバス１０の転送クロックとは非同期で、リクエストの送信やデータの受信が行える。
【００４７】
また、メモリコントローラ１４とメモリバス１０との間には、ＦＩＦＯメモリ２３及びＦＩＦＯメモリ２４が設けられる。メモリコントローラ１４とメモリバス１０との間には、ＦＩＦＯメモリ２３及びＦＩＦＯメモリ２４が設けられているため、メモリコントローラ１４は、メモリバス１０の転送クロックとは非同期で、リクエストの受信やデータの送信が行える。
【００４８】
各クライアントデバイス１１、１２、１３には、固有のデバイスＩＤが割り振られている。各クライアントデバイス１１、１２、１３は、メモリ１５をアクセスする場合には、メモリバス１０の送信バス１０Ａを介して、リクエストを送信する。このリクエストは、パケット構造となっている。
【００４９】
クライアントデバイス１１、１２、１３は、全て、共通のメモリ１５にアクセスすることが可能である。このため、複数のクライアントデバイス１１、１２、１３で、メモリ１５へのリクエストが同時に起こるようなことがあり得る。そこで、クライアントデバイス１１、１２、１３からのリクエストの競合を防ぐために、アービタ１６が設けられる。
【００５０】
クライアントデバイス１１、１２、１３がメモリ１５をアクセスする場合には、まず、アービタ１６にバスの使用権を得るためのリクエストが送られる。アービタ１６は、複数のクライアントデバイスからのリクエストがあった場合には、そのリクエストを調停し、メモリバス１０の使用を許可する１つのクライアントデバイスにのみ、グラントを返す。複数のクライアントデバイス１１、１２、１３のうち、グラントが返されてきたクライアントデバイスのみがメモリ１５をアクセスすることができる。
【００５１】
メモリのライトのリクエストの場合には、クライアントデバイス１１、１２、１３から、ライトのリクエストが送信される。このライトのリクエストが送信バス１０Ａを介して、メモリコントローラ１４に送られる。メモリコントローラ１４により、ライトのリクエストに応じて、クライアントデバイス１１、１２、１３から送られたライトデータがメモリ１５の所望のアドレスに書き込まれる。
【００５２】
メモリのリードのリクエストの場合には、クライアントデバイス１１、１２、１３から、リードのリクエストが送信される。このリードのリクエストが送信バス１０Ａを介して、メモリコントローラ１４に送られる。メモリコントローラ１４で、リードのリクエストに応じて、メモリ１５の所望のアドレスからデータが読み出される。このリードデータがメモリコントローラ１４から、受信バス１０Ｂを介して転送され、リードのリクエストを送信したクライアントデバイス１１、１２、１３で受信される。
【００５３】
図２は、メモリバス１０に転送されるパケットの構成を示すものである。図２に示すように、メモリバス１０に転送されるデータは、ヘッダワードと、データワードと、エンドオブパケットワードとからなるパケット構成とされる。これら、ヘッダと、データと、エンドオブパケットのワードは、６４ビットのデータにフラグ等の制御信号を加えた７２ビットとなっている。
【００５４】
図２Ａ、図２Ｂ、及び図２Ｃは、それぞれ、ヘッダと、データと、エンドオブパケットの各ワードのビットアサインを示すものである。
【００５５】
図２Ａ〜図２Ｃに示すように、各ワードの先頭には、２ビットのフラグが設けられる。フラグは、そのワードが、ヘッダか、データか、エンドオブパケットかを識別するものである。このフラグが例えば、「０１」ならヘッダであり、「１０」ならデータであり、「１１」ならエンドオブパケットである。
【００５６】
図２Ａのヘッダのワードにおいて、フラグの２ビットの次の６ビットは、クライアント側で定義可能とされている。
【００５７】
次の６ビットは、デバイスＩＤである。各クライアントデバイス毎に固有のデバイス番号が割り振られており、このデバイスＩＤは、ターゲットクライアントデバイスのＩＤを示している。
【００５８】
次の６ビットはモードとなっている。モードは、アドレシングフォーマットと共に、アドレスモードを示している。アドレスモードとしては、リニアモード、２Ｄモード、サーキュラモード等が用意されている。
【００５９】
モードの次の１ビットは、リードかライトかを示している。このビットが例えば「１」ならライトであり、「０」ならリードである。
【００６０】
アドレシングフォーマットの次の２ビットは、将来の拡張のためにリザーブされている。
【００６１】
その次の３０ビットは、スタートアドレスとなっている。スタートアドレスは、リード又はライトするメモリの開始アドレスであり、このアドレスはバイト単位に設定される。
【００６２】
図２Ｂ及び図２Ｃに示すように、データワード及びエンドオブパケットワードでは、２ビットのフラグの次に、８ビットのバイトイネーブルが配置され、次に、６４ビットのデータが配置される。バイトイネーブルは、対応するデータが有効か無効かを示している。
【００６３】
すなわち、１ワードの転送データが６４ビットに満たない場合がある。１ワードの転送データが６４ビットに満たない場合には、１ワードのデータが６４ビットとなるように、図３に示すように、スタッフィングバイトが挿入される。
【００６４】
図３Ａは、６４ビット（８バイト）のうちの下位３バイトがデータで、上位５バイトがスタッフィングバイトの場合を示している。この場合には、図３Ａに示すように、バイトイネーブルの８ビットのうち、下位３ビットは有効であることを示す「１」となり、上位５ビットは、無効データであることを示す「０」となる。
【００６５】
図３Ｂは、６４ビット（８バイト）のうちの上位２バイトがデータで、下位６バイトがスタッフィングバイトの場合を示している。この場合には、図３Ｂに示すように、バイトイネーブルの８ビットのうち、上位２ビットは有効であることを示す「１」となり、下位６ビットは、無効データであることを示す「０」となる。
【００６６】
図４Ａに示すように、ヘッダワード（図２Ａ）には、モードと、アドレシングフォーマットとが設けられ、モードとアドレシングフォーマットは、アドレスモードを示している。アドレスモードとしては、リニアモード、２Ｄモード、サーキュラモード等が用意されている。
【００６７】
図４Ｂから図４Ｄは、各アドレスモードを示すものである。リニアモードでは、図４Ｂに示すように、モードの４ビットが「００００」となる。リニアモードでは、パラメータとして、ジャンプ（Jump)とバイトカウント（Byte Count）が指定される。リニアモードは、バイトカウント（Byte Count）で指定されるアクセス数のデータを、スタートアドレスで指定された位置から順にアクセスするもので、最も標準的なアドレッシングモードである。
【００６８】
ジャンプ（Jump)は、２の補数の数値でジャンプするワード（６４ビット）を指定するものである。ジャンプは、ワードの境界で行われる。例えば、ジャンプ（Jump=2ワード)にセットすると、ワードの境界で、２ワードジャンプしてアドレスが進められる。負の値を指定することで、逆方法のアドレシングも可能である。
【００６９】
バイトカウント（Byte Count）は、必要なバイト数をセットするものである。なお、実際には、バイトカウント（Byte Count-1）が使われており、必要なバイト数から１を引いた数とされる。つまり、１バイトのデータが必要なときには、バイトカウント（Byte Count）の値は０にセットされる。ここでは、説明を簡単とするため、バイトカウント（Byte Count）は、必要なアクセスセバイト数をセットするものとする。
【００７０】
２Ｄモードでは、図４Ｃに示すように、モードの４ビットが「０００１」となる。２Ｄモードでは、パラメータとして、ジャンプ（Jump)と、高さ（Hight)と、カラム(Col)と、ロウ(Row)とが指定できる。２Ｄモードは、二次元ブロックベースのアクセスを可能としたもので、ロウとカラムとでアドレスを指定できる。
【００７１】
サーキュラモードでは、図４Ｄに示すように、モードの４ビットが「００１０」となる。サーキュラモードでは、パラメータとして、バイトカウント（Byte Count）が指定される。サーキュラモードは、バイトカウント（Byte Count）で指定されるアクセス数のデータを、巡回的にアクセスするものである。すなわち、サーキュラモードでは、バイトカウント（Byte Count）が指定される範囲内で、エンドアドレスがスタートアドレスに戻ってくるような巡回的なアドレシングが行われる。
【００７２】
図５は、リニアモードで、スタートアドレスが「０５ｈ（ｈは１６進数）」、ジャンプが「２ワード」、バイトカウントが「３１」が指定されたときのアクセスを示すものである。これは、メモリ上のアドレス「５ｈ」から３１バイト分をアクセスし、ワードとワードの境界で、２ワード分ジャンプするようなアクセスを示している。
【００７３】
図５に示すように、最初に、「０５ｈ」から「０７ｈ」の３バイトのデータが順にアクセスされる。ワードとワードの境界となる「０７ｈ」からは、２ワードジャンプされ、「１０ｈ」から「１７ｈ」の１ワードがアクセスされ、ワードの境界で２ワードジャンプされ、「２０ｈ」から「２７ｈ」の１ワードがアクセスされ、ワードの境界で２ワードジャンプされ、「３０ｈ」から「３７ｈ」の１ワードがアクセスされ、ワードの境界で２ワードジャンプされ、「４０ｈ」から「４３ｈ」の４バイトのデータがアクセスされる。これにより、アドレス「５ｈ」から順に、３１バイト分のデータがアクセスされたことになる。
【００７４】
このようにしてアクセスされたデータを読み出すと、図６に示すように、ヘッダのワードＨ１と、データのワードＤ１からＤ４と、エンドオブパケットのワードＤ５とからなるパケットとなる。
【００７５】
図７Ａに示すように、ヘッダのワードＨ１には、ヘッダのワードであることを示すフラグ「０１」が付加される。ヘッダには、図２Ａに示したような各種の情報が記述される。
【００７６】
図７Ｂから図７Ｅに示すように、ワードＤ１からＤ４には、データのワードであることを示すフラグ「１０」が付加される。ワードＤ１には、アドレス「０５ｈ」から「０７ｈ」の３バイトのデータが配置される。なお、３バイトのデータは６４ビットに満たないので、ここには、スタッフィングバイトが挿入される。ワードＤ２には、アドレス「１０ｈ」から「１７ｈ」の６４ビットのデータが配置される。ワードＤ３には、アドレス「２０ｈ」から「２７ｈ」の６４ビットのデータが配置される。ワードＤ４には、アドレス「３０ｈ」から「３７ｈ」の６４ビットのデータが配置される。ワードＤ５には、エンドオブパケットのワードであることを示すフラグ「１１」が付加される。ワードＤ５には、アドレス「４０ｈ」から「４７ｈ」の４バイトのデータが配置される。なお、４バイトのデータは６４ビットに満たないので、ここには、スタッフィングバイトが挿入される。
【００７７】
このように、図１におけるシステムにおいて、メモリバス１０に転送されるデータは、パケット構造となっている。クライアントデバイス１１、１２、１３からメモリコントローラ１４側に送るパケットの種類は、図８に示すように、ライトリクエストのパケット（図８Ａ）と、リードリクエストのパケット（図８Ｂ）との２つに分けられる。
【００７８】
ライトリクエストのパケットは、図８Ａに示すように、ヘッダのワードと、数ワードの書き込みデータとからなり、最後に、エンドオブパケットのワードが来る。
【００７９】
リードリクエストのパケットは、図８Ｂに示すように、リードヘッダの１ワードであり、データワードやエンドオブパケットのワードは存在しない。
【００８０】
リードリクエストかライトリクエストかは、パケットの先頭に付加されたヘッダのワードのＲ／Ｗビットにより識別できる（図２Ａ参照）。
【００８１】
メモリコントローラ１４からクライアントデバイス１１、１２、１３側に送られてくるパケットは、クライアントデバイス１１、１２、１３からのリードリクエストに対応してメモリ１５から読み出されてきたリードデータのパケットである。このリードデータのパケットは、図９に示すように、ヘッダのワードと、数ワードの書き込みデータとからなり、最後に、エンドオブパケットのワードが来ることになる。
【００８２】
図１０に示すように、各クライアントデバイス１１、１２、１３には、ユニークなデバイスＩＤが割り振られる。例えば、図１０に示すように、クライアントデバイス１１には、デバイスＩＤとして（ＩＤ＝０１ｈ）が割り当てられ、クライアントデバイス１２には、デバイスＩＤとして（ＩＤ＝０２ｈ）が割り当てられ、クライアントデバイス１３には、デバイスＩＤとして（ＩＤ＝０３ｈ）で（Byte Count=16）が割り当てられる。
【００８３】
図１１Ａは送信バス１０Ａに転送されるワードを示し、図１１Ｂは受信バス１０Ｂに転送されるワードを示す。図１１Ａに示すように、例えば、クライアントデバイス１１が１６バイトのデータをメモリ１５から読み出す要求をしたとすると、クライアントデバイス１１から送信バス１０Ａを介して、リードリクエストのパケットＰ１が送られる。このリードリクエストのパケットＰ１はヘッダのみであり、このヘッダには、デバイスＩＤ（ＩＤ＝０１ｈ）で、バイトカウント（Byte Count=16）が記述される。
【００８４】
次に、クライアントデバイス１２が８バイトのデータをメモリ１５から読み出す要求をしたとすると、クライアントデバイス１２から送信バス１０Ａを介して、リードリクエストのパケットＰ２が送られる。このリードリクエストのパケットはヘッダのみであり、このヘッダには、デバイスＩＤ（ＩＤ＝０２ｈ）で、バイトカウント（Byte Count=8）が記述される。
【００８５】
次に、クライアントデバイス１３が２４バイトのデータをメモリ１５に書き込む要求をしたとすると、クライアントデバイス１３から送信バス１０Ａを介して、ライトリクエストのパケットＰ３が送られる。このライトリクエストのパケットＰ３は、ヘッダのワードと、これに続く２バイト分のデータのワードと、１ワードのエンドオブパケットのワードからなる。このヘッダには、デバイスＩＤ（ＩＤ＝０３ｈ）で、バイトカウントが（Byte Count=24）が記述される。
【００８６】
このように、メモリバス１０の送信バス１０Ａには、クライアントデバイス１１、１２、１３から、リード又はライトのリクエストのパケットＰ１、Ｐ２、Ｐ３，Ｐ３…が次々に送られてくる。このリード又はライトのリクエストの各ワードは、送信バス１０Ａから、ＦＩＦＯメモリ２３に一旦読み込まれる。
【００８７】
ＦＩＦＯメモリ２３に読み込まれたワードは、順に、メモリコントローラ１４に送られる。メモリコントローラ１４で、各リクエストに応じて、メモリ１５がアクセスされる。
【００８８】
すなわち、図１１において、クライアントデバイス１１からのリードリクエストのパケットＰ１に応答して、メモリ１５から所望のアドレスのデータが１６バイト分読み出される。このリードデータは、ヘッダと、それに続く１ワードののデータワードと、１ワードのエンドオブパケットからなるパケットＰ１１にパケット化される。このリードデータのパケットＰ１１は、図１１Ｂに示すように、メモリコントローラ１４から、受信バス１０Ｂを介して送られる。このリードデータのパケットのヘッダには、デバイスＩＤとして（ＩＤ＝０１ｈ）が記述される。クライアントデバイス１１では、デバイスＩＤが（ＩＤ＝０１ｈ）であることから、自分宛のリードデータであることがわかり、このリードデータのパケットＰ１１がクライアントデバイス１１で受信される。
【００８９】
クライアントデバイス１２からのリードリクエストのパケットＰ２に応答して、メモリ１５から所望のアドレスのデータが８バイト分読み出される。このリードデータは、ヘッダと、それに続く１ワードのエンドオブパケットからなるパケットＰ１２にパケット化される。このリードデータのパケットＰ１２は、図１１Ｂに示すように、メモリコントローラ１４から、受信バス１０Ｂを介して、送られる。このリードデータのパケットのヘッダには、デバイスＩＤとして（ＩＤ＝０２ｈ）が記述される。クライアントデバイス１２では、デバイスＩＤが（ＩＤ＝０２ｈ）であることから、自分宛のリードデータであることがわかり、このリードデータのパケットＰ１２がクライアントデバイス１２で受信される。
【００９０】
クライアントデバイス１３からのリードリクエストのパケットＰ３に応答して、メモリ１５の所望のアドレスに、ライトデータとしてクライアントデバイス１３から転送されてきた２４バイト分のデータが書き込まれる。
【００９１】
このように、図１に示すシステムでは、クライアントデバイス１１、１２、１３からは、メモリバス１０の送信バス１０Ａを介して、リード又はライトのリクエストがパケット構造で送られてくる。このリクエストのワードは、ＦＩＦＯメモリ２３に書き込まれていく。
【００９２】
ＦＩＦＯメモリ２３に蓄積されたワードは、メモリコントローラ１４により読み出される。そして、メモリコントローラ１４によりメモリ１５がアクセスされる。
【００９３】
メモリコントローラ１４に送られてきたリクエストがライトなら、アドレシングモードに従って、スタートアドレスで指定されたアドレスからバイトカウントで指定されるデータ分のデータがメモリ１５に書き込まれる。
【００９４】
メモリコントローラ１４に送られてきたリクエストがリードなら、アドレシングモードに従って、スタートアドレスで指定されたアドレスからバイトカウントで指定されるデータ分のデータがメモリ１５から読み出される。
【００９５】
メモリ１５から読み出されたデータは、メモリコントローラ１４に送られる。そして、このデータは、メモリコントローラ１４で、ヘッダのワードと、数ワードの書き込みデータと、エンドオブパケットとからなるパケットにパケット化され、ＦＩＦＯメモリ２４に蓄積される。ＦＩＦＯメモリ２４の出力がメモリバス１０のバス１０Ｂを介して、クライアントデバイス１１、１２、１３に送られる。
【００９６】
ここで、メモリバス１０に転送されるワードのクロックと、メモリコントローラ１４によりメモリ１５がアクセスされるワードのクロックとは非同期になっている。ＦＩＦＯメモリ２３及びＦＩＦＯメモリ２４がメモリバス１０に転送されるワードのクロックと、メモリコントローラ１４によりメモリ１５がアクセスされるワードのクロックとの周波数の違いを吸収するバッファとなっている。
【００９７】
しかしながら、仮に、メモリバス１０に転送されるワードのクロックの周波数の方が、メモリコントローラ１４によりメモリ１５がアクセスされるワードのクロックの周波数より高いとすると、クライアントデバイス１１、１２、１３からメモリバス１０の送信バス１０Ａを介して送られてくるワードがＦＩＦＯメモリ２３に貯まり、ＦＩＦＯメモリ２３がオーバーフローを起こすことになる。
【００９８】
このため、ＦＩＦＯメモリ２３の残量を常に監視し、ＦＩＦＯメモリ２３がオーバーフローを起こしそうになったら、アービタ１６にストップ信号を送り、バスの調停を停止させ、クライアントデバイス１１、１２、１３からのリクエストが送信されないようにすることが必要である。
【００９９】
そこで、ＦＩＦＯメモリ残量モニタ２５が設けられる。ＦＩＦＯメモリ残量モニタ２５により、ＦＩＦＯメモリ２３の残量と所定のしきい値とが比較される。ＦＩＦＯメモリ残量モニタ２５で、ＦＩＦＯメモリ２３の残量が所定のしきい値以下になったことが検出されると、ＦＩＦＯメモリ残量モニタ２５からストップ信号が出力される。このストップ信号がアービタ１６に送られる。アービタ１６は、ＦＩＦＯメモリ残量モニタ２５からストップ信号が送られてきたら、リクエストの調停を中止する。これにより、クライアントデバイス１１、１２、１３のメモリ１５へのアクセス要求が止められる。
【０１００】
しかしながら、このように、ＦＩＦＯメモリ２３の残量を常に監視し、ＦＩＦＯメモリ２３がオーバーフローを起こしそうになったら、アービタ１６にストップ信号を送るような処理だけでは、メモリバスのレイテンシを保証できない。
【０１０１】
つまり、クライアントデバイス１１、１２、１３がメモリバス１０にリードリクエストを送信すると、このリードリクエストに対応するリードデータがメモリ１５から読み出され、クライアントデバイス１１、１２、１３に返されてくる。図１１では、クライアントデバイス１１がリードリクエストのパケットＰ１を送信すると、それから少し遅れて、このリードリクエストのパケットＰ１に応じたリードデータのパケットＰ１１が返されてくる。また、クライアントデバイス１２がリードリクエストのパケットＰ２を送信すると、それから少し遅れて、このリードリクエストのパケットＰ２に応じたリードデータのパケットＰ１２が返されてくる。このときの処理が所定のレイテンシ以内に終了することを保証する必要がある。
【０１０２】
ライトのリクエストの場合には、ライトのヘッダのワードに続いて、ライトデータのワードが続き（図８Ａ参照）、書き込みにかかる時間は、ライトのヘッダのワードに続くライトデータのワードに対応する。
【０１０３】
ところが、ライトのリクエストの場合には、ヘッダのワードのみが送られ（図８Ｂ参照）、このヘッダのワードがＦＩＦＯメモリ２３に書き込まれる。大きなデータを読み出す場合も小さなデータを読み出す場合も、送られるリクエストはヘッダのワードのみであるため、リードのリクエストの場合には、ＦＩＦＯメモリ１２３の蓄積量と処理時間との間に関連性がなくなる。したがって、ＦＩＦＯメモリ１２３の残量だけでは、バスのレイテンシを必ずしも保証できない。
【０１０４】
そこで、この発明の実施の形態では、ＦＩＦＯメモリ２３に蓄積されているリクエストのアクセスカウント数の総和をモニタするアクセス数総和カウントモニタ回路２６が設けられる。
【０１０５】
すなわち、図４に示したように、ヘッダのワードには、バイトカウント（Byte Count）が含められている。このバイトカウント（Byte Count）の値がメモリ１５へのアクセス数を反映している。
【０１０６】
アクセス数総和カウントモニタ回路２６で、ＦＩＦＯメモリ２３に蓄積されているヘッダのバイトカウントの総和が求められる。そして、このヘッダのバイトカウントの総和が所定のしきい値以上になると、アクセス数総和カウントモニタ回路２６からストップ信号が出力される。
【０１０７】
このストップ信号がアクセス数総和カウントモニタ回路２６からアービタ１６に供給される。アービタ１６は、ＦＩＦＯメモリ残量モニタ２５からストップ信号が送られてきたら、リクエストの調停を中止する。これにより、クライアントデバイス１１、１２、１３のメモリ１５へのアクセスが制限される。
【０１０８】
このように、この発明の実施の形態では、ＦＩＦＯメモリ２３に蓄積されているリクエストのアクセスカウント数の総和をモニタするアクセス数総和カウントモニタ回路２６が設けられ、アクセスカウントの総和が所定のしきい値以上になると、アクセス数総和カウントモニタ回路２６からストップ信号がアービタ１６に送られ、リクエストの調停が中止されるため、メモリバス１０のレイテンシを保証できる。
【０１０９】
なお、ここでは、アクセス数の総和をヘッダのバイトカウントの総和としているが、バイトカウントの総和に限るものではない。アクセス数をワードカウントで指定するシステムでは、ワードカウントの総和を求めることになる。
【０１１０】
図１２は、アクセス数総和カウントモニタ回路２６の構成を示すものである。図１２において、送信バス１０Ａを介して送られてきたリクエストのワードは、ＦＩＦＯメモリ２３に書き込まれると共に、アクセス数総和カウントモニタ回路２６のバイトカウント検出部５１、フラグ検出部５２、ＦＩＦＯメモリ残量カウンタ５３に供給される。
【０１１１】
バイトカウント検出部５１は、リクエストのワードがヘッダであったときに、このヘッダのバイトカウントの値（図４参照）を検出するものである。このバイトカウントの値は、バイトカウント総和カウンタ５４に供給されると共に、パケットデータ保持レジスタ５５に供給される。
【０１１２】
パケットデータ保持レジスタ５５は、シフトレジスタの構成となっている。バイトカウント検出部５１でリクエストのワードがヘッダのバイトカウントの値Ｃ０、Ｃ１、…が検出されると、この検出された各ヘッダのバイトカウントの値Ｃ０、Ｃ１、…がパケットデータ保持レジスタ５５に順に蓄積される。
【０１１３】
バイトカウント総和カウンタ５４は、リクエストのワードのヘッダのバイトカウントの値の総和を求めるものである。このバイトカウント総和カウンタ５４で、バイトカウント検出部５１でリクエストのワードがヘッダのバイトカウントの値が検出されると、それまでの値に、検出されたヘッダのバイトカウントの値が加算される。
【０１１４】
また、後に説明するように、ＦＩＦＯメモリ２３からヘッダのワードが読み出されると、シフトレジスタの構成とされたパケットデータ保持レジスタ５５が右にシフトされ、パケットデータ保持レジスタ５５から、各ヘッダのバイトカウントの値のうち最も先に蓄積されていた値Ｃ０が読み出される。パケットデータ保持レジスタ５５からバイトカウントの値が読み出されると、パケットデータ保持レジスタ５５から読み出されたバイトカウントの値Ｃ０だけ、バイトカウント総和カウンタ５４値が減算される。
【０１１５】
フラグ検出部５２は、各ワードの先頭の２ビットのフラグ（図２参照）を検出し、入力されたワードがヘッダか、データ又はエンドオブパケットかを判断している。フラグ検出部５２の出力がＦＩＦＯメモリイメージレジスタ５６に供給される。
【０１１６】
ＦＩＦＯメモリイメージレジスタ５６は、ＦＩＦＯメモリ２３の容量に対応する段数のシフトレジスタの構成とされている。ＦＩＦＯメモリイメージレジスタ５６には、入力されたワードがヘッダの場合には「１」が書き込まれ、データ又はエンドオブパケットの場合には「０」が書き込まれる。
【０１１７】
ＦＩＦＯメモリ残量カウンタ５３は、入力されたワード数から、ＦＩＦＯメモリ２３の残量を推定するものである。
【０１１８】
すなわち、ＦＩＦＯメモリ残量カウンタ５３は、送信バス１０Ａを介して入力されたワード数をカウントしており、ＦＩＦＯメモリ２３の総容量から、カウントされたワード数を減算することで、ＦＩＦＯメモリ２３の残量を推定している。また、ＦＩＦＯメモリ読み出し判定部５８の出力から、ＦＩＦＯメモリ２３の１ワードの読み出しが判定されると、ＦＩＦＯメモリの残量の推定値が１ワード分増加される。
【０１１９】
ＦＩＦＯメモリ残量カウンタ５３の出力がＦＩＦＯメモリ残量比較部５７に供給される。また、ＦＩＦＯメモリ残量比較部５７には、ＦＩＦＯメモリ２３から、実際のＦＩＦＯメモリ２３の残量が供給される。
【０１２０】
ＦＩＦＯメモリ残量比較部５７で、ＦＩＦＯメモリ残量カウンタ５３で検出されたＦＩＦＯメモリ２３の残量の推定値と、ＦＩＦＯメモリ２３から出力されたＦＩＦＯメモリ２３の実際の残量とが比較される。ＦＩＦＯメモリ残量比較部５７の出力がＦＩＦＯメモリ読み出し判定部５８に供給される。ＦＩＦＯメモリ読み出し判定部５８で、ＦＩＦＯメモリ残量比較部５７の出力から、ＦＩＦＯメモリ２３の読み出しがあったか否かが判定される。
【０１２１】
すなわち、ＦＩＦＯメモリ２３には、送信バス１０Ａを介して、クライアントデバイス１１、１２、１３から送られてきたリクエストのワードが蓄積される。また、ＦＩＦＯメモリ残量カウンタ５３は、送信バス１０Ａを介して入力されたリクエストのワード数をカウントし、ＦＩＦＯメモリ２３の総容量から減算している。したがって、ＦＩＦＯメモリ２３の読み出しが発生していなければ、ＦＩＦＯメモリ残量カウンタ５３で検出されるＦＩＦＯメモリ２３の残量の推定値と、ＦＩＦＯメモリ２３から出力されるＦＩＦＯメモリ２３の実際の残量とは一致するはずである。
【０１２２】
これに対して、ＦＩＦＯメモリ２３の読み出しが発生し、ＦＩＦＯメモリ２３の出力がメモリコントローラ１４に送られると、データが読み出された分だけ、ＦＩＦＯメモリ２３の実際の残量は多くなるが、ＦＩＦＯメモリ残量カウンタ５３で検出されるＦＩＦＯメモリ２３の残量の推定値はそのままである。
【０１２３】
このことから、ＦＩＦＯメモリ残量カウンタ５３で検出されたＦＩＦＯメモリ２３の残量の推定値と、ＦＩＦＯメモリ２３から出力されたＦＩＦＯメモリ２３の実際の残量とを比較し、ＦＩＦＯメモリ２３から出力されたＦＩＦＯメモリ２３の実際の残量の方が、ＦＩＦＯメモリ残量カウンタ５３で検出されたＦＩＦＯメモリ２３の残量の推定値よりも大きい場合には、ＦＩＦＯメモリ２３の読み出しが発生したと判断できる。ＦＩＦＯメモリ読み出し判定部５８は、ＦＩＦＯメモリ残量カウンタ５３で検出されたＦＩＦＯメモリ２３の残量の推定値と、ＦＩＦＯメモリ２３から出力されたＦＩＦＯメモリ２３の実際の残量との比較結果から、ＦＩＦＯメモリ２３の読み出しが発生したことを判断している。
【０１２４】
ＦＩＦＯメモリ読み出し判定部５８の出力は、ＦＩＦＯメモリ残量カウンタ５３に供給されると共に、ＦＩＦＯメモリイメージレジスタ５６に供給される。
【０１２５】
ＦＩＦＯメモリ読み出し判定部５８の出力から、ＦＩＦＯメモリ２３から１ワードの読み出しが発生したと判断されたら、ＦＩＦＯメモリ残量カウンタ５３のカウント値が１ワード分減少され、ＦＩＦＯメモリ２３残量の推定値が１ワード増加され、ＦＩＦＯメモリ残量カウンタ５３で求められるＦＩＦＯメモリ２３の推定値と、ＦＩＦＯメモリ２３から出力されるＦＩＦＯメモリ２３の実際の残量とが一致される。
【０１２６】
また、ＦＩＦＯメモリ読み出し判定部５８の出力から、ＦＩＦＯメモリ２３から１ワードの読み出しが発生したと判断されると、シフトレジスタの構成とされているＦＩＦＯメモリイメージレジスタ５６が１ビット右にシフトされる。そして、ＦＩＦＯメモリイメージレジスタ５６から、最も先に蓄積されていた値が読み出される。このＦＩＦＯメモリイメージレジスタ５６の出力がヘッダ／データ判定部５９に供給される。
【０１２７】
前述したように、ＦＩＦＯメモリイメージレジスタ５６には、入力されたワードがヘッダの場合には「１」が書き込まれ、データ又はエンドオブパケットの場合には「０」が書き込まれている。ＦＩＦＯメモリ読み出し判定部５８の出力から、ＦＩＦＯメモリ２３から１ワードの読み出しが発生したことが検出されると、ＦＩＦＯメモリイメージレジスタ５６から、最も先に蓄積されていた値が読み出される。この値は、ＦＩＦＯメモリ２３から読み出されたワードが、ヘッダか、データ又はエンドオブパケットかを示している。
【０１２８】
ヘッダ／データ判定部５９は、ＦＩＦＯメモリイメージレジスタ５６からの出力が「０」か「１」かにより、ＦＩＦＯメモリ２３から読み出されたワードが、ヘッダか、データ又はエンドオブパケットかを判断している。このヘッダ／データ判定部５９の出力がパケットデータ保持レジスタ５５に供給される。
【０１２９】
ＦＩＦＯメモリイメージレジスタ５６の出力が「１」で、ＦＩＦＯメモリ２３から読み出されたワードがヘッダであると判断された場合には、パケットデータ保持レジスタ５５が１ビット右にシフトされ、パケットデータ保持レジスタ５５から、各ヘッダのバイトカウントの値のうち最も先に蓄積されていた値Ｃ０が読み出される。この値Ｃ０は、ＦＩＦＯメモリ２３から読み出されたワードがヘッダである場合に、そのヘッダのバイトカウントの値を示している。パケットデータ保持レジスタ５５からバイトカウントの値Ｃ０が読み出されると、バイトカウント総和カウンタ５４のそれまでの値から、パケットデータ保持レジスタ５５から読み出されたバイトカウントの値Ｃ０が減算される。
【０１３０】
このように、バイトカウント総和カウンタ５４の値は、メモリバス１０の送信バス１０Ａを介してヘッダのワードが入力されると、そのヘッダのバイトカウントの値だけ加算され、ＦＩＦＯメモリ２３からヘッダのワードがメモリコントローラ１４に読み出されると、その読み出されたヘッダのバイトカウントの値だけ減算される。したがって、バイトカウント総和カウンタ５４の値は、ＦＩＦＯメモリ２３に蓄積されているデータのうちのヘッダにあるバイトカウントの値の総和と等しくなる。
【０１３１】
バイトカウント総和カウンタ５４の出力がストップ信号発生部６０に供給される。ストップ信号発生部６０には、所定のしきい値が与えられる。ストップ信号発生部６０で、バイトカウント総和カウンタ５４の出力と所定のしきい値とが比較され、バイトカウント総和カウンタ５４の出力が所定のしきい値を越えると、ストップ信号発生部６０からストップ信号が出力される。
【０１３２】
以上説明したように、この発明の実施の形態では、ＦＩＦＯメモリ２３に蓄積されているリクエストのアクセスカウント数（バイトカウント）の総和をモニタするアクセス数総和カウントモニタ回路２６が設けられる。そして、ＦＩＦＯメモリ２３に蓄積されているヘッダのワードに含まれているアクセス数の総和がしきい値以上になったら、アービタ１６にストップ信号が送られ、クライアントデバイス１１、１２、１３からのメモリ１５へのアクセスが制限される。これにより、リードの場合でもライトの場合でも、デバイスがリクエストを送ってから処理が行われるまでのレイテンシを保証することができる。
【０１３３】
また、この発明の実施の形態では、入力されるワードのカウント値から推定されるＦＩＦＯメモリ２３の残量と、ＦＩＦＯメモリ２３の実際の残量とを比較部５７で比較し、この比較値からＦＩＦＯメモリ２３に読み出しがあったことを検出している。このような構成では、メモリバス１０からＦＩＦＯメモリ２３に送られてくるワードのクロック（ＦＩＦＯメモリ２３の入力クロック）と、メモリコントローラ１４からメモリ１５をアクセスするときのワードのクロック（ＦＩＦＯメモリ２３の出力クロック）との周波数関係に依存しない構成とすることができる。
【０１３４】
つまり、ＦＩＦＯメモリ２３内に存在するパケットの処理にかかるクロック数を管理する方法としては、ＦＩＦＯメモリ１２の入力側及び出力側で、ヘッダのワードに含まれているアクセス数を常に監視し、ヘッダが入力されたらそのアクセス数を加算し、ヘッダが出力されたらそのアクセス数を減算するようにして、アクセス数の総和を求めるようにすることが考えられる。そのためには、ＦＩＦＯメモリ２３の入力側と出力側にそれぞれモニタ回路を持ち、これらの回路の出力に応じて、カウンタを増減させるようにする必要がある。ＦＩＦＯメモリ２３の入力側と出力側とが同一のクロックなら、そのような回路は実現できる。
【０１３５】
ところが、ＦＩＦＯメモリ２３の入力側と出力側とで周波数が異なっていると、アクセス数の総和を求めるカウンタを入力側に持つと、出力側でワードがＦＩＦＯメモリ２３から出力されたことを示す信号及びそのアクセス数の値をクロック乗り換えを行って入力側に伝える必要がある。ここで、ＦＩＦＯメモリ２３の入力クロックと、ＦＩＦＯメモリ２３の出力クロックとの周波数関係は、どちらが高速であるとは言えない。このように、双方のクロックの大小関係が分からないクロックの乗せ換えは困難である。
【０１３６】
この実施の形態では、このようなクロックの乗せ換えが不要なので、ＦＩＦＯメモリ２３の入力クロックと、ＦＩＦＯメモリ２３の出力クロックとの周波数関係に依存しない構成とすることができる。
【０１３７】
なお、上述の例では、画像処理チップのシステムを構成する場合について説明したが、この発明は、複数のクライアントで１つのリソースを共用するようなシステムでは、同様に適用することが可能である。
【０１３８】
また、上述の実施の形態では、ＦＩＦＯメモリ２３に蓄積されているリクエストのアクセスカウント数の総和をモニタするアクセス数総和カウントモニタ回路２６と、ＦＩＦＯメモリ２３の残量をモニタするＦＩＦＯメモリ残量モニタ２５とを設ける構成としているが、アクセス数総和カウントモニタ回路２６では、ＦＩＦＯメモリ２３の残量がモニタされているので、ＦＩＦＯメモリ残量モニタ２５を特に設ける必要はない。アクセス数総和カウントモニタ回路２６で、ＦＩＦＯメモリ２３に蓄積されているリクエストのアクセスカウント数の総和と、ＦＩＦＯメモリ２３の残量とに応じて、ストップ信号が出力されるように構成しても良い。
【０１３９】
【発明の効果】
この発明によれば、アクセス総和カウントモニタ回路で、ヘッダのバイトカウントの総和が求められる。そして、このヘッダのバイトカウントの総和が所定のしきい値以上になると、アクセス総和カウントモニタ回路からストップ信号が出力される。このストップ信号がアクセス総和カウントモニタ回路からアービタに供給される。アービタは、ＦＩＦＯメモリ残量モニタからストップ信号が送られてきたら、リクエストの調停を中止する。これにより、クライアントデバイスのメモリへのアクセスが制限される。
【０１４０】
このように、ＦＩＦＯメモリに蓄積されているリクエストのアクセスカウント数の総和をモニタするアクセス総和カウントモニタ回路が設けられ、アクセスカウントの総和が所定のしきい値以上になると、アクセス総和カウントモニタ回路からストップ信号がアービタに送られ、リクエストの調停が中止されるため、メモリバスのレイテンシを保証できる。
【０１４１】
また、この発明では、入力されるワードのカウント値から推定されるＦＩＦＯメモリの残量と、ＦＩＦＯメモリの実際の残量とを比較し、この比較値からＦＩＦＯメモリに読み出しがあったことを検出している。このような構成では、メモリバスからＦＩＦＯメモリに送られてくるワードのクロックと、メモリコントローラからメモリをアクセスするときのワードのクロックとの周波数関係に依存しない構成とすることができる。
【図面の簡単な説明】
【図１】この発明が適用された複数のクライアントデバイスとリソースとからなるシステムの一例のブロック図である。
【図２】バスに転送されるパケットの各ワードの説明に用いる略線図である。
【図３】バスに転送されるパケットのデータの説明に用いる略線図である。
【図４】バスに転送されるパケットのヘッダの説明に用いる略線図である。
【図５】アドレシングモードの一例の説明に用いる略線図である。
【図６】アドレシングモードの一例の説明に用いるタイミング図である。
【図７】アドレシングモードの一例の説明に用いる略線図である。
【図８】送信バスに送られるパケットの説明に用いる略線図である。
【図９】受信バスに送られるパケットの説明に用いる略線図である。
【図１０】この発明が適用された複数のクライアントデバイスとリソースとからなるシステムの一例の説明に用いるブロック図である。
【図１１】この発明が適用された複数のクライアントデバイスとリソースとからなるシステムの一例の説明に用いるタイミング図である。
【図１２】アクセス数総和カウントモニタ回路の一例のブロック図である。
【図１３】従来の複数のクライアントデバイスとリソースとからなるシステムの一例のブロック図である。
【図１４】従来の複数のクライアントデバイスとリソースとからなるシステムの他の例のブロック図である。
【符号の説明】
１０・・・メモリバス、１０Ａ・・・送信バス、１０Ｂ・・・受信バス、 １１、１２、１３・・・クライアントデバイス、１４・・・メモリコントローラ、１５・・・メモリ、１６・・・アービタ、２１Ａ〜２１Ｃ、２２Ａ〜２２Ｃ、２３、２４・・・ＦＩＦＯメモリ、２５・・・ＦＩＦＯメモリ残量モニタ、２６・・・アクセス数総和カウントモニタ回路、５１・・・バイトカウント検出部、５２・・・フラグ検出部、５３・・・ＦＩＦＯメモリ残量カウンタ、５４・・・バイトカウント総和カウンタ、５５・・・パケットデータ保持レジスタ、５６・・・ＦＩＦＯメモリイメージレジスタ、５７・・・残量比較部、６０・・・ストップ信号発生部
【図１】
0004126959.tif 000002
【図２】
0004126959.tif 000003
【図３】
0004126959.tif 000004
【図４】
0004126959.tif 000005
【図５】
0004126959.tif 000006
【図６】
0004126959.tif 000007
【図７】
0004126959.tif 000008
【図８】
0004126959.tif 000009
【図９】
0004126959.tif 000010
【図１０】
0004126959.tif 000011
【図１１】
0004126959.tif 000012
【図１２】
0004126959.tif 000013
【図１３】
0004126959.tif 000014
【図１４】
0004126959.tif 000015