第12回: DRAM
DRAMというもの
前回は、インバータペアによって0, 1の値を記憶する
SRAMをみてきました。
しかしSRAMは、高々1ビットの値を記憶するために6個もトランジスタが
必要であり、効率がいいとはいえません。
特にメモリLSIに対する大容量化の要求が強くなると、
より少ないトランジスタで1ビットを記憶できるメモリLSIが
必要となってきます。
これに対する1つの解が、1個のコンデンサにたまっている電荷の有無を
0, 1という値に対応させよう、という考え方です。
このようなメモリをDRAM (Dynamic RAM)と呼びます。
つまりコンデンサC1にたまっている電荷の有無を、
トランジスタで外部に読み出したり、外部から書き込んだりするわけです。
たとえばコンデンサC1が電圧VDに充電されていれば、
そこにはQ1=C1・VDの電荷がたまっているわけで、これを「1」としましょう。
逆にC1の電圧が0で電荷がたまっていない状態を「0」とするわけです。
DRAMの原理はこれだけなのですが、DRAM特有の現象があり、
もう少しいろいろと考えないといけないことがあります。
メモリセルがデータ線(ビット線)につながっていますが、
データ線は、何千・何万というメモリセルがぶら下がるために
かなり長く、結果として大きな容量C2がついていると
みなせるわけです。
たとえばメモリセルのC1にたまっている電荷は、
トランジスタがONになったときにC2に流れていき、データ線の電圧は
もともとのC1の電圧より下がってしまうわけです。
このような現象を電荷の再分配と呼びます。
この電荷の再分配という現象は、特に大容量のDRAMでは
避けることができないため、ちょっとした工夫をします。
DRAMの構成と動作
DRAMの1列分の構成はこんな感じになります。
注目するべき点は、「ダミーセルDC」というものが1個あることと、
「センスアンプSA」というものが1個あること、
そして上に「プリチャージトランジスタPC」が2個ある、ということです。
そしてデータ線はDと/Dの1組があります。
ただしダミーセルDCには、メモリセルのコンデンサC1の半分の容量の
コンデンサCD(=C1/2)がついているとします。
この動作を順番にみていくことにしましょう。
ただしアドレスは、SRAMと同様に行アドレスと列アドレスとして与えられ、
行デコータは1つのワード線WLxを「1」とし、
列デコーダによって複数あるデータ線から1つを選択するとしましょう。
またダミーセルDCのワード線DWLは、他のどのワード線WLxが選ばれたときでも
常に選択される(DWL=1となる)とします。
DRAMの動作
プリチャージ
読み出しをするにしても書き込みをするにしても、
まず最初にプリチャージという動作を行います。
これは、ワード線WLxをすべて0の状態にしたままで、
φPを「1」として2個のプリチャージトランジスタPCをONにし、
D・/DをともにVDに保つ、つまり充電する動作です。
これがなぜ必要なのかは次の読み出しまたは書き込みの動作で
わかるでしょう。
なおこのとき、ダミーセルDCのコンデンサCDは放電されて
その電圧は0Vになっています。
なおデータ線D・/Dの寄生容量をC2としましょう。
読み出し
プリチャージ動作のあと、行アドレスによってワード線WLxが
1本だけ「1」になります。
まずダミーセルDCがつながっているデータ線/Dには、
寄生容量C2がVDで充電されていたわけですが、
読み出し時にはDWL=1とない、ダミーセルDCのコンデンサCDに
データ線/Dの電荷が流れてきて、データ線/Dの電圧が少し下がります。
下がった後の電圧をVdatabとすると、
- C2・VD = (CD+C2)Vdadab, VD=C1/2、つまり
Vdatab = {C2 / (C1/2 + C2)}VD = VD - {C1 / (C1 + 2C2}VD
となり、ΔVb = {C1 / (C1 + 2C2}VD だけ電圧が下がります。
もう一方のデータ線Dは、選択されたメモリセルのコンデンサC1が
充電されている('1'を記憶している)場合は、
WLx=1となって選択されても、コンデンサC1の電圧とプリチャージされた
データ線Dの電圧が同じですから、なにも変化はありません。
しかし選択されたメモリセルのコンデンサC1の電荷がない('0'を
記憶している場合)は、電荷の再分配がおこり、
データ線Dの電圧が少し下がります。
下がった後の電圧をVdataとすると、
- C2・VD = (C1+C2)Vdada、つまり
Vdata = {C2 / (C1 + C2)}VD = VD - {C1 / (C1 + C2}VD
となり、ΔV = {C1 / (C1 + C2}VD だけ電圧が下がります。
ちなみに一般に C2>>C1ですから、ΔVb = ΔV / 2 となります。
このように読み出し動作によってワード線WLxの1つによって
メモリセルが選択されると、
- データ線Dは、記憶している値に応じて
VD ('1'のとき)、または VD - ΔV ('0'のとき)になる
- データ線/Dは、常に VD - ΔVb
つまり読み出し動作の結果、
読み出した値が'1'ならば、データ線Dはデータ線/DよりもΔVbだけ電圧が高く、
読み出した値が'0'ならば、データ線Dはデータ線/DよりもΔVbだけ電圧が低く
なるわけです。
この微妙な差を、読み出しアンプ(差動増幅回路)によって増幅し、
'1'または'0'として読み出すわけです。
なおこの読み出し動作によって、
記憶していた値が'0'だったときには、メモリセルのコンデンサC1は
電荷がたまってしまっています。
つまり本来記憶していた値が「壊れている」わけで、
このような読み出し動作を破壊読出しと呼びますが、
もちろんメモリに記憶されているデータは、読み出しただけで
変わってもらっては困りますから、値を回復しておかなければなりません。
これは、データ線D・/DにつながっているセンスアンプSAによって
行われます。
このセンスアンプSAは、読み出しの後にφAを1とすることで
動作がはじまり、データ線D・/Dの電圧が高いほうをそのままに、
低いほうを0Vにするという動作をします。
その結果、もともと'0'を記憶していたのに、読み出し動作で
電荷がたまってしまったメモリセルも、センスアンプSAによって
電圧が0V、つまりC1電荷がない状態に戻ってくれるわけです。
リフレッシュ
DRAMは、コンデンサにたまっている電荷の有無によって1ビットのデータを
記憶しているわけですが、この電荷は、いくらトランジスタがOFFになって
たまっているはず、といっても、自然に放電していきます。
つまり時間がたつとDRAMが記憶しているデータは消えてしまうわけですが、
これは困りますから、電荷が放電してしまうまでの時間よりも短い周期で
メモリの値を回復させるリフレッシュ (refresh)という動作が
必須となります。
このリフレッシュは、プリチャージを含む読み出し動作を行えば
完了しますから、使っていないときでも定期的に読み出し動作を行うような
制御回路が必要となります。
書き込み
書き込み動作は、データ線D・/Dに書き込みたいデータ(とその反転)を
加え、書き込みたい行のワード線WLxを選択して
そのメモリセルのコンデンサC1をVDに充電('1')または
0Vに放電('0')するか、によって完了します。(実際には/Dは不要)
ただし、ワード線WLxによって書き込みたい列以外のメモリセルも
選択されてしまい、そこでは電荷の再分配が起こって記憶データの破壊が
起こってしまう、という問題があります。
そこで、書き込みの前に、対象の行のすべての列に対して
いったん読み出しとデータの回復を行い、
その後対象の列のデータ線D・/Dに値を書き込む、
という動作が必要になります。
この回のソボクな疑問集
戻る