l_n_m’s diary

よわい電気系の日記(本当にただの日記)

本日の教養:DDR

DDR

Let's play DDR!
ではなくて。今日の話題はメモリのDDR(Double Data Rate)についてです。
そもそも何故この名前なのかというと、クロックの立ち上がりと立ち下がりの両方でデータを送るためです。HDL(Hardware Description Language)で設計したことがある人にとっては常識ですが、普通posedgeもしくはnegedge、つまりクロックの立ち上がりもしくは立ち下がりで動作させます。そうして一斉に回路を同期させて動かすのが同期回路。
大量のデータを送ろうとしたとき、その両方で送れたら倍速じゃん! ということで開発されたのがDDRAMDとかに支持され、今では普通に使われていますね。

DDR SDRAM

本当の名前はこれ。SDRAM(Synchronous Dynamic Random Access Memory)とは、DRAMのうちシステムバス(後で説明!)と同期して動作するもののことです。
DRAMはリフレッシュ動作の必要な揮発性メモリ。そのへんはまぁいいでしょう。

Synchronous?

何故同期する必要があるのでしょう。単純に応答させるだけなら非同期の方が速くなる。
その答えは、アドレスを取得することにあります。元々、RAS(Row Address Strobe)とCAS(Column Address Strobe)と呼ばれるふたつの線がDRAMには通っていました。メモリアクセスを簡単にするために、行と列に分けてアドレスを送っていたものの、一本のアドレス線からどのタイミングでそれぞれを読めばいいかをRASとCASを用いて教えなければならなかったのです。
http://ascii.jp/elem/000/000/597/597887/fig1_c_553x373.png
ascii.jpより画像を引用。
でーすーが、これが非常に面倒。RASとCASに対する応答を処理するために、非同期回路と同期回路を混在させたメモリコントローラを設計しなければならなかった。
しかしRASとCASをクロック信号を使いまわすことで代用。だいぶすっきりしました。
http://ascii.jp/elem/000/000/599/599291/fig1_c_730x240.png
同じくascii.jpより。
これによって、DRAMをパイプライン動作させることが可能になった上、いろいろな動作をさせやすくなりました。書き込み/読み出しのデコードが必要→じゃあ他の動作をする命令も使えるようにできるじゃん、という流れっぽい。
そういうわけで、非同期ではなく同期させた、SDRAMの方が凄くなったのでした。

DDRのバージョン

現在、DDR4まで出ています。各バージョン同士に互換性は無く、完全に新しいものになっています。
さて、DDRでは「DDR4-XXXX PC-YYYYY」のような表記をします。XXXXがメモリチップ規格、YYYYYがメモリモジュール規格です。

メモリチップとメモリモジュール

メモリチップとは記憶素子、メモリモジュールとはメモリチップを複数まとめて配線、接続端子を付けたものを指します。メモリモジュールの上にメモリチップが乗っている、というのが正しい。
というわけで、XXXXは動作周波数(=記憶素子の動作速度、MHz単位)、YYYYYは転送速度(モジュール全体の動作速度、MB/s単位)を表しています。

最新

今のところこんなのがあるようです。
DDR4最速更新で4266MHzに到達、一番乗りはまたもG.Skill「Trident Z」シリーズ | Ark Tech and Market News Vol.300249
……なんだこりゃ。メモリチップ最速はだいぶ凄いことになっているらしい。他のものを価格.comとかで見てみると、速いものでDDR4-3200 PC4-25600が見つかる。うーん。最先端のぶっ飛びようも凄いけど、一般に出回ってるのも凄いっぽい。ま、自作する予定は今のところ無いんですけどね(

明日

というわけで、DDR SDRAMについてざっと調べてみました。穴はそこかしこにありますが(各バージョンの違いとか見てないし)、自作勢とそこそこの会話が出来る……かも?
バス、メモリ周りを調べてきたので、次はちょっと毛色の違うものを調べたい。というわけで、GPUについて見てみたいと思います。そのうちまた分からないワードやらなんやらが出てきたときに、これまでの話題の復習兼補習をしようかな。