以下、本発明の実施の形態について、図面を参照して詳細に説明する。
本発明の実施例1に係るメモリ制御装置について説明する。本実施の形態は、図1を用いて、計算機システムで広く使われているSDRAMを適応した例で説明する。
図1において、11から16は任意の制御装置であるマスター、21はマスターのアクセスをアドレスを参照して均一に分離しアクセスの衝突があれば調停を行うバスマトリクス、31から38はデータを一時蓄えるキャッシュ、41はキャッシュ31から38のアクセスをSDRAMターゲットごとにアドレスを参照して分離する分離装置、51と52は複数のメモリアクセスの要求からSDRAMに最適なアクセスを選び出すアクセス制御装置、61と62はそれぞれSDRAMである。ここで1は、バスマトリクス21、キャッシュ31から38、分離装置41、アクセス制御装置51と52、からなる本発明のメモリ制御装置である。
バスマトリクス21は、マスター11から16の6つのアクセスを、キャッシュ31から38への8つアクセスに接続する。図2はこの接続を示したものである。図2において、211から218は同一キャッシュへアクセスするアクセスを集め、1つのアクセスを選択する調停装置である。説明の簡単のため、マスター11から16のそれぞれと、調停装置211との接続だけを示している。実際は、調停装置212から218も同様にマスター11から16のそれぞれに接続する。なお、調停装置211から218は全く同じ構造のものである。
調停装置211から218のそれぞれには、選択装置が組み込まれている。ここも説明の簡単のため、調停装置211内の2111の選択装置だけを示している。選択装置2111はセレクタ信号により、キャッシュ31に対応するアクセスだけを抽出するフィルタの働きをする。
セレクタ信号はキャッシュ31から38を選択する番号であり、調整装置211から218それぞれの順番に等しい。例えば、調整装置211は0、調整装置212は1、調整装置218は7といった具合である。このセレクタ信号と、マスターのアドレス信号を比較することで、選択装置221のフィルタが実施される。アドレス信号の参照ビットは予め指定しておいてもよいし、レジスタ等で指示してもよい。
例えば、バイト単位でアクセスするアドレス信号が32ビットあるものとする。下位6,5,4ビット目が参照ビットになるよう予め指定しておくと、アドレス0〜15までのアクセスは下位6,5,4ビット目が全て0なので、選択装置231のセレクタ信号の0と一致し通過する。アドレス16〜127までのアクセスは下位6,5,4ビット目が全て0でないので遮断する。アドレス128〜143はアドレス0〜15の場合の動作と同じく通過、アドレス144〜255はアドレス16〜127の場合の動作と同じく遮断、以下この繰り返しである。
調停装置212から218はセレクタ信号が1から7になるだけで、それぞれ下位6,5,4ビット目を参照し、同様のフィルタ処理を行う。
アドレスの参照ビットは、LSB(Least Significant Bit)方向にすると、キャッシュ31から38に細かい単位で振り分けることになる。逆に、MSB(Most Significant Bit)方向にすると、キャッシュ31から38に粗い単位で振り分けることになる。例えば、画像データは連続したアドレス領域に格納することが多いが、前者だと小さい単位でキャッシュ31から38にアクセスを配分することになる。後者だと、全てもしくは大きな単位で特定のキャッシュにアクセスを行うことになる。これらは、実施例3の説明でさらに詳細な説明を行う。
選択装置2111を通過したアクセスは、最大、マスターの数だけ存在する。これらを均一に処理するため、ラウンドロビン形式で調停するものとする。ラウンドロビン形式は、例えば、マスターの番号を指定するポインタを持ち、競合時はそのポインタが指し示す最も近くのマスターを選択するものである。ポインタはアクセスが成功するとそのマスターもしくはそのマスター+1のポインタを指し、マスターの数を超える数字になるとマスターの数を減算する。即ちポインタは巡回する。このような方式をとると、競合アクセスで選ばれなかったアクセスは保留され、次のタイミングで同様の調停を受け、ポインタが一巡するまでには必ずアクセスが実施される。
なお、調停の形式は、ランダムな数字を発生させ、それをポインタにするものや、マスター番号の昇順もしくは降順で画一的に選択するものなどさまざまなものがある。しかしながら、調停の形式によって本発明の本質が何ら変わることはない。
調停装置212から218は、それぞれキャッシュ31から38に対応しており、同時に動作できる。このことから、マスター11から16のそれぞれは、同じキャッシュに対する競合が生じなければ、同時にキャッシュにアクセスすることが可能である。これは、キャッシュ31から38は同時に活性化できることを意味する。
競合は常に生じるものではないが、生じた場合はアクセス時間(レイテンシ)が延びて、アクセス性能が劣化する。図3に、8個のマスターと8個のキャッシュに対応するモデルを用いて、読み出しのランダムアクセスを実施した場合のレイテンシの分布を示す。横軸がレイテンシを示し、縦軸が分布P(%)を示す。また、棒グラフ(実線)はシミュレーション値、点線は理論値である。
次に、マスターのアクセス密度を半分、例えば、2サイクルに1回の割合のアクセスに変更した場合を図4に示す。
マスターがアクセスを行いデータが戻ってくるまでには、いくつかのフリップフロップで構成されるパイプライン遅延が加算される。図3と図4において、レイテンシが9から始まるのは、このモデルにおいて競合がなくてもこの遅延が生じるためである。遅延は、計算機システム上必ず生じるものであり、動作周波数や構成によってその値は異なる。
図3と図4の分布P(%)の統計上の理論値は、上記の初期レイテンシを引いた相対レイテンシx、1サイクルあたりのアクセス密度ρを用いて次のように計算できる。ここで、exp()はネイピアeの指数関数である。
P(x)=100・exp(−ρ)・(1−exp(−ρ))^x.
図3と図4において、レイテンシxとレイテンシの分布Pを掛け積分すると、レイテンシの期待値が算出できる。図3のマスターが常にアクセスする状態(ρ=1)で10、図4のマスターが1/2の割合でアクセスする状態(ρ=0.5)で9.5となる。このことから分かるように、それぞれ初期レイテンシ9に比べ大きく性能劣化は生じていない。なお、実施例1の場合はマスター数が6であるから、マスター11から16が全てアクセスする状態なら、ρの最大は6/8である。
通常の計算機システムにおいて、全てのマスターが常にアクセスを行う機会は少なく、実際のρは1より小さくなる。即ち、レイテンシ増加は、ρ=1の場合の1より小さくなる。このように、バスマトリクス21の構成は、マスターが全てのキャッシュにアクセスできることに加え、最大、キャッシュのアクセス性能xキャッシュの実装数8の性能(論理帯域)まで発揮させることができる。
バスマトリクス21で振り分けられたアクセスは、キャッシュ31から38のそれぞれに接続する。それぞれのキャッシュの動作は、一般的な計算機で使用するキャッシュに相当する。
キャッシュ31から38は、SDRAM61とSDRAM62のバンク数に対応して8個ある。図5を用いて説明する。図5において、631から638はそれぞれSDRAM内の8つに分けられたDRAMバンク、641はSDRAM全体の制御とDRAMバンク631から638へのアクセスの分離を行うSDRAM制御装置である。説明の簡単のため、キャッシュ31から38のそれぞれと、SDRAM61との接続だけを示している。
図5に示すように、キャッシュ31とDRAMバンク631、キャッシュ32とDRAMバンク632というように、データの格納は1対1に対応する。従って、アクセス制御装置51とSDRAM制御装置641が多重化と逆多重化を行うことになる。分離装置41に関しては後述する。
SDRAM制御装置641は、DRAMバンク631から638のそれぞれに対し、DRAMの特徴である活性化(Activate)、データのアクセス、非活性化(Pre-Charge)を順に実施する。データのアクセス期間だけが、実際のデータの読み書きに使用される。
図9を用いて簡単に説明する。図9において、横軸が時間、縦軸がSDRAM制御装置641および8個のDRAMバンク631から638における作業の様子を示す。SDRAM制御装置641の作業は、読み出しデータのアクセス期間だけを実線で示している。8個のDRAMバンク631から638の作業は、Activate、Pre-Chargeを点線で、読み出しデータのアクセス期間を実線で示している。
SDRAMにとって最も最適な制御は、最大性能を得るため、物理的に接続されたデータ端子を常にデータの送受信のために使うことである。即ち、図9のSDRAM制御装置641の実線に隙間がなければいいことになる。キャッシュ31から38のアクセスの基本単位は従来のメモリ制御装置の説明で示したように、SDRAMのページ長より短くなることから、それぞれのDRAMバンクの読み出しデータのアクセス期間を、図8のようにバンクを細かく切り替えながら隙間なく並べる制御を行わなければいけない。
ただし、それぞれのDRAMバンクのActivateとPre-Chargeがデータのアクセス期間の前後に必要なことから、一度使用したDRAMバンクは直ぐには使用できない。例えば図7において、DRAMバンク631が1−2のタイミングでデータをアクセスしたとすると、続くPre-Chargeのタイミング1−3では、次のActivateのタイミング2−1を重ねることができない。また、Activateのタイミング1−1、2−1分の遅延を考慮して実際のデータアクセスを行う必要がある。
本実施例では、DRAMバンク631から638に対応するそれぞれのキャッシュは、同時にアクセス要求を行う。これは、複数のマスターが同時にまた均等にアクセスを振り分けているためである。そこで、アクセス制御装置51は、各タイミングの重ね合わせに最適なDRAMバンクを選び、それに対応するキャッシュのアクセスをSDRAM61に渡す。
アクセス制御装置51の制御は、図9の各期間をテーブルで管理する。例えば、Activate、データのアクセス、Pre-Chargeの各期間を時間パラメータとして予め与え、アクセスが生じるたびにDRAMバンク631から638ごとに用意した予約テーブルに記録してゆく。
アクセス制御装置51は予約テーブルを見て、予約されていないDRAMバンクを選び出し、それに対するキャッシュアクセスを選択するとともに、予約テーブルに予約開始を指示する。予約テーブルは予約開始が指示されると、該当するDRAMバンク用のカウンタにそれぞれの時間パラメータの合計をセットする。そして時間が経つごとに、それらのカウンタをデクリメントする。このカウンタが非0を示すDRAMバンクが予約されているとみなされる。
ただし、SDRAMは同じDRAMバンクアクセスでも、SDRAMのページ長内であればActivate作業は不要なため、例え予約されていても、直前の履歴を見てアクセスを許可する。図9において、8−2に続く8−3がそれを示している。
また、アクセス制御装置51は、データのアクセス期間に該当するデータの読み書きを行うように、予約テーブルを参照してデータのアクセスタイミングを割り出す。具体的には、Pre-Charge期間<カウンタの値<Pre-Charge期間+データのアクセス期間の真偽で判断する。
なお、読み出しに続く書き込み、もしくは書き込みに続く読み出しは、端子の入出力の切り替えが発生し、電気的な特性を考慮して通常1サイクル程度遅延させる必要がある。これを避けるため、読み出しもしくは書き込みが連続になるように制御してもよい。
図10は、アクセス制御装置51において、SDRAM61にアクセスできるキャッシュアクセスの選別に関するフローチャートを示している。アクセス制御装置51は、キャッシュ31から38についてこの検査を行い、最後に残ったものを調停して実際にSDRAM61にアクセスする。
調停に関しては、キャッシュ31から38それぞれに関係なく均一なアクセスを行うため、調停装置212から218で実施したようにラウンドロビンによる巡回型の調停を行うものとする。前述したように、調停の形式は変更してもよい。例えば、同一のキャッシュがSDRAMのページ内に連続してアクセスする場合がある。このとき他のキャッシュはアクセスができないため、マスターから見て偏ったレイテンシが生じる。これを防ぐため、同一キャッシュの連続アクセス数の上限を定め、上限を超える場合は調停の優先度を下げるなどが考えられる。
図7に示したように、キャッシュ31から38と、DRAMバンク631から638はそれぞれ1対1で関連付けられている。しかしマスター数が増えた場合、キャッシュも増やし論理帯域を上げたい場合がある。
SDRAMのDRAMバンク数は4個や8個など既に決定していることが多い。従って、キャッシュを増やす場合は、DRAMバンクの数よりキャッシュの数が多くなる場合がある。このような場合は、DRAMバンクの数の整数倍の数でキャッシュを構成する。図6を用いて説明する。
図6は図5からキャッシュの数を2倍に増やしたものである。ここで、31aから38aと31bから38bは単に同じキャッシュをコピーしたもので(ただしキャッシュ容量はキャッシュ31から38のものと異なってもよい)、31cはキャッシュ31a、31bのアクセスを調停する調停装置である。32cから38cも同様の調停装置である。
調停に関しては、アクセス制御装置51と同じあり。即ち、キャッシュそれぞれに関係なく均一なアクセスを行うため、調停装置222から228で実施したようにラウンドロビンによる巡回型の調停を行うものとする。前述したように、調停の形式は変更してもよい。
図6から分かるように、アクセス制御装置51から見て、キャッシュ31aと31bおよび調整装置31cは、キャッシュ31と等価である。従って、SDRAMのDRAMバンクを最適制御する上で、アクセス制御装置51は特別なことをしなくてよい。その他のキャッシュ32aから38a、キャッシュ32bから38bも同様である。
以上のように、キャッシュの数を増やしても、SDRAM61、62を変えることなくマスターから見た論理帯域を増やすとともに、SDRAMの最適制御を行うことが可能である。キャッシュの数が2倍の場合以外も同様である。
逆に、マスター数が減る場合、キャッシュも減らしコストを削減したい場合がある。
上述したように、SDRAMのDRAMバンク数は変えないこととする。従って、キャッシュを減らす場合は、DRAMバンクの数よりキャッシュの数が少なくなる。このような場合は、DRAMバンクの数の1/2、1/4と2の累乗分の1のキャッシュの数で構成する。図7を用いて説明する。
図7は図5からキャッシュの数を1/2に減らしたものである。ここでは、キャッシュ32、34、36、38を間引く。また、間引いたキャッシュのアクセス分は、隣合うキャッシュ31、33、35、37のアクセスを分離装置41に入れる。ただし、元のキャッシュ31、33、35、37のアクセスと、キャッシュ32、34、36、38の代わりに入れるアクセスは、アドレスのいずれかのビットでアクセスを排他的にマスクする。例えば、アドレスのLSBが0だとキャッシュ31、33、35、37分のアクセスだけ、LSBが1だとキャッシュ32、34、36、38分のアクセスだけなど、奇数偶数でアクセスを分ける。
図7から分かるように、アクセス制御装置51から見て間引かれたキャッシュ32のアクセスは、キャッシュ31のアクセスが兼ねる。しかし、前述したアクセスのマスクを行っているため、同時にアクセスすることはない。従って、SDRAMのDRAMバンク631か632かのいずれかしか選択しない。その他のキャッシュも同様である。
従って、キャッシュが8個だった場合に比べると、アクセスを選ぶ際の選択肢が少なくなるため、DRAMバンクのSDRAMの最適な制御はできない。このため、キャッシュの数を減らしてコストを削減するよりも、キャッシュ容量を減らしてコストを削減する方がよい。例えば、キャッシュ容量が32KBytex8個であれば、32KBytex4個にするより16KBytex8個にする方がよい。ただし、これに限定するものではない。
次に、SDRAM61のDRAMバンクの数が4個に減った場合について述べる。これは比例の関係から、キャッシュの数が16個、DRAMバンクの数が8個の場合と同じ特徴になる。また、キャッシュの数を4個に減らせば、同じく比例の関係から、キャッシュの数が8個、DRAMバンクの数が8個の場合と同じ特徴になる。
一方、キャッシュの数が8個のまま、同じSDRAMを2個用いて見かけ上のDRAMバンクを増やし、キャッシュの数とDRAMバンクの数を一致させる方法がある。図8を用いて説明する。
図8は図5からSDRAM61が2個になり(2つのSet)、それぞれのDRAMバンクの数が4個に減ったものである。ここで、61aと61bはDRAMバンクの数が4個のSDRAM、641aと641bはそれぞれSDRAM61aと61bのSDRAM制御装置である。
図8から見て分かるように、キャッシュ31から38、分離装置41、アクセス制御装置51は基本的に何ら変わらない。SDRAMは2個になったが、図9に示す制御は同じである。ただし、アクセス制御装置51は、SDRAM61aと61bを分けて使用するため、別々のチップセレクトを用意しなければならない。チップセレクトはアドレスに関連付けられたDRAMバンクの番号で簡単に生成できる。例えば、DRAMバンク番号0〜3はSDRAM61aのチップセレクト、DRAMバンク番号4〜7はDRAM61bのチップセレクトといった具合である。
なお、キャッシュ31から38のアドレス情報は排他的であり、バスマトリクス21で振り分けに使用したビット部分がバンク情報を表す。例えば、キャッシュ31の該当ビットは0、キャッシュ32の該当ビットは1になっており、そのままDRAMバンク番号に相当する。
以上のことから、キャッシュの数とSDRAMのDRAMバンクの数、およびSDRAMの数の3つのパラメータで、システムの性能を調整することができる。これは、システムを決定する上で非常に柔軟な選択ができることを意味する。
なお、図6において、キャッシュを31aから38aだけの8個にし、特別なマスターを用意しそのアクセスを選択装置2111と同等の働きをするものにより8つのアクセスに振り分け、キャッシュを31bから38bの代わりにすることも可能である。これは、特別なマスターがキャッシュをバイパスし、SDRAMに直接アクセスする場合に使用する。例えば、CPUなどの既にキャッシュを持っているマスターに応用できる。
一方、SDRAMの数を増やす異なる方法として、分離装置41を利用する場合を説明する。
図1において、分離装置41はキャッシュ31から38の特定のアドレスビットを参照して、アクセス制御装置51と52に振り分ける(2つのGroup)。この動作は図2の選択装置231と同じく、セレクタ信号を予め与えておき、特定のアドレスのビットと比較し振り分けを実施するものである。
アドレスの参照ビットは、LSB方向にすると、SDRAM61と62に細かい単位で振り分けることになる。逆に、MSB方向にすると、SDRAM61と62に粗い単位で振り分けることになる。これは調停装置211から218の説明と同様である。
図8で示したSDRAMを2個使うもの(2つのSet)と違うのは、キャッシュ31から38が、SDRAM61とSDRAM62に対して同時にアクセスできることである。例えば、キャッシュ31がアクセス制御装置51を通ってSDRAM61にアクセスし、キャッシュ32がアクセス制御装置52を通ってSDRAM62にアクセスすることができる。
このように、分離装置41の構成は、SDRAMのアクセス性能xSDRAMの数2個の性能(物理帯域)まで発揮させることができる。なお、分離装置41において、アドレスにより振り分けるのではなく、キャッシュの番号を用いて排他的に振り分けてもよい。
しかしながら、アクセス制御装置51と52は、それぞれのSDRAMだけを管理するため、相互の状態は分からない。このため、同一キャッシュにおいて、異なるSDRAMに対するアクセスが近づくと、例えば読み出しのデータがSDRAM61のものとSDRAM62のものが重なってしまうなどの問題がある。分離装置41はこれを解消するため、同一キャッシュで前回アクセスしたSDRAMと異なるSDRAMをアクセスする場合、アクセス禁止期間を自動的に挿入する。
図11を用いて説明する。図11において、横軸が時間、縦軸が分離装置41およびSDRAM61と62における作業の様子を示す。説明の簡単のため、アクセス制御装置51と52の動作は割愛している。また、SDRAM61と62の作業は、読み出しデータのアクセス期間だけをそれぞれ実線と点線で示している。分離装置41の作業としてアクセスの発行タイミングを黒丸で、データの受け取り期間を実線と点線で示している。
図11に示したように、分離装置41は前回と異なるSDRAMにアクセスを行う場合、予め決められたCYCサイクル分の期間をアクセス禁止にする(CYC期間内に黒丸を存在させない)。この禁止期間を作ることにより、SDRAM61と62から読み出されるデータは重複しない。CYCサイクルは実際のデータのアクセス期間とアクセス開始までの遅延時間を加えたものである。
もちろん分離装置41は、同一SDRAMへのアクセスが続けば、これらの禁止期間は設けない。また、異なるキャッシュが異なるSDRAMを前回アクセスしていても、禁止期間は設けない。これは、キャッシュとしてバスが分離されているため、重複することがないからである。
さらに、特性の異なるSDRAMを実装することも可能である。例えば、SDRAM62のアクセスタイムがDelta分だけ遅くなったと仮定する。この場合、図12に示したように、遅いSDRAMから速いSDRAMにアクセスする場合にのみ、CYCにDeltaを加えたものをアクセス禁止期間とする。即ち、前回アクセスしたSDRAMのアクセス期間、跨ぐアクセスを禁止することになる。これにより、遅いSDRAMのアクセスのタイミングに合わせてアクセスを調整することができる。
Deltaは予め与えておくか、レジスタ等で指定する。SDRAMごとに異なるCYCサイクルを与えて、自動的に差分を計算してもよい。また、SDRAMの使用するバス幅が異なると、データを多重化したり逆多重化したりして、キャッシュ31から38のバス幅に合わせなければならないが、アクセス制御装置51と52でそれらを行い、アクセスタイムの違いだけにしておけば、前述した対応だけで済む。
以上説明したように、分離装置41は複数のSDRAMへアクセスを分配し物理帯域を拡大するとともに、異なる特性のSDRAMの実装も可能とする。これらは、キャッシュの数やマスターの数に関係がなく、システム要件により自在に変更できる。
なお、実施例ではSDRAMの数を2個として説明したが、それ以上であっても分離装置41の分岐が増えるだけで問題はない。
また、図8で説明したSDRAMを複数使う方法と、図1で説明したSDRAMを複数使う方法は組み合わせてもよい(任意のSetと任意のGroup)。組み合わせることによって、物理帯域の拡大とSDRAMのアクセス効率の向上がともに図れる。
さらに、SDRAMの代わりにRDRAMやFLASHメモリなど、バンク構造を採用しているメモリにも応用できる。
本発明の実施例2に係るメモリ制御装置について説明する。本実施の形態は、実施例1を参照しながら説明する。
マスター11から16のアクセスは、バスマトリクス21によって所望のキャッシュ31から38に到達するが、到達時刻はバスマトリクス21の調停次第であり保証できない。例えば、マスター11がキャッシュ31とキャッシュ32に続けてアクセスする場合、キャッシュ31にアクセスが到達する時刻と、キャッシュ32にアクセスが到達する時刻には揺らぎが生じる。このため、アクセスの前後が入れ替わる可能性がある。
アクセスの前後が入れ替わると、マスターのデータ管理もそれに合わせて入れ替えなければならない。例えば、マスター11がアドレスAをキャッシュ31に要求しデータXが返るとする。一方、アドレスBをキャッシュ32に要求しデータYが返るとする。この場合、X,Yの順でなく、Y,Xの順でデータが返ることがある。このデータの入れ替わり情報をマスターに返すことで、マスターはデータの処理の順番を入れ替えなけねばならない(Out-of-Order制御)。
これらは、マスターの作り方にも依存するため、対応できないマスターであれば接続できない。本実施例では、内部で順序を整えてこれを解消する、In-Order制御について図13を用いて説明する。
図13において、71から76はそれぞれマスター11から16に対応するインターフェイス装置である。インターフェイス装置71から76は、マスター11から16とバスマトリクス21間のブリッジとなる。インターフェイス装置71から76は同じ構造で同じ動作を行うため、インターフェイス装置71だけ詳細に説明する。
インターフェイス装置71は、711のバースト分解装置、712の書き込みバッファ、713の読み出しバッファからなる。
バースト分解装置711は、マスター11がバーストアクセスを行う場合、それらを最小のアクセス単位であるワードに分解する。分解することで、これ以降のキャッシュなどの装置は、バーストを考慮する必要がなくなり、ワード単位の制御に簡単化できる。また、バースト単位で処理を行うと、個々のマスターに対するレイテンシが積算してしまうが、ワードに分解することで、レイテンシも平均化できる。
例えば、マスター全てが16ワードのバーストアクセスをする場合、実際のデータをアクセスできるタイミングは、最悪で調停1巡分の16ワードx6マスター=96サイクルになる。一方、ワードに分解していると、調停1巡分は1ワードx6マスター=6サイクルで済む。もちろん、全体的に遅延が平均化するだけで、スループット性能が変わるわけではない。
バスマトリクス21は調停を行う際、ユニークな数字のタグを生成する。タグは例えば、マスターの番号とアクセスした順番もしくは時刻などを組み合わせて生成する。
マスター11が書き込みアクセスを行うと、タグを生成しバッファ712に伝える。一方バッファ712は、マスター11からの書き込みデータを蓄積しておく。蓄積可能なことから、マスター11が書き込みで待たされることはバッファ712が満杯でない限りない。
タグは書き込み順を情報として持っているため、バッファ712に対しそれを用いて、該当するデータを引き出す。引き出されたデータは、調停後のアクセス順に従いキャッシュ31に書き込まれる。このように、マスター11はバッファ712に対してIn-Order制御、バッファ712はキャッシュ31に対してOut-of-Order制御となる。
マスター11が読み出しアクセスを行うと、同様にタグを生成しキャッシュ31に伝える。キャッシュ31はデータを返すまでタグを保存し、最終的にデータとタグをセットにしてバッファ713に返す。
バッファ713はマスター11が期待するアクセス順のデータが返ってくるかをタグによりチェックしており、有効なタグが返ってくればそのままマスター11に返す。また、無効なタグが帰ってくれば蓄積しておく。もちろん、蓄積したデータでマスター11へ返せるものがあれば、その蓄積したデータを返す。このように、マスター11はバッファ713に対してIn-Order制御、バッファ713はキャッシュ31に対してOut-of-Order制御となる。
以上は、マスター11以外のマスター、キャッシュ31以外のキャッシュも同様である。このように、マスターはIn-Orderで処理することが可能で、本実施例のメモリ制御装置はOut-of-Orderで最適なアクセス順を選び処理することが可能である。
次に、バスマトリクス21の調停方式について詳しく説明する。
ここで、マスター11から16のアクセスは特に同期しておらず、任意にアクセスできるものとする。例えば、マスター11は時間内に画像の一定量を処理し外部に出力するものとし、マスター12は時間制約なく別の画像を初期化するものとする。
マスター11とマスター12は共にアクセス要求を常に出せるものとし、SDRAM61に対するアクセスのみを行うものとする。また、マスターそれぞれの論理帯域と、アクセス制御装置51とSDRAM61間の物理帯域とは等しいものとする。
この例では、マスター11とマスター12はSDRAM61をターゲットにアクセスを行うため、キャッシュ31から38にデータが常にない状態(キャッシュミス)だと、アクセス制御装置51とSDRAM61間の物理帯域がボトルネックになる。従って、マスター2個の論理帯域は、SDRAMの物理帯域を分け合うことになる。
ここで、実施例1で示したように、調停装置211から218がラウンドロビン形式でアクセスを調停すると、マスター11とマスター12のアクセスは交互に受け付けられることになる。これは、マスター11にとって論理帯域の最大近くの作業が必要になると、時間内に処理できなくなるといった不都合が生じる。
このため、調停装置211から218は優先度制御を行うようにする。図14を用いて、調停装置211に対する優先度制御を説明する。調停装置212から218は同じ構造なので説明を割愛する。
図14において、2112から2115は優先度選択装置、2116から2119はラウンドロビン調停装置、2120は優先調停装置である。また、マスター11から16は、任意のタイミングで優先度Priorityを2ビットで指示するものとする。優先度Priorityは、数字が大きいほど優先度が高いことを示す。
実施例1で説明したように、選択装置2111はキャッシュ31から38それぞれに対するアクセスを選択する。図14では簡単のため、キャッシュ31に対する選択だけを記載している。選択装置2111でマスターごとにキャッシュ31に対するアクセスを抽出した後、それらは全て優先度選択装置2112から2115に入力する。
優先度選択装置2112は優先度Priorityが0のものだけを、優先度選択装置2113は優先度Priorityが1のものだけを、優先度選択装置2114は優先度Priorityが2のものだけを、優先度選択装置2115は優先度Priorityが3のものだけを抽出する。その抽出結果は、ラウンドロビン調停装置2116から2119にそれぞれ入力する。
ラウンドロビン調停装置2116から2119は、実施例1で説明した調停装置211の役割を装置として置き換えたもので、全て同じ動作を行う。
優先調停装置2120は、ラウンドロビン調停装置2116から2119の結果から、キャッシュ31への最終的なアクセスを選択する。選択にあたっては、ラウンドロビン調停装置2116<ラウンドロビン調停装置2117<ラウンドロビン調停装置2118<ラウンドロビン調停装置2119の順で優先的に決定する。例えば、ラウンドロビン調停装置2119にアクセスがあれば(ない場合は優先度Priorityが3を指示したマスターが存在しない)、他のラウンドロビン調停装置の結果に関係なくそれを最終的なアクセスとする。
以上のことから、マスターが急を要するアクセスには、高い優先度Priorityを指示することにより、帯域を優先的に割り当てることができる。例えば、マスター11は時間内に処理するため、高い優先度Priorityを指示しておく。次に、マスター12は時間制約がないため、低い優先度Priorityを指示しておく。このようにすれば、競合してもマスター11が優先的にアクセスできることになり、マスター11に与えられた制約を満たすことができる。
さらに、優先度Priorityを動的に制御すれば、マスターごとに任意の帯域を与える制御が可能である。以下、詳細に説明する。
例えば、実現可能な目標帯域をそれぞれのマスターで設定する。それぞれのマスターにおいて、アクセス要求が受け付けられればアクセス分を加算、そうでない場合は1サイクルごともしくはシステムのタイマーを使用して一定間隔ごとに目標帯域分を減算する差分カウンターを備える。
このカウンターの値の範囲を3レベル設定しておき、それにより優先度Priorityに+1、±0、−1を加え修正する。なお、優先度Priorityは、アクセスそのものに直接影響しないので任意のタイミングで制御する。
また、一定の条件で制御させるため、それぞれのマスターのベースとなる優先度Priorityを、1もしくは2のいずれかに定めておく。
この手法は、安定的なフィードバック制御となり、使用帯域を目標帯域に収束させる。図15に、8個のマスターと8個のキャッシュで構成される本実施例のメモリ制御装置をモデル化し、ランダムなアドレスとバースト長4でシミュレーションした波形を示す。ここで、Diff Countは上述した差分カウンター、Priorityは上述した優先度Priorityの修正分、Allocationはマスターのアクセス要求が受け付けられた瞬間を示す(バースト長4なので、データの数はこれに4を掛けたものになる)。また、これらの添え字はマスターの番号であり、横軸はシミュレーション時間の一部である。マスター0と1は1/16、マスター2と3は1/8、マスター4と5は1/4、マスター6は15/16、マスター7は1/1の相対的な目標帯域を設定してある。
図15のAllocationから分かるように、目標帯域を多く設定したマスターのアクセスが相対的に多く受け付けられているのが分かる。また、マスターの帯域取得状況が分かるDiff Countを見ると、目標帯域を低く設定したマスターは十分な帯域を取得しているためPriorityが小さくなっており、逆に目標帯域を高く設定したマスターは取得帯域が目標帯域の前後で振れいているためPriorityも振られている。
以上のように、優先度Priorityを設定し、それに応じてキャッシュへアクセスを配分することで、帯域制御が可能な柔軟性の高いメモリ制御装置が提供できる。
なお、優先度Priorityは2ビットで説明したが、さらにビット数を上げ粒度を増やしてもよいし、逆にビット数を下げ粗く制御してもよい。また、目標帯域に対する制御をマスターでなく、本実施例のメモリ制御装置で実施してもよい。
さらに、本実施例の調停装置を外部に複製し、マスター数を増やしてもよい。例えば、マスター11の代わりに6個のマスターを調停する調停装置を取り付ければ、さらに6個のマスターが拡張できる(残り5個+6個の合計11個)。ただし、拡張した調停装置でアクセスが束ねられるので、拡張した複数のマスターはキャッシュに対して同時アクセスできない。
本発明の実施例3に係るメモリ制御装置について説明する。本実施の形態は、実施例1を参照しながら説明する。
選択装置2111におけるキャッシュ11から38へのアクセスの分配(バンク分け)、分離装置41におけるSDRAM61と62へのアクセスの分配(Group分け)、アクセス制御装置51におけるSDRAM61aと61bへのアクセスの分配(Set分け)のそれぞれについて説明する。
選択装置2111と分離装置41、およびアクセス制御装置51にはアドレスの参照ビットをレジスタで与えることとする。調停装置212から218内の分離装置、およびアクセス制御装置52も同様である。レジスタで与えることにより、アドレスによりどのSDRAMおよびどのDRAMバンクにデータを格納するかのマッピングが任意に指定できる。
図16は、SDRAM61に代わり61aと61bのSDRAMに、SDRAM62に代わり62aと62bのSDRAMに、それぞれ2個づつ置き換えた構成図である。SDRAM61aと61bはGroup番号0でSet番号がそれぞれ0と1、SDRAM62aと62bはGroup番号1でSet番号がそれぞれ0と1とする。
図17は、アドレス4,5,6ビット目をバンク分けとして参照するよう選択装置2111およびその他調整装置内の選択装置に指示し、次にアドレス12ビット目をGroup分けとして参照するよう分離装置41に指示し、最後にアドレス13ビット目をSet分けとして参照するようアクセス制御装置51と52に指示した場合のメモリマッピングである。図17の、B0、B1、B2はバンク分けのビット、GrpはGroup分けのビット、SetはSet分けのビットである。
図17に示したメモリマッピングは、データを16ByteごとにそれぞれのSDRAMのDRAMバンクへ、4KByteごとに異なるグループのSDRAMへ、8KByteごとに異なるセットのSDRAMへ分配する例である。この例では、データは細かく分断してSDRAMに格納される。分断するとアクセスが平均化するため、複数のキャッシュと複数のSDRAMが同時に動作することが多くなり、メモリ性能を引き出しやすい。
図18は、アドレス9,10,11ビット目をバンク分けとして参照するよう選択装置2111およびその他調整装置内の選択装置に指示し、次にアドレス31ビット目をGroup分けとして参照するよう分離装置41に指示し、最後にアドレス30ビット目をSet分けとして参照するようアクセス制御装置51と52に指示した場合のメモリマッピングである。図18の、B0、B1、B2はバンク分けのビット、GrpはGroup分けのビット、SetはSet分けのビットである。
図18に示したメモリマッピングは、データを512ByteごとにそれぞれのSDRAMのDRAMバンクへ、2GByteごとに異なるGroupのSDRAMへ、1GByteごとに異なるSetのSDRAMへ分配する例である。この例では、データは固まってSDRAMに格納される。固まるとアクセスが局所化するため、4個のSDRAMが同時に動作することが少なくなり、消費電力を抑えやすい。
以上のように、アドレスの任意の位置のビットを参照させることで、アクセスを任意の空間に分配することができる。なお、アドレスのビット参照位置はバラバラであっても、前後が入れ替わっても問題ない。
前述した分配の全ては排他的である。例えば、選択装置2111で分配されるアクセスのアドレスは、完全に排他的であることから、キャッシュ内の管理も排他的である。これらは、異なるSDRAMおよびSDRAM内のDRAMバンクにも当てはまる。
データが排他的に管理されているため、キャッシュとSDRAMの一貫性(コヒーレンス)は保証される。ただし、マスター11から16のアクセスが、調停装置211から218で調停されるまでの順序は守らなければならない。これは、前述した同一マスターのデータに関するIn-Order制御、Out-of-Order制御とは異なる。
例えば、マスター11がアドレスAに書き込みを行い、マスター12がアドレスAを読み出す場合、調停装置211から218のいずれかに到達する順序さえ守られれば、キャッシュ31から38のいずれかでは順序通り処理をするので不整合は生じない。しかし、調停装置211から218のいずれかに到達する順序が入れ替わると、マスター12の読み出しが先行して誤ったデータを返してしまう。
調停装置211から218のいずれかに到達する順序を守る方法を説明する。マスター11から16の書き込みアドレスを、図13のインターフェイス装置71から76のそれぞれに登録しておき、その書き込みアドレスが調停装置に到達すれば登録を抹消するようにする。登録されているアドレスは、各マスターごとに用意されたインターフェイス装置71から76全てから相互参照できるようにする。
任意のマスターが読み出しもしくは書き込みを行う際、自らを除き、各インターフェイス装置71から76で登録されているアドレスとの一致を確認する。一致しなければそのままアクセスを受け付け、そうでなければアクセスを保留する。アクセスの保留は、登録されたアドレスが調停装置に到達した時点で解除される。
この操作により、先行する書き込みアクセスは追い越されることがない。このような単純なアドレスの相互確認の仕組みにより、マスター間のコヒーレンスを確保することができる。
次に、キャッシュがSDRAMに対して行う、読み出しと書き込みにも注意する必要がある。例えば、マスターからの読み出しがキャッシュミスすると、新たな格納場所を空けるため一旦SDRAMに左記の格納場所にあったデータを書き込む。その後、必要なデータを空けた格納場所にSDRAMから読み出す。この動作の順序も守らなければなければならない。
この場合も同様に、SDRAMに対する書き込みアドレスを登録し、SDRAMに対するアドレスとの一致確認を行う。一致していれば、登録された書き込みアクセスが分離装置41に到達するまでアクセスを保留させる。ただし、キャッシュ31から38はマスター11から16の場合と違いお互いが排他的なので、相互チェックは不要である。
この操作により、先行する書き込みアクセスは追い越されることがない。このような単純なアドレスの相互確認の仕組みにより、キャッシュ内のコヒーレンスを確保することができる。
以上のように、インターフェイス装置71から76と、キャッシュ31から38のそれぞれで、アドレスの相互チェック機能を導入することで、メモリ制御装置全体でのコヒーレンスを完全に保証することができる。
なお、アドレスの登録および一致確認は、全てのビットに対して行う必要はない。回路規模を削減するため、ある範囲のビットだけを対象にしてもよい。ただし、ある範囲のビットだけで処理すると、アドレスの一致の疑いのあるアクセスも保留されるので、性能は劣化する。例えば、32ビットに対して一部の16ビットを対象にすれば、65536のアクセスに一回程度(アクセス要求の頻度でさらに下がる)は、余分なアクセスの保留が生じることになる。
本発明の実施例4に係るメモリ制御装置について説明する。本実施の形態は、実施例1を参照しながら説明する。
キャッシュ31から38の方式は、ダイレクトマップ、セットアソシアエイティブ、フルアソシアエイティブの任意のものを選択することができる。方式によって性能やコストは変わる。ここではいくつかの方式のうち、性能とコストのバランスに優れるセットアソシアエイティブを用いることにする。
セットアソシアエイティブ型のキャッシュは、それぞれのデータ管理が排他的なWayと呼ばれるバンクを持っている。即ち、Wayの1つだけにアクセスが行われる。いずれにアクセスするかは、そのときの状態に依存する。例えば、Wayが4つあり、3つには何か登録されており、1つには何も登録されていないとする。登録されているWayへのアクセスは空きを作る作業が生じ性能が劣化する。そこで、何も登録されていないWayへのアクセスが優先される。
本実施例では、マスター11から16のアクセスをキャッシュ31から38に均等に振り分けることから、キャッシュ31から38のそれぞれは、複数のマスターが共有することになる。しかし、実施例2で述べたように、マスターが要求する論理帯域が違う場合、キャッシュにおいても優先的に、特定のマスターに割り当てる方が性能的に有利な場合がある。
ここでは、キャッシュのWayに識別子となるIDを付けておく。また、マスターからも、アドレスと同時にIDを指定してアクセスさせる。そして、IDが一致するWayだけがアクセスできるようにする。
これは、特定のID専用のキャッシュを用意することを意味する。もちろん、異なるマスターが同じIDを用いてアクセスしてもよいし、マスター1つだけがユニークなIDを用いてアクセスしてもよい。Wayに付与するIDも同様である。なお、Wayに付与するIDは予めレジスタ等で与えておく。
図19で詳細に説明する。図19において311から314はそれぞれ同じ動作、同じ容量の4個のWayである。
Way311から314には、それぞれIDとして0,0,0,1を付与しておく。マスターは任意のIDを指定してアクセスする。マスターが指定するIDが1であった場合、ID=1が付与されたWay314だけがアクセスの対象となる。このWay314に所望のデータがあればキャッシュヒットとなり、なければキャッシュミスとなる。
一方、マスターが指定するIDが0であった場合ID=0が付与されたWay311、312、313がアクセスの対象となる。Wayに管理されているデータは排他的なので、Way311、312、313のいずれか1つだけが最後に選ばれる。
しかし、マスターが指定するIDが2であった場合、どのWayにもアクセスできない。この場合、エラーとしてアクセスを無効化するか、強制的にいずれかのWayにアクセスさせるか、もしくはキャッシュをバイパスし直接メモリアクセスするか、のいずれかを選ばなくてはならない。これらは、選択して実装してもよいし、全てを実装しておいてレジスタ等で方式を切り替えてもよい。
また、キャッシュにはフラッシュが必要である。フラッシュは、キャッシュに溜め込んだデータを一挙にSDRAMに書き込み、キャッシュの内容とSDRAMの内容を一致させるものである。キャッシュ全体にフラッシュを行うと、最大、キャッシュ容量分のメモリアクセスが生じてしまい、マスターからのアクセスが受け付けられにくくなるなど性能的に問題になることがある。
本実施例では、WayにIDを付与しているので、特定のIDだけを選択してフラッシュすることが可能である。例えば、ID=1のWay314だけをフラッシュするなら、キャッシュ全体のフラッシュに比べ1/4の範囲のフラッシュで済む。
ここで、Wayの代わりに、特定のアドレス範囲ごとにIDを付与する方法もある。さらに、特定のWayと特定のアドレス範囲を組み合わせてIDを付与する方法もある。例えば、特定のIDと特定のアドレス範囲の条件が合致した場合だけアクセス可能にするなどである。フラッシュにおいても、特定のIDでかつ特定のアドレス範囲だけフラッシュする場合なども考えれらる。
なお、キャッシュのデータ入れ替え方式として、書き込むと同時にメモリにも書き込む方式と、新たなキャッシュへのアクセスにより空きがない場合だけ蓄積されたデータをメモリに退避させる方式とがあるが、本実施例のメモリ制御装置はいずれでもよい。
さらに、キャッシュはFIFOなどの簡単なバッファに置き換えても、マスターが繰り返しアクセスする場合の効率が下がるだけなので、本実施例の本質には影響ない。