第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とすると、

となり、ΔVb = {C1 / (C1 + 2C2}VD だけ電圧が下がります。

もう一方のデータ線Dは、選択されたメモリセルのコンデンサC1が 充電されている('1'を記憶している)場合は、 WLx=1となって選択されても、コンデンサC1の電圧とプリチャージされた データ線Dの電圧が同じですから、なにも変化はありません。

しかし選択されたメモリセルのコンデンサC1の電荷がない('0'を 記憶している場合)は、電荷の再分配がおこり、 データ線Dの電圧が少し下がります。 下がった後の電圧をVdataとすると、

となり、ΔV = {C1 / (C1 + C2}VD だけ電圧が下がります。 ちなみに一般に C2>>C1ですから、ΔVb = ΔV / 2 となります。

このように読み出し動作によってワード線WLxの1つによって メモリセルが選択されると、

つまり読み出し動作の結果、 読み出した値が'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に値を書き込む、 という動作が必要になります。


この回の配布資料(第12・13回)
この回のソボクな疑問集
戻る