SDRAMって? DRAMの限界追加(3/15)


SDRAMって?

 このページではもう少しSDRAMについて掘り下げていきます。(FPやEDOはもうほとんど目にしないので(^^;)
SDRAMというのはSynchronous Dynamic Ramdam Access Memoryの略で同期型DRAMとも呼ばれています。
クロックに同期してDRAMを動かすことにより、FP、EDOなどの非同期型DRAMより高速な動作をさせることが出来ます。
ところでみなさんは御自分でパソコンにメモリを増設したり、売っているのを見たことがありますでしょうか?
売っているのはDIMMと呼ばれるボードの上に、なにやらげじげじみたいな黒い色の四角くて銀色の足の生えた物体が載っていると思いますが、それの一個一個がSDRAMのチップなのです。
あの小さい物体一個の中に新聞にして何ページだかという情報をしまっておけるのですから、かーなりすごいと思いませんか?(^^;

SDRAMの使い方

 さてSDRAMに限ったことではありませんがメモリというものはデータを保存しておく/保存したデータを参照してくる、というこの2点が役割です。
ですからSDRAMの基本的な動作というものは、
1.メモリにデータを書く(保存)
2.メモリのデータを読む(参照)
の二つが最低限できないと行けないでしょう。(実際はもっと細かな動作もありますが(^^;)

かといっていきなり書き込もう/読み出そうと思ってもそうそう簡単には動いてはくれないものなのですが(^^;
というわけで順繰りにSDRAMのことを書いて行きたいと思います。


クロックのお話

 SDRAMはクロック信号に同期して動くと以前に書きましたが、何が同期してるのかというと、SDRAMのチップに外部からいれる命令(データの読み出し/書き込みなど)とかデータなどです。
要するにSDRAMにはクロックに同期してデータを書き込んだり、読み出したりすることができます。(逆を言えばクロックに同期しないとこれらの動作はできません。)
さらにはSDRAM内部の動作も一応このクロックに同期して動きます。(内部動作は当然アナログ的な動作もあるんで一応です。)
つまりクロックとはSDRAMを動作させる基準の信号であり、重要な信号なのです。

 さて実際このクロックというのがどれほどの周波数で動いているかというと、例えばSDRAMの規格の一つであるPC100を例に挙げてみると、動作周波数は100MHzです。
例えば1Hzというとこれは1秒間に1回の割合で電圧が規則的に上下変動することを示します。(この動きをサイクルと呼びます)
ご家庭の電気は50Hz/60Hzで動きますから1秒間に50回/60回上下に変動するということです。
 そもそもこのPC100という規格名は1秒間に100M個のデータの読み書きができるところからきています。SDRAMは1回のサイクルにつきデータの読み書きは一回しかできないので、PC100=100MHZ動作となります。(DRDRAMやDDR SDRAMは違うんですがこれは別のページで(^^;)
で、100MHzということはこの動作が1秒間に100M(=100x106)回起こっているということになります。
これがいったいどれくらいの時間で起こっているかというと

1秒/100x106回=10x10-9 秒/1回
ということになります。
ちなみに10-9というのはN(ナノ)という単位で表わされますので、100Mhzというとサイクルは10NSに一回ということになります。
またPC133ですと133Mhzですから1サイクルが大体7.5NSというところですね。
昔のCMにもありましたが1NSという時間は光の速さでさえもわずか30cmしか進むことはできない時間です。これだけ小さい時間の単位でSDRAMは動いているのです。


コマンドのお話

 さて、SDRAMにデータの読み書きをさせる場合、データを読むよとかデータを書込むよという命令をしないと動きません。
このSDRAMにする命令のことをコマンドといいます。
非同期型の場合はコマンドを好き勝手(というと語弊大きいですが(^^;)な時間に入れることもできるのですが、SDRAMの場合はクロック信号の立ち上がりの時のみ、コマンドを受け付けてくれるのです。
で、めでたく読み書きの命令をSDRAMに入れることになるわけですが、この命令だけではもちろん意図してるデータを読み出せません。
自分の欲しいデータを読む/書くをSDRAMにさせるためには、どこの場所にあるメモリセルのデータを読み/書きに行けばいいかもメモリに教えてあげなければ当然だめですよね(^^;
というわけで次はどこのメモリセルを読み/書きに行くか(この場所のことをアドレスといいます)のお話です。


アドレスのお話

SDRAM(に限らずたいていのメモリ)はこのアドレスの入れ方がちょっと特殊です。

というわけでアドレスの指定方法を書いていきましょう。

 例として128MbitのDRAMを上げていきます(ちなみに普通パソコンのスペック表などに書いてあるのはbyte表示です。1byte=8bitで表され、実際128MbitのSDRAMのメモリ一個は16Mbyteとなります。)
128Mbitというのはメモリセルが128M個あることをいいます。メモリの世界(に限らずHDDの容量とか)では2進数を用いる為、128Mbit=13,421,7728bitとなります。(ちなみに1Mbit=1024Kbit=1,048,576bit。Mはメガ、Kはキロで英語圏の数字につく単位ですね(^^;)
 さてどこのメモリセルを示しているのかをメモリに教えるのに、一番簡単なのが128Mbit個のセルに順に1、2、3・・・・・128M番目まで番号をふっておいて、そのなかの何番目だよとすることだと思います。
が、この方法だと13,421,7728の番号まで、つまり227(=128Mbit)となりますから27個のアドレスの数が必要となってしまいます。(くどいようですがメモリでは2進数を使いますので(^^;)
結果としてアドレスを入力するさいに27桁とか必要になってしまいますが、あまりに数が多すぎる為この方法は現実的ではありません。(容量が少なかった昔はひょっとしたらこの方法でやっていたかも知れませんが(^^;)
 さて、ではどうすればいいかといいますと2次元、つまり縦方向と横方向をわけてX番号−Y番号とそれぞれ番号をつけてあげれば、順番につけて番号をつけていくよりもアドレスを減らすことができます。
ということはたとえばXは214個、Yは213個(合計は214×213=227=128MBitで変わらず)と27桁の約半分で済みます。
もっとも一回で入れようとすると27桁あるのと変わらないので、実際はアドレスを二回に分けて指定してあげます。これがアドレスマルチプレクサと呼ばれている動作です。
そーすればXとYの多い方分(今回の場合はXの14桁分)あればアドレスの数が事足りますので。
例えば学校で1学年100人いたとして1番から100番(もしくは0〜99番)まで番号をつけるよりも10人ずつにわけて10組(もしくは0〜9組)の10番(0〜9番)までにしておいた方が使う数字の数も少なく、かつわかりやすくなるというお話です。

今後はこのXのことをロウアドレス(row address)、Yのことをカラムアドレス(column address)と言います。

で、実際にアドレスをSDRAMに教える場合はどうするかといいますと
ロウアドレスを入れる→カラムアドレスを入れる
という順番になっています。
実際にはロウアドレスをいれるときにはチップの活性化を行い、カラムアドレスをいれるときには読み/書きのいずれかのコマンドをいれているのですが。
とここまで来てなんなんですが、SDRAMはXアドレスとYアドレスの他にもう一つバンクという区切りがあります。
次はこのバンクのことについてちょっと説明してみます。


バンクのお話

 SDRAMにはロウアドレスとカラムアドレスのほかにもう一つバンクという概念があります。
ロウアドレスが組、カラムアドレスが出席番号とするなら、バンクは学年に相当します。
バンクを分けておくことにより、各バンクごとに動作ができるようになっているのです。
(1年1組1番と1年2組1番は同時には呼べませんが、1年1組1番と2年1組1番は同時に呼ぶことができるのです。)
 SDRAMではバンク数は4つ(DDR SDRAMも一緒)、DRDRAMでは32個となっています。
DRDRAMのバンク数が多いのは、バンクを細かく区切っておくことにより、SDRAMと比べて内部動作の高速化を実現しているためです。)


レイテンシのお話

 パソコンを自作したことのあることなら、DIMMの説明でよくCL=2とかCL=3とかという言葉が出てくるのをご存知かと思います。
このCLというのはカスレイテンシ(CAS Latency)と呼ばれるSDRAMのスペックの一つなわけなんですが、例えば同じPC133のDIMMでも2とか3とかあったりします。
おそらくDIMMの性能を示しているんだろうなぁとは想像着くと思いますが、このCLってのがなんなのかをちょっと説明します。
SDRAM(もちろんDDR SDRAMやRDRAMとかでも同じ)では、実際に読み出し命令を入れてから情報が出力されるまでに若干の時間差があります。
コマンドを受け付けてからデータを呼び出しに行って出力まで完了する時間、これのことをカスレイテンシと呼んでいます。
SDRAMはクロックに同期していますのでCL=2というとコマンドを入れてからクロック二回後、CL=3となるとクロック3回後からデータの読み出しができるようになりますので、カスレイテンシは数が小さいほど高速なメモリということになります。

つまりPC133のCL=2では7.5NSx2クロックなので15NS後、CL=3では7.5NSx3クロックなので22.5NS後、PC100のCL=2では10NSx2クロックなので20NS後となります。
クロックに同期してますから、残念ながら16NSとか21NSとかサイクルで割り切れない中途半端な時間には出てきません。

 さてこれだけ見るとPC133のCL=3とPC100のCL=2では後者のが早いように感じますが、PC133の方が全体的な動作が速い為(動作周波数が高いので)、トータルで見ればそんなことはないです。
(実際のSDRAMではデータの読み出しは毎度毎度1BITではないので。)
この動作をバーストと呼びますが、これはまた後で説明します。


データ幅のお話

 さて1つのアドレスを指定したときに一度に出てくるデータの数というのもいろいろあります。
これについては1bit分のみ、2bit分同時、4bit分同時、8bit分同時、16bit分同時、32bit分同時等々用途によって分かれます。
このデータの数の事をデータ幅と言います。
この数が増えるほど一回の読み出し/書き込み命令で扱えるデータ量が増えていきます。
そしてこれとは逆にアドレスの数は減っていきます。
セルの数は128Mbitしかないないのですから、同じアドレスを示したときに出てくるデータの数が多いほど、メモリセルを指定するアドレスの数は減っていくのです。
つまりデータの数xロウアドレスの数xカラムアドレスの数×バンクの数=128Mbitという計算式になっているのです。
 ただし一度のアドレス指定で読み/書きできるデータの量を大きくすればいいかというとそうでもなくて、データの量を大きくすると必要な情報以上のデータの読み/書きが行われて結局無駄になるかもしれないのです(^^;
例えば日本語全角の1文字は2byteの情報量で表わされますが、それに4byte(=32bit)のデータの数で表わしても2byteは無駄になるだけですよね(^^;
逆に多量のデータを一気に必要とするビデオカードなどのメモリはこのデータ幅を増やしていたりとします。


バーストのお話

 さて、SDRAMではロウアドレスとカラムアドレスを決めてあげたらデータが出てくることは先に延べましたが、実際のデータの出方はもう少し複雑です。
読み出しにしても書込みにしてもまずロウアドレスを決めてあげるのは先程書いた通りなんですが、その後カラムアドレスを決めてあげるとその後のカラムアドレスのデータもまた順繰りにデータが出てきます。
これをバースト(BURST)動作といいます。
つまり1年1組の1番の人を呼び出したら必ず2番3番・・・・・と続いて呼び出されるような動作をするのです。
連続してくるデータの数はだいたい2つ/4つ/8つのいずれかになっています。


SDRAMの動作のお話

 さてちょーっと技術者以外の方にはちんぷんかんぷんだと思いますが、とりあえず簡単にSDRAMの動作の説明をします。
上図にはREADとWRITEという二つの図がありますが、READというのがデータの読み出し、WRITEというのがデータの書き込みのときの動作です。
見慣れぬ言葉が出てきてますのでちょっと説明を加えます。

 tCKというのは1サイクルの時間を表わしてます。(PC100なら10NS、PC133なら7.5NSですね。)
ACT,READ,WRITE,PREというのは先程出てきたコマンドというSDRAMを動かす為の命令で、以下の様な意味を持ちます。

ACT  :チップを待機状態からロウアドレス及びバンクアドレスを取り込みます
READ :カラムアドレス及びバンクアドレスを取り込んで、データを呼び出します。
WRITE:カラムアドレス及びバンクアドレスを取り込んで、データを書込みます。
PRE  :すべての動作を終了させて待機状態に戻ります。

 tRCD、tRAS、tRCはスペックと呼ばれるもので、これはまあ各コマンドを連続して入れられる訳ではなく、一つコマンドを入れたら次のコマンドを入れる為には一定以上の時間が必要だということで理解してください。

さて、もう少しSDRAMの動作についてふれていきます。
先程ロウアドレスとカラムアドレスの説明をしましたが、SDRAMとはランダムにアクセスできるメモリのことですからいつもいつも同じアドレスを呼び出したりするわけではありません。
というわけでアドレスをランダムに動かしたときの動作に触れます。
まずカラムアドレスの方ですが、これは割と自由に動かすことができます。
一旦ロウアドレスを決めた後ならば、好き勝手にカラムアドレスを決めてあげることができるのです。
つまり1年1組まで呼び出すことを決めてしまえば組の中の人は好きな人をそのまま呼び出せるのです。
つまり1番の人を呼んで、その後で9番の人を呼んだり、3番を呼んだり、また1番を呼んだり等々ができるのです。
 これに対しロウアドレスの方はカラムアドレスのように自由には変えられません。
一旦すべての動作を終えてから再度ロウアドレスを入れてやる必要があります。
1年1組1番の人を呼んだ後に1年3組1番の人を呼ぶ為には、とりあえず1年1組1番の人を教室にもどし、改めて1年3組1番と呼び出さないといけないのです。


派生のお話

 さて今度は派生のお話です。
派生というのはSDRAMなどの半導体チップを作った場合どの規格(PC133のCL2とかPC100のCL2とか)がどれくらい取れたかをあらわす指標です。
SRDRAMを作る場合、シリコン基板上で微細な加工(1um以下の大きさで加工されています)をするためにほんのちょっとしたことで、この派生が大きく変動してしまいます。
つまりPC133CL2として売られるチップとPC100CL2で売られるチップには、別の設計をされているわけではないのです。(実際は改良を加えてより高速なものがたくさん取れるようにしていくわけですが、基本的に一緒です(^^;)
これはAthlonやPentiumIIIなどのCPUなどで1GHzで動くCPUと800Mhzで動くCPUで別のチップというわけではありません、というのと同じです。
メーカーが出荷前にテストした段階でこのチップは800MHzなら動作保証できる、こっちは1Ghzまで動作保証できるということで、選ばれて売られているわけです。
ですが概してメーカーのテストは実使用条件よりも厳しいため、クロックアップなどしても動いてしまう場合が多いんですね。
(ほかに800Mhzの需要が多いのに作ったのは1Ghzでも動くチップばっかだ、というときは1GHzで動くチップをわざわざ800MHzです、として売ることもあります。)

現在売られているDIMMの規格にはPC100のCL2もPC133のCL2/CL3の3種類があると思います。
CLというのはカスレイテンシのお話のところで説明したとおりデータを読むというコマンドをSDRAMのチップに与えてから実際にデータが出てくるまでの時間です。
なのでCL3よりはCL2のが速くデータが出てきます。
PC133とPC100はクロックの周期をあらわしていますので、PC133のほうがより高速に動く、ということですね。
よって現状のSDRAMではPC133のCL2というチップが一番高速で動く、ということになります。(上図を参照してください)

さてではどのようにこの規格に分けるのかというと、まずPC133とPC100との選り分けはクロック周期が133MHzで動くか、100Mhzで動くか、ということで分けられますので簡単ですよね。
で、当然133MHzで動くものはより低速の100MHzでも動かすことは可能ですから、つまりPC133はPC100としても使えるわけです。
PC133はPC100の上位互換の規格であるといえます。

次にCLですがCL133のCL2というのは読み出しコマンドを入れてからクロック2回分(15NS)後には必ずデータの読み出し準備が終わっています、CL3ではクロック3回分(22.5NS)後には必ずデータの読み出し準備が終わっています。
で、それぞれクロックに同期してデータをCPUなどに出力するわけなのですが、たとえばデータの読み出し準備に15.1NSかかったとしまし。
そうなるとクロックの立ち上がりである15Ns(2クロック後)は過ぎてしまっているため、つぎの22.5NSノクロックノ立ち上がりでデータを出力することになります。
よってこのチップはCL3で動くチップなります。
つまりCL3と一口に言ってもデータの読み出し準備終了までに15.1NS〜22.5NSの幅広い差があるのです。
こいつもCL2のDIMMはCL3のDIMMとしても当然使えます。
同様にPC100のCL2ではクロック2回分(20NS)後には必ずデータの読み出し準備終了となっています。
こちらのほうはCL3というのはまず見かけませんが、別にCL3で動かしてももちろん大丈夫です。

まあ、何がいいたいのかといいますとPC133CL3のDIMMとPC100CL2のDIMMを混在してパソコンに増設する時に、両方とも遅い規格のPC100のCL3とかに合わせる必要はなく、おそらくPC100のCL2でじゅーぶん動くのではないかということです(^^;
(PC133のCL3だと22.5NS、PC100のCL2だと20NSと前者に合わせないとだめなような気がすると思いますが、CL2つまり15NSに間に合っていないだけなので、データの読み出し準備終了は20NSで十分終わっていると思います。)
ただしCL3の石をCL2で使うためにはマザーボードの設定でカスレイテンシを変更できるものでないといけません。
それとメーカーが動作を保証してないので、もしカスレイテンシを早めてメモリが壊れてしまっても、私に文句を言わないでくださいね(^^;


DRAMの限界

 さて、DRAMの性能を知る上で一つ重要なことがあります。
それは小さなバケツに入っている電荷を見た目で判別できるように「増幅」をしないと行けないということです。
このためにSDRAMでもDDRSDRAMでもDRDRAMでもXアドレスが決まってからこの増幅という動作を行いますので、はじめにデータが出てくるまでの時間はどのメモリも大体変わらない訳です。
このためにDRDRAMがいくらバースト動作を高速化しても、ランダムにXアドレスを動かされたら、意味が無いということになります。
ではこの「増幅」のスピードを速くできないのでしょうか?
どこのメモリベンダーもがんばっているはずですが、なかなか瞬時に増幅、というようなメモリはできていませんね(^^;
それに特に近年の設計プロセス(一つの部品をこれくらいの大きさなら作れますよ、というルール)の微細化(0.18umというのが今の主流です。確か髪の毛一本が100umだか10umだか程度ですから相当小さいです。)が進んでいます。
微細化が進むということはバケツもどんどん小さくなってきているけです。
C=ε・S/L
というコンデンサ容量を求める式を見れば一発でわかりますね。
設計ルールが小さくなる→コンデンサの面積が小さくなる、ということですので(^^;
(ま、実際は誘電率(ε)の大きな物質を使ったり、表面積を大きくしたり、ということをしていますがそれでもバケツの容量としては小さいんです。)


トップに戻る
メールはこちらまでgimlet@mars.dti.ne.jp