(57)【特許請求の範囲】
【請求項１】
メモリバス及び前記メモリバスに接続されたメモリを制御するメモリ制御回路において、
前記メモリに転送するデータ及び前記メモリから転送されたデータの少なくとも一方を一時的に記憶しておく複数のバッファと、
前記複数のバッファのそれぞれに記憶されている前記データの数に対応するカウント値を持つ複数のカウンタと、
前記メモリバスを使用して、前記メモリと前記複数のバッファとの間でデータ転送を実行する複数のデータ転送回路と、
バスアービタとを備え、
前記バスアービタが、
シフトレジスタで構成された命令キューと、
前記複数のデータ転送回路のそれぞれと関連付けられた複数の状態のなかのいずれか又は命令キューと関連付けられた状態を現状態とし、一つのデータ転送回路に関連付けられた状態、又は、一つの命令キューと関連付けられた状態が終了すると、次のデータ転送回路又は次の命令キューに関連付けられた状態に遷移し、かつ、各状態が循環するように遷移するステートマシンとを内蔵し、
前記ステートマシンが持つ状態の１つを前記命令キューに関連付け、
前記複数のデータ転送回路の一部が前記ステートマシンが持つ状態に関連付けられ、前記複数のデータ転送回路の残りが前記命令キューに関連付けられ、
（１）  前記複数のデータ転送回路のそれぞれは、各データ転送回路のバッファに記憶されているデータの数に対する前記複数のカウンタのカウント値が所定カウント値以上の場合に、前記データ転送の開始を要求するリクエスト信号を前記バスアービタに対して送信し、
（２）  前記ステートマシンの現状態に関連付けられたデータ転送回路がリクエスト信号を送信していれば、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送回路に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、
（３）  前記複数のデータ転送回路のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数に基づいて実行中の前記データ転送を終了し、
（４）  前記ステートマシンの現状態に関連付けられたデータ転送回路が前記リクエスト信号を送信していない場合、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送回路に前記アクノリッジ信号を送信せず、前記ステートマシンは次状態に遷移し、
（５）  前記ステートマシンが前記命令キューに関連付けられた状態に遷移した場合にのみ、前記命令キューに登録されているデータ転送命令の一部又は全部を前記命令キューの先頭から順に実行した後に前記ステートマシンは次状態に遷移し、
（６）  前記処理（１）から（５）までを繰り返す
ことを特徴とするメモリ制御回路。
【請求項２】
前記処理（５）において、
（５−１）  前記バスアービタが前記命令キューに関連づけられたデータ転送回路のいずれかから前記リクエスト信号を受信した場合には、前記リクエスト信号を送信したデータ転送回路に関連付けられたデータ転送命令を命令キューの最後尾に登録し、
（５−２）  前記バスアービタは、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、
（５−３）  前記命令キューに関連づけられたデータ転送回路のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数に基づいて実行中の前記データ転送を終了し、
（５−４）  前記データ転送回路がデータ転送を終了した場合には、前記データ転送回路に関連付けられたデータ転送命令を命令キューから削除するとともに、後段の命令キューの内容を１段前にシフトし、
（５−５）  前記処理（５−１）から（５−４）までを１回以上実行する
ことを特徴とする請求項１に記載のメモリ制御回路。
【請求項３】
前記処理（５−１）において前記データ転送回路がリクエスト信号を送信している場合であっても、前記リクエスト信号を送信しているデータ転送回路以外の特定の１つ以上のデータ転送回路がリクエスト信号を送信している場合、前記処理（５−２）を実行せず、前記リクエスト信号を送信しているデータ転送回路のデータ転送命令を前記命令キューに登録しないことを特徴とする請求項２に記載のメモリ制御回路。
【請求項４】
前記データ転送命令が命令キューの先頭に登録されている場合であっても、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路以外の特定の１つ以上のデータ転送回路がリクエスト信号を送信している場合、前記処理（５−３）を実行せず、前記バスアービタは前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路に対してアクノリッジ信号を送信しないことを特徴とする請求項２又は３に記載のメモリ制御回路。
【請求項５】
前記ステートマシンの現状態に関連付けられた命令キューにデータ転送命令が登録されている場合であっても、前記ステートマシンの現状態以外の状態に関連付けられた特定の１つ以上のデータ転送回路がリクエスト信号を送信している場合には、前記ステートマシンは次状態に遷移し、前記バスアービタは前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路にアクノリッジ信号を送信しないことを特徴とする請求項１から４までのいずれかに記載のメモリ制御回路。
【請求項６】
前記データ転送回路がデータ転送を実行している途中であっても、前記データ転送を実行しているデータ転送回路以外の特定の１つ以上のデータ転送回路がリクエスト信号の送信を開始した場合には、前記バスアービタは前記データ転送を実行しているデータ転送回路に対して、実行中のデータ転送を終了させるように命令することを特徴とする請求項１から５までのいずれかに記載のメモリ制御回路。
【請求項７】
前記複数のカウンタは、前記複数のバッファのそれぞれに対する読み出し命令、前記バッファに対する書き込み命令、前記メモリに対する読み出し命令、前記メモリに対する書き込み命令のいずれかを組み合わせて使用することによって、前記複数のバッファのそれぞれに記憶されているデータの数に対応するカウント値を保持することを特徴とする請求項１から６までのいずれかに記載のメモリ制御回路。
【請求項８】
前記複数のカウンタのそれぞれは、前記複数のバッファに対する読み出し命令あるいは書き込み命令が発行されるたびに反転するパルスを発生する反転パルス生成回路と、前記反転パルス生成回路が発生した前記パルスのエッジを検出する微分回路とを備え、
前記複数のカウンタのそれぞれは、前記微分回路の検出結果、前記メモリに対する読み出し命令、前記メモリに対する書き込み命令のいずれかを組み合わせて使用することによって、前記複数のバッファのそれぞれに記憶されているデータの数に対応するカウント値を保持することを特徴とする請求項１から７までのいずれかに記載のメモリ制御回路。
【請求項９】
前記複数のデータ転送回路のそれぞれは、前記複数のカウンタのカウント値が設定値以上になったとき及び設定値以下になったときのいずれかのときにリクエスト信号を発生することを特徴とする請求項１から８までのいずれかに記載のメモリ制御回路。
【請求項１０】
メモリバスを使用して、メモリと複数のバッファとの間でデータ転送を実行する複数のデータ転送手段と、
前記複数のバッファのそれぞれに記憶されているデータの数に対応するカウント値を持つ複数のカウンタと、
バスアービタと
を用いて前記データ転送手段によるメモリバスの使用権を調停するメモリバスの調停方法であって、
前記バスアービタが、
シフトレジスタで構成された命令キューと、
前記複数のデータ転送手段のそれぞれと関連付けられた複数の状態のなかのいずれか又は命令キューと関連付けられた状態を現状態とし、一つのデータ転送手段に関連付けられた状態、又は、一つの命令キューと関連付けられた状態が終了すると、次のデータ転送手段又は次の命令キューに関連付けられた状態に遷移し、かつ、各状態が循環するように遷移するステートマシンとを内蔵し、
前記ステートマシンが持つ状態の１つを前記命令キューに関連付け、
前記複数のデータ転送手段の一部が前記ステートマシンが持つ状態に関連付けられ、前記複数のデータ転送手段の残りが前記命令キューに関連付けられ、
（１）  前記複数のデータ転送手段のそれぞれは、各データ転送手段のバッファに記憶されているデータの数に対する前記複数のカウンタのカウント値が所定カウント値以上の場合に、前記データ転送の開始を要求するリクエスト信号を前記バスアービタに対して送信し、
（２）  前記ステートマシンの現状態に関連付けられたデータ転送手段がリクエスト信号を送信していれば、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送手段に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、
（３）  前記複数のデータ転送手段のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数に基づいて実行中の前記データ転送を終了し、
（４）  前記ステートマシンの現状態に関連付けられたデータ転送手段が前記リクエスト信号を送信していない場合、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送手段に前記アクノリッジ信号を送信せず、前記ステートマシンは次状態に遷移し、
（５）  前記ステートマシンが前記命令キューに関連付けられた状態に遷移した場合にのみ、前記命令キューに登録されているデータ転送命令の一部又は全部を前記命令キューの先頭から順に実行した後に前記ステートマシンは次状態に遷移し、
（６）  前記処理（１）から（５）までを繰り返す
ことを特徴とするメモリバスの調停方法。
【請求項１１】
前記処理（５）において、
（５−１）  前記バスアービタが前記命令キューに関連づけられたデータ転送手段のいずれかから前記リクエスト信号を受信した場合には、前記リクエスト信号を送信したデータ転送手段に関連付けられたデータ転送命令を命令キューの最後尾に登録し、
（５−２）  前記バスアービタは、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、
（５−３）  前記命令キューに関連づけられたデータ転送手段のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数に基づいて実行中の前記データ転送を終了し、
（５−４）  前記データ転送手段がデータ転送を終了した場合には、前記データ転送手段に関連付けられたデータ転送命令を命令キューから削除するとともに、後段の命令キューの内容を１段前にシフトし、
（５−５）  前記処理（５−１）から（５−４）までを１回以上実行する
ことを特徴とする請求項１０に記載のメモリバスの調停方法。
【請求項１２】
前記処理（５−１）において前記データ転送手段がリクエスト信号を送信している場合であっても、前記リクエスト信号を送信しているデータ転送手段以外の特定の１つ以上のデータ転送手段がリクエスト信号を送信している場合、前記処理（５−２）を実行せず、前記リクエスト信号を送信しているデータ転送手段のデータ転送命令を前記命令キューに登録しないことを特徴とする請求項１１に記載のメモリバスの調停方法。
【請求項１３】
前記データ転送命令が命令キューの先頭に登録されている場合であっても、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段以外の特定の１つ以上のデータ転送手段がリクエスト信号を送信している場合、前記処理（５−３）を実行せず、前記バスアービタは前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段に対してアクノリッジ信号を送信しないことを特徴とする請求項１１又は１２に記載のメモリバスの調停方法。
【請求項１４】
前記ステートマシンの現状態に関連付けられた命令キューにデータ転送命令が登録されている場合であっても、前記ステートマシンの現状態以外の状態に関連付けられた特定の１つ以上のデータ転送手段がリクエスト信号を送信している場合には、前記ステートマシンは次状態に遷移し、前記バスアービタは前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段にアクノリッジ信号を送信しないことを特徴とする請求項１０から１３までのいずれかに記載のメモリバスの調停方法。
【請求項１５】
前記データ転送手段がデータ転送を実行している途中であっても、前記データ転送を実行しているデータ転送手段以外の特定の１つ以上のデータ転送手段がリクエスト信号の送信を開始した場合には、前記バスアービタは前記データ転送を実行しているデータ転送手段に対して、実行中のデータ転送を終了させるように命令することを特徴とする請求項１０から１４までのいずれかに記載のメモリバスの調停方法。
【請求項１６】
前記複数のカウンタは、前記複数のバッファのそれぞれに対する読み出し命令、前記バッファに対する書き込み命令、前記メモリに対する読み出し命令、前記メモリに対する書き込み命令のいずれかを組み合わせて使用することによって、前記複数のバッファのそれぞれに記憶されているデータの数に対応するカウント値を保持することを特徴とする請求項１０から１５までのいずれかに記載のメモリバスの調停方法。
【請求項１７】
前記複数のカウンタのそれぞれは、前記複数のバッファに対する読み出し命令あるいは書き込み命令が発行されるたびに反転するパルスを発生し、この発生した前記パルスのエッジを検出し、
前記複数のカウンタのそれぞれは、前記検出されたパルスのエッジ、前記メモリに対する読み出し命令、前記メモリに対する書き込み命令のいずれかを組み合わせて使用することによって、前記複数のバッファのそれぞれに記憶されているデータの数に対応するカウント値を保持することを特徴とする請求項１０から１６までのいずれかに記載のメモリバスの調停方法。
【請求項１８】
前記複数のデータ転送手段のそれぞれは、前記複数のカウンタのカウント値が設定値以上になったとき及び設定値以下になったときのいずれかのときにリクエスト信号を発生することを特徴とする請求項１０から１７までのいずれかに記載のメモリバスの調停方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、複数のデータ転送回路が使用権を要求するメモリバスの調停方法及びこの調停方法を使用してメモリバスに接続されたメモリを制御するメモリ制御回路に関わり、特に、動画像処理のようなリアルタイムで行われる処理に対応する必要があるデータ転送回路が複数接続されたメモリバスの調停方法及びこの調停方法を実施するメモリ制御回路に関するものである。
【０００２】
【従来の技術】
映像機器において、映像信号処理に用いる映像データを記憶するために、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）をコアとする、例えば、ＳＤＲＡＭ（Ｓｙｎｃｈｒｏｎｏｕｓ  ＤＲＡＭ）などのメモリデバイスを使用することがある。この種のメモリデバイスはデータの書き込み及び読み出しを同一のメモリバスで行うように構成されていることが多い。このようなメモリに対する書き込み要求と読み出し要求が同時に発生する場合には、これらの要求に応答して選択的に時分割でデータ転送を許可するためにメモリバスの調停機構が必要となる。また、書き込み及び読み出し動作を同時に実行することができるデュアルポート・メモリを使用する場合でも、一度に多数のデータ転送回路がメモリバスの使用権を要求する場合などには、やはりメモリバスの調停機構が必要となる。
【０００３】
複数のデータ転送回路がメモリバスの使用権を要求する場合におけるメモリバスの調停方法としては、例えば、特許第３０３３７４７号公報に示されている方法などがある。この従来の技術を用いて構成したメモリ制御回路の例を図１２に示す。
【０００４】
図において、６３は表示装置に表示すべきグラフィックスデータを生成するグラフィックスデータ生成回路、６４はグラフィックスデータ生成回路６３が生成したデータを記憶する第１のＳＤＲＡＭ、６５はグラフィックスデータ生成回路６３が生成したデータを記憶する第２のＳＤＲＡＭ、６６は第１のＳＤＲＡＭ６４に記憶されたデータを後述する第１の表示装置７１に転送する第１の表示コントローラ、６７は第２のＳＤＲＡＭ６５に記憶されたデータを後述する第２の表示装置７２に転送する第２の表示コントローラである。また、図において、６８はグラフィックスデータ生成回路６３、第１のＳＤＲＡＭ６４、第１の表示コントローラ６６がデータ、アドレス、コマンド等を送受信するために使用する第１のメモリバス、６９はグラフィックスデータ生成回路６３、第２のＳＤＲＡＭ６５、第２の表示コントローラ６７がデータ、アドレス、コマンド等を送受信するために使用する第２のメモリバスである。また、図において、７０はグラフィックスデータ生成回路６３、第１の表示コントローラ６６、第２の表示コントローラ６７が実行するデータ転送のタイミングを制御することによって第１のメモリバス６８及び第２のメモリバス６９の調停を行うバスアービタ、７１は第１の表示コントローラ６６から転送されたデータを表示する第１の表示装置、７２は第２の表示コントローラ６７から転送されたデータを表示する第２の表示装置である。
【０００５】
図１２のような構成を持つ従来のメモリ制御回路の動作は以下の通りである。
【０００６】
グラフィックスデータ生成回路６３は任意のタイミングで第１の表示装置７１及び第２の表示装置７２に表示するグラフィックスデータを生成する。グラフィックスデータ生成回路６３は第１の表示装置７１に表示するグラフィックスデータの生成が完了したときには、グラフィックスデータを第１のＳＤＲＡＭ６４に書き込むために、第１のライトリクエスト信号をバスアービタ７０に対して送信する。また、第１の表示コントローラ６６は、第１の表示装置７１を駆動する垂直同期信号及び水平同期信号を発生する同期信号発生回路を内蔵している。第１の表示コントローラ６６は、その内部で発生した水平同期信号の基準エッジが有効表示期間内に検出されるたびに、第１のＳＤＲＡＭ６４に記憶されているデータを読み出して第１の表示装置７１に転送するために、第１のリードリクエスト信号をバスアービタ７０に対して送信する。
【０００７】
同様にして、グラフィックスデータ生成回路６３は第２の表示装置７２に表示するグラフィックスデータの生成が完了したときには、グラフィックスデータを第２のＳＤＲＡＭ６５に書き込むために、第２のライトリクエスト信号をバスアービタ７０に対して送信する。また、第２の表示コントローラ６７は、第２の表示装置７２を駆動する垂直同期信号及び水平同期信号を発生する同期信号発生回路を内蔵している。第２の表示コントローラ６７は、その内部で発生した水平同期信号の基準エッジが有効表示期間内に検出されるたびに、第２のＳＤＲＡＭ６５に記憶されているデータを読み出して第２の表示装置７２に転送するために、第２のリードリクエスト信号をバスアービタ７０に対して送信する。一般に、第１の表示コントローラ６６が発生する同期信号の周期と第２の表示コントローラ６７が発生する同期信号の周期は異なる。
【０００８】
バスアービタ７０は、グラフィックスデータ生成回路６３が発生した第１及び第２のライトリクエスト信号、第１の表示コントローラ６６が生成した第１のリードリクエスト信号、第２の表示コントローラ６７が生成した第２のリードリクエスト信号を受信する。バスアービタ７０は、受信した４種類のリクエスト信号に応答して、データ転送の実行を許可する４種類のアクノリッジ信号を発生する。すなわち、第１のライトリクエスト信号が送信されているときに第１のメモリバス６８においてデータ転送が行われていなければ、バスアービタ７０はグラフィックスデータ生成回路６３に対して第１のライトアクノリッジ信号を送信し、第２のライトリクエスト信号が送信されているときに第１のメモリバス６８においてデータ転送が行われていなければ、バスアービタ７０は第１の表示コントローラ６６に対して第２のライトアクノリッジ信号を送信する。また、第１のリードリクエスト信号が送信されているときに第２のメモリバス６９においてデータ転送が行われていなければ、バスアービタ７０はグラフィックスデータ生成回路６３に対して第１のリードアクノリッジ信号を送信し、第２のリードリクエスト信号が送信されているときに第２のメモリバス６９においてデータ転送が行われていなければ、バスアービタ７０は第２の表示コントローラ６７に対して第２のリードアクノリッジ信号を送信する。
【０００９】
グラフィックスデータ生成回路６３は、第１のライトアクノリッジ信号を受信したときには、内部で生成したデータを第１のメモリバス６８を使用して第１のＳＤＲＡＭ６４に転送し、データの転送が完了するとバスアービタ７０に対して第１のライトリクエスト信号の送信を停止する。また、第１の表示コントローラ６６は、第１のリードアクノリッジ信号を受信したときには、１水平期間に表示する分のデータを第１のメモリバス６８を使用して第１のＳＤＲＡＭ６４から第１の表示コントローラ６６に転送し、データの転送が完了するとバスアービタ７０に対して第１のリードリクエスト信号の送信を停止する。さらに、第１のＳＤＲＡＭ６４から第１の表示コントローラ６６に転送されたデータは、第１の表示コントローラ６６が内部で発生した水平及び垂直同期信号とともに第１の表示装置７１に転送される。
【００１０】
同様にして、グラフィックスデータ生成回路６３は、第２のライトアクノリッジ信号を受信したときには、生成したデータを第２のメモリバス６９を使用して第２のＳＤＲＡＭ６５に転送し、データの転送が完了するとバスアービタ７０に対して第２のライトリクエスト信号の送信を停止する。また、第２の表示コントローラ６７は、第２のリードアクノリッジ信号を受信したときには、１水平期間に表示する分のデータを第２のメモリバス６９を使用して第２のＳＤＲＡＭ６５から第２の表示コントローラ６７に転送し、データの転送が完了するとバスアービタ７０に対して第２のリードリクエスト信号の送信を停止する。さらに、第２のＳＤＲＡＭ６５から第２の表示コントローラ６７に転送されたデータは、第２の表示コントローラ６７が内部で発生した水平及び垂直同期信号とともに第２の表示装置７２に転送される。
【００１１】
なお、データ転送に際しては、グラフィックスデータ生成回路６３、第１の表示コントローラ６６、及び第２の表示コントローラ６７は、データ転送に必要なアドレスとコマンドを発生し、発生したアドレスとコマンドを第１のメモリバス６８又は第２のメモリバス６９を使用して、それぞれ第１のＳＤＲＡＭ６４又は第２のＳＤＲＡＭ６５に送信する。
【００１２】
図１３は、バスアービタ７０がリクエスト信号及びアクノリッジ信号を用いて、第１のメモリバス６８を調停する様子を示したタイミングチャートである。図では、第１の表示コントローラ６６が内部で発生する水平同期信号を負極性とし、リクエスト信号及びアクノリッジ信号をいずれもハイアクティブの信号としている。
【００１３】
図１３のタイミングｔａで水平同期信号の基準エッジである立ち下がりエッジが検出されると、第１の表示コントローラ６６は第１のリードリクエスト信号をハイレベルにすることによって、第１の表示コントローラ６６から第１のＳＤＲＡＭ６４へのデータ転送の実行をバスアービタ７０に対して要求する。このとき、タイミングｔａにおいてグラフィックスデータ生成回路６３が第１のメモリバス６８を使用してデータ転送を実行中である場合には、バスアービタ７０は第１のリードアクノリッジ信号をローレベルに保持し、第１の表示コントローラ６６にデータ転送を実行させないようにする。
【００１４】
次に、タイミングｔｂでグラフィックスデータ生成回路６３がデータ転送の実行を終了すると、グラフィックスデータ生成回路６３は第１のライトリクエスト信号をローレベルにし、これに応答してバスアービタ７０は第１のライトアクノリッジ信号をローレベルにするとともに、第１のリードアクノリッジ信号をハイレベルにすることによって、第１の表示コントローラ６６にデータ転送を開始させる。
【００１５】
グラフィックスデータ生成回路６３がタイミングｔｃで再び第１のライトリクエスト信号を発生したときに、第１の表示コントローラ６６がデータ転送を実行中であれば、第１の表示コントローラ６６がデータ転送を終了するタイミングｔｄまで、バスアービタ７０は第１のライトアクノリッジ信号をローレベルに保持し、グラフィックスデータ生成回路６３にデータ転送を実行させないようにする。
【００１６】
ここで、グラフィックスデータ生成回路６３で生成されたデータの量は必ずしも一定量とは限らないので、転送すべきデータの量が少ないときには、グラフィックスデータ生成回路６３がデータ転送を終了したときに、第１のリードリクエスト信号がローレベルのままになっていることがある。図１３に示したタイミングｔｅがこの場合に相当し、このとき第１のメモリバス６８は第１のライトリクエスト信号又は第１のリードリクエスト信号のいずれかがハイレベルとなるまで（例えば、図１３におけるｔｅからｔｆまでの期間）データ転送が実行されないアイドル状態となっている。したがって、タイミングｔｆで第１のリードリクエスト信号がハイレベルになると、バスアービタ７０は直ちに第１のリードアクノリッジ信号をハイレベルにし、第１の表示コントローラ６６にデータ転送を開始させるように動作する。特に、第１のメモリバス６８がアイドル状態のときに、第１のライトリクエスト信号と第１のリードリクエスト信号が同時にハイレベルとなる可能性があるときには、バスアービタ７０をいずれかのリクエスト信号に優先的に応答させるように予め決めている。
【００１７】
第２のライトリクエスト信号、第２のリードリクエスト信号、第２のライトアクノリッジ信号、及び第２のリードアクノリッジ信号を用いた第２のメモリバス６９の調停も上記の第１のメモリバス６８の調停とまったく同様にして行われる。このようにして、１つのメモリバスにつき、メモリを転送先及び転送元とする２種類のデータ転送の調停を行うことができる。
【００１８】
【発明が解決しようとする課題】
上記のような従来のメモリ制御回路では、１つのメモリバスに接続されるデータ転送回路は必ず２個であるという前提のもとにメモリバスの調停が行われる。したがって、従来のメモリ制御回路では、データの最終的な転送先である表示装置と同数のメモリデバイスが必要となり、特に表示装置の個数が多いときには多くのメモリデバイスを使用しなければならないという問題がある。一般に、電気回路の部品点数が増加すると、基板面積やコストなどが増大するためにこれは望ましいことではない。
【００１９】
この発明は、上記のような従来技術の課題を解決するためになされたもので、複数のデータ転送回路が使用権を要求するメモリバスにおいて、各データ転送回路が任意のタイミングでデータ転送を要求する場合であっても、破綻のないメモリバスの調停を可能にするメモリバスの調停方法及びメモリ制御回路を得ることを目的とする。
【００２０】
【課題を解決するための手段】
参考例のメモリ制御回路は、
メモリバス及び前記メモリバスに接続されたメモリを制御するメモリ制御回路であって、
前記メモリに転送するデータ及び前記メモリから転送されたデータの少なくとも一方を一時的に記憶しておく複数のバッファと、
前記複数のバッファのそれぞれに記憶されている前記データの数に対応するカウント値を持つ複数のカウンタと、
前記メモリバスを使用して、前記メモリと前記複数のバッファとの間でデータ転送を実行する複数のデータ転送回路と、
前記複数のデータ転送回路のそれぞれと関連付けられた複数の状態のなかのいずれかを現状態とし、前記現状態は予め定められた遷移条件に従って遷移するステートマシンを内蔵するバスアービタとを備え、
（１）  前記複数のデータ転送回路のそれぞれは、少なくとも１つ以上の前記複数のカウンタのカウント値に基づいて前記データ転送の開始を要求するリクエスト信号を前記バスアービタに対して送信し、
（２）  前記ステートマシンの現状態に関連付けられたデータ転送回路がリクエスト信号を送信していれば、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送回路に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、
（３）  前記複数のデータ転送回路のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数又は少なくとも１つ以上の前記複数のカウンタのカウント値のいずれかに基づいて実行中の前記データ転送を終了し、
（４）  前記ステートマシンの現状態に関連付けられたデータ転送回路が前記リクエスト信号を送信していない場合又は実行中の前記データ転送を終了した場合のいずれかの場合には、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送回路に前記アクノリッジ信号を送信せず、前記ステートマシンは次状態に遷移し、
（５）前記処理（１）から（４）までを繰り返すように構成されたものである。
【００２１】
また、参考例のメモリ制御回路は、前記処理（２）において、前記ステートマシンの現状態に関連付けられたデータ転送回路がリクエスト信号を送信している場合であっても、前記現状態以外の状態に関連付けられた特定の１つ以上のデータ転送回路がリクエスト信号を送信している場合には、前記ステートマシンは次状態に遷移し、前記バスアービタは前記現状態に関連付けられた前記データ転送回路にアクノリッジ信号を送信しないように構成されたものである。
【００２２】
また、参考例のメモリ制御回路は、前記ステートマシンの現状態に対応する次状態が複数存在する場合には、特定の１つ以上のデータ転送回路が送信するリクエスト信号に基づいて次状態が決定されるように構成されたものである。
【００２３】
参考例のメモリ制御回路は、
メモリバス及び前記メモリバスに接続されたメモリを制御するメモリ制御回路であって、
前記メモリに転送するデータ及び前記メモリから転送されたデータの少なくとも一方を一時的に記憶しておく複数のバッファと、
前記複数のバッファのそれぞれに記憶されている前記データの数に対応するカウント値を持つ複数のカウンタと、
前記メモリバスを使用して、前記メモリと前記複数のバッファとの間でデータ転送を実行する複数のデータ転送回路と、
シフトレジスタで構成された命令キューを内蔵するバスアービタとを備え、
（１）前記複数のデータ転送回路のそれぞれは、少なくとも１つ以上の前記複数のカウンタのカウント値に基づいてデータ転送の開始を要求するリクエスト信号を前記バスアービタに対して送信し、
（２）前記バスアービタが前記複数のデータ転送回路から前記リクエスト信号を受信した場合には、前記リクエスト信号を送信したデータ転送回路に関連付けられたデータ転送命令を命令キューの最後尾に登録し、
（３）前記バスアービタは、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、
（４）  前記複数のデータ転送回路のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数又は少なくとも１つ以上の前記複数のカウンタのカウント値のいずれかに基づいて実行中の前記データ転送を終了し、
（５）前記データ転送回路がデータ転送を終了した場合には、前記データ転送回路に関連付けられたデータ転送命令を命令キューから削除するとともに、後段の命令キューの内容を１段前にシフトし、
（６）前記処理（１）から（５）までを繰り返すように構成されたものである。
【００２４】
また、参考例のメモリ制御回路は、請求項４における前記処理（１）において前記データ転送回路がリクエスト信号を送信している場合であっても、前記リクエスト信号を送信しているデータ転送回路以外の特定の１つ以上のデータ転送回路がリクエスト信号を送信している場合又は前記特定の１つ以上のデータ転送回路に関連付けられたデータ転送命令がすでに命令キューに登録されている場合のいずれかの場合には、前記処理（２）を実行せず、前記リクエスト信号を送信しているデータ転送回路のデータ転送命令を前記命令キューに登録しないように構成されたものである。
【００２５】
また、参考例のメモリ制御回路は、前記データ転送命令が命令キューの先頭に登録されている場合であっても、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路以外の特定の１つ以上のデータ転送回路がリクエスト信号を送信している場合又は前記特定の１つ以上のデータ転送回路に関連付けられているデータ転送命令がすでに前記命令キューに登録されている場合のいずれかの場合には、前記処理（３）を実行せず、前記バスアービタは前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路に対してアクノリッジ信号を送信しないように構成されたものである。
【００２６】
請求項１に関するメモリ制御回路は、
メモリバス及び前記メモリバスに接続されたメモリを制御するメモリ制御回路であって、
前記メモリに転送するデータ及び前記メモリから転送されたデータの少なくとも一方を一時的に記憶しておく複数のバッファと、
前記複数のバッファのそれぞれに記憶されている前記データの数に対応するカウント値を持つ複数のカウンタと、
前記メモリバスを使用して、前記メモリと前記複数のバッファとの間でデータ転送を実行する複数のデータ転送回路と、
バスアービタとを備え、
前記バスアービタが、
シフトレジスタで構成された命令キューと、
前記複数のデータ転送回路のそれぞれと関連付けられた複数の状態のなかのいずれか又は命令キューと関連付けられた状態を現状態とし、一つのデータ転送回路に関連付けられた状態、又は、一つの命令キューと関連付けられた状態が終了すると、次のデータ転送回路又は次の命令キューに関連付けられた状態に遷移し、かつ、各状態が循環するように遷移するステートマシンとを内蔵し、
前記ステートマシンが持つ状態の１つを前記命令キューに関連付け、
前記複数のデータ転送回路の一部が前記ステートマシンが持つ状態に関連付けられ、前記複数のデータ転送回路の残りが前記命令キューに関連付けられ、
（１）前記複数のデータ転送回路のそれぞれは、各データ転送回路のバッファに記憶されているデータの数に対する前記複数のカウンタのカウント値が所定カウント値以上の場合に、前記データ転送の開始を要求するリクエスト信号を前記バスアービタに対して送信し、
（２）前記ステートマシンの現状態に関連付けられたデータ転送回路がリクエスト信号を送信していれば、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送回路に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、
（３）前記複数のデータ転送回路のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数に基づいて実行中の前記データ転送を終了し、
（４）前記ステートマシンの現状態に関連付けられたデータ転送回路が前記リクエスト信号を送信していない場合、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送回路に前記アクノリッジ信号を送信せず、前記ステートマシンは次状態に遷移し、
（５）前記ステートマシンが前記命令キューに関連付けられた状態に遷移した場合にのみ、前記命令キューに登録されているデータ転送命令の一部又は全部を前記命令キューの先頭から順に実行した後に前記ステートマシンは次状態に遷移し、
（６）前記処理（１）から（５）までを繰り返すように構成されたものである。
【００２７】
また、請求項２に関するメモリ制御回路は、請求項１における前記処理（５）において、
（５−１）前記バスアービタが前記命令キューに関連づけられたデータ転送回路のいずれかから前記リクエスト信号を受信した場合には、前記リクエスト信号を送信したデータ転送回路に関連付けられたデータ転送命令を命令キューの最後尾に登録し、
（５−２）前記バスアービタは、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、
（５−３）前記命令キューに関連づけられたデータ転送回路のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数に基づいて実行中の前記データ転送を終了し、
（５−４）前記データ転送回路がデータ転送を終了した場合には、前記データ転送回路に関連付けられたデータ転送命令を命令キューから削除するとともに、後段の命令キューの内容を１段前にシフトし、
（５−５）前記処理（５−１）から（５−４）までを１回以上実行するように構成されたものである。
【００２８】
また、請求項３に関するメモリ制御回路は、請求項２において、前記処理（５−１）において前記データ転送回路がリクエスト信号を送信している場合であっても、前記リクエスト信号を送信しているデータ転送回路以外の特定の１つ以上のデータ転送回路がリクエスト信号を送信している場合、前記処理（５−２）を実行せず、前記リクエスト信号を送信しているデータ転送回路のデータ転送命令を前記命令キューに登録しないように構成されたものである。
【００２９】
また、請求項４に関するメモリ制御回路は、請求項２又は３において、前記データ転送命令が命令キューの先頭に登録されている場合であっても、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路以外の特定の１つ以上のデータ転送回路がリクエスト信号を送信している場合、前記処理（５−３）を実行せず、前記バスアービタは前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路に対してアクノリッジ信号を送信しないように構成されたものである。
【００３０】
また、請求項５に関するメモリ制御回路は、請求項１から４までのいずれかにおいて、前記ステートマシンの現状態に関連付けられた命令キューにデータ転送命令が登録されている場合であっても、前記ステートマシンの現状態以外の状態に関連付けられた特定の１つ以上のデータ転送回路がリクエスト信号を送信している場合には、前記ステートマシンは次状態に遷移し、前記バスアービタは前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路にアクノリッジ信号を送信しないように構成されたものである。
【００３１】
また、請求項６に関するメモリ制御回路は、前記データ転送回路がデータ転送を実行している途中であっても、前記データ転送を実行しているデータ転送回路以外の特定の１つ以上のデータ転送回路がリクエスト信号の送信を開始した場合には、前記バスアービタは前記データ転送を実行しているデータ転送回路に対して、実行中のデータ転送を終了させるように命令するように構成されたものである。
【００３２】
また、請求項７に関するメモリ制御回路は、前記複数のカウンタは、前記複数のバッファのそれぞれに対する読み出し命令、前記バッファに対する書き込み命令、前記メモリに対する読み出し命令、前記メモリに対する書き込み命令のいずれかを組み合わせて使用することによって、前記複数のバッファのそれぞれに記憶されているデータの数に対応するカウント値を保持するように構成されたものである。
【００３３】
また、請求項８に関するメモリ制御回路は、前記複数のカウンタのそれぞれは、前記複数のバッファに対する読み出し命令あるいは書き込み命令が発行されるたびに反転するパルスを発生する反転パルス生成回路と、前記反転パルス生成回路が発生した前記パルスのエッジを検出する微分回路とを備え、前記複数のカウンタのそれぞれは、前記微分回路の検出結果、前記メモリに対する読み出し命令、前記メモリに対する書き込み命令のいずれかを組み合わせて使用することによって、前記複数のバッファのそれぞれに記憶されているデータの数に対応するカウント値を保持するように構成されたものである。
【００３４】
また、請求項９に関するメモリ制御回路は、前記複数のデータ転送回路のそれぞれは、前記複数のカウンタのカウント値が設定値以上になったとき及び設定値以下になったときのいずれかのときにリクエスト信号を発生するように構成されたものである。
【００３５】
また、参考例のメモリ制御回路は、前記複数のデータ転送回路のそれぞれは、前記複数のカウンタのカウント値が設定値以上になったとき及び設定値以下になったときのいずれかのときにデータ転送を終了するように構成されたものである。
【００３６】
また、参考例のメモリ制御回路は、前記複数のデータ転送回路のうちの、前記メモリを転送元とし前記バッファを転送先とするデータ転送回路において、転送先である前記バッファに記憶されている全てのデータが外部信号に基づいて消去された場合には、所定の期間にわたって、前記データ転送回路が１回のデータ転送で転送するデータの数を所定の期間外よりも少なくするか又は前記バスアービタが前記データ転送回路が送信するリクエスト信号に応答してアクノリッジ信号を送信する頻度を所定の期間外よりも少なくするように構成されたものである。
【００３７】
参考例のメモリバスの調停方法は、
メモリバスを使用して、メモリと複数のバッファとの間でデータ転送を実行する複数のデータ転送手段と、
前記複数のバッファのそれぞれに記憶されているデータの数に対応するカウント値を持つ複数のカウンタと、
前記複数のデータ転送手段のそれぞれと関連付けられた複数の状態のなかのいずれかを現状態とし、前記現状態は予め定められた遷移条件に従って遷移するステートマシンを内蔵するバスアービタと
を用いて前記データ転送手段によるメモリバスの使用権を調停する方法であって、
（１）  前記複数のデータ転送手段のそれぞれは、少なくとも１つ以上の前記複数のカウンタのカウント値に基づいて前記データ転送の開始を要求するリクエスト信号を前記バスアービタに対して送信し、
（２）  前記ステートマシンの現状態に関連付けられたデータ転送手段がリクエスト信号を送信していれば、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送手段に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、
（３）  前記複数のデータ転送手段のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数又は少なくとも１つ以上の前記複数のカウンタのカウント値のいずれかに基づいて実行中の前記データ転送を終了し、
（４）  前記ステートマシンの現状態に関連付けられたデータ転送手段が前記リクエスト信号を送信していない場合又は実行中の前記データ転送を終了した場合のいずれかの場合には、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送手段に前記アクノリッジ信号を送信せず、前記ステートマシンは次状態に遷移し、
（５）  前記処理（１）から（４）までを繰り返すようにした方法である。
【００３８】
また、参考例のメモリバスの調停方法は、前記処理（２）において、前記ステートマシンの現状態に関連付けられたデータ転送手段がリクエスト信号を送信している場合であっても、前記現状態以外の状態に関連付けられた特定の１つ以上のデータ転送手段がリクエスト信号を送信している場合には、前記ステートマシンは次状態に遷移し、前記バスアービタは前記現状態に関連付けられた前記データ転送手段にアクノリッジ信号を送信しないようにした方法である。
【００３９】
また、参考例のメモリバスの調停方法は、前記ステートマシンの現状態に対応する次状態が複数存在する場合には、特定の１つ以上のデータ転送手段が送信するリクエスト信号に基づいて次状態が決定されるようにした方法である。
【００４０】
参考例のメモリバスの調停方法は、
メモリバスを使用して、メモリと複数のバッファとの間でデータ転送を実行する複数のデータ転送手段と、
前記複数のバッファのそれぞれに記憶されているデータの数に対応するカウント値を持つ複数のカウンタと、
シフトレジスタで構成された命令キューを内蔵するバスアービタと
を用いて前記データ転送手段によるメモリバスの使用権を調停する方法であって、
（１）  前記複数のデータ転送手段のそれぞれは、少なくとも１つ以上の前記複数のカウンタのカウント値に基づいてデータ転送の開始を要求するリクエスト信号を前記バスアービタに対して送信し、
（２）  前記バスアービタが前記複数のデータ転送手段から前記リクエスト信号を受信した場合には、前記リクエスト信号を送信したデータ転送手段に関連付けられたデータ転送命令を命令キューの最後尾に登録し、
（３）  前記バスアービタは、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、
（４）  前記複数のデータ転送手段のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数又は少なくとも１つ以上の前記複数のカウンタのカウント値のいずれかに基づいて実行中の前記データ転送を終了し、
（５）  前記データ転送手段がデータ転送を終了した場合には、前記データ転送手段に関連付けられたデータ転送命令を命令キューから削除するとともに、後段の命令キューの内容を１段前にシフトし、
（６）  前記処理（１）から（５）までを繰り返すようにした方法である。
【００４１】
また、参考例のメモリバスの調停方法は、前記処理（１）において前記データ転送手段がリクエスト信号を送信している場合であっても、前記リクエスト信号を送信しているデータ転送手段以外の特定の１つ以上のデータ転送手段がリクエスト信号を送信している場合又は前記特定の１つ以上のデータ転送手段に関連付けられたデータ転送命令がすでに命令キューに登録されている場合のいずれかの場合には、前記処理（２）を実行せず、前記リクエスト信号を送信しているデータ転送手段のデータ転送命令を前記命令キューに登録しないようにした方法である。
【００４２】
また、参考例のメモリバスの調停方法は、前記データ転送命令が命令キューの先頭に登録されている場合であっても、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段以外の特定の１つ以上のデータ転送手段がリクエスト信号を送信している場合又は前記特定の１つ以上のデータ転送手段に関連付けられているデータ転送命令がすでに前記命令キューに登録されている場合のいずれかの場合には、前記処理（３）を実行せず、前記バスアービタは前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段に対してアクノリッジ信号を送信しないようにした方法である。
【００４３】
請求項１０に関するメモリバスの調停方法は、
メモリバスを使用して、メモリと複数のバッファとの間でデータ転送を実行する複数のデータ転送手段と、
前記複数のバッファのそれぞれに記憶されているデータの数に対応するカウント値を持つ複数のカウンタと、
バスアービタと
を用いて前記データ転送手段によるメモリバスの使用権を調停する方法であって、
前記バスアービタが、
シフトレジスタで構成された命令キューと、
前記複数のデータ転送手段のそれぞれと関連付けられた複数の状態のなかのいずれか又は命令キューと関連付けられた状態を現状態とし、一つのデータ転送手段に関連付けられた状態、又は、一つの命令キューと関連付けられた状態が終了すると、次のデータ転送手段又は次の命令キューに関連付けられた状態に遷移し、かつ、各状態が循環するように遷移するステートマシンとを内蔵し、
前記ステートマシンが持つ状態の１つを前記命令キューに関連付け、
前記複数のデータ転送手段の一部が前記ステートマシンが持つ状態に関連付けられ、前記複数のデータ転送手段の残りが前記命令キューに関連付けられ、
（１）  前記複数のデータ転送手段のそれぞれは、各データ転送手段のバッファに記憶されているデータの数に対する前記複数のカウンタのカウント値が所定カウント値以上の場合に、前記データ転送の開始を要求するリクエスト信号を前記バスアービタに対して送信し、
（２）  前記ステートマシンの現状態に関連付けられたデータ転送手段がリクエスト信号を送信していれば、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送手段に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、
（３）  前記複数のデータ転送手段のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数に基づいて実行中の前記データ転送を終了し、
（４）  前記ステートマシンの現状態に関連付けられたデータ転送手段が前記リクエスト信号を送信していない場合、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送手段に前記アクノリッジ信号を送信せず、前記ステートマシンは次状態に遷移し、
（５）  前記ステートマシンが前記命令キューに関連付けられた状態に遷移した場合にのみ、前記命令キューに登録されているデータ転送命令の一部又は全部を前記命令キューの先頭から順に実行した後に前記ステートマシンは次状態に遷移し、
（６）  前記処理（１）から（５）までを繰り返すようにした方法である。
【００４４】
また、請求項１１に関するメモリバスの調停方法は、
前記処理（５）において、
（５−１）  前記バスアービタが前記命令キューに関連づけられたデータ転送手段のいずれかから前記リクエスト信号を受信した場合には、前記リクエスト信号を送信したデータ転送手段に関連付けられたデータ転送命令を命令キューの最後尾に登録し、
（５−２）  前記バスアービタは、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、
（５−３）  前記命令キューに関連づけられたデータ転送手段のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数に基づいて実行中の前記データ転送を終了し、
（５−４）  前記データ転送手段がデータ転送を終了した場合には、前記データ転送手段に関連付けられたデータ転送命令を命令キューから削除するとともに、後段の命令キューの内容を１段前にシフトし、
（５−５）  前記処理（５−１）から（５−４）までを１回以上実行するようにした方法である。
【００４５】
また、請求項１２に関するメモリバスの調停方法は、前記処理（５−１）において前記データ転送手段がリクエスト信号を送信している場合であっても、前記リクエスト信号を送信しているデータ転送手段以外の特定の１つ以上のデータ転送手段がリクエスト信号を送信している場合、前記処理（５−２）を実行せず、前記リクエスト信号を送信しているデータ転送手段のデータ転送命令を前記命令キューに登録しないようにした方法である。
【００４６】
また、請求項１３に関するメモリバスの調停方法は、前記データ転送命令が命令キューの先頭に登録されている場合であっても、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段以外の特定の１つ以上のデータ転送手段がリクエスト信号を送信している場合、前記処理（５−３）を実行せず、前記バスアービタは前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段に対してアクノリッジ信号を送信しないようにした方法である。
【００４７】
また、請求項１４に関するメモリバスの調停方法は、前記ステートマシンの現状態に関連付けられた命令キューにデータ転送命令が登録されている場合であっても、前記ステートマシンの現状態以外の状態に関連付けられた特定の１つ以上のデータ転送手段がリクエスト信号を送信している場合には、前記ステートマシンは次状態に遷移し、前記バスアービタは前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段にアクノリッジ信号を送信しないようにした方法である。
【００４８】
また、請求項１５に関するメモリバスの調停方法は、前記データ転送手段がデータ転送を実行している途中であっても、前記データ転送を実行しているデータ転送手段以外の特定の１つ以上のデータ転送手段がリクエスト信号の送信を開始した場合には、前記バスアービタは前記データ転送を実行しているデータ転送手段に対して、実行中のデータ転送を終了させるように命令するようにした方法である。
【００４９】
また、請求項１６に関するメモリバスの調停方法は、前記複数のカウンタは、前記複数のバッファのそれぞれに対する読み出し命令、前記バッファに対する書き込み命令、前記メモリに対する読み出し命令、前記メモリに対する書き込み命令のいずれかを組み合わせて使用することによって、前記複数のバッファのそれぞれに記憶されているデータの数に対応するカウント値を保持するようにした方法である。
【００５０】
また、請求項１７に関するメモリバスの調停方法は、
前記複数のカウンタのそれぞれは、前記複数のバッファに対する読み出し命令あるいは書き込み命令が発行されるたびに反転するパルスを発生し、この発生した前記パルスのエッジを検出し、
前記複数のカウンタのそれぞれは、前記検出されたパルスのエッジ、前記メモリに対する読み出し命令、前記メモリに対する書き込み命令のいずれかを組み合わせて使用することによって、前記複数のバッファのそれぞれに記憶されているデータの数に対応するカウント値を保持するようにした方法である。
【００５１】
また、請求項１８に関するメモリバスの調停方法は、前記複数のデータ転送手段のそれぞれは、前記複数のカウンタのカウント値が設定値以上になったとき及び設定値以下になったときのいずれかのときにリクエスト信号を発生するようにした方法である。
【００５２】
また、参考例のメモリバスの調停方法は、前記複数のデータ転送手段のそれぞれは、前記複数のカウンタのカウント値が設定値以上になったとき及び設定値以下になったときのいずれかのときにデータ転送を終了するようにした方法である。
【００５３】
また、参考例のメモリバスの調停方法は、
前記複数のデータ転送手段のうちの、前記メモリを転送元とし前記バッファを転送先とするデータ転送手段において、
転送先である前記バッファに記憶されている全てのデータが外部信号に基づいて消去された場合には、所定の期間にわたって、前記データ転送手段が１回のデータ転送で転送するデータの数を所定の期間外よりも少なくするか又は前記バスアービタが前記データ転送手段が送信するリクエスト信号に応答してアクノリッジ信号を送信する頻度を所定の期間外よりも少なくするようにした方法である。
【００５４】
【発明の実施の形態】
実施の形態１．
図１はこの発明の実施の形態１であるメモリ制御回路の構成（本発明によるメモリバスの調停方法を実施するための構成）示す図である。図において、１は映像データを記憶するＳＤＲＡＭ、２はメモリ制御回路、３はＳＤＲＡＭ１とメモリ制御回路２を接続し、ＳＤＲＡＭ１とメモリ制御回路２が互いにデータ、アドレス、コマンドを送受信するために使用する外部メモリバスである。
【００５５】
メモリ制御回路２の内部構成は以下の通りである。図において、４はＳＤＲＡＭ１に対する直接のインターフェイスを持つメモリインターフェイス、５はメモリ制御回路２の内部でデータ、アドレス、コマンド等の転送に使用する内部メモリバス、６は各データ転送回路が実行するデータ転送のタイミングを制御することによって内部メモリバス５の調停を行うバスアービタである。
【００５６】
また、図において、７はＳＤＲＡＭ１に転送するデータを一時的に記憶する第１のバッファ、８は第１のバッファ７に記憶されているデータの数をカウントする第１のカウンタ、９はデータ及び制御信号を入力する第１の入力端子、１０は第１の入力端子９から入力されたデータを随時第１のバッファ７に書き込み、バスアービタ６から内部メモリバス５を使用したデータ転送の実行が許可されたときには、第１のバッファ７からデータを読み出してメモリインターフェイス４を経由してＳＤＲＡＭ１に転送する第１のデータ転送回路である。
【００５７】
同様に、図において、１１はＳＤＲＡＭ１に転送するデータを一時的に記憶する第２のバッファ、１２は第２のバッファに記憶されているデータの数をカウントする第２のカウンタ、１３はデータ及び制御信号を入力する第２の入力端子、１４は第２の入力端子１３から入力されたデータを随時第２のバッファ１１に書き込み、バスアービタ６から内部メモリバス５を使用したデータ転送の実行が許可されたときには、第２のバッファ１１からデータを読み出してメモリインターフェイス４を経由してＳＤＲＡＭ１に転送する第２のデータ転送回路である。
【００５８】
さらに、図において、１５はＳＤＲＡＭ１から転送されたデータを一時的に記憶する第３のバッファ、１６は第３のバッファに記憶されているデータの数をカウントする第３のカウンタ、１７はデータ及び制御信号を出力する第１の出力端子、１８はバスアービタ６から内部メモリバス５を使用したデータ転送の実行が許可されたときにはＳＤＲＡＭ１からメモリインターフェイス４を経由して第３のバッファ１５にデータを書き込み、必要に応じて第３のバッファ１５からデータを読み出して第１の出力端子から出力する第３のデータ転送回路である。
【００５９】
同様に、図において、１９はＳＤＲＡＭ１から転送されたデータを一時的に記憶する第４のバッファ、２０は第４のバッファに記憶されているデータの数をカウントする第４のカウンタ、２１はデータ及び制御信号を出力する第２の出力端子、２２はバスアービタ６から内部メモリバス５を使用したデータ転送の実行が許可されたときにはＳＤＲＡＭ１からメモリインターフェイス４を経由して第４のバッファ１９にデータを書き込み、必要に応じて第４のバッファ１９からデータを読み出して第２の出力端子２１から出力する第４のデータ転送回路である。ＳＤＲＡＭ１に転送するデータを一時的に記憶する第１のバッファ７、第２のバッファ１１、第３のバッファ１５及び第４のバッファ１９としてはＦＩＦＯ型（First-In First-Out:先入れ先出し型）のバッファを用いるのが最も一般的であるが、ＦＩＦＯ型に限らず、ＬＩＦＯ型（Last-In First-Out:後入れ先出し型）であってもよいし、全くランダムアクセスを行うバッファであってもよい。
【００６０】
また、図において、２３はバスアービタ６から内部メモリバス５の使用権が許可されたときには、ＳＤＲＡＭ１に対してＳＤＲＡＭ１内部の状態を初期化する一連の初期化コマンドを発行するＳＤＲＡＭ初期化コマンド発生回路であり、２４はバスアービタ６から内部メモリバス５の使用権が許可されたときには、ＳＤＲＡＭ１に対してリフレッシュコマンドを発行するリフレッシュコマンド発生回路である。
【００６１】
図１に示した実施の形態１であるメモリ制御回路の動作は以下の通りである。第１の入力端子９及び第２の入力端子１３から入力されるデータは映像データであるとし、第１の入力端子９及び第２の入力端子１３から入力される制御信号は有効なデータを示すためのデータイネーブル信号及び垂直同期信号であるとする。データイネーブル信号は入力されるデータがＳＤＲＡＭ１に転送するべき有効なデータであることを示す信号である。データイネーブル信号がイネーブル状態であるときに第１の入力端子９及び第２の入力端子１３から入力されたデータは、それぞれ第１のデータ転送回路１０及び第２のデータ転送回路１４によって、第１のバッファ７及び第２のバッファ１１に書き込まれる。
【００６２】
同様に、第１の出力端子１７及び第２の出力端子２１から出力されるデータは映像データであるとし、第１の出力端子１７及び第２の出力端子２１から出力される制御信号は第３のデータ転送回路１８及び第４のデータ転送回路２２の内部で発生したデータイネーブル信号及び垂直同期信号であるとする。第１の出力端子１７及び第２の出力端子２１から出力されるデータイネーブル信号は出力されるデータがＳＤＲＡＭ１から転送されてきた有効なデータであることを示す信号である。データイネーブル信号がイネーブル状態であるときに、第３のバッファ１５及び第４のバッファ１９は、それぞれ第３のデータ転送回路１８及び第４のデータ転送回路２２によってデータを読み出され、第１の出力端子１７及び第２の出力端子２１から出力される。
【００６３】
第１のカウンタ８は、第１のデータ転送回路１０が第１のバッファ７にデータを１つ書き込むたびにカウント値に１加算し、第１のバッファ７からデータが１つ読み出されるたびにカウント値から１減算する。そして、第１のカウンタ８のカウント値が３２以上になると、第１のデータ転送回路１０はバスアービタ６に対して内部メモリバス５及び外部メモリバス３を使用したデータ転送の開始を要求する第１のリクエスト信号を送信する。第１のカウンタ８に１減算させる条件は、ＳＤＲＡＭ１に対してライトコマンドを発行するたびとしてもよい。
【００６４】
また、第１のカウンタ８は第１の入力端子９から入力される垂直同期信号の基準エッジを検出すると、第１のバッファ７に記憶されているデータを全て消去するとともに、第１のカウンタ８のカウント値を０にリセットする。これは、１垂直期間毎に第１のバッファ７及び第１のカウンタ８の状態をリセットすることによって、例えば、第１のバッファ７がオーバーフローするなどの誤動作が発生した場合でも、次の垂直期間では正常な状態に復帰できるようにするための措置である。誤動作が発生しないことが保証されている場合には、このような措置は特に必要ない。ここで、第１のデータ転送回路１０がデータを転送中に垂直同期信号の基準エッジを検出した場合には、空であるはずの第１のバッファ７から無効なデータをＳＤＲＡＭ１に転送してしまうことを防ぐために、実行中のデータ転送をただちに中断するか、実行中のデータ転送が終了してから第１のバッファ７に記憶されているデータを消去するようにする。
【００６５】
第２のカウンタ１２も第１のカウンタ８と同様な方法で第２のバッファ１１に記憶されているデータの数をカウントし、第２のデータ転送回路１４は第２のカウンタ１２のカウント値が３２以上になるとバスアービタ６に対して第２のリクエスト信号を送信する。
【００６６】
一方、第３のカウンタ１６は、第３のデータ転送回路１８がＳＤＲＡＭ１に対してリードコマンドを発行するたびにカウント値から１減算し、第３のバッファ１５からデータが１つ読み出されるたびにカウント値に１加算する。そして、第３のカウンタ１６のカウント値が３２以上になると、第３のデータ転送回路１８はバスアービタ６に対して内部メモリバス５及び外部メモリバス３を使用したデータ転送の開始を要求する第３のリクエスト信号を送信する。第３のカウンタ１６が１減算する条件は、第３のバッファ１５にデータを１つ書き込むたびとしてもよい。
【００６７】
このとき、第３のカウンタ１６がカウントしているのは、正確には第３のバッファ１５の全データ容量から第３のバッファ１５に記憶されているデータの数を引いた値であるが、この値は第３のバッファ１５に記憶されているデータの数と一対一に対応しているので、実質的に第３のカウンタ１６は第３のバッファ１５に記憶されているデータ数をカウントしていると見なすことができる。もちろん第３のカウンタ１６の加減算の方向を逆にして第１のカウンタ８と同様なカウント方法を用いてもよい。この場合は、第３のデータ転送回路１８が第３のリクエスト信号を出力するカウント値が第３のバッファ１５の全データ容量から３２を引いた値に変える必要がある。
【００６８】
また、第３のカウンタ１６は第３のデータ転送回路１８の内部で発生した垂直同期信号の基準エッジを検出すると、第３のバッファ１５に記憶されているデータを全て消去するとともに、第３のカウンタ１６のカウント値を第３のバッファ１５の全データ容量と等しい値にする。これは、例えば、第３のバッファ１５がアンダーフローするなどの誤動作が発生した場合でも、次の垂直期間では正常な状態に復帰できるようにするための措置である。ただし、第３のデータ転送回路１８がデータを転送中に垂直同期信号の基準エッジを検出した場合には、本来は異なる垂直期間に表示されるべきデータが誤って同じ垂直期間に表示されないようにするため、実行するデータ転送をただちに中断して所定の期間が経過するまで第３のバッファ１５に対する書き込み動作を禁止するか、実行中のデータ転送が終了して所定の期間が経過してから第３のバッファ１５に記憶されているデータを消去するようにする。なお、いずれの場合にも、所定の期間が経過するのを待つのは、一般にＳＤＲＡＭ１に対してリードコマンドを発行してから第３のバッファ１５にデータが実際に書き込まれるまでに一定の潜時が存在するためであり、データ転送を中断又は終了した後も第３のバッファ１５にデータが書き込まれることがあるためである。
【００６９】
第４のカウンタ２０も第３のカウンタ１６と同様な方法で第４のバッファ１９に記憶されているデータの数をカウントし、第４のデータ転送回路２２は第４のカウンタ２０のカウント値が３２以上になるとバスアービタ６に対して第４のリクエスト信号を送信する。
【００７０】
メモリインターフェイス４は内部メモリバス５で用いられるコマンド、アドレスの形式と、外部メモリバス３で用いられるアドレス、コマンドの形式を相互に変換するために設けられる回路である。このような変換が必要でないときには、メモリインターフェイス４は不要であり、内部メモリバス５及び外部メモリバス３を明確に区別する必要もなくなる。なお、内部メモリバス５と外部メモリバス３においてアドレス、コマンドの形式が異なっていてもそれぞれの機能は変わらないので、内部メモリバス５を調停することはＳＤＲＡＭ１に直接接続された外部メモリバス３を調停することと等価である。
【００７１】
バスアービタ６はステートマシンを内蔵しており、その状態遷移図の一例を図２に示す。メモリ制御回路２が動作を開始したときにはステートマシンの状態は図２の「初期状態」になっている。
【００７２】
一般のＳＤＲＡＭデバイスはデータ転送を実行する前に内部の状態を初期化する必要があるため、バスアービタ６に内蔵されているステートマシンは適当なタイミングで「ＳＤＲＡＭ初期化」の状態に遷移するとともにＳＤＲＡＭ初期化コマンド発生回路２３に内部メモリバス５の使用権を許可する。これに応答して、ＳＤＲＡＭ初期化コマンド発生回路２３は、一連の初期化コマンドを発生し、適当なタイミングでＳＤＲＡＭの初期化が終了すると初期化が終了したことをバスアービタ６に対して通知する。ＳＤＲＡＭの初期化を開始するタイミングは外部から与えられるものであってもよいし、「初期状態」を一定時間保った後に自動的に「ＳＤＲＡＭ初期化」に遷移するなどとしてもよい。
【００７３】
ＳＤＲＡＭ初期化コマンド発生回路２３によってバスアービタ６にＳＤＲＡＭ１の初期化が終了したことが通知されると、ステートマシンは「データ転送１」の状態に遷移する。このとき第１のデータ転送回路１０が第１のリクエスト信号を送信していれば、バスアービタ６は第１のデータ転送回路１０に対して第１のアクノリッジ信号を送信する。逆に、このとき第１のデータ転送回路１０が第１のリクエスト信号を送信していなければ、ステートマシンはただちに次状態「データ転送２」に遷移する。第１のデータ転送回路１０に対して第１のアクノリッジ信号を出力した場合には、ステートマシンは第１のデータ転送回路１０からデータ転送の終了が通知されたときに次状態「データ転送２」に遷移する。
【００７４】
さらに、ステートマシンが「データ転送２」の状態に遷移したときに第２のデータ転送回路１４が第２のリクエスト信号を送信していれば、バスアービタ６は第２のデータ転送回路１４に対して第２のアクノリッジ信号を送信する。また、このとき第２のデータ転送回路１４が第２のリクエスト信号を送信していなければ、ステートマシンはただちに次状態「データ転送３」に遷移する。第２のデータ転送回路１４に対して第２のアクノリッジ信号を出力した場合には、ステートマシンは第２のデータ転送回路１４からデータ転送の終了が通知されたときに次状態「データ転送３」に遷移する。
【００７５】
以下同様にして、「データ転送３」の状態は第３のデータ転送回路１８に、「データ転送４」の状態は第４のデータ転送回路２２にそれぞれ関連付けられており、「データ転送３」の状態に遷移したときに第３のデータ転送回路１８が第３のリクエスト信号を送信していれば、第３のリクエスト信号に応答して第３のデータ転送回路１８に対して第３のアクノリッジ信号が送信され、「データ転送４」の状態に遷移したときに第４のデータ転送回路２２が第４のリクエスト信号を送信していれば、第４のリクエスト信号に応答して第４のデータ転送回路２２に対して第４のアクノリッジ信号が送信される。
【００７６】
「データ転送４」の次状態は「リフレッシュ」であり、「リフレッシュ」の状態に遷移したときには、バスアービタ６は自動的にリフレッシュコマンド発生回路２４に対して第５のアクノリッジ信号を送信し、内部メモリバス５の使用権を許可する。その後、バスアービタ６がリフレッシュコマンド発生回路２４からリフレッシュ動作の終了を通知されると、ステートマシンは「データ転送１」の状態に戻る。これ以降は上述した状態遷移にしたがって循環的にデータ転送及びリフレッシュ動作が行われる。
【００７７】
一方、第１のデータ転送回路１０はバスアービタ６から第１のアクノリッジ信号を受信すると、第１のバッファ７からメモリインターフェイス４を経由して３２個のデータをＳＤＲＡＭ１に転送し、適当なタイミングでバスアービタ６にデータ転送の終了を通知する。同様にして、第２のデータ転送回路１４はバスアービタ６から第２のアクノリッジ信号を受信すると、第２のバッファ１１から３２個のデータをメモリインターフェイス４を経由してＳＤＲＡＭ１に転送し、やはり適当なタイミングでバスアービタ６にデータ転送の終了を通知する。
【００７８】
また、第３のデータ転送回路１８はバスアービタ６から第３のアクノリッジ信号を受信すると、ＳＤＲＡＭ１からメモリインターフェイス４を経由して３２個のデータを第３のバッファ１５に書き込み、適当なタイミングでバスアービタ６にデータ転送の終了を通知する。同様にして、第４のデータ転送回路２２はバスアービタ６から第４のアクノリッジ信号を受信すると、ＳＤＲＡＭ１からメモリインターフェイス４を経由して３２個のデータを第４のバッファ１９に書き込み、やはり適当なタイミングでバスアービタ６にデータ転送の終了を通知する。
【００７９】
なお、実施の形態１ではデータ転送に際して、各データ転送回路はデータ転送に必要なアドレス、コマンドも同時に発生し、内部メモリバス５及び外部メモリバス３を使用してＳＤＲＡＭ１に送信するものとする。内部メモリバス５にアドレス、コマンドを送信できるデータ転送回路は同時に１つしか存在しないため、個々のデータ転送回路がアドレス、コマンドを発生するのではなく、データ転送に必要なアドレス、コマンドを発生する回路をデータ転送回路とは別に１つだけ設けてもよい。
【００８０】
リクエストコマンド発生回路２４はバスアービタ６から第５のアクノリッジ信号を受信すると、リフレッシュコマンドを２回発生し、適当なタイミングでバスアービタ６にリフレッシュ動作の終了を通知する。リフレッシュ動作ではコマンドのみを内部メモリバス５及び外部メモリバス３に送信し、アドレスやデータは通常送信されない。
【００８１】
図３はバスアービタ６がリクエスト信号及びアクノリッジ信号を用いて、内部メモリバス５を調停する様子を示したタイミングチャートである。図には、ステートマシンを駆動するクロック信号、バスアービタ６に内蔵されているステートマシンの状態、５種類のリクエスト信号及び５種類のアクノリッジ信号の波形を示している。実施の形態１では、ステートマシンの状態、５種類のリクエスト信号及びアクノリッジ信号は必ずクロック信号の立ち上がりエッジで変化するとする。ここで、第５のリクエスト信号は、リフレッシュコマンド発生回路２４がバスアービタ６に対して送信するリクエスト信号である。図では、リクエスト信号とアクノリッジ信号は全てハイアクティブであるとする。また、図では、ステートマシンの状態に関して「ＳＤＲＡＭ初期化」を「ＩＮＩ」、「データ転送１」を「Ｄ１」、「データ転送２」を「Ｄ２」、「データ転送３」を「Ｄ３」、「データ転送４」を「Ｄ４」、「リフレッシュ」を「ＲＥＦ」と略記している。
【００８２】
図におけるタイミングｔＡで、バスアービタ６に内蔵されているステートマシンが「ＳＤＲＡＭ初期化」から「データ転送１」の状態に遷移したとする。タイミングｔＡでは第１のリクエスト信号がハイレベルになっているため、バスアービタ６は第１のアクノリッジ信号をハイレベル（Ｈ）にし、第１のデータ転送回路１０に対してデータ転送の開始を許可する。その後、タイミングｔＢで第１のデータ転送回路１０はＳＤＲＡＭ１に３２個のデータを転送し終わったことを示すために、第１のリクエスト信号をローレベル（Ｌ）に変化させる。このように、実施の形態１では、図示を簡単にするために、データ転送の開始要求、実行、終了を表す信号をリクエスト信号に多重しているが、これに限らずリクエスト信号はデータ転送の開始要求のみを表すとし、データ転送が実行中であること、及びデータ転送が終了したことを別に２種類の信号を設けることによって示してもよい。
【００８３】
バスアービタ６がタイミングｔＣで第１のリクエスト信号がローレベルであることを検出すると、バスアービタ６は第１のアクノリッジ信号をローレベルにするととともに、ステートマシンの状態は「データ転送２」に遷移する。第１のアクノリッジ信号はデータ転送の開始を許可するための信号であるから必ずしもタイミングｔＣでローレベルにする必要はなく、適当なタイミングでローレベルにしてもよい。タイミングｔＣで第１のカウンタ８のカウント値が３２未満であれば、第１のリクエスト信号は図３に示したようにローレベルのままである。タイミングｔＣでは第２のリクエスト信号がローレベルであるため、第２のアクノリッジ信号はローレベルのままであり、次のタイミングｔＤでステートマシンはただちに「データ転送３」の状態に遷移する。なお、データ転送を行っていない第３のデータ転送回路１８がタイミングｔＣで第３のリクエスト信号をローレベルにしているのは、垂直同期信号の基準エッジが検出され、第３のカウンタ１６のカウント値が前述した動作にしたがって０にリセットされたためである。
【００８４】
タイミングｔＤでは第３のリクエスト信号がローレベルであるため、第３のアクノリッジ信号はローレベルのままであり、次のタイミングｔＥでステートマシンはただちに「データ転送４」に遷移する。
【００８５】
タイミングｔＥでは第４のリクエスト信号がハイレベルであるため、第４のアクノリッジ信号はハイレベルとなり、第４のアクノリッジ信号に応答して第４のデータ転送回路２２はデータ転送を開始する。その後、タイミングｔＦで第４のデータ転送回路２２はＳＤＲＡＭ１から３２個のデータを転送し終わったことを示すために、第４のリクエスト信号をローレベルに変化させる。
【００８６】
タイミングｔＧでバスアービタ６が第４のリクエスト信号がローレベルであることを検出すると、バスアービタ６は第４のアクノリッジ信号をローレベルにするとともに、ステートマシンの状態は「リフレッシュ」に遷移する。タイミングｔＧで第４のカウンタ２０のカウント値が３２以上であれば、第４のリクエスト信号は図３に示したように、タイミングｔＧでただちにハイレベルに変化する。また、状態「リフレッシュ」ではバスアービタ６は第５のリクエスト信号のレベルに関わらず第５のアクノリッジ信号をハイレベルに変化させ、リフレッシュコマンド発生回路２４にリフレッシュ動作を開始させる。その後、タイミングｔＨでリフレッシュコマンド発生回路２４は２回分のリフレッシュ動作が終了したことを示すために、第５のリクエスト信号をローレベルに変化させる。状態「リフレッシュ」では必ずリフレッシュコマンド発生回路２４に内部メモリバス５の使用権が許可されるために、第５のリクエスト信号は実質的にリフレッシュ動作の終了のみを示す信号となっている。このため、第５のリクエスト信号は次のタイミングｔＩでただちにハイレベルに復帰する。
【００８７】
タイミングｔＩでバスアービタ６が第５のリクエスト信号がローレベルであることを検出すると、バスアービタ６は第５のアクノリッジ信号をローレベルにするとともに、ステートマシンの状態は「データ転送１」に遷移する。タイミングｔＩでは第１のリクエスト信号がハイレベルであるために、バスアービタ６は第１のアクノリッジ信号をハイレベルにすることによって、第１のデータ転送回路１０にデータ転送を開始させる。
【００８８】
以下、同様にして５種類のリクエスト信号に応答して、５種類のアクノリッジ信号のレベルが変化するとともにステートマシンの状態が遷移していく。
【００８９】
メモリ制御回路２を上記のように構成することによって、各入力端子及び出力端子から入出力されるデータイネーブル信号が任意のタイミングでイネーブル状態となったとしても、データをメモリ制御回路２と外部回路との間でデータイネーブル信号に同期させて転送することができる。このことを以下に説明する。
【００９０】
いま、各データ転送回路はアクノリッジ信号を受信してから３２個のデータを転送し終わったことをバスアービタ６に通知するまでに、いずれも３８クロックサイクルの時間が必要であるとする。また、リフレッシュコマンド発生回路２４は第５のアクノリッジ信号を受信してから２回のリフレッシュコマンドを発生し終わったことをバスアービタ６に通知するまでに、８クロックサイクルの時間が必要であるとする。ここで、１クロックサイクルはＳＤＲＡＭ１を駆動するクロックの周期を基準としたものである。ＳＤＲＡＭ１は、１クロックサイクルにつき１個のデータの書き込み又は読み出しが可能である。
【００９１】
さらに、第１の入力端子９及び第２の入力端子１３には有効表示期間において５クロックサイクルにつき１個のデータがデータイネーブル信号とともに入力されるとし、第１の出力端子１７及び第２の出力端子２１からは有効表示期間において５クロックサイクルにつき１個のデータがデータイネーブル信号とともに出力されるとする。第１の入力端子９及び第２の入力端子１３から入力されたデータは、それぞれ第１のバッファ７及び第２のバッファ１１に書き込まれる。また、第１の出力端子１７及び第２の出力端子２１から出力されるデータはそれぞれ第１のバッファ７及び第２のバッファ１１から読み出されたデータである。
【００９２】
このとき、メモリ制御回路２とＳＤＲＡＭ１との間で転送できるデータは１６０クロックサイクルあたり最大１２８個（＝（１６０クロックサイクル−８クロックサイクル）×（３２個／３８クロックサイクル））であり、メモリ制御回路２と各入力端子及び出力端子を介して外部回路との間で転送されるデータは１６０クロックサイクルあたりに換算するとやはり１２８個であるから、単位時間あたりにメモリ制御回路２と外部回路との間で転送されるデータの数はメモリ制御回路２とＳＤＲＡＭ１との間で転送できるデータの最大数に等しいことがわかる。
【００９３】
したがって、例えば、第１のバッファ７に注目すると、第１のバッファ７に記憶されているデータの数は少なくとも時間とともに際限なく増加することはないので、第１のバッファ７の全データ容量がある程度の大きさであれば、第１のデータ転送回路１０は第１のバッファ７をオーバーフローさせることなく第１の入力端子９から入力されたデータを全てＳＤＲＡＭ１に書き込むことができる。これは第２のバッファ１１についても同様である。
【００９４】
また、第３のバッファ１５についても、第３のバッファ１５に記憶されているデータの数は少なくとも時間とともに際限なく減少することはないので、有効表示期間の直前において相当数のデータが第３のバッファ１５に記憶されていれば、第３のデータ転送回路１８は第３のバッファ１５をアンダーフローさせることなく、第１の出力端子１７から出力すべきデータをＳＤＲＡＭ１から読み出すことができる。これは第４のバッファ１９についても同様である。
【００９５】
ここで、具体的な例を挙げて各バッファの全データ容量が有限でよいことを示す。仮に、ステートマシンの状態が「データ転送１」に遷移した時点で第１のカウンタ８のカウント値が３２以上であったとすると、バスアービタ６は第１のリクエスト信号に応答して第１のデータ転送回路１０に第１のアクノリッジ信号を送信するので、第１のデータ転送回路１０は３８クロックサイクルの時間をかけて３２個のデータをＳＤＲＡＭ１に転送する。
【００９６】
第１のデータ転送回路１０がデータ転送を終了した後で、第２のデータ転送回路１４、第３のデータ転送回路１８、第４のデータ転送回路２２がいずれもデータ転送を行ったとすると、ステートマシンの状態が一巡して再び「データ転送１」の状態に戻るまでには１６０クロックサイクルの時間が必要となる。この間に第１の入力端子９を介して第１のバッファ７に書き込まれるデータの数は３２個であるから、第１のカウンタ８のカウント値はステートマシンの状態が「データ転送１」に遷移する直前において３２以上になっており、第１のデータ転送回路１０は第１のアクノリッジ信号に応答して再びデータ転送を実行することになる。
【００９７】
同様にして、第２のカウンタ１２、第３のカウンタ１６、及び第４のカウンタ２０についても１６０クロックサイクルの間にカウント値が３２増加するとともにデータ転送によって３２減少するから、ステートマシンの状態が一巡する間に各カウンタのカウント値は同じ値に戻ることになる。したがって、ある時点でステートマシンの状態が一巡する間に全てのデータ転送回路がデータ転送を実行したとすると、その後はステートマシンの状態が一巡する間に全てのデータ転送回路が必ず１回だけデータ転送を実行することになる。データ転送回路がデータ転送を行わない場合にはカウンタのカウント値は時間とともに増加するから、ある程度の時間が経過すると各カウンタのカウント値は必ず３２以上になり、ステートマシンの状態が一巡する間に各データ転送回路は必ず１回だけデータ転送を実行することになる。このように各バッファの全データ容量をある程度の大きさにすることによって、バッファのオーバーフロー及びアンダーフローを防ぎつつデータ転送を行うことが可能である。
【００９８】
ここでさらに、前述のタイミングとは異なるタイミングで各入出力端子を介して外部回路との間でデータが転送される場合について考える。すなわち、第１のバッファ７には１０クロックサイクルにつき３個のデータが書き込まれるとし、第２のバッファ１１には１６クロックサイクルにつき１個のデータが書き込まれるとし、第３のバッファ１５からは１０クロックサイクルにつき３個のデータが読み出されるとし、第４のバッファ１９からは１６クロックサイクルにつき１個のデータが読み出されるとする。
【００９９】
このとき、メモリ制御回路２と外部回路との間で転送されるデータは１６０クロックサイクルあたり１１６個（＝（１６０クロックサイクル）×（３個／１０クロックサイクル＋１個／１６クロックサイクル＋３個／１０クロックサイクル＋１個／１６クロックサイクル））であるから、これは同じ期間でＳＤＲＡＭ１との間で転送できるデータの最大数である１２８よりも少ないことがわかる。したがって、この場合にも各バッファの全データ容量をある程度の大きさにすることによって、オーバーフローやアンダーフローを発生させることなくデータ転送を行うことができる。これを図４を用いて説明する。
【０１００】
図４はステートマシンの状態遷移が発生した時点における経過時間、４個のカウンタのカウント値、及び５種類のアクノリッジ信号のレベルを示したものである。なお、経過時間は１クロックサイクルを１単位として示している。図４では各カウンタのカウント値がいずれも３２となり、ステートマシンの状態が「データ転送１」に遷移した時点の経過時間を０としている。
【０１０１】
ステートマシンの状態が「データ転送１」に遷移する直前に第１のカウンタ８のカウント値が３２であれば、バスアービタ６は第１のリクエスト信号に応答して第１のアクノリッジ信号をハイレベルに変化させ、第１のデータ転送回路１０は３８クロックサイクルの間に３２個のデータを第１のバッファ７からＳＤＲＡＭ１に転送する。「データ転送１」への状態遷移が発生してから３クロックサイクル後、６クロックサイクル後、１０クロックサイクル後という周期でデータが第１のバッファ７に書き込まれるとすると、「データ転送２」への状態遷移が発生する直前には第１のカウンタのカウント値は１１になっている。同様にして、「データ転送１」への状態遷移が発生してから１６クロックサイクル後に第２のバッファ１１にデータが書き込まれるとすると、「データ転送２」への状態遷移が発生する直前には第２のカウンタのカウント値は３４になっている。第３のカウンタ１６及び第４のカウンタ２０についても同様であり、「データ転送２」への状態遷移が発生する直前にはカウント値はそれぞれ４３及び３４になっている。
【０１０２】
このようにして、ステートマシンの状態が４巡して「データ転送１」の状態になったときには、図４に示したように、４１８クロックサイクルが経過しており、第１のカウンタ８、第２のカウンタ１２、第３のカウンタ１６、第４のカウンタ２０のカウント値はそれぞれ２９，２６，２９，２６といずれも経過時間が０の時点よりも小さくなっている。したがって、この場合にも、バスアービタ６は各バッファをオーバーフロー又はアンダーフローさせることなく、各データ転送回路が実行するデータ転送のタイミングを適切に制御できることがわかる。
【０１０３】
ここで、図４に示した５種類のアクノリッジ信号の状態を見ると、ステートマシンの状態が４巡する間に実行されたデータ転送の回数は、第１のデータ転送回路１０及び第３のデータ転送回路１８に関しては４回ずつ、第２のデータ転送回路１４及び第４のデータ転送回路２２に関しては１回ずつとなっている。すなわち、各入力端子及び出力端子から単位時間あたりに入出力されるデータの数がいずれも５クロックサイクルに１個であったときには、各データ転送回路はステートマシンが一巡する間に必ず１回だけ実行されていたのに対して、各入力端子及び出力端子から単位時間あたりに入出力されるデータの数が異なる場合には、単位時間あたりに入出力端子から入出力されるデータの数が多いデータ転送回路ほど、バスアービタ６によってデータ転送が頻繁に許可されていることがわかる。
【０１０４】
このように、バスアービタ６は、より多くのデータを転送する必要があるデータ転送回路に対して、より多くのデータ転送の機会を与えることが可能になっている。また、１つのデータ転送回路にデータ転送を許可する頻度は、単位時間あたりに入力端子及び出力端子から入出力されるデータの量に応じて自動的に調節される。単位時間あたりに外部回路との間で転送されるデータの数がＳＤＲＡＭ１との間で転送できるデータの最大数を超えない限りは、データが外部回路との間で入出力されるタイミングは任意であってよく、また、入出力タイミングは上記した二つの例のように必ずしも周期的である必要はなく、単位時間あたりに入出力されるデータの数は時間的とともに変化してもよい。さらに、単位時間あたりに外部回路との間で転送されるデータの数がＳＤＲＡＭ１との間で転送できるデータの最大数を瞬間的に超えたとしても、ある程度長い時間で平均したときにＳＤＲＡＭ１との間で転送できるデータの最大数を超えていなければ、各バッファの全データ容量をある程度大きくすることによって、各バッファをオーバーフロー又はアンダーフローさせることなくデータ転送を行うことができる。
【０１０５】
なお、実施の形態１では特に各データ転送回路がリクエスト信号を送信するカウント値を同じ３２という値にしたが、３２個には限らず、また、必要に応じてデータ転送回路ごとに異なる値にしてもよい。また、実施の形態１では特に各データ転送回路が一度に転送するデータ数を同じ３２個としたが、３２個には限らず、また、必要に応じてデータ転送回路ごとに異なる値にしてもよい。
【０１０６】
さらに、実施の形態１ではステートマシンの状態が変化するときにリクエスト信号のレベルを検出してアクノリッジ信号を送信するかしないかを決定するようにしたが、リクエスト信号のレベルを検出するタイミングを、これよりも１クロック又は数クロック前後にずらしてもよい。
【０１０７】
実施の形態２．
実施の形態２は、実施の形態１であるメモリ制御回路と同じ構成のメモリ制御回路を用い、各バッファに記憶されているデータのカウント方法のみが異なる場合についての例である。以下、実施の形態１とは異なる部分についてのみ説明する。
【０１０８】
実施の形態１では、第１のバッファ７にデータが書き込まれるタイミングをＳＤＲＡＭ１を駆動するクロックの周期を基準として、例えば、５クロックサイクルに１回などとした。しかし、実際の回路ではこのような場合には第１のバッファ７の書き込みに用いるクロックの周波数を、ＳＤＲＡＭ１を駆動するクロックの周波数の５分の１にする方が回路の消費電力が少なくなるために有利である。
【０１０９】
このとき、第１のバッファ７の読み出しに用いるクロックの周波数を、ＳＤＲＡＭ１へのデータ転送を高速に行うために、ＳＤＲＡＭ１を駆動するクロックと同じクロックを用いるとすると、第１のバッファ７の書き込み動作で用いるクロックと読み出し動作で用いるクロックが異なるために、そのままでは同期回路で第１のバッファ７に記憶されているデータの数をカウントすることはできない。
【０１１０】
そこで、実施の形態２では第１のデータ転送回路１０の内部に、図５に示す回路を内蔵させる。
【０１１１】
図において、２５は第１の入力端子９から入力されたデータが第１のバッファ７に書き込むべき有効なデータであることを示すデータイネーブル信号を入力するデータイネーブル信号入力端子、２６は第１のバッファ７の書き込み動作に用いるライトクロックを入力するライトクロック入力端子、２７は第１のバッファ７の読み出し動作に用いるリードクロックを入力するリードクロック入力端子である。また、図において、２８はデータイネーブル信号がイネーブル状態になるたびに反転するパルスを生成する反転パルス生成回路、２９は反転パルス生成回路２８が発生した反転パルスのエッジを検出する同期微分回路、３０は同期微分回路２９の出力を第１のカウンタ８に供給するデータイネーブル信号出力端子である。
【０１１２】
反転パルス生成回路２８には、データイネーブル信号入力端子２５から入力されたデータイネーブル信号と後述する第１のＤ−フリップフロップ３２の出力との排他的論理和を出力する第１のＸＯＲゲート３１、及び第１のＸＯＲゲート３１の出力をライトクロックに同期させて出力する第１のＤ−フリップフロップ３２が内蔵されている。
【０１１３】
また、同期微分回路２９には、第１のＤ−フリップフロップ３２の出力をリードクロックに同期させる第２のＤ−フリップフロップ３３、第２のＤ−フリップフロップ３３の出力をリードクロックの１周期に相当する期間だけ遅延させる第３のＤ−フリップフロップ３４、及び第２のＤ−フリップフロップ３３の出力と第３のＤ−フリップフロップ３４の出力の排他的論理和をデータイネーブル信号出力端子３０に出力する第２のＸＯＲゲート３５が内蔵されている。
【０１１４】
ここで、データイネーブル信号入力端子２５から入力されるデータイネーブル信号は第１の入力端子９から入力されたデータイネーブル信号と同じ波形であるとし、データイネーブル信号はハイアクティブの信号であるとする。すなわち、第１の入力端子９から入力されたデータイネーブル信号がハイレベルであるときに、第１の入力端子９から入力されたデータが第１のバッファ７に書き込まれるとする。
【０１１５】
また、第１の入力端子９から入力されるデータ及びデータイネーブル信号は第１のバッファ７の書き込み動作に用いるライトクロックに同期しているとし、第１のバッファ７の読み出し動作に用いるリードクロックは前述したようにＳＤＲＡＭ１を駆動するクロックと同じ信号であるとし、このクロックはライトクロックの周波数よりも２．５倍だけ高い周波数であるとする。
【０１１６】
第１のカウンタ８は、データイネーブル信号出力端子３０から出力されるデータイネーブル信号がハイレベルになるたびにカウント値に１加算し、第１のバッファ７からデータを読み出すたび、又はＳＤＲＡＭ１に対してライトコマンドを発行するたびにカウント値を１減算することによって、第１のバッファ７に記憶されているデータの数をリードクロックのみを用いてカウントすることができる。これを図６を用いて説明する。
【０１１７】
図には、リードクロック及びライトクロック、データイネーブル信号入力端子２５から入力されるデータイネーブル信号、第１のＤ−フリップフロップ３２の出力信号、第２のＤ−フリップフロップ３３の出力信号、第３のＤ−フリップフロップ３４の出力信号、データイネーブル信号出力端子３０から出力されるデータイネーブル信号、ハイレベルになるたびに第１のバッファ７からデータが読み出されることを示すリードイネーブル信号、第１のカウンタ８のカウント値について示している。なお、図では、データイネーブル信号入力端子２５から入力されるデータイネーブル信号をデータイネーブル信号入力、データイネーブル信号出力端子３０から出力されるデータイネーブル信号をデータイネーブル信号出力、Ｄ−フリップフロップをＤ−ＦＦと略記している。
【０１１８】
図６に示されるように、タイミングｔＪ，ｔＫ，ｔＬにおいてデータイネーブル信号入力端子２５から入力されるデータイネーブル信号がハイレベルであるとする。このとき第１のＸＯＲゲート３１の出力は第１のＤ−フリップフロップ３２の出力を反転させるように動作するから、タイミングｔＪ，ｔＫ，ｔＬにおいて第１のＤ−フリップフロップ３２の出力レベルは反転する。
【０１１９】
第２のＤ−フリップフロップ３３はライトクロックに同期した第１のＤ−フリップフロップ３２の出力をリードクロックに同期させるように動作し、タイミングｔＪ，ｔＫ，ｔＬの直後にリードクロックの立ち上がりが現れるタイミングであるｔＭ，ｔＯ，ｔＲで出力レベルが反転する。第３のＤ−フリップフロップ３４の出力は第２のＤ−フリップフロップ３３の出力をリードクロックの１周期だけ遅延させたものであるから、タイミングｔＮ，ｔＰ，ｔＳでレベルが反転する。そして、データイネーブル信号出力端子３０から出力されるデータイネーブル信号は、第２のＤ−フリップフロップ３３の出力と第３のＤ−フリップフロップ３４の出力の排他的論理和であるから、これはタイミングｔＮ，ｔＰ，ｔＳでハイレベルとなる。
【０１２０】
第１のカウンタ８は、データイネーブル信号出力端子３０から出力されるデータイネーブル信号がハイレベルになるたびにカウント値を１加算し、リードイネーブル信号がハイレベルになるたびにカウント値を１減算するから、リードイネーブル信号がタイミングｔＱ以降からリードクロックの立ち上がりエッジで常にハイレベルであったとすると、カウント値はタイミングｔＮ，ｔＰで１加算され、タイミングｔＱ以降はタイミングｔＳを除いてリードクロックが立ち上がるたびに１減算される。タイミングｔＳでは、データイネーブル信号出力端子３０から出力されるデータイネーブル信号とリードイネーブル信号がともにハイレベルとなっているのでカウント値は加算も減算もされない。
【０１２１】
図６からわかるように、データイネーブル信号入力端子２５においてライトクロックの３周期に相当する期間だけハイレベルであったデータイネーブル信号は、データイネーブル信号出力端子３０においてリードクロックのやはり３周期に相当する期間だけハイレベルになっており、図４に示した回路を用いることによって、データイネーブル信号を異なる周波数のクロック信号に同期させることができることがわかる。このようにして、メモリ制御回路２の外部回路は低い周波数のクロックで駆動させつつ、メモリ制御回路２の一部だけを高い周波数のクロックで駆動させることによって回路全体の消費電力を抑えることができる。
【０１２２】
実施の形態２では特にリードクロックがライトクロックの２．５倍の周波数である場合について説明したが、リードクロックがライトクロックよりも高い周波数であれば任意の周波数であってよく、リードクロック及びライトクロックの周波数は時間的に変化してもよい。
【０１２３】
また、実施の形態２では第１のバッファ７からＳＤＲＡＭ１に対してデータ転送を行う第１のデータ転送回路１０について説明したが、第２のデータ転送回路や、ＳＤＲＡＭ１からバッファに対してデータ転送を行う第３のデータ転送回路１８及び第４のデータ転送回路２２についても同様な回路を内蔵することでバッファに記憶されているデータの数をカウントすることができる。第３のデータ転送回路１８及び第４のデータ転送回路２２の場合には、リードクロックとライトクロックの関係が第１のデータ転送回路１０とは逆になる。
【０１２４】
実施の形態３．
実施の形態３は実施の形態１とは異なる構成を持つメモリ制御回路の例である。
【０１２５】
図７は実施の形態３であるメモリ制御回路の構成（本発明によるメモリバスの調停方法を実施するための構成）を示す図である。図７において、実施の形態１に関する図１と同じ動作をする部分には同じ符号を付し、説明の重複を避ける。
【０１２６】
図において、３６はメモリ制御回路、３７はバスアービタである。また、図において、３８はＳＤＲＡＭ１に転送するデータを一時的に記憶する第５のバッファ、３９は第５のバッファ３８に記憶されているデータの数をカウントする第５のカウンタ、４０はデータ及び制御信号を入力する第３の入力端子、４１は制御信号を出力する第３の出力端子、４２は第３の入力端子４０から入力されたデータを随時第５のバッファ３８に書き込み、バスアービタ３７から内部メモリバス５を使用したデータ転送の実行が許可されたときには、第５のバッファ３８からデータを読み出し、メモリインターフェイス４を経由してＳＤＲＡＭ１に転送する第５のデータ転送回路である。
【０１２７】
また、図において、４３はＳＤＲＡＭ１から転送されたデータを一時的に記憶する第６のバッファ、４４は第６のバッファ４３に記憶されているデータの数をカウントする第６のカウンタ、４５は制御信号を入力する第４の入力端子、４６はデータ及び制御信号を出力する第４の出力端子、４７はバスアービタ３７から内部メモリバス５を使用したデータ転送の実行が許可されたときにはＳＤＲＡＭ１からメモリインターフェイス４を経由して第６のバッファ４３にデータを書き込み、第４の出力端子４５から入力される制御信号に応じて第６のバッファ４３からデータを読み出して第４の出力端子４６からデータを制御信号とともに出力する第６のデータ転送回路である。
【０１２８】
同様に、図において、４８はＳＤＲＡＭ１から転送されたデータを一時的に記憶する第７のバッファ、４９は第７のバッファ４８に記憶されているデータの数をカウントする第７のカウンタ、５０は制御信号を入力する第５の入力端子、５１はデータ及び制御信号を出力する第５の出力端子、５２はバスアービタ３７から内部メモリバス５を使用したデータ転送の実行が許可されたときにはＳＤＲＡＭ１からメモリインターフェイス４を経由して第７のバッファ４８にデータを書き込み、第５の入力端子５０から入力される制御信号に応じて第７のバッファ４８からデータを読み出して第５の出力端子５１からデータを制御信号とともに出力する第７のデータ転送回路である。
【０１２９】
さらに、図において、５３はＳＤＲＡＭ１から転送されたデータを一時的に記憶する第８のバッファ、５４は第８のバッファ５３に記憶されているデータの数をカウントする第８のカウンタ、５５はバスアービタ３７から内部メモリバス５を使用したデータ転送の実行が許可されたときにはＳＤＲＡＭ１からメモリインターフェイス４を経由して第８のバッファ５３にデータを書き込む第８のデータ転送回路である。
【０１３０】
同様に、図において、５６はＳＤＲＡＭ１から転送されたデータを一時的に記憶する第９のバッファ、５７は第９のバッファ５６に記憶されているデータの数をカウントする第９のカウンタ、５８はバスアービタ３７から内部メモリバス５を使用したデータ転送の実行が許可されたときにはＳＤＲＡＭ１からメモリインターフェイス４を経由して第９のバッファ５６にデータを書き込む第９のデータ転送回路である。
【０１３１】
そして、図において、５９はバスアービタ３７から内部メモリバス５を使用したデータ転送の実行が許可されたときには、第８のバッファ５３及び第９のバッファ５６からデータを読み出し、読み出したデータ同士を用いて適当な演算を行ってからＳＤＲＡＭ１にデータを書き込む第１０のデータ転送回路である。
【０１３２】
また、図において、６０は第６の入力端子、６１は第６の出力端子であり、これらの入出力端子からは制御信号が入出力される。
【０１３３】
図７に示した実施の形態３であるメモリ制御回路の動作は以下の通りである。
【０１３４】
第３の入力端子４０から入力されるデータは、例えば、マイクロプロセッサ（図示せず）などから転送されるグラフィックスデータであるとし、第３の入力端子４０から入力される制御信号はデータイネーブル信号及びグラフィックスデータの転送開始命令であるとする。また、第３の出力端子４１から出力される制御信号は、グラフィックスデータの転送終了信号であるとする。第３の入力端子４０から入力されるグラフィックスデータの転送開始命令は、マイクロプロセッサが最初のデータを第３の入力端子４０に転送する前に発行され、第３の出力端子４１から出力されるグラフィックスデータの転送終了信号は、マイクロプロセッサが第３の出力端子４１に対して最後に転送したデータを、第５のデータ転送回路４２がＳＤＲＡＭ１に転送し終わったときにアクティブ状態となる信号であるとする。
【０１３５】
同様に、第４の入力端子４５から入力される制御信号は、マイクロプロセッサが送信するグラフィックスデータの転送開始命令であるとする。また、第４の出力端子４６から出力されるデータはマイクロプロセッサに転送されるグラフィックスデータであるとし、第４の出力端子４６から出力される制御信号はデータイネーブル信号及びグラフィックスデータの転送終了信号であるとする。第４の入力端子４５から入力されるグラフィックスデータの転送開始命令は、第４の出力端子４６から最初のデータが出力される前に発行されるとし、第４の出力端子４６から出力されるグラフィックスデータの転送終了信号は、マイクロプロセッサに転送すべき最後のデータが第４の出力端子４６から出力されたときにアクティブ状態となる信号であるとする。データはデータイネーブル信号に同期して第４の出力端子４６から出力される。
【０１３６】
さらに、第５の入力端子５０から入力される制御信号は、有効表示期間を示すデータイネーブル信号及び表示装置（図示せず）の走査に用いる垂直同期信号であるとする。また、第５の出力端子５１から出力されるデータは表示装置に表示するグラフィックスデータであるとし、第５の出力端子５１から出力される制御信号は第５の入力端子５０から入力された垂直同期信号及びデータイネーブル信号を波形を変えずに適当に遅延させて得られる垂直同期信号及びデータイネーブル信号であるとする。データは第５の入力端子５０から入力されたデータイネーブル信号がイネーブル状態であるときに第５のバッファ３８から読み出されて第５の出力端子５１から出力される。
【０１３７】
第８のデータ転送回路５５、第９のデータ転送回路５８、及び第１０のデータ転送回路はＳＤＲＡＭ１の互いに異なるメモリ領域間でデータをブロック転送するために使用される。第１０のデータ転送回路５９がＳＤＲＡＭ１にデータを転送する前に、第８のデータ転送回路５５及び第９のデータ転送回路５８が読み出したデータを用いて適当な演算が行われる。この種の演算としてはグラフィックス処理で一般的に行われているアルファブレンディングやラスターオペレーションなどの演算がある。
【０１３８】
第６の入力端子６０から入力される制御信号はグラフィックスデータの転送開始命令であるとし、第６の出力端子６１から出力される制御信号はグラフィックスデータの転送終了信号であるとする。第６の入力端子６０から入力されるグラフィックスデータの転送開始命令は、第８のデータ転送回路５５がＳＤＲＡＭ１に対して最初のリードコマンドを発行する前にマイクロプロセッサによって送信され、第６の出力端子６１から出力されるグラフィックスデータの転送終了信号は第１０のデータ転送回路５９が最後のデータをＳＤＲＡＭ１に転送し終わったときにマイクロプロセッサに対して送信する信号であるとする。
【０１３９】
第５のカウンタ３９は、実施の形態１における第１のカウンタ８と同様な方法で第５のバッファ３８に記憶されているデータの数をカウントする。また、第６のカウンタ４４及び第７のカウンタ４９は実施の形態１における第３のカウンタ１６と同様な方法でそれぞれ第６のバッファ４３及び第７のバッファ４８に記憶されているデータの数をカウントする。
【０１４０】
第８のカウンタ５４は、第８のデータ転送回路５５がＳＤＲＡＭ１に対してリードコマンドを発行するたびにカウント値を１加算させ、第１０のデータ転送回路５９が第８のバッファ５３からデータを１つ読み出すたびにカウント値を１減算させる。同様に、第９のカウンタ５７は、第９のデータ転送回路５８がＳＤＲＡＭ１に対してリードコマンドを発行するたびにカウント値を１加算させ、第１０のデータ転送回路５９が第９のバッファ５６からデータを１つ読み出すたびにカウント値を１減算させる。
【０１４１】
第５のバッファ３８及び第６のバッファ４３は、それぞれ第５のデータ転送回路４２及び第６のデータ転送回路４７がグラフィックスデータの転送開始命令を受信すると各バッファに記憶されているデータを全て消去する。また、第７のバッファ４８は、第７のデータ転送回路５２に垂直同期信号が入力されたときにバッファに記憶されているデータを全て消去する。さらに、第８のバッファ５３及び第９のバッファ５６は、第１０のデータ転送回路５９がグラフィックスデータの転送開始命令を受信すると各バッファに記憶されているデータを全て消去する。バッファに記憶されているデータが消去されると各バッファに対応するカウンタはカウント値を“０”にリセットする。これは、実施の形態１と同じく、誤動作が発生したときでもグラフィックスデータの転送開始命令が発行されたときには正常な状態に復帰できるようにするための措置である。
【０１４２】
さらに、第５のデータ転送回路４２、第６のデータ転送回路４７、及び第７のデータ転送回路５２はそれぞれ第５のカウンタ３９、第６のカウンタ４４、及び第７のカウンタ４９のカウント値が“３２”以上であるときにバスアービタ３７に対してリクエスト信号を送信するとし、バスアービタ３７からアクノリッジ信号が送信されたときには、それぞれ第５のカウンタ３９、第６のカウンタ４４、及び第７のカウンタ４９のカウント値が“０”になるまでデータ転送を実行する。
【０１４３】
一方、第８のデータ転送回路５５は第８のカウンタ５４のカウント値が第８のバッファ５３の全データ容量よりも小さい値であるときにバスアービタ３７に対してリクエスト信号を送信するとし、バスアービタ３７からアクノリッジ信号が送信されたときには、第８のカウンタ５４のカウント値が第８のバッファ５３の全データ容量と等しくなるまでデータ転送を実行する。同様に、第９のデータ転送回路５８は第９のカウンタ５７のカウント値が第９のバッファ５６の全データ容量よりも小さい値であるときにバスアービタ３７に対してリクエスト信号を送信するとし、バスアービタ３７からアクノリッジ信号が送信されたときには、第９のカウンタ５７のカウント値が第９のバッファ５６の全データ容量と等しくなるまでデータ転送を実行する。
【０１４４】
また、第１０のデータ転送回路５９は第８のカウンタ５４又は第９のカウンタ５７のカウント値のいずれかが“０”以外であるときにリクエスト信号をバスアービタ３７に送信し、バスアービタ３７からアクノリッジ信号が送信されたときには、第８のカウンタ５４又は第９のカウンタ５７のカウント値のいずれかが“０”になるまでデータ転送を実行する。第１０のデータ転送回路５９は複数のバッファからデータを読み出してデータ転送を実行するようになっているため、リクエスト信号を発生する条件及びデータ転送を終了する条件には複数のカウンタが関係している。
【０１４５】
ここで、バスアービタ３７に内蔵されているステートマシンの状態遷移図は図８に示したようになっている。すなわち、メモリ制御回路３６が動作を開始したときにはステートマシンの状態は図８の「初期状態」になっており、適当なタイミングでＳＤＲＡＭ１の初期化を行う「ＳＤＲＡＭ初期化」の状態に遷移するところまでは実施の形態１と同様である。
【０１４６】
図８において、状態「グラフィックス表示」はＳＤＲＡＭ１から表示装置へのデータ転送を実行する第７のデータ転送回路５２に関連付けれているとし、以下、状態「書き込み」はマイクロプロセッサのデータをＳＤＲＡＭ１に書き込むために使用される第５のデータ転送回路４２に、状態「読み出し」はＳＤＲＡＭ１からデータを読み出してマイクロプロセッサに転送するために使用される第６のデータ転送回路４７に、状態「ブロック転送１」は第１０のデータ転送回路５９に、状態「ブロック転送２」は第８のデータ転送回路５５に、状態「ブロック転送３」は第９のデータ転送回路５８にそれぞれ関連付けられているものとする。
【０１４７】
ＳＤＲＡＭ１の初期化が終了すると、ステートマシンの状態は状態「グラフィックス表示」に遷移する。このとき第７のデータ転送回路５２がリクエスト信号をバスアービタ３７に対して送信していれば、バスアービタ３７は第７のデータ転送回路５２にアクノリッジ信号を送信する。第７のデータ転送回路５２がリクエスト信号を送信していないか、第７のデータ転送回路５２がバスアービタ３７に対してデータ転送の終了を通知した場合には、ステートマシンは次状態に遷移する。
【０１４８】
「グラフィックス表示」の次状態として「書き込み」、「読み出し」、「ブロック転送１」の３つの状態があるが、ステートマシンの状態は、第５のデータ転送回路４２がリクエスト信号を送信している場合には「書き込み」に遷移し、第５のデータ転送回路４２がリクエスト信号が送信されておらず、第６のデータ転送回路４７がリクエスト信号を送信している場合には「読み出し」に遷移し、第５のデータ転送回路４２及び第６のデータ転送回路４７がいずれもリクエスト信号を送信していないときには、「ブロック転送１」に遷移する。
【０１４９】
したがって、「グラフィックス表示」の次状態への状態遷移が発生したときに第５のデータ転送回路４２がリクエスト信号を送信していたとすると、ステートマシンの状態は「書き込み」に遷移し、バスアービタ３７は第５のデータ転送回路４２に対してアクノリッジ信号を送信する。第５のデータ転送回路４２がバスアービタ３７に対してデータ転送の終了を通知すると、ステートマシンの状態は「リフレッシュ」に遷移する。
【０１５０】
同様に、「グラフィックス表示」の次状態への状態遷移が発生したときに第５のデータ転送回路４２がリクエスト信号を送信しておらず、第６のデータ転送回路４７のみがリクエスト信号を送信されていたとすると、ステートマシンの状態は「読み出し」に遷移し、バスアービタ３７は第６のデータ転送回路４７に対してアクノリッジ信号を送信する。ここで、第４の出力端子４６から最後にグラフィックスデータの転送終了信号が送信されてから第４の出力端子４５からグラフィックスデータの転送開始命令がまだ入力されていないときには、マイクロプロセッサがＳＤＲＡＭ１に記憶されているデータを必要としていないので、第６のデータ転送回路４７は、第１０のデータ転送回路５９にデータ転送の機会を与えるために、第６のカウンタ４４のカウント値にかかわらず第６のデータ転送回路４７に対してリクエスト信号を送信しないようにすることが望ましい。第６のデータ転送回路４７がバスアービタ３７に対してデータ転送の終了を通知すると、ステートマシンの状態は「リフレッシュ」に遷移する。
【０１５１】
さらに、「グラフィックス表示」の次状態への状態遷移が発生したときに第５のデータ転送回路４２及び第６のデータ転送回路４７がいずれもリクエスト信号を送信していなかったとすると、ステートマシンの状態は「ブロック転送１」に遷移し、バスアービタ３７は第１０のデータ転送回路５９がリクエスト信号を送信していれば、第１０のデータ転送回路５９に対してアクノリッジ信号を送信する。「ブロック転送１」への状態遷移が発生したときに第１０のデータ転送回路５９がリクエスト信号を送信していないか、第１０のデータ転送回路５９がバスアービタ３７に対してデータ転送の終了を通知するか、第６の出力端子６１から最後にグラフィックスデータの転送終了信号が送信された後に、第６の入力端子６０からグラフィックスデータの転送開始命令がまだ入力されていないかのいずれかの場合には、ステートマシンの状態は「ブロック転送２」に遷移する。第６の出力端子６１から最後にグラフィックスデータの転送終了信号を送信してから第６の入力端子６０からグラフィックスデータの転送開始命令がまだ入力されていない場合には、そもそもブロック転送を行う必要がないので、第１０のデータ転送回路５９はバスアービタ３７に対してリクエスト信号を送信しないようにしてもよい。
【０１５２】
「ブロック転送２」及び「ブロック転送３」はそれぞれ第８のデータ転送回路５５及び第９のデータ転送回路５８に関連付けられた状態であり、「ブロック転送１」で説明した条件と同様の条件で状態遷移が発生する。このとき、第８のデータ転送回路５５及び第９のデータ転送回路５８がリクエスト信号を送信していたとしても、第６の出力端子６１から最後にグラフィックスデータの転送終了信号が送信された後に、第６の入力端子６０からグラフィックスデータの転送開始命令がまだ入力されていない場合には、バスアービタ３７は第８のデータ転送回路５５及び第９のデータ転送回路５８に対してアクノリッジ信号を発生せず、ステートマシンは次状態に遷移する。グラフィックスデータの転送開始命令がまだ入力されていない場合には、第８のデータ転送回路５５及び第９のデータ転送回路５８はバスアービタ３７に対してリクエスト信号を送信しないようにしてもよい。「ブロック転送３」の次状態は「リフレッシュ」であり、「リフレッシュ」において状態遷移が発生すると状態は再び「グラフィックス表示」に戻る。
【０１５３】
このように、マイクロプロセッサからＳＤＲＡＭ１へのデータ転送、ＳＤＲＡＭ１からマイクロプロセッサへのデータ転送、ＳＤＲＡＭ１からＳＤＲＡＭ１へのデータ転送を同時に実行する必要がない場合には、ステートマシンの状態遷移に分岐を設けることによって、ステートマシンが一巡する周期を早めることができる。マイクロプロセッサはグラフィックスデータの転送開始命令及び転送終了信号を参照することによって現在実行中のデータ転送を知ることができるため、実行中のデータ転送が終了するまでは新しくグラフィックスデータの転送命令を発行しないようにすればよい。
【０１５４】
ステートマシンの状態遷移の分岐はデータ転送に優先順位を付けるためにも使用することができる。仮に第５のデータ転送回路４２、第６のデータ転送回路４７、第１０のデータ転送回路５９の全てがグラフィックスデータの転送開始命令を受信しており、かつリクエスト信号を送信する場合があるとすると、最も優先順位が高いのは第５のデータ転送回路４２が行うデータ転送であり、次に優先順位が高いのは第６のデータ転送回路４７が行うデータ転送である。最も優先順位が低いのは第８のデータ転送回路５５、第９のデータ転送回路５８及び第１０のデータ転送回路５９が行うデータ転送であり、これら３個のデータ転送回路が行うデータ転送の優先順位は同じであるとみなすことができる。
【０１５５】
また、バスアービタ３７は第７のデータ転送回路５２がリクエスト信号を送信しているときには、第８のデータ転送回路５５、第９のデータ転送回路５８、及び第１０のデータ転送回路５９のいずれかがデータ転送を実行中であっても、カウンタの値に関わらず実行中のデータ転送を中断するように通知する。データ転送の中断の通知を行うために専用の信号線を各データ転送回路ごとに設けてもよいが、例えば、データ転送を実行中のデータ転送回路に対してアクノリッジ信号の送信を止め、アクノリッジ信号をローレベルにすることで通知を行うとしてもよい。データ転送の実行中にアクノリッジ信号がローレベルとなったデータ転送回路は適当な方法でなるべく速やかに実行中のデータ転送を終了し、バスアービタ３７にデータ転送の終了を通知するとする。バスアービタ３７がデータ転送回路からデータ転送の終了を通知された場合には、ステートマシンは次状態に遷移する。
【０１５６】
さらに、バスアービタ３７は第７のデータ転送回路５２がリクエスト信号を送信しているときには、第８のデータ転送回路５５、第９のデータ転送回路５８、第１０のデータ転送回路５９がリクエスト信号をバスアービタ３７に対して送信しているときでもアクノリッジ信号をこれら３個のデータ転送回路に送信せずに次状態に遷移させるとする。
【０１５７】
第７のデータ転送回路５２は、ＳＤＲＡＭ１から表示装置へのデータ転送を実行しており、一般的にはグラフィックスデータのブロック転送は実行開始が１フレーム程度前後しても良いのに対して、表示装置に対するデータ転送は表示画面の所定の座標に正確に映像データを表示する必要から最もリアルタイム性が高く、したがってデータ転送の優先順位を最も高く設定する必要がある。このように、優先順位の高いデータ転送回路がリクエスト信号を送信しているときには、優先度の低いデータ転送回路が実行しているデータ転送を中断する、又は優先度の低いデータ転送回路に対してアクノリッジ信号を送信しないようにすることによってバッファのオーバフローやアンダーフローを発生させること無く、破綻のないメモリバスの調停を行うことができる。
【０１５８】
実施の形態４．
図９はこの発明の実施の形態４であるメモリ制御回路の構成（本発明によるメモリバスの調停方法を実施するための構成）を示す図である。図９において、実施の形態３に関する図７と同じ動作をする部分には同じ符号を付す。実施の形態４は実施の形態３におけるバスアービタ６２に内蔵されているステートマシンを命令キューに置き換えたものである。実施の形態４であるメモリ制御回路は実施の形態３と同じ構成をとるので、ここではバスアービタ３７ａに内蔵されている命令キューの動作についてのみ説明する。
【０１５９】
命令キューはシフトレジスタによって構成されており、シフトレジスタの段数は同時にメモリバスの使用権を要求する回路の最大数に等しい７段のレジスタで構成する。実施の形態４では同時にメモリバスの使用権を要求する回路は６個のデータ転送回路４２，４７，５２，５５，５８，５９に１個のリフレッシュコマンド発生回路２４を加えた合計７個の回路である。
【０１６０】
メモリ制御回路３６が動作を開始したときにはシフトレジスタを構成する７個のレジスタの値は全て“０”で初期化されているとする。メモリバスの使用権を要求する７個の回路のいずれかがバスアービタ３７ａに対してリクエスト信号を送信すると、その回路に対応した値を命令キューの最後尾に登録する。メモリ制御回路３６が動作を開始したときには命令キューの長さは０である。回路に対応した値を命令キューに登録することによってデータ転送命令及びリフレッシュ命令の実行を予約しておくことができる。ただし、各回路に対応する値が既に７個のシフトレジスタのいずれかに登録されているときには、これらの回路がリクエスト信号を送信したとしても二重に登録しないようにする。ここで、リフレッシュコマンド発生回路２４は、実施の形態１で述べたように、リフレッシュ動作が終了したことを通知する場合を除いて、常にバスアービタ３７ａに対してリクエスト信号を送信しているとする。
【０１６１】
ここで、仮に第５のデータ転送回路４２に関連付けられた値を“５”とし、第５のデータ転送回路４２がバスアービタ３７ａに対してリクエスト信号を送信したときに、命令キューの長さが０であったとすると、命令キューの先頭である１段目のレジスタに値“５”を登録し、命令キューの長さは１だけ長くなって１となる。同様に、命令キューの長さが３であるときに第５のデータ転送回路４２に関連付けられた値を登録するときは、４段目のレジスタに値“５”を登録し、命令キューの長さは１だけ長くなって４となる。
【０１６２】
これ以外の６個の回路に対応する値を登録するときも同様である。以下、第６のデータ転送回路４７に関連付けられた値を“６”、第７のデータ転送回路５２に関連付けられた値を“７”、第８のデータ転送回路５５に関連付けられた値を“８”、第９のデータ転送回路５８に関連付けられた値を“９”、第１０のデータ転送回路５９に関連付けられた値を“１０”、リフレッシュコマンド発生回路２４に関連付けられた値を“１１”とする。このようにして、時間的に早くリクエスト信号を送信した回路から順番に命令キューに登録される。
【０１６３】
ここで、特に７個の回路のいずれか複数の回路が同時にリクエスト信号を送信するような場合には、所定の優先順位に従っていずれかを命令キューの前段に登録するか、所定の優先順位に従っていずれかを時間的に先に命令キューに登録するようにすればよい。
【０１６４】
バスアービタ３７ａは命令キューの先頭である１段目のレジスタに登録されている値に関連付けられた回路に対してアクノリッジ信号を送信する。例えば、１段目のレジスタに登録されている値が“５”であるとすると、バスアービタ３７ａは第５のデータ転送回路４２に対してアクノリッジ信号を送信する。この後、バスアービタ３７ａが第５のデータ転送回路４２からデータ転送の終了を通知されると、シフトレジスタに各レジスタ値を１段前のレジスタにシフトさせ、新しく命令キューの先頭に値が登録された回路に対してアクノリッジ信号を送信する。以下、データ転送又はリフレッシュ動作の終了が通知されるたびに、同様なシフト動作を繰り返す。
【０１６５】
ここで、実施の形態３で行ったようにマイクロプロセッサからＳＤＲＡＭ１へのデータ転送、ＳＤＲＡＭ１からマイクロプロセッサへのデータ転送、ＳＤＲＡＭ１からＳＤＲＡＭ１へのデータ転送の順番でデータ転送の実行に優先順位を付ける場合には、第５のデータ転送回路４２がリクエスト信号を送信しているか、すでに“５”の値が命令キューに登録されている場合には、第６のデータ転送回路４７、第８のデータ転送回路５５、第９のデータ転送回路５８及び第１０のデータ転送回路５９がリクエスト信号を送信していても各回路に関連付けられた値を命令キューの最後尾に登録しないようにし、さらに、第６のデータ転送回路４７がリクエスト信号を送信しているか、すでに“６”の値が命令キューに登録されている場合には、第８のデータ転送回路５５、第９のデータ転送回路５８及び第１０のデータ転送回路５９がリクエスト信号を送信していても、各回路に関連付けられた値を命令キューの最後尾に登録しないようにすればよい。
【０１６６】
さらに、表示装置へのデータ転送を行う必要があるときにＳＤＲＡＭ１からＳＤＲＡＭ１へのデータ転送を行わないようにするためには、第７のデータ転送回路５２がリクエスト信号を発生した場合には、第８のデータ転送回路５５、第９のデータ転送回路５８及び第１０のデータ転送回路５９がリクエスト信号を送信していても各回路に関連付けられた値を命令キューの最後尾に登録せず、また、これらの回路に関連付けられた値が既に命令キューの先頭に登録されていたとしてもアクノリッジ信号を送信せずにシフト動作を行うようにすればよい。
【０１６７】
また、第８のデータ転送回路５５、第９のデータ転送回路５８及び第１０のデータ転送回路５９が実行しているデータ転送を中断したいときには、実施の形態３で述べた方法と同様な方法で中断させることができる。このようにしてステートマシンの代わりに命令キューを用いたとしてもメモリバスの調停を行うことが可能である。
【０１６８】
なお、実施の形態４ではリフレッシュコマンド発生回路２４がバスアービタ３７ａに対してリクエスト信号を送信したときに“１１”の値を命令キューに登録するとしたが、リフレッシュコマンド発生回路２４に関連付けられた値を登録する代わりに、バスアービタ３７ａは命令キューの長さが０のときにリフレッシュコマンド発生回路２４に対してアクノリッジ信号を送信するとしても良い。
【０１６９】
実施の形態５．
実施の形態５は、実施の形態１における４個のデータ転送回路と実施の形態４における６個のデータ転送回路を全て同じ内部メモリバスに接続したメモリ制御回路（本発明によるメモリバスの調停方法を実施するための構成）の例である。図１０には、実施の形態５におけるバスアービタ６２のほかは内部メモリバス５に接続されている回路のみを示し、バッファ、カウンタ、入力端子、出力端子、及びコマンド発生回路などのメモリ制御回路の各要素、並びに、ＳＤＲＡＭ及び外部メモリバスなどの要素は煩雑を避けるために図示を省略している。したがって、以下の説明においては、図１０のみではなく、図１、図７、及び図９をも用いる。
【０１７０】
図において、第１のデータ転送回路１０、第２のデータ転送回路１４、第３のデータ転送回路１８、及び第４のデータ転送回路２２は動画像データを扱う回路であるとし、毎フレームにおいて外部回路（図示せず）との間でデータ転送が行われるとする。また、第７のデータ転送回路５２はグラフィックスデータをＳＤＲＡＭ１から表示装置（図示せず）に毎フレーム転送する回路であるとする。これ以外の５つのデータ転送回路４２，４７，５５，５８，５９は、不定期に発行されるグラフィックス転送開始命令に基づいてグラフィックスデータの転送を実行するものとする。
【０１７１】
このとき、動画像データを扱う４個のデータ転送回路１０，１４，１８，２２及びグラフィックスデータを表示装置に転送する第７のデータ転送回路５２が行うデータ転送の優先順位は、残りの５つのデータ転送回路４２，４７，５５，５８，５９が不定期に行うデータ転送よりも優先順位を高くする方が望ましい。これは不定期にデータ転送を行う後者の５個のデータ転送回路４２，４７，５５，５８，５９がマイクロプロセッサと適切なハンドシェイクを行うことでデータ転送を行うタイミングをある程度遅らせることができるのに対して、前者の５個のデータ転送回路１０，１４，１８，２２，５２は外部回路や表示装置などが要求するタイミングでデータを転送する必要があるためである。
【０１７２】
このように、データ転送に優先順位を付けるために、実施の形態５におけるバスアービタ６２はステートマシンと命令キューの両方を内蔵し、ステートマシンの一つの状態を命令キューに割り当てるようにする。図１１はステートマシンの状態遷移図を示したものであり、図の「命令キュー」の状態が命令キューに割り当てられている状態であるとする。これ以外の状態については実施の形態１又は実施の形態３で述べたものと同じであるとする。
【０１７３】
命令キューに値を登録するデータ転送回路は、不定期にデータ転送を実行する第５のデータ転送回路４２、第６のデータ転送回路４７、第８のデータ転送回路５５、第９のデータ転送回路５８、及び第１０のデータ転送回路５９のみであるとする。したがって、実施の形態５では命令キューを構成するシフトレジスタの段数は５段でよい。
【０１７４】
ステートマシンが状態「グラフィックス表示」から状態「命令キュー」に遷移したときには、バスアービタ６２は命令キューの先頭に登録されている値に関連付けられたデータ転送回路にアクノリッジ信号を送信する。命令キューの長さが０であるときにはいずれのデータ転送回路にもアクノリッジ信号を送信せずに直ちに次の状態である「リフレッシュ」に遷移する。また、先頭に登録されている値に関連付けられたデータ転送回路がバスアービタ６２に対してデータ転送の終了を通知したときには、シフトレジスタの内容を一段前にシフトするとともに、ステートマシンの状態が「リフレッシュ」に遷移する。新しく命令キューの先頭に登録された値に関連付けられたデータ転送回路はステートマシンの状態が一巡して再び「命令キュー」に遷移したときに実行される。
【０１７５】
さらに、バスアービタ６２は第１のデータ転送回路１０、第２のデータ転送回路１４、第３のデータ転送回路１８、第４のデータ転送回路２２、及び第７のデータ転送回路５２の５個のデータ転送回路のうちいずれか１つのデータ転送回路がバスアービタ６２に対してリクエスト信号を送信しているときには、ステートマシンの状態が「命令キュー」に遷移したとしても命令キューの先頭に登録された値に関連付けられたデータ転送回路にアクノリッジ信号を送信せずに直ちに次の状態である「リフレッシュ」に遷移する。
【０１７６】
このようにして、命令キューに登録された値に関連付けられたデータ転送は、ステートマシンの１つの状態に関連付けられたデータ転送が行われていない、例えば、有効表示期間外などに実行することができ、メモリバスの転送バンド幅を効率よく使用することができる。
【０１７７】
実施の形態５では、ＳＤＲＡＭ１からバッファへの転送を行うデータ転送回路が３個存在するため、これら第３のデータ転送回路１８、第４のデータ転送回路２２、及び第７のデータ転送回路５２において同時に垂直同期信号の基準エッジが検出されたとすると、第３のバッファ１５、第４のバッファ１９、及び第７のバッファ４８に記憶されているデータの数は“０”となり、いずれのデータ転送回路１８，２２，５２もリクエスト信号を発生することになる。
【０１７８】
ここで、第７のデータ転送回路５２は実施の形態３で述べたように、第７のカウンタ４９のカウント値が第７のバッファ４８の全容量と等しくなるまでデータ転送を実行するから、バッファのアンダーフローを防ぐために第７のバッファ４８の全容量を大きくしたすると、データ転送が開始されてからデータ転送が終了するまで長い時間が必要となる。これに加えて第１のデータ転送回路１０と第２のデータ転送回路１４が３２個のデータ転送を行うことを考慮すると、例えば、ステートマシンの状態が一巡して「データ転送１」から再び「データ転送１」に戻ったときには第１のバッファがオーバーフローしている可能性が高い。
【０１７９】
このように、ＳＤＲＡＭ１からバッファへの転送を行うデータ転送回路の数が多い場合、あるいはＳＤＲＡＭ１からデータが転送されてくるバッファの容量が大きい場合などには、バッファに記憶されているデータの数が同時に“０”となったときには、単位時間あたりにバッファから外部回路に出力されるデータの数に関わらず、瞬間的にＳＤＲＡＭ１との間で転送しなければならないデータの数が多くなる。
【０１８０】
一般的に、垂直同期信号の基準エッジが検出された後は垂直ブランキング期間となり、すぐには有効表示期間とはならないので、第３のバッファ１５、第４のバッファ１９、及び第７のバッファ４８からデータが実際に読み出されるまでにある程度の時間の余裕がある。したがって、垂直ブランキング期間には１回のデータ転送において転送するデータの数を有効表示期間よりも少なくすることによって、ステートマシンの状態が一巡するまでの時間を短くし、メモリバスの調停が破綻しないようにすることができる。
【０１８１】
具体的には、垂直ブランキング期間では第３のデータ転送回路１８及び第４のデータ転送回路２２は３２個ではなく１６個のデータを転送するとし、第７のデータ転送回路５２は第７のカウンタ４９のカウント値が第７のバッファ４８の全データ容量と等しくなるまでではなく、全データ容量の４分の１ずつ４回にわけてデータを転送するとしてもよい。
【０１８２】
別の方法としては、第３のデータ転送回路１８と第４のデータ転送回路２２が１回のデータ転送で転送するデータの数を１６個とする代わりに、垂直ブランキング期間ではステートマシンの状態が一巡する間に第３のデータ転送回路１８と第４のデータ転送回路２２のいずれか一方に対してしかバスアービタ６２はアクノリッジ信号を送信しないとしてもよい。すなわち、ある一巡（ステートマシンの状態の一巡）では第３のデータ転送回路１８にアクノリッジ信号を送信したとすると、次の一巡では第３のデータ転送回路１８がリクエスト信号を送信していたとしてもアクノリッジ信号を送信しないなどとすることによって、ステートマシンの状態が一巡する時間を早めることができる。
【０１８３】
転送するデータを少なくする期間としては垂直ブランキング期間を検出する代わりに、バッファに記憶されているデータの数が“０”となってからバッファの全データ容量に等しくなるまでなどとしてもよい。
【０１８４】
なお、実施の形態１から５までの２以上の制御内容を組み合わせた制御を行うメモリ制御回路を構成してもよい。また、本発明には実施の形態１から５までの２以上の制御内容を組み合わせたメモリバスの調停方法も含まれる。また、データ転送回路の台数、転送するデータの種類等は、上記実施の形態１から５までのものに限定されず、変更可能である。さらに、説明を簡単にするため、実施の形態１から５までにおいて外部メモリバスに接続されているＳＤＲＡＭの個数は１個であるとしたが、メモリバスに接続されるメモリの個数は任意であってよい。たとえば１６ビット分のデータ入出力端子を持つＳＤＲＡＭを２つ使用する場合は、３２ビットのバス幅を持つメモリバスに３２ビット分のデータ入出力端子を持つＳＤＲＡＭを１個接続した場合と同様に考えることができる。
【０１８５】
【発明の効果】
以上に説明したように、参考例のメモリ制御回路は、（１）前記複数のデータ転送回路のそれぞれは、少なくとも１つ以上の前記複数のカウンタのカウント値に基づいて前記データ転送の開始を要求するリクエスト信号を前記バスアービタに対して送信し、（２）前記ステートマシンの現状態に関連付けられたデータ転送回路がリクエスト信号を送信していれば、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送回路に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、（３）前記複数のデータ転送回路のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数又は少なくとも１つ以上の前記複数のカウンタのカウント値のいずれかに基づいて実行中の前記データ転送を終了し、（４）前記ステートマシンの現状態に関連付けられたデータ転送回路が前記リクエスト信号を送信していない場合又は実行中の前記データ転送を終了した場合のいずれかの場合には、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送回路に前記アクノリッジ信号を送信せず、前記ステートマシンは次状態に遷移し、（５）前記処理（１）から（４）までを繰り返すように構成したため、複数のデータ転送回路が使用権を要求するメモリバスを破綻なく調停し、メモリ制御回路と外部回路との間で任意のタイミングでデータを入力又は出力することができる。
【０１８６】
また、参考例のメモリ制御回路は、ステートマシンの現状態に関連付けられたデータ転送回路がリクエスト信号を送信している場合であっても、現状態以外の状態に関連付けられた特定の１つ以上のデータ転送回路がリクエスト信号を送信している場合には、ステートマシンは次状態に遷移し、バスアービタは現状態に関連付けられたデータ転送回路にアクノリッジ信号を送信しないように構成したため、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０１８７】
また、参考例のメモリ制御回路は、ステートマシンの現状態に対応する次状態が複数存在する場合には、特定の１つ以上のデータ転送回路が送信するリクエスト信号に基づいて次状態が決定されるように構成したため、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０１８８】
参考例のメモリ制御回路は、（１）前記複数のデータ転送回路のそれぞれは、少なくとも１つ以上の前記複数のカウンタのカウント値に基づいてデータ転送の開始を要求するリクエスト信号を前記バスアービタに対して送信し、（２）前記バスアービタが前記複数のデータ転送回路から前記リクエスト信号を受信した場合には、前記リクエスト信号を送信したデータ転送回路に関連付けられたデータ転送命令を命令キューの最後尾に登録し、（３）前記バスアービタは、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、（４）前記複数のデータ転送回路のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数又は少なくとも１つ以上の前記複数のカウンタのカウント値のいずれかに基づいて実行中の前記データ転送を終了し、（５）前記データ転送回路がデータ転送を終了した場合には、前記データ転送回路に関連付けられたデータ転送命令を命令キューから削除するとともに、後段の命令キューの内容を１段前にシフトし、（６）前記処理（１）から（５）までを繰り返すように構成したため、複数のデータ転送回路が使用権を要求するメモリバスを破綻なく調停し、メモリ制御回路と外部回路との間で任意のタイミングでデータを入力又は出力することができる。
【０１８９】
また、参考例のメモリ制御回路は、前記請求項４の処理（１）において前記データ転送回路がリクエスト信号を送信している場合であっても、前記リクエスト信号を送信しているデータ転送回路以外の特定の１つ以上のデータ転送回路がリクエスト信号を送信している場合又は前記特定の１つ以上のデータ転送回路に関連付けられたデータ転送命令がすでに命令キューに登録されている場合のいずれかの場合には、前記処理（２）を実行せず、前記リクエスト信号を送信しているデータ転送回路のデータ転送命令を前記命令キューに登録しないように構成したため、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０１９０】
また、参考例のメモリ制御回路は、前記データ転送命令が命令キューの先頭に登録されている場合であっても、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路以外の特定の１つ以上のデータ転送回路がリクエスト信号を送信している場合又は前記特定の１つ以上のデータ転送回路に関連付けられているデータ転送命令がすでに前記命令キューに登録されている場合のいずれかの場合には、前記処理（３）を実行せず、前記バスアービタは前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路に対してアクノリッジ信号を送信しないように構成したため、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０１９１】
請求項１に関するメモリ制御回路は、バスアービタが、シフトレジスタで構成された命令キューと、前記複数のデータ転送回路のそれぞれと関連付けられた複数の状態のなかのいずれか又は命令キューと関連付けられた状態を現状態とし、一つのデータ転送回路に関連付けられた状態、又は、一つの命令キューと関連付けられた状態が終了すると、次のデータ転送回路又は次の命令キューに関連付けられた状態に遷移し、かつ、各状態が循環するように遷移するステートマシンとを内蔵し、前記ステートマシンが持つ状態の１つを前記命令キューに関連付け、前記複数のデータ転送回路の一部が前記ステートマシンが持つ状態に関連付けられ、前記複数のデータ転送回路の残りが前記命令キューに関連付けられ、（１）前記複数のデータ転送回路のそれぞれは、各データ転送回路のバッファに記憶されているデータの数に対する前記複数のカウンタのカウント値が所定カウント値以上の場合に、前記データ転送の開始を要求するリクエスト信号を前記バスアービタに対して送信し、（２）前記ステートマシンの現状態に関連付けられたデータ転送回路がリクエスト信号を送信していれば、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送回路に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、（３）前記複数のデータ転送回路のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数に基づいて実行中の前記データ転送を終了し、（４）前記ステートマシンの現状態に関連付けられたデータ転送回路が前記リクエスト信号を送信していない場合、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送回路に前記アクノリッジ信号を送信せず、前記ステートマシンは次状態に遷移し、（５）前記ステートマシンが前記命令キューに関連付けられた状態に遷移した場合にのみ、前記命令キューに登録されているデータ転送命令の一部又は全部を前記命令キューの先頭から順に実行した後に前記ステートマシンは次状態に遷移し、（６）前記処理（１）から（５）までを繰り返すように構成したため、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えると共に、複数のデータ転送回路が使用権を要求するメモリバスを破綻なく調停し、メモリ制御回路と外部回路との間で任意のタイミングでデータを入力又は出力することができる。
【０１９２】
また、請求項２に関するメモリ制御回路は、前記請求項１の処理（５）において、（５−１）前記バスアービタが前記命令キューに関連づけられたデータ転送回路のいずれかから前記リクエスト信号を受信した場合には、前記リクエスト信号を送信したデータ転送回路に関連付けられたデータ転送命令を命令キューの最後尾に登録し、（５−２）前記バスアービタは、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、（５−３）前記命令キューに関連づけられたデータ転送回路のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数に基づいて実行中の前記データ転送を終了し、（５−４）前記データ転送回路がデータ転送を終了した場合には、前記データ転送回路に関連付けられたデータ転送命令を命令キューから削除するとともに、後段の命令キューの内容を１段前にシフトし、（５−５）前記処理（５−１）から（５−４）までを１回以上実行するので、複数のデータ転送回路が使用権を要求するメモリバスを破綻なく調停し、メモリ制御回路と外部回路との間で任意のタイミングでデータを入力又は出力することができる。
【０１９３】
また、請求項３に関するメモリ制御回路は、前記処理（５−１）において前記データ転送回路がリクエスト信号を送信している場合であっても、前記リクエスト信号を送信しているデータ転送回路以外の特定の１つ以上のデータ転送回路がリクエスト信号を送信している場合、前記処理（５−２）を実行せず、前記リクエスト信号を送信しているデータ転送回路のデータ転送命令を前記命令キューに登録しないように構成したので、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０１９４】
また、請求項４に関するメモリ制御回路は、前記請求項２又は３において、前記データ転送命令が命令キューの先頭に登録されている場合であっても、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路以外の特定の１つ以上のデータ転送回路がリクエスト信号を送信している場合、前記処理（５−３）を実行せず、前記バスアービタは前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路に対してアクノリッジ信号を送信しないように構成したので、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０１９５】
また、請求項５に関するメモリ制御回路は、ステートマシンの現状態に関連付けられた命令キューにデータ転送命令が登録されている場合であっても、現状態以外の状態に関連付けられた特定の１つ以上のデータ転送回路がリクエスト信号を送信している場合には、ステートマシンは次状態に遷移し、バスアービタは命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送回路にアクノリッジ信号を送信しないように構成したため、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０１９６】
さらに、請求項６に関するメモリ制御回路は、データ転送回路がデータ転送を実行している途中であっても、データ転送を実行しているデータ転送回路以外の特定の１つ以上のデータ転送回路がリクエスト信号の送信を開始した場合には、バスアービタはデータ転送を実行しているデータ転送回路に対して、実行中のデータ転送を終了させるように命令するように構成したため、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０１９７】
また、請求項７に関するメモリ制御回路は、カウンタは、バッファに対する読み出し命令、バッファに対する書き込み命令、メモリに対する読み出し命令、メモリに対する書き込み命令のいずれかを組み合わせて使用することによって、バッファに記憶されているデータの数に対応するカウント値を保持するように構成したため、データ転送の実行を要求するリクエスト信号をバッファに記憶されているデータの数に応じて発生させることができる。
【０１９８】
さらに、請求項８に関するメモリ制御回路は、カウンタは、バッファに対する読み出し命令あるいは書き込み命令が発行されるたびに反転するパルスを発生する反転パルス生成回路と、反転パルス生成回路が発生したパルスのエッジを検出する微分回路とを備え、カウンタは、微分回路の検出結果、メモリに対する読み出し命令、メモリに対する書き込み命令のいずれかを組み合わせて使用することによって、バッファに記憶されているデータの数に対応するカウント値を保持するように構成したため、高速なクロックを用いる回路を限定し、メモリ制御回路及び外部回路の消費電力を増大させることなく、メモリバスの転送バンド幅を高めることができる。
【０１９９】
また、請求項９に関するメモリ制御回路は、前記複数のデータ転送回路のそれぞれが、前記複数のカウンタのカウント値が設定値以上になったとき及び設定値以下になったときのいずれかのときにリクエスト信号を発生するように構成したため、データ転送回路は複数のバッファに記憶されているデータ数に応じてデータ転送の実行の有無を決定することができる。
【０２００】
さらに、参考例のメモリ制御回路は、前記複数のデータ転送回路のそれぞれが、前記複数のカウンタのカウント値が設定値以上になったとき及び設定値以下になったときのいずれかのときにデータ転送を終了するように構成したため、データ転送回路は複数のバッファに記憶されているデータ数に応じてデータ転送の実行の有無を決定することができる。
【０２０１】
また、参考例のメモリ制御回路は、前記複数のデータ転送回路のうちの、前記メモリを転送元とし前記バッファを転送先とするデータ転送回路において、転送先である前記バッファに記憶されている全てのデータが外部信号に基づいて消去された場合には、所定の期間にわたって、前記データ転送回路が１回のデータ転送で転送するデータの数を所定の期間外よりも少なくするか又は前記バスアービタが前記データ転送回路が送信するリクエスト信号に応答してアクノリッジ信号を送信する頻度を所定の期間外よりも少なくするように構成したため、バッファに記憶されている全てのデータが消去された場合でも、瞬間的に転送すべきデータが多くなることを防ぎ、メモリバスの調停を破綻しないようにすることができる。
【０２０２】
参考例のメモリバスの調停方法によれば、（１）前記複数のデータ転送手段のそれぞれは、少なくとも１つ以上の前記複数のカウンタのカウント値に基づいて前記データ転送の開始を要求するリクエスト信号を前記バスアービタに対して送信し、（２）前記ステートマシンの現状態に関連付けられたデータ転送手段がリクエスト信号を送信していれば、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送手段に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、（３）前記複数のデータ転送手段のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数又は少なくとも１つ以上の前記複数のカウンタのカウント値のいずれかに基づいて実行中の前記データ転送を終了し、（４）前記ステートマシンの現状態に関連付けられたデータ転送手段が前記リクエスト信号を送信していない場合又は実行中の前記データ転送を終了した場合のいずれかの場合には、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送手段に前記アクノリッジ信号を送信せず、前記ステートマシンは次状態に遷移し、（５）前記処理（１）から（４）までを繰り返すので、複数のデータ転送手段が使用権を要求するメモリバスを破綻なく調停し、メモリ制御回路と外部回路との間で任意のタイミングでデータを入力又は出力することができる。
【０２０３】
また、参考例のメモリバスの調停方法によれば、ステートマシンの現状態に関連付けられたデータ転送手段がリクエスト信号を送信している場合であっても、現状態以外の状態に関連付けられた特定の１つ以上のデータ転送手段がリクエスト信号を送信している場合には、ステートマシンは次状態に遷移し、バスアービタは現状態に関連付けられたデータ転送手段にアクノリッジ信号を送信しないようにしたので、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０２０４】
また、参考例のメモリバスの調停方法によれば、ステートマシンの現状態に対応する次状態が複数存在する場合には、特定の１つ以上のデータ転送手段が送信するリクエスト信号に基づいて次状態が決定されるようにしたので、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０２０５】
参考例のメモリバスの調停方法によれば、（１）前記複数のデータ転送手段のそれぞれは、少なくとも１つ以上の前記複数のカウンタのカウント値に基づいてデータ転送の開始を要求するリクエスト信号を前記バスアービタに対して送信し、（２）前記バスアービタが前記複数のデータ転送手段から前記リクエスト信号を受信した場合には、前記リクエスト信号を送信したデータ転送手段に関連付けられたデータ転送命令を命令キューの最後尾に登録し、（３）前記バスアービタは、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、（４）前記複数のデータ転送手段のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数又は少なくとも１つ以上の前記複数のカウンタのカウント値のいずれかに基づいて実行中の前記データ転送を終了し、（５）前記データ転送手段がデータ転送を終了した場合には、前記データ転送手段に関連付けられたデータ転送命令を命令キューから削除するとともに、後段の命令キューの内容を１段前にシフトし、（６）前記処理（１）から（５）までを繰り返すようにしたので、複数のデータ転送手段が使用権を要求するメモリバスを破綻なく調停し、メモリ制御回路と外部回路との間で任意のタイミングでデータを入力又は出力することができる。
【０２０６】
また、参考例のメモリバスの調停方法によれば、前記請求項２１の処理（１）において前記データ転送手段がリクエスト信号を送信している場合であっても、前記リクエスト信号を送信しているデータ転送手段以外の特定の１つ以上のデータ転送手段がリクエスト信号を送信している場合又は前記特定の１つ以上のデータ転送手段に関連付けられたデータ転送命令がすでに命令キューに登録されている場合のいずれかの場合には、前記処理（２）を実行せず、前記リクエスト信号を送信しているデータ転送手段のデータ転送命令を前記命令キューに登録しないようにしたので、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０２０７】
また、参考例のメモリバスの調停方法によれば、前記データ転送命令が命令キューの先頭に登録されている場合であっても、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段以外の特定の１つ以上のデータ転送手段がリクエスト信号を送信している場合又は前記特定の１つ以上のデータ転送手段に関連付けられているデータ転送命令がすでに前記命令キューに登録されている場合のいずれかの場合には、前記処理（３）を実行せず、前記バスアービタは前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段に対してアクノリッジ信号を送信しないようにしたので、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０２０８】
請求項１０に関するメモリバスの調停方法によれば、バスアービタが、シフトレジスタで構成された命令キューと、前記複数のデータ転送手段のそれぞれと関連付けられた複数の状態のなかのいずれか又は命令キューと関連付けられた状態を現状態とし、一つのデータ転送手段に関連付けられた状態、又は、一つの命令キューと関連付けられた状態が終了すると、次のデータ転送手段又は次の命令キューに関連付けられた状態に遷移し、かつ、各状態が循環するように遷移するステートマシンとを内蔵し、前記ステートマシンが持つ状態の１つを前記命令キューに関連付け、前記複数のデータ転送手段の一部が前記ステートマシンが持つ状態に関連付けられ、前記複数のデータ転送手段の残りが前記命令キューに関連付けられ、（１）前記複数のデータ転送手段のそれぞれは、各データ転送手段のバッファに記憶されているデータの数に対する前記複数のカウンタのカウント値が所定カウント値以上の場合に、前記データ転送の開始を要求するリクエスト信号を前記バスアービタに対して送信し、（２）前記ステートマシンの現状態に関連付けられたデータ転送手段がリクエスト信号を送信していれば、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送手段に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、（３）前記複数のデータ転送手段のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数に基づいて実行中の前記データ転送を終了し、（４）前記ステートマシンの現状態に関連付けられたデータ転送手段が前記リクエスト信号を送信していない場合、前記バスアービタは前記ステートマシンの現状態に関連付けられたデータ転送手段に前記アクノリッジ信号を送信せず、前記ステートマシンは次状態に遷移し、（５）前記ステートマシンが前記命令キューに関連付けられた状態に遷移した場合にのみ、前記命令キューに登録されているデータ転送命令の一部又は全部を前記命令キューの先頭から順に実行した後に前記ステートマシンは次状態に遷移し、（６）前記処理（１）から（５）までを繰り返すようにしたので、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えると共に、複数のデータ転送手段が使用権を要求するメモリバスを破綻なく調停し、メモリ制御回路と外部回路との間で任意のタイミングでデータを入力又は出力することができる。
【０２０９】
また、請求項１１に関するメモリバスの調停方法によれば、前記請求項１０の処理（５）において、（５−１）前記バスアービタが前記命令キューに関連づけられたデータ転送手段のいずれかから前記リクエスト信号を受信した場合には、前記リクエスト信号を送信したデータ転送手段に関連付けられたデータ転送命令を命令キューの最後尾に登録し、（５−２）前記バスアービタは、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段に対して前記データ転送の開始を許可するアクノリッジ信号を送信し、（５−３）前記命令キューに関連づけられたデータ転送手段のそれぞれは、前記リクエスト信号に応答して前記バスアービタからアクノリッジ信号を受信したときに前記データ転送を開始し、前記アクノリッジ信号を受信してから転送したデータの数に基づいて実行中の前記データ転送を終了し、（５−４）前記データ転送手段がデータ転送を終了した場合には、前記データ転送手段に関連付けられたデータ転送命令を命令キューから削除するとともに、後段の命令キューの内容を１段前にシフトし、（５−５）前記処理（５−１）から（５−４）までを１回以上実行するので、複数のデータ転送手段が使用権を要求するメモリバスを破綻なく調停し、メモリ制御回路と外部回路との間で任意のタイミングでデータを入力又は出力することができる。
【０２１０】
また、請求項１２に関するメモリバスの調停方法によれば、前記処理（５−１）において前記データ転送手段がリクエスト信号を送信している場合であっても、前記リクエスト信号を送信しているデータ転送手段以外の特定の１つ以上のデータ転送手段がリクエスト信号を送信している場合、前記処理（５−２）を実行せず、前記リクエスト信号を送信しているデータ転送手段のデータ転送命令を前記命令キューに登録しないようにしたので、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０２１１】
また、請求項１３に関するメモリバスの調停方法によれば、前記請求項１１又は１２において、データ転送命令が命令キューの先頭に登録されている場合であっても、前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段以外の特定の１つ以上のデータ転送手段がリクエスト信号を送信している場合、前記処理（５−３）を実行せず、前記バスアービタは前記命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段に対してアクノリッジ信号を送信しないようにしたので、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０２１２】
また、請求項１４に関するメモリバスの調停方法によれば、ステートマシンの現状態に関連付けられた命令キューにデータ転送命令が登録されている場合であっても、現状態以外の状態に関連付けられた特定の１つ以上のデータ転送手段がリクエスト信号を送信している場合には、ステートマシンは次状態に遷移し、バスアービタは命令キューの先頭に登録されているデータ転送命令に関連付けられたデータ転送手段にアクノリッジ信号を送信しないようにしたので、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０２１３】
さらに、請求項１５に関するメモリバスの調停方法によれば、データ転送手段がデータ転送を実行している途中であっても、データ転送を実行しているデータ転送手段以外の特定の１つ以上のデータ転送手段がリクエスト信号の送信を開始した場合には、バスアービタはデータ転送を実行しているデータ転送手段に対して、実行中のデータ転送を終了させるように命令するようにしたので、優先順位の高いデータ転送に多くのデータ転送の実行機会を与えることができる。
【０２１４】
また、請求項１６に関するメモリバスの調停方法によれば、カウンタは、バッファに対する読み出し命令、バッファに対する書き込み命令、メモリに対する読み出し命令、メモリに対する書き込み命令のいずれかを組み合わせて使用することによって、バッファに記憶されているデータの数に対応するカウント値を保持するようにしたので、データ転送の実行を要求するリクエスト信号をバッファに記憶されているデータの数に応じて発生させることができる。
【０２１５】
さらに、請求項１７に関するメモリバスの調停方法によれば、カウンタは前記複数のバッファに対する読み出し命令あるいは書き込み命令が発行されるたびに反転するパルスを発生し、この発生した前記パルスのエッジを検出し、前記複数のカウンタのそれぞれは、前記検出されたパルスのエッジ、前記メモリに対する読み出し命令、前記メモリに対する書き込み命令のいずれかを組み合わせて使用することによって、前記複数のバッファのそれぞれに記憶されているデータの数に対応するカウント値を保持するようにしたので、高速なクロックを用いる回路を限定し、メモリ制御回路及び外部回路の消費電力を増大させることなく、メモリバスの転送バンド幅を高めることができる。
【０２１６】
また、請求項１８に関するメモリバスの調停方法によれば、前記複数のデータ転送手段のそれぞれが、前記複数のカウンタのカウント値が設定値以上になったとき及び設定値以下になったときのいずれかのときにリクエスト信号を発生するようにしたので、データ転送手段は複数のバッファに記憶されているデータ数に応じてデータ転送の実行の有無を決定することができる。
【０２１７】
さらに、参考例のメモリバスの調停方法によれば、前記複数のデータ転送手段のそれぞれが、前記複数のカウンタのカウント値が設定値以上になったとき及び設定値以下になったときのいずれかのときにデータ転送を終了するようにしたので、データ転送手段は複数のバッファに記憶されているデータ数に応じてデータ転送の実行の有無を決定することができる。
【０２１８】
また、参考例のメモリバスの調停方法によれば、前記複数のデータ転送手段のうちの、前記メモリを転送元とし前記バッファを転送先とするデータ転送手段において、転送先である前記バッファに記憶されている全てのデータが外部信号に基づいて消去された場合には、所定の期間にわたって、前記データ転送手段が１回のデータ転送で転送するデータの数を所定の期間外よりも少なくするか又は前記バスアービタが前記データ転送手段が送信するリクエスト信号に応答してアクノリッジ信号を送信する頻度を所定の期間外よりも少なくするようにしたので、バッファに記憶されている全てのデータが消去された場合でも、瞬間的に転送すべきデータが多くなることを防ぎ、メモリバスの調停を破綻しないようにすることができる。
【図面の簡単な説明】
【図１】  この発明の実施の形態１であるメモリ制御回路の構成（本発明によるメモリバスの調停方法を実施するための構成）を示す図である。
【図２】  この発明の実施の形態１で用いられるバスアービタに内蔵されているステートマシンの状態遷移を示す図である。
【図３】  この発明の実施の形態１で用いられるバスアービタの動作を説明するタイミングチャートである。
【図４】  この発明の実施の形態１で用いられる４個のバッファに記憶されているデータの数の時間的な変化を示す図である。
【図５】  この発明の実施の形態２である反転パルス生成回路及び同期微分回路の構成を示す図である。
【図６】  この発明の実施の形態２である反転パルス生成回路及び同期微分回路の動作を説明するタイミングチャートである。
【図７】  この発明の実施の形態３であるメモリ制御回路の構成（本発明によるメモリバスの調停方法を実施するための構成）を示す図である。
【図８】  この発明の実施の形態３で用いられるバスアービタに内蔵されているステートマシンの状態遷移を示す図である。
【図９】  この発明の実施の形態４であるメモリ制御回路の構成（本発明によるメモリバスの調停方法を実施するための構成）を示す図である。
【図１０】  この発明の実施の形態５であるメモリ制御回路の構成（本発明によるメモリバスの調停方法を実施するための構成）を示す図である。
【図１１】  この発明の実施の形態５で用いられるバスアービタに内蔵されているステートマシンの状態遷移を示す図である。
【図１２】  従来のメモリ制御回路の構成を示す図である。
【図１３】  従来のメモリ制御回路の動作を説明するタイミングチャートである。
【符号の説明】
１  ＳＤＲＡＭ、  ２  メモリ制御回路、  ３  外部メモリバス、  ４  メモリインターフェイス、  ５  内部メモリバス、  ６  バスアービタ、  ７  第１のバッファ、  ８  第１のカウンタ、  ９  第１の入力端子、  １０  第１のデータ転送回路、  １１  第２のバッファ、  １２  第２のカウンタ、  １３  第２の入力端子、  １４  第２のデータ転送回路、  １５  第３のバッファ、  １６  第３のカウンタ、  １７  第３の入力端子、  １８  第３のデータ転送回路、  １９  第４のバッファ、  ２０  第４のカウンタ、  ２１  第４の入力端子、  ２２  第４のデータ転送回路、  ２３  ＳＤＲＡＭ初期化コマンド発生回路、  ２４  リフレッシュコマンド発生回路、  ２５  データイネーブル信号入力端子、  ２６  ライトクロック入力端子、  ２７  リードクロック入力端子、  ２８  反転パルス生成回路、  ２９  同期微分回路、  ３０  データイネーブル信号出力端子、  ３１  第１のＸＯＲゲート、  ３２  第１のＤ−フリップフロップ、  ３３  第２のＤ−フリップフロップ、  ３４  第３のＤ−フリップフロップ、  ３５  第２のＸＯＲゲート、  ３６  メモリ制御回路、  ３７，３７ａバスアービタ、  ３８  第５のバッファ、  ３９  第５のカウンタ、  ４０  第３の入力端子、  ４１  第３の出力端子、  ４２  第５のデータ転送回路、  ４３  第６のバッファ、  ４４  第６のカウンタ、  ４５  第４の入力端子、  ４６  第４の出力端子、  ４７  第６のデータ転送回路、  ４８  第７のバッファ、  ４９  第７のカウンタ、  ５０  第５の入力端子、  ５１  第５の出力端子、  ５２  第７のデータ転送回路、  ５３  第８のバッファ、  ５４  第８のカウンタ、  ５５  第８のデータ転送回路、  ５６  第９のバッファ、  ５７  第９のカウンタ、  ５８  第９のデータ転送回路、  ５９  第１０のデータ転送回路、  ６０  第６の入力端子、  ６１  第６の出力端子、  ６２  バスアービタ、  ６３  グラフィックスデータ生成回路、  ６４  第１のＳＤＲＡＭ、  ６５  第２のＳＤＲＡＭ、  ６６  第１の表示コントローラ、  ６７  第２の表示コントローラ、  ６８  第１のメモリバス、  ６９  第２のメモリバス、  ７０バスアービタ、  ７１  第１の表示装置、  ７２  第２の表示装置。
【図１】
0003732139.tif 000002
【図２】
0003732139.tif 000003
【図３】
0003732139.tif 000004
【図４】
0003732139.tif 000005
【図５】
0003732139.tif 000006
【図６】
0003732139.tif 000007
【図７】
0003732139.tif 000008
【図８】
0003732139.tif 000009
【図９】
0003732139.tif 000010
【図１０】
0003732139.tif 000011
【図１１】
0003732139.tif 000012
【図１２】
0003732139.tif 000013
【図１３】
0003732139.tif 000014