SDRAM
[Wikipedia|▼Menu]

SDRAM (Synchronous Dynamic Random Access Memory) は、システムバスに同期して動作するDRAM (Dynamic Random Access Memory)。シンクロナスDRAMとも。初期のDRAMのインタフェースは非同期式であり、制御入力の変化に反応して可能な限り素早く応答するようになっていた。SDRAMのインタフェースは同期式であり、制御入力に応答する前にクロック信号を待つため、コンピュータのシステムバスに同期して動作する。クロックは入ってくる命令をパイプライン化する内部の有限状態機械を駆動するのに使われる。そのためSDRAMのチップは非同期DRAMよりも複雑な操作パターンを持つことができ、より高速に動作できる。

パイプライン化とはこの場合、SDRAMのチップが前の命令の処理を完了する前に新たな命令を受け付けられることを意味する。パイプライン化された書き込みでは、書き込み命令のすぐ後に書き込むべきデータがメモリアレイに到着する前でも次の命令を受け付けられる。パイプライン化された読み出しでは、要求したデータは読み出し命令からある固定数のクロックパルスが経過した後に出力され、その間のサイクルの間に別の命令を送ることができる。読み出し命令からデータが出力されるまでの遅延を「レイテンシ」と呼び、SDRAMを選択する際の重要な観点となっている。

SDRAMはコンピュータで広く使われている。元々のSDRAMだけでなく、そこから発展した世代であるDDR (DDR1)、DDR2、DDR3、DDR4、DDR5が量産されている。
歴史8個のSDRAMチップを PC100 DIMM パッケージに搭載したもの

SDRAMのコンセプトは1970年代には既に知られており、インテルの初期のプロセッサでも使われていたが、広く使われるようになったのは1993年以降のことである。1993年、サムスン電子がSDRAMチップ KM48SL2000 を導入。性能がよいため、コンピュータの主記憶として使われるDRAMは2000年までにほぼ全てがSDRAMとなった。

SDRAMのレイテンシは元々非同期型のDRAMに比べて無視できるものではなかった。実際初期のSDRAMは内部ロジックが複雑だったため、同時期の burst EDO RAM に比べて性能が低かった。SDRAM内部でのバッファリングはメモリの複数バンクへの操作をインターリーブできることに由来し、それによって実質的な帯域幅を向上させている。

今では事実上全てのSDRAMが、電子部品の相互運用を促進するためにオープン標準の採用を進める電子業界団体JEDECの規格に準拠して生産されている。JEDECは1993年に最初のSDRAMの規格を定め、その後も DDRDDR2DDR3 SDRAM といったSDRAMの規格を定めてきた。

SDRAMにはレジスタ付きの派生品もあり、サーバワークステーションなどよりよいスケーラビリティを要求するシステムで使われる。

2017年現在、パーソナルコンピュータの主記憶に単なるSDRAMが使われることはなく、DDR3 SDRAMDDR4 SDRAM が主流である。

SDRAMの主なメーカーとしては、サムスン電子ハイニックス半導体エルピーダメモリマイクロン・テクノロジなどがある。
タイミング

DRAMの性能を制限する要因はいくつかある。中でも重視されるのがリードサイクル時間で、オープン状態(SDRAMの行データをセンスアンプの配列に格納した状態)のロウ(行)への連続な読み出し操作の間の時間である。100MHzのSDRAMでは10nsだったその時間が、DDR-400では5nsに短縮されたものの、DDR2-800 と DDR3-1600 の世代では相対的にほとんど短縮されていない。しかし、インタフェース回路を基本リードレートよりも何倍もの速さで操作することにより、帯域幅は急激に増大した。

もう1つの制限要因はCASレイテンシで、カラムアドレスを供給してから対応するデータが得られるまでの時間である。これも最近の DDR SDRAM の数世代を通して 10-15ns と相対的に一定となっている。

実装においてはCASレイテンシは、SDRAMのモードレジスタを通してクロックサイクル数の形でプログラム可能であり、DRAMコントローラが期待する値を設定する。任意の値をプログラム可能だが、あまりに小さい値を設定するとSDRAMは正しく動作できない。クロックレートが高いと、実用可能なCASレイテンシのクロックサイクル数は増大する。10-15ns という時間は、200MHzの DDR-400 SDRAM では 2-3サイクル (CL2-3)、DDR2-800 では CL4-6、DDR3-1600 では CL8-12 となる。クロックサイクルが遅ければ、当然ながらCASレイテンシのサイクル数も小さくなる。

SDRAMモジュールにはそれぞれのタイミング仕様があり、そのモジュールで使っているチップ自体のそれよりも遅いことがある。100MHz SDRAMチップが登場したころ、100MHz対応と称したモジュールはそのクロックレートでは確実に動作できないことがあった。そのためインテルは PC100 規格を策定し、100MHzで安定動作できるメモリモジュールを生産するためのガイドラインと要求仕様を定めた。この規格は広く影響を及ぼし、PC100 は100MHzのSDRAMモジュールを指す用語となり、"PC" の後に数字をつけた名称が広く使われるようになった(その後、数字の意味は変化している)。
SDR SDRAMSound Blaster X-Fi Fatal1ty Pro に搭載された64MBのメモリ。マイクロン製の 48LC32M8A2-75 C というSDRAMチップ(8ビット幅)を133MHz (7.5ns) で駆動 [1]

元々は単にSDRAMと呼ばれていた SDR(シングルデータレート)SDRAMは、クロックサイクル当たり1つのコマンドを受けつけるか、1ワードのデータを転送できる。典型的なクロック周波数は100MHzと133MHzである。様々なデータバス幅のチップがあるが(4ビット、8ビット、16ビットなど)、一般に168ピンのDIMMの形でモジュール化され、64ビット(ECCなし)または72ビット(ECC)を一度に読み書きできる。

データバスの使い方は複雑で、そのため複雑なDRAM制御回路を必要とする。例えば、書き込みの際にはライトコマンドと同じサイクルで書き込むべきデータを提示しなければならないが、読み出し操作ではリードコマンドの2または3サイクル後にデータが出力される。そのため、DRAMコントローラはリードとライトが同時にデータバスを必要としないように調整しなければならない。

典型的な SDR SDRAM のクロックレートは 66MHz、100MHz、133MHz である(それぞれ、15ns、10ns、7.5ns)。
制御信号

すべてのコマンドはクロック信号の立ち上がりのタイミングでとられる。クロックに加えて6つの制御信号があり、たいていは負論理で、クロックの立ち上がりのタイミングでサンプリングされる。
CKE (Clock Enable)
この信号がローレベルのとき、チップはクロックが停止しているかのように動作する。コマンドは全く解釈されず、コマンドレイテンシ時間は経過しない。他の制御線の状態は考慮されない。この信号の効力は実際には1クロックサイクルだけ遅延される。すなわち現在のクロックサイクルは通常通り進行するが、次のクロックサイクルは無視され、CKE入力のチェックだけが行われる。CKEがハイレベルとなったクロックサイクル後の立ち上がりの時点から通常の処理が続行される。
言い換えれば、全ての処理はマスクされたクロックの立ち上がりに対応して進行する。マスクされたクロックとは、クロック入力と直前のクロック入力立ち上がり時のCKE信号の状態の論理積である。
/CS (Chip Select)
この信号がハイのとき、チップは全ての入力(CKE以外)を無視し、NOPコマンドを受け取ったかのように動作する。
DQM (Data Mask)
略号に"Q"という文字があるのは、データ線を"DQ"線と呼ぶことがあるためである。この信号がハイのとき、それらの信号はデータI/Oを抑制する。書き込みデータを伴う場合、そのデータは実際にはDRAMに書き込まれない。リードサイクルの前に2サイクルの間ハイにした場合、リードデータはチップから出力されない。DQM線は x16のメモリチップまたはDIMMの8ビットごとに1つある。
/RAS (Row Address Strobe)
名前に「ストローブ」とあるが、単なるコマンドビットとして機能する。/CAS および /WE と組み合わせて8種類のコマンドを指定する。
/CAS (Column Address Strobe)
名前に「ストローブ」とあるが、単なるコマンドビットとして機能する。/RAS および /WE と組み合わせて8種類のコマンドを指定する。
/WE (Write enable)
/RAS および /CAS と組み合わせて、8種類のコマンドを指定する。一般に読み出し系コマンドと書き込み系コマンドを区別する信号である。

SDRAMデバイスは内部が2または4個の独立したバンクに分けられている。バンクアドレス入力が1つ以上あり(BA0、BA1)、コマンドがどのバンクに対するものかを選択するようになっている。

コマンドの多くはアドレス入力ピンで示されるアドレスを使う。アドレスを使わない一部のコマンドやカラムアドレスを示さない一部のコマンドでもA10を使ってコマンドの種別を示す。

コマンドを次の表に示す。

/CS/RAS/CAS/WEBAnA10Anコマンド
Hxxxxxxコマンド抑制(何もしない)
LHHHxxx何もしない(NOP)
LHHLxxxバースト終了: 実行中のバーストリードまたはバーストライトを停止
LHLHバンクLカラムリード: 現在アクティブなロウからデータをバーストで読み出す。
LHLHバンクHカラム自動プリチャージ付きリード: リードと同じことを行い、完了時にプリチャージする(ロウを閉じる)。
LHLLバンクLカラムライト: 現在アクティブなロウにデータをバーストで書き込む。
LHLLバンクHカラム自動プリチャージ付きライト: ライトと同じことを行い、完了時にプリチャージする(ロウを閉じる)。
LLHHバンクロウアクティブ(活性化): リードまたはライトコマンドのためにロウを開く。
LLHLバンクLxプリチャージ: 選択したバンクの現在のロウを非活性化する。
LLHLxHx全プリチャージ: 全バンクの現在のロウを非活性化する。
LLLHxxxオートリフレッシュ: 内部カウンタを使い、各バンクの1つのロウをリフレッシュする。全バンクをプリチャージしなければならない。
LLLL0 0モードモードレジスタのロード: DRAMチップを設定するため、A0からA9までをロードする。最も重要な設定はCASレイテンシ(2または3サイクル)とバースト長(1/2/4/8サイクル)である。

DDRx SDRAM でも基本的なコマンドは同じであり、若干追加がある。追加のモードレジスタは、バンクアドレスビットを使って識別され、3番目のバンクアドレスビットが追加されている。
操作

512MB SDRAM DIMM(正確には 512MiB = 512 × 10242 bytes = 536,870,912 bytes)は8個か9個のSDRAMチップで構成され、それぞれのチップが512Mbitを格納し、DIMMの64ビットまたは72ビットのワード幅のうちの8ビットを各チップが分担している。典型的な512Mbit SDRAMチップの内部には4つの独立した16MBメモリバンクがある。それぞれのバンクは、16,384ビットのロウ(行)が8,192個並んだアレイになっている。バンクはアイドル状態、アクティブ状態、またはそれらの間で遷移中の状態のいずれかである。

アクティブ・コマンドはアイドル状態のバンクを活性化する。2ビットのバンクアドレス (BA0?BA1) でバンクを示し、13ビットのロウアドレス (A0?A12) でロウを示し、バンクの持つ16,384個のカラム(列)のセンスアンプにそのロウの内容を送り込む。この操作を「ロウを開く」と呼ぶ。この操作の副作用として、そのロウ内のメモリセルのリフレッシュが行われる。

ロウが活性化され開かれる(オープン状態になる)と、リード・コマンドとライト・コマンドをそのロウに対して実行可能となる。活性化に必要な時間は数クロックであり、それを「row-to-column 遅延」または tRCD と呼び、アクティブ・コマンド発行後にリードまたはライトを発行可能となるまでの時間を指し、通常クロックサイクル数で丸めた形で示す。それぞれのバンクは完全に独立しているため、このウェイトサイクルの間でも他のバンクに対してコマンドを発行できる。

リード・コマンドとライト・コマンドはカラムアドレスを必要とする。ひとつのチップは一度に8ビットのデータにアクセスするので、カラムアドレスは2048種類あり(16384÷8=2048)、アドレス線は11本だけ必要となる(A0-A9、A11)。

リード・コマンドを発行すると、SDRAMは2または3クロックサイクル後(CASレイテンシの設定による)のクロック立ち上がりの時点でDQ線に対応する出力データを出力する。それに続くワードのバーストが引き続きクロック信号の立ち上がりにあわせて出力される。

ライト・コマンドは書き込むべきデータを伴い、クロック信号の立ち上がりの時点でDQ線をそのデータで駆動する。ライト・コマンドでDQ線にデータを伝送する際にSDRAMがリード・コマンドのデータを同時に出力しないようにしなければならない。これはメモリコントローラの役目である。これは通常リード・バーストの完了を待ち合わせるか、リード・バーストを停止するか、DQM制御線を使うことでなされる。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:49 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef