〔第1の実施形態〕
本発明の一実施形態について図1ないし図12に基づいて説明すると以下の通りである。すなわち、本実施形態に係る情報処理装置1は、複数の互いに異なる蓄積方法で、画像のデータを蓄積しているメモリ間で、画像の任意の矩形領域のデータを高速に転送可能な装置であって、図2に示すように、上記画像のデータを蓄積するメモリとして、メインメモリ2と、ビデオメモリ3とを備えている。
上記ビデオメモリ3は、グラフィックコントローラ4が表示装置5へ出力する映像信号を生成するために参照するものであって、比較的小規模な回路で、高速に各画素のデータを読み出すことができるようにするため、例えば、図3に示すように、画像の各ラインのデータは、互いに隣接する2つのラインのデータの開始アドレス同士の差が2n で表現できるように配置されている。なお、このように各ラインのデータを配置すると、画素の解像度(画素数)によっては、次のラインの最初の画素のデータを格納したアドレス(次のラインの開始アドレス)が、あるラインの末尾の画素のデータを格納したアドレスに連続しなくなることもあるが、この場合、当該アドレス(末尾のアドレス)の次のアドレスから、次のラインの開始アドレスの直前までの記憶領域は、使用されない。
例えば、図3は、水平解像度が800画素の画像をビデオメモリ3に格納している状態を示している。図3では、互いに隣接する2つのラインのデータの開始アドレス同士の差が210で表現できるように、各ラインのデータが配置され、1ワード(1アドレス分の記憶領域)に、1画素分のデータが格納されている場合を例示している。したがって、ある水平ライン分の画像データは、ビデオメモリ3のA001h〜A320hに格納され、次の水平ライン分の画像データは、A401h〜A720hに格納されている。
当該構成では、基準とするラインの次のラインの開始アドレスを算出する際、基準とするラインの開始アドレスのうち、予め定められた上位ビットをインクリメントし、残余の下位ビットを連結すれば、次のラインの開始アドレスを算出できる。したがって、グラフィックコントローラ4が所定の周期(例えば、1フレーム期間毎など)毎に、画像の各画素の輝度を示す映像信号をそれぞれ出力する場合のように、高速なアクセスが必要な場合であっても、グラフィックコントローラ4を、比較的小規模な回路で実現できる。
一方、本実施形態に係るメインメモリ2は、主として、情報処理装置1のCPU6によりアクセスされるメモリであって、図4に示すように、ある水平ラインの画像データは、その前の水平ラインの画像データが格納されているアドレスに連続するアドレスに格納されている。
例えば、図4は、図3と同様に、水平解像度が800画素で、1画素のデータが1ワードで表現されている場合を例示しているが、図3とは異なって、ある水平ライン分の画像データは、メインメモリ2のA001h〜A320hに格納され、次の水平ライン分の画像データはA321h〜A640hに格納されている。
さらに、本実施形態に係る情報処理装置1には、図2に示すように、メインメモリ2とビデオメモリ3との双方にアクセス可能な転送回路11が設けられており、当該転送回路11は、CPU6などの外部回路からの指示に従って、画像中の指示された矩形領域A(図5参照)のデータを、メインメモリ2からビデオメモリ3へ、あるいは、ビデオメモリ3からメインメモリ2へ転送することができる。
本実施形態に係る転送回路11は、予め転送指示として、矩形領域の幅(画素数)および高さ(ライン数)と、転送元のメモリにおける開始アドレス、および、転送元のメモリにおける各ラインの開始アドレスの差と、転送先のメモリにおける開始アドレス、および、転送先のメモリにおける各ラインの開始アドレスの差とを受け取っており、矩形領域を構成する水平ライン毎に転送指示を受け取らなくても、矩形領域を構成する各水平ライン毎に、以下の処理、すなわち、転送元および転送先のメモリの双方における当該ラインの開始アドレスの算出処理と、当該ラインを構成する各画素のデータの転送処理とを繰り返すことができる。これにより、転送回路11は、矩形領域の位置および大きさ、並びに、転送元および転送先のメモリにおける各ラインの開始アドレスの差に拘わらず、矩形領域を構成する水平ライン毎に転送指示を受け取ることなく、矩形領域のデータを転送することができる。
具体的には、本実施形態に係る転送回路11は、図1に示すように、矩形領域の幅(画素数)および高さ(ライン数)をそれぞれ格納する幅および高さレジスタ21・22と、メインメモリ2における矩形領域の開始アドレス、および、メインメモリ2における隣接する水平ラインの開始アドレス同士の差を、それぞれ格納する開始アドレスおよびアドレス差レジスタ23・24と、ビデオメモリ3における矩形領域の開始アドレス、および、ビデオメモリ3における隣接する水平ラインの開始アドレス同士の差を、それぞれ格納する開始アドレスおよびアドレス差レジスタ25・26とを備えている。なお、上記各アドレス差レジスタ24・26が特許請求の範囲に記載の転送元および転送先アドレス差レジスタにそれぞれ対応する。
ここで、上記各開始アドレスレジスタ23・25に格納される値(矩形領域の開始アドレス)は、メインメモリ2およびビデオメモリ3において、矩形領域のデータ転送全体の開始アドレスであって、本実施形態では、一例として、矩形領域の左上を基点にしてデータ転送を開始しているので、上記矩形領域の開始アドレスは、矩形領域の左上の画素のデータが格納されるアドレスになる。
さらに、上記転送回路11には、メインメモリ2の指示されたアドレスとビデオメモリ3の指示されたアドレスとの間で、データ転送を行う転送処理部(転送処理回路)31と、上記幅および高さレジスタ21・22の値を参照して、当該転送処理部31によるデータ転送が終了する毎に、転送対象となる画素の位置している水平ラインにおいて当該画素が矩形領域の終端(この例では、右端)に到達したか否かと、矩形領域全体のデータ転送が終了したか否かとを判定し、判定結果を制御信号S1として出力すると共に、矩形領域のデータ転送が終了していないと判定した場合は、上記転送処理部31へ次のデータ転送を指示する転送制御部(判定回路)32と、上記開始アドレスおよびアドレス差レジスタ23・24に格納された値と矩形領域の転送(BitBlt)が指示されたか否かと上記制御信号S1と上記転送処理部31からの制御信号S5が転送元となるメモリ(この場合は、メインメモリ2)からの読み出し終了を示しているか否かとに基づいて、メインメモリ2において次にデータを転送するアドレスを算出し、当該アドレスを示すアドレス信号A1を上記転送処理部31へ出力するメインメモリアドレス算出部(転送元アドレス算出回路)33と、上記開始アドレスおよびアドレス差レジスタ25・26に格納された値と矩形領域の転送が指示されたか否かと上記制御信号S1とに基づいて、ビデオメモリ3において次にデータを転送するアドレスを算出し、当該アドレスを示すアドレス信号A2を上記転送処理部31へ出力するビデオメモリアドレス算出部(転送先アドレス算出回路)34とを備えている。
なお、上記各アドレス算出部33・34は、矩形領域の転送開始指示を直接受け取ってもよいが、本実施形態では、転送制御部32は、矩形領域の転送開始指示を受け取り、制御信号S2によって、上記各アドレス算出部33・34へ伝えている。また、転送制御部32は、上記転送制御部32への転送指示を、各アドレス算出部33・34を介して通知してもよいが、本実施形態では、転送制御部32は、転送処理部31への制御信号S3によってデータ転送を指示している。また、転送制御部32は、転送処理部31の入出力信号を監視したり、予め定められた時間が経過したか否かを判定したりして、当該転送処理部31によるデータ転送が終了したか否かを検出してもよいが、本実施形態では、データ転送を終了する度に、転送処理部31が転送終了を示す制御信号S4を出力しており、転送制御部32は、当該制御信号S4に基づいて、転送処理部31によるデータ転送が終了したか否かを検出している。なお、本実施形態では、後述する制御部43が制御信号S2およびS3を生成している。
上記転送制御部32は、図6に示すように、転送対象となる画素の位置している水平ライン(現水平ライン)において、これまでに転送した画素数を記憶する幅カウンタ41と、これまでに転送した水平ライン数を記憶するライン数カウンタ42と、当該両カウンタ41・42のカウント値、矩形領域のデータ転送が指示されたか否かを示す制御、および、転送処理部31によるデータ転送が終了したことを示す信号(この例では、制御信号S4)に基づいて、当該転送処理部31によるデータ転送が終了する毎に、上記制御信号S1を生成すると共に、各カウンタ41・42を制御する制御部43とを備えている。
上記制御部43は、例えば、CPU6などの外部回路から、矩形領域のデータ転送が指示された場合、上記各カウンタ41・42をリセットできる。また、上記制御部43は、制御信号S4を受け取る度に、上記各カウンタ41・42のカウント値と、上記両レジスタ21・22の値とをそれぞれ比較して、現水平ラインにおいて矩形領域の終端に到達したか否かと、矩形領域全体のデータ転送が終了したか否かとを示す制御信号S1を生成できる。
さらに、上記制御部43は、終端に到達していないと判定した場合、上記幅カウンタ41のカウント値をデータ転送した画素数だけインクリメントすると共に、終端に到達したと判定した場合は、上記幅カウンタ41をリセットできる。なお、本実施形態では、転送処理部31は、1画素ずつ、データ転送しているので、制御部43は、幅カウンタ41を1インクリメントする。
また、上記制御部43は、終端に到達したと判定し、しかも、矩形領域全体のデータ転送が終了していないと判定した場合は、上記ライン数カウンタ42のカウント値を1インクリメントできる。
一方、上記メインメモリアドレス算出部33は、図7に示すように、現水平ラインにおける矩形領域の始端(この例では、左端)のアドレス(ライン開始アドレス)を記憶するライン開始アドレスレジスタ51と、転送対象とする画素のメインメモリ2におけるアドレス(現アドレス)を記憶すると共に、記憶されたアドレスを上記アドレス信号A1として出力する現アドレスカウンタ52と、これらの部材51・52および上記各レジスタ23・24の値、転送制御部32からの制御信号S1・S2、並びに、転送処理部31からの制御信号S5に基づき、上記各部材51・52を制御する制御部53とを備えている。
上記制御部53は、上記制御信号S2によって、矩形領域の転送が指示された場合、上記開始アドレス23の値を、上記ライン開始アドレスレジスタ51および現アドレスカウンタ52に格納できる。
また、上記制御信号S1が、現水平ラインの終端に到達し、しかも、矩形領域の転送が終了していないことを示している場合、上記制御部53は、上記ライン開始アドレスレジスタ51に格納されている値を、アドレス差レジスタ24に格納されている値の分だけ増加させると共に、現アドレスカウンタ52に、増加後の値を格納できる。
さらに、上記制御部53は、転送処理部31からの制御信号S5が転送元となるメモリ(この場合は、メインメモリ2)からの読み出し終了を示している場合、上記現アドレスカウンタ52のカウント値を、転送処理部31によってデータ転送されたアドレスの分だけ、インクリメントさせることができる。なお、本実施形態では、転送処理部31がメインメモリ2の1アドレス分ずつデータ転送しているので、上記制御部53は、現アドレスカウンタ52のカウント値を1ずつインクリメントする。
なお、上記現アドレスカウンタ52は、転送処理部31によるデータ転送の度に、インクリメントできればよいので、上記制御部53は、転送処理部31からの制御信号S5を参照せず、転送制御部32からの制御信号S1が、そのラインの終端への未到達と、矩形領域全体の転送の未終了とを示している場合に、現アドレスカウンタ52をインクリメントしてもよい。ただし、本実施形態では、現アドレスカウンタ52の動作時間をより長く確保するため、転送処理部31は、転送元となるメインメモリ2からの読み出し終了を示す制御信号S5を出力し、制御部53は、制御信号S5が真になった時点で、現アドレスカウンタ52をインクリメントしている。
同様に、上記ビデオメモリアドレス算出部34は、図8に示すように、現水平ラインのライン開始アドレスを記憶するライン開始アドレスレジスタ61と、ビデオメモリ3における現アドレスを記憶すると共に、記憶されたアドレスを上記アドレス信号A2として出力する現アドレスカウンタ62と、これらの部材61・62および上記各レジスタ25・26の値、および、転送制御部32からの制御信号S1・S2に基づいて、上記各部材61・62を制御する制御部63とを備えている。
上記制御部63は、上記制御信号S2によって、矩形領域の転送が指示された場合、上記開始アドレス25の値を、上記ライン開始アドレスレジスタ61および現アドレスカウンタ62に格納できる。
また、上記制御信号S1が、現水平ラインの終端に到達し、しかも、矩形領域の転送が終了していないことを示している場合、上記制御部63は、上記ライン開始アドレスレジスタ61に格納されている値を、アドレス差レジスタ26に格納されている値の分だけ増加させると共に、現アドレスカウンタ62に、増加後の値を格納できる。
さらに、上記制御部63は、転送制御部32からの制御信号S1が、そのラインの終端への未到達と、矩形領域全体の転送の未終了とを示している場合、上記現アドレスカウンタ62のカウント値を、転送処理部31によってデータ転送されたアドレスの分だけ、インクリメントさせることができる。なお、本実施形態では、転送処理部31がビデオメモリ3の1アドレス分ずつデータ転送しているので、上記制御部63は、現アドレスカウンタ62のカウント値を1ずつインクリメントする。
上記構成では、CPU6は、矩形領域の転送に先立って、上記幅および高さレジスタ21・22に、矩形領域の幅および高さを格納する。さらに、CPU6は、矩形領域の転送に先立って、メインメモリ2およびビデオメモリ3における矩形領域の開始アドレスを、各開始アドレスレジスタ23・25に格納する。また、アドレス差レジスタ24・26の値は、予め定められた固定値であってもよいが、本実施形態では、CPU6が、矩形領域の転送に先立って、メインメモリ2およびビデオメモリ3のメモリマップに合わせて、アドレス差レジスタ24・26の値を設定する。
各レジスタ21〜26に値が設定され、CPU6が矩形領域のデータ転送の開始を指示すると、転送制御部32は、各アドレス算出部33・34へ、転送開始が指示されたことを示す制御信号S2を出力する。これに応じて、各アドレス算出部33・34は、次にデータを転送するアドレスとして、開始アドレス23・25の値をそれぞれ示すアドレス信号A1・A2を出力する。
さらに、転送処理部31は、転送制御部32からの制御信号S3に応じて、メインメモリ2のうち、メインメモリアドレス算出部33からのアドレス信号A1の示すアドレスに格納されたデータを読み出すと共に、読み出しが終了すると、読み出し終了を示す制御信号S5をメインメモリアドレス算出部33へ出力する。また、転送処理部31は、読み出したデータを、ビデオメモリ3のうち、ビデオメモリアドレス算出部34からのアドレス信号A2の示すアドレスへ当該データを書き込むと共に、書き込みが終了すると、書き込み終了を示す制御信号S4を転送制御部32へ出力する。
一方、転送処理部31からの制御信号S4によって、転送処理部31がデータの転送を出力したことを検出すると、転送制御部32は、現水平ラインの終端に到達したか否かと、矩形領域のデータ転送が終了したか否かを示す制御信号S1を出力する。
ここで、転送処理部31がデータを転送しても、現水平ラインの終端に到達しない場合は、上記転送制御部32は、転送処理部31がデータ転送する度に、終端への未到達と、矩形領域全体の転送の未終了とを示す制御信号S1を出力する。
したがって、各アドレス算出部33・34は、転送処理部31がデータ転送する度に、以下の処理、すなわち、転送したデータが各メモリ2・3に占めるアドレスの分だけ、各メモリ2・3の現アドレスを変更する処理を繰り返す。
ここで、メインメモリ2とビデオメモリ3とのそれぞれに対応して、現アドレスカウンタ52・62が設けられており、各現アドレスカウンタ52・62のインクリメント量は、転送したデータが各メモリ2・3に占めるアドレスに合わせて設定されている。したがって、画素のデータをメインメモリ2に格納する際のデータ構造(メモリ構成;例えば、メインメモリ2において、各画素を示すデータが占有するアドレスの数など)と、画素のデータをビデオメモリ3に格納する際のデータ構造とが互いに異なっており、しかも、転送処理部31がデータ転送毎にCPU6からの指示を受けていないにも拘わらず、転送処理部31は、何ら支障なく、各画素のデータを、メインメモリ2からビデオメモリ3に転送できる。
現水平ラインに関するデータ転送が繰り返され、現水平ラインの終端に到達すると、上記転送制御部32は、終端への到達を示す制御信号S1を出力する。
この場合、各アドレス算出部33・34は、それぞれに対応するアドレス差レジスタ24・26を参照して、次の水平ラインのライン開始アドレスを決定すると共に、各ライン開始アドレスをそれぞれ示すアドレス信号A1・A2を出力する。
ここで、上述したように、本実施形態に係る転送回路11では、メインメモリ2に対応するアドレス差レジスタ24およびライン開始アドレスレジスタ51とは別に、ビデオメモリ3に対応するアドレス差レジスタ26およびライン開始アドレスレジスタ61が設けられている。したがって、画素のデータをメインメモリ2に格納する際のデータ構造(メモリ構成;例えば、隣接する水平ラインの開始アドレス同士の差など)と、画素のデータをビデオメモリ3に格納する際のデータ構造とが互いに異なっており、しかも、転送処理部31が各水平ラインのデータ転送毎にCPU6からの指示を受けていないにも拘わらず、転送処理部31は、何ら支障なく、各画素のデータを、メインメモリ2からビデオメモリ3に転送できる。
上記各水平ラインのデータ転送は、矩形領域の高さ分の水平ラインが転送されるまで繰り返され、矩形領域の高さ分の水平ラインのデータ転送が終了すると、転送制御部32は、例えば、矩形領域全体のデータ転送が終了したことを示す制御信号をCPU6へ出力するなどして、矩形領域全体のデータ転送が終了したことをCPU6に通知する。
このように、本実施形態に係る転送回路11では、メインメモリ2に対応するアドレス差レジスタ24、ライン開始アドレスレジスタ51および現アドレスカウンタ52とは別に、ビデオメモリ3に対応するアドレス差レジスタ26、ライン開始アドレスレジスタ61および現アドレスカウンタ62が設けられているので、両メモリ2・3に画素のデータを格納する際のデータ構造が互いに異なっており、しかも、矩形領域のデータ転送を開始してから終了するまでの間に、CPU6が転送回路11に指示をしていないにも拘わらず、任意の矩形領域内の画素のデータを、メインメモリ2とビデオメモリ3との間で転送できる。したがって、CPU6の負担を軽減できる。
さらに、例えば、各水平ラインの終了時点など、矩形領域のデータ転送中の時点に、CPU6が転送回路11へ指示する構成とは異なり、CPU6が転送回路11へ指示することに起因するオーバーヘッドの発生を防止できる。この結果、メモリ構成の互いに異なるメモリ2・3間で、任意の矩形領域内のデータを高速にデータ転送できる。
加えて、本実施形態に係る転送回路11では、上記アドレス差レジスタ24・26は、CPU6から値を設定可能に構成されている。したがって、メモリ構成が変化して、隣接する水平ライン間の開始アドレス差が変化する場合であっても、各レジスタ24・26の値を適切に設定し直すことによって、転送回路11は、何ら支障なく、任意の矩形領域内のデータを高速にデータ転送できる。
以下では、図9〜図12を参照しながら、転送回路11の各部材31〜34の詳細な回路構成例について説明する。
すなわち、図9に示す構成例では、メインメモリ2およびビデオメモリ3が、DRAM(Dynamic Randam Acess Memory )によって実現されており、転送処理部31には、それぞれの読み書きを制御するためのDRAMコントローラ101および102と、メインメモリ2のデータ端子に出力されたデータをラッチし、ビデオメモリ3のデータ端子へ出力するバッファ103と、バッファ103がメインメモリ2の出力したデータをラッチするまでの間、DRAMコントローラ102がバッファ103のデータをビデオメモリ3への書き込みを遅延させるタイミング制御回路104とを備えている。
また、本構成例に係る転送回路11は、矩形領域の転送中、メインメモリ2およびビデオメモリ3へのアクセス権を占有し続けるのではなく、CPU6等の外部回路がメインメモリ2またはビデオメモリ3にアクセスする際には、矩形領域のデータ転送中であっても、適切なタイミングで、データ転送を中断し、メインメモリ2またはビデオメモリ3へのアクセスを許可するように構成されている。
具体的には、上記転送処理部31は、メインメモリ2へのアクセス権を調停する調停回路111と、当該調停回路111からの制御信号REQ1_OKが転送回路11へアクセス権を与えていること(矩形領域のデータ転送を許可していること)を示している間は、上記メインメモリアドレス算出部33からのアドレス信号A1を選択し、残余の間は、外部バスからのアドレス信号を選択すると共に、選択した方を、DRAMコントローラ101のAddress端子へ出力するマルチプレクサ112とを備えている。さらに、上記転送処理部31には、上記外部バスからメインメモリ2のデータ端子までの間に配され、DRAMコントローラ101への書き込み制御信号Write_Lが読み出しを指示している間にのみ、データの通過を遮断する3ステート・バッファ113と、調停回路111からの制御信号REQ1_OKが転送回路11へアクセス権を与えていないことを示しており、しかも、上記外部バスからの制御信号が書き込みを指示している場合にのみ、DRAMコントローラ101へ書き込みを指示する書き込み制御信号Write_Lを出力し、残余の場合は、読み出しを指示する書き込み制御信号Write_Lを出力する論理回路114とが設けられている。なお、本実施形態では、転送回路11へアクセス権を与えている場合、制御信号REQ1_OKが真であり、外部からの制御信号および書き込み制御信号Write_Lが偽の場合は、読み出しを意味している。したがって、上記論理回路114は、OR素子によって実現されている。
また、本構成例に係る転送回路11は、矩形領域の転送中、メインメモリ2およびビデオメモリ3へのアクセス権を占有し続けるのではなく、CPU6等の外部回路がメインメモリ2またはビデオメモリ3にアクセスする際には、矩形領域のデータ転送中であっても、適切なタイミングで、データ転送を中断し、メインメモリ2またはビデオメモリ3へのアクセスを許可するように構成されている。
同様に、上記転送処理部31は、ビデオメモリ3へのアクセス権を調停する調停回路121と、当該調停回路121からの制御信号REQ1_OKが転送回路11へアクセス権を与えていること(矩形領域のデータ転送を許可していること)を示している間は、上記ビデオメモリアドレス算出部34からのアドレス信号A2を選択し、残余の間は、外部バスからのアドレス信号を選択すると共に、選択した方を、DRAMコントローラ102のAddress端子へ出力するマルチプレクサ122とを備えている。さらに、上記転送処理部31には、上記外部バスからビデオメモリ3のデータ端子までの間に配され、DRAMコントローラ102への書き込み制御信号Write_Lが読み出しを指示している間にのみ、データの通過を遮断する3ステート・バッファ123と、調停回路121からの制御信号REQ1_OKが転送回路11へアクセス権を与えていないことを示しており、しかも、上記外部バスからの制御信号が読み出しを指示している場合にのみ、DRAMコントローラ102へ読み出しを指示する書き込み制御信号Write_Lを出力し、残余の場合は、書き込みを指示する書き込み制御信号Write_Lを出力する論理回路124とが設けられている。
なお、本実施形態では、転送回路11へアクセス権を与えている場合、制御信号REQ1_OKが真であり、外部からの制御信号および書き込み制御信号Write_Lが偽の場合は、読み出しを意味している。また、外部からの制御信号は、インバータによって反転された後、論理回路124に印加されている。したがって、上記論理回路124は、NOR素子によって実現されている。
さらに、上記転送処理部31には、当該調停回路121からの制御信号REQ1_OKが転送回路11へアクセス権を与えていることを示している間は、上記バッファ103からのデータ信号を選択し、残余の間は、外部バスからのデータ信号を選択すると共に、選択した方を、上記3ステート・バッファ123へ出力するマルチプレクサ125も設けられている。
また、本構成例に係るタイミング制御回路104は、調停回路111からの制御信号REQ1_OKを反転および遅延させることによって、転送回路11へのアクセス権要求の有無を示すREQ1を生成し、上記調停回路121へ印加している。
さらに、本構成例では、上述した転送制御部32からの制御信号S3は、転送回路11へのアクセス権要求の有無を示すREQ1として、上記調停回路121へ印加されている。また、転送処理部31に設けられたタイミング制御回路126は、上記調停回路121からの制御信号REQ1_OKを、反転および遅延した後、転送処理部31によるデータ転送の終了を示す、パルス状の制御信号S4として出力する。なお、制御信号S4を受け取った転送制御部32は、新たな制御信号S3を出力するので、当該制御信号S3を受け付けた調停回路111は、DRAMコントローラ101へ指示して、バッファ103のデータを書き換える。この結果、上記タイミング制御回路126の遅延時間が短いと、調停回路121がDRAMコントローラ102へ矩形領域のためのデータ転送を指示してから、DRAMコントローラ102がビデオメモリ3にバッファ103のデータを書き込むまでの間に、バッファ103のデータが書き換えられてしまう。したがって、上記遅延時間は、調停回路121がDRAMコントローラ102へ矩形領域のためのデータ転送を指示してから、DRAMコントローラ102がビデオメモリ3にバッファ103のデータを書き込むまでの間に、バッファ103のデータが変更されないように設定されている。
また、上記外部バスからの信号であって、メインメモリ2またはビデオメモリ3へのアクセス権の要求を示す信号は、それぞれ、ワンショット・マルチバイブレータによって遅延された後、調停回路111・121に、REQ0として入力されている。また、DRAMコントローラ101・102からのBusy信号は、それぞれ対応する調停回路111・121のBusy端子に入力されており、各調停回路111・121から出力された、アクセス許可を示すAccess信号は、それぞれ対応するDRAMコントローラ101・102のAccess端子に入力されている。
これにより、調停回路111は、転送制御部32からの制御信号S3と、外部バスからREQ0端子へ入力されている信号とに基づいて、転送制御部32と外部バスとのそれぞれがメインメモリ2へのアクセスを要求しているか否かを判定できる。
また、調停回路111は、DRAMコントローラ101からのBusy信号が偽である期間に(DRAMコントローラ101が空いている期間)に、REQ0・REQ1端子の少なくとも一方が真である場合(アクセスを要求している場合)は、予め定められた手順で、アクセスを要求しているものうちのいずれか1つにアクセス権を与え、転送回路11にアクセス権を与えているか否かを示す制御信号REQ1_OKを出力できる。また、転送回路11または外部バスに接続された回路の一方にアクセス権を与えた場合は、アクセスを許可することを示すAccess信号をDRAMコントローラ101へ出力できる。
同様に、調停回路121は、タイミング制御回路104からREQ1端子へ入力されている信号と、外部バスからREQ0端子へ入力されている信号とに基づいて、転送制御部32と外部バスとのそれぞれがビデオメモリ3へのアクセスを要求しているか否かを判定できる。
また、調停回路121は、DRAMコントローラ102からのBusy信号が偽である期間に(DRAMコントローラ102が空いている期間)に、REQ0・REQ1端子の少なくとも一方が真である場合(アクセスを要求している場合)は、予め定められた手順で、アクセスを要求しているものうちのいずれか1つにアクセス権を与え、転送回路11にアクセス権を与えているか否かを示す制御信号REQ1_OKを出力できる。また、転送回路11または外部バスに接続された回路の一方にアクセス権を与えた場合は、アクセスを許可することを示すAccess信号をDRAMコントローラ102へ出力できる。
上記構成では、外部からのアクセス要求がない場合、調停回路111は、転送制御部32からの制御信号S3が真になると、DRAMコントローラ101が空いている期間に、転送回路11にアクセス権を与えていることを示すAccess信号およびREQ1_OK信号を出力する。これにより、マルチプレクサ112は、アドレス信号A1をDRAMコントローラ101へ出力し、論理回路114は、DRAMコントローラ101へ読み出しを指示すると共に、3ステート・バッファ113は、外部バスからメインメモリ2へのデータを遮断する。この結果、メインメモリ2から、アドレス信号A1の示すアドレスに格納されたデータが出力され、バッファ103にラッチされる。
当該バッファ103にデータがラッチされた後、調停回路111からの制御信号REQ1_OKは、調停回路121のREQ1端子に入力される。したがって、調停回路121は、転送回路11にアクセス権を与えていることを示すAccess信号およびREQ1_OK信号を出力する。これにより、マルチプレクサ122は、アドレス信号A2をDRAMコントローラ102へ出力し、論理回路124は、DRAMコントローラ102へ書き込みを指示すると共に、マルチプレクサ125および3ステート・バッファ123は、バッファ103からのデータをビデオメモリ3のデータ端子へ入力する。この結果、メインメモリ2からのデータは、ビデオメモリ3のうち、アドレス信号A2の示すアドレスに格納される。さらに、タイミング制御回路126は、上記調停回路121からの制御信号REQ1_OKを遅延および反転させ、パルス状の制御信号S4として出力する。
一方、図10に示すように、本構成例に係る転送制御部32の制御部43は、幅レジスタ21の値と幅カウンタ41のカウント値とを比較して、一致/不一致を判定するコンパレータ201と、高さレジスタ22値とライン数カウンタ42のカウント値とを比較して、一致/不一致を判定するコンパレータ202と、コンパレータ201の出力および転送処理部31からの制御信号S4に基づいて、現水平ラインにおける矩形領域の終端へ到達したか否かを示す制御信号S11を生成する論理回路203と、上記両コンパレータ201・202の出力および上記制御信号S4に基づいて、上記終端への到達および矩形領域全体の転送の未終了の双方が成立しているか否かを示す制御信号S12を生成する論理回路204と、上記両コンパレータ201・202の出力および上記制御信号S4に基づいて、上記終端への到達および矩形領域全体の転送の終了の双方が成立しているか否かを示す制御信号S13を生成する論理回路205とを備えている。
これにより、制御部43は、転送処理部31がデータ転送をする度に、制御信号S1としての制御信号S11およびS12を出力できる。なお、当該制御信号S12は、上述の制御信号S1の一部として、各アドレス算出部33・34と転送制御部32とで共用されている回路221・222(いずれも後述)へ入力されている。
上記論理回路203は、コンパレータ201の出力が不一致を示しているか否かを、転送処理部31から制御信号S4のパルスが印加されている期間中、出力する回路であって、論理回路203の出力する制御信号S11は、上述の制御信号S1の一部として、ビデオメモリアドレス算出部34へ出力される。また、上記制御信号S11は、幅カウンタ41のインクリメント端子INCへ入力されている。
また、上記論理回路204は、コンパレータ201の出力が一致を示すという条件と、コンパレータ202の出力が不一致を示すという条件との双方が成立しているか否かを、転送処理部31から制御信号S4のパルスが印加されている期間中、出力する回路であって、論理回路204の出力する制御信号S12は、ライン数カウンタ42のインクリメント端子INCへ入力されている。
さらに、上記論理回路205は、コンパレータ201・202の出力の双方が一致を示しているか否かを、転送処理部31から制御信号S4のパルスが印加されている期間中、出力する回路であって、論理回路205の出力する制御信号S13は、後述する転送状態レジスタ211へリセット端子Rに入力されている。
一方、上記転送制御部32の制御部43は、CPU6などの外部回路から、外部バスを介してアクセス可能な転送状態レジスタ211を備えており、上記外部回路は、当該転送状態レジスタ211をセットすることによって、転送回路11へ矩形領域の転送を指示できる。
また、上記論理回路205は、矩形領域の転送が終了した場合、上記転送状態レジスタ211をリセットすると共に、転送状態レジスタ211の出力は、バッファを介して外部バスへ出力されている。これにより、上記外部回路は、転送状態レジスタ211の出力を読み出すことによって、矩形領域の転送が終了したか否かを確認することができる。
さらに、上記転送状態レジスタ211の出力信号は、例えば、ワンショット・マルチバイブレータなどによって実現されるタイミング制御回路212によって遅延された後、パルス状の制御信号S2として、上述した各アドレス算出部33・34へ出力される。これにより、制御部43は、矩形領域の転送が指示された場合に制御信号S2を出力できる。また、当該制御信号S12は、インバータによって反転された後、ライン数カウンタ42のローアクティブなリセット端子に入力される。
また、上記制御部43は、上記制御信号S2と上記制御信号S12との論理和を算出するOR回路221と、OR回路221の出力を反転して、上記幅カウンタ41のローアティブなリセット端子に入力するインバータ222とを備えている。これらの回路221・222は、図1に示す両アドレス算出部33・34の一部でもあって、インバータ222の出力信号S14は、各アドレス算出部33・34のライン開始アドレスレジスタ51・61および現アドレスカウンタ52・62へ、負論理のLoad信号として入力されている。
さらに、上記制御部43には、例えば、ワンショット・マルチバイブレータなどによって実現され、上記OR回路221の出力信号を遅延するタイミング制御回路231と、当該タイミング制御回路231の出力信号と、上記制御信号S11との論理和を算出し、制御信号S3として出力するOR回路232とが設けられている。
これにより、制御部43は、矩形領域のデータ転送が指示された場合、および、転送処理部31がデータ転送を終了する度に、転送処理部31へ新たな転送を指示する制御信号S3を出力できる。
一方、図11に示すように、本構成例に係るメインメモリアドレス算出部33の制御部53は、ライン開始アドレスレジスタ51の値とアドレス差レジスタ24の値とを加算する加算器301と、上記転送制御部32からの制御信号S2に基づいて、当該加算器301の出力値と開始アドレスレジスタ23の出力値との一方を選択して、ライン開始アドレスレジスタ51および現アドレスカウンタ52へ入力するマルチプレクサ302とを備えている。
上記構成において、矩形領域の転送が開始された場合、転送制御部32から制御信号S2が真になる。これに応じて、上記マルチプレクサ302は、開始アドレスレジスタ23の値を上記両回路51・52に入力する。
また、制御信号S2が真になった後、図10に示すOR回路221・223およびタイミング制御回路231の遅延時間だけ遅延して、負論理の制御信号S14が真(Low)になる。この時点では、上記両回路51・52の入力端子Dには、開始アドレスレジスタ23の値が入力されているので、上記両回路51・52は、当該値を記憶する。なお、制御信号S2のパルス幅は、少なくとも、制御信号S2が真になってから、開始アドレスレジスタ23の値が上記両回路51・52に格納されるまでの間、制御信号S2が真であり続けるように設定されている。
また、上記現アドレスカウンタ52には、転送処理部31から制御信号S5が入力されているので、制御信号S5が入力される度に、上記現アドレスカウンタ52の値は、インクリメントされる。
一方、矩形領域の転送開始が指示され、パルス状の制御信号S2が出力された後は、制御信号S2は、常時、偽に保たれている。この状態では、マルチプレクサ301は、加算器301の出力を選択しているので、上記両回路51・52の入力端子Dには、ライン開始アドレスレジスタ51の値とアドレス差レジスタ24の値とを加算した結果が入力されている。
この状態で、転送制御部32の論理回路203が、現水平ラインにおいて矩形領域の終端に到達したと判断し、制御信号S12を真にすると、制御信号S14が真になる。したがって、上記両回路51・52は、新たに、上記記加算結果を記憶する。
同様に、本構成例に係るビデオメモリアドレス算出部34の制御部63は、図12に示すように、ライン開始アドレスレジスタ61の値とアドレス差レジスタ26の値とを加算する加算器401と、上記転送制御部32からの制御信号S2に基づいて、当該加算器401の出力値と開始アドレスレジスタ25の出力値との一方を選択して、ライン開始アドレスレジスタ61および現アドレスカウンタ12へ入力するマルチプレクサ402とを備えている。
なお、ビデオメモリアドレス算出部34に関連する各部材25・26・61・62・301・302の動作は、以下の点、すなわち、現アドレスカウンタ62のインクリメント端子INCに、制御信号S5に代えて、制御信号S11が入力されており、当該現アドレスカウンタ62のカウント値が、制御信号S11が真になる度にインクリメントされる点を除けば、メインメモリアドレス算出部33に関連する各部材23・24・51・52・401・402の動作と同一なので、これらの説明を省略する。
〔第2の実施形態〕
ところで、上記第1の実施形態では、転送処理部31が画素のデータを1ワードずつ伝送する場合を例にして説明した。これに対して、本実施形態では、メインメモリ2およびビデオメモリ3がバースト転送可能であり、転送処理部が複数ワードずつバースト転送する構成について説明する。
なお、後述するように、転送処理部が複数画素分のデータをバースト転送してもよいが、以下では、1画素分のデータが、メインメモリ2およびビデオメモリ3では、複数ワードのデータに対応している場合を例にして説明する。
すなわち、図1に示すように、本実施形態に係るメインメモリ2aおよびビデオメモリ3aは、第1の実施形態に係るメインメモリ2およびビデオメモリ3と略同様であるが、1画素分のデータが、複数のアドレスに渡って書き込まれている。
また、本実施形態に係る転送回路11aは、図1に示す転送回路11と略同様であるが、各アドレス算出部33a・34aの現アドレスカウンタ52a・52aの増分が、それぞれ、メインメモリ2aにおいて1画素のデータが占めるアドレスの数、および、ビデオメモリ3aにおいて1画素のデータが占めるアドレスの数に設定されている。
さらに、本実施形態に係る転送処理部31aでは、バッファ103aが、FIFO(First In First Out)バッファによって実現されており、1画素分のデータを蓄積できる。また、DRAMコントローラ101aは、バースト転送によって、メインメモリ2のデータをバッファ103aに書き込み、DRAMコントローラ102aは、バースト転送によって、バッファ103aのデータを、ビデオメモリ3に書き込むように構成されている。ここで、DRAMコントローラ101a・102aがバースト転送する際のバースト長は、メインメモリ2aにおいて1画素のデータが占めるアドレスの数、および、ビデオメモリ3aにおいて1画素のデータが占めるアドレスの数になるように設定されている。
なお、転送回路11aの部材のうち、上記で説明しなかった部材、並びに、上記で説明した部材の機能および動作であっても、説明しなかった機能および動作は、第1の実施形態に係る転送回路11の各部材、あるいは、対応する部材(参照符号の末尾のaを除いた部材)と同じなので、説明を省略する。
上記構成では、1画素分のデータが複数のアドレスに渡ってメインメモリ2aおよびビデオメモリ3aに書き込まれているにも拘わらず、バースト転送によって、各画素のデータが転送元のメモリ(この場合は、メインメモリ2a)から転送先のメモリ(この場合は、ビデオメモリ3a)に転送される。したがって、1ワードずつ転送する場合よりも、より短い時間で、矩形領域内のデータを転送できる。
この場合であっても、CPU6などの外部回路は、転送処理部31aによるデータ転送毎、あるいは、転送処理部31aによる1水平ライン分のデータ転送毎に、転送処理部31aへ指示する必要がないので、外部回路が転送回路11aへ指示することに起因するオーバーヘッドの発生を防止できる。この結果、メモリ構成の互いに異なるメモリ2a・3a間で、任意の矩形領域内のデータを高速にデータ転送できる。
なお、両メモリ2・3において、1画素分のデータが占めるアドレスの数は、互いに同一であってもよいし、互いに異なっていてもよい。読み出しの単位(1ワード分のデータ量)と書き込みの単位とが異なっている場合、FIFOバッファ103aは、書き込もうとするDRAMコントローラ(この場合は、101a)から見れば、そのDRAMコントローラの単位での書き込みを受け付け、読み出そうとするDRAMコントローラ(この場合は、102a)から見れば、そのDRAMコントローラの単位での読み出しを受け付けることができるように構成されていればよい。また、上記では、メインメモリ2およびビデオメモリ3の双方に対して、バースト転送する場合を例にして説明したが、一方のみがバースト転送しても、同様の効果が得られる。
ところで、上記では、バースト転送の例として、1画素分のデータがメインメモリ2およびビデオメモリ3では、複数ワードのデータに対応しており、転送処理部31aが1画素分のデータを転送する場合について説明した。これに対して、以下では、複数画素のデータをバースト転送する場合について説明する。なお、以下の構成は、1画素分のデータが複数ワードに対応している場合にも適用できるが、以下では、説明の便宜上、第1の実施形態と同様に、1画素分のデータが1ワードに対応している場合について説明する。
すなわち、本変形例に係る転送回路11bは、図13に示すように、転送回路11と略同様に構成されているが、転送処理部31bは、複数画素分のデータを、バースト転送可能に構成されており、各アドレス算出部33b・34bの現アドレスカウンタ52b・52bの増分が、それぞれ、メインメモリ2またはビデオメモリ3において上記複数画素分のデータが占めるアドレスの数に設定されている。また、本変形例に係る転送制御部32bでは、幅カウンタ41bの増分が、一括転送する画素数に設定されている。
さらに、本変形例に係る転送制御部32bは、転送制御部32の判定に加えて、現水平ラインの終端へ到達せず、しかも、矩形領域全体の転送が終了していない場合は、次に転送すべき画素数を算出し、制御信号S6として、転送処理部31bに出力できる。上記制御信号S6を出力する回路は、例えば、幅レジスタ21に格納されている値から、幅カウンタ41のカウント値を減算する回路などによって実現できる。
また、転送処理部31bは、例えば、DRAMコントローラ101b・102bへ、上記制御信号S6の画素数に対応するワード数を、各DRAMコントローラ101b・102bのバースト長として出力する回路を設けるなどして、上記制御信号S6の示す画素数に対応するワード数のデータを、バースト転送できるように構成されている。
一例として、1画素分のデータが各メモリ2・3での1ワードに対応し、転送処理部31bが、4画素分のデータをバースト転送可能に構成されている場合、上記各アドレス算出部33b・34bの現アドレスカウンタ52b・52bの増分は、4ワードに設定されている。
また、この場合、上記転送制御部32bは、現水平ラインの終端へ到達せず、しかも、矩形領域全体の転送が終了していない場合、現水平ラインの矩形領域が4画素以上残っていれば、制御信号S6として、4を出力し、3、2または1画素しか残っていない場合は、制御信号S6として、3、2または1を出力する。
さらに、転送処理部31bは、現水平ラインの矩形領域が4画素以上残っていれば、メインメモリ2のデータを4ワード、バースト転送によって読み出し、4ワードのバースト転送によって、当該データをビデオメモリ3に書き込む。
一方、現水平ラインの矩形領域が3画素しか残っていない場合は、メインメモリ2のデータを、それに対応するワード(この場合は、3ワード)、バースト転送によって読み出し、残っている画素数に応じたワード(この場合は、3ワード)のバースト転送によって、当該データをビデオメモリ3に書き込む。
なお、転送回路11bの部材のうち、上記で説明しなかった部材、並びに、上記で説明した部材の機能および動作であっても、説明しなかった機能および動作は、上記転送回路11の各部材、あるいは、対応する部材(参照符号の末尾のbを除いた部材)と同じなので、説明を省略する。
上記構成でも、バースト転送によって、各画素のデータが転送元のメモリ(この場合は、メインメモリ2)から転送先のメモリ(この場合は、ビデオメモリ3)に転送される。したがって、転送回路11aと同様に、メモリ構成の互いに異なるメモリ2・3間で、任意の矩形領域内のデータを高速にデータ転送できる。
〔第3の実施形態〕
ところで、上記第1および第2の実施形態では、一例として、転送回路がメインメモリからビデオメモリへ矩形領域のデータを転送する構成について説明した。これに対して、本実施形態では、転送回路が双方向にデータを転送する構成について説明する。なお、本構成は、第2の実施形態にも適用できるが、以下では、一例として、第1の実施形態に適用した場合について説明する。
すなわち、本実施形態に係る転送回路11cは、図14に示すように、CPU6などの外部回路からの指示に応じて、転送方向を、メインメモリ2からビデオメモリ3への方向だけではなく、その逆方向に変更できるように構成されている。
具体的には、図15に示すように、転送回路11cには、CPU6などの外部回路からアクセス可能な転送方向レジスタ241が設けられており、転送方向レジスタ241に設定された値を、制御信号S7として、転送処理部31cに出力できる。なお、本実施形態では、一例として、転送方向レジスタ241が転送制御部32cに設けられている構成について説明するが、転送処理部31cが上記外部回路から直接転送方向の指示を受け取ってもよい。
一方、転送処理部31cには、図9に示す転送処理部31の構成に加えて、図16に示すように、バッファ103と同様の構成のバッファ105が設けられている。ただし、当該バッファ105は、バッファ103と逆方向の転送用のバッファであり、入力端子Dには、ビデオメモリ3からのデータが、バッファを介して入力されている。また、バッファ105の出力は、外部バスと3ステート・バッファ113との間に設けられたマルチプレクサ106を介して、3ステート・バッファ113に入力されている。当該マルチプレクサ106は、制御信号S7がビデオメモリ3からメインメモリ2への転送を指示している間、バッファ105の出力を選択し、それ以外の場合は、外部バスを選択するように構成されている。
さらに、転送処理部31cには、図16に示す回路だけではなく、図17に示す回路も追加されている。すなわち、制御信号S3が図9に示す調停回路111のREQ1端子へ入力されるまでの間には、制御信号S7に応じて、入力の一方を選択するマルチプレクサ151が設けられている。当該マルチプレクサ151は、制御信号S7がビデオメモリ3への転送を指示している場合は、上記制御信号S3をREQ1端子へ入力すると共に、メインメモリ2への転送を指示している場合は、制御信号S3に代えて、図9に示すタイミング制御回路126の出力を、上記REQ1端子に入力できる。
また、転送処理部31cにおいて、図9に示すタイミング制御回路104と調停回路121のREQ1端子との間には、制御信号S7に応じて、入力の一方を選択するマルチプレクサ152が設けられている。当該マルチプレクサ152は、制御信号S7がビデオメモリ3への転送を指示している場合は、タイミング制御回路104の出力を、調停回路121のREQ1端子へ入力すると共に、メインメモリ2への転送を指示している場合は、タイミング制御回路104の出力に代えて、上記制御信号S3を、調停回路121のREQ1端子に入力できる。
さらに、図9に示すタイミング制御回路104および126の出力が制御信号S5およびS4として出力されるまでの間には、制御信号S7に応じて、両者を入れ換える置換回路153が設けられている。当該置換回路153は、制御信号S7がビデオメモリ3への転送を指示している場合は、図9と同様に、タイミング制御回路104および126の出力を制御信号S5およびS4として出力できる。一方、制御信号S7がメインメモリ2への転送を指示している場合は、図9とは異なり、タイミング制御回路104の出力を、制御信号S4として出力すると共に、タイミング制御回路126の出力を、制御信号S5として出力できる。
また、各アドレス算出部33c・34cには、両者に共通の回路として、図18に示す置換回路311が設けられている。当該置換回路311は、転送制御部32cからの制御信号S11と、転送処理部31cからの制御信号S5との一方を、メインメモリアドレス算出部33cの現アドレスカウンタ52に入力すると共に、他方を、ビデオメモリアドレス算出部34cの現アドレスカウンタ62に入力する回路であって、制御信号S7がビデオメモリ3への転送を示している場合は、制御信号S5を現アドレスカウンタ52へ入力すると共に、メインメモリ2への転送を示している場合は、制御信号S5を現アドレスカウンタ62へ入力できる。
上記構成では、制御信号S7がビデオメモリ3への転送を示している場合、転送回路11cの各部材は、第1の実施形態の転送回路11と同様に動作して、メインメモリ2のデータをビデオメモリ3へ転送する。
一方、制御信号S7がメインメモリ2への転送を示している場合は、メインメモリ2とビデオメモリ3との役割が入れ替わり、ビデオメモリ3のデータがバッファ105を介してメインメモリ2へ書き込まれる。
いずれの場合であっても、上記各実施形態と同様に、CPU6などの外部回路は、転送処理部31cによるデータ転送毎、あるいは、転送処理部31cによる1水平ライン分のデータ転送毎に、転送処理部31cへ指示する必要がないので、外部回路が転送回路11へ指示することに起因するオーバーヘッドの発生を防止できる。この結果、メモリ構成の互いに異なるメモリ2・3間で、任意の矩形領域内のデータを高速にデータ転送できる。
また、本実施形態では、ビデオメモリ3からメインメモリ2への方向にもデータを転送できるので、例えば、図示しないビデオキャプチャ回路など、ビデオメモリ3に直接データを書き込む回路によって書き込まれたデータを、メインメモリ2に転送することができ、当該データを、CPU6などの外部回路が把握することができる。
なお、上記各実施形態では、各レジスタ21〜26に、幅、高さ、開始アドレスあるいはアドレス差自体が格納される場合を例にして説明したが、これに限るものではなく、例えば、複数の値から演算によって、これらの値を特定可能な情報(例えば、幅および高さに代えて、左上および右下の座標など)を格納し、演算によって、上記各値を算出してもよい。ただし、上記各実施形態のように、各値を直接格納した方が、転送回路(11〜11c)での演算が不要になるので、転送回路の回路構成を簡略化できる。