(58)【調査した分野】(Int.Cl.,DB名)
前記各第2ラインバッファには、同じ前記第1ラインバッファに保持されたデータに対応する転送要求のうち、最初に受信した転送要求のアドレスが結合開始アドレスとして保持され、
前記結合コマンド転送部は、前記結合後の転送要求の開始アドレスを、前記結合開始アドレスに基づくアドレスに変換することを特徴とする請求項3〜5の何れか一項に記載のデータ転送装置。
【発明を実施するための形態】
【0009】
(第1実施形態)
以下、
図1〜
図28に従って第1実施形態を説明する。
図1に示す撮像装置10は、例えば、デジタルスチルカメラである。撮像装置10は、撮像部11と、画像処理装置12と、入力装置13と、メモリ14と、メモリカード15と、表示部16とを有している。
【0010】
撮像部11は、例えば、撮像光学系と撮像素子を有している。撮像光学系は、被写体からの光を集光するレンズ(フォーカスレンズなど)や、レンズを通過した光の量を調整する絞り等を有している。撮像素子は、例えば、CCD(Charge Coupled Device)イメージセンサやCMOS(Complementary Metal Oxide Semiconductor)イメージセンサである。撮像素子は、入射する光を電気信号に変換して1フレームの画像データを生成する。撮像部11は、撮像素子から出力されるアナログの画像データをデジタル化し、そのデジタル化した画像データGDを出力する。
【0011】
画像処理装置12は、撮像部11から出力される画像データGD(例えば、RGB形式の画像データ(ベイヤデータ))を取り込む。画像処理装置12は、受信した画像データに対して各種画像処理を施す。例えば、画像処理装置12は、所定の処理段階で画像データをメモリ14に一時的に格納する。メモリ14は、例えば、同期式半導体メモリ(SDRAM:Synchronous Dynamic Random Access Memory)などの書き換え可能なメモリである。また、画像処理装置12は、メモリ14に格納された各種画像処理後の画像データをメモリカード15に格納したり、表示部16に表示したりする。
【0012】
入力装置13は、ユーザにより操作されるシャッタボタン、メニューボタンやタッチパネル等の各種スイッチを有している。この各種スイッチは、例えば、写真撮影、撮影条件の設定や表示方式の設定を行うために使用される。画像処理装置12は、入力装置13に対する操作に応じて、撮影モードや各処理において必要な情報等の設定値を記憶する。
【0013】
メモリカード15は、例えば、コンパクトフラッシュ(登録商標)やSDメモリカード(登録商標)などの携帯型メモリカードである。
表示部16としては、例えば、液晶表示装置(LCD:Liquid Crystal Display)や有機EL(Electronic Luminescence)を用いることができる。また、表示部16としては、例えば、電子ビューファインダ(EVF:Electronic View Finder)や、外部接続のためのインターフェース(例えば、HDMI(登録商標):High-Definition Multimedia Interface)を用いることもできる。表示部16は、撮影する画像の確認、撮影された画像の表示、当該撮像装置10における各種情報(例えば、駆動源であるバッテリの残量、撮影モード)の表示に用いられる。
【0014】
次に、画像処理装置12の内部構成例について説明する。
図2に示すように、画像処理装置12は、センサインタフェース(I/F)21と、色処理部22と、補正部23と、リサイズ部24と、圧縮伸長部25と、メモリカードI/F26と、表示I/F27と、調停部28と、メモリI/F29と、データ結合部30とを有している。
【0015】
センサI/F21は、撮像部11から出力される画像データGDを取り込み、その画像データをメモリ14に格納する。色処理部22は、メモリ14から読み出した画像データに対して色空間変換処理を行って、変換処理後の画像データをメモリ14に格納する。補正部23は、メモリ14から読み出した画像データに対して補正処理を施し、補正後の画像データをメモリ14に格納する。補正処理は、例えば、明るさやコントラストを調整するガンマ補正処理、光学系による画像の歪みを補正する歪補正処理である。
【0016】
リサイズ部24は、メモリ14から読み出したデータに対して、画素データの間引き、データ補間などの処理を行って画像サイズを変更し、処理後のデータをメモリ14に格納する。圧縮伸長部25は、所定の方式(例えば、JPEG(Joint Photographic Experts Group)方式)により圧縮データを生成する。圧縮伸長部25は、圧縮データを伸長した画像データを生成する。圧縮伸長部25は、生成したデータをメモリ14に格納する。
【0017】
メモリカードI/F26は、メモリ14に格納されたデータ(例えば、圧縮された画像データ)を、
図1に示したメモリカード15に格納する。
表示I/F27は、メモリ14に格納された画像データを読み出し、その画像データに基づいて生成した表示データを表示部16に出力する。
【0018】
センサI/F21、色処理部22、補正部23、リサイズ部24、圧縮伸長部25、メモリカードI/F26、表示I/F27は、処理部の一例である。以下の説明において、それぞれの処理を区別する必要がない場合には、処理部21〜27と称して説明する。なお、画像処理装置12に含まれる処理部21〜27及び各処理部21〜27の処理内容は一例を示すものであり、画像処理装置12が含む処理部の種類や処理内容は、適宜変更してもよい。
【0019】
処理部21〜27は、それぞれの処理タイミングに応じてメモリ14をアクセスするための要求を含む各種信号を出力する。調停部28は、処理部21〜27の要求を調停し、調停結果に応じて1つの処理部に対してアクセス許可を与える。
【0020】
調停部28は、ライト調停部28Aと、リード調停部28Bとを有している。ライト調停部28Aは、処理部21〜26から出力され競合する書き込み要求(ライトリクエスト)を、例えば、各処理部21〜26に対応して設定された優先度に従って調停し、1つの処理部に対するライトアクセスを許可する。ライトアクセスが許可された処理部は、メモリ14に対するライトアクセスのための制御信号(コマンド転送要求、データ転送要求、アドレス、データ、データイネーブル等)をライト調停部28Aに出力する。ライト調停部28Aは、調停結果に応じた書き込み要求と、上記ライトアクセスが許可された処理部からの制御信号とを、データ結合部30を介してメモリI/F29に出力する。
【0021】
一方、リード調停部28Bは、処理部22〜27から出力され競合する読み出し要求(リードリクエスト)を、例えば、各処理部22〜27に対応して設定された優先度に従って調停し、1つの処理部に対するリードアクセスを許可する。リードアクセスが許可された処理部は、メモリ14に対するリードアクセスのための制御信号(各種コマンド、アドレス、データ等)をリード調停部28Bに出力する。リード調停部28Bは、調停結果に応じた1つの読み出し要求と、上記リードアクセスが許可された処理部からの制御信号をメモリI/F29に出力する。
【0022】
データ結合部30は、ライト調停部28Aからの制御信号(例えば、コマンド転送要求CR)等に基づいて、複数のコマンド転送要求CRを結合してバースト長の長い転送要求に変換する。さらに、データ結合部30は、任意のデータサイズ(例えば、任意のバースト長(第1バースト長)に対応するデータサイズ)に基づく開始アドレスを有する結合後のコマンド転送要求CRaに変換する。具体的には、データ結合部30は、任意のバースト長(例えば、256バイト)のアライメント単位を開始アドレスとする結合後のコマンド転送要求CRaに変換する。ここで、任意のデータサイズのアライメント単位とは、任意のデータサイズごとに区切られたアドレスの範囲を示す。例えば、任意のデータサイズが256バイトの場合は、アドレスの下位7ビット〜0ビットが"0"(ADx[7:0]=0b00000000)になる範囲であり、開始アドレスは、0x00000000→0x00000100→0x00000200と進む。データ結合部30は、結合される複数のコマンド転送要求CRに対応する転送データを結合して保持する。そして、データ結合部30は、結合後のコマンド転送要求CRaと、結合後の転送データ及びデータイネーブルとをメモリI/F29に出力する。このとき、上記任意のバースト長は、メモリ14のカラムアドレスの範囲内のサイズに設定される。例えば、任意のバースト長は、メモリ14のカラムサイズの約数に対応するサイズに設定される。例えば、メモリ14のカラムサイズが512バイトである場合には、任意のバースト長を、128バイトや256バイト(本例では、256バイト)に設定することができる。ここで、1つのバーストサイクルで転送されるデータサイズ(バーストサイズ)は、バス幅によって決まる。すなわち、バス幅が64ビット(8バイト)である場合には、1つのバーストサイクルで転送されるデータサイズは8バイトとなる。このとき、上記任意のバースト長が256バイトであると、その任意のバースト長のデータは32個のバーストサイクルによって転送される。
【0023】
メモリI/F29は、例えば、データ結合部30からのコマンド転送要求CRa及びデータ転送要求DRa(
図3参照)と、データ結合部30で結合されたデータをメモリ14に出力し、メモリ14はそのデータを記憶する。また、メモリI/F29は、読み出し要求の場合、処理部からの制御信号に応じてメモリ14からデータを読み出し、その読み出したデータを要求元の処理部に出力する。
【0024】
なお、以下の説明では、ライト調停部28Aに対して、処理部21〜26をバスマスタとも称する。
次に、データ結合部30の内部構成例について説明する。
【0025】
図3に示すように、データ結合部30は、コマンド転送部31と、バッファ管理部34と、バッファ部37と、結合コマンド転送部40とを有している。
コマンド転送部31は、ライト調停部28Aによって選択されたコマンド転送要求CR(以下、単に「転送要求CR」と称する場合もある。)を順次蓄積するコマンドキュー32と、バスマスタに対する応答要求を順次蓄積する応答キュー33とを有している。コマンド転送部31は、ライト調停部28Aから入力するコマンド転送要求CR及びデータ転送要求DRに基づいて、バッファ部37に対するデータDA及びデータイネーブルENの書き込みを制御するライト制御信号WEを生成する。コマンド転送要求CRには、そのコマンド転送要求CRに対応する転送データのアドレスAD及びサイズSiが含まれている。なお、コマンド転送部31は、コマンド転送要求CR及びデータ転送要求DRを受信すると、それらの転送要求にそれぞれ対応する応答コマンドをライト調停部28Aに出力する。
【0026】
ここで、バッファ部37は、ライト調停部28Aから供給されるデータDAを保持するデータ保持部38と、ライト調停部28Aから供給されるデータイネーブルENを保持するデータイネーブル保持部39とを有している。
【0027】
図7(a)に示すように、データ保持部38は、上記任意のバースト長のデータDA(ここでは、256バイトのデータDA)を保持可能なラインバッファLfを複数個(ここでは、16個)有している。すなわち、データ保持部38は、上記任意のバースト長以上のサイズを有するラインバッファLfを複数個有している。
【0028】
図7(b)に示すように、データイネーブル保持部39は、上記任意のバースト長のデータイネーブルEN(例えば、256バイトのデータイネーブルEN)を保持可能なラインバッファLgを複数個(ここでは、16個)有している。すなわち、データイネーブル保持部39は、上記任意のバースト長以上のサイズを有するラインバッファLgを複数個有している。なお、以下の説明では、データ保持部38とデータイネーブル保持部39を総称する場合には「バッファ部37」と称し、ラインバッファLfとラインバッファLgを総称する場合には「ラインバッファLfg」と称し、データDAとデータイネーブルENを総称する場合には「転送データDAE」と称する。
【0029】
コマンド転送部31は、ライト調停部28Aから転送情報(例えば、転送要求元のバスマスタ番号NB)を受信する。コマンド転送部31は、バスマスタ番号NBに基づいて、受信したコマンド転送要求CRが、バッファ管理部34に保持している転送要求CRと同じバスマスタによる転送要求であるか否かを判定する。また、コマンド転送部31は、上記受信したコマンド転送要求CRのアドレスADと、バッファ管理部34に保持している転送要求CRのアドレスとが連続しているか、つまり2つの転送要求CRに対応するデータが結合可能か否かを判定する。さらに、コマンド転送部31は、結合後のデータサイズがバッファ部37のラインバッファLfgの1ライン分のサイズを超えるか否か、つまり結合後の転送要求CRが上記任意のバースト長を超えるか否かを判定する。そして、コマンド転送部31は、それら判定結果等をコマンド転送要求CRと併せてコマンドキュー32に保持する。
【0030】
図4(a)に示すように、コマンドキュー32は、複数個(ここでは、n+1個)のラインLaを有している。各ラインLaには、コマンド転送要求CRの要求元のバスマスタ番号NBaと、転送要求CRに対応するアドレスADa及びサイズSaとが保持される。このアドレスADaは、例えば、転送要求CRのアドレスADのうち、バッファ部37のラインバッファLfgの1ライン分のアドレス範囲に相当するアドレスである。例えば、各ラインバッファLfgが256バイトである場合には、転送要求CRのアドレスADの下位8ビットのアドレスAD[7:0]がアドレスADaとなる。サイズSaは、ライト調停部28Aから供給されるサイズSiであり、バス幅(例えば、8バイト)にバーストサイクル数を乗算することにより求めることができる。また、各ラインLaには、転送要求CRに対応する転送データDAEを書き込むバッファ部37のライン番号NLcと、その転送要求がバッファ部37の1ライン分のサイズを超えた場合に、続いて転送データDAEを書き込むバッファ部37のライン番号NLnとが保持される。コマンドキュー32には、転送要求CRのアドレスADが、先にバッファ管理部34に保持された同じバスマスタによる転送要求CRのアドレスと連続しているか否かを示す判定結果H1が保持される。コマンドキュー32には、結合後のデータサイズがバッファ部37のラインバッファLfgの1ライン分のサイズを超えるか否かを示す判定結果H2が保持される。コマンドキュー32には、バッファ管理部34から出力されるトランザクション番号NTがトランザクション番号NTaとして保持される。ここで、トランザクション番号NTは、結合後のコマンド転送要求を示す(特定する)番号である。また、トランザクション番号NTは、バッファ管理部34により付与される番号であり、0〜N(Nは例えばバッファ部37のライン数)までの循環的な数字である。
【0031】
また、コマンドキュー32は、ライトポインタWPが示すラインLa(図示の例では、ライン番号「1」のラインLa)にアドレスADa等を格納し、ライトポインタWPを更新する。また、コマンドキュー32は、リードポインタRPが示すラインLa(図示の例では、ライン番号「0」のラインLa)からアドレスADa等を読み出し、リードポインタRPを更新する。ここで、ライトポインタWP及びリードポインタRPの更新は、次のデータを書き込む位置又は読み出すラインLaを示す値に変更することである。
【0032】
図3に示すように、コマンド転送部31は、上記受信したコマンド転送要求CRに対応するデータ転送要求DRに基づいて、コマンドキュー32に保持されたアドレスADaとライン番号NLcとに応じたライトアドレスWAをバッファ部37に出力する。このライトアドレスWAが示すバッファ部37のアドレスに、ライト調停部28Aから出力されるデータDA及びデータイネーブルENが書き込まれる。
【0033】
また、コマンド転送部31は、バッファ部37の1ライン分のデータ結合が完了したか否かを判定する。コマンド転送部31は、処理対象のデータの後に結合可能な転送要求CRがコマンドキュー32内に存在するか否かを判定する。そして、コマンド転送部31は、データ転送要求DRに対応する判定結果を、バッファ管理部34内の保持部35に格納する。また、コマンド転送部31は、コマンドキュー32に保持されたバスマスタ番号NBaとトランザクション番号NTaとを応答キュー33に移す。
【0034】
図4(b)に示すように、応答キュー33は、複数個(ここでは、m+1個)のラインLbを有している。各ラインLbには、コマンドキュー32からのバスマスタ番号NBaが転送要求のバスマスタ番号NBbとして保持され、コマンドキュー32からのトランザクション番号NTaがトランザクション番号NTbとして保持される。
【0035】
バッファ管理部34は、結合後のコマンド転送要求CRaを生成するためのバッファ情報(結合情報)を保持する保持部35と、トランザクション番号NTを管理する番号付与部36とを有している。番号付与部36は、バッファ部37の1ライン分の転送要求CRに対応する上記トランザクション番号NTを管理する。例えば、番号付与部36は、コマンドキュー32に対して新たなトランザクション番号NTを生成する一方で、転送完了後の転送要求CRに対応するトランザクション番号NTを解放する。そして、番号付与部36は、生成したトランザクション番号NTを、保持部35及びコマンドキュー32に出力する。
【0036】
図5に示すように、保持部35は、バッファ部37のライン数分のバッファ情報を保持することができる。具体的には、保持部35は、バッファ部37の1ラインに対応するバッファ情報を格納可能なラインバッファLcを、バッファ部37のライン数分(ここでは、16個)有している。例えば、バッファ部37のライン番号「1」に保持されたデータに対応するバッファ情報は、ライン番号NLが「1」のラインバッファLcに格納される。各ラインバッファLcには、結合する複数の転送要求CRにおける最終の転送要求CRの情報が格納される。
【0037】
詳述すると、保持部35には、ライト調停部28Aからのバスマスタ番号NBが結合対象のバスマスタ番号NBcとして保持される。保持部35には、同じバスマスタ、且つバッファ部37の同じラインバッファLfgにデータを書き込むための転送要求CRであって、コマンドキュー32に蓄積された転送要求CRのうちの最後のアドレスADc及びサイズScが保持される。保持部35には、コマンド転送部31によるバッファ部37へのデータ転送によって、バッファ部37の1ライン分(例えば、256バイト)のデータ結合が完了したことを示すフラグF1が保持される。保持部35には、バッファ部37の1ライン分よりも小さいデータサイズでデータ結合処理が中断したことを示すフラグF2が保持される。すなわち、保持部35には、コマンド転送部31から出力される、データ転送要求DRに対応する判定結果がフラグF1,F2として保持される。さらに、保持部35には、番号付与部36からのトランザクション番号NTがトランザクション番号NTcとして保持される。
【0038】
図3に示すように、結合コマンド転送部40は、結合後のコマンド転送要求CRaを順次蓄積するコマンドキュー41と、バスマスタに対する応答要求を順次蓄積する応答キュー42とを有している。
【0039】
結合コマンド転送部40は、保持部35に保持されたバッファ情報に基づいて、結合後のコマンド転送要求CRaを生成し、その結合後のコマンド転送要求CRaをコマンドキュー41に格納する。
【0040】
図6(a)に示すように、コマンドキュー41は、複数個(ここでは、p+1個)のラインLdを有している。各ラインLdには、保持部35から出力されるバスマスタ番号NBcが結合後の転送要求元のバスマスタ番号NBdとして保持される。各ラインLdには、保持部35から出力されるアドレスADc及びサイズScに基づいて算出された、結合後アドレスADd及び結合後サイズSdが保持される。各ラインLdには、保持部35から出力されるトランザクション番号NTcがトランザクション番号NTdとして保持される。
【0041】
図3に示した結合コマンド転送部40は、結合後のコマンド転送要求CRa及びデータ転送要求DRaをメモリI/F29に発行し、バッファ部37の各ラインバッファLfgから転送データDAEを読み出すためのリード制御信号RE及びリードアドレスRAをバッファ部37に出力する。バッファ部37は、リード制御信号REに基づいて、リードアドレスRAで指定されるバッファ部37のアドレスに格納されたデータDA及びデータイネーブルENをメモリI/F29に出力する。結合コマンド転送部40は、メモリI/F29に転送したデータに対応する転送要求情報(例えば、転送要求元のバスマスタ番号NBd)とトランザクション番号NTdとをコマンドキュー41から応答キュー42に移す。
【0042】
図6(b)に示すように、応答キュー42は、複数個(ここでは、k+1個)のラインLeを有している。各ラインLeには、コマンドキュー41からのバスマスタ番号NBdが転送要求元のバスマスタ番号NBeとして保持され、コマンドキュー41からのトランザクション番号NTdがトランザクション番号NTeとして保持される。
【0043】
図3に示した結合コマンド転送部40では、メモリ14に対してデータの書き込みが完了したことを示すライト完了通知WC1がメモリI/F29から入力されると、応答キュー42から応答キュー33にライト完了通知WC2が出力される。具体的には、応答キュー42は、応答キュー33に保持された応答要求のうち、当該応答キュー42が保持するトランザクション番号NTeと同一のトランザクション番号NTbを持つ応答要求に対してライト完了通知WC2を出力する。このとき、応答キュー33は、ライト完了通知WC2に基づいて、同じトランザクション番号NTbを持つ全ての応答要求に対するライト完了通知WC3をライト調停部28Aに出力し、上記トランザクション番号NTbをバッファ管理部34に出力する。バッファ管理部34では、応答キュー33から入力したトランザクション番号NTを解放し、そのトランザクション番号NTを以降の処理で再度使用する。なお、結合コマンド転送部40は、メモリI/F29からライト完了通知WC1を受信すると、そのライト完了通知WC1に対する応答コマンドをメモリI/F29に出力する。また、メモリI/F29は、結合コマンド転送部40からコマンド転送要求CRa及びデータ転送要求DRaを受信すると、それらの転送要求にそれぞれ対応する応答コマンドを結合コマンド転送部40に出力する。
【0044】
本実施形態において、ライト調停部28A及びデータ結合部30はデータ転送装置の一例、コマンドキュー32は第1コマンドキューの一例、応答キュー33は第1応答キューの一例、コマンドキュー41は第2コマンドキューの一例、応答キュー42は第2応答キューの一例である。また、ラインバッファLf,Lgは第1ラインバッファの一例、ラインバッファLcは第2ラインバッファの一例、判定結果H1は第1判定結果の一例、判定結果H2は第2判定結果の一例、フラグF1は第1フラグの一例、フラグF2は第2フラグの一例である。また、トランザクション番号NT,NTa〜NTeは第1番号の一例、バスマスタ番号NB,NBa〜NBeは第2番号の一例である。
【0045】
次に、
図8〜
図27に従って、データ結合部30の動作について説明する。ここでは、複数の具体例を挙げつつ、データ結合部30の動作について説明する。なお、以下の説明では、下記の条件(1)〜(6)におけるデータ結合部30の動作について説明する。
【0046】
(1)バスプロトコルは、コマンドとデータが分離された仕様(例えば、AXI仕様)である。
(2)バス幅は、64ビット(8バイト)である。
【0047】
(3)任意のバースト長(つまり、バッファ部37の各ラインバッファLfgのサイズ)は、256バイトである。
(4)保持部35及びバッファ部37のライン数は、16個である。
【0048】
(5)メモリ14(SDRAM)は、
図8に示すように、複数のバンクを有し、カラムサイズが512バイトである。
(6)バスマスタ(ライト調停部28A)からデータ結合部30に出力されるアドレスADは32ビットの信号である。
【0049】
まず、
図9(a)〜(c)に示した第1の具体例に沿って、ライト調停部28Aからコマンド転送要求CRを受信する際のデータ結合部30の動作について説明する。
図9(a)に示すように、まず、データ結合部30は、所定のバスマスタからライト調停部28Aを介して、開始アドレスが「0x00000020」であり、サイズが64バイトであるデータDATA1を受信する。続いて、データ結合部30は、同じバスマスタから、開始アドレスが「0x00000060」であり、サイズが128バイトであるデータDATA2を受信する。次いで、データ結合部30は、同じバスマスタから、開始アドレスが「0x000000E0」であり、サイズが64バイトであるデータDATA3を受信する。そして、これらデータDATA1〜DATA3を受信後、同じバスマスタからの転送要求が終了する。なお、周知ではあるが、「0x00000020」等における「0x」はその値が16進数であることを示す。
【0050】
まず、転送処理開始に先立って、バッファ部37を任意の値(例えば、「0」)に初期化する。ここでは、データイネーブル保持部39は「0」に初期化する必要があるが、データ保持部38は不定値であっても構わない。また、転送処理開始に先立って、コマンドキュー32,41と、応答キュー33,42と、保持部35と、トランザクション番号NTと、ライトポインタWP及びリードポインタRPを含む各種ポインタとを初期化する。
【0051】
続いて、
図10及び
図11を併せ参照して、上記データDATA1に対応する転送要求CRを受信する際のデータ結合部30の動作について説明する。
次に、
図10に示すステップS1において、コマンド転送部31は、後述するコマンド受信待ち信号が「0」であるか否かを判定する。このとき、コマンド受信待ち信号が「0」になった場合には、ステップS2に移行する。一方、コマンド受信待ち信号が「1」の場合には、コマンド受信待ち信号が「0」になるまで、ステップS1が繰り返し実行される。
【0052】
続いて、コマンド転送部31は、ライト調停部28Aからコマンド転送要求CRを受信したか否かを判定し(ステップS2)、コマンド転送要求CRを受信するまでステップS1及びステップS2を繰り返し実行する。その後、データDATA1に対応するコマンド転送要求CRを受信すると、ステップS3に移行する。
【0053】
次いで、ステップS3において、受信した転送要求CR、つまりライト調停部28Aによって選択されたバスマスタからの転送要求CRをコマンドキュー32に格納する際に、同じバスマスタからの転送要求CRが保持部35内に格納されているか否かが判定される。具体的には、ライト調停部28Aから出力されるバスマスタ番号NB(ここでは、「1」)に基づいて、そのバスマスタ番号NBと同一のバスマスタ番号が保持部35内に格納されているか否かが判定される。ここでは、ライト調停部28Aから出力される「1」のバスマスタ番号NBと同一のバスマスタ番号が保持部35に格納されていないため、ステップS4に移行する。
【0054】
次に、
図11に示すように、コマンド転送部31は、同じバスマスタによる転送要求CRが保持部35内に存在しないため、連続アドレスでないことを示す「0」を、ライトポインタWP(ここでは、「0」)が示すコマンドキュー32の判定結果H1に保持する(ステップS4)。コマンド転送部31は、データDA及びデータイネーブルENが格納されていないバッファ部37の空ライン番号(ここでは、「0」のライン番号)を取得し、その空ライン番号「0」を、ライトポインタWPが示すコマンドキュー32のライン番号NLcに保持する。コマンド転送部31は、ライト調停部28Aから出力される転送要求元のバスマスタ番号NB(ここでは、「1」)を、ライトポインタWPが示すコマンドキュー32のバスマスタ番号NBaに保持する。コマンド転送部31は、ライト調停部28Aから出力されるアドレスADの下位8ビットのアドレスAD[7:0](ここでは、「0x20」)を、ライトポインタWPが示すコマンドキュー32のアドレスADaに保持する。コマンド転送部31は、ライト調停部28Aから出力されるサイズSi(ここでは、64バイト)を、ライトポインタWPが示すコマンドキュー32のサイズSaに保持する。番号付与部36は、「0」のトランザクション番号NTを自身に登録するとともに、そのトランザクション番号NTを、ライトポインタWPが示すコマンドキュー32のトランザクション番号NTaに保持する。番号付与部36は、「0」のトランザクション番号NTを、コマンドキュー32のライン番号NLcに保持した空ライン番号「0」と同一のライン番号NLを持つ保持部35(ラインバッファLc)におけるトランザクション番号NTcに保持する。また、バッファ管理部34は、「0」のライン番号NLを持つラインバッファLcに、転送要求元のバスマスタ番号NB(ここでは、「1」)と、転送要求CRのアドレスAD(ここでは、「0x00000020」)と、サイズSi(ここでは、64バイト)とを保持する。
【0055】
以上説明したステップS4の処理を実施すると、続くステップS5において、コマンド転送部31は、コマンドキュー32に保持されたアドレスADaにサイズSaを加算した加算値と、任意のバースト長(ここでは、256バイト)との判定結果に応じて、コマンドキュー32の判定結果H2を設定する。例えば、コマンド転送部31は、加算値が256バイトよりも小さい場合には、判定結果H2を「0b00」に設定する。この場合には、コマンドキュー32に保持された転送要求CRに対応する転送データのサイズがバッファ部37の1ラインのデータサイズよりも小さく、バッファ部37に空きが存在する。また、コマンド転送部31は、加算値が256バイトと等しい場合には、判定結果H2を「0b10」に設定する。この場合には、コマンドキュー32に保持された転送要求CRに対応する転送データのサイズがバッファ部37の1ライン分のデータサイズと等しく、バッファ部37に空きが存在しない。また、コマンド転送部31は、加算値が256バイトよりも大きい場合には、判定結果H2を「0b11」に設定する。この場合には、コマンドキュー32に保持された転送要求CRに対応する転送データのサイズがバッファ部37の1ライン分のデータサイズよりも大きくなるため、新たなライン番号のバッファ部37が必要となる。ここでは、ライトポインタWP(ここでは、「0」)が示すコマンドキュー32に保持されたアドレスADa(=0x20)にサイズSa(=64バイト)を加算すると、上記加算値は96バイトとなる。このため、コマンド転送部31は、ライトポインタWPが示すコマンドキュー32の判定結果H2を「0b00」に設定する。なお、周知ではあるが、「0b00」、「0b10」、「0b11」等における「0b」はその値が2進数であることを示す。
【0056】
次に、ステップS6において、コマンド転送部31は、判定結果H2が「0b11」であるか否かを判定する。ここでは、判定結果H2が「0b00」であるため、ステップS1に戻る。なお、ステップS1に戻る際に、ライトポインタWPが「0」から「1」に更新される。
【0057】
続いて、
図10及び
図12を併せ参照して、データDATA2に対応する転送要求CRを受信する際のデータ結合部30の動作について説明する。
ステップS1に戻った後、ライト調停部28AからデータDATA2に対応する転送要求CRを受信すると、ステップS3に移行する。このステップS3では、
図12(a)に示すように、ライト調停部28Aから出力されるバスマスタ番号NB(ここでは、「1」)と同一のバスマスタ番号NBcが保持部35に格納されているため、ステップS7に移行する。
【0058】
次いで、ステップS7において、バッファ管理部34は、番号付与部36が保持するトランザクション番号NT(ここでは、「0」)から降順に保持部35内のトランザクション番号NTcを検索する。そして、バッファ管理部34は、上記検索結果に基づいて、最新のトランザクション番号NT(ここでは、「0」)を保持する保持部35のライン番号NL(ここでは、「0」)を選択する。
【0059】
次いで、コマンド転送部31は、選択したライン番号NLを持つラインバッファLcに保持されたアドレスADc及びサイズScから算出されるアドレス値と、上記受信した転送要求CR(ここでは、データDATA2に対応する転送要求CR)のアドレスADとを比較する(ステップS8)。
【0060】
ここでは、
図12(a)に示すように、「0」のライン番号NLを持つラインバッファLcに保持されたアドレスADc(=0x00000020)にサイズSc(=0x00000040)を加算してアドレス値(=0x00000060)が算出される。そして、算出したアドレス値と、ライト調停部28Aから出力されるアドレスAD(ここでは、「0x00000060」)とが比較される。このとき、2つのアドレスが一致する、つまり2つのアドレス値が連続するアドレスであるため、ステップS9に移行する。なお、2つのアドレスが一致しない場合、つまり2つのアドレス値が連続しないアドレスである場合には、上述したステップS4に移行する。
【0061】
次に、ステップS9において、コマンド転送部31は、アドレスAD[7:0]が「0x00」であるか否かを判定する。すなわち、コマンド転送部31は、アドレスAD[7:0]が上記任意のバースト長の先頭アドレス(つまり、バッファ部37の各ラインバッファLfgの先頭アドレス)となるか否かを判定する。アドレスAD[7:0]が「0x00」でない場合には、ステップS7で選択されたライン番号NL(ここでは、「0」)を持つラインバッファLcに対して、コマンドキュー32に保持される転送要求CR(ここでは、データDATA2に対応する転送要求CR)を結合することができる。この場合には、ステップS10に移行する。一方、アドレスAD[7:0]が「0x00」である場合には、ステップS7で選択されたライン番号NLを持つラインバッファLcに対して上記転送要求CRを結合できないため、新たなライン番号NLの保持部35に上記転送要求CRを保持する必要がある。この場合には、ステップS12に移行する。ここでは、データDATA2に対応する転送要求CRのアドレスAD[7:0]が「0x60」であり、「0x00」ではないため、ステップS10に移行する。
【0062】
続いて、
図12(a)に示すように、コマンド転送部31は、ステップS8における判定結果に応じて、連続アドレスであることを示す「1」を、ライトポインタWP(ここでは、「1」)が示す判定結果H1に保持する(ステップS10)。コマンド転送部31は、ステップS7で選択されたライン番号NL(ここでは、「0」)を、ライトポインタWPが示すライン番号NLcに保持する。バッファ管理部34は、「0」のライン番号NLを持つラインバッファLcに保持されたトランザクション番号NTc(ここでは、「0」)を、ライトポインタWPが示すトランザクション番号NTaに保持する。また、
図12(b)に示すように、コマンド転送部31は、ライト調停部28Aからのバスマスタ番号NB(ここでは、「1」)を、ライトポインタWP(ここでは、「1」)が示すバスマスタ番号NBaに保持する。コマンド転送部31は、ライト調停部28AからのアドレスAD[7:0]及びサイズSiを、ライトポインタWPが示すアドレスADa及びサイズSaにそれぞれ保持する。また、バッファ管理部34は、「0」のライン番号NLを持つラインバッファLcにおけるアドレスADc及びサイズScを、アドレスADと同じ「0x00000060」、及びサイズSiと同じ「128バイト」にそれぞれ更新する。
【0063】
以上説明したステップS10の処理を実施すると、続くステップS5において、ライトポインタWPが示すアドレスADa(ここでは、「0x60」)にサイズSa(ここでは、128バイト)を加算して加算値(=224バイト)が算出される。このとき、加算値が256バイトよりも小さくなるため、コマンド転送部31は、ライトポインタWPが示す判定結果H2を「0b00」に設定する。このため、判定結果H2が「0b11」ではないため(ステップS7でNO)、ライトポインタWPを「1」から「2」に更新してステップS1に戻る。
【0064】
次いで、
図10及び
図13を併せ参照して、データDATA3に対応する転送要求CRを受信する際のデータ結合部30の動作について説明する。
ステップS1に戻った後、ライト調停部28AからデータDATA3に対応する転送要求CRを受信すると、ステップS3に移行する。このステップS3では、
図13(a)に示すように、ライト調停部28Aから出力されるバスマスタ番号NB(ここでは、「1」)と同一のバスマスタ番号NBcが保持部35に格納されているため、ステップS7に移行する。続いて、バッファ管理部34は、最新のトランザクション番号NT(ここでは、「0」)を保持する保持部35のライン番号NL(ここでは、「0」)を選択する(ステップS7)。
【0065】
次いで、
図13(a)に示すように、「0」のライン番号NLを持つラインバッファLcに保持されたアドレスADc(=0x00000060)にサイズSc(=128バイト)を加算してアドレス値(=0x000000E0)が算出される(ステップS8)。このとき、算出したアドレス値と、ライト調停部28Aから出力されるアドレスAD(ここでは、「0x000000E0」)とが一致するため、ステップS9に移行する。ここでは、アドレスAD[7:0]が「0x00」ではないため(ステップS9でYES)、ステップS10に移行する。
【0066】
次に、コマンド転送部31は、ステップS8における判定結果に応じて、ライトポインタWP(ここでは、「2」)が示す判定結果H1に「1」を保持する(ステップS10)。コマンド転送部31は、ステップS7で選択されたライン番号NL(ここでは、「0」)を、ライトポインタWPが示すライン番号NLcに保持する。バッファ管理部34は、「0」のライン番号NLを持つラインバッファLcに保持されたトランザクション番号NTc(ここでは、「0」)を、ライトポインタWPが示すトランザクション番号NTaに保持する。また、
図13(b)に示すように、コマンド転送部31は、ライト調停部28Aからのバスマスタ番号NB(ここでは、「1」)を、ライトポインタWP(ここでは、「2」)が示すバスマスタ番号NBaに保持する。コマンド転送部31は、ライト調停部28AからのアドレスAD[7:0]及びサイズSiを、ライトポインタWPが示すアドレスADa及びサイズSaにそれぞれ保持する。また、バッファ管理部34は、「0」のライン番号NLを持つラインバッファLcにおけるアドレスADc及びサイズScを、アドレスADと同じ「0x000000E0」、及びサイズSiと同じ「64バイト」にそれぞれ更新する。
【0067】
以上説明したステップS10の処理を実施すると、続くステップS5において、ライトポインタWPが示すアドレスADa(ここでは、「0xE0」)にサイズSa(ここでは、64バイト)を加算して加算値(=288バイト)が算出される。このとき、加算値が256バイトよりも大きくなるため、コマンド転送部31は、ライトポインタWPが示す判定結果H2を「0b11」に設定する。このため、判定結果H2が「0b11」と等しくなるため(ステップS6でYES)、ステップS11に移行する。
【0068】
次に、
図14に示すように、コマンド転送部31は、バッファ部37の空ライン番号(ここでは、「1」のライン番号)を取得し、その空ライン番号「1」を、ライトポインタWP(ここでは、「2」)が示すライン番号NLnに保持する(ステップS11)。すなわち、ライトポインタ「2」が示すライン番号NLnを、「0」から「1」に更新する。バッファ管理部34は、「0」のライン番号NLを持つラインバッファLcに保持されたアドレスADc及びサイズScから、バッファ部37の1ライン(256バイト)を超えた分のアドレスADccとサイズSccを算出する。例えば、バッファ管理部34は、「0」のライン番号NLを持つラインバッファLcに保持された元のアドレスADc[8]を反転させてアドレスADcc[8]を算出するとともに、アドレスADcc[7:0]を「0x00」に設定する。また、アドレスADcc[31:9]は、元のアドレスADc[31:9]をそのまま維持する。これらにより、256バイトを超えた分のアドレスADcc[31:0]が算出される。さらに、256バイトを超えた分のサイズSccは、元のアドレスADc[7:0]に対して、「0」のライン番号NLを持つラインバッファLcに保持された元のサイズScを加算し、さらに加算値から256バイトを減算することにより算出される。本例では、元のアドレスADc[31:0]が「0x000000E0」であるため、アドレスADcc[31:0]が「0x00000100」となる。また、本例では、元のアドレスADc[7:0]が「0xE0」、元のサイズScが64バイトであるため、サイズSccは32(=288−256)となる。そして、バッファ管理部34は、算出したアドレスADcc及びサイズSccを、ライトポインタWP(ここでは、「2」)が示すライン番号NLnに保持された空ライン番号「1」と同一のライン番号NLにおけるアドレスADc及びサイズScに保持する。また、番号付与部36は、新たなトランザクション番号NT(ここでは、「1」)を生成する。そして、番号付与部36は、「1」のトランザクション番号NTを、ライトポインタWPが示すトランザクション番号NTaと、「1」のライン番号NLにおけるトランザクション番号NTcとに保持する。これにより、ライトポインタWPが示すトランザクション番号NTaが「0」から「1」に更新される。
【0069】
以上説明したステップS11の処理が終了すると、データDATA1〜DATA3に対応する3つの転送要求CRがコマンド転送部31に受信され、保持部35に3つの転送要求CRを結合するためのバッファ情報が保持される。
【0070】
なお、
図9に示した具体例では発生しなかったが、ステップS9において、アドレスAD[7:0]が「0x00」となった場合には(ステップS9でNO)、ステップS12に移行する。このステップS12では、コマンド転送部31は、ステップS8における判定結果に応じて、ライトポインタWPが示す判定結果H1に「1」を保持する。コマンド転送部31は、バッファ部37の空ライン番号を取得し、その空ライン番号を、ライトポインタWPが示すライン番号NLcに保持する。番号付与部36は、新たなトランザクション番号NTを生成し、そのトランザクション番号NTをコマンドキュー32及び保持部35に保持する。コマンド転送部31は、ライト調停部28Aから出力されるバスマスタ番号NB、アドレスAD[7:0]及びサイズSiを、ライトポインタWPが示すコマンドキュー32に保持する。また、バッファ管理部34は、ライト調停部28Aから出力されるバスマスタ番号NB、アドレスAD及びサイズSiを、ライン番号NLcに保持した空ライン番号と同一のライン番号NLを持つラインバッファLcに保持する。以上説明したステップS12が実施された後、上記ステップS5が実行される。
【0071】
次に、
図15〜
図18を併せ参照して、ライト調停部28Aからデータ転送要求DRを受信する際のデータ結合部30の動作について説明する。まず、
図15及び
図16を併せ参照して、上記データDATA1に対応するデータ転送要求DRを受信する際のデータ結合部30の動作について説明する。
【0072】
図15に示すステップS21において、コマンド転送部31は、コマンド受信待ち信号を「0」に設定する。
次に、コマンド転送部31は、ライト調停部28Aからデータ転送要求DRを受信したか否かを判定し(ステップS22)、データ転送要求DRを受信するまでステップS21及びステップS22を繰り返し実行する。その後、上記データDATA1に対応するデータ転送要求DRを受信すると、ステップS23に移行する。
【0073】
続いて、ステップS23において、コマンド転送部31は、バッファ部37に対するデータDA及びデータイネーブルENの書き込みを許可するライト制御信号WEを生成する。また、コマンド転送部31は、コマンドキュー32に保持されたライン番号NLcとアドレスADaとに基づいて、ライトアドレスWAを生成する。ここでは、
図16に示すように、リードポインタRP(ここでは、「0」)が示すコマンドキュー32に保持されたライン番号NLc(ここでは、「0」)とアドレスADa(ここでは、「0x20」)とからライトアドレスWAを生成する。そして、ライトアドレスWA(ここでは、「0x020」)を開始アドレスとして、バッファ部37に64バイトのデータDATA1(データDA及びデータイネーブルEN)が書き込まれる。このとき、
図9(c)に示すように、ライン番号「0」のデータイネーブル保持部39のアドレス「0x00」からアドレス「0x1F」までは、初期値である「0」が格納された状態となる。これにより、ライン番号「0」のデータ保持部38のアドレス「0x00」からアドレス「0x1F」までに保持されているデータDA(ここでは、初期値である「0」)は「invalid(無効化)」される。
【0074】
上述したように64バイトのデータDATA1がライン番号「0」のラインバッファLfgに順次書き込まれ、64バイトのデータDATA1の最後のデータを書き込む最終のバーストサイクルになると(ステップS24でYES)、コマンド転送部31は、コマンド受信待ち信号を「1」に設定する(ステップS25)。すると、
図10に示したステップS1〜S12の処理ではコマンド受信待ち信号が「0」になるまで上記ステップS1が繰り返し実行されることになるため、ステップS2〜S12の処理が中断される。すなわち、コマンド受信待ち信号が「1」に設定されることにより、コマンドキュー32及び保持部35の更新が中断される。具体的には、バッファ部37へのデータ転送の最終サイクルでは結合完了の判定を行うためにコマンドキュー32及び保持部35に対する操作を行うため、最終サイクルになった場合には、コマンドキュー32及び保持部35の更新を中断するようにしている。そして、データ結合部30は、コマンドキュー32及び保持部35の更新を中断した状態で、以下に説明するステップS26〜S37の処理を実行する。なお、最終のバーストサイクル以外のデータ転送サイクルでは、ステップS2〜S12の処理は継続して実行されている。
【0075】
次に、コマンド転送部31は、コマンドキュー32のアドレスADaと、コマンドキュー32のライン番号NLcと同一のライン番号NLを持つラインバッファLcに保持されたアドレスADc[7:0]とが一致するか否かを判定する(ステップS26)。ここでは、リードポインタRP(ここでは、「0」)が示すアドレスADa(ここでは、「0x20」)と、リードポインタRPが示すライン番号NLc(ここでは、「0」)と同一のライン番号NLを持つラインバッファLcのアドレスADc[7:0](ここでは、「0xE0」)とが一致しない。不一致の場合には、コマンドキュー32内に後続の連続アドレスのコマンド転送要求CRが存在していることを示している。この場合には、リードポインタRPが示すバスマスタ番号NBa(ここでは、「1」)とトランザクション番号NTa(ここでは、「0」)とが、ポインタ「0」が示す応答キュー33に移動される(ステップS27)。その後、コマンドキュー32のリードポインタRPを「0」から「1」に進めて(ステップS28)、ステップS21に戻る。
【0076】
続いて、
図15及び
図17を併せ参照して、上記データDATA2に対応するデータ転送要求DRを受信する際のデータ結合部30の動作について説明する。
ステップS28からステップS21に戻った後、上述したようにコマンド受信待ち信号が「0」に設定される。これにより、
図10に示したステップS2〜S12の処理が再開される。その後、コマンド転送部31は、データDATA2に対応するデータ転送要求DRを受信すると、ステップS23を実行する。これにより、
図17に示すように、リードポインタRP(ここでは、「1」)が示すライン番号NLc(ここでは、「0」)及びアドレスADa(ここでは、「0x60」)を開始アドレス(ここでは、「0x060」)として、バッファ部37に128バイトのデータDATA2が書き込まれる。この結果、バッファ部37の連続したアドレスに、2つの転送要求に対応するデータDATA1,DATA2が連続して保持される。換言すると、バッファ部37内において、2つの転送要求CRに対応するデータDATA1,DATA2が結合される。
【0077】
続いて、バッファ部37へのデータ転送の最終サイクルになると、コマンド受信待ち信号が「1」に設定され(ステップS25)、ステップS26が実行される。ここでは、リードポインタRPが示すアドレスADa(ここでは、「0x60」)と、リードポインタRPが示すライン番号NLc(ここでは、「0」)と同一のライン番号NLを持つラインバッファLcに保持されたアドレスADc[7:0](ここでは、「0xE0」)とが一致しない。このため、リードポインタRPが示すバスマスタ番号NBa(ここでは、「1」)とトランザクション番号NTa(ここでは、「0」)とが、ポインタ「1」が示す応答キュー33に移動される(ステップS27)。その後、リードポインタRPを「1」から「2」に進めて(ステップS28)、ステップS21に戻る。
【0078】
次いで、
図15及び
図18を併せ参照して、上記データDATA3に対応するデータ転送要求DRを受信する際のデータ結合部30の動作について説明する。
ステップS28からステップS21に戻った後、上述したようにコマンド受信待ち信号が「0」に設定される。その後、コマンド転送部31は、データDATA2に対応するデータ転送要求DRを受信すると、ステップS23を実行する。これにより、
図18に示すように、リードポインタRP(ここでは、「2」)が示すライン番号NLc(ここでは、「0」)及びアドレスADa(ここでは、「0xE0」)を開始アドレス(ここでは、「0x0E0」)として、バッファ部37に64バイトのデータDATA3が書き込まれる。このとき、判定結果H2が「0b11」であることから、ライン番号「0」のラインバッファLfgに対してデータDATA3を書き終えた後(つまり、32バイト分のデータDATA3を書き終えた後)、続けてライン番号「1」のラインバッファLfgに対して残りの32バイト分のデータDATA3を書き込む。なお、上記残りの32バイト分のデータDATA3は、ライン番号「1」のラインバッファLfgのアドレス「0x00」を開始アドレスとして書き込まれる。
【0079】
続いて、バッファ部37へのデータ転送の最終サイクルになると、コマンド受信待ち信号が「1」に設定され(ステップS25)、ステップS26が実行される。ここでは、リードポインタRP(ここでは、「2」)が示すアドレスADa(ここでは、「0xE0」)と、リードポインタRPが示すライン番号NLc(ここでは、「0」)と同一のライン番号NLを持つラインバッファLcに保持されたアドレスADc[7:0](ここでは、「0xE0」)とが一致する。一致の場合には、コマンドキュー32内に後続の連続アドレスのコマンド転送要求CRが存在しないことを示している。そこで、この場合には、ステップS29に移行する。
【0080】
次に、ステップS29において、コマンド転送部31は、判定結果H2が「0b11」であるか否かを判定する。ここでは、リードポインタRPが示す判定結果H2が「0b11」であるため、ステップS30に移行する。
【0081】
続いて、ステップS30において、コマンド転送部31は、リードポインタRP(ここでは、「2」)が示すライン番号NLc(ここでは、「0」)と同一のライン番号NLを持つラインバッファLcのフラグF1に、バッファ部37の1ライン分のデータ結合処理が完了したことを示す「1」を保持する。また、ステップS30において、コマンド転送部31は、リードポインタRPが示すバスマスタ番号NBa(ここでは、「1」)とトランザクション番号NTa(ここでは、「1」)とを、ポインタ「2」が示す応答キュー33に移動する。ここで、応答キュー33にトランザクション番号NTbを保持する理由は、メモリI/F29からバスマスタに対してライト完了通知WC1を返す際に、最終サイクルのデータが含まれる結合後のコマンド転送要求CRaへのライト完了通知で返す必要があるためである。詳述すると、複数の転送要求CRが1つの転送要求CRaに結合された場合には、その結合後の1つの転送要求CRaに対してライト完了通知WC1がメモリI/F29から出力される。このため、1つのライト完了通知WC1を、結合前の複数の転送要求CRに対応付けるために、応答キュー33にトランザクション番号NTbを保持している。
【0082】
次いで、ステップS31において、コマンド転送部31は、コマンドキュー32のリードポインタRPを昇順にチェックして同じバスマスタ番号NBaが保持されたラインの判定結果H1が「1」であるか否かを判定する。また、ステップS31において、コマンド転送部31は、ライン番号NLnと同一のライン番号NLを持つラインバッファLcに保持されたアドレスADc[7:0]が「0x00」であるか否かを判定する。このとき、判定結果H1が「0」である場合、又はアドレスADc[7:0]が「0x00」である場合には(ステップS31でNO)、ステップS32に移行する。一方、ステップS31において、判定結果H1が「1」である場合、又はアドレスADc[7:0]が「0x00」でない場合には、リードポインタRPを進めて(ステップS28)、ステップS21に戻る。
【0083】
続いて、ステップS32において、コマンド転送部31は、ライン番号NLnと同一のライン番号NLを持つラインバッファLcのフラグF2に、該当のバスマスタのデータ結合処理がバッファ部37の1ライン未満のサイズで中断したことを示す「1」を保持する。
【0084】
本例では、
図18に示すように、ステップS31において、リードポインタRP(ここでは、「2」)が示す判定結果H2が「0b11」であり、ライン番号NLn(ここでは、「1」)と同一のライン番号NLを持つラインバッファLcのアドレスADc[7:0]が「0x00」から更新されていない。これは、コマンドキュー32内に後続の連続アドレスのコマンド転送要求CRが存在しないことを示している。このため、コマンド転送部31は、「1」のライン番号NLを持つラインバッファのフラグF2を「1」に設定する(ステップS32)。このように、ステップS31におけるコマンド転送部31は、コマンドキュー32内に後続の連続アドレスの転送要求CRが存在するか否かを判定している。そして、コマンド転送部31は、後続の連続アドレスの転送要求CRが存在しない場合に、保持部35内のフラグF2を「1」に設定する。
【0085】
その後、リードポインタRPを進めて(ステップS28)、ステップS21に戻る。
一方、上述したステップS29において判定結果H2が「0b11」でない場合には、コマンド転送部31は、判定結果H2が「0b10」であるか否かを判定する(ステップS33)。例えば、判定結果H2が「0b10」である場合、つまり任意のバースト長(結合後のデータサイズがバッファ部37の1ライン分のデータサイズ)と等しい場合には、ステップS34に移行する。
【0086】
続いて、ステップS34において、コマンド転送部31は、保持部35のフラグF1を「1」に設定する。また、ステップS34において、コマンド転送部31は、リードポインタRPが示すバスマスタ番号NBaとトランザクション番号NTaとを、応答キュー33に移動する。
【0087】
次いで、ステップS35において、コマンド転送部31は、リードポインタRPを昇順にチェックして同じバスマスタ番号NBaが保持されたラインLaの判定結果H1が「1」であるか否かを判定する。このとき、判定結果H1が「1」である場合には、リードポインタRPを進めて(ステップS28)、ステップS21に戻る。一方、判定結果H1が「0」である場合には、コマンドキュー32に後続の連続アドレスのコマンド転送要求CRが存在しないことを示す。そこで、この場合には、ライン番号NLcと同一のライン番号NLを持つラインバッファLcのフラグF2を「1」に設定する(ステップS36)。このフラグF2により、該当のバスマスタのデータ結合処理を中断したことが示される。なお、フラグF2の設定後、リードポインタRPを進めて(ステップS28)、ステップS21に戻る。
【0088】
一方、上述したステップS33において判定結果H2が「0b00」である場合、つまり結合後のデータサイズが任意のバースト長(バッファ部37の1ライン分のデータサイズ)よりも小さい場合には、ステップS37に移行する。判定結果H2が「0b00」である場合には、コマンドキュー32に後続の連続アドレスのコマンド転送要求CRが存在しないことを示しているため、ライン番号NLcと同一のライン番号NLを持つラインバッファLcのフラグF2を「1」に設定する(ステップS37)。このフラグF2により、該当のバスマスタのデータ結合処理を中断したことが示される。また、ステップS37において、コマンド転送部31は、リードポインタRPが示すバスマスタ番号NBaとトランザクション番号NTaとを、応答キュー33に移動する。その後、リードポインタRPを進めて(ステップS28)、ステップS21に戻る。
【0089】
次に、
図19〜
図25に従って、バッファ部37内でデータを結合した後のデータ結合部30の動作について説明する。
まず、ステップS40において、結合コマンド転送部40は、保持部35内のフラグF1,F2を監視し、フラグF1が「1」であるか否か、又はフラグF2が「1」であるか否かを判定する。フラグF1,F2のいずれか一方が「1」になるまでステップS40が繰り返し実行される。
【0090】
図20に示すように、ライン番号NLが「0」のラインバッファLcにおけるフラグF1が「1」になると(ステップS40,S41でYES)、結合コマンド転送部40は、「0」のライン番号NLにおけるアドレスADc及びサイズScに基づいて、結合後アドレスADd及び結合後サイズSdを生成する(ステップS42)。詳述すると、フラグF1=1は、バッファ部37の1ライン分のデータを結合したことを示している。そこで、結合コマンド転送部40は、結合後サイズSdを、任意のバースト長(ここでは、256バイト)と等しいデータサイズに設定する。また、結合コマンド転送部40は、結合後アドレスADdに対して、「0」のライン番号NLにおけるアドレスADc(ここでは、0x000000E0)を保持した後、その下位8ビットを0値化して結合後アドレスADdを生成する。換言すると、結合コマンド転送部40は、結合後アドレスADdの下位8ビットを0値化し、結合後アドレスADdの上位24ビットに、「0」のライン番号NLにおけるアドレスADcの上位24ビットを保持する。このため、「0」のライン番号NLにおける結合後アドレスADdは、「0x00000000」となる。これにより、データサイズが任意のバースト長(ここでは、256バイト)であって、任意のバースト長のアライメント単位を開始アドレスとするコマンド転送要求、つまり結合後のコマンド転送要求が生成される。
【0091】
続いて、ステップS43において、結合コマンド転送部40は、上記算出した結合後アドレスADd及び結合後サイズSdと、「0」のライン番号NLにおけるラインバッファLcに保持されたバスマスタ番号NBc及びトランザクション番号NTcとをコマンドキュー41に保持する。ここでは、ポインタ「0」が示すコマンドキュー41のラインLdには、バスマスタ番号NBdとして「1」、結合後アドレスADdとして「0x00000000」、結合後サイズSdとして「256バイト」、トランザクション番号NTdとして「0」がそれぞれ保持される。これにより、ポインタ「0」が示すコマンドキュー41内に、ライン番号「0」のラインバッファLfgに格納されたデータに対応する結合後のコマンド転送要求CRaが保持される。
【0092】
以上説明したステップS43の処理が終了すると、結合コマンド転送部40は、コマンドキュー41内に保持された結合後のコマンド転送要求CRa及びデータ転送要求DRaをメモリI/F29に発行する(ステップS44)。すなわち、結合後アドレスADd(ここでは、「0x00000000」)と結合後サイズSd(ここでは、256バイト)とを有するコマンド転送要求CRa及びデータ転送要求DRaをメモリI/F29に発行する。その後、結合後のコマンド転送要求CRaの生成処理としてはステップS40に戻る。
【0093】
次に、
図21に示すステップS50において、上記発行したコマンド転送要求CRa及びデータ転送要求DRaに対する応答コマンドがメモリI/F29から結合コマンド転送部40に入力されるまで待つ。応答コマンドを受信すると、結合コマンド転送部40は、ライン番号「0」のラインバッファLf,Lgに保持された、結合後の1ライン分のデータDAa及びデータイネーブルENaをメモリI/F29を介してメモリ14に転送する(ステップS51)。例えば、結合コマンド転送部40は、結合後のコマンド転送要求CRa及びデータ転送要求DRaが受け付けられると、データDAa及びデータイネーブルENaの読み出しを許可するリード制御信号REを生成する。また、結合コマンド転送部40は、コマンドキュー41に保持された結合後アドレスADdのうち下位12ビットのアドレスADd[11:0]をリードアドレスRAとする。そして、リードアドレス(ここでは、「0x000」)を開始アドレスとして、ライン番号「0」のバッファ部37から256バイトのデータDAa及びデータイネーブルENaが読み出され、その読み出されたデータDAa及びデータイネーブルENaがメモリI/F29を介してメモリ14に転送される。
【0094】
その後、上記256バイトのデータ転送が完了すると(ステップS52でYES)、ライン番号「0」のバッファ部37(データ保持部38及びデータイネーブル保持部39)を初期化する(ステップS53)。このようにバッファ部37(特に、データイネーブル保持部39)を初期化することにより、上述したステップS22〜S24においてバスマスタからの転送データDAEをバッファ部37に書き込む際に、バスマスタからのデータDAが存在する部分のみに「1」のデータイネーブルENが書き込まれることになる。これにより、結合前の転送要求の開始アドレス(ここでは、「0x00000020」)を、任意バースト長のアライメント単位を開始アドレス(ここでは、「0x00000000」)に変換しても、不要なライトアクセスが実施されることを防止できる。
【0095】
続いて、
図22に示すように、結合コマンド転送部40は、ポインタ「0」が示すコマンドキュー41のバスマスタ番号NBd(ここでは、「1」)及びトランザクション番号NTd(ここでは、「0」)を、ポインタ「0」が示す応答キュー42に移動する(ステップS54)。なお、ステップS54の後、結合データの転送処理としてはステップS50に戻る。
【0096】
次いで、
図23に示すステップS60において、結合コマンド転送部40は、バッファ部37から読み出したデータDAaがメモリ14に書き込まれたことを示すライト完了通知WC1が入力されるまで待つ。結合コマンド転送部40は、ライト完了通知WC1を受信すると(ステップS60でYES)、応答キュー33にライト完了通知WC2を送信する。具体的には、ポインタ「0」が示す応答キュー42に保持されたトランザクション番号NTeがライト完了通知WC2として応答キュー33に通知される(ステップS61)。なお、ステップS61の後、メモリI/F29からのライト完了通知WC1の受信処理としてはステップS60に戻る。
【0097】
次に、
図24に示すステップS70において、応答キュー33は、応答キュー42からのライト完了通知WC2(トランザクション番号NTe)を受信するまで待つ。応答キュー33は、トランザクション番号NTeを受信すると、そのトランザクション番号NTe(ここでは、「0」)と同じトランザクション番号NTbの転送要求CRの転送元であるバスマスタに対してライト完了通知WC3を送信する(ステップS71)。このライト完了通知WC3は、同じトランザクション番号NTeを持つ全ての応答要求に対して送信が完了するまで継続される。ここでは、
図25に示すように、ポインタ「0」が示す応答キュー33のトランザクション番号NTbが「0」であるため、バスマスタ番号NBが「1」のバスマスタに対してライト完了通知WC3が送信される。続いて、ポインタ「1」が示す応答キュー33のトランザクション番号NTbも「0」であるため、バスマスタ番号NBが「1」のバスマスタに対してライト完了通知WC3が送信される。次いで、ポインタ「2」が示す応答キュー33のトランザクション番号NTbは「1」であるため(ステップS72でYES)、ステップS70に戻る。
【0098】
続いて、
図20に示すように、ライン番号NLが「1」のラインバッファLcのフラグF2が「1」になると(ステップS41でNO)、結合コマンド転送部40は、「1」のライン番号NLにおけるアドレスADc及びサイズScに基づいて、結合後アドレスADd及び結合後サイズSdを生成する(ステップS45)。詳述すると、フラグF2=1は、バッファ部37の1ライン分未満のサイズでデータ結合が中断したことを示している。そこで、結合コマンド転送部40は、「1」のライン番号NLにおけるアドレスADc[7:0](ここでは、「0x00」)にサイズSc(ここでは、32バイト)を加算して結合後サイズSd(ここでは、32バイト)を生成する。また、結合コマンド転送部40は、結合後アドレスADdにアドレスADc(ここでは、「0x00000100」)を保持した後、その下位8ビットを0値化して結合後アドレスADd(ここでは、「0x00000100」)を生成する。これにより、任意のバースト長(ここでは、256バイト)よりも小さいデータサイズ(ここでは、32バイト)であって、任意のバースト長のアライメント単位を開始アドレス(ここでは、「0x00000100」)とする、結合後のコマンド転送要求が生成される。
【0099】
続いて、ステップS43では、ポインタ「1」が示すコマンドキュー41に、バスマスタ番号NBdとして「1」、結合後アドレスADdとして「0x00000100」、結合後サイズSdとして「32バイト」、トランザクション番号NTdとして「1」がそれぞれ保持される。これにより、ポインタ「1」が示すコマンドキュー41内に、ライン番号「1」のラインバッファLfgに格納されたデータに対応する結合後のコマンド転送要求CRaが保持される。
【0100】
そして、結合コマンド転送部40は、ポインタ「1」が示すコマンドキュー41に保持された結合後アドレスADd(ここでは、「0x00000100」)と結合後サイズSd(ここでは、32バイト)とを有するコマンド転送要求CRaをメモリI/F29に発行する(ステップS44)。その後、
図21のステップS50〜S54、
図23のステップS60,S61及び
図24のステップS70〜S72が順に実施される。
【0101】
次に、
図26に示した第2の具体例に沿って、データ結合部30の動作について説明する。
本例では、まず、
図26(a)に示すように、データ結合部30は、所定のバスマスタからライト調停部28Aを介して、開始アドレスが「0x00000020」であり、サイズが64バイトであるデータDATA1を受信する。続いて、データ結合部30は、同じバスマスタから、開始アドレスが「0x00000060」であり、サイズが128バイトであるデータDATA2を受信する。次いで、データ結合部30は、同じバスマスタから、開始アドレスが「0x000000E0」であり、サイズが32バイトであるデータDATA3を受信する。そして、これらデータDATA1〜DATA3を受信後、同じバスマスタからの転送要求が終了する。
【0102】
はじめに、データDATA1〜DATA3に対応するコマンド転送要求CRを受信する処理について説明するが、データDATA1,DATA2に対応するコマンド転送要求CRを受信する処理は、上述した第1の具体例と同様であるため、ここでは説明を省略する。そこで、データDATA3に対応する転送要求CRを受信した際の処理から説明する。
【0103】
図26(d)に示すように、転送要求CRを受信すると、ライト調停部28Aからのバスマスタ番号NB(ここでは、「1」)と同一のバスマスタ番号が保持部35に格納されているため、最新のトランザクション番号NT(ここでは、「0」)を保持する保持部35のライン番号(ここでは、「0」)を選択する。続いて、「0」のライン番号NLを持つラインバッファLcに保持されたアドレスADc(=0x00000060)にサイズSc(=128バイト)を加算してアドレス値(=0x000000E0)が算出される。このアドレス値とライト調停部28Aから出力されるアドレスAD(ここでは、「0x000000E0」)とが一致するため、以下の処理が行われる。すなわち、コマンド転送部31は、ライトポインタWP(ここでは、「2」)が示すバスマスタ番号NBa、アドレスADa、サイズSa、ライン番号NLc、判定結果H1、トランザクション番号NTaに、「1」、「0xE0」、「32バイト」、「0」、「0」を保持する。また、バッファ管理部34は、「0」のライン番号NLを持つラインバッファLcにおけるアドレスADc及びサイズScを、アドレスADと同じ「0x000000E0」、及びサイズSiと同じ「32バイト」にそれぞれ更新する。
【0104】
次いで、ライトポインタWPが示すアドレスADa(ここでは、「0xE0」)にサイズSa(ここでは、32バイト)を加算して加算値(=256バイト)が算出される。このとき、加算値が256バイトと等しくなるため、コマンド転送部31は、ライトポインタWPが示す判定結果H2を「0b10」に設定する。
【0105】
次に、データDATA1〜DATA3に対応するデータ転送要求DRを受信する処理について説明するが、データDATA1,DATA2に対応するデータ転送要求DRを受信する処理は、上述した第1の具体例と同様に実施される。すなわち、
図26(b)及び
図26(c)に示すように、データ保持部38及びデータイネーブル保持部39に、ライン番号「0」のアドレス「0x20」から64バイトのデータDATA1が書き込まれ、続くアドレス「0x60」から128バイトのデータDATA2が書き込まれる。
【0106】
続いて、
図26(e)に示すように、コマンド転送部31は、データDATA3に対応するデータ転送要求DRを受信すると、リードポインタRP(ここでは、「2」)が示すライン番号NLc(ここでは、「0」)及びアドレスADa(ここでは、「0xE0」)を開始アドレスとして、バッファ部37に32バイトのデータDATA3が書き込まれる。
【0107】
次いで、バッファ部37へのデータ転送の最終サイクルになると、コマンド受信待ち信号が「1」に設定される。次いで、リードポインタRP(ここでは、「2」)が示すアドレスADa(ここでは、「0xE0」)と、ライン番号NLが「0」のラインバッファLcに保持されたアドレスADc[7:0](ここでは、「0xE0」)とが比較される。このとき、アドレスADaとアドレスADcとが一致し、さらにリードポインタRPが示す判定結果H2が「0b10」であることから、コマンド転送部31は、保持部35のフラグF1を「1」に設定する(ステップS34)。また、ステップS34において、コマンド転送部31は、リードポインタRPが示すバスマスタ番号NBa(ここでは、「1」)とトランザクション番号NTa(ここでは、「0」)とを、応答キュー33に移動する。さらに、判定結果H2が「0b10」であり、コマンドキュー32内に後続の連続アドレスの転送要求CRが存在しないため、ライン番号NLが「0」の保持部35のフラグF2が「1」に設定される。
【0108】
次に、ライン番号NLが「0」のラインバッファLcにおけるフラグF1が「1」であるため、結合コマンド転送部40は、結合後サイズSdを「256」に設定する。また、結合コマンド転送部40は、結合後アドレスADdに対して、「0」のライン番号NLにおけるアドレスADc(ここでは、0x000000E0)を保持した後、その下位8ビットを0値化して結合後アドレスADd(ここでは、0x00000000)を生成する。続いて、
図26(f)に示すように、結合コマンド転送部40は、上記算出した結合後アドレスADd及び結合後サイズSdと、「0」のライン番号NLにおけるラインバッファLcに保持されたバスマスタ番号NBc(ここでは、「1」)及びトランザクション番号NTc(ここでは、「0」)とをコマンドキュー41に保持する。これにより、データサイズが任意のバースト長(ここでは、256バイト)であって、任意のバースト長のアライメント単位を開始アドレスとするコマンド転送要求CRaがコマンドキュー41に保持される。
【0109】
次いで、結合コマンド転送部40は、コマンドキュー41に保持された結合後アドレスADd(ここでは、「0x00000000」)と結合後サイズSd(ここでは、256バイト)とを有するコマンド転送要求CRaをメモリI/F29に発行する。そして、ライン番号「0」のバッファ部37(データ保持部38及びデータイネーブル保持部39)に保持された結合後のデータDAa及びデータイネーブルENaがメモリI/F29を介してメモリ14に転送される。
【0110】
次に、
図27に示した第3の具体例に沿って、データ結合部30の動作について説明する。
本例では、
図27(a)に示すように、データ結合部30は、所定のバスマスタからライト調停部28Aを介して、開始アドレスが「0x00000020」であり、サイズが64バイトであるデータDATA1を受信する。このデータDATA1を受信後、同じバスマスタからの転送要求が終了する。
【0111】
図27(d)に示すように、まず、コマンド転送部31は、転送要求CRを受信すると、ライト調停部28Aからのバスマスタ番号NB(ここでは、「1」)と同一のバスマスタ番号が保持部35に格納されていないため、ステップS4を実行する。詳述すると、コマンド転送部31は、バッファ部37の空ライン番号(ここでは、「0」)を取得する。コマンド転送部31は、ライトポインタWP(ここでは、「0」)が示すコマンドキュー32のバスマスタ番号NBa、アドレスADa及びサイズSaに、バスマスタ番号NBである「1」、アドレスAD[7:0]である「0x20」、サイズSiである「64バイト」をそれぞれ保持する。コマンド転送部31は、ライトポインタWP(ここでは、「0」)が示すライン番号NLc、判定結果H1及びトランザクション番号NTaに、空ライン番号である「0」、「0」、番号付与部36により付与される「0」をそれぞれ保持する。また、バッファ管理部34は、空ライン番号「0」と同一のライン番号NLを持つラインバッファLcにおけるアドレスADc及びサイズScに、アドレスADである「0x00000020」、サイズSiである「64バイト」をそれぞれ保持する。
【0112】
次いで、ライトポインタWPが示すアドレスADa(ここでは、「0x20」)にサイズSa(ここでは、64バイト)を加算して加算値(=96バイト)が算出される。このとき、加算値が256バイトよりも小さくなるため、コマンド転送部31は、ライトポインタWPが示す判定結果H2を「0b00」に設定する。
【0113】
次に、
図27(e)に示すように、コマンド転送部31は、データDATA1に対応するデータ転送要求DRを受信すると、リードポインタRP(ここでは、「0」)が示すライン番号NLc(ここでは、「0」)及びアドレスADa(ここでは、「0x20」)を開始アドレスとして、バッファ部37に64バイトのデータDATA1が書き込まれる。すなわち、
図27(b)及び
図27(c)に示すように、データ保持部38及びデータイネーブル保持部39に、ライン番号「0」のアドレス「0x20」から64バイトのデータDATA1が書き込まれる。
【0114】
次いで、バッファ部37へのデータ転送の最終サイクルになると、コマンド受信待ち信号が「1」に設定される。次いで、
図27(e)に示すように、リードポインタRP(ここでは、「0」)が示すアドレスADa(ここでは、「0x20」)と、ライン番号NLが「0」のラインバッファLcに保持されたアドレスADc[7:0](ここでは、「0xE0」)とが比較される。このとき、アドレスADaとアドレスADcとが一致し、さらにリードポインタRPが示す判定結果H2が「0b00」であることから、コマンドキュー32内に後続の連続アドレスの転送要求CRが存在しない。このため、コマンド転送部31は、ライン番号NLが「0」の保持部35のフラグF2を「1」に設定する(ステップS37)。また、ステップS37において、コマンド転送部31は、リードポインタRPが示すバスマスタ番号NBa(ここでは、「1」)とトランザクション番号NTa(ここでは、「0」)とを、応答キュー33に移動する。
【0115】
次に、ライン番号NLが「0」のラインバッファLcにおけるフラグF2が「1」であるため、結合コマンド転送部40は、そのラインバッファLcに保持されたアドレスADc及びサイズScに基づいて、結合後アドレスADd及び結合後サイズSdが生成される。詳述すると、結合コマンド転送部40は、「0」のライン番号NLにおけるアドレスADc[7:0](ここでは、「0x20」)にサイズSc(ここでは、65バイト)を加算して結合後サイズSd(ここでは、96バイト)を生成する。また、結合コマンド転送部40は、結合後アドレスADdにアドレスADc(ここでは、「0x00000020」)を保持した後、その下位8ビットを0値化して結合後アドレスADd(ここでは、「0x00000000」)を生成する。続いて、
図27(f)に示すように、結合コマンド転送部40は、上記算出した結合後アドレスADd及び結合後サイズSdと、「0」のライン番号NLにおける保持部35に保持されたバスマスタ番号NBc(ここでは、「1」)及びトランザクション番号NTc(ここでは、「0」)とをコマンドキュー41に保持する。これにより、任意のバースト長よりも小さいデータサイズ(ここでは、96バイト)であって、任意のバースト長のアライメント単位を開始アドレス(ここでは、「0x00000000」)とするコマンド転送要求CRaがコマンドキュー41に保持される。
【0116】
次いで、結合コマンド転送部40は、コマンドキュー41に保持された結合後アドレスADd(ここでは、「0x00000000」)と結合後サイズSd(ここでは、96バイト)とを有するコマンド転送要求CRaをメモリI/F29に発行する。そして、ライン番号「0」のバッファ部37(データ保持部38及びデータイネーブル保持部39)に保持された結合後のデータDAa及びデータイネーブルENaがメモリI/F29を介してメモリ14に転送される。
【0117】
以上説明したデータ結合部30の動作により、バースト長の短い複数の転送要求CRを結合してバースト長が長く(任意のバースト長と同じ又は任意のバースト長よりも短く)、且つ任意のバースト長のアライメント単位を開始アドレスとする転送要求CRaが生成される。すなわち、任意のバースト長が256バイトである場合には、下位8ビットが「0x00」となるアドレスを開始アドレスとする転送要求CRaが生成される。これにより、メモリ14の使用効率を向上させることができる。この点について以下に詳述する。
【0118】
まず、
図28(a)に示すように、従来のデータ転送方法により、データ「1」〜「7」を転送する場合について説明する。
従来は、バースト長の短い(データサイズの小さい)転送データを転送する場合にも1つの転送要求が発行される。このため、
図28(b)に示すように、バースト長の短いデータ「1」〜「7」に対してそれぞれ転送要求が発行される。さらに、バスマスタから出力されるコマンド転送要求CRのアドレスADは、メモリ14上の任意のアドレスを指定するため、1つのバーストアクセスが複数のバンクや複数のロウアドレスをまたぐことが発生しやすい。例えば、
図28(a)に示した例では、データ「4」を転送するためのバーストアクセスでは、2つのバンク1,2をまたぐことになる。すなわち、データ「4」の一部のデータ「4−1」がバンク1に書き込まれ、データ「4」の残りのデータ「4−2」が別のバンク2に書き込まれる。この場合には、
図28(b)に示すように、データ「4−1」に対して転送要求が発行され、さらにデータ「4−2」に対しても転送要求が発行されることになる。このように、従来のデータ転送方法では、多くの転送要求(コマンド)が発行されるため、その分だけメモリ14のメモリ帯域が圧迫される。
【0119】
これに対し、本例では、
図28(a)及び
図28(c)に示すように、データ「1」とデータ「2」の一部を結合してデータ「(1)」を生成し、それらデータ「1」,「2」に対応する転送要求CRを結合して、データサイズが任意のバースト長であって、且つ任意のバースト長のアライメント単位を開始アドレスとする転送要求「(1)」を生成する。具体的には、転送要求「(1)」の開始アドレスの下位9ビット、つまりメモリ14のカラムアドレスに対応するアドレスは「0x000」となる。続いて、データ「2」の残りの一部とデータ「3」とデータ「4−1」とを結合してデータ「(2)」を生成し、それら3つのデータ「2」,「3」,「4−1」に対応する転送要求CRを結合して、データサイズが任意のバースト長である転送要求「(2)」を生成する。この転送要求「(2)」の開始アドレスの下位9ビットのアドレスは「0x100」となる。次いで、データ「4−2」とデータ「5」とデータ「6」の一部を結合してデータ「(3)」を生成し、それら3つのデータ「4−2」,「5」,「6」に対応する転送要求CRを結合して、データサイズが任意のバースト長となる転送要求「(3)」を生成する。この転送要求「(3)」の開始アドレスの下位9ビットのアドレスは「0x000」となる。そして、データ「6」の残りの一部とデータ「7」とを結合してデータ「(4)」を生成し、それら2つのデータ「6」,「7」に対応する転送要求CRを結合して、データサイズが任意のバースト長よりも小さい転送要求「(4)」を生成する。この転送要求「(4)」の開始アドレスの下位9ビットのアドレス「0x100」となる。
【0120】
以上説明した動作により、バースト長の短い転送要求CRを結合してバースト長の長い転送要求に変換することができるため、
図28(d)に示すように、転送要求の発行を減らすことができる。但し、単に複数の転送要求CRを結合するだけでは、結合前の転送要求CRのアドレスADがメモリ14上の任意のアドレスを指定することに起因して、1つのバーストアクセスが複数のバンクや複数のロウアドレスをまたぎやすいという問題は残る。これに対し、本例で生成される結合後の転送要求CRaでは、任意のバースト長のアライメント単位を開始アドレスとし、データサイズを任意のバースト長以下のサイズとしている。このため、結合前の転送要求CRのアドレスADがメモリ14上の任意のアドレスを指定する場合であっても、1つのバーストアクセスが複数のバンクや複数のロウアドレスをまたぐという問題の発生を好適に抑制できる。これによっても、転送要求の発行を減らすことができる。例えば、
図28(c),(d)に示した例では、従来では8つ必要であった転送要求の発行(
図28(b)参照)を、4つに減らすことができる。これにより、メモリ14のメモリ帯域の使用効率を向上させることができる。
【0121】
以上説明した本実施形態によれば、以下の効果を奏することができる。
(1)複数の転送要求CRを結合し、データサイズが任意のバースト長以下であって、任意のバースト長のアライメント単位を開始アドレスとする転送要求を生成するようにした。これにより、メモリ14のメモリ帯域の使用効率を向上させることができる。
【0122】
(2)ライト調停部28Aでは、優先順位の高いバスマスタが選択される。このため、コマンドキュー32には、優先度の高いバスマスタからの転送要求CRが多数保持される。これにより、優先度の高いバスマスタによる転送要求CRの結合が頻繁に行われることになるため、優先度の高いバスマスタがアクセスする際のメモリ14のメモリ帯域の使用効率を特に向上させることができる。
【0123】
(3)ライト調停部28AとメモリI/F29との間に、バスマスタから出力されるデータDA及びデータイネーブルENを一時的に保持するバッファ部37を設けるようにした。これにより、1つのバッファ部37を複数のバスマスタで共有することができる。このため、バスマスタ毎にデータDA及びデータイネーブルENを一時的に保持するバッファ部を設ける場合に比べて、画像処理装置12における回路規模の増大を抑制できる。
【0124】
(4)結合後の転送要求CRaを特定するトランザクション番号NTを、結合前の転送要求CRに対応付けて保持するようにした。これにより、結合後の転送要求CRaに対するライト完了通知WC1に基づいて、結合前の転送要求CRに対応するライト完了通知WC3をバスマスタに確実に送信することができる。
【0125】
(5)コマンドキュー32,41、応答キュー33,42及び保持部35における各情報を、バスマスタ番号NBと対応付けて保持するようにした。これにより、複数のバスマスタが活性化する場合であっても、複数のバスマスタからの転送要求が並存した状態でそれぞれの転送要求に対する処理を実行することができる。
【0126】
(6)ところで、本例のようにコマンド転送要求CRを発行するコマンド転送バスと、データDA等を転送するデータ転送バスとが分離したバスにおいては、データ転送が1〜32バーストサイクルで転送完了するのに対し、転送要求は基本的に1バーストサイクルで転送が完了する。ここでのバーストサイクル数は、バス幅が8バイトであって、データ転送におけるデータサイズが8〜256バイトの場合のバーストサイクル数である。このため、例えば64バイトのデータ転送の場合には、そのデータ転送の最終バーストサイクル(ステップS24参照)で転送要求CRのコマンドキュー32への蓄積を中断しても(ステップS25)、最終バーストサイクル以外のバーストサイクルで取り込まれた最大で7つの転送要求CRがコマンドキュー32に蓄積されることになる。したがって、コマンドキュー32への転送要求CRの蓄積を中断した場合であっても、コマンドキュー32に蓄積された転送要求CRが少ないことに起因して結合処理が中断されるといった問題の発生を抑制することができる。
【0127】
(他の実施形態)
なお、上記実施形態は、これを適宜変更した以下の態様にて実施することもできる。
・
図29に示すように、保持部35の各ラインバッファLcに、アドレスADcやフラグF1,F2等と併せて、結合開始アドレスADsを保持するようにしてもよい。この結合開始アドレスADsは、結合する複数の転送要求CRにおける最初の転送要求CRに対応するアドレスADの下位8ビットである。例えば、
図9に示した例では、データDATA1〜DATA3に対応する3つの転送要求CRのうち、データDATA1に対応する転送要求CRのアドレスAD(ここでは、「0x00000020」)の下位8ビット(ここでは、「0x20」)が結合開始アドレスADsとしてラインバッファLcに保持される。なお、判定結果H2=0b11によりライン番号NLnを取得した場合には、結合開始アドレスADsとして「0x00」がラインバッファLcに保持される。
【0128】
そして、本変形例において、
図19に示したステップS42,S45における結合後アドレスADd及び結合後サイズSdの算出方法を以下のように変更してもよい。すなわち、フラグF1=1の場合(ステップS42)には、結合後サイズSdを、任意のバースト長(256バイト)から結合開始アドレスADsを減算して算出する。また、結合開始アドレスADsを結合後アドレスADdの下位8ビットに保持し、さらにアドレスADcの上位24ビットを結合後アドレスADdの上位24ビットに保持することにより、結合後アドレスADdを算出する。例えば、第1の具体例(
図20参照)では、「0」のライン番号NLにおける結合後サイズSdが、結合開始アドレスADsが「0x20(32)」となるため、224(=256−32)バイトとなる。また、「0」のライン番号NLにおける結合後アドレスADdは、結合開始アドレスADs(ここでは、「0x20」)とラインバッファLcに保持されたアドレスADc(ここでは、「0x000000E0」)とに基づいて、「0x00000020」となる。
【0129】
一方、フラグF1=0、且つフラグF2=1の場合(ステップS45)には、結合後サイズSdを、(アドレスADc[7:0]+サイズSc[7:0]−結合開始アドレスADs)という式により算出する。また、結合開始アドレスADsを結合後アドレスADdの下位8ビットに保持し、さらにアドレスADcの上位24ビットを結合後アドレスADdの上位24ビットに保持することにより、結合後アドレスADdを算出する。例えば、第1の具体例(
図20参照)では、「1」のライン番号NLにおけるアドレスADc[7:0]、サイズSc[7:0]、結合開始アドレスADsがそれぞれ「0x00」、「32バイト」、「0x00」となるため、「1」のライン番号NLにおける結合後サイズSdが「32バイト」となる。また、「1」のライン番号NLにおける結合後アドレスADdは、結合開始アドレスADs(ここでは、「0x00」)とラインバッファLcに保持されたアドレスADc(ここでは、「0x00000100」)とに基づいて、「0x00000000」となる。
【0130】
換言すると、本変形例では、上記実施形態で生成された結合後の転送要求CRaの開始アドレスを、結合開始アドレスADsに基づくアドレスに変換している。
本変形例の構成によれば、バスマスタから出力される有効なデータではない冗長なデータ(例えば、
図9(b)のデータ保持部38におけるアドレス[7:0]の「0x00」〜「0x1F」に保持された「初期値」)の転送が行われない。これにより、冗長なデータ転送を削減することができるため、メモリ14のメモリ帯域の使用効率をより向上させることができる。
【0131】
・
図30に示すように、
図3に示したデータ結合部30に対して、コマンド選択回路50と、コマンド転送部51と、データ選択回路53とを追加するようにしてもよい。コマンド選択回路50には、ライト調停部28Aからのコマンド転送要求CRと、バスマスタ毎に与えられる結合可否信号SPとが入力される。結合可否信号SPは、転送要求CRの結合(データの結合)が可能か否かを示す信号である。コマンド選択回路50は、結合可否信号SPが転送要求CRの結合が可能であることを示す場合には、受信したコマンド転送要求CRをコマンド転送要求CR1としてコマンド転送部31に出力する。コマンド転送部31に出力されたコマンド転送要求CR1は、上記実施形態と同様に処理される。なお、転送要求CRの結合が可能なバスマスタとしては、例えば、センサI/F21や色処理部22(
図2参照)が挙げられる。一方、コマンド選択回路50は、結合可否信号SPが転送要求CRの結合が不可であることを示す場合には、受信したコマンド転送要求CRをコマンド転送要求CR2として、コマンド転送部31を介さない別の経路に設けられたコマンド転送部51に出力する。すなわち、コマンド選択回路50は、結合可否信号SPに基づいて、コマンド転送部31,51にコマンド転送要求CRを振り分ける。
【0132】
コマンド転送部51は、コマンド転送要求CR2を順次蓄積するコマンドキュー52を有する。コマンドキュー52は、複数(ここでは、h+1)のラインを有している。コマンド転送部51には、転送情報(転送要求元のバスマスタ番号NB等)と、データ転送要求DR2とが入力される。コマンド転送部51は、バスマスタ番号NB及びデータ転送要求DR2に基づいて、コマンドキュー52に保持されたコマンド転送要求CR2を結合コマンド転送部40に出力する。結合コマンド転送部40は、バッファ管理部34に保持された情報に基づいて生成された結合後の転送要求CRaと、コマンド転送部51からのコマンド転送要求CR2とを選択的にコマンドキュー41に保持する。
【0133】
ライト調停部28A内に設けられたライトデータ選択部28Cは、コマンド転送要求CR1に対応するデータDA及びデータイネーブルENをバッファ部37に出力する。これらデータDA及びデータイネーブルENは、上記実施形態と同様に、バッファ部37内において結合される。そして、結合後のデータDAa及びデータイネーブルENaは、バッファ部37からデータ選択回路53に出力される。一方、ライトデータ選択部28Cは、コマンド転送要求CR2に対応するデータDA2及びデータイネーブルEN2を、バッファ部37を介さずにデータ選択回路53に直接出力する。
【0134】
結合コマンド転送部40は、バッファ管理部34及びコマンドキュー52の状態に基づいて、選択信号SSを生成し、その選択信号SSをデータ選択回路53に出力する。データ選択回路53は、選択信号SSに基づいて、結合後のデータDAa及びデータイネーブルENaと、データDA2及びデータイネーブルEN2との何れか一方を選択し、選択したデータ及びデータイネーブルをデータDAb及びデータイネーブルENbとしてメモリI/F29に出力する。
【0135】
本変形例の構成によれば、例えば、結合後のデータDA等が生成できていない期間に、コマンド転送部31によるバッファ部37へのデータ転送処理と並行して、非結合のデータDA2及びデータイネーブルEN2をメモリI/F29を介してメモリ14に転送することができる。
【0136】
なお、本変形例において、コマンド転送部31は第1コマンド転送部の一例、コマンド転送部51は第2コマンド転送部の一例、コマンドキュー52は第3コマンドキューの一例である。
【0137】
・上記実施形態におけるコマンドキュー32,41、応答キュー33,42、保持部35及びバッファ部37(データ保持部38及びデータイネーブル保持部39)のライン数は特に限定されない。なお、これらコマンドキュー32,41、応答キュー33,42、保持部35及びバッファ部37(データ保持部38及びデータイネーブル保持部39)のライン数は、シミュレーション等によって予め最適化した数に設定することが好ましい。