(57)【要約】      （修正有）【課題】比較的簡易な技術でもってリングバッファを構成し、該リングバッファを用いた処理を実現するための技術を提供する。【解決手段】バッファメモリ１１６におけるメモリ領域の先頭アドレスＳＡ０からのオフセット量が、第１のバッファメモリ領域の領域サイズＳＺ０を超えていない場合には、バッファメモリ領域に対するアクセスを制御し、オフセット量が領域サイズＳＺ０を超えている場合には、バッファメモリとは別個のシステムメモリ１１１におけるメモリ領域に対するアクセスを制御する。バッファメモリ領域に対するアクセス、システムメモリ領域に対するアクセス、が行われるたびにオフセット量をインクリメントする。【選択図】図３
2016177633.tif 000002
【特許請求の範囲】
【請求項１】
第１のメモリにおける第１のメモリ領域の先頭アドレスからのオフセット量が、該第１のメモリ領域の領域サイズを超えていない場合には、該第１のメモリ領域に対するアクセスを制御し、該オフセット量が該領域サイズを超えている場合には、該第１のメモリとは別個の第２のメモリにおける第２のメモリ領域に対するアクセスを制御する第１の制御手段と、
前記第１のメモリ領域に対するアクセス、前記第２のメモリ領域に対するアクセス、が行われるたびに前記オフセット量をインクリメントする第２の制御手段と
を備えることを特徴とするメモリ制御装置。
【請求項２】
前記第２の制御手段は、
前記オフセット量が前記領域サイズと前記第２のメモリ領域の領域サイズとの合計サイズを超えた場合には、該オフセット量を０に初期化する
ことを特徴とする請求項１に記載のメモリ制御装置。
【請求項３】
前記第１の制御手段は、
前記オフセット量が前記第１のメモリ領域の領域サイズを超えていない場合には、前記第１のメモリにおいて、前記先頭アドレスに前記オフセット量を加えたアドレス、に対するアクセスを制御し、
前記オフセット量が前記第１のメモリ領域の領域サイズを超えている場合には、前記第２のメモリにおいて、該オフセット量から前記第１のメモリ領域の領域サイズを引いて前記第２のメモリ領域の先頭アドレスを加えたアドレス、に対するアクセスを制御する
ことを特徴とする請求項１又は２に記載のメモリ制御装置。
【請求項４】
前記第１の制御手段は、
前記オフセット量としての第１のオフセット量が、該第１のメモリ領域の領域サイズを超えていない場合には、該第１のメモリ領域に対するデータの書き込みを制御し、該第１のオフセット量が該領域サイズを超えている場合には、前記第２のメモリ領域に対するデータの書き込みを制御し、
前記第２の制御手段は、
前記第１のメモリ領域に対するデータの書き込み、前記第２のメモリ領域に対するデータの書き込み、が行われるたびに、前記第１のオフセット量をインクリメントする
ことを特徴とする請求項１乃至３の何れか１項に記載のメモリ制御装置。
【請求項５】
前記第１の制御手段は、
前記第１のオフセット量が前記第１のメモリ領域の領域サイズを超えていない場合には、前記第１のメモリにおいて、前記先頭アドレスに前記第１のオフセット量を加えたアドレス、に対するデータの書き込みを制御し、
前記第１のオフセット量が前記第１のメモリ領域の領域サイズを超えている場合には、前記第２のメモリにおいて、該第１のオフセット量から前記第１のメモリ領域の領域サイズを引いて前記第２のメモリ領域の先頭アドレスを加えたアドレス、に対するデータの書き込みを制御する
ことを特徴とする請求項４に記載のメモリ制御装置。
【請求項６】
前記第１の制御手段は、
前記オフセット量としての第２のオフセット量が、該第１のメモリ領域の領域サイズを超えていない場合には、該第１のメモリ領域に対するデータの読み出しを制御し、該第２のオフセット量が該領域サイズを超えている場合には、前記第２のメモリ領域に対するデータの読み出しを制御し、
前記第２の制御手段は、
前記第１のメモリ領域に対するデータの読み出し、前記第２のメモリ領域に対するデータの読み出し、が行われるたびに、前記第２のオフセット量をインクリメントする
ことを特徴とする請求項１乃至５の何れか１項に記載のメモリ制御装置。
【請求項７】
前記第１の制御手段は、
前記第２のオフセット量が前記第１のメモリ領域の領域サイズを超えていない場合には、前記第１のメモリにおいて、前記先頭アドレスに前記第２のオフセット量を加えたアドレス、に対するデータの読み出しを制御し、
前記第２のオフセット量が前記第１のメモリ領域の領域サイズを超えている場合には、前記第２のメモリにおいて、該第２のオフセット量から前記第１のメモリ領域の領域サイズを引いて前記第２のメモリ領域の先頭アドレスを加えたアドレス、に対するデータの読み出しを制御する
ことを特徴とする請求項６に記載のメモリ制御装置。
【請求項８】
前記第１の制御手段は、
前記第１のオフセット量が前記第１のメモリ領域の領域サイズと同じで且つ前記第２のオフセット量が前記第１のメモリ領域の領域サイズよりも大きい場合には、前記第２のオフセット量が前記第１のメモリ領域の領域サイズ未満となるまでデータの書き込みを停止させ、前記第２のオフセット量が前記第１のメモリ領域の領域サイズ未満となればデータの書き込みを再開させる制御を行うことを特徴とする請求項４又は５に記載のメモリ制御装置。
【請求項９】
前記第１の制御手段は、
前記第２のオフセット量が前記第１のメモリ領域の領域サイズと同じで且つ前記第１のオフセット量が前記第１のメモリ領域の領域サイズよりも大きい場合には、前記第１のオフセット量が前記第１のメモリ領域の領域サイズ未満となるまでデータの読み出しを停止させ、前記第１のオフセット量が前記第１のメモリ領域の領域サイズ未満となればデータの読み出しを再開させる制御を行うことを特徴とする請求項６又は７に記載のメモリ制御装置。
【請求項１０】
請求項１乃至９の何れか１に記載のメモリ制御装置を複数、有する処理装置であって、
前記複数のメモリ制御装置のうち第１のメモリ制御装置には、該第１のメモリ制御装置用のメモリ領域として、前記第１のメモリ領域と前記第２のメモリ領域とを割り当てる手段と、
前記複数のメモリ制御装置のうち第２のメモリ制御装置には、該第２のメモリ制御装置用のメモリ領域として、前記第１のメモリのうち前記第１のメモリ領域とは異なるメモリ領域をリングバッファとして割り当てる手段と、
前記複数のメモリ制御装置のうち第３のメモリ制御装置には、該第３のメモリ制御装置用のメモリ領域として、前記第２のメモリにおいて前記第２のメモリ領域とは異なるメモリ領域をリングバッファとして割り当てる手段と
を備えることを特徴とする処理装置。
【請求項１１】
第１のメモリにおける第１のメモリ領域の先頭アドレスからのオフセット量が、該第１のメモリ領域の領域サイズを超えていない場合には、該第１のメモリ領域に対するアクセスを制御し、該オフセット量が該領域サイズを超えている場合には、該第１のメモリとは別個の第２のメモリにおける第２のメモリ領域に対するアクセスを制御する第１の制御工程と、
前記第１のメモリ領域に対するアクセス、前記第２のメモリ領域に対するアクセス、が行われるたびに前記オフセット量をインクリメントする第２の制御工程と
を備えることを特徴とするメモリ制御装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ制御技術に関するもので、特に、メモリに対するアクセス制御に関するものである。
【背景技術】
【０００２】
メモリ領域をリング状にライト・リードを繰り返し、大量のデータを滞ることなく転送するリングバッファ回路は良く知られている。リングバッファ回路では、入力されたデータを順次メモリ領域の先頭から書き込んでいき、メモリ領域の最後に入力データを書き込むと、メモリ領域の先頭から後続のデータで上書きしていくことを繰り返す。また、リングバッファ回路は、メモリ領域の先頭から順次データを読み出して出力し、メモリ領域の最後からデータを読み出すと、メモリ領域の先頭からデータを読み出していくことを繰り返す。リングバッファ回路は、データを書き込むメモリ領域の位置を示すライトポインタと、データを読み出すメモリ領域の位置を示すリードポインタと、を有する。ライトポインタは、メモリ領域のアドレス或いはアドレスを特定できる値を保持しており、ライトポインタが示すアドレスにリングバッファ回路がデータを書き込むたびに更新される。リードポインタは、メモリ領域のアドレス或いはアドレスを特定できる値を保持しており、リードポインタが示すアドレスからリングバッファ回路がデータを読み出すたびに更新される。リングバッファ回路は正しくデータ転送を行うために、リードポインタがライトポインタを追いかけるように制御し、かつライトポインタがリードポインタを追い越さないように制御する。
【０００３】
一般的に、画像データに各種の処理を施す場合、それぞれの画像処理部によるデータ転送は、リングバッファ制御部による制御のもとにリングバッファを介して行われる。画像データはデータ量が非常に大きいため、リングバッファで使用されるメモリの記憶容量が大きくなる。よって、リングバッファで使用されるシステムメモリには、記憶容量が大きいＤＲＡＭ（Ｄｙｎａｍｉｃ Ｒａｎｄｏｍ Ａｃｃｅｓｓ Ｍｅｍｏｒｙ）が利用される。
【０００４】
集積回路の集積度向上により、各種画像処理部、ＣＰＵ（中央処理装置）、及び各種入出力インターフェース制御回路等を一個のチップ上に集積した大規模集積回路が利用可能となった。このことで、小型で低消費電力な画像処理装置が実現できるようになった。一方で、部品点数削減や低消費電力化のために、従来の画像処理回路用のＤＲＡＭやＣＰＵ用のＤＲＡＭは一個のＤＲＡＭに共有化され、大規模集積回路に接続されるようになった。このＤＲＡＭの共有化は、ＣＰＵや各種画像処理回路からメモリアクセスが一個のＤＲＡＭに集中させることになり、必要なＤＲＡＭのメモリ帯域を押し上げる要因となっている。さらに、画像処理の高速化がＤＲＡＭのメモリ帯域増大に拍車をかける。このため、ＤＲＡＭへのアクセス数低減の必要性が高まっている。
【０００５】
近年、集積回路チップにＤＲＡＭを混在させる技術やチップ上にＤＲＡＭチップを重ねる技術が開発され、大規模集積回路に、従来に比べて大容量のメモリが搭載可能となりつつある。大規模集積回路内の大容量なバッファメモリを各種画像処理部で利用するリングバッファのメモリとして使用できる。このことで、大規模集積回路に接続されるシステムメモリ（ＤＲＡＭ）へのアクセスを大きく減らすことができる。
【０００６】
しかしながら、大規模集積回路内のメモリの記憶容量は固定であり、変更は不可能である。スキャナからの入力画像データのように、データの流れを止められない、或いはデータの流れを止めてしまうと所望の仕様を満たすことができないデータをリングバッファ回路の入力データとした場合、リングバッファがフル状態になることは許されない。リングバッファのフル状態とは、リングバッファ回路のライトポインタがリードポインタに追いつき、さらなる入力データをリングバッファのメモリに書き込めない状態である。また、プリンタへの出力データのように、データの流れを止められない、或いはデータの流れを止めてしまうと所望の仕様を満たすことができないデータをリングバッファ回路の出力データとした場合、リングバッファがエンプティ状態になることは許されない。リングバッファのエンプティ状態とは、リングバッファ回路のリードポインタがライトポインタに追いつき、リングバッファのメモリ内に有効なデータがなく、データが読み出せない状態である。したがって、大規模集積回路内のリングバッファ用メモリの記憶容量は少なくとも、その大規模集積回路が対応しなければならない、最も高速な処理に対して必要な記憶容量としなければならない。このことは大規模集積回路内のリングバッファ用メモリの記憶容量の増大を招く。さらに、大規模集積回路を他の画像処理装置に流用する際に、リングバッファ用メモリの記憶容量不足のために、所望の処理速度を実現できない可能性がある。
【０００７】
特許文献１では、入力ポートにおいて受け付けられたパケットを格納すべきバッファとして、高速メモリの空きが所定の閾値以上の場合に高速メモリを選択する。一方、高速メモリの空きが該閾値未満の場合は低速メモリを選択する振分け部を備えるスイッチ装置であり、パケットのスイッチを高速化する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１３−１０６２６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献１に開示されている技術では、高速メモリを大規模集積回路内のメモリと見立てれば、そのメモリの空き状態でパケットを大規模集積回路内のメモリか他のメモリ（低速メモリ）に振り分ける。高速メモリと低速メモリに格納する順番は、パケットがどのようなタイミングで入力するのかに依存するために、パケットを入力した順番に読み出すことが困難である。よって、リングバッファ回路のごとく、入力データを入力した順番で出力するデータ転送は実現できない。
【００１０】
また、大規模集積回路内のメモリの記憶容量が変更不可能である。このことに起因して、大規模集積回路内のリングバッファ用メモリの記憶容量は、その大規模集積回路が対応しなければならない、最も高速な処理に対する記憶容量以上を必要とするため、その記憶容量の増大を招く。さらに、大規模集積回路を他の画像処理装置に流用する際に、所望の処理速度を実現できない可能性がある。
【００１１】
本発明はこのような問題に鑑みてなされたものであり、比較的簡易な技術でもってリングバッファを構成し、該リングバッファを用いた処理を実現するための技術を提供する。
【課題を解決するための手段】
【００１２】
本発明の一様態は、第１のメモリにおける第１のメモリ領域の先頭アドレスからのオフセット量が、該第１のメモリ領域の領域サイズを超えていない場合には、該第１のメモリ領域に対するアクセスを制御し、該オフセット量が該領域サイズを超えている場合には、該第１のメモリとは別個の第２のメモリにおける第２のメモリ領域に対するアクセスを制御する第１の制御手段と、前記第１のメモリ領域に対するアクセス、前記第２のメモリ領域に対するアクセス、が行われるたびに前記オフセット量をインクリメントする第２の制御手段とを備えることを特徴とする。
【発明の効果】
【００１３】
本発明の構成によれば、比較的簡易な技術でもってリングバッファを構成し、該リングバッファを用いた処理を実現することができる。
【図面の簡単な説明】
【００１４】
【図１】画像処理装置のハードウェア構成例を示すブロック図。
【図２】リングバッファ制御部５００の構成例を示すブロック図。
【図３】リングバッファの構成例を示す図。
【図４】リングバッファに対するデータ書き込み制御処理のフローチャート。
【図５】リングバッファに対するデータ読み出し制御処理のフローチャート。
【図６】ＣＰＵ１０１によるリングバッファ制御部５００の制御処理のフローチャート。
【図７】リングバッファに対するアクセス制御を示す図。
【図８】リングバッファに対するアクセス制御を示す図。
【図９】リングバッファ制御部５００の構成例を示すブロック図。
【図１０】リングバッファに対するデータ書き込み制御処理のフローチャート。
【図１１】リングバッファに対するデータ読み出し制御処理のフローチャート。
【図１２】ＣＰＵ１０１によるリングバッファ制御部５００の制御処理のフローチャート。
【図１３】リングバッファの構成例を示す図。
【図１４】ＣＰＵ１０１が行うリングバッファ制御部５００の初期化処理のフローチャート。
【図１５】ＣＰＵ１０１によるリングバッファ制御部５００の制御処理のフローチャート。
【図１６】リングバッファによるデータ転送終了時に行う制御処理のフローチャート。
【図１７】バッファメモリ管理テーブルの構成例を示す図。
【図１８】バッファメモリ管理テーブルの変化を示す図。
【発明を実施するための形態】
【００１５】
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載した構成の具体的な実施例の１つである。
【００１６】
［第１の実施形態］
本実施形態では、第１のメモリにおける第１のメモリ領域の先頭アドレスからのオフセット量が、該第１のメモリ領域の領域サイズを超えていない場合には、該第１のメモリ領域に対するアクセスを制御（第１の制御）し、該オフセット量が該領域サイズを超えている場合には、該第１のメモリとは別個の第２のメモリにおける第２のメモリ領域に対するアクセスを制御（第１の制御）し、第１のメモリに対するアクセス、第２のメモリに対するアクセス、が行われるたびにオフセット量をインクリメントする（第２の制御）メモリ制御装置の一例について説明する。特に、本実施形態では、このようなメモリ制御装置を、スキャナ機能及びプリント機能を有する画像処理装置に適用した場合について説明する。
【００１７】
先ず、本実施形態に係る画像処理装置のハードウェア構成例について、図１のブロック図を用いて説明する。図１に示す如く、本実施形態に係る画像処理装置１００は、大規模集積回路３００、ＲＯＭ１０４、操作部１０３、システムメモリ１１１、スキャナ部１０９、プリンタ部１０７、を有する。
【００１８】
先ず、ＲＯＭ１０４について説明する。ＲＯＭ１０４には、画像処理装置１００の各種の設定データや、ブートプログラム、大規模集積回路３００におけるＣＰＵ１０１が画像処理装置１００全体の動作制御を行うために使用する様々なコンピュータプログラムやデータが格納されている。
【００１９】
次に、操作部１０３について説明する。操作部１０３は、タッチパネル画面やハードキー群により構成されており、ユーザはタッチパネル画面上をタッチしたりハードキー群を操作することで各種の指示を画像処理装置１００に入力することができる。また、タッチパネル画面には、様々な画面を表示することができる。
【００２０】
次に、システムメモリ１１１について説明する。システムメモリ１１１は読み書き可能なメモリであり、大規模集積回路３００におけるＣＰＵ１０１が各種の処理を実行する際に用いるワークエリアや、画像や処理結果を一時的に格納するためのエリア、などの様々なエリアを適宜提供することができる。
【００２１】
次に、スキャナ部１０９について説明する。スキャナ部１０９は、スキャナ部１０９を制御する制御部（ＣＰＵ等）、照明ランプ、走査ミラーなどを有する。このようなスキャナ部１０９は、紙などの記録媒体に記録されている情報を画像として読み取り、該読み取った画像を大規模集積回路３００に対して出力するものである。
【００２２】
次に、プリンタ部１０７について説明する。プリンタ部１０７は、プリンタ部１０７の制御を行う制御部（ＣＰＵ等）、画像形成や定着を行うための感光体ドラムや定着器を有する。このようなプリンタ部１０７は、大規模集積回路３００から供給された画像に基づいて、紙などの記録媒体上に印刷を行うものである。
【００２３】
次に、大規模集積回路３００について説明する。
【００２４】
ＲＯＭＩ／Ｆ１１２は、ＲＯＭ１０４を大規模集積回路３００に接続するためのもので、大規模集積回路３００は、ＲＯＭＩ／Ｆ１１２を介してＲＯＭ１０４にアクセスする。
【００２５】
操作部Ｉ／Ｆ１１３は、操作部１０３を大規模集積回路３００に接続するためのもので、大規模集積回路３００は、操作部Ｉ／Ｆ１１３を介して操作部１０３との間のデータ通信を行う。
【００２６】
ネットワークＩ／Ｆ１０２は、画像処理装置１００をインターネットやＬＡＮ等のネットワークに接続するためのもので、画像処理装置１００は、このネットワークＩ／Ｆ１０２を介してこのようなネットワーク上の機器との間のデータ通信を行う。
【００２７】
ＵＳＢＩ／Ｆ１１４は、他の機器との間でＵＢＳを仲介するものであり、画像処理装置１００は、このＵＳＢＩ／Ｆ１１４を介して外部の機器との間のデータ通信を行う。
【００２８】
ＦＡＸＩ／Ｆ１１５は、画像処理装置１００を公衆回線網に接続するためのもので、画像処理装置１００は、このＦＡＸＩ／Ｆ１１５を介して公衆回線網に接続されている相手機器との間のデータ通信を行う。ＦＡＸＩ／Ｆ１１５には、公衆回線網からの呼出信号（ＣＩ信号：ＣＡＬＬ  ＩＮＤＩＣＡＴＯＲ）を検知するＣＩ検知回路がある。
【００２９】
ＣＰＵ１０１は、ＲＯＭ１０４に格納されているコンピュータプログラムやデータを用いて処理を実行することで、画像処理装置１００が有する各機能部の動作制御を行う。
【００３０】
スキャナＩ／Ｆ１０８は、大規模集積回路３００にスキャナ部１０９を接続するためのもので、大規模集積回路３００は、スキャナＩ／Ｆ１０８を介してスキャナ部１０９との間のデータ通信を行う。例えば、スキャナ部１０９が記録媒体から読み取った画像は、スキャナＩ／Ｆ１０８を介してリングバッファ制御部５００（１）に転送される。
【００３１】
リングバッファ制御部５００（１）は、システムメモリ１１１及びバッファメモリ１１６（１）を用いてリングバッファを実現し、スキャナＩ／Ｆ１０８から受けた画像を該リングバッファに書き込んだり、後段の画像処理部１０５（１）に送出する画像を該リングバッファから読み出したりする。
【００３２】
画像処理部１０５（１）は、リングバッファ制御部５００（１）から受けた画像に対して適当な画像処理を施す。
【００３３】
リングバッファ制御部５００（２）は、システムメモリ１１１及びバッファメモリ１１６（２）を用いてリングバッファを実現し、画像処理部１０５（１）による画像処理済みの画像を該リングバッファに書き込んだり、後段の画像処理部１０５（２）に送出する画像を該リングバッファから読み出したりする。
【００３４】
画像処理部１０５（２）は、リングバッファ制御部５００（２）から受けた画像に対して適当な画像処理を施し、画像処理済みの画像をシステムメモリ１１１に書き込むべく、該画像処理済みの画像を画像バス１２１を介してメモリコントローラ１１０に対して送出する。
【００３５】
このように、スキャナＩ／Ｆ１０８と画像処理部１０５（１）との間、画像処理部１０５（１）と画像処理部１０５（２）との間、はそれぞれリングバッファ制御部５００（１）、（２）を介して接続されることになる。なお、図１では、スキャナ部１０９から受けた画像に対して画像処理を行う画像処理部は２つ（画像処理部１０５（１）、（２））としたが、その数は２に限るものではない。
【００３６】
画像処理部１０５（３）は、メモリコントローラ１１０及び画像バス１２１を介して、システムメモリ１１１から印刷対象となる画像を取得し、該取得した画像に対して適当な画像処理を施す。
【００３７】
リングバッファ制御部５００（３）は、システムメモリ１１１及びバッファメモリ１１６（３）を用いてリングバッファを実現し、画像処理部１０５（３）から受けた画像を該リングバッファに書き込んだり、後段の画像処理部１０５（４）に送出する画像を該リングバッファから読み出したりする。
【００３８】
画像処理部１０５（４）は、リングバッファ制御部５００（３）から受けた画像に対して適当な画像処理を施す。
【００３９】
リングバッファ制御部５００（４）は、システムメモリ１１１及びバッファメモリ１１６（４）を用いてリングバッファを実現し、画像処理部１０５（４）から受けた画像を該リングバッファに書き込んだり、印刷対象としてプリンタＩ／Ｆ１０６に出力する画像を該リングバッファから読み出したりする。
【００４０】
プリンタＩ／Ｆ１０６は、リングバッファ制御部５００（４）から受けた画像をプリンタ部１０７に転送する。なお、プリンタＩ／Ｆ１０６は、リングバッファ制御部５００（４）から受けた画像を適宜処理（色処理、フォーマット変換など）してからプリンタ部１０７に転送しても良い。プリンタＩ／Ｆ１０６は、プリンタ部１０７との間のデータ通信を行うためのインターフェースとして機能するものである。
【００４１】
このように、画像処理部１０５（３）と画像処理部１０５（４）との間、画像処理部１０５（４）とプリンタＩ／Ｆ１０６との間、はそれぞれリングバッファ制御部５００（３）、（４）を介して接続されることになる。なお、図１では、印刷対象となる画像に対して画像処理を行う画像処理部は２つ（画像処理部１０５（３）、（４））としたが、その数は２に限るものではない。
【００４２】
また、図１では、１つのリングバッファ制御部に対して１つのバッファメモリが割り当てられているが、幾つかのリングバッファ制御部が１つのバッファメモリを共有して使用しても構わない。
【００４３】
メモリコントローラ１１０は、システムメモリ１１１へのアクセス制御を行う。より詳しくは、メモリコントローラ１１０は、システムバス１２０および画像バス１２１に接続され、画像バス１２１に接続されたバスマスタのシステムメモリ１１１へのアクセスと、システムバス１２０に接続されたバスマスタのシステムメモリ１１１のアクセスと、を排他的に切り替える。
【００４４】
ＣＰＵ１０１は、システムバス１２０に接続された各機能部に対する設定を、該システムバス１２０を介して行う。
【００４５】
なお、リングバッファ制御部５００（１）〜（４）は何れも同様の構成を有するものであるから、以下では、リングバッファ制御部５００（１）〜（４）を個別に説明する以外は、まとめてリングバッファ制御部５００と表記する。然るに、以下でリングバッファ制御部５００について行った説明は、リングバッファ制御部５００（１）〜（４）のそれぞれに同様に適用可能である。
【００４６】
また、バッファメモリ１１６（１）〜（４）もまた、何れも同様の構成を有するものであるから、以下では、バッファメモリ１１６（１）〜（４）を個別に説明する以外は、まとめてバッファメモリ１１６と表記する。然るに、以下でバッファメモリ１１６について行った説明は、バッファメモリ１１６（１）〜（４）のそれぞれに同様に適用可能である。
【００４７】
次に、リングバッファ制御部５００の構成例について、図２のブロック図を用いて説明する。
【００４８】
バッファメモリ領域設定部５０１は、バッファメモリ１１６においてリングバッファの一部として利用するメモリ領域（バッファメモリ１１６全体のメモリ領域であっても良いし、バッファメモリ１１６の一部のメモリ領域であっても良い）を規定する（若しくは導出するための）情報を保持する。例えば、バッファメモリ領域設定部５０１は、バッファメモリ１１６においてリングバッファの一部として利用するメモリ領域の先頭アドレス及び該メモリ領域のサイズを保持する。このような情報（先頭アドレス及びメモリ領域のサイズ）は、ＣＰＵ１０１が実行するソフトウェアにより、システムバス１２０を介してバッファメモリ領域設定部５０１に登録される。
【００４９】
システムメモリ領域設定部５０２は、システムメモリ１１１においてリングバッファの一部として利用するメモリ領域（システムメモリ１１１全体のメモリ領域であっても良いし、システムメモリ１１１の一部のメモリ領域であっても良い）を規定する（若しくは導出するための）情報を保持する。例えば、システムメモリ領域設定部５０２は、システムメモリ１１１においてリングバッファの一部として利用するメモリ領域の先頭アドレス及び該メモリ領域のサイズを保持する。このような情報（先頭アドレス及びメモリ領域のサイズ）は、ＣＰＵ１０１が実行するソフトウェアにより、システムバス１２０を介してシステムメモリ領域設定部５０２に登録される。
【００５０】
なお、バッファメモリ領域設定部５０１及びシステムメモリ領域設定部５０２に登録する情報は、「先頭アドレス及びメモリ領域のサイズ」の代わりに、「先頭アドレス及びメモリ領域の終端アドレス」であっても構わない。すなわち、バッファメモリ１１６においてリングバッファの一部として利用するメモリ領域を規定する（若しくは導出するための）情報、システムメモリ１１１においてリングバッファの一部として利用するメモリ領域を規定する（若しくは導出するための）情報、がそれぞれバッファメモリ領域設定部５０１及びシステムメモリ領域設定部５０２に登録されるのであれば、その情報は如何なる情報であっても構わない。
【００５１】
本実施形態では、バッファメモリ領域設定部５０１は、バッファメモリ１１６においてリングバッファの一部として利用するメモリ領域の先頭アドレスＳＡ０と、該メモリ領域のサイズＳＺ０と、を保持しているものとする。また、本実施形態では、システムメモリ領域設定部５０２は、システムメモリ１１１においてリングバッファの一部として利用するメモリ領域の先頭アドレスＳＡ１と、該メモリ領域のサイズＳＺ１と、を保持しているものとする。
【００５２】
バッファメモリ１１６においてリングバッファの一部として利用するメモリ領域、システムメモリ１１１においてリングバッファの一部として利用するメモリ領域、これらのメモリ領域により構成されるリングバッファ、を図３に示す。リングバッファ制御部５００は、このように、バッファメモリ１１６において先頭アドレスがＳＡ０で領域サイズがＳＺ０であるメモリ領域と、システムメモリ１１１において先頭アドレスがＳＡ１で領域サイズがＳＺ１であるメモリ領域と、をこの順で連結したメモリ領域をリングバッファとして用いる。
【００５３】
ライト制御部５１０は、入力されたデータをリングバッファに書き込む制御を実現するためにライトポインタを保持しており、バッファメモリ領域設定部５０１が保持している情報と、システムメモリ領域設定部５０２が保持している情報と、ライトポインタの値と、に基づいて、バッファメモリ１１６及びシステムメモリ１１１の何れのメモリのどのアドレスにデータを書き込むのかを決定する。そしてライト制御部５１０は、バッファメモリ１１６にデータを書き込むことを決定した場合には、バッファメモリライトＩ／Ｆ５１２に対し、書き込み対象のデータと、バッファメモリ１１６において該データを書き込むアドレスと、を含むライト要求を送出する。一方、ライト制御部５１０は、システムメモリ１１１にデータを書き込むことを決定した場合には、システムメモリライトＩ／Ｆ５１１に対し、書き込み対象のデータと、システムメモリ１１１において該データを書き込むアドレスと、を含むライト要求を送出する。
【００５４】
システムメモリライトＩ／Ｆ５１１は、ライト制御部５１０からライト要求を受けると、該ライト要求に含まれている書き込み対象のデータを、該ライト要求に含まれている（システムメモリ１１１における）アドレスに書き込むためのライトアクセスを、画像バス１２１を介してメモリコントローラ１１０に対して送出する。
【００５５】
バッファメモリライトＩ／Ｆ５１２は、ライト制御部５１０からライト要求を受けると、該ライト要求に含まれている書き込み対象のデータを、該ライト要求に含まれている（バッファメモリ１１６における）アドレスに書き込むためのライトアクセスを、バッファメモリ１１６に対して行う。
【００５６】
リード制御部５２０は、リングバッファからデータを読み出して出力データとして出力する制御を実現するためにリードポインタを保持しており、バッファメモリ領域設定部５０１が保持している情報と、システムメモリ領域設定部５０２が保持している情報と、リードポインタの値と、に基づいて、バッファメモリ１１６及びシステムメモリ１１１の何れのメモリのどのアドレスからデータを読み出すのかを決定する。そしてリード制御部５２０は、バッファメモリ１１６からデータを読み出すことを決定した場合には、バッファメモリリードＩ／Ｆ５２２に対し、バッファメモリ１１６におけるデータの読み出しアドレスを含むリード要求を送出する。一方、リード制御部５２０は、システムメモリ１１１からデータを読み出すことを決定した場合には、システムメモリリードＩ／Ｆ５２１に対し、システムメモリ１１１におけるデータの読み出しアドレスを含むリード要求を送出する。
【００５７】
システムメモリリードＩ／Ｆ５２１は、リード制御部５２０からリード要求を受けると、該リード要求に含まれている（システムメモリ１１１における）アドレスからデータを読み出すためのリードアクセスを、画像バス１２１を介してメモリコントローラ１１０に対して送出する。
【００５８】
バッファメモリリードＩ／Ｆ５２２は、リード制御部５２０からリード要求を受けると、該リード要求に含まれている（バッファメモリ１１６における）アドレスからデータを読み出すためのリードアクセスを、バッファメモリ１１６に対して行う。
【００５９】
空き数カウンタ５１３は、リングバッファにおいてデータの書き込みが可能なメモリ領域のサイズを管理する。空き数カウンタ５１３が保持するカウンタの値は、リングバッファ制御部５００によるデータ転送開始時にライト制御部５１０によって初期化され、その初期値は、（ＳＺ０＋ＳＺ１）である。そして空き数カウンタ５１３は、システムメモリライトＩ／Ｆ５１１やバッファメモリライトＩ／Ｆ５１２からデータ書き込み完了（ライト完了）を示すｗｒｉｔｅ  ｄｏｎｅ信号を受けるたびに、カウンタの値をデクリメントする。デクリメント量は、書き込んだデータのサイズである。また、空き数カウンタ５１３は、システムメモリリードＩ／Ｆ５２１やバッファメモリリードＩ／Ｆ５２２からデータ読み出し完了（リード完了）を示すｒｅａｄ  ｄｏｎｅ信号を受けるたびに、カウンタの値をインクリメントする。インクリメント量は、読み出したデータのサイズである。このように、空き数カウンタ５１３はデータ転送中、常にリングバッファ全体で書き込み可能なメモリ領域のサイズを管理することができる。
【００６０】
データ数カウンタ５２３は、リングバッファにおいてデータの読み出しが可能なメモリ領域のサイズを管理する。データ数カウンタ５２３が保持するカウンタの値は、リングバッファ制御部５００によるデータ転送開始時にリード制御部５２０によって初期化され、その初期値は０である。そしてデータ数カウンタ５２３は、システムメモリライトＩ／Ｆ５１１やバッファメモリライトＩ／Ｆ５１２からデータ書き込み完了（ライト完了）を示すｗｒｉｔｅ  ｄｏｎｅ信号を受けるたびに、カウンタの値をインクリメントする。インクリメント量は、書き込んだデータのサイズである。また、データ数カウンタ５２３は、システムメモリリードＩ／Ｆ５２１やバッファメモリリードＩ／Ｆ５２２からデータ読み出し完了（リード完了）を示すｒｅａｄ  ｄｏｎｅ信号を受けるたびに、カウンタの値をデクリメントする。デクリメント量は、読み出したデータのサイズである。このように、データ数カウンタ５２３はデータ転送中、常にリングバッファ全体で読み出し可能なメモリ領域のサイズを管理することができる。
【００６１】
次に、リングバッファ制御部５００（ライト制御部５１０）によるリングバッファに対するデータ書き込み制御処理について、同処理のフローチャートを示す図４を用いて説明する。なお、ライト制御部５１０はハードウェア（回路）で構成されるので、必ずしも図４に示した各ステップは逐次実行されるわけではなく、複数のステップを同時に実行する場合がある。
【００６２】
＜ステップＳ１００１＞
ライト制御部５１０は、データ転送が開始されたか否かを判断する。この判断については、例えば、垂直同期信号のような転送開始を示す信号があれば、その信号のアサートでデータ転送が開始されたと判断してもよい。また、ソフトウェアによりシステムバス１２０を介して、明示的にデータ転送開始が指示された場合には、この指示の検出をもってデータ転送が開始されたと判断しても良い。このように、データ転送が開始されたか否かを判断するための方法には様々な方法が考えられ、本実施形態では如何なる方法を採用しても構わない。
【００６３】
このような判断の結果、データ転送が開始された場合には、処理はステップＳ１００２に進み、データ転送が開始されていない場合には、処理はステップＳ１００１で待機する。
【００６４】
＜ステップＳ１００２＞
ライト制御部５１０は、ライトポインタの値を０に初期化すると共に、空き数カウンタ５１３が保持するカウンタの値を（ＳＺ０＋ＳＺ１）に初期化する。ここで、ライトポインタとは、先頭アドレスＳＡ０からの相対アドレスを示すものである。
【００６５】
＜ステップＳ１００３＞
ライト制御部５１０は、入力データを待機しており、入力データの入力を検知した場合には、処理はステップＳ１００４に進み、検知していない場合には、処理はステップＳ１００３で待機して、入力データの入力を待機する。
【００６６】
＜ステップＳ１００４＞
ライト制御部５１０は、空き数カウンタ５１３が保持するカウンタの値が０よりも大きいか否か、すなわち、リングバッファにおいてデータの書き込みが可能なメモリ領域が存在するか否かを判断する。この判断の結果、空き数カウンタ５１３が保持するカウンタの値が０よりも大きい場合、すなわち、リングバッファにおいてデータの書き込みが可能なメモリ領域が存在する場合には処理はステップＳ１００５に進み、空き数カウンタ５１３が保持するカウンタの値が０である場合、すなわち、リングバッファにおいてデータの書き込みが可能なメモリ領域が存在しない場合には、処理はステップＳ１００４で待機する。なお、空き数カウンタ５１３が保持するカウンタの値がゼロである場合は、ライトポインタとリードポインタとが同じ値を示していることになる。
【００６７】
このように、空き数カウンタ５１３が保持するカウンタの値が０である場合、すなわち、ライトポインタとリードポインタとが同じ値を示している場合には、処理はステップＳ１００５には進まず、ステップＳ１００４で待機するので、ライトポインタが示す値がリードポインタが示す値を追い越すことを防いでいる。
【００６８】
＜ステップＳ１００５＞
ライト制御部５１０は、「ＳＺ０＞０且つライトポインタの値がＳＺ０未満（領域サイズ未満）」という条件が満たされているか否かを判断する。この判断の結果、この条件が満たされている場合には、処理はステップＳ１００６に進み、この条件が満たされていない場合には、処理はステップＳ１００７に進む。
【００６９】
「ＳＺ０＞０」という条件は、ＳＺ０＝０の場合は、システムメモリ１１１のみでリングバッファを構成することを意図したものである。また、「ライトポインタの値がＳＺ０未満」という条件についてであるが、「ライトポインタの値がＳＺ０未満」とは即ち「先頭アドレスＳＡ０からの相対アドレスがＳＺ０未満」であることを意味しており、この条件が満たされるということは、これからデータの書き込みを行う先のアドレス（ライトポインタが指し示すアドレス）がバッファメモリ１１６内のアドレスであることになる。
【００７０】
＜ステップＳ１００６＞
ライト制御部５１０は、入力データを書き込む先のアドレスに（ＳＡ０＋ライトポインタの値）を設定し、入力データをバッファメモリ１１６における該アドレスに書き込むべく、該入力データ及び該アドレスを含むライト要求をバッファメモリライトＩ／Ｆ５１２に対して送出する。
【００７１】
＜ステップＳ１００７＞
ライト制御部５１０は、入力データを書き込む先のアドレスに（ＳＡ１＋ライトポインタの値−ＳＺ０）を設定し、入力データをシステムメモリ１１１における該アドレスに書き込むべく、該入力データ及び該アドレスを含むライト要求をシステムメモリライトＩ／Ｆ５１１に対して送出する。
【００７２】
＜ステップＳ１００８＞
ライト制御部５１０は、ライトポインタの値をインクリメントする。インクリメント量は、リングバッファに対する１回のデータ書き込み量である。
【００７３】
＜ステップＳ１００９＞
ライト制御部５１０は、ライトポインタの値がリングバッファ全体のサイズ（合計サイズ）（ＳＺ０＋ＳＺ１）未満であるか否かを判断する。この判断の結果、ライトポインタの値が（ＳＺ０＋ＳＺ１）未満であれば、処理はステップＳ１０１１に進み、ライトポインタの値が（ＳＺ０＋ＳＺ１）以上であれば、処理はステップＳ１０１０に進む。
【００７４】
＜ステップＳ１０１０＞
ライト制御部５１０は、ライトポインタの値を０に初期化して、次にデータを書き込む先をリングバッファの先頭アドレス、即ち、ＳＡ０に変更する。
【００７５】
＜ステップＳ１０１１＞
ライト制御部５１０は、データ転送が完了したか否かを判断する。この判断については、例えば、エンド信号のような転送終了を示す信号があれば、その信号のアサートでデータ転送終了と判断してもよい。また、ソフトウェアによりシステムバス１２０を介して、あらかじめデータ転送量をリングバッファ制御部５００に設定し、ライト制御部５１０がその転送量分のライト要求を発行した時点でデータ転送終了と判断してもよい。このように、データ転送が完了したか否かを判断する方法には様々な方法が考えられ、本実施形態では如何なる方法を採用しても構わない。この判断の結果、データ転送が完了した場合には、図４のフローチャートに従った処理は完了し、データ転送が完了していない場合には、処理はステップＳ１００３に戻る。
【００７６】
次に、リングバッファ制御部５００（リード制御部５２０）によるリングバッファに対するデータ読み出し制御処理について、同処理のフローチャートを示す図５を用いて説明する。なお、リード制御部５２０はハードウェア（回路）で構成されるので、必ずしも図５に示した各ステップは逐次実行されるわけではなく、複数のステップを同時に実行する場合がある。
【００７７】
＜ステップＳ２００１＞
リード制御部５２０は、データ転送が開始されたか否かを判断する。この判断については、例えば、垂直同期信号のような転送開始を示す信号があれば、その信号のアサートでデータ転送が開始されたと判断してもよい。また、ソフトウェアによりシステムバス１２０を介して、明示的にデータ転送開始が指示された場合には、この指示の検出をもってデータ転送が開始されたと判断しても良い。このように、データ転送が開始されたか否かを判断するための方法には様々な方法が考えられ、本実施形態では如何なる方法を採用しても構わない。
【００７８】
このような判断の結果、データ転送が開始された場合には、処理はステップＳ２００２に進み、データ転送が開始されていない場合には、処理はステップＳ２００１で待機する。
【００７９】
＜ステップＳ２００２＞
リード制御部５２０は、リードポインタの値を０に初期化すると共に、データ数カウンタ５２３が保持するカウンタの値を０に初期化する。ここで、リードポインタとは、先頭アドレスＳＡ０からの相対アドレスを示すものである。
【００８０】
＜ステップＳ２００３＞
リード制御部５２０は、データ数カウンタ５２３が保持するカウンタの値が０よりも大きいか否か、すなわち、リングバッファにおいてデータの読み出しが可能なメモリ領域が存在するか否かを判断する。この判断の結果、データ数カウンタ５２３が保持するカウンタの値が０よりも大きい場合、すなわち、リングバッファにおいてデータの読み出しが可能なメモリ領域が存在する場合には処理はステップＳ２００４に進み、データ数カウンタ５２３が保持するカウンタの値が０である場合、すなわち、リングバッファにおいてデータの読み出しが可能なメモリ領域が存在しない場合には、処理はステップＳ２００３で待機する。なお、データ数カウンタ５２３が保持するカウンタの値がゼロである場合は、ライトポインタとリードポインタとが同じ値を示していることになる。
【００８１】
このように、データ数カウンタ５２３が保持するカウンタの値が０である場合、すなわち、ライトポインタとリードポインタとが同じ値を示している場合には、処理はステップＳ２００４には進まず、ステップＳ２００３で待機するので、リードポインタが示す値がライトポインタが示す値を追い越すことを防いでいる。
【００８２】
＜ステップＳ２００４＞
リード制御部５２０は、「ＳＺ０＞０且つリードポインタの値がＳＺ０未満」という条件が満たされているか否かを判断する。この判断の結果、この条件が満たされている場合には、処理はステップＳ２００５に進み、この条件が満たされていない場合には、処理はステップＳ２００６に進む。
【００８３】
「ＳＺ０＞０」という条件は、ＳＺ０＝０の場合は、システムメモリ１１１のみでリングバッファを構成することを意図したものである。また、「リードポインタの値がＳＺ０未満」という条件についてであるが、「リードポインタの値がＳＺ０未満」とは即ち「先頭アドレスＳＡ０からの相対アドレスがＳＺ０未満」であることを意味しており、この条件が満たされるということは、これからデータの読み出しを行う先のアドレス（リードポインタが指し示すアドレス）がバッファメモリ１１６内のアドレスであることになる。
【００８４】
＜ステップＳ２００５＞
リード制御部５２０は、データを読み出すアドレスに（ＳＡ０＋リードポインタの値）を設定し、バッファメモリ１１６における該アドレスからデータを読み出すべく、該アドレスを含むリード要求をバッファメモリリードＩ／Ｆ５２２に対して送出する。
【００８５】
＜ステップＳ２００６＞
リード制御部５２０は、データを読み出すアドレスに（ＳＡ１＋リードポインタの値−ＳＺ０）を設定し、システムメモリ１１１における該アドレスからデータを読み出すべく、該アドレスを含むリード要求をシステムメモリリードＩ／Ｆ５２１に対して送出する。
【００８６】
＜ステップＳ２００７＞
リード制御部５２０は、ステップＳ２００５若しくはステップＳ２００６におけるリード要求に応じてリングバッファから読み出されたデータを出力データとして出力する。そしてこの出力が完了すれば、処理はステップＳ２００８に進む。
【００８７】
＜ステップＳ２００８＞
リード制御部５２０は、リードポインタの値をインクリメントする。インクリメント量は、リングバッファからの１回のデータ読み出し量である。
【００８８】
＜ステップＳ２００９＞
リード制御部５２０は、リードポインタの値がリングバッファ全体のサイズ（ＳＺ０＋ＳＺ１）未満であるか否かを判断する。この判断の結果、リードポインタの値が（ＳＺ０＋ＳＺ１）未満であれば、処理はステップＳ２０１１に進み、リードポインタの値が（ＳＺ０＋ＳＺ１）以上であれば、処理はステップＳ２０１０に進む。
【００８９】
＜ステップＳ２０１０＞
リード制御部５２０は、リードポインタの値を０に初期化して、次にデータを読み出すアドレスをリングバッファの先頭アドレス、即ち、ＳＡ０に変更する。
【００９０】
＜ステップＳ２０１１＞
リード制御部５２０は、データ転送が完了したか否かを判断する。この判断については、例えば、エンド信号のような転送終了を示す信号があれば、その信号のアサート後にデータ数カウンタ５２３が保持するカウンタの値が０に戻ったことでデータ転送終了と判断してもよい。また、ソフトウェアによりシステムバス１２０を介して、あらかじめデータ転送量をリングバッファ制御部５００に設定し、リード制御部５２０がその転送量分のリード要求を発行した時点でデータ転送終了と判断してもよい。このように、データ転送が完了したか否かを判断する方法には様々な方法が考えられ、本実施形態では如何なる方法を採用しても構わない。この判断の結果、データ転送が完了した場合には、図５のフローチャートに従った処理は完了し、データ転送が完了していない場合には、処理はステップＳ２００３に戻る。
【００９１】
次に、ＣＰＵ１０１によるリングバッファ制御部５００の制御処理について、同処理のフローチャートを示す図６を用いて説明する。ＣＰＵ１０１は、ＲＯＭ１０４に格納されているコンピュータプログラムやデータを用いて処理を実行することで、図６に示した各ステップにおける処理を実行する。図６のフローチャートに従った処理は、リングバッファ制御部５００によるデータ転送が必要になった時点で開始される。
【００９２】
＜ステップＳ３００１＞
ＣＰＵ１０１は、リングバッファ制御部５００の出力側に接続される機能部、例えば、画像処理部１０５（１）、（２）、（４）やプリンタＩ／Ｆ１０６に対し、システムバス１２０を介して所定の設定を行う。
【００９３】
＜ステップＳ３００２＞
ＣＰＵ１０１はシステムバス１２０を介して、リングバッファ制御部５００内のバッファメモリ領域設定部５０１に対し、上記のＳＡ０及びＳＺ０を設定する。また、ＣＰＵ１０１はシステムバス１２０を介して、リングバッファ制御部５００内のシステムメモリ領域設定部５０２に対し、上記のＳＡ１及びＳＺ１を設定する。
【００９４】
＜ステップＳ３００３＞
ＣＰＵ１０１は、リングバッファ制御部５００の入力側に接続される機能部、例えば画像処理部１０５（１）、（３）、（４）やスキャナＩ／Ｆ１０８に対し、システムバス１２０を介して所定の設定を行う。
【００９５】
＜ステップＳ３００４＞
ＣＰＵ１０１は、リングバッファ制御部５００の入力側に接続される機能部、例えば画像処理部１０５（１）、（３）、（４）やスキャナＩ／Ｆ１０８に対し、システムバス１２０を介して、データ出力開始の指示を行う。この指示により、リングバッファ制御部５００によるデータ転送は開始される。
【００９６】
ＣＰＵ１０１は、リングバッファ制御部５００の出力側に接続される機能部のレジスタに存在する処理完了フラグを、システムバス１２０を介して読み出し、そのフラグの値によりデータ転送終了を判断する。または、ＣＰＵ１０１は、リングバッファ制御部５００の出力側に接続される機能部の処理完了割り込みが発生した時点で、データ転送が終了したと判断する。ただし、データ転送終了後にリングバッファ制御部５００に対してＣＰＵ１０１による特別な制御は必要ない。
【００９７】
このように、本実施形態によれば、図３に示す如く、バッファメモリ１１６におけるメモリ領域とシステムメモリ１１１におけるメモリ領域とを用いて一つのリングバッファ領域を構成し、該リングバッファを用いたデータ転送が可能となる。バッファメモリ１１６及びシステムメモリ１１１においてリングバッファに使用する領域の指定は、リングバッファ制御部５００内のバッファメモリ領域設定部５０１及びシステムメモリ領域設定部５０２に設定すればよい。
【００９８】
［第２の実施形態］
本実施形態では、第１の実施形態において説明したリングバッファに対するアクセスにおいて、システムメモリ１１１に対するライトアクセスとリードアクセスとを排他的に行い、システムメモリ１１１に対するアクセスが集中しないようにする。このような構成により、リングバッファに起因するシステムメモリ１１１に対するアクセスがＣＰＵ１０１や他のブロックからのシステムメモリ１１１に対するアクセスを待たせる期間を短くする。以下では、第１の実施形態との差分について重点的に説明し、以下で特に触れない限りは第１の実施形態と同様であるものとする。
【００９９】
先ず、本実施形態に係るリングバッファに対するアクセス制御について、図７，８を用いて説明する。図７の左側は、リングバッファでのデータ転送中にライトポインタが「システムメモリ１１１においてリングバッファに使用しているメモリ領域」（以下では第１のメモリ領域と呼称する）の先頭を指しており、リードポインタが第１のメモリ領域においてライトポインタよりも後の位置を指している状態を示している。このように、ライトポインタが第１のメモリ領域の先頭を指しているということは、少なくとも、リングバッファの先頭から第１のメモリ領域の先頭までの間、すなわち「バッファメモリ１１６においてリングバッファに使用しているメモリ領域」（以下では第２のメモリ領域と呼称する）には読み出しの対象となるデータ（有効データ）が格納されている（満たされている）ことになる。このような状態では、リングバッファへのライトを一時停止してもエンプティ状態に陥ることはない。そして、図７の右側に示す如く、リードポインタが第２のメモリ領域中の位置を指した時点で、リングバッファへのライトを再開するようにすれば、システムメモリ１１１に対するライトアクセスとリードアクセスとを排他的に行うことができる。なお、「ライトポインタが第１のメモリ領域の先頭を指している状態で、リードポインタが第１のメモリ領域内の位置を指している」とは、ライトポインタの値がＳＺ０であり且つ空き数カウンタ５１３のカウンタの値がＳＺ１未満である、という条件が満たされていることに等価であり、この条件が満たされているか否かを判断することで、「ライトポインタが第１のメモリ領域の先頭を指している状態で、リードポインタが第１のメモリ領域内の位置を指している」か否かを判断することができる。もちろん、「ライトポインタが第１のメモリ領域の先頭を指している状態で、リードポインタが第１のメモリ領域内の位置を指している」か否かを判断する方法はこれ以外の方法も考え得る。例えば、ライトポインタの値がＳＺ０であり且つリードポインタの値がＳＺ０よりも大きければ、「ライトポインタが第１のメモリ領域の先頭を指している状態で、リードポインタが第１のメモリ領域内の位置を指している」と判断しても良い。
【０１００】
なお、スキャナＩ／Ｆ１０８のようにデータの流れを一時的にも停止できない機能部がリングバッファ制御部５００の入力側に接続される可能性がある場合には、上記のライト一時停止機能を無効にする構成が必要である。
【０１０１】
図８の左側は、リングバッファでのデータ転送中にリードポインタが第１のメモリ領域の先頭を指しており、ライトポインタが第１のメモリ領域においてリードポインタよりも後の位置を指している状態を示している。このように、リードポインタが第１のメモリ領域の先頭を指しているということは、少なくとも、リングバッファの先頭から第１のメモリ領域の先頭までの間、すなわち第２のメモリ領域は空の状態（読み出しの対象となるデータ（有効データ）が格納されていない状態）となる。このような状態では、リングバッファへのリードを一時停止してもフル状態に陥ることはない。そして、図８の右側に示す如く、ライトポインタが第２のメモリ領域中の位置を指した時点で、リングバッファへのリードを再開するようにすれば、システムメモリ１１１に対するライトアクセスとリードアクセスとを排他的に行うことができる。なお、「リードポインタが第１のメモリ領域の先頭を指している状態で、ライトポインタが第１のメモリ領域内の位置を指している」とは、リードポインタの値がＳＺ０であり且つデータ数カウンタ５２３のカウンタの値がＳＺ１未満である、という条件が満たされていることに等価であり、この条件が満たされているか否かを判断することで、「リードポインタが第１のメモリ領域の先頭を指している状態で、ライトポインタが第１のメモリ領域内の位置を指している」か否かを判断することができる。もちろん、「リードポインタが第１のメモリ領域の先頭を指している状態で、ライトポインタが第１のメモリ領域内の位置を指している」か否かを判断する方法はこれ以外の方法も考え得る。例えば、リードポインタの値がＳＺ０であり且つライトポインタの値がＳＺ０よりも大きければ、「リードポインタが第１のメモリ領域の先頭を指している状態で、ライトポインタが第１のメモリ領域内の位置を指している」と判断しても良い。
【０１０２】
なお、プリンタＩ／Ｆ１０６のようにデータの流れを一時的にも停止できない機能部がリングバッファ制御部５００の出力側に接続される可能性がある場合には、上記のリード一時停止機能を無効にする構成が必要である。また、ライト制御部５１０がデータ転送の最後のデータをリングバッファに書き込んでいれば、リード制御部５２０はリード一時停止を行ってはいけない。つまり、リードポインタが第１のメモリ領域の先頭を指した時点でライトポインタが第１のメモリ領域内を指している場合であっても、リード制御部５２０はリード一時停止を行ってはいけない。
【０１０３】
次に、本実施形態に係るリングバッファ制御部５００の構成例について、図９のブロック図を用いて説明する。図９において図２に示した機能部と同じ機能部には同じ参照番号を付しており、該機能部に係る説明は省略する。図９に示した構成は、図２に示した構成に、許可設定部５０３，５０４を加えると共に、ライト制御部５１０がリード制御部５２０に対してｗｒｉｔｅ  ｅｎｄ信号を出力するように変更した構成となっている。
【０１０４】
許可設定部５０３には、上記のライト一時停止機能を許可するか否かを示す情報が保持されており、この情報は、ＣＰＵ１０１がソフトウェアを実行することでシステムバス１２０を介して許可設定部５０３にアクセスして設定するものである。
【０１０５】
許可設定部５０４には、上記のリード一時停止機能を許可するか否かを示す情報が保持されており、この情報は、ＣＰＵ１０１がソフトウェアを実行することでシステムバス１２０を介して許可設定部５０４にアクセスして設定するものである。
【０１０６】
ライト制御部５１０が出力するｗｒｉｔｅ  ｅｎｄ信号は、データ転送における最後のデータをリングバッファに書き込んだことを示す信号であり、後述するタイミングでリード制御部５２０に対して送出される。
【０１０７】
次に、リングバッファ制御部５００（ライト制御部５１０）によるリングバッファに対するデータ書き込み制御処理について、同処理のフローチャートを示す図１０を用いて説明する。なお、ライト制御部５１０はハードウェア（回路）で構成されるので、必ずしも図１０に示した各ステップは逐次実行されるわけではなく、複数のステップを同時に実行する場合がある。
【０１０８】
なお、ステップＳ４００１，Ｓ４００３〜Ｓ４００４，Ｓ４００８〜Ｓ４０１４はそれぞれ、図４のステップＳ１００１，Ｓ１００３〜Ｓ１００４，Ｓ１００５〜Ｓ１０１１と同様であるため、これらのステップに係る説明は省略する。
【０１０９】
＜ステップＳ４００２＞
ライト制御部５１０は、第１の実施形態と同様に、ライトポインタの値を０に初期化し、空き数カウンタ５１３が保持するカウンタの値を（ＳＺ０＋ＳＺ１）に初期化するのであるが、これに加えて、ｗｒｉｔｅ  ｅｎｄ信号をディアサートする。
【０１１０】
＜ステップＳ４００５＞
ライト制御部５１０は、許可設定部５０３に保持されている情報を参照し、ライト一時停止機能が許可されているか否かを判断する。この判断の結果、許可されている場合には、処理はステップＳ４００６に進み、許可されていない場合には、処理はステップＳ４００８に進む。
【０１１１】
＜ステップＳ４００６＞
ライト制御部５１０は、第２のメモリ領域のサイズが０よりも大きく且つライトポインタが第１のメモリ領域の先頭を指しているか否かを判断するために、ＳＺ０＞０且つライトポインタの値がＳＺ０、という条件が満たされているか否かを判断する。この判断の結果、この条件が満たされている場合には、処理はステップＳ４００７に進み、この条件が満たされていない場合には、処理はステップＳ４００８に進む。
【０１１２】
＜ステップＳ４００７＞
ライト制御部５１０は、「ライトポインタが第１のメモリ領域の先頭を指している状態で、リードポインタが第１のメモリ領域内の位置を指している」か否かを判断するために、空き数カウンタ５１３のカウンタの値がＳＺ１よりも大きいか否かを判断する。この判断の結果、空き数カウンタ５１３のカウンタの値がＳＺ１よりも大きい場合には、「ライトポインタが第１のメモリ領域の先頭を指している状態で、リードポインタが第２のメモリ領域内の位置を指している」と判断し、処理はステップＳ４００８に進む。一方、空き数カウンタ５１３のカウンタの値がＳＺ１以下である場合には、「ライトポインタが第１のメモリ領域の先頭を指している状態で、リードポインタが第１のメモリ領域内の位置を指している」と判断し、処理はステップＳ４００７で待機し、これにより、リングバッファへのライトを一時停止する。
【０１１３】
＜ステップＳ４０１５＞
ライト制御部５１０は、リード制御部５２０に対するｗｒｉｔｅ  ｅｎｄ信号をアサートする。
【０１１４】
次に、リングバッファ制御部５００（リード制御部５２０）によるリングバッファに対するデータ読み出し制御処理について、同処理のフローチャートを示す図１１を用いて説明する。なお、リード制御部５２０はハードウェア（回路）で構成されるので、必ずしも図１１に示した各ステップは逐次実行されるわけではなく、複数のステップを同時に実行する場合がある。
【０１１５】
なお、ステップＳ５００１〜Ｓ５００３，Ｓ５００７〜Ｓ５０１４はそれぞれ、図５のステップＳ２００１〜Ｓ２０１１と同様であるため、これらのステップに係る説明は省略する。すなわち、図１１のフローチャートは、図５のフローチャートにおけるステップＳ２００３とステップＳ２００４との間に、ステップＳ５００４〜Ｓ５００６を挿入したものとなっている。
【０１１６】
＜ステップＳ５００４＞
リード制御部５２０は、許可設定部５０４に保持されている情報を参照し、リード一時停止機能が許可されているか否かを判断する。この判断の結果、許可されている場合には、処理はステップＳ５００５に進み、許可されていない場合には、処理はステップＳ５００７に進む。
【０１１７】
＜ステップＳ５００５＞
リード制御部５２０は、第２のメモリ領域のサイズが０よりも大きく且つリードポインタが第１のメモリ領域の先頭を指しているか否かを判断するために、ＳＺ０＞０且つリードポインタの値がＳＺ０、という条件が満たされているか否かを判断する。この判断の結果、この条件が満たされている場合には、処理はステップＳ５００６に進み、この条件が満たされていない場合には、処理はステップＳ５００７に進む。
【０１１８】
＜ステップＳ５００６＞
リード制御部５２０は、ライト制御部５１０からのｗｒｉｔｅ  ｅｎｄ信号がアサートされているか否か、データ数カウンタ５２３のカウンタの値がＳＺ１よりも大きいか否か、を判断する。
【０１１９】
この判断の結果、「ライト制御部５１０からのｗｒｉｔｅ  ｅｎｄ信号がアサートされている、若しくはデータ数カウンタ５２３のカウンタの値がＳＺ１よりも大きいか」という条件が満たされている場合には、処理はステップＳ５００７に進み、この条件が満たされていない場合には、処理はステップＳ５００６で待機する。
【０１２０】
次に、ＣＰＵ１０１によるリングバッファ制御部５００の制御処理について、同処理のフローチャートを示す図１２を用いて説明する。ＣＰＵ１０１は、ＲＯＭ１０４に格納されているコンピュータプログラムやデータを用いて処理を実行することで、図１２に示した各ステップにおける処理を実行する。図１２のフローチャートに従った処理は、リングバッファ制御部５００によるデータ転送が必要になった時点で開始される。
【０１２１】
なお、ステップＳ６００１〜Ｓ６００２，Ｓ６００９〜Ｓ６０１０はそれぞれ、図６のステップＳ３００１〜Ｓ３００４と同様であるため、これらのステップに係る説明は省略する。すなわち、図１２のフローチャートは、図６のステップＳ３００２とステップＳ３００３との間に、ステップＳ６００３〜Ｓ６００８を挿入したものとなっている。
【０１２２】
＜ステップＳ６００３＞
ＣＰＵ１０１は、リングバッファ制御部５００の入力側に接続される機能部が、データの流れを停止することが許されている機能部であるのか否かを判断する。リングバッファ制御部５００に接続される機能部はハードウェア構成で決まっているので、その機能部がデータの流れを停止することが許されている機能部であるか否かも決まっている。もちろん、ユーザが操作部１０３を操作して、それぞれのリングバッファ制御部５００について、該リングバッファ制御部５００の入力側に接続される機能部が、データの流れを停止することが許されている機能部であるのか否かを示す情報を入力するようにしても構わない。
【０１２３】
何れにせよ、ＣＰＵ１０１は、リングバッファ制御部５００ごとに、該リングバッファ制御部５００の入力側がデータの流れを停止することが許されている機能部であるのか否かを判断する。然るにこのような判断が可能であれば、如何なる構成でもってこの判断を行っても構わない。
【０１２４】
この判断の結果、リングバッファ制御部５００の入力側に接続される機能部が、データの流れを停止することが許されている機能部である場合には、処理はステップＳ６００４に進み、リングバッファ制御部５００の入力側に接続される機能部が、データの流れを停止することが許されている機能部ではない場合には、処理はステップＳ６００５に進む。
【０１２５】
＜ステップＳ６００４＞
ＣＰＵ１０１は、システムバス１２０を介して許可設定部５０３にアクセスし、該許可設定部５０３に、ライト一時停止機能を許可する旨を示す情報を登録する。
【０１２６】
＜ステップＳ６００５＞
ＣＰＵ１０１は、システムバス１２０を介して許可設定部５０３にアクセスし、該許可設定部５０３に、ライト一時停止機能を許可しない（禁止する）旨を示す情報を登録する。
【０１２７】
＜ステップＳ６００６＞
ＣＰＵ１０１は、リングバッファ制御部５００の出力側に接続される機能部が、データの流れを停止することが許されている機能部であるのか否かを判断する。リングバッファ制御部５００に接続される機能部はハードウェア構成で決まっているので、その機能部がデータの流れを停止することが許されている機能部であるか否かも決まっている。もちろん、ユーザが操作部１０３を操作して、それぞれのリングバッファ制御部５００について、該リングバッファ制御部５００の出力側に接続される機能部が、データの流れを停止することが許されている機能部であるのか否かを示す情報を入力するようにしても構わない。
【０１２８】
何れにせよ、ＣＰＵ１０１は、リングバッファ制御部５００ごとに、該リングバッファ制御部５００の出力側がデータの流れを停止することが許されている機能部であるのか否かを判断する。然るにこのような判断が可能であれば、如何なる構成でもってこの判断を行っても構わない。
【０１２９】
この判断の結果、リングバッファ制御部５００の出力側に接続される機能部が、データの流れを停止することが許されている機能部である場合には、処理はステップＳ６００７に進み、リングバッファ制御部５００の出力側に接続される機能部が、データの流れを停止することが許されている機能部ではない場合には、処理はステップＳ６００８に進む。
【０１３０】
＜ステップＳ６００７＞
ＣＰＵ１０１は、システムバス１２０を介して許可設定部５０４にアクセスし、該許可設定部５０４に、リード一時停止機能を許可する旨を示す情報を登録する。
【０１３１】
＜ステップＳ６００８＞
ＣＰＵ１０１は、システムバス１２０を介して許可設定部５０４にアクセスし、該許可設定部５０４に、リード一時停止機能を許可しない（禁止する）旨を示す情報を登録する。
【０１３２】
このように、本実施形態によれば、バッファメモリ１１６におけるメモリ領域とシステムメモリ１１１におけるメモリ領域とを用いて一つのリングバッファ領域を構成し、リングバッファを用いたデータ転送が可能となるだけでなく、システムメモリ１１１に対するライトアクセスとリードアクセスとを排他的に行うことができる。これにより、システムメモリ１１１に対するアクセスが集中することを防ぐことができる。
【０１３３】
［第３の実施形態］
以下では、第１の実施形態や第２の実施形態との差分について重点的に説明し、以下で特に触れない限りは、第１の実施形態や第２の実施形態と同様であるものとして説明する。
【０１３４】
本実施形態では、バッファメモリ１１６とシステムメモリ１１１とを用いて複数個のリングバッファを構成する。以下では、バッファメモリ１１６とシステムメモリ１１１とを用いて、図１３に示す如く、３つのリングバッファ（リングバッファ制御部５００（１）用（メモリ制御装置用）のリングバッファ、リングバッファ制御部５００（２）用のリングバッファ、リングバッファ制御部５００（３）用のリングバッファ）を構成する。３個のリングバッファの何れも領域サイズはＳＺ００であるものとする。
【０１３５】
バッファメモリ１１６においてアドレスＳＡ００を先頭アドレスとし且つ領域サイズＳＺ００を有する領域（ＲｅｇｉｏｎＡ）をリングバッファ１として用いる。リングバッファ１は、リングバッファ制御部５００（１）が使用するリングバッファであるものとする。
【０１３６】
また、バッファメモリ１１６においてアドレスＳＡ０１を先頭アドレスとし且つ領域サイズＳＺ０１を有する領域（ＲｅｇｉｏｎＢ）と、システムメモリ１１１においてアドレスＳＡ１０を先頭アドレスとし且つ領域サイズＳＺ１０を有する領域と、を用いてリングバッファ２を構成する。ここで、ＳＺ０１＋ＳＺ１０＝ＳＺ００、すなわち、リングバッファ１とリングバッファ２とは同じ領域サイズを有するものとする。リングバッファ２は、リングバッファ制御部５００（２）が使用するリングバッファであるものとする。
【０１３７】
また、システムメモリ１１１においてアドレスＳＡ１１を先頭アドレスとし且つ領域サイズＳＺ００を有する領域をリングバッファ３として用いる。リングバッファ３は、リングバッファ制御部５００（３）が使用するリングバッファであるものとする。
【０１３８】
然るに、リングバッファ制御部５００（１）〜（３）のそれぞれに、このようなリングバッファ１〜３を割り当てる場合、リングバッファ制御部５００（１）〜（３）のそれぞれにおけるバッファメモリ領域設定部５０１及びシステムメモリ領域設定部５０２のそれぞれは次のような情報を保持している。
【０１３９】
リングバッファ制御部５００（１）のバッファメモリ領域設定部５０１は、バッファメモリ１１６においてリングバッファ１の一部として利用するメモリ領域（ＲｅｇｉｏｎＡ）の先頭アドレスＳＡ００と、該メモリ領域のサイズＳＺ００と、を保持している。また、リングバッファ制御部５００（１）のシステムメモリ領域設定部５０２は、システムメモリ１１１においてリングバッファ１の一部として利用するメモリ領域の先頭アドレス０と、該メモリ領域のサイズ０と、を保持している。
【０１４０】
リングバッファ制御部５００（２）のバッファメモリ領域設定部５０１は、バッファメモリ１１６においてリングバッファ２の一部として利用するメモリ領域（ＲｅｇｉｏｎＢ）の先頭アドレスＳＡ０１と、該メモリ領域のサイズＳＺ０１と、を保持している。また、リングバッファ制御部５００（２）のシステムメモリ領域設定部５０２は、システムメモリ１１１においてリングバッファ２の一部として利用するメモリ領域の先頭アドレスＳＡ１０と、該メモリ領域のサイズＳＺ１０と、を保持している。
【０１４１】
リングバッファ制御部５００（３）のバッファメモリ領域設定部５０１は、バッファメモリ１１６においてリングバッファ３の一部として利用するメモリ領域の先頭アドレス０と、該メモリ領域のサイズ０と、を保持している。また、リングバッファ制御部５００（３）のシステムメモリ領域設定部５０２は、システムメモリ１１１においてリングバッファ３の一部として利用するメモリ領域の先頭アドレスＳＡ１１と、該メモリ領域のサイズＳＺ００と、を保持している。
【０１４２】
なお、バッファメモリ領域設定部５０１に領域サイズとして０が登録されている場合、バッファメモリ１１６にはアクセスしない。例えば、リングバッファ制御部５００（１）のバッファメモリ領域設定部５０１に領域サイズとして０が登録されている場合、リングバッファ制御部５００（１）はバッファメモリ１１６にはアクセスしない。
【０１４３】
同様に、システムメモリ領域設定部５０２に領域サイズとして０が登録されている場合、システムメモリ１１１にはアクセスしない。例えば、リングバッファ制御部５００（１）のシステムメモリ領域設定部５０２に領域サイズとして０が登録されている場合、リングバッファ制御部５００（１）はシステムメモリ１１１にはアクセスしない。
【０１４４】
そして、第１の実施形態に、このようなリングバッファ制御部５００（１）〜（３）を適用した場合、リングバッファ制御部５００（１）〜（３）は何れも、図４のフローチャートに従って、リングバッファに対するデータ書き込み制御処理を行う。
【０１４５】
リングバッファ制御部５００（３）の場合、バッファメモリ領域設定部５０１には領域サイズとして０が登録されているので、図４のフローチャートの場合、ＳＺ０に相当するものは０であるから、ステップＳ１００５における判断処理の結果、処理は必ずステップＳ１００７に進むことになる。
【０１４６】
リングバッファ制御部５００（１）の場合、システムメモリ領域設定部５０２には領域サイズとして０が登録されているので、図４のフローチャートの場合、ＳＺ１に相当するものは０であるから、ステップＳ１００９でライトポインタがＳＺ０に達すると、処理はステップＳ１０１０に移行し、ライトポインタは０に初期化される。すなわち、ライトポインタが取り得る値は０〜（ＳＺ０−１）の範囲内の値であるから、ステップＳ１００５における判断処理の結果、処理は必ずステップＳ１００６に進むことになる。
【０１４７】
また、第２の実施形態に、このようなリングバッファ制御部５００（１）〜（３）を適用した場合、リングバッファ制御部５００（１）〜（３）は何れも、図１０のフローチャートに従って、リングバッファに対するデータ書き込み制御処理を行う。
【０１４８】
リングバッファ制御部５００（３）の場合、バッファメモリ領域設定部５０１には領域サイズとして０が登録されているので、図１０のフローチャートの場合、ＳＺ０に相当するものは０であるから、ステップＳ４００６の次には必ずステップＳ４００８に進み、ステップＳ４００８の次には必ずステップＳ４０１０に進むことになる。
【０１４９】
リングバッファ制御部５００（１）の場合、システムメモリ領域設定部５０２には領域サイズとして０が登録されているので、図１０のフローチャートの場合、ＳＺ１に相当するものは０であるから、ステップＳ４０１２でライトポインタがＳＺ０に達すると、処理はステップＳ４０１３に移行し、ライトポインタは０に初期化される。すなわち、ライトポインタが取り得る値は０〜（ＳＺ０−１）の範囲内の値であるから、ステップＳ４００６の次には必ずステップＳ４００８に進み、ステップＳ４００８の次には必ずステップＳ４００９に進むことになる。
【０１５０】
また、第１の実施形態に、このようなリングバッファ制御部５００（１）〜（３）を適用した場合、リングバッファ制御部５００（１）〜（３）は何れも、図５のフローチャートに従って、リングバッファに対するデータ読み出し制御処理を行う。
【０１５１】
リングバッファ制御部５００（３）の場合、バッファメモリ領域設定部５０１には領域サイズとして０が登録されているので、図５のフローチャートの場合、ＳＺ０に相当するものは０であるから、ステップＳ２００４における判断処理の結果、処理は必ずステップＳ２００６に進むことになる。
【０１５２】
リングバッファ制御部５００（１）の場合、システムメモリ領域設定部５０２には領域サイズとして０が登録されているので、図５のフローチャートの場合、ＳＺ１に相当するものは０であるから、ステップＳ２００９でリードポインタがＳＺ０に達すると、処理はステップＳ２０１０に移行し、リードポインタは０に初期化される。すなわち、リードポインタが取り得る値は０〜（ＳＺ０−１）の範囲内の値であるから、ステップＳ２００４における判断処理の結果、処理は必ずステップＳ２００５に進むことになる。
【０１５３】
また、第２の実施形態に、このようなリングバッファ制御部５００（１）〜（３）を適用した場合、リングバッファ制御部５００（１）〜（３）は何れも、図１１のフローチャートに従って、リングバッファに対するデータ読み出し制御処理を行う。
【０１５４】
リングバッファ制御部５００（３）の場合、バッファメモリ領域設定部５０１には領域サイズとして０が登録されているので、図１１のフローチャートの場合、ＳＺ０に相当するものは０であるから、ステップＳ５００５の次には必ずステップＳ５００７に進み、ステップＳ５００７の次には必ずステップＳ５００９に進むことになる。
【０１５５】
リングバッファ制御部５００（１）の場合、システムメモリ領域設定部５０２には領域サイズとして０が登録されているので、図１１のフローチャートの場合、ＳＺ１に相当するものは０であるから、ステップＳ５０１２でリードポインタがＳＺ０に達すると、処理はステップＳ５０１３に移行し、リードポインタは０に初期化される。すなわち、リードポインタが取り得る値は０〜（ＳＺ０−１）の範囲内の値であるから、ステップＳ５００５の次には必ずステップＳ５００７に進み、ステップＳ５００７の次には必ずステップＳ５００８に進むことになる。
【０１５６】
次に、画像処理装置に電源が投入された場合にＣＰＵ１０１が行う、リングバッファ制御部５００の初期化処理について、同処理のフローチャートを示す図１４を用いて説明する。ＣＰＵ１０１は、ＲＯＭ１０４に格納されているコンピュータプログラムやデータを用いて処理を実行することで、図１４に示した各ステップにおける処理を実行する。
【０１５７】
＜ステップＳ７００１＞
ＣＰＵ１０１は、システムメモリ１１１にバッファメモリ管理テーブルを作成する。バッファメモリ管理テーブルの構成例を図１７に示す。バッファメモリ管理テーブルは、ＣＰＵ１０１がバッファメモリ１１６の使用状況を管理するためのものである。図１７の例では、バッファメモリ管理テーブルは、「バッファメモリ１１６のＲｅｇｉｏｎＡはリングバッファ制御部５００（１）により使用され、ＲｅｇｉｏｎＢはどのリングバッファ制御部５００も使用していない（未使用）」という状況を示している。
【０１５８】
＜ステップＳ７００２＞
ＣＰＵ１０１は、ステップＳ７００１で作成したバッファメモリ管理テーブルのＲｅｇｉｏｎＡの使用状況を未使用に初期化する。
【０１５９】
＜ステップＳ７００３＞
ＣＰＵ１０１は、ステップＳ７００１で作成したバッファメモリ管理テーブルのＲｅｇｉｏｎＢの使用状況を未使用に初期化する。ステップＳ７００２及びステップＳ７００３の処理により、バッファメモリ管理テーブルにおけるＲｅｇｉｏｎＡ及びＲｅｇｉｏｎＢの何れの使用状況も未使用に初期化される。
【０１６０】
次に、ＣＰＵ１０１によるリングバッファ制御部５００の制御処理について、同処理のフローチャートを示す図１５（Ａ）、（Ｂ）を用いて説明する。図１５（Ａ）、（Ｂ）のフローチャートに従った処理は、リングバッファ制御部５００（１）〜（３）のそれぞれに対して行われる。ＣＰＵ１０１は、ＲＯＭ１０４に格納されているコンピュータプログラムやデータを用いて処理を実行することで、図１５（Ａ）、（Ｂ）に示した各ステップにおける処理を実行する。図１５（Ａ）、（Ｂ）のフローチャートに従った処理は、リングバッファ制御部５００によるデータ転送が必要になった時点で開始される。なお、ステップＳ８００１，Ｓ８００３，Ｓ８００４はそれぞれ、図６のステップＳ３００１，Ｓ３００３，Ｓ３００４と同様であるため、これらのステップに係る説明は省略する。
【０１６１】
＜ステップＳ８００２＞
ＣＰＵ１０１はシステムバス１２０を介して、それぞれのリングバッファ制御部５００（ここではリングバッファ制御部５００（１）〜（３））内のバッファメモリ領域設定部５０１に対し、バッファメモリ１１６においてリングバッファ１〜３に使用するメモリ領域の先頭アドレス及び領域サイズを設定する。また、ＣＰＵ１０１はシステムバス１２０を介して、それぞれのリングバッファ制御部５００（ここではリングバッファ制御部５００（１）〜（３））内のシステムメモリ領域設定部５０２に対し、システムメモリ１１１においてリングバッファ１〜３に使用するメモリ領域の先頭アドレス及び領域サイズを設定する。ステップＳ８００２における処理の詳細について、図１５（Ｂ）のフローチャートを用いて説明する。
【０１６２】
＜ステップＳ８１０１＞
ＣＰＵ１０１は、システムメモリ１１１において作成したバッファメモリ管理テーブルを参照する。
【０１６３】
＜ステップＳ８１０２＞
ＣＰＵ１０１は、バッファメモリ管理テーブルにおいてＲｅｇｉｏｎＡの使用状況が未使用であるか否かを判断する。この判断の結果、ＲｅｇｉｏｎＡの使用状況が未使用であれば、処理はステップＳ８１０３に進み、未使用でなければ、処理はステップＳ８１０５に進む。
【０１６４】
＜ステップＳ８１０３＞
ＣＰＵ１０１は、システムバス１２０を介してリングバッファ制御部５００のバッファメモリ領域設定部５０１及びシステムメモリ領域設定部５０２にアクセスし、該バッファメモリ領域設定部５０１に、バッファメモリ１１６においてリングバッファに使用するメモリ領域の先頭アドレスとしてＳＡ００、該領域の領域サイズとしてＳＺ００を設定すると共に、該リングバッファ制御部５００のシステムメモリ領域設定部５０２に、システムメモリ１１１においてリングバッファに使用するメモリ領域の先頭アドレスとして０、該領域の領域サイズとして０を設定する。
【０１６５】
＜ステップＳ８１０４＞
ＣＰＵ１０１は、バッファメモリ管理テーブルにおけるＲｅｇｉｏｎＡの使用状況として、リングバッファ制御部５００の識別情報（ここでは一例としてＩＤ）を登録する。
【０１６６】
＜ステップＳ８１０５＞
ＣＰＵ１０１は、バッファメモリ管理テーブルにおいてＲｅｇｉｏｎＢの使用状況が未使用であるか否かを判断する。この判断の結果、ＲｅｇｉｏｎＢの使用状況が未使用であれば、処理はステップＳ８１０６に進み、未使用でなければ、処理はステップＳ８１０８に進む。
【０１６７】
＜ステップＳ８１０６＞
ＣＰＵ１０１は、システムバス１２０を介してリングバッファ制御部５００のバッファメモリ領域設定部５０１及びシステムメモリ領域設定部５０２にアクセスし、該バッファメモリ領域設定部５０１に、バッファメモリ１１６においてリングバッファに使用するメモリ領域の先頭アドレスとしてＳＡ０１、該領域の領域サイズとしてＳＺ０１を設定すると共に、該リングバッファ制御部５００のシステムメモリ領域設定部５０２に、システムメモリ１１１においてリングバッファに使用するメモリ領域の先頭アドレスとしてＳＡ１０、該領域の領域サイズとしてＳＺ１０を設定する。
【０１６８】
＜ステップＳ８１０７＞
ＣＰＵ１０１は、バッファメモリ管理テーブルにおけるＲｅｇｉｏｎＢの使用状況として、リングバッファ制御部５００の識別情報（ここでは一例としてＩＤ）を登録する。
【０１６９】
＜ステップＳ８１０８＞
ＣＰＵ１０１は、システムバス１２０を介してリングバッファ制御部５００のバッファメモリ領域設定部５０１及びシステムメモリ領域設定部５０２にアクセスし、該バッファメモリ領域設定部５０１に、バッファメモリ１１６においてリングバッファに使用するメモリ領域の先頭アドレスとして０、該領域の領域サイズとして０を設定すると共に、該リングバッファ制御部５００のシステムメモリ領域設定部５０２に、システムメモリ１１１においてリングバッファに使用するメモリ領域の先頭アドレスとしてＳＡ１１、該領域の領域サイズとしてＳＺ００を設定する。
【０１７０】
図１５のフローチャートに従った処理では、システムメモリ１１１は大容量であり、常にＣＰＵ１０１はシステムメモリ１１１上に所望のサイズの領域が確保できるとしている。なお、ＣＰＵ１０１が画像処理装置１００を初期化する際に、あらかじめシステムメモリ１１１上に、領域サイズＳＺ１０（先頭アドレスＳＡ１０）の領域と、領域サイズＳＺ００（先頭アドレスＳＡ１１）の領域と、を確保しておいてもよい。
【０１７１】
次に、リングバッファによるデータ転送終了時にＣＰＵ１０１が行う制御処理について、図１６のフローチャートを用いて説明する。ＣＰＵ１０１は、ＲＯＭ１０４に格納されているコンピュータプログラムやデータを用いて処理を実行することで、図１６に示した各ステップにおける処理を実行する。
【０１７２】
＜ステップＳ９００１＞
ＣＰＵ１０１は、リングバッファによるデータ転送が終了したリングバッファ制御部５００のＩＤを取得する。ＣＰＵ１０１は、リングバッファ制御部５００の出力側に接続される機能部のレジスタに存在する処理完了フラグを、システムバス１２０を介して読み出し、そのフラグの値によりデータ転送終了を判断する。または、ＣＰＵ１０１は、リングバッファ制御部５００の出力側に接続される機能部の処理完了割り込みが発生した時点で、データ転送が終了したと判断する。ＣＰＵ１０１は、割り込み要因から、どのリングバッファ制御部５００の割り込みかを知ることができる。
【０１７３】
＜ステップＳ９００２＞
ＣＰＵ１０１は、バッファメモリ管理テーブルを参照する。
【０１７４】
＜ステップＳ９００３＞
ＣＰＵ１０１は、バッファメモリ管理テーブルにおいてＲｅｇｉｏｎＡの使用状況として登録されているＩＤと、ステップＳ９００１で取得したＩＤと、が同じであるか否かを判断する。この判断の結果、同じである場合には、処理はステップＳ９００４に進み、同じではない場合には、処理はステップＳ９００５に進む。
【０１７５】
＜ステップＳ９００４＞
ＣＰＵ１０１は、バッファメモリ管理テーブルのＲｅｇｉｏｎＡの使用状況を未使用に初期化する。
【０１７６】
＜ステップＳ９００５＞
ＣＰＵ１０１は、バッファメモリ管理テーブルにおいてＲｅｇｉｏｎＢの使用状況として登録されているＩＤと、ステップＳ９００１で取得したＩＤと、が同じであるか否かを判断する。この判断の結果、同じである場合には、処理はステップＳ９００６に進み、同じではない場合には、図１６のフローチャートに従った処理は完了する。
【０１７７】
＜ステップＳ９００６＞
ＣＰＵ１０１は、バッファメモリ管理テーブルのＲｅｇｉｏｎＢの使用状況を未使用に初期化する。
【０１７８】
次に、図１４〜図１６のフローチャートに従った処理を行うことでリングバッファ制御部５００（１）〜（３）のそれぞれに対して図１３に示すようなリングバッファ１〜３を構成し、リングバッファ制御部５００（１）がリングバッファによるデータ転送が終了するまでの期間におけるバッファメモリ管理テーブルの変化について、図１８を用いて説明する。
【０１７９】
先ず、図１４のフローチャートに従った処理を実行した後のバッファメモリ管理テーブルでは、ＲｅｇｉｏｎＡの使用状況及びＲｅｇｉｏｎＢの使用状況は何れも未使用に初期化されているため、バッファメモリ管理テーブルには図１８（Ａ）に示す如く、ＲｅｇｉｏｎＡの使用状況及びＲｅｇｉｏｎＢの使用状況として未使用を表す値「０」が登録されている。
【０１８０】
次に、リングバッファ制御部５００（１）により、リングバッファによるデータ転送が必要になった場合、ＣＰＵ１０１は、リングバッファ制御部５００（１）について、図１５（Ａ）、（Ｂ）に示したフローチャートに従った処理を実行する。この場合、ステップＳ８１０２では、ＲｅｇｉｏｎＡの使用状況及びＲｅｇｉｏｎＢの使用状況の何れも未使用であるため、処理はステップＳ８１０３を介してステップＳ８１０４に進み、図１８（Ｂ）に示す如く、ＲｅｇｉｏｎＡの使用状況として、リングバッファ制御部５００（１）のＩＤ（図１８では「１」）が登録される。
【０１８１】
次に、リングバッファ制御部５００（２）により、リングバッファによるデータ転送が必要になった場合、ＣＰＵ１０１は、リングバッファ制御部５００（２）について、図１５（Ａ）、（Ｂ）に示したフローチャートに従った処理を実行する。この場合、ステップＳ８１０２では、ＲｅｇｉｏｎＡの使用状況は未使用ではないので、処理はステップＳ８１０５に進み、ＲｅｇｉｏｎＢの使用状況は未使用であるため、処理はステップＳ８１０６を介してステップＳ８１０７に進み、図１８（Ｃ）に示す如く、ＲｅｇｉｏｎＢの使用状況として、リングバッファ制御部５００（２）のＩＤ（図１８では「２」）が登録される。
【０１８２】
更に、リングバッファ制御部５００（３）により、リングバッファによるデータ転送が必要になった場合、ＣＰＵ１０１は、リングバッファ制御部５００（３）について、図１５（Ａ）、（Ｂ）に示したフローチャートに従った処理を実行する。この場合、ステップＳ８１０２では、ＲｅｇｉｏｎＡの使用状況及びＲｅｇｉｏｎＢの使用状況の何れも未使用ではないので、処理はステップＳ８１０５を介してステップＳ８１０８に進む。このとき、バッファメモリ管理テーブルには何等登録処理が行われないので、バッファメモリ管理テーブルは図１８（Ｃ）のまま変化しない。
【０１８３】
そしてリングバッファ制御部５００（１）の、リングバッファによるデータ転送が終了した場合、ＣＰＵ１０１は図１６のフローチャートに従った処理を実行する。この場合、ステップＳ９００１ではリングバッファ制御部５００（１）のＩＤを取得し、ステップＳ９００３では、リングバッファ制御部５００（１）のＩＤはＲｅｇｉｏｎＡの使用状況としてのＩＤと一致するので、処理はステップＳ９００４に進み、図１８（Ｄ）に示す如く、バッファメモリ管理テーブルのＲｅｇｉｏｎＡの使用状況は未使用に初期化される。
【０１８４】
その後、リングバッファ制御部５００（２）とリングバッファ制御部５００（３）の、リングバッファによるデータ転送が終了した場合も同様に、ＣＰＵ１０１は図１６のフローチャートに従った処理を実行し、その結果、ＲｅｇｉｏｎＢの使用状況も未使用に初期化され、結果としてバッファメモリ管理テーブルは、図１８（Ａ）に示した状態となる。  このように、本実施形態によれば、同時にデータ転送を行うリングバッファ制御部５００の数が少ない場合はバッファメモリ１１６のみを使用し、同時にデータ転送を行うリングバッファ制御部５００の数が増えた場合であっても、必要最小限のシステムメモリ１１１の領域のみを使用する。これにより、バッファメモリ１１６の記憶容量を抑えつつ、システムメモリ１１１の領域がリングバッファとして必要になる場合に、システムメモリ１１１のアクセスの増大を抑えることができる。
【０１８５】
また、第１〜３の実施形態のそれぞれにおいて説明した構成（処理）は、その一部若しくは全部を適宜組み合わせて使用しても構わない。もちろん、同等の処理を達成できるのであれば、第１〜３の実施形態で説明した構成（処理）は適宜変更しても構わない。
【０１８６】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【０１８７】
５００：リングバッファ制御部
【図１】
2016177633.tif 000003
【図２】
2016177633.tif 000004
【図３】
2016177633.tif 000005
【図４】
2016177633.tif 000006
【図５】
2016177633.tif 000007
【図６】
2016177633.tif 000008
【図７】
2016177633.tif 000009
【図８】
2016177633.tif 000010
【図９】
2016177633.tif 000011
【図１０】
2016177633.tif 000012
【図１１】
2016177633.tif 000013
【図１２】
2016177633.tif 000014
【図１３】
2016177633.tif 000015
【図１４】
2016177633.tif 000016
【図１５】
2016177633.tif 000017
【図１６】
2016177633.tif 000018
【図１７】
2016177633.tif 000019
【図１８】
2016177633.tif 000020