以下に、本願の開示するメモリ制御装置、及びメモリ制御方法の実施例を、図面を参照しながら詳細に説明する。なお、以下の実施例により本願の開示するメモリ制御装置、及びメモリ制御方法が限定されるものではない。
まず、図1、図2を参照し、本実施例に係るメモリ制御の概要を説明する。図1は、本実施例に係るメモリ制御のライト処理を説明するための図である。図1に示す様に、バス幅Bは、4つの分割ブロックB1〜B4に分割され、各分割ブロックB1〜B4は、後述する4つのコントローラにより個別に制御される。ライト(書込み)処理では、ライト対象のデータD1〜D4は、バス方向(図1の縦方向)に4分割された後、各分割ブロックB1〜B4に対して均等に振り分けられる。例えば、データD1の振り分け後に余ったブロック(例えば、余剰ブロックE1)には、次のライトデータであるデータD2が振り分けられる。また、データD2の振り分け後に余ったブロック(例えば、余剰ブロックE2)には、次のライトデータであるデータD3が振り分けられる。更に、データD3の振り分け後に余ったブロック(例えば、余剰ブロックE3)には、次のライトデータであるデータD3が振り分けられる。なお、各分割ブロックB1〜B4に生じる余剰領域F1〜F4は無効領域となる。この様に、本実施例に係るメモリ制御では、メモリ制御装置は、異なるデータD1〜D4を、分割ブロックB1〜B4単位で詰めてライト処理するため、限られたバス幅を有効に活用することができる。その結果、伝送帯域の損失が抑制される。
上述した様に、メモリ制御装置は、各データD1〜D4を分割した後、各分割ブロックB1〜B4に振り分けてライトするため、ライト処理時に振り分けたブロックと同一のブロックに対してリード処理を実行することで、データを詰めた状態でも、リードが可能となる。また、メモリ制御装置は、分割ブロックB1〜B4毎に、個別のリード制御を行うことで、分割ブロックB1〜B4毎に異なるデータ(例えば、データD1とデータD2)が格納されている場合でも、同時並行的なリード処理の実行が可能となる。その結果、上記無効領域が減少する。
詳細については後述するが、本実施例では、ライトされた各データD1〜D4は、データID、データの格納場所を示す情報(ライトポインタ)、データ長、データの先頭となるブロックID、及び上記ライトポインタが示すデータ部分(タイプ)の各情報により管理される。メモリ制御装置は、ライト処理時に、制御対象のメモリ20とは別のメモリに上記各情報を格納させておき、リード処理時に、リード対象のデータに対応する上記各情報を取得することで、リード処理に用いるアドレスを算出する。
上記各情報について詳細に説明する。データIDは、データを識別する情報(例えば、番号)である。ライトポインタは、データがライトされたポインタを示す。ポインタは、バス幅(64バイト)とは異なる所定容量(例えば、512バイト)を有するメモリ空間である。メモリ制御装置は、ポインタ単位でデータの管理を行い、1ポインタには、複数のメモリアドレスが対応する。メモリ制御装置は、1つのポインタの容量(例えば、512バイト)を超えるデータをメモリにライトする場合、必要に応じた数の別のポインタを割り当てることもできる。
データ長は、ライト対象のデータ(ライトデータ)のビット数である。コントローラによるリード回数は、このデータ長を、分割後のバス幅である128ビット(16バイト)で除算することにより算出される。データの先頭となるブロックID(以下、「先頭ブロックID」と記す。)は、データの先頭部分が、4つの分割ブロックB1〜B4の内、何れのブロックにあるかを示す。メモリ制御装置は、先頭ブロックIDの示すブロックを先頭(データ開始位置)として、各リードデータの位置を特定する。タイプは、対応するライトポインタが示すデータ部分が、データ全体における先頭、途中、最後の内の何れの位置に該当するかを示す情報である。タイプの値は、リードアドレスの算出、データの復元等の内部処理に使用される。
ここで、以下の説明では、分割前のデータと、分割によって得られたデータとを明確に区別するため、分割前のデータを単に「データ」と記載し、分割後のデータを「分割データ」と記載する。例えば、分割前のデータD1は、ライト処理に先立ち、4つの分割データD11、D12、D13、D14に分割された後、リード処理において再び結合された結果、データD1が復元される。
次に、リード処理は、リード可能となった分割ブロックB1〜B4から順に開始されるため、各データD1〜D4は、必ずしも、先頭部分から順にリードされるとは限らない。換言すれば、分割ブロックB1〜B4間で、読出し順序の逆転が発生し得る。図2は、本実施例に係るメモリ制御のリード処理を説明するための図である。なお、図2では、説明の便宜上、分割ブロック数は2つであり、かつ、リード対象のデータD1、D2は、それぞれ分割データD11〜D15、D21〜D23から構成されるものとする。図2に示す様に、データD1の読出しに際し、分割ブロックB1、B2に対するリード処理がそれぞれ3回、2回必要であり、データD2の読出しに際し、分割ブロックB1、B2に対するリード処理がそれぞれ2回、1回必要である場合を想定する。この場合、各分割ブロックB1、B2に対する3回目のリードアクセス時に、分割ブロックB2は、データD2の一部である分割データD22を読み出すこととなる。一方、分割データD21は、各分割ブロックB1、B2に対する4回目のリードアクセス時に読み出されることとなるため、データD2において、リード順序の逆転が発生する。そこで、メモリ制御装置は、上記各情報を基に、データD2を構成する各分割データD21〜D23の位置を算出し、各分割データD21〜D23を正しい位置に再配置する処理(並び替え処理)を実行する。
本実施例では、メモリ制御装置10の適用箇所として、80GbpsイーサネットのQoS(Quality of Service)機能を有するIP伝送装置内を想定するが、これに限らず、他の装置への適用も可能である。メモリ制御装置10は、IP伝送装置のキュー管理部と出力インタフェースとの間におけるデータ処理に際し、4本に分割されたメモリバス毎に、個別のリードライト制御を行う。
本願の開示する一実施例に係るメモリ制御装置10の構成を説明する。図3は、メモリ制御装置10の構成を示す図である。図3に示す様に、メモリ制御装置10は、ライト要求振分部11とリード要求振分部12とリードデータ振分部13とデータ管理部14とコントローラ15a〜15dとを有する。これら各構成部分は、一方向又は双方向に、信号やデータの入出力が可能な様に接続されている。
ライト要求振分部11は、ライト要求の入力を契機として、ライトデータを分割し、各分割データを、各コントローラ15a〜15dへ振り分ける。ライト要求振分部11は、ライト要求バッファ111を有し、ライト要求バッファ111は、ライトデータと、必要なライトポインタ(複数のメモリアドレス)とを格納する。例えば、ライトポインタ#10は、複数のメモリアドレス#100、#101、#102、…に相当する。
続いて、図4A〜図5Cを参照しながら、ライト要求振分部11の処理を、より詳細に説明する。図4Aは、従来技術におけるライト処理を説明するための図である。図4Aに示す様に、ライト対象のデータが3つ存在し、各データD1〜D3のデータ長がそれぞれ88バイト、584バイト、64バイトである場合、従来技術では、データが分割されずそのままの状態でメモリにライトされる。このため、バス幅Bが64バイトの場合、ライト処理が完了するまでに、13クロック分の時間を要すると共に、少なくとも80バイト分(データD1に32バイト+データD2に48バイト)の無効領域が発生することとなる。
図4Bは、本実施例におけるライト処理を説明するための図である。本実施例では、上述した従来技術と異なり、図4Bに示す様に、バス幅B及び各データD1〜D3が4分割される。また、各分割データD11〜D16、D21〜D237、D31〜D34は、時間tの経過に伴い、バス幅B方向に詰めた状態で、分割ブロックB1〜B4に順次格納される。このため、バス幅Bが64バイトの場合、ライト処理に掛かる時間が、11クロック分の時間で済むと共に、無効領域は、48バイト未満となる。従って、本実施例に係るメモリ制御装置10によれば、ライト処理における所要時間の短縮と無効領域の減少とが実現される。
図5Aは、データD1の分割データD11〜D16が各分割ブロックB1〜B4に振り分けられる様子を示す図である。図5Aに示す様に、データD1はバス幅B方向に分割され、分割ブロックB1〜B4となった後、待ち時間の最も少ない分割ブロックB1から順に、全ての分割ブロックB1〜B4を回る様に振り分けられる(S11〜S16)。分割データD11〜D16の格納先となるライトアドレス#100、#101、…は、ライトポインタ#10を基に算出された先頭アドレス#100を1ずつインクリメントしていくことにより決定される。その結果、データD11、D15は、コントローラ15aに接続する分割ブロックB1に格納され、データD12、D16は、コントローラ15bに接続する分割ブロックB2に格納される。また、データD13は、コントローラ15cに接続する分割ブロックB3に格納され、データD14は、コントローラ15dに接続する分割ブロックB4に格納される。なお、図5Aに示す例では、ライトポインタ#10により特定されるデータは、データD1の全体であることから、先頭の分割データD11と最後の分割データD16とを含む。このため、ライトされたデータD1のタイプとして、「先頭」及び「最後」が設定される。
図5Bは、データD2の分割データD21〜D237が各分割ブロックB1〜B4に振り分けられる様子を示す図である。本実施例の様に、ライト要求のあったデータD1、D2が連続している場合、後続するデータD2の1つ前のデータD1の最後の分割データD16をライトする分割ブロックB2の次の分割ブロック(分割ブロックB3)が、最も待ち時間の少ない分割ブロックとなる。従って、図5Bに示す様に、データD2の分割データD21〜D237は、分割ブロックB3から順に、全ての分割ブロックB1〜B4を回る様に振り分けられる(S21〜S24)。分割データD21〜D237の格納先となるライトアドレス#200、#201、…は、ライトポインタ#20を基に算出された先頭アドレス#200を1ずつインクリメントしていくことにより決定される。その結果、分割データD21、D25、…、D233、D237は、コントローラ15cに接続する分割ブロックB3に格納され、データD22、D26、…、D234は、コントローラ15dに接続する分割ブロックB4に格納される。また、データD23、…、D231、D235は、コントローラ15aに接続する分割ブロックB1に格納され、データD24、…、D232、D236は、コントローラ15bに接続する分割ブロックB2に格納される。
なお、図5Bに示す例では、ライトポインタ#20により特定されるデータは、データD2の前半部分であることから、先頭の分割データD21を含むが、最後の分割データD237を含まない。このため、ライトされたデータD2のタイプ(#20)として、「先頭」が設定される。一方、ライトポインタ#21により特定されるデータは、データD2の後半部分であることから、先頭の分割データD21を含まないが、最後の分割データD237を含む。このため、ライトされたデータD2のタイプ(#21)としては、「最後」が設定される。
図5Cは、データD3の分割データD31〜D34が各分割ブロックB1〜B4に振り分けられる様子を示す図である。本実施例の様に、ライト要求のあったデータD2、D3が連続している場合、後続するデータD3の1つ前のデータD2の最後の分割データD237をライトする分割ブロックB3の次の分割ブロック(分割ブロックB4)が、最も待ち時間の少ない分割ブロックとなる。従って、図5Cに示す様に、データD3の分割データD31〜D34は、分割ブロックB4から順に、全ての分割ブロックB1〜B4を回る様に振り分けられる(S31〜S34)。分割データD31〜D34の格納先となるライトアドレス#300、#301、…は、ライトポインタ#30を基に算出された先頭アドレス#300を1ずつインクリメントしていくことにより決定される。その結果、分割データD31は、コントローラ15dに接続する分割ブロックB4に格納され、データD32は、コントローラ15aに接続する分割ブロックB1に格納される。また、データD33は、コントローラ15bに接続する分割ブロックB2に格納され、データD34は、コントローラ15cに接続する分割ブロックB3に格納される。なお、図5Cに示す例では、図5Aと同様に、ライトポインタ#30により特定されるデータは、データD3の全体であることから、先頭の分割データD31と最後の分割データD34とを含む。このため、ライトされたデータD3のタイプとしては、「先頭」及び「最後」が設定される。
上述した様に、ライト要求振分部11は、分割後のライトデータを、異なる領域(分割ブロックB1〜B4)に書き込むため、従来は異なるクロックタイミングで処理していたライトデータを、同一のタイミングで並列的に処理することができる。また、メモリ制御装置10は、バス幅Bを分割したことで、ブロック毎の最大無効領域が小さくなり、パラレル損失の低減が可能となる。更に、メモリ制御装置10は、ライト処理が連続して発生した場合に、ライトが行われない分割ブロックが生じない様にすることで、ライト処理間のギャップを小さくすることができる。これにより、実際にライトされている信号中に占める無効領域の割合が減少する。その結果、伝送帯域の低下が回避される。
リード要求振分部12は、リード要求の入力を契機として、データD1〜D3を、分割ブロックB1〜B4毎に読み出す。具体的には、リード要求振分部12は、リード要求のあったポインタに基づき、上記各情報(データID、ライトポインタ、データ長、先頭ブロックID、及びタイプ)を参照することで、リードすべきデータを特定する。例えば、リード要求振分部12は、リード要求のあったポインタから、リードデータの先頭アドレスを算出した後、先頭ブロックID及びデータ長から、何れのアドレスまでのリード処理を実行すべきかを算出する。これらの算出処理は、分割ブロックB1〜B4毎に個別に実行される。これにより、分割データD11〜D34の内、リード対象となる分割データの先頭と最後とが、分割ブロック単位で特定される。
続いて、図6A〜図8を参照しながら、リード要求振分部12の処理について、より詳細に説明する。図6Aは、リードアドレスの算出方法を説明するための条件の一例を示す図である。説明の前提として、例えば、図6Aに示す様な条件を設定する。すなわち、以下の説明では、メモリ20のバス幅Bが“512ビット(64バイト)”であり、バスの分割数が“4”であり、1ポインタのサイズ(容量)が“512バイト”である場合を想定する。
図6Bは、リードアドレスの算出方法を説明するためのリード要求の一例を示す図である。本実施例では、図6Aに示した条件下において、図6Bに示すリード要求が、リード要求振分部12に入力されたとする。図6Bに示す様に、上記リード要求は、データIDとして“D2”を有するデータに対する要求であり、該データは、異なる2つのポインタ#10、#11により特定される。また、リード対象のデータは、データ長が“584バイト”であり、“B4”を先頭ブロックIDとする。
上述した条件の下、リード要求振分部12に上記リード要求が入力された場合、上述した様に、1ポインタのサイズは“512バイト”であり、メモリのバス幅Bは“64バイト”であることから、1ポインタ当たりのメモリアドレス数は、8(=512÷64)つとなる。この値は、メモリ20の回路に固有の値である。
まず、ポインタ#10に関し、先頭アドレスは、ポインタ×1ポインタ当たりのメモリアドレス数により算出されることから、10×8より、“80”と算出される。また、リードR1のポインタ#10のタイプは“最後”を含まない(図6B参照)ため、ポインタ#10は、全てのアドレス(8アドレス)分、リードされる。従って、ポインタ#10に対するリード回数は、8回と算出される。また、先頭ブロックIDは“B4”(図6B参照)であることから、リード要求振分部12は、ポインタ#10に関し、分割ブロックB4から順に、各分割ブロックB1〜B4に対して、均等に8回ずつリードアクセスすればよいこととなる。
同様に、ポインタ#11に関し、先頭アドレスは、ポインタ×1ポインタ当たりのメモリアドレス数により算出されることから、11×8より、“88”と算出される。また、リードR2のポインタ#11のタイプは“最後”を含む(図6B参照)ため、ポインタ#11では、ポインタ#10と異なり、各分割ブロックB1〜B4でのリード回数が算出されることとなる。以下に算出方法を説明する。
まず、ポインタ#11の指定するデータの長さ(データD2の残りデータ長)は、「全データ長」mod「1ポインタのサイズ」により算出される。本実施例では、データ長が584バイト(図6B参照)であり、1ポインタのサイズが512バイト(図6A参照)である場合を想定していることから、残りデータ長は、584÷512の余りより、72バイトと算出される。ポインタ#11に対するリード回数は、残りデータ長÷分割後のバス幅より算出されることから、72÷16=4.5より、5回と算出される。また、先頭ブロックIDは“B4”(図6B参照)であり、バス幅Bの分割数は“4”(図6A参照)であることから、各分割ブロックB1〜B4でのリード回数は、それぞれ1回、1回、1回、2回に定まる。従って、リード要求振分部12は、ポインタ#11に関し、分割ブロックB4から順に、各分割ブロックB1〜B4に対して、均等に1回ずつリードアクセスした後、分割ブロックB4に対してのみ、1回リードアクセスすればよいこととなる。
上述のリード回数を基に、分割ブロックB1〜B4毎のリードアドレスが求められる。図7は、リード要求振分部12により、分割ブロックB1〜B4毎に算出されたリードアドレスの一例を示す図である。図7に示す様に、ポインタ#10に関しては、8つずつのメモリアドレス#80〜#87が、各分割ブロックB1〜B4に均等に算出されることとなる。また、ポインタ#11に関しては、分割ブロックB1〜B3に1つずつのメモリアドレス#88が、分割ブロックB4に2つのメモリアドレス#88、#89が算出されることとなる。
リード要求振分部12は、上記算出結果に従い、算出されたリードアドレス#80〜#89を、リード要求バッファ121内の各分割ブロックB1〜B4に対応する領域に格納させる。図8は、リードアドレスがリード要求バッファ121に格納された様子を示す図である。図8に示す様に、リード要求バッファ121に格納されるリードアドレスは、分割ブロックB1〜B4毎に詰めて格納される。このため、ライト処理時と同様に、実際にリードされている信号中に占める無効領域の割合が減少する。その結果、伝送帯域の低下が未然に防止される。
リードデータ振分部13は、リード要求振分部12から入力されるリードデータを並び替える。すなわち、ライト処理は、常に、各データD1〜D3の先頭の分割データから開始されるのに対し、リード処理では、最初にリード可能となる分割データは、各データD1〜D3の先頭の分割データとは限らず、直前のリード処理によって異なる。本実施例では、リード要求振分部12は、待ち時間を短縮するため、先頭となる分割データの格納された分割ブロックでなくとも、直ちにリード処理を開始する。従って、リードデータ振分部13は、リードされた分割データを、分割前の状態に正常に復元するために、必要に応じて、分割データの並び替えを行う。
続いて、図9〜図11を参照しながら、リードデータ振分部13の処理について、より詳細に説明する。図9は、リードデータ(分割データ)の並び替え方法を説明するためのリード要求の一例を示す図である。本実施例では、図6Aに示した条件下において、図9に示すリード要求が、リード要求振分部12に入力されたとする。図9に示す様に、上記リード要求は、データID“D1”、“D2”、“D3”により識別される3つのデータD1、D2、D3に対する要求である。各データD1、D2、D3はそれぞれ、ポインタ#10、#20&#21、#30により特定される。データD1は、“B2”を先頭ブロックIDとするデータ長“80バイト”のリードデータである。また、データD2は、“B4”を先頭ブロックIDとするデータ長“528バイト”のリードデータである。更に、データD3は、“B2”を先頭ブロックIDとするデータ長“64バイト”のリードデータである。
リードデータ振分部13は、リード要求の振分け時にデータ管理部14に格納された上記各情報(データID、ライトポインタ、データ長、先頭ブロックID、及びタイプ)を用いて、先頭の分割データから順に、順次、リード要求バッファ121からリードデータバッファ131への分割データの読出しを行う。これにより、リードデータ(分割データ)は、分割ブロックB1〜B4毎に、リードデータバッファ131に蓄積される。リードデータ振分部13は、蓄積されたリードデータを、FIFO(First In First Out)の先頭から順に並び替える。
以下、リードデータ(分割データ)の並び替え処理について、より詳細に説明する。図10は、リードデータ振分部13が、リードデータバッファ131から並び替えバッファ132a、132bにリードデータD1、D2を取り込む処理を説明するための図である。まず、リードデータ振分部13は、リードデータのデータ長から、幾つの分割ブロック分のリード処理が必要であるかを算出する。例えば、リードデータがデータD1である場合、データ長は“80バイト”(図9参照)であることから、リードデータ振分部13は、分割後のバス幅である16バイトで80バイトを除算することで、分割ブロック数“5”を算出する。次に、リードデータ振分部13は、先頭ブロックID“B2”(図9参照)から順に、上記分割ブロック数である5回分のリード処理を実行し、並び替えバッファ132aに分割後のデータD1を格納する。
同様の処理は、データD2、D3についても実行される。すなわち、リードデータ振分部13は、データD1の格納された全ての分割ブロックB1〜B4からの読出しを終えると、後続する次データD2の読出しを開始するが、このとき、並び替えバッファ132を並び替えバッファ132aから並び替えバッファ132bに切り替える。これにより、並び替え処理に用いられるバッファが、データD1、D2、D3毎に異なるものとなる。従って、リードデータ振分部13は、図10に示す様に、リードデータバッファ131内に入り組んで格納されたデータD1、D2、D3の中から、同一のデータ(例えば、データD2)だけを容易に取り出すことができる。
上述した様に、リードデータ振分部13は、各データD1、D2、D3を、ID順に順次、リードデータバッファ131から並び替えバッファ132に移動させる。なお、移動に際し、リードデータバッファ131内が空の場合には、リードデータ振分部13は、リードデータバッファ131に新たなデータが格納されるのを待って、格納された時点でデータの移動を開始する。
次に、データD2を例にとり、並び替え処理を説明する。図11は、リードデータ振分部13の実行する並び替え処理を説明するための図である。図11に示す様に、並び替えバッファ132bにデータD2の全てが格納された時点で、リードデータ振分部13は、各分割データD21〜D233の読出しを開始する。このとき、リードデータ振分部13は、セレクタ133により、先頭ブロックIDの分割ブロックB4に格納された分割データD21が、データD2の先頭となる様に、各分割データD21〜D233を入れ替えた上で、データD2を装置外部に出力する。これにより、分割前のデータD2と同一の正常なデータの出力が可能となる。
データ管理部14は、ライト要求振分部11により振り分けられた分割データD11〜D34をメモリ制御装置10が正常にリードできる様に、ライト処理の際に、上記各情報を格納する。上記各情報は、例えば、各データD1〜D3のデータID、ライトポインタ、データ長、先頭ブロックID、及びタイプである。これらの情報は、リード処理時にデータ管理部14から取得され、例えば、リードすべきメモリアドレスの特定、あるいは、該アドレスが割り当てられた分割ブロックの特定に使用される。
各コントローラ15a〜15dは、メモリ20を制御するメモリインタフェースである。各コントローラ15a〜15dは、メモリ20を構成する4組のDDR(Double Data Rate)メモリ20a〜20dと、4本のバスB11〜B14を介して、それぞれ接続される。本実施例では、計512ビットのバス幅を想定しているので、各コントローラ15a〜15dは、128ビットの4本のバスB11〜B14を介して、対応する各DDRメモリ20a〜20dを個別に制御する。
次に、メモリ制御装置10の動作について、ライト処理とリード処理とに分けて説明する。本動作説明では、上述した構成の説明と同様に、64バイトのバス幅Bを4分割する場合を例示するが、分割数は4でなくてもよい。
まず、ライト処理を説明する。図12は、メモリ制御装置10の実行するライト処理を説明するためのフローチャートである。
図12のT11では、ライト要求振分部11は、メモリ制御装置10を搭載するIP伝送装置のキュー管理部から、ライトデータ及び上記各情報(例えば、ライトポインタ、データ長等)を入力する。T12では、ライト要求振分部11は、T11で入力されたライトデータを、コントローラ15a〜15dの数分に分割する。これにより、ライトデータは、分割ブロックB1〜B4の幅である16バイトずつの分割データに分割される。
T13では、ライト要求振分部11は、各コントローラ15a〜15d内において空いている分割ブロックの内、最も待ち時間の少ない分割ブロックを先頭として、入力されたライト要求を、各コントローラ15a〜15dに転送する。このとき、ライト要求振分部11は、コントローラ15a〜15dの内、最も待ち時間の少ない分割ブロックを有するコントローラから順番に、各分割データのライト要求を転送する。T14では、各コントローラ15a〜15dは、ライト要求振分部11からの上記ライト要求に従い、メモリ20内の対応するDDRメモリ20a〜20dに、各分割データをライトする。
図13Aは、データD1〜D4の各分割データがメモリ20内にライトされた様子を示す図である。図13Aに示す様に、各分割データは、各データD1〜D4における先頭の分割データから順に、隙間(無効領域)が極力生じない様に詰め込まれた状態で、メモリ20にライトされる。これにより、各データD1〜D4間の無効領域は、最大でも、分割後のバス幅である16バイト(128ビット)から1ビットを引いた127ビットとなる。
図13Aにおいて、データ伝送効率は、下記の数式(1)より、0.944と算出される。
408バイト÷(16バイト×27)=0.944・・・(1)
上記数式(1)より、ライト帯域が改善していることがわかるが、メモリ制御装置10は、分割数を更に増やして分割ブロック幅を小さくすることで、ライト帯域をより広くすることができる。従って、分割数は4に限らず、回路規模が過度に増大しない範囲で、極力大きい値であることが望ましい。
T15では、ライト要求振分部11は、リード時に分割データを正常に組立て可能な様に、分割データ復元用の情報として、上記各情報(例えば、ライトポインタ、データ長、先頭ブロックID、タイプ等)を、データ管理部14に事前に格納させる。図13Bは、データID、データ長、先頭ブロックIDがデータ管理部14に格納された様子を示す図である。図13Bに示す様に、例えば、データD1の「データ長」として“80”バイトが、「先頭ブロックID」として“B1”が、それぞれデータID“D1”と対応付けて格納されている。同様に、例えば、データD4の「データ長」として“72”バイトが、「先頭ブロックID」として“B3”が、それぞれデータID“D4”と対応付けて格納されている。
次に、リード処理を説明する。図14は、メモリ制御装置10の実行するリード処理を説明するためのフローチャートである。
リード要求振分部12は、リード要求としてリードポインタの入力をキュー管理部から受けると(T21)、上記リードポインタを基に、T15で予め格納された上記各情報(例えば、先頭ブロックID、データ長、タイプ等)を、データ管理部14から取得する(T22)。
T23では、リード要求振分部12は、T22で取得された先頭ブロックID及びデータ長に基づき、T21にて入力された各リード要求を、各コントローラ15a〜15dに振り分ける。次に、リード要求振分部12は、T22で取得された先頭ブロックID、データ長、及びタイプに基づき、リードアドレスを、各コントローラ15a〜15d毎に算出する(T24)。T25では、リード要求振分部12は、T24で算出されたリードアドレスを参照し、該リードアドレスに対応する各分割データを、各コントローラ15a〜15dを介してメモリ20からリードする。
ここで、データD3、D1、D4、D2の順にリード要求が入力された場合を例にとり、リード処理について、より詳細に説明する。図15は、データD1〜D4の各分割データがメモリ20からリードされた様子を示す図である。図15に示す様に、各分割データは、各データD3、D1、D4、D2における先頭の分割データから順に、隙間(無効領域)が極力生じない様に詰め込まれた状態で、メモリ20からリードされる。これにより、各データD3、D1、D4、D2間の無効領域は、最大でも、分割後のバス幅である16バイト(128ビット)から1ビットを引いた127ビットとなる。換言すれば、各分割ブロックB1〜B4の幅以上の無効領域が発生することはない。
従って、図15においても、図13Aと同様に、データ伝送効率は、下記の数式(2)により、0.944と算出される。
408バイト÷(16バイト×27)=0.944・・・(2)
上記数式(2)より、リード帯域が改善していることがわかるが、メモリ制御装置10は、分割数を更に増やして分割ブロック幅を小さくすることで、リード帯域をより広くすることができる。従って、分割数は4に限らず、回路規模が過度に増大しない範囲で、極力大きい値であることが望ましい。
なお、T25において好適には、リード要求振分部12は、リード時に、データIDに対応する各情報を取得する際、各データD1〜D4に対し、フレーム番号を付与する。フレーム番号は、データIDを、データが実際に読み出される順に振り直した番号である。リード要求振分部12は、このフレーム番号に従って昇順に、メモリ20から各データD1〜D4を取り出す。これにより、メモリ制御装置10は、入力されたリード要求に基づく正しい順序で、各データD1〜D4を外部装置宛に出力することができる。
T26では、リードデータ振分部13は、T25でリードされたリードデータを、各分割データ単位で、先頭ブロックIDと共に、並び替えバッファ132に格納させる。格納に際し、リードデータ振分部13は、リード対象のリードデータが変わる度に、図10に示した様に、並び替えバッファ132を、次のデータ用の並び替えバッファ132にずらす制御を行う(T27)。
図16は、リードデータバッファ131から並び替えバッファ132へリードデータD1〜D4が振り分けられる様子を示す図である。図16に示す様に、リードデータ振分部13は、上記各情報の内、先頭ブロックIDとデータ長とから、復元すべきデータの個数(本動作説明では4つ)を算出する。その後、リードデータ振分部13は、上記フレーム番号G1〜G4に基づき、各リードデータD1〜D4に対応する並び替えバッファ132a〜132dに、リードデータD1〜D4を移動する。移動は、分割データ単位で独立して行われる。
T28では、リードデータ振分部13は、各並び替えバッファ132c、132a、132d、132bから、リードデータD3、D1、D4、D2を順次読み出す。読出しは、分割データ単位で独立して行われる。T29では、リードデータ振分部13は、T15でデータ管理部14に格納された先頭ブロックIDを参照し、各リードデータD1〜D4の先頭の分割データが、バスの先頭に位置する分割ブロックB1にくる様に、各分割データを並び替えて出力する。これにより、複数の分割データが結合され、元のデータD1〜D4が復元される。
また、リード処理についても、図16に示す様に、隙間(無効領域)が極力小さくなる様に、分割ブロックB1〜B4毎に詰めた状態で実行される。その結果、各リードデータD1〜D4の分割データは、一旦不連続な状態になるが、リードデータ振分部13は、復元用情報(例えば、データID、データ長、先頭ブロックID、フレーム番号)を用いて、各データD1〜D4の区別と各分割データの並び替えとを可能とする。
なお、リードデータ振分部13は、各データD1〜D4をバッファ間で移動させる際、各データD1〜D4に付与されたフレーム番号に従い、フレーム番号の昇順に移動させるので、データ出力順序がリード要求の順序と異なるという不都合は回避される。
リードデータ振分部13は、並び替えバッファ132から各分割データをリードして出力するが、1フレーム当たりのリード回数は、データ長をバス幅Bで除算した値を繰り上げることで、算出される。従って、例えば、データD3の場合、88バイト/64バイト=1.375であることから、リード回数は2回となる。同様に、例えば、データD2の場合、168バイト/64バイト=2.625であることから、リード回数は3回という様に、リード回数は、各リードデータに応じて算出される。
リードデータ振分部13は、フレーム番号をインクリメントしながら、データD3、D1、D4、D2の順に出力していくが、出力に先立ち、先頭ブロックIDに基づき、先頭の分割ブロックが最上位にくる様に、各分割データの並び替えを行う。例えば、出力データがデータD3であれば、リードデータ振分部13は、データD3の各分割データを並び替えることなくそのまま出力する(図15、図16参照)。一方、例えば、出力データがデータD4の場合には、リードデータ振分部13は、データD4の各分割データを、分割ブロックB3、B4、B1、B2の順に並び替えた上で出力する(図15、図16参照)。
以下、データD4の出力を例にとり、より詳細に説明する。図17は、データD4の出力時に、各分割データD41〜D44が、セレクタ13a−1〜13a−4により並び替えられる様子を示す図である。図17に示す様に、リードデータ振分部13は、出力対象の分割データの位置+(先頭の分割ブロックの位置−1)により決定される位置番号に、分割データを割り当てる。なお、上記位置番号が、4を超えた場合には、1に戻る。例えば、先頭の分割ブロックの位置が3番目の分割ブロックB3の場合、分割データD43の位置番号は、1+(3−1)より“3”に決定される。従って、分割データD43は、セレクタ13a−1により、バスの上から3番目の位置に配置される。また、分割データD44は、2+(3−1)より位置番号が“4”に決定されるため、セレクタ13a−2により、上から4番目の位置に配置される。同様に、分割データD41、D45は、3+(3−1)より位置番号が“1”に決定されるため、セレクタ13a−3により、最上位に配置される。そして、分割データD42は、4+(3−1)より位置番号が“2”に決定されるため、セレクタ13a−4により、上から2番目の位置に配置される。これにより、各リードデータD1〜D4の先頭に位置する分割データが、常にバスの先頭(最上位)に配置されることとなる。従って、メモリ制御装置10は、各リードデータD1〜D4を、ライト時と同じ状態でリードすることができる。
以上説明した様に、メモリ制御装置10は、ライト要求振分部11と複数のコントローラ15a〜15dとを有する。ライト要求振分部11は、メモリ20への書込み対象のデータD1をバス幅B方向に分割し、該分割によって得られた複数の分割データD11〜D16を、複数のバスB11〜B14に振り分けて出力する。複数のコントローラ15a〜15dは、ライト要求振分部11により出力された上記複数の分割データD11〜D16を、各バス毎にバスの間断無く詰めた状態で(図1参照)、複数のバスB11〜B14を介してメモリ20に書き込む。
メモリ制御装置10において好ましくは、データ管理部14は、複数の分割データD11〜D16が出力される際、メモリ20内において各分割データD11〜D16が書き込まれる位置(例えば、先頭ブロックID、データ長、ライトポインタ)を取得する。また、リード要求振分部12は、データ管理部14により取得された上記位置を参照し、複数のコントローラ15a〜15dによりメモリ29に書き込まれた複数の分割データD11〜D16を、連続して読み出す。
メモリ制御装置10において好ましくは、リードデータ振分部13は、リード要求振分部12により読み出された複数の分割データD11〜D16が、ライト要求振分部11により分割される前の正常な順序となる様に、複数の分割データD11〜D16を並び替えて出力する。
換言すれば、メモリ制御装置10は、分割により得られたデータを個別に読み書きすることで、無効領域(パラレル損失)を極力小さくすると共に、バスに対するデータの配置効率を向上させる。これにより、メモリ制御装置10は、データ管理方法を複雑化することなく、伝送帯域の減少を抑制する。従って、IP伝送装置は、メモリ自体の動作周波数を上げて回路を高速化しなくとも、広帯域なデータ伝送を行うことができる。その結果、効率的なメモリ制御が実現可能となる。
図18を参照し、メモリ制御装置10によるメモリ制御の効果を詳細に説明する。上述した様に、メモリ制御装置10は、1つのコントローラで処理するデータ幅が16バイトであり、メモリ20のデータ幅である64バイトよりも狭いため、異なるデータD1〜D3を、従来よりも詰めた状態で処理することができる。例えば、データ用のバス幅Bが64バイトであり、200MHzのクロック周波数で動作する回路を想定する。この場合、65バイト長のデータが連続してメモリ制御装置10に入力した時の伝送帯域は、それぞれ以下の様に算出される。
まず、従来技術に係るメモリ制御装置は、1つのデータを64バイト単位で処理するため、データの転送効率は、65バイト/(64バイト×2)=0.51となる。従って、伝送帯域は、下記の数式(3)より、52.2Gbpsと算出される。
512ビット×200MHz×0.51=52.2Gbps・・・(3)
これに対し、本実施例に係るメモリ制御装置10は、1つのデータを4等分して16バイト単位で処理するため、データの転送効率は、65バイト/(16バイト×5)=0.81となる。従って、伝送帯域は、下記の数式(4)より、82.9Gbpsと算出される。
512ビット×200MHz×0.81=82.9Gbps・・・(4)
この様に、本実施例では、従来技術と比較して、上記想定下において、伝送帯域が、約30Gbps程度向上することとなる。65バイト以外のデータ長においても、同様の効果が得られる。図18は、本実施例に係るメモリ制御の効果を従来技術と対比して説明するための図である。図18では、横軸に、データ長(単位はバイト)が規定され、縦軸に、伝送帯域(単位はGbps)が規定されている。図18に示す様に、データ長が小さい程、換言すれば短いデータ程、無効領域の発生に起因するパラレル損失の影響を受け易いため、より大きな効果が得られる。本実施例では、特に、200バイト以下のデータ長において、帯域低下の改善が顕著である。なお、図18に示す伝送帯域の値は、理論値であり、メモリアクセスに伴って発生する他の損失(例えば、リード・ライトの切替え損失、リフレッシュによる損失等)の影響は考慮されていない。
(変形例1)
メモリ制御装置10は、以下に説明する変形態様を採ることもできる。図19は、変形例1に係るリード・ライトの競合回避処理を説明するための図である。変形例1では、メモリ20は、2つのメモリグループ21、22に分割される。メモリ制御装置10は、2つのメモリグループ21、22をリード用とライト用とに分けて制御することで、リードデータとライトデータとの競合による待ち合わせを回避する。
すなわち、メモリ10は、複数のメモリグループ21、22を内部に有する。メモリ制御装置10のライト要求振分部11は、複数の分割データD11〜D16に対する書込み要求と読出し要求とが同時に発生した場合、上記読出し要求に応じて分割データ(例えば、分割データD11〜D13)が読み出されたメモリ領域とは異なるメモリ領域に対し、上記書込み要求に応じた書込みを行うことを、複数のコントローラ15a〜15bに指示する。
より具体的には、メモリ制御装置10のリード要求振分部12は、リード要求とライト要求とが同時に発生していない場合には、リード要求のあったリードデータを、該データの格納されているメモリグループから読み出す。また、メモリ制御装置10のライト要求振分部11は、ライト要求のあったライトデータを、該要求が入力された時点でライト用セレクタ11aが選択しているメモリグループに書き込む。これに対して、リード要求とライト要求とが同時に発生した場合、リード要求振分部12は、リードデータに関しては、非同時発生時と同様に、リード用セレクタ13aにより、リード対象のデータを格納したメモリグループから読み出す。一方、ライトデータについては、ライト要求振分部11は、メモリグループ21、22の内、リード用に選択されているメモリグループとは反対のメモリグループを選択し、該メモリグループに対し、ライト対象のデータを書き込む。これにより、ライト処理は、常に、リード処理が行われていないメモリグループに対して実行されることとなる。その結果、1つのメモリグループ内におけるリード処理とライト処理の同時発生(競合)が未然に防止される。
伝送帯域が低下する要因としては、上述したデータ間における無効領域の発生以外に、上記待ち合わせの発生があるが、変形例1に係るメモリ制御装置10によれば、何れの要因も解消するため、伝送帯域の更なる向上が可能となる。
なお、上記実施例では、バス幅Bの分割数を4分割としたが、これに限らず、複数であればよい。但し、分割数が多過ぎると、メモリ制御装置に搭載すべきコントローラの数が増加し、回路規模が大きくなる、あるいは、アドレス制御用の回線が増加するといった問題が懸念される。従って、かかる問題が生じない程度の分割数(例えば、4〜8分割程度)であることが望ましい。
また、上記実施例では、メモリ制御装置10は、合計512ビットのバス幅を均等に4分割したため、分割データ長も、分割後の各バス幅に合わせて、固定長であるものとした。しかしながら、分割後の各バス幅がバス毎に異なる場合には、分割データ長も、バス幅に合わせて異なる(例えば、128ビットと256ビット)ものとしてもよい。
更に、上記実施例では、メモリ制御装置10とメモリ20とを接続するバスは、物理的に複数存在(例えば、4本)するものとしたが、メモリ制御装置10は、物理的には1本のバスを複数に分割して、論理的に複数のバスを形成するものとしてもよい。
また、メモリ制御装置10の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的態様は、図示のものに限らず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することもできる。例えば、メモリ制御装置10のリード要求振分部12とリードデータ振分部13、あるいは、ライト要求振分部11とリード要求振分部12をそれぞれ1つの構成要素として統合してもよい。また、データ管理用のメモリと、要求バッファ用のメモリとを共通化してもよい。反対に、データ管理部14に関し、ライトデータを管理する部分と、リードデータを管理する部分とに分散してもよい。更に、メモリ20を、ネットワークやケーブル経由でメモリ制御装置10と接続する様にしてもよい。同様に、データ管理部14は、メモリ制御装置10の外部装置として実装されるものとしてもよい。