以下、本発明の実施の形態を図面を参照して詳細に説明する。
図1は、本発明の実施の形態に係るデータ処理装置を搭載したデジタルスチルカメラの内部構成を示すブロック図である。同図において、各ブロック間を結合する線の表記は、データ系の接続を太い実線で図示し、制御系の接続を細い実線で図示した。ただし、すべての接続が図示されているわけではなく、説明に必要な代表的な接続のみを図示した。
デジタルスチルカメラは、主要なブロックとして、画像取り込みに関わる画像取り込みコントローラ1と、画像処理に関わる信号処理プロセッサ2と、画像表示に関わる表示コントローラ3と、画像メモリを制御するメモリコントローラ4と、全体制御に関わるCPU5と、CPU5により実行される命令が格納されたROM18を制御するROMコントローラ17と、撮影した画像データが格納されるメモリカード20を制御するメモリカードコントローラ19とを備える。
次に、図1のデジタルスチルカメラの動作を説明するために、上述した各ブロックの動作を説明する。
まず、レンズモジュール6(LENSE)に入力された画像は、CCD7に結像する。レンズモジュール6は、レンズ、オートアイリスのための駆動部、及びオートフォーカスのための駆動部等から成る。駆動部の制御は、CPU5による図示しない制御信号によって行われる。
CCD7に結像した画像データは、画像データに前処理を行う前処理モジュール8(CDS・AGC)に入力される。なお、CCD7の取り込む有効画素数は640×480画素(VGA相当)である。
前処理モジュール8は、CDS(相関二重サンプリング)及びAGC(自動利得制御)から成る。タイミング生成回路9(TG)は、CCD7及び前処理モジュール8に対して、クロック及びタイミング信号を供給する。
前処理が行われた画像データは、AD変換器10(ADC)により10ビットのディジタルデータに変換されて、タイミング生成回路11(SG)により生成されるピクセルクロックに同期して画像取り込みコントローラ1に入力される。画像取り込みコントローラ1に入力された画像データは、まず取り込み回路1a(Capture)によって取り込まれ、直ちに有効画素データのみがメモリであるFIFO1bに書き込まれる。
バスインターフェース回路1c(BUS IF)は、FIFO1bに書き込まれたデータ数が所定値を超えると、Image Bus100上に書き込みのバストランザクションを発生し、メモリコントローラ4にFIFO1bから読み出したデータを転送する。
バストランザクションは、データ転送を行うための転送先開始アドレス送出(アドレス・フェーズ)と転送すべきデータ送出(データ・フェーズ)の2つのフェーズから成る。本実施の形態では、1回のデータ・フェーズにおいて転送されるデータ量は固定されており、32ビットデータバスを用いて4クロックサイクルで128ビットのデータを転送する。なお、バスインターフェース回路1cは、通常、画像取り込みクロック(Latch Clock)とは非同期のバスクロックで動作している。したがって、FIFO1bの読み出しクロックは、書き込みクロックと非同期であり、FIFO1bはこの非同期データ転送を緩衝するためにも用いられる。
Image Bus100には、他にもバストランザクションを発生するバスマスター(例えば、信号処理プロセッサ2、表示コントローラ3等)が複数接続されているので、同時に複数のバストランザクションが発生する可能性がある。しかしながら、バスアービター12(Arbiter)は、バスマスターが1度に1つだけのバストランザクションを発生できるようにImage Bus100を調停する。
メモリコントローラ4は、バスインターフェース回路4a(BUS IF)においてImage Bus100からバストランザクションを受信し、アドレス・フェーズにおいてアドレス情報をアドレス情報キュー4b(QUEUE)に書き込む。
DRAMインターフェース回路4c(DRAM IF)は、画像メモリであるDRAM13への制御信号を出力すると共に、アドレス、データをEDOモードでDRAM13に対して出力する。ここで、メモリアドレスは、バストランザクションのアドレス・フェーズにおいて得られたアドレスから生成される。
また、DRAMインターフェース回路4cは、上記アドレスから始まる連続アドレスに対して、128ビット分のデータをEDOモードで連続的にDRAM13に転送する。なお、バスインターフェース回路4a(BUS IF)、アドレス情報キュー4b、及びDRAMインターフェース回路4cはバスクロックに同期して動作する。
信号処理プロセッサ2は、読み出しのためのバストランザクションを発生し、バスクロックで動作するバスインターフェース回路2a(BUS IF)によって、画像メモリから画像取り込みコントローラ1によって取り込まれた画像データを読み出す。読み出されたデータは、バスクロックに同期して双方向FIFO2bに書き込まれる。
DSP2cは、バスクロックと異なるクロック(DSPクロック)で動作しており、DSPクロックに同期して双方向FIFO2bに書き込まれている画像データにアクセスして、カラーマトリクス処理によりYC分離を行い、つづいて色補正、エッジ強調、ホワイトバランス調整、及びガンマ補正などの処理を行う。このようにして得られた画像データは、表示用に用いられるほか画像圧縮にも用いられる。表示用に用いられる場合は、表示コントローラ3が読み出せるように、バスインターフェース回路2aを起動して書き込みのバストランザクションを発生し、DRAM13にデータを転送する。
信号処理プロセッサ2においても、バストランザクションはデータ転送を行うための転送先開始アドレス送出(アドレス・フェーズ)と転送すべきデータ送出(データ・フェーズ)の2つのフェーズから成る。但し、アドレス・フェーズにおいては、読み出しか書き込みかを示す信号も合わせて送出される。
CPU5は、CPU Bus200上にバストランザクションを発生する。このバストランザクションは、Image Bus100上のトランザクションと異なり、アドレスフェーズ・データフェーズの区別はない。
CPU5よりアドレスが送出されると、データの授受が終了するまでアドレス送出は持続される。メモリコントローラ4は、バストランザクションのアドレスがDRAM13の領域内である場合、バスインターフェース回路4dにおいてバストランザクションを受信し、アドレス情報をアドレス情報キュー4bに書き込む。同時にImage Bus100からのアドレス情報書き込みが発生した場合、Image Bus100のアドレス情報書き込みをWAITさせる。
次に、図1のデジタルスチルカメラにおける動作モードについて説明する。動作モードとしては、EVFモード、撮影モード、及び再生モードがある。
EVFモードにおいては、上述した動作を1フレーム分の画像を取り込む毎に繰り返すことによって、連続したフレームを画像メモリに取り込む。信号処理プロセッサ2が画像メモリ上の領域にデータライトする動作としては、同一領域に上書きする動作でよい。
表示コントローラ3は、信号処理プロセッサ2がデータライトした画像メモリ上の領域より画像データを読み出すことにより表示データを得る。また、表示コントローラ3は、表示データ読み出しのためのバストランザクションを発生し、バスクロックで動作するバスインターフェース回路3aによって画像メモリから表示データを読み出す。
次に、この表示データをバスクロックに同期してFIFO3bの書き込みポートに入力する。NTSCのモニタや液晶ディスプレイに代表されるように、一般に表示装置は、画面を絶え間なくリフレッシュする必要があるため、有効画面期間中は所定の表示ピクセルクロックで動作し続けなければならない。そのため、バスインターフェース回路3aは、FIFO3bがフル状態になるまでデータを読み出し続ける。
次に、読み出し回路3c(Data Read)は、表示ピクセルクロックに同期してFIFO3bよりデータを読み出し、NTSCエンコーダ3d(NTSC)に送出する。NTSCエンコーダ3dによってNTSCフォーマットに変換されたディジタルデータは、DAコンバータ14(DAC)によってアナログ信号に変換された後にNTSCモニタ15(MONITOR)によって表示される。
上記動作をフレーム毎に連続して実行することにより、EVFモードの動作となる。
EVFモードにおいては、画像取り込みコントローラ1の書き込みと信号処理プロセッサ2の読み出しが画像メモリの1つのメモリ領域を共有し、信号処理プロセッサ2の書き込みと表示コントローラ3の読み出しが画像メモリのもう1つのメモリ領域を共有し、これら2つの領域へのメモリアクセスは並列的に行われる。
次に、撮影モードの動作を説明する。撮影モードでは、1フレーム分の画像を取り込んだ後、該データをJPEG圧縮して外部記憶装置(不図示)等に記録する。
まず、スイッチ群16(SW)のうちの1つはシャッターボタンであり、該ボタンの押下がCPU5によって検出されると、CPU5は図示しない制御信号により画像取り込みコントローラ1に対し、次の1フレームを取り込み終わったら以降のフレームは取り込まないように指示する。同様に、信号処理プロセッサ2に対し、次の1フレームは画像圧縮処理を行うことを通知する。
画像取り込みコントローラ1は、EVFモードの場合とは異なり、1フレーム分の画像データを取り込んで画像メモリにデータ転送を行い、終わると一時停止する。一方、信号処理プロセッサ2は、取り込まれた画像データを読み出して、上述した表示データを生成した場合とまったく同様に、YC分離、色補正、エッジ強調、ホワイトバランス調整、及びガンマ補正等の画像処理を行った後、直ちに該データに対して、DCT演算処理、量子化処理、及び可変長符号化処理などを施して得た符号データを、画像メモリ内の表示用データ領域とは別の領域に書き込む。
CPU5は、CPU Bus200上にリード・トランザクションを発生してメモリコントローラ4にアクセスすることによって符号データを読み出し、当該符号データに必要なマーカー等を付加してJPEGデータとした後に、再びCPU Bus200上にライト・トランザクションを発生して、メモリカードコントローラ19(Memory Card Controller)にアクセスすることによりメモリカード17(MEMORY CARD)に当該JPEGデータを格納する。1フレーム分の画像データの格納が終了すると、CPU5は画像取り込みコントローラ1に対して取り込み再開を通知する。
撮影モードにおいては、画像取り込みコントローラ1の書き込みと信号処理プロセッサ2の読み出しが1つのメモリ領域を共有し、信号処理プロセッサ2の書き込みとCPU5の読み出しがもう1つのメモリ領域を共有するが、これら2つの領域へのメモリアクセスは順次的に行われる。
次に、再生モードの動作を説明する。再生モードでは、画像取り込みコントローラ1は停止している。
CPU5は、CPU Bus200上にリード・トランザクションを発生してメモリカードコントローラ19にアクセスすることによりメモリカード17に格納されているJPEGデータを読み出し、マーカー等の削除を行って符号データとする。
つづいて、CPU5は、CPU Bus200上にライト・トランザクションを発生し、メモリコントローラ4にアクセスすることによってDRAM13に符号データを書き込む。信号処理プロセッサ2は、符号データをDRAM13より読み出して、復号化、逆量子化、及び逆DCT変換等の画像伸長処理を行って表示可能な画像データとした後に、再びDRAM13に書き戻す。表示コントローラ3は、表示可能データをDRAM13より読み出して表示動作を行う。
再生モードにおいては、CPU5の書き込みと信号処理プロセッサ2の読み出しが1つのメモリ領域を共有し、信号処理プロセッサ2の書き込みと表示コントローラ3の読み出しがもう1つのメモリ領域を共有するが、これら2つの領域へのメモリアクセスは順次的に行われる。
動作モードの変更は、ユーザによるスイッチ群16の操作によって行われる。スイッチの構成は様々な例が考えられるが、例えば、本実施の形態ではダイアルと押しボタンにより構成する。ダイアルの回転により動作モードの候補が順次更新され、押しボタンの押下により候補が選択される。選択のイベントによりCPU5に割り込みが発生する。ROM19に格納された割り込み処理ルーチンは動作モード変更ルーチンをコールする。
動作モード変更ルーチンでは新たに選択された動作モードを読み取る。読み取られた動作モードに対応して各モジュールの設定を行う。
次に、アドレス情報キュー4bへのアドレス情報書き込み動作における、CPU Bus200の基本プロトコルを図2のタイミングダイアグラムを参照して説明する。
CPU5は、転送開始信号(start_L)をアサート(「0」)すると共に、32ビットの転送開始アドレス信号(addr[31:0])、バイトイネーブル信号(byteEn[3:0])及びライトインジケータ信号(wr_L)を出力する(サイクル3)。バイトイネーブル信号は、32ビット以下の1,2,3バイト転送時に有効なバイトレーンを示す。ライトインジケータ信号は、リード時に「1」、ライト時に「0」が出力される。
CPU5は、バススレーブによってアサートされるデータアクノレッジ信号(rdy_L)が入力されるまで(サイクル5)、転送開始アドレス信号、バイトイネーブル信号、及びライトインジケータ信号の各信号を有効な値に保つ。
CPU5は、リード・トランザクションの場合、データアクノレッジ信号のアサートされたサイクル(5)でデータ信号(data[31:0])にドライブされている値を読み取る。一方、ライト・トランザクションの場合は、転送開始信号(start_L)のアサート(サイクル19)からデータアクノレッジ信号(rdy_L)のアサート(サイクル20)まで、CPU5はデータ信号(data[31:0])上に書き込む値をドライブし続ける。
次に、Image Bus100の基本プロトコルを図3のタイミングダイアグラムを参照して説明する。
まず、バストランザクションを行いたいバスマスターは、バス要求信号(req)をアサートする(サイクル0)。ここで、バスアービター12は、バス使用権を与えるバスマスターに対してバス許可信号(gnt)をアサートする(サイクル1)。バス使用権を与えられたバスマスターは、アドレスバス使用信号(addrBusy)をアサートすると共に、32ビットの転送開始アドレス信号(addr[31:0])及びリードインジケータ信号(read)を出力する(サイクル2)。リードインジケータ信号には、リード時に「1」、ライト時には「0」が出力される。
バスマスターは、バススレーブ(メモリコントローラ4)によってアサートされるアドレスアクノレッジ信号(ack)が入力されるまで(サイクル3)、アドレスバス使用信号(addrBusy)をアサートし続けると共に、転送開始アドレス信号(addr),リードインジケータ信号(read)の各信号を有効な値に保つ。アドレスバス使用信号(addrBusy)がアサートされている期間がアドレス・フェーズである。
バスアービター12は、アドレス・フェーズ中、トランザクションの識別信号であるtxID[3:0]を出力する。この識別信号は、バススレーブに取り込まれて、データ・フェーズ開始時にどのアドレス・フェーズに対応するデータ・フェーズを開始するのかを通知するために用いられる。
アドレス・フェーズの最中であっても、引き続き転送要求のあるマスターはreq信号をアサートし続けてよい(サイクル2,3)。現在処理中のアドレス・フェーズが終了すると、直ちに次のアービトレーションに移って、次のアドレス・フェーズのためのgnt信号がアサートされる(サイクル4)。図2では、サイクル2,3のアドレス・フェーズでアドレス情報としてaddr=A1,read=「1」,txID=「0001」が取り込まれ、サイクル5,6のアドレス・フェーズでアドレス情報としてaddr=A2,read=「0」,txID=「0010」が取り込まれる。
データ・フェーズは、バススレーブ(メモリコントローラ4)がデータ送受信の準備完了信号(slvDRdy)をアサートすることにより開始される。バススレーブは、準備完了信号(slvDRdy)をアサートすると共にこのデータ・フェーズがどのアドレス・フェーズに対応するデータ転送を行うかを示すために、アドレス・フェーズ時に取り込んでおいた識別信号(txID)をnextID[3:0]信号として出力する(サイクル4)。図2のサイクル4では、nextIDが「0001」であるので、これは一番目のアドレス・フェーズに対応するデータ・フェーズであることがわかる。
準備完了信号(slvDRdy)及び識別信号(nextID)はバスアービター12に入力される。バスアービター12は、識別信号(txID)に基づいてどのマスターとどのスレーブのペアがデータ転送を行うかを判定し、それぞれにデータバス使用許可信号(mstDGnt,slvDGnt)をアサートする。
データバス使用許可信号(mstDGnt)をアサートされたバスマスターは、データバス使用信号(dataBusy)をアサートしてバスアービター12に対してデータバスを使用中であることを通知する。一方、バススレーブは、4クロックサイクル間のデータストローブ信号(dataStrobe)をアサートすると共に、リードの場合はデータバス上にデータをドライブする(サイクル6,7,8,9)。ライトの場合は、データストローブ信号に同期してデータバス上のデータをフェッチする(サイクル15,16,17,18)。データを直ちにドライブ又はフェッチすることができない場合は、データストローブ信号をデアサート状態に保っておく(サイクル13,14)。
バスマスターは、4クロックサイクル間のデータストローブ信号(dataStrobe)を検出したときは、データバス使用信号(dataBusy)をデアサートする(サイクル10)。バスアービター12は、データバス使用信号(dataBusy)がデアサートされたことを検出すると次のデータバスグラントのサイクル(サイクル1)に移行する。
バススレーブがアドレスの発行順序とデータ転送の順序を並び替える場合は、準備完了信号(slvDRdy)とともに出力する識別信号(nextID)を用いる。図2では、addr=A3に対応する識別信号「0011」(リード),addr=A4に対応する識別信号「0100」(ライト)の順にアドレス・フェーズが発生しているが、サイクル19においてnextIDとして「0011」ではなく「0100」が出力されていることから、addr=A4に対するライト転送が先に開始される。
次に、図1におけるバスインターフェース回路1c,2a,3aの各動作を説明する。なお、バスインターフェース回路1cはライト動作のみを行い、バスインターフェース回路2aはリード及びライト動作を行い、バスインターフェース回路3aはリード動作のみを行うので、バスインターフェース回路2aを例として説明する。
図4は、図1におけるバスインターフェース回路2aの内部構成を示すブロック図である。
アドレス・フェーズ生成部2a1には、FIFO2bが出力するFIFOポインタステータス信号が入力され、FIFO2bの空き容量が転送データ長(本実施の形態では32ビット×4)以上になったことを示すステータスに応じてバス要求信号(req)をアサートする。
バスアービター12よりバス許可信号(gnt)が入力されると、アドレス・フェーズが開始される。アドレス・フェーズ生成部2a1は、アドレス・フェーズにおいては転送開始アドレス信号(addr[31:0])、リードインジケータ信号(read)、及びバス使用信号(addrBusy)を出力すると共に、ペンディングアドレスFIFO2a3に対してリードインジケータをプッシュ(push)する。また、アドレス・フェーズ生成部2a1は、ペンディングアドレスFIFO2a3のフルフラグをモニタしており、当該ペンディングアドレスFIFO2a3がフルの場合は新たにバス要求信号をアサートしない。
本実施の形態では、ペンディングアドレスFIFO2a3は、4つのエントリーを備えており、最大4つまでのアドレス・フェーズをペンディングにすることが可能である。アドレス・フェーズは、バススレーブの出力するアドレスアクノレッジ信号(ack)が入力されると一度終了し、バスマスターはバス使用信号(addrBusy)をデアサートする。
アドレス生成部2a2は、CPU5から入力されるアドレス設定信号に応じて開始アドレスが設定され、Image Bus100への32ビットの転送開始アドレス信号(addr[31:0])を生成する。
データ・フェーズ生成部2a4は、ペンディングアドレスFIFO2a3のエンプティフラグの反転信号をスタート信号としてデータ・フェーズの待機に入る。バスアービター12によりデータバス使用許可信号(mstDGnt)がアサートされると直ちにデータバス使用信号(dataBusy)をアサートしデータストローブ信号の受信待ちとなる。
データライト時は、バススレーブからのデータストローブ信号に応じてFIFO制御信号を駆動してFIFO2bから32ビットのFIFOデータ[31:0]を取り出し、Image Bus100上に32ビットのデータ信号(data[31:0])を出力する。データリード時は、データストローブ信号に応じてImage Bus100上のデータを取り込み、FIFO制御信号を駆動してFIFOへデータを書き込む。本実施の形態では、1回のデータ転送に対して4クロックサイクル分のデータストローブ信号が出力されるので、データ・フェーズ生成部2a4は、4クロックサイクル分のデータストローブ信号を検知すると、データバス使用信号(dataBusy)をデアサートすると同時に、ペンディングアドレスFIFO2a3の先頭エントリーを引き抜く(pop)する。
次に、図1におけるバスアービター12の動作を図5を参照して説明する。
図5は、図1におけるバスアービターの内部構成を示す図である。
本実施の形態では、Image Bus100上のバスマスターは、画像取り込みコントローラ1、信号処理プロセッサ2、及び表示コントローラ3の3つであり、バス要求信号(req)、バス許可信号(gnt)はバスマスター毎に1本ずつ、それぞれ3ビットのバスとしてリクエストエンコード・ID生成回路12a(req Decoding and ID generation)に接続されている。
リクエストエンコード・ID生成回路12aは、アサートされているすべてのバス要求信号(req)より、ローテーション方式の公平プライオリティ・スキームを用いて1つのバスマスターを選択する。さらに、リクエストエンコード・ID生成回路12aは、アドレスバス使用信号(addrBusy)がデアサートされているならば、選択したバスマスターに対応するバス許可信号(gnt)をアサートすると同時に、識別信号(txID)を生成する。
本実施の形態では、ペンディングになり得るアドレス・フェーズは1マスターにつき最大4つまでであるので、1つのバスマスターに対しては2bitで「00」→「01」→「10」→「11」→「00」→「01」→の順にシーケンシャルに変化するIDをそれぞれのバスマスターに割り当てる。また、バスマスターが3つあるので、どのマスターかを識別するために2bitを用い、画像取り込みコントローラ1に対しては「00」、信号処理プロセッサ2に対しては「01」、表示コントローラ3に対しては「10」を割り当てる。マスター識別用の2bitを上位に、マスター内のシーケンシャルなID2bitを下位に連結した4bitを識別信号(txID[3:0])とする。
リクエストエンコード・ID生成回路12aは、バス許可信号(gnt)をアサートすると同時に、識別信号(txID)をバススレーブ(メモリコントローラ)に通知すると共に、バスアービター12の内部に備えるIDキュー12b(ID Queue)にプッシュする。
IDキュー12bは、6エントリーを備えるキューであり、フルフラグがたっている場合は、リクエストエンコード・ID生成回路12aはどのマスターにもバス許可信号(gnt)をアサートしない。したがって、3つのバスマスターのペンディングできるアドレス・フェーズは合計6個までとなる。
バススレーブが識別信号(nextID)を有効にすると共に準備完了信号(slvDRdy)をアサートすると、比較器12c(Comparator)はIDキュー12b内のすべての有効なエントリーとnextID入力とを比較し、6bitの一致信号(match[5:0])のうちの1本のみをアサートする。例えば、IDキュー12bの先頭から3番目のエントリーがマッチすると、match=「000100」となる。
match信号がデータグラント生成回路12d(mstDGnt and slvDGnt generation)に入力されると、データグラント生成回路12dは6bitのキューエントリー引き抜き信号(popPos[5:0])のうちの1ビットを1クロックサイクルだけアサートすることによりIDキュー12bのエントリーを取り出す。IDキュー12bから取り出された4ビットデータのうちの上位2bitをデコードすることにより、どのバスマスターにデータバスの使用権を与えるべきかが特定できるので、データバス使用信号(dataBusy)がデアサートされ次第、対応するデータバス使用許可信号(mstDGnt)の3bitのうちの1bitをアサートすると同時に、データバス使用許可信号(slvDGnt)をアサートする。
図6は、図3のサイクル19におけるIDキュー12bの内容と各信号の状態を示したものである。
図3におけるサイクル19の時点では、IDキュー12bの先頭にはtxID=「0011」すなわちマスター「00」からの「11」番目のトランザクションがキューイングされており,2番目のエントリーにはtxID=「0100」すなわちマスター「01」からの「00」番目のトランザクションがキューイングされている。バススレーブが準備完了信号(slvDRdy)をアサートすると共に、出力している識別信号(nextID)は「0100」であるから、比較器12cが出力するmatch信号は「000010」となり、2番目のエントリーがマッチしていることがわかる。
データグラント生成回路12dは、キューエントリー引き抜き信号(popPos[5:0])を1クロックサイクル間で「000010」とすることにより、2番目のエントリーを取り込み、上位2ビットをデコードすることにより、データバス使用許可信号(mstDGnt[1])のみを「1」にアサートすることができる。
次に、図1のメモリコントローラ4のアドレス情報キュー4bにおいてアドレス情報が格納される動作を図7を参照して説明する。
図7は、図1におけるバスインターフェース回路4a,4dとアドレス情報キュー4bの接続を示すブロック図である。
図7において、バスインターフェース回路4a,4d(Bus Interface)は、各々のバストランザクションを検出すると、調停選択回路4e(Arbitration and Select)に対し、それぞれバストランザクション検出信号をアサートする。
調停選択回路4eは、アドレス情報キュー4b(Address Queue)からのアドレスキューfull信号がアサートされていなければ、CPU Bus200又はImage Bus100のいずれか一方を選択し、選択信号をマルチプレクサ4f(MUX)に伝達する。
マルチプレクサ4fは、上記選択信号に基づきアドレス情報キュー4bに入力するアドレスをCPU Busアドレス又はImage Busアドレスのいずれか一方より選択する。同時に、調停選択回路4eは、アドレス情報キュー4bに対し、アドレス情報取り込み(push)信号をアサートする。
次に、メモリコントローラ4内のDRAMインターフェース4cとDRAM13との接続状態の代表的な例を図8に示す。
図8において、13a(DRAM_H),13b(DRAM_L)は、共に1Mワード×16ビットのEDOモードDRAMであり、データバス(D)の上位16ビットがDRAM_H13aに、下位16ビットがDRAM_L13bに接続されている。CASがそれぞれ一対一の接続になっている以外は、DRAMの制御線は13a,13bで共用している。アドレス(A)は10ビットであり、ローアドレス、カラムアドレスともに10ビットである。
このような構成に対するアドレス情報キュー4bの内部構成を図9に示す。
Image Bus100上、CPU Bus200上のアドレス(addr[31:0])は、共にバイトアドレスであるので、メモリに対して32ビットアクセスを行う場合は下位2ビットが無視される。本実施の形態では、addr[21:12]をローアドレスに割り付け、addr[11:2]をカラムアドレスに割り付ける。
図中の4b1,4b3,4b5,4b7,4b9,4b11がローアドレスを格納するためのキュー要素であり、4b2,4b4,4b6,4b8,4b10,4b12がカラムアドレスを格納するためのキュー要素である。それぞれのキュー要素(i)は、新規入力(addr)、前段(i−1)、後段(i+1)、及び自分自身(i)の4つの値のいずれかによって置換可能となっており、どの値で置換するかをプッシュ・ポップ制御回路4b13が出力するshift[1:0]信号によって制御する。具体的には、shift=「00」のときは「自分自身」、shift=「01」のときは「前段」、shift=「10」のときは「後段」、shift=「11」のときは「新規入力」で置換する。
マルチプレクサ4c1(MUX)は、通常、DRAMインターフェース4c内に装備され、DRAMのローサイクル、カラムサイクルに応じてキュー要素の最前段4b11,4b12の出力を選択してメモリアドレスA[9:0]としてメモリに出力する。
プッシュ・ポップ制御回路4b13は、内部にカウンタ(pointer)を備えており、上記調停選択回路4eからのアドレス情報取り込み信号(push)がアサートされるたびにpointerをインクリメントする。また、DRAMインターフェース回路4cからのアドレス情報削除信号(pop)がアサートされるたびにpointerをデクリメントする。アドレス情報取り込み信号(push)とアドレス情報削除信号(pop)が同時にアサートされた場合はpointerの増減は行わない。
プッシュ・ポップ制御回路4b13は、pointerの現在値に応じて必要なshift信号を生成する。例えば、初期状態でpointer=0の場合にpush信号がアサートされると、キュー要素4b11,4b12に対応するshift[1:0]を「11」にドライブすることによりキュー位置0に新規入力を取り込み、pointer=1とする。さらに、push信号がアサートされると、キュー要素4b9,4b10に対応するshift[1:0]を「11」にドライブし、キュー要素4b11,4b12に対応するshift[1:0]は「00」にドライブすることにより、キュー位置0の内容は保持し、キュー位置1に新規入力を取り込む。さらにpointer=2とする。
次に、プッシュ・ポップ制御回路4b13は、メモリインターフェース回路4cよりpop信号を受信すると、キュー要素4b11,4b12に対応するshift[1:0]を「01」にドライブすることによりキュー位置0にキュー位置1に格納されていた情報をシフトし、pointer=1とする。
pointerの値の上限は、キュー深さ設定回路4b14(Queue Depth)により決定される。キュー深さは図示しない制御信号を使用してCPU5により設定される。設定値は、比較器4b15(pointer ≧ Queue Depth)によりpointer値と比較され、pointer値≧設定値となったときにキューfull信号がアサートされ、バスインターフェース回路4aまたは4dからの新たなアドレス情報の格納が停止する。
次に、キュー深さの設定が4の場合に、アドレス情報キュー4bへアドレス情報が格納される動作を図10及び図11を用いて説明する。
図10は、キュー深さの設定が4の場合のアドレス情報の格納動作のタイミングダイアグラムを示す図であり、図11は、図10のタイミングダイアグラムにおけるアドレス情報キュー4bの状態遷移を示す図である。
サイクル2においてImage Busトランザクションが発生し、追ってサイクル3でCPU Busトランザクションが発生する。この場合、サイクル3においてImage Bus100のアドレスA1がアドレス情報キュー4bにプッシュされる。つづいて、サイクル5においてCPU Bus200のアドレスa1がプッシュされる。Image Bus100上では、後続のアドレス・フェーズが発生しているので、サイクル7においてアドレスA2がプッシュされ、サイクル10ではアドレスA3がプッシュされる。この結果、pointerが4になるため、full信号がアサートされ、アドレスA4のキューイングはウエイトされる(図11(d))。
サイクル14において、A1に対応するデータ転送が終了し、A1がポップされる。結果、pointerが3になるため(図11(e))、full信号がネゲートされる。サイクル15において、直ちにアドレスA4がプッシュされる。サイクル18において、CPU Bus200のa1に対応するデータ転送が終了し、a1がポップされると同時に、CPU Bus200上でデータアクノレッジ信号(rdy_L)がアサートされる。CPU Bus200は、ノンパイプラインバスであるため、次のトランザクションはサイクル19より開始される。サイクル19では、直ちにCPU Bus200のアドレスa2がプッシュされ、その後、ポップが発生するとImage Bus100のアドレスA5,A6がプッシュされる。
図10に示すタイミングダイアグラムからわかるように、Image Busトランザクションがメモリアクセスを行う機会は、CPU Busトランザクションがメモリアクセスを行う機会よりも3倍多くなっている。
次に、キュー深さの設定が2の場合に、アドレス情報キュー4bへアドレス情報が格納される動作を図12及び図13を参照して説明する。
図12は、キュー深さの設定が2の場合のアドレス情報の格納動作のタイミングダイアグラムを示す図であり、図13は、図12のタイミングダイアグラムにおけるアドレス情報キュー4bの状態遷移を示す図である。
サイクル2においてImage Busトランザクションが発生し、追ってサイクル3でCPU Busトランザクションが発生する。この場合、サイクル3においてImage Bus100のアドレスA1がアドレス情報キュー4bにプッシュされる。つづいて、サイクル5においてCPU Bus200のアドレスa1がプッシュされる。この結果、pointer値が2になるためfull信号がアサートされ、アドレスA2のキューイングはウエイトされる。サイクル10においてA1に対応するデータ転送が終了し、A1がポップされる。結果、pointerが1になるため、full信号がネゲートされる(図12(c))。
サイクル11において、直ちにアドレスA2がプッシュされる。サイクル14において、CPU Bus200のa1に対応するデータ転送が終了し、a1がポップされると同時に、CPU Bus200上でデータアクノレッジ信号(rdy_L)がアサートされる。CPU Bus200は、ノンパイプラインバスであるため、次のトランザクションはサイクル15より開始される。
Image Bus100上では、すでにアドレスA3が出力されているが、CPU Bus200の優先度が高いため、サイクル15で直ちにCPU Bus200のアドレスa2がプッシュされる。この後、ポップが発生する毎に、Image BusアドレスA3、CPU Busアドレスa3、Image BusアドレスA4、CPU Busアドレスa4の順にプッシュされる。
図11に示すタイミングダイアグラムからわかるように、Image Busトランザクションがメモリアクセスを行う機会とCPU Busトランザクションがメモリアクセスを行う機会とは、ほぼ一対一となっている。
上記実施の形態によれば、Image Busトランザクションがメモリアクセスを行う機会とCPU Busトランザクションがメモリアクセスを行う機会との比率は、キュー深さの設定によって容易に制御することが可能である。
したがって、EVFモードのように、CPU5がメモリアクセスを行う機会は少ないが、Image Bus100上のデバイスが並列的に大量のデータ転送をメモリとの間で行う必要があるときにキュー深さを例えば6に設定し、撮影モードのように、EVFモードに比べるとImage Bus100上のデータ転送レートは低いが、CPU5がメモリからメモリカードにデータ転送を行うデータ転送レートを高くしなければ連続撮影性能が低下するようなときは、キュー深さを例えば3に設定するように制御を行うことにより、動作モードに応じた最適なメモリバンド幅の分配が可能になる。