DRAMの内部動作
DDR DRAMは、おおざっぱにいって以下のような手順で操作をする。
アクティベートコマンドでバンクを開く
リードライトのコマンドを発行するする
最後に該当バンクをプリチャージするコマンドを発行する
ここでは、アクティベートやプリチャージが実際に何をしているのか、DRAMの内部構造から追ってみたい。
DRAMの一つのバンクは、おおよそ以下のような構造になっている。中にはコンデンサがしきつめられており、このコンデンサに充放電することで0/1を記憶させる。
ここでは、READに必要な一連の動作を追ってみよう。
まずDRAMの初期化時に、PALLコマンドを入力する。これは、図中のプリチャージ用FETのゲートを開き、全バンクの全ビット線をVdd/2の電位に設定する。
次に、アクティベートでバンクを開く。これは、図中のいずれかのrow信号をアサートして、コンデンサに溜められている電荷をセンスアンプに入力することに相当する。
先ほどのプリチャージで、ビット線はVdd/2になっているので、コンデンサに0Vが蓄えられていれば、ビット線の電圧はVdd/2よりわずかに低くなる。逆にコンデンサにVddが蓄えられていればビット線の電圧はVdd/2よりわずかに高くなる。
コンデンサの容量に対して、ビット線の浮遊容量は一桁以上大きいため、この操作による電位の変化はほんのわずかなものであるが、このわずかな違いをセンスアンプで増幅し、フィードバックをかけることで、最終的にそのビット線は0VかVddかのいずれかの電圧になる。
次にREADコマンドでcolを指定する。指定されたビット線に接続されているFETがオンになり、メインアンプを介してデータが出力される。
最後に、PREコマンドで、そのバンクをプリチャージする。全てのビット線とコンデンサ間のFETスイッチをOFFにして、ビット線をVdd/2にチャージすることで、次のリードに備える。
以上の動作から、一度アクティベートでバンクを開けば、センスアンプでそのrowラインのコンデンサの値が増幅されているため、メインアンプに接続するcolラインを切り替えることにより、連続して複数のcolラインのデータを読み出すことができることがわかる。これが、一度バンクを開けば、そのバンクに対して複数のREADコマンドを発行できる理由になる。
なお、ここではバーストの話が出てこなかったが、バーストの考え方は、例えば8バーストなら上の回路を8つ持ち、選択されたcolラインに対して、この8つのデータを連続して出力することで実現されている。
また、上記動作から、DRAMの構造とスペックがどのように関わっているかも理解できる。
tCLはコマンド入力から、センスアンプの出力を選択して、メインアンプを経由してデータがDRAMの出力端子まで出力されるまでの時間
tRCDはコマンド入力から、rowラインをONにしてコンデンサの出力をセンスアンプで増幅するまでの時間
tRPはコマンド入力から、colラインを1/2Vddに充電するのに要する時間
ということになる。