以下、本発明のメモリコントローラ、及び情報処理装置を適用した実施の形態について説明する。
実施の形態のメモリコントローラ、及び情報処理装置について説明する前に、まず、図1乃至図5を用いて、比較例のメモリコントローラにおける問題点について説明する。
図1は、比較例の情報処理装置の一例としてのサーバ10のブロック構成を示す図である。
サーバ10は、システムボード20、CPU0、CPU1、CPU2、CPU3、CPUコントローラ30、メモリコントローラ40、及びRDIMM50を含む。
CPU0、CPU1、CPU2、CPU3、CPUコントローラ30、メモリコントローラ40、及びRDIMM50は、システムボード20に搭載されている。図1には、一例として、8つのRDIMM50を示す。
CPUコントローラ30は、CPU0、CPU1、CPU2、及びCPU3が、メモリコントローラ40を介してRDIMM50との間でデータの読み出し又は書き込みを行う際に、CPU0、CPU1、CPU2、及びCPU3とメモリコントローラ40との間でデータの受け渡しの制御を行う制御部である。
図1に示すCPUコントローラ30には、一例として、4つのCPU0〜CPU3が接続されている。
メモリコントローラ40は、CPU0、CPU1、CPU2、及びCPU3が、CPUコントローラ30を介してRDIMM50との間でデータの読み出し又は書き込みを行う際に、CPUコントローラ30とRDIMM50との間でデータの受け渡しの制御を行う制御部である。
図1に示すメモリコントローラ40には、一例として、8つのRDIMM50が接続されている。
CPU0〜CPU3は、CPUコントローラ30及びメモリコントローラ40を介して、RDIMM50に記憶されたデータの読み出し、又はRDIMM50へのデータの書き込みを行い、所定のプログラム等を実行し、演算処理を行う。
このように、図1に示すサーバ10は、複数のCPU0〜CPU3と、複数のRDIMM50とを含んでいる。
これに対して、デスクトップ型のPCは、例えば、1つのCPUと、1個又は2〜3個程度のUDIMMとを含み、CPUコントローラを含まない構成である。
次に、図2を用いて、比較例のメモリコントローラ40とRDIMM50の実装状態について説明する。
図2は、比較例のメモリコントローラ40とRDIMM50A、50Bの例示的な実装状態を示す側面図である。
図2では、説明の便宜上、2つのRDIMMを符号50A、50Bで区別するが、RDIMM50A、50Bは、図1に示す8つのRDIMM50のうちの2つである。図2に示さない他の6つのRDIMM50は、図2に示すRDIMM50A、50Bと同様に接続される。
なお、以下において、RDIMM50A、50Bを特に区別しない場合は、単にRDIMM50と称す。
上述のように、メモリコントローラ40とRDIMM50A、50Bは、システムボード20に搭載されている。
システムボード20は、ビア21A、21B、21C、及び層間配線22を有する。図2には、ビア21A、21B、21C、及び層間配線22を破線で示す。
ビア21A、21B、21Cは、それぞれ、システムボード20の上側と下側に示す2つの主面20A、20Bを接続するように厚さ方向に貫通している。
層間配線22は、システムボード20の厚さの略中央で、図中上側と下側に示す2つの主面20A、20Bに略並行に形成されている。
メモリコントローラ40は、バンプ23によってシステムボード20に実装されており、筐体40A内のIC(Integrated Circuit:集積回路)チップ41は、破線で示すメモリコントローラ40内の配線42とバンプ21を通じて、層間配線22に接続されている。ICチップ41は、CPUコントローラ30(図1参照)とRDIMM50A、50Bとの間でデータの受け渡しの制御を行う。
RDIMM50A、50Bは、システムボード20の主面20Aに配設されるソケット24A、24Bに差し込まれている。ソケット24A、24Bは、それぞれ、ビア21B、21Cに接続されている。なお、ソケット24A、24Bに形成されている配線25A、25Bを破線で示す。
RDIMM50A、50Bは、それぞれ、基板51A、51Bを有する。基板51A、51Bには、それぞれ、バンプ52A、52BによってSDRAM(Synchronous Dynamic Random Access Memory)53A、53Bが実装されている。すなわち、基板51A、51Bには、SDRAM53A、53Bが両面実装されている。
RDIMM50A、50Bは、それぞれ、バンプ52A、52Bを通じて、基板51A、51B内の層間配線54A、54Bに接続されている。層間配線54A、54Bは、それぞれ、ソケット24A、24Bの配線25A、25Bを通じてビア21B、21Cに接続されている。
以上のような配線構造により、メモリコントローラ40とRDIMM50A、50Bは、電気的に接続されている。メモリコントローラ40とRDIMM50とを接続する配線は、クロック信号、アドレス信号、データストローブ信号、及びデータを伝送する。
なお、図2では、システムボード20に実装されたメモリコントローラ40とRDIMM50A、50Bについて説明したが、UDIMMも図2に示すRDIMM50A、50Bと同様にシステムボードに実装され、メモリコントローラと接続される。
次に、図3を用いて、メモリコントローラ40とRDIMM50の間を接続する回路について簡単に説明する。
図3は、比較例のサーバ10内のメモリコントローラ40の回路を示す図である。図3には、メモリコントローラ40にRDIMM50A、50Bを接続した状態の回路を示す。なお、図3では、RDIMM50A、50B内のSDRAMを省略する。
メモリコントローラ40とRDIMM50の間では、上述のように、クロック信号、アドレス信号、データストローブ信号、及びデータが伝送される。
メモリコントローラ40は、ドライバ43、44、45、レシーバ46、ドライバ47、及びレシーバ48を有する。ドライバ43、44、45、レシーバ46、ドライバ47、及びレシーバ48は、それぞれ、ICチップ41(図2参照)に内蔵される素子である。
ドライバ43は、システムクロックが入力され、システムクロックから差動クロック信号を生成し、RDIMM50A、50Bに差動クロック信号を伝送する。
ドライバ44は、RDIMM50A、50Bのアドレス信号をデコードするデコーダ(図示せず)からアドレス信号が入力され、RDIMM50A、50Bにアドレス信号を伝送する。
ドライバ45は、データの読み出し/書き込みのタイミングを指定する差動ストローブ信号を生成し、RDIMM50A、50Bに伝送する。
ドライバ45が差動ストローブ信号を出力する一対の出力端子には、レシーバ46の一対の入力端子が接続されており、レシーバ46は、RDIMM50A、50Bから伝送される差動ストローブ信号を受信する。
ドライバ47は、RDIMM50A、50Bに書き込むデータを伝送する。ドライバ47の出力端子には、レシーバ48の入力端子が接続されており、レシーバ48は、RDIMM50A、50Bから読み出したデータを受信する。
なお、図1乃至図3では、サーバ10内のメモリコントローラ40とRDIMM50との接続関係について説明したが、例えばデスクトップ型のPC等におけるメモリコントローラとUDIMMとの接続関係は、UDIMMの数が少ないだけで基本的に同様である。
次に、図4及び図5を用いて、RDIMMとUDIMMのアドレス線のトポロジーの違いについて説明する。
図4は、RDIMM50のアドレス線の回路を示す図である。図5は、UDIMM60のアドレス線の回路を示す図である。
RDIMM50は、16個のSDRAM1〜SDRAM8及びSDRAM11〜SDRAM18、レジスタチップ55、アドレス線56、入力端子57、及び終端抵抗器58を含む。終端抵抗器58には、所定電圧(0.75V)の電源が接続されている。終端抵抗器58は、アドレス線56を伝送されるアドレス信号の反射を抑制するために、アドレス線56の終端におけるインピーダンス整合を取るために設けられている。
なお、終端抵抗器58に接続される電源の電圧(0.75V)は、アドレス信号の"0"と"1"の境界となる閾値に相当する。この閾値は、JEDECの規格によって決められている。
入力端子57には、メモリコントローラ40のドライバ44(図3参照)が接続され、メモリコントローラ40からアドレス信号が入力される。
アドレス線56は、入力端子57と終端抵抗器58との間に配線されており、レジスタチップ55が挿入されるとともに、レジスタチップ55の出力側においてSDRAM1〜SDRAM8及びSDRAM11〜SDRAM18に分配されるように接続されている。
アドレス信号は、メモリコントローラ40(図3参照)から入力端子57を介してアドレス線56に入力され、SDRAM1〜SDRAM8及びSDRAM11〜SDRAM18に入力される前に、レジスタチップ55で波形とタイミングが調整される。
このようにアドレスチップ55を挿入しているのは、主に、次のような理由によるものである。ブレードサーバのような大型のサーバでは、システムボード20(図2参照)に多数のRDIMM50を実装するため、メモリコントローラ40とRDIMM50との間でアドレス信号を伝送する配線が長くなる。アドレス信号を伝送する配線が長いと、伝送する間にアドレス信号が減衰する可能性がある。このため、RDIMM50にアドレス信号が入力された時点で、各SDRAMにアドレス信号を分配する前に、レジスタチップ55でアドレス信号の波形とタイミングを整えている。
次に、図5に示すUDIMM60について説明する。なお、ここでは、図3に示すRDIMM50A、50Bの代わりに1つのUDIMM60がシステムボード20に実装され、UDIMM60がメモリコントローラ40と接続されているものとして説明を行う。
UDIMM60は、16個のSDRAM1〜SDRAM8及びSDRAM11〜SDRAM18、アドレス線61、入力端子62、及び終端抵抗器63を含む。終端抵抗器63には、図4に示すRDIMM50と同様に、所定電圧(0.75V)の電源が接続されている。終端抵抗器63は、アドレス線61を伝送されるアドレス信号の反射を抑制するために、アドレス線61の終端におけるインピーダンス整合を取るために設けられている。
なお、終端抵抗器63に接続される電源の電圧(0.75V)は、アドレス信号の"0"と"1"の境界となる閾値に相当する。この閾値は、JEDECの規格によって決められている。
入力端子62には、メモリコントローラ40のドライバ44(図3参照)が接続され、メモリコントローラ40からアドレス信号が入力される。
アドレス線61は、入力端子62と終端抵抗器63との間に配線されており、入力端子62と終端抵抗器63との間においてSDRAM1〜SDRAM8及びSDRAM11〜SDRAM18に分配されるように接続されている。
アドレス信号は、メモリコントローラ40(図3参照)から入力端子62を介してアドレス線61に入力され、SDRAM1〜SDRAM8及びSDRAM11〜SDRAM18に直接入力される。UDIMM60は、レジスタチップを含まない。
ここで、一般的に、デスクトップ型のPCが含むUDIMM60は1個又は2〜3個程度である。従って、メモリコントローラ40とUDIMM60との間でアドレス信号を伝送する伝送線の長さは、ブレードサーバにおける伝送線に比べると非常に短い。
このため、デスクトップ型のPCには、一般に、UDIMM60が用いられている。
ところで、UDIMM60は、レジスタチップを含まないため、メモリコントローラ40から分配されるアドレス信号は、UDIMM60に含まれるすべてのSDRAMに直接分配される。
このため、UDIMM60では、アドレス線の電気的な負荷がRDIMM50よりも大きい。
例えば、UDIMM60に4bitのSDRAMが搭載されている場合、アドレス信号は、メモリコントローラ40から直接的に16個のSDRAMに分配されることになる。
このような場合には、メモリコントローラ40から1つのUDIMM60につき、16個のSDRAMがアドレス線を介して直接接続されることになるため、アドレス信号に反射波が発生し、各SDRAMが受信するアドレス信号の波形が乱れる可能性があるという問題があった。
UDIMM60の内部では、入力端子62に近いSDRAMと、入力端子62から遠いSDRAMがあるため、入力端子62からの距離の違いにより、反射波による波形の乱れが異なる可能性があった。
アドレス信号の波形が乱れると、アドレス指定を正しく行うことができなくなる可能性が生じるという問題があった。
以上のように、比較例のメモリコントローラ40は、UDIMM60に用いた場合に反射波の乱れによりアドレス指定を正しく行うことができなくなる可能性が生じるという問題があった。
以下の実施の形態では、アドレス信号の波形の乱れに起因する問題を解決し、例えば、RDIMMとUDIMMのようにアドレス線のトポロジーが異なるDIMMに対して汎用的に利用でき、正確なアドレス指定とデータの読み書き、及び製造コストの抑制を実現するメモリコントローラ及び情報処理装置について説明する。
<実施の形態>
図6は、実施の形態のメモリコントローラ100の回路を示す図である。図6には、メモリコントローラ100にRDIMM50A、50Bを接続した状態の回路を示す。なお、図6では、RDIMM50A、50B内のSDRAMを省略する。
以下で説明する本実施の形態のメモリコントローラ100は、比較例のメモリコントローラ40と同様にRDIMM50とCPUコントローラ30(図1参照)との間に接続される。このため、以下の説明では、図1乃至図5を援用し、図1乃至図5に示す構成要素と同一又は同等の構成要素には同一符号を付し、その説明を省略する。
メモリコントローラ100は、入力端子101、シフトレジスタ102、ドライバ103、及び出力端子104を含む。
メモリコントローラ100は、さらに、入力端子111、シフトレジスタ112、122、遅延部113、123、マルチプレクサ114、124、ドライバ115、入出力端子116、出力端子121、及びレシーバ125を含む。
メモリコントローラ100は、さらにまた、スルーレート設定指令生成部130、遅延指令生成部140、SPDコントローラ150、入力端子151、レシーバ152、及び初期設定部160を含む。
図6に示すRDIMM50A、50Bには、SPD(Serial Presence Detect)素子59を示す。SPD素子59は、DIMMのモジュールの容量、アクセス速度、アクセス方法等の諸元を表すデータが記憶されている。SPD素子59は、例えば、シリアルEEPROM(Electrically Erasable and Programmable Read Only Memory)チップである。
図6にはRDIMM50のSPD素子59を示すが、UDIMM60(図5参照)も同様のSPD素子を含む。
RDIMM50のSPD素子59には、RDIMMであることを示す諸元を表すデータが記憶されており、UDIMM60(図5参照)のSPD素子にはUDIMMであることを示す諸元を表すデータが記憶されている。
入力端子101は、図示しないデコーダから伝送されるアドレス信号をメモリコントローラ100に入力するための端子である。入力端子101の入力側には、図示しないデコーダが接続され、入力端子101の出力側にはシフトレジスタ102が接続される。
シフトレジスタ102は、入力端子101を介してデコーダから入力されるアドレス信号を一時的に保持する。シフトレジスタ102の出力側にはドライバ103が接続されている。
ドライバ103は、スルーレート設定指令生成部130から入力される設定値Dに基づき、シフトレジスタ102から入力されるアドレス信号のスルーレート(slew rate)を変更するスルーレート変更部の一例である。
また、スルーレート変更部の一例としてのドライバ103と、スルーレート設定指令生成部130は、アドレス信号のスルーレートを設定するためのスルーレート設定部の一例である。なお、ドライバ103の内部構成及び動作については、図7を用いて後述する。
出力端子104は、ドライバ103でスルーレートが設定されるアドレス信号をメモリコントローラ100からRDIMM50に出力する端子であり、RDIMM50の入力端子57(図4参照)に接続される。なお、メモリコントローラ100にUDIMM60(図5参照)を接続する場合には、出力端子104に入力端子62(図5参照)が接続される。
入力端子111は、RDIMM50に書き込むためのデータがメモリコントローラ100に入力される端子である。入力端子111の入力側には、CPUコントローラ30を介して、CPU0〜CPU3(図1参照)が接続される。
シフトレジスタ112は、入力端子111を介して入力される書き込み用のデータを一時的に保持する。シフトレジスタ112の出力側には遅延部113及びマルチプレクサ114が接続されている。
遅延部113は、シフトレジスタ112の出力側において分岐された信号線117A、117Bのうちの信号線117Aに挿入されている。遅延部113は、シフトレジスタ112から出力される書き込み用のデータに遅延を与えて出力する。遅延部113が書き込み用のデータに与える遅延時間は、システムクロックの1周期の時間に設定されている。なお、信号線117A、117Bは、ともにマルチプレクサ114の入力側に接続されている。また、遅延時間をシステムクロックの1周期の時間に設定する理由については後述する。
マルチプレクサ114は、遅延指令生成部140から入力される設定値Wに基づき、入力側に接続される信号線117A又は信号線117Bのいずれか一方を経て自己に入力される書き込み用のデータを選択して出力する。マルチプレクサ114の出力側は、ドライバ115に接続されている。
ドライバ115は、マルチプレクサ114の出力端子と、入出力端子116との間に挿入されており、入出力端子116を経てメモリコントローラ100から出力される書き込み用のデータの波形成形及び増幅を行う。ドライバ115の出力側において入出力端子116との間で分岐した信号線にはレシーバ125が接続される。
入出力端子116は、ドライバ115の出力側と、レシーバ125の入力側に接続されている。入出力端子116は、ドライバ115から伝送される書き込み用のデータをRDIMM50A、50Bに出力するとともに、RDIMM50A、50Bから伝送される読み出しデータをレシーバ125に入力する。
レシーバ125は、入出力端子116と、遅延部123及びマルチプレクサ124との間に接続され、入出力端子116を介してメモリコントローラ100に入力される読み出しデータを遅延部123及びマルチプレクサ124に伝送する。レシーバ125は、読み出しデータを遅延部123及びマルチプレクサ124に伝送する際に、読み出し用データの波形成形及び増幅を行う。
遅延部123は、レシーバ125の出力側において分岐された信号線127A、127Bのうちの信号線127Aに挿入されている。遅延部123は、レシーバ125から出力される読み出しデータに遅延を与えて出力する。遅延部123が読み出しデータに与える遅延時間は、システムクロックの1周期の時間に設定されている。なお、信号線127A、127Bは、ともにマルチプレクサ124の入力側に接続されている。また、遅延時間をシステムクロックの1周期の時間に設定する理由については後述する。
マルチプレクサ124は、遅延指令生成部140から入力される設定値Rに基づき、入力側に接続される信号線127A又は信号線127Bのいずれか一方を経て自己に入力される読み出しデータを選択して出力する。マルチプレクサ124の出力側は、シフトレジスタ122に接続されている。
ここで、遅延部113、マルチプレクサ114、遅延部123、及びマルチプレクサ124は、データの遅延時間を制御する遅延制御部の一例である。
また、遅延指令生成部140と、遅延制御部の一例としての遅延部113、マルチプレクサ114、遅延部123、及びマルチプレクサ124とは、データの遅延時間を設定する遅延設定部の一例である。
シフトレジスタ122は、マルチプレクサ124から出力される読み出しデータを一時的に保持し、出力端子121に伝送する。
出力端子121は、シフトレジスタ122から伝送される読み出しデータをメモリコントローラ100から出力するための端子である。出力端子121の出力側は、CPUコントローラ30を介して、CPU0〜CPU3(図1参照)が接続される。
スルーレート設定指令生成部130は、SPDコントローラ150から入力される制御信号に基づいて設定値Dの値を設定し、設定値Dをドライバ103に入力する。この結果、ドライバ103では、スルーレート設定指令生成部130から入力される設定値Dに基づいて、アドレス信号のスルーレートが設定される。すなわち、ドライバ103において設定されるアドレス信号のスルーレートは、設定値Dの値によって決められる。スルーレート設定指令生成部130としては、例えば、組合せ回路を用いることができる。
スルーレート設定指令生成部130は、メモリコントローラ100にRDIMM50が接続された場合は、アドレス信号のスルーレートが比較的高い値になるように設定値Dを設定する。この場合に、スルーレート設定指令生成部130は、スルーレートが最大値になるように設定値Dを設定してもよい。
また、スルーレート設定指令生成部130は、メモリコントローラ100にUDIMM60が接続された場合は、アドレス信号のスルーレートが比較的低い値になるように設定値Dを設定する。
すなわち、スルーレート設定指令生成部130は、UDIMM60が接続された場合に、RDIMM50が接続された場合よりもアドレス信号のスルーレートが低くなるように設定値Dを設定する。
これは、アドレス線におけるアドレス信号の反射の問題が発生する可能性がRDIMM50よりも高いUDIMM60の場合は、アドレス信号のスルーレートを低く設定することにより、アドレス線61でのアドレス信号の反射の発生を抑制するためである。
なお、スルーレート設定指令生成部130は、メモリコントローラ100にUDIMM60が接続された場合は、スルーレートが最小値になるように設定値Dを設定してもよい。
また、スルーレート設定指令生成部130は、アドレス信号のスルーレートに加えて、クロック、データストローブ信号、及びデータのスルーレートも設定する。スルーレート設定指令生成部130は、例えば、クロック、データストローブ信号、及びデータのスルーレートを最大値に設定する。
遅延指令生成部140は、SPDコントローラ150から入力される制御信号に基づいて設定値Wと設定値Rの値を設定し、設定値W、Rをそれぞれマルチプレクサ114、124に入力する。マルチプレクサ114、124において、それぞれ遅延部113、123を経由したデータを選択するか否かは、遅延指令生成部140が出力する設定値W、Rによって決められる。遅延指令生成部140としては、例えば、組合せ回路を用いることができる。
ここで、本実施の形態のメモリコントローラ100は、RDIMM50及びUDIMM60の両方に汎用的に利用できるものである。
しかしながら、RDIMM50はレジスタチップ55を含み、UDIMM60はレジスタチップを含まず、RDIMM50とUDIMM60はアドレス線のトポロジーが異なる。
このため、メモリコントローラ100をRDIMM50とUDIMM60とに対して汎用的に用いるためには、アドレス信号とデータとのタイミングを調整する必要がある。
本実施の形態のメモリコントローラ100の遅延指令生成部140は、RDIMM50が接続された場合のデータの読み取り時とデータの書き込み時とでマルチプレクサ114、124に入力する設定値W、Rの値(H(High)又はL(Low))を変更する。
同様に、遅延指令生成部140は、UDIMM60が接続された場合のデータの読み取り時とデータの書き込み時とでマルチプレクサ114、124に入力する設定値W、Rの値(H(High)又はL(Low))を変更する。
遅延指令生成部140は、RDIMM50とUDIMM60とを汎用的に接続できるようにするために、RDIMM50が接続された場合のデータの読み出し時には、設定値RをLレベルにする。これは、RDIMM50からデータを読み出す場合には、レジスタチップ55で生じるアドレス信号の遅延は問題にならないからである。
これにより、マルチプレクサ124は信号線127Bを選択するため、RDIMM50から読み出されるデータに遅延は与えられない。
また、遅延指令生成部140は、RDIMM50が接続された場合のデータの書き込み時には設定値WをHレベルにする。
これは、データの書き込み時に、レジスタチップ55によってアドレス信号がシステムクロックの1周期の時間(1τ)だけ遅延すると、書き込みデータとのタイミングがずれるため、マルチプレクサ114に信号線117Aを選択させて、遅延部113でデータに1τ分の遅延を与えるためである。
このように、RDIMM50へのデータの書き込み時にアドレス信号とデータとのタイミングを合わせるために、遅延部113の遅延時間は、レジスタチップ55におけるアドレス信号の遅延時間(1τ)と同一の時間に設定されている。
また、遅延指令生成部140は、UDIMM60が接続された場合のデータの読み出し時には設定値RをHレベルにする。これにより、マルチプレクサ124は信号線127Aを選択するため、UDIMM60から読み出されるデータには遅延部123で遅延が与えられる。
これは、RDIMM50からデータを読み出す場合にはレジスタチップ55でアドレス信号に遅延が生じ、メモリコントローラ100に読み出しデータが届くタイミングがUDIMM60よりも遅れるため、RDIMM50とUDIMM60とでタイミングを合わせるためである。
このように、データを読み出す場合にRDIMM50とUDIMM60とでタイミングを合わせるために、遅延部123の遅延時間は、レジスタチップ55におけるアドレス信号の遅延時間(1τ)と同一の時間に設定されている。
また、遅延指令生成部140は、UDIMM60が接続された場合のデータの書き込み時には設定値WをLレベルにする。
これは、レジスタチップを含まないUDIMM60ではアドレス信号の遅延が生じないため、データの書き込み時にデータに遅延を与える必要がないからである。この結果、マルチプレクサ114は信号線117Bを選択する。
入力端子151は、RDIMM50A、50BのSPD素子59に接続され、RDIMM50A、50Bの諸元を表すデータが入力される。入力端子151の出力側にはレシーバ152が接続される。
レシーバ152は、入力端子151から入力される諸元を表すデータを受信し、SPDコントローラ150に伝送する。
SPDコントローラ150は、入力端子151及びレシーバ152を経て入力されるデータに基づき、出力端子104及び入出力端子116に接続されるDIMMがRDIMM50又はUDIMM60のいずれであるかを判定する判定部の一例である。
SPDコントローラ150としては、例えば、シーケンサを用いることができる
ここで、図4及び図5に示したように、RDIMM50とUDIMM60とは、アドレス線のトポロジーが異なるため、RDIMM50のSPD素子と、UDIMM60のSPD素子とに記憶されている諸元を表すデータは、互いに異なる。
このため、SPDコントローラ150は、RDIMM50又はUDIMM60のSPD素子に記憶された諸元を表すデータを読み取ることにより、アドレス線のトポロジーの違いに基づいて、出力端子104及び入出力端子116に接続されるDIMMがRDIMM50又はUDIMM60のいずれであるかを判定する。なお、RDIMM50又はUDIMM60のSPD素子に記憶された諸元を表すデータについては、図7A、図7Bを用いて後述する。
初期設定部160は、メモリコントローラ100の電源が投入されると、スルーレート設定指令生成部130の設定値W、Rと、遅延指令生成部140の設定値Dを初期値に設定する。
次に、図7A、図7Bを用いて、RDIMM又はUDIMMのSPD素子に記憶された諸元を表すデータについて説明する。
図7Aは、RDIMM又はUDIMMのSPD素子に記憶された諸元を表すデータの一部を示す図であり、図7Bは、図7Aに示すデータのデータビット[3:0]の値の具体例を示す図である。
このように図7A及び図7Bに示すデータは、JEDEC standard No. 21-Cによって定められている。
図7Aは、SPD素子59(図6参照)のByteアドレス3(00000011)のデータビット[7:0]のデータ構造を示す図である。SPD素子59のByteアドレス3のデータビット[7:0]には、RDIMM又はUDIMMのいずれであるかを示すデータが含まれている。
データビット[7:0]のうちのデータビット[3:0]の値は定義されており、それぞれ、D3、D2、D1、D0である。データビット[7:0]のうちのデータビット[3:0]以外の値は、未定義である。
図7Bに示すように、データビット[3:0]の各ビットの値D3、D2、D1、D0の値は、第2項に示すように、D3、D2、D1、D0が0、0、0、1のものがRDIMMに割り当てられている。また、第3項に示すように、D3、D2、D1、D0が0、0、1、0のものがUDIMMに割り当てられている。
なお、第1項に示すD3、D2、D1、D0が0、0、0、0のデータは未定義であり、図7Bでは第4項以下を省略する。
SPDコントローラ150は、図7A及び図7Bに示すデータに基づいて、出力端子104及び入出力端子116に接続されるDIMMがRDIMM50又はUDIMM60のいずれであるかを判定する。
次に、図8を用いて、実施の形態のメモリコントローラ100のドライバ103の内部回路について説明する。
図8は、実施の形態のメモリコントローラ100のドライバ103の回路を示す図である。
ドライバ103は、入力端子200、PMOS(P type Metal Oxide Semiconductor)トランジスタ201、203、NMOS(N type Metal Oxide Semiconductor)トランジスタ202、204、設定レジスタ210、インバータ211、212、213、バイアス回路220、230、保護抵抗器241、242、及び出力端子250を含む。
入力端子200は、ドライバ103の入力端子であり、シフトレジスタ102(図6参照)の出力端子に接続されている。入力端子200にはシフトレジスタ102からアドレス信号が入力される。
PMOSトランジスタ201とNMOSトランジスタ202は、CMOS(Complementary Metal Oxide Semiconductor)回路を構築する。
PMOSトランジスタ201とNMOSトランジスタ202のゲートには、入力端子200が接続される。PMOSトランジスタ201のドレインには電源(VCC)が接続され、ソースはNMOSトランジスタ202のドレインに接続される。NMOSトランジスタ202のソースは接地される。
PMOSトランジスタ201のソースとNMOSトランジスタ202のドレインとの接続部205には、PMOSトランジスタ203のゲートとNMOSトランジスタ204のゲートとが接続される。接続部205は、PMOSトランジスタ201とNMOSトランジスタ202を含むCMOS回路の出力部である。
PMOSトランジスタ203とNMOSトランジスタ204は、CMOS回路を構築する。PMOSトランジスタ203のゲート、及びNMOSトランジスタ204のゲートには、接続部205が接続される。PMOSトランジスタ203のドレインは、バイアス回路220の出力端子224に接続され、ソースは保護抵抗器241及び242を介してNMOSトランジスタ204のドレインに接続される。
NMOSトランジスタ204のソースはバイアス回路230の入力端子234に接続される。PMOSトランジスタ203のソースとNMOSトランジスタ204のドレインとの間に接続される保護抵抗器241及び242の接続点206は、ドライバ103の出力端子250に接続されている。
ここで、入力端子200に入力されるアドレス信号が"1"の場合、PMOSトランジスタ201がオフになり、NMOSトランジスタ202がオンになる。このため、接続部205の電位は接地電位になる。
この結果、PMOSトランジスタ203がオンになり、NMOSトランジスタ204はオフになる。
このとき、バイアス回路220内のPMOSトランジスタP1、P2、P3のうちのいずれかがオンになれば、バイアス回路220からPMOSトランジスタ203に所定の電流値のバイアス電流が流れる。
このように、入力端子200にアドレス信号の"1"が入力されてPMOSトランジスタ203がオンになり、バイアス回路220から所定の電流値のバイアス電流が出力されると、PMOSトランジスタ203及び保護抵抗器241を通じて、出力端子250から電流が出力される。
これにより、出力端子250の電位がアドレス信号の"1"/"0"の境界を表す電位よりも高電位になり、アドレス信号の"1"が出力端子250から出力される。
一方、入力端子200に入力されるアドレス信号が"0"の場合、PMOSトランジスタ201がオンになり、NMOSトランジスタ202がオフになる。このため、接続部205の電位は、電源(VCC)の電位になる。
この結果、PMOSトランジスタ203がオフになり、NMOSトランジスタ204がオンになる。
このとき、バイアス回路230内のNMOSトランジスタN1、N2、N3のうちのいずれかがオンになれば、NMOSトランジスタ204からバイアス回路230に電流が流入する。
このように、入力端子200にアドレス信号の"0"が入力されてNMOSトランジスタ204がオフになり、バイアス回路230に所定の電流値のバイアス電流が流入すると、NMOSトランジスタ204及び保護抵抗器242を通じて、出力端子250から電流が流入する。
これにより、出力端子250の電位がアドレス信号の"1"と"0"の境界を表す電位よりも低電位になり、アドレス信号の"0"が出力端子250から出力される。
以上のように、アドレス信号の"1"と"0"が出力端子250を経てドライバ103から出力される。
次に、設定レジスタ210とバイアス回路220、230の回路構成について説明する。
設定レジスタ210は、3ビットのデータ領域を有しており、3ビットのデータ領域は、それぞれ、データS1、S2、S3を保持する。設定レジスタ210には、スルーレート設定指令生成部130(図6参照)から3ビットの設定値Dが入力される。設定値Dが設定レジスタ210に入力されると、データS1、S2、S3として保持される。
設定レジスタ210の各データ領域が保持するデータS1、S2、S3は、インバータ211、212、213を介してバイアス回路220に入力されるとともに、バイアス回路230に直接入力される。
バイアス回路220とバイアス回路230は、同一の回路構成を有しているが、バイアス回路220はアドレス信号の"1"のデータを出力するために用いられ、バイアス回路230はアドレス信号の"0"のデータを出力するために用いられる。
上述のように、バイアス回路220とバイアス回路230とは、出力端子250との間でバイアス電流が流れる方向が異なる。バイアス回路220と出力端子250との間では、バイアス回路220から出力端子250に向かって電流が流れる。一方、バイアス回路230と出力端子250との間では、出力端子250からバイアス回路230に向かって電流が流れる。
バイアス回路220は、PMOSトランジスタP1、P2、P3、NMOSトランジスタN1、N2、N3、入力端子221、222、223、及び出力端子224を含む。PMOSトランジスタP1、P2、P3と、NMOSトランジスタN1、N2、N3とは、それぞれ、添え数字が等しいP型とN型のトランジスタ同士でCMOS回路を構築する。
入力端子221、222、223には、それぞれ、インバータ211、212、213の出力端子が接続されている。入力端子221、222、223には、それぞれ、設定レジスタ210から出力されるデータS1、S2、S3がインバータ211、212、213で反転されて入力される。
PMOSトランジスタP1のゲートと、NMOSトランジスタN1のゲートには、入力端子221を介して、インバータ211の出力端子が接続されている。同様に、PMOSトランジスタP2のゲートと、NMOSトランジスタN2のゲートには、入力端子222を介して、インバータ212の出力端子が接続されている。また、PMOSトランジスタP3のゲートと、NMOSトランジスタN3のゲートには、入力端子223を介して、インバータ213の出力端子が接続されている。
PMOSトランジスタP1、P2、P3のドレインは、それぞれ、電源(VCC)に接続される。PMOSトランジスタP1、P2、P3のソースは、それぞれ、NMOSトランジスタN1、N2、N3のドレインに接続される。NMOSトランジスタN1、N2、N3のソースは接地される。なお、PMOSトランジスタP1、P2、P3のソースと、NMOSトランジスタN1、N2、N3のドレインとの接続部を、それぞれ、接続部225、226、227とする。
接続部225、226、227は、すべて、出力端子224を介してPMOSトランジスタ203のドレインに接続されている。
このようなバイアス回路220に、データS1、S2、S3として"1"、"1"、"1"がインバータ211、212、213を通じて入力されると、PMOSトランジスタP1、P2、P3がオンになり、NMOSトランジスタN1、N2、N3がオフになる。
このため、PMOSトランジスタP1、P2、P3から接続部225、226、227を通じて、PMOSトランジスタ203にバイアス電流が供給される。
また、バイアス回路220に、データS1、S2、S3として"0"、"0"、"0"が入力されると、PMOSトランジスタP1、P2、P3がオフになり、NMOSトランジスタN1、N2、N3がオンになる。このため、PMOSトランジスタ203にバイアス電流は供給されない。
このため、データS1、S2、S3のうち、少なくともいずれか1つを"1"にすることにより、"1"のデータに対応するPMOSトランジスタ(P1、P2、P3のいずれか)がオンになり、オンになったPMOSトランジスタ(P1、P2、P3のいずれか)からバイアス電流がPMOSトランジスタ203に供給される。
データS1、S2、S3のうち"1"にするデータの数を増やすことにより、オンになるPMOSトランジスタ(P1、P2、P3のいずれか)の数が増え、バイアス回路220から出力されるバイアス電流の電流値が増大する。
ここで、バイアス回路220のPMOSトランジスタP1、P2、P3、及びNMOSトランジスタN1、N2、N3は、3ビットのデータS1、S2、S3の値をインクリメントすることにより、段階的にバイアス電流の値が変化するように、サイズ比が決められている。
バイアス回路220のPMOSトランジスタP1、P2、P3のサイズ比、及びNMOSトランジスタN1、N2、N3のサイズ比については後述する。
また、バイアス回路230は、PMOSトランジスタP1、P2、P3、NMOSトランジスタN1、N2、N3、及び入力端子231、232、233、234を含む。PMOSトランジスタP1、P2、P3と、NMOSトランジスタN1、N2、N3とは、それぞれ、添え数字が等しいP型とN型のトランジスタ同士でCMOS回路を構築する。
入力端子231、232、233には、それぞれ、設定レジスタ210の各データ領域が保持するデータS1、S2、S3が直接入力される。
PMOSトランジスタP1のゲートと、NMOSトランジスタN1のゲートとには、入力端子231を介して、設定レジスタ210からデータS1が入力される。同様に、PMOSトランジスタP2のゲートと、NMOSトランジスタN2のゲートとには、入力端子232を介して、設定レジスタ210からデータS2が入力される。また、PMOSトランジスタP3のゲートと、NMOSトランジスタN3のゲートとには、入力端子233を介して、設定レジスタ210からデータS3が入力される。
PMOSトランジスタP1、P2、P3のドレインは、それぞれ、電源(VCC)に接続される。PMOSトランジスタP1、P2、P3のソースは、それぞれ、NMOSトランジスタN1、N2、N3のドレインに接続される。NMOSトランジスタN1、N2、N3のソースは接地される。なお、PMOSトランジスタP1、P2、P3のソースと、NMOSトランジスタN1、N2、N3のドレインとの接続部を、それぞれ、接続部235、236、237とする。
接続部235、236、237は、すべて、入力端子234を介してNMOSトランジスタ204のソースに接続されている。
このようなバイアス回路230は、上述のように、アドレス信号の"0"を出力するために用いられる。出力端子250からバイアス回路230に向かって電流が流れることにより、出力端子250の電位が低下し、出力端子250から出力されるアドレス信号が"0"になる。
このようなバイアス回路230に、データS1、S2、S3として"1"、"1"、"1"が入力されると、PMOSトランジスタP1、P2、P3がオフになり、NMOSトランジスタN1、N2、N3がオンになる。
このため、NMOSトランジスタN1、N2、N3及び接続部235、236、237を通じて、NMOSトランジスタ204のソースが接地される。このとき、NMOSトランジスタ204がオンになれば、出力端子250から保護抵抗器242及びNMOSトランジスタ204を通じて、バイアス電流がバイアス回路220に流入する。
また、バイアス回路230に、データS1、S2、S3として"0"、"0"、"0"が入力されると、PMOSトランジスタP1、P2、P3がオンになり、NMOSトランジスタN1、N2、N3がオフになる。このとき、NMOSトランジスタ204がオンになっても、バイアス回路220にバイアス電流は流入しない。
このため、データS1、S2、S3のうち、少なくともいずれか1つを"1"にすることにより、"1"のデータに対応するNMOSトランジスタ(N1、N2、N3のいずれか)がオンになり、オンになったNMOSトランジスタ(N1、N2、N3のいずれか)を通じて、出力端子250からバイアス電流がバイアス回路220に流入する。
データS1、S2、S3のうち"1"にするデータの数を増やすことにより、オンになるNMOSトランジスタ(N1、N2、N3のいずれか)の数が増え、バイアス回路230に流入するバイアス電流の電流値が増大する。
ここで、バイアス回路230のPMOSトランジスタP1、P2、P3、及びNMOSトランジスタN1、N2、N3は、3ビットのデータS1、S2、S3の値をインクリメントすることにより、段階的にバイアス電流の値が変化するように、サイズ比が決められている。
バイアス回路230のPMOSトランジスタP1、P2、P3のサイズ比、及びNMOSトランジスタN1、N2、N3のサイズ比については後述する。
なお、図8におけるPMOSトランジスタ201、203、NMOSトランジスタ202、204のドレインとソースの接続関係は、上述した接続関係とは逆であってもよい。
同様に、バイアス回路220、230内のPMOSトランジスタP1、P2、P3とNMOSトランジスタN1、N2、N3のドレインとソースの接続関係も、上述した接続関係とは逆であってもよい。
次に、図8に示すバイアス回路220、230のバイアス電流と、出力端子250から出力されるアドレス信号のスルーレートの関係について説明する。
本実施の形態のメモリコントローラ100は、図8に示すバイアス回路220からPMOSトランジスタ203に供給するバイアス電流の電流値を制御することによってアドレス信号のデータ"1"のスルーレートを制御する。
また、メモリコントローラ100は、図8に示すNMOSトランジスタ204からバイアス回路230に流入するバイアス電流の電流値を制御することによってアドレス信号のデータ"0"のスルーレートを制御する。
アドレス信号のスルーレートの制御には、PMOSトランジスタ203とNMOSトランジスタ204の寄生容量を利用する。
ここで、寄生容量Cのトランジスタのドレイン−ソース間に流れる電流Iとドレイン又はソースから出力される出力電圧Vの関係は、V=(1/C)×(dI/dt)で表される。tは時間を表す。
このため、Cが一定値の場合、電流Iが大きければ出力電圧Vの立ち上がりと立ち下がりは早くなり、電流Iが小さければ出力電圧Vの立ち上がりと立ち下がりは緩やかになる。すなわち、電流Iの電流値を幾つかの値に設定すれば、トランジスタに流れる電流Iの立ち上がりと立ち下がりの緩急を調整することができる。
メモリコントローラ100は、バイアス回路220、230でPMOSトランジスタ203、NMOSトランジスタ204のバイアス電流の電流値を設定することにより、PMOSトランジスタ203、NMOSトランジスタ204を通じて出力端子250から出力されるアドレス信号のスルーレートを設定する。
次に、バイアス回路220、230のPMOSトランジスタP1、P2、P3とNMOSトランジスタN1、N2、N3のサイズ比、設定レジスタ210のデータS1、S2、S3、及びバイアス回路220、230におけるバイアス電流の関係について説明する。
図9は、実施の形態のメモリコントローラ100における設定レジスタ210のデータS1、S2、S3と、バイアス回路220、230のバイアス電流と、アドレス信号のスルーレートの関係を表す。
設定レジスタ210のデータS1、S2、S3は、図9に示すように、"0"、"0"、"0"から"1"、"1"、"1"の値を取り得る。
ただし、データS1、S2、S3が"0"、"0"、"0"の場合は、バイアス回路220はPMOSトランジスタP1〜P3がすべてオフになり、バイアス回路230はNMOSトランジスタN1〜N3がすべてオフになり、バイアス回路220、230ともにバイアス電流が流れない。
従って、データS1、S2、S3が"0"、"0"、"0"の場合はアドレス信号を出力することができない。
このため、データS1、S2、S3が"0"、"0"、"0"になる場合については、設定レジスタ210で用いないこととする。
バイアス回路220、230のPMOSトランジスタP1〜P3及びNMOSトランジスタN1〜N3のサイズ比は、図9の第2項から第8項に示すように設定レジスタ210のデータS1、S2、S3が下位ビットS3から順に"1"になると、バイアス電流が順次増大して行くように設定されている。
PMOSトランジスタP1〜P3のサイズ比の設定は、例えば、PMOSトランジスタP1〜P3のゲート長又はゲート幅等を設定することによって行えばよい。
同様に、NMOSトランジスタN1〜N3のサイズ比の設定は、例えば、NMOSトランジスタN1〜N3のゲート長又はゲート幅等を設定することによって行えばよい。
ここで、上述のように、出力端子250(図8参照)から出力されるアドレス信号のスルーレートは、バイアス回路220、230に流れるバイアス電流の電流値に応じて変化する。
このため、図9に示すように、設定レジスタ210のデータS1、S2、S3が下位ビットS3から順に"1"になる場合にバイアス電流が順次増大するようにPMOSトランジスタP1〜P3及びNMOSトランジスタN1〜N3のサイズ比を設定すれば、アドレス信号のスルーレートが順次増大するように設定することができる。
バイス回路220、230のバイアス電流の電流値は、設定レジスタ210のデータS1、S2、S3が"0"、"0"、"1"の場合に最小である。このとき、スルーレートも最小となる。
また、バイス回路220、230のバイアス電流の電流値は、設定レジスタ210のデータS1、S2、S3が"1"、"1"、"1"の場合に最大である。このとき、スルーレートも最大となる。
次に、図10A、図10Bを用いて、アドレス信号のスルーレートの違いについて説明する。
図10Aは、実施の形態のメモリコントローラ100でスルーレートを最大にした場合のアドレス信号の立ち上がり波形のシミュレーション結果を示す図である。
図10Bは、実施の形態のメモリコントローラ100でスルーレートを最小にした場合のアドレス信号の立ち上がり波形のシミュレーション結果を示す図である。
ここで、図10A及び図10Bに示すアドレス信号のスルーレートの評価は、電圧が0.65(V)から0.85(V)までの0.2(V)だけ上昇する時間を求めて行った。
RDIMM及びUDIMMのアドレス信号の"0"と"1"の境界を表す閾値は、JEDECの規格によって0.75(V)と決められており、また、閾値のばらつきについても、下限値が0.65(V)で上限値が0.85(V)と決められている。
このため、スルーレートの評価は、電圧が0.65(V)から0.85(V)まで上昇する時間を求めて行うことにした。
図10Aに示すアドレス信号の立ち上がりのスルーレートは、43(ps(pico second))の間に電圧が0.65(V)から0.85(V)まで0.2(V)上昇しているため、4.65(V/ns(nano second))である。
図10Bに示すアドレス信号の立ち上がりのスルーレートは、110(ps)の間に電圧が0.65(V)から0.85(V)まで0.2(V)上昇しているため、1.8(V/ns)である。
実施の形態のメモリコントローラ100は、一例として、設定レジスタ210のデータS1、S2、S3を "1"、"1"、"1"(図9に示す第8項)に設定することにより、アドレス信号のスルーレートを図10Aに示すように最大値に設定する。
また、実施の形態のメモリコントローラ100は、一例として、設定レジスタ210のデータS1、S2、S3を"0"、"0"、"1" (図9に示す第2項)に設定することにより、アドレス信号のスルーレートを図10Bに示すように最小値に設定する。
また、実施の形態のメモリコントローラ100は、設定レジスタ210のデータS1、S2、S3を"1"、"1"、"1"と"0"、"0"、"1"の間の値(図9に示す第3項から第7項の値)に設定することにより、アドレス信号のスルーレートを図10Aと図10Bとの間の値に設定する。
次に、図11及び図12を用いて、アドレス信号のスルーレートを最大又は最小にした場合に、UDIMM60のSDRAM1とSDRAM8が受信するアドレス信号のアイパターンについて説明する。
図11Aは、アドレス信号のスルーレートを最大にした場合に、UDIMM60のSDRAM1が受信するアドレス信号のアイパターンを示し、図11Bは、アドレス信号のスルーレートを最大にした場合に、UDIMM60のSDRAM8が受信するアドレス信号のアイパターンを示す。
図12Aは、アドレス信号のスルーレートを最小にした場合に、UDIMM60のSDRAM1が受信するアドレス信号のアイパターンを示し、図12Bは、アドレス信号のスルーレートを最小にした場合に、UDIMM60のSDRAM8が受信するアドレス信号のアイパターンを示す。
図11A、図11B、図12A、図12Bでは、横軸に時間、縦軸に電圧をとってアイパターンを示す。
また、ここでは、RDIMM及びUDIMMのアドレス信号の"0"と"1"の境界を表す閾値の下限値(0.65(V))と上限値(0.85(V))との間にある有効な窓幅を求めた。
図11Aに示すアイパターンでは、有効な窓幅は、点A1と点B1との間であり、900.94(ps)である。また、図11Bに示すアイパターンでは、有効な窓幅は、点C1と点D1との間であり、1.129(ns)である。
図11A、図11Bは、RDIMM50用のスルーレートのアドレス信号をUDIMM60に入力した場合のアイパターンを示している。
このため、入力端子62(図5参照)から見て最も奥に位置するSDRAM8のアイパターン(図11B)の方が、入力端子62から見て最も手前に位置するSDRAM1のアイパターン(図11A)よりも有効な窓幅が狭くなっている。
これは、入力端子62から見て手前側に位置するSDRAM1の方が、入力端子62から見て奥側に位置するSDRAM8よりも、アドレス信号の反射による影響が顕著に現れていることを示している。
これに対して、アドレス信号のスルーレートを最小に設定した場合のアイパターンは、図12A及び図12Bに示す通りである。
図12Aに示すアイパターンでは、有効な窓幅は、点A2と点B2との間であり、1.949(ns)である。また、図12Bに示すアイパターンでは、有効な窓幅は、点C2と点D2との間であり、1.6813(ns)である。
このように、アドレス信号のスルーレートを最小にしてUDIMM60に入力すると、入力端子62に最も近いSDRAM1のアイパターンの有効な窓幅は、図11Aに示すアイパターンの2倍以上に広がった。
また、入力端子62から見て最も奥に位置するSDRAM8のアイパターンの有効な窓幅は、図11Bに示すアイパターンの約1.5倍に広がった。
以上より、アドレス信号のスルーレートを低下させてUDIMM60に入力すると、アドレス信号の反射による影響を抑制できることが分かった。
次に、図13を用いて、メモリコントローラ100にRDIMM50又はUDIMM60が接続された場合に、メモリコントローラ100が実行する処理について説明する。
図13は、実施の形態のメモリコントローラ100にRDIMM50又はUDIMM60が接続された場合に、メモリコントローラ100のSPDコントローラ150が実行する処理を示す図である。
SPDコントローラ150は、メモリコントローラ100の電源が投入されると、処理を開始し、SPD素子に記憶されたデータを読み込む(ステップS1)。
次いで、SPDコントローラ150は、SPD素子から読み込んだデータに基づき、DIMMの種類を判定する(ステップS2)。
SPDコントローラ150は、ステップS2でメモリコントローラ100にRDIMM50が接続されたと判定すると、スルーレート設定指令生成部130にクロック、アドレス信号、データストローブ信号、及びデータのスルーレートをRDIMM用に設定させる(ステップS3R)。
この結果、スルーレート設定指令生成部130は、クロック、データストローブ信号、及びデータのスルーレートを最大値(max)に設定するとともに、初期設定部160によって保持される値に応じて、アドレス信号のスルーレートをRDIMM用の値(比較的高い値)に設定する。
ステップS3Rの処理が終了すると、メモリコントローラ100は、クロック、アドレス信号、データストローブ信号、及びデータのタイミング設定を行う(ステップS4R)。
以上により、処理が終了する。
一方、SPDコントローラ150がステップS2でメモリコントローラ100にUDIMM50が接続されたと判定すると、スルーレート設定指令生成部130にクロック、アドレス信号、データストローブ信号、及びデータのスルーレートをUDIMM用に設定させる(ステップS3U)。
この結果、スルーレート設定指令生成部130は、クロック、データストローブ信号、及びデータのスルーレートを最大値(max)に設定するとともに、初期設定部160によって保持される値に応じて、アドレス信号のスルーレートをUDIMM用の値(比較的低い値)に設定する。
ステップS3Uの処理が終了すると、メモリコントローラ100は、クロック、アドレス信号、データストローブ信号、及びデータのタイミング設定を行う(ステップS4U)。
以上により、処理が終了する。
次に、図14の真理値表を用いて、実施の形態のメモリコントローラ100のSPDコントローラ150の動作について説明する。
図14は、実施の形態のメモリコントローラ100のスルーレート設定指令生成部130及び遅延指令生成部140の動作を示す真理値表を示す図である。
図14には、スルーレート設定指令生成部130及び遅延指令生成部140への入力として、第1項から第8項までの初期設定値とSPDコントローラ150の出力(判定結果)を示す。
初期設定値は、初期設定部160(図6参照)が保持する2ビットのデータで表される値であり、"00"、"01"、"10"、"11"の値を取り得る。
初期設定値は、アドレス信号のスルーレートを微調整するために用いる値である。UDIMM60用のアドレス信号のスルーレートは、初期設定値が"00"のときに最小値となり、"00"よりも"11"にシフトするに連れてスルーレートが大きくなるように設定されている。
また、RDIMM50用のアドレス信号のスルーレートは、初期設定値が"00"のときに最大値となり、"00"よりも"11"にシフトするに連れてスルーレートが大きくなるように設定されている。
初期設定値は、例えば、RDIMM50又はUDIMM60をメモリコントローラ100に接続する前に、RDIMM50又はUDIMM60のアドレス信号のスルーレートを調整しながらオシロスコープ等で観測し、波形の特性に応じて決定し、予め初期設定部160に設定しておけばよい。
特に、レジスタチップを含まないUDIMM60は、内部のアドレス線61(図5参照)でのアドレス信号の反射があるため、個体差等に応じて最適な初期設定値を決定すればよい。
また、図14には、スルーレート設定指令生成部130で設定される設定値Dと、遅延指令生成部140で設定される設定値R、Wを示す。設定値Dは3ビットのデータであり、ドライバ103の設定レジスタ210(図6参照)に入力されると、データS1、S2、S3として保持される。
また、図14には、第1項から第8項までの設定値R、W、Dとスルーレートの関係を示す。
上述のように、スルーレート設定指令生成部130は、設定レジスタ210のデータS1、S2、S3を設定するための3ビットの設定値Dを設定する。また、図9に示したように、設定レジスタ210のデータS1、S2、S3は"0"、"0"、"1"から"1"、"1"、"1"まで変化する。
このため、スルーレート設定指令生成部130は、設定値Dを"001"から"111"まで変化させる。
また、上述のように、遅延指令生成部140は、RDIMM50からデータを読み出すときは設定値RをLレベルに設定し、RDIMM50にデータを書き込むときは設定値WをHレベルにする。
遅延指令生成部140は、UDIMM60からデータを読み出すときは設定値RをHレベルに設定し、UDIMM60にデータを書き込むときは設定値WをLレベルにする。
このため、スルーレート設定指令生成部130で設定される設定値Dと、遅延指令生成部140で設定される設定値R、Wは、図14に示すように、第1項から第8項まで設定される。
第1項から第4項は、SPDコントローラ150によってRDIMM50が接続されたと判定された場合に相当する。
この場合に、初期設定値("00"〜"11")に応じて、第1項から第4項まで設定値Dが"111"から"100"まで変化し、これに応じて、スルーレートは段階的に低下する。
なお、第1項から第4項では、設定値RはLレベル、設定値WはHレベルにそれぞれ設定される。
また、第8項から第5項は、SPDコントローラ150によってUDIMM60が接続されたと判定された場合に相当する。
この場合に、初期設定値("00"〜"11")に応じて、第8項から第5項まで設定値Dが"001"から"100"まで変化し、これに応じて、スルーレートは段階的に増大する。
なお、第8項から第5項では、設定値RはHレベル、設定値WはLレベルにそれぞれ設定される。
本実施の形態のメモリコントローラ100によれば、図14に示す初期設定値、スルーレート設定指令生成部130で設定される設定値D、遅延指令生成部140で設定される設定値R、Wを用いることにより、RDIMM50とUDIMM60とを汎用的に利用することができる。
また、特に、メモリコントローラ100にUDIMM60を接続する場合は、アドレス信号のスルーレートを比較的低く設定するため、UDIMM60のアドレス線61におけるアドレス信号の反射の発生を抑制することができる。
また、メモリコントローラ100はRDIMM50とUDIMM60とに汎用的に利用できるため、従来のようにRDIMM50とUDIMM60用に別々のメモリコントローラを用意する必要がなくなる。
これにより、RDIMM50に利用できるメモリコントローラ100を従来よりも安価に提供することができる。
そして、この結果、RDIMM50を実装したブレードサーバのような大型の情報処理装置のコストダウンを図ることができる。
以上より、本実施の形態によれば、アドレス線のトポロジーの異なるいずれのDIMMに対してもアドレス指定とデータの読み書きを正確に行うことができるとともに、製造コストを抑制したメモリコントローラ及び情報処理装置を提供することができる。
なお、以上では、初期設定部160が保持する初期設定値に応じてアドレス信号のスルーレートを最大値と最小値との間で段階的に設定する形態について説明したが、メモリコントローラ100にRDIMM50が接続された場合には一律にアドレス信号のスルーレートを最大値に設定してもよい。
同様に、メモリコントローラ100にUDIMM60が接続された場合には一律にアドレス信号のスルーレートを最小値に設定してもよい。
以上、本発明の例示的な実施の形態のメモリコントローラ、及び情報処理装置について説明したが、本発明は、具体的に開示された実施の形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。