0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SDRAMのお勉強

Last updated at Posted at 2020-03-26

SDRAMの種類

種類 プリフェッチ データレートの例 Bank数 VDD
SDRAM なし 133 MT/s/pin 4 Bank 3.3 V
DDR SDRAM 2 プリフェッチ 400 MT/s/pin 4 Bank 2.5 V
DDR2 SDRAM 4 プリフェッチ 800 MT/s/pin 4 or 8 Bank 1.8 V
(DDR2L 1.5 V)
DDR3 SDRAM 8 プリフェッチ 1600 MT/s/pin 8 Bank 1.5 V
(DDR3L 1.35 V)

DDRとは

クロックの立上がり,立下がりでデータ読み書き.
SDRAMは,CLKの立ち上がりでデータ読み書きするが,
DDR SDRAM以降,データはDQSとともに送信され、読込み時はDQSのエッジ位置で、書込み時はDQSのセンターで取り込む.
バスクロックの2倍でデータをやり取りできる.
DQSはデータと一緒に伝送されるので,CLK基準でデータやり取りするより,タイミングマージンを確保しやすい.

ワードとは

メモリチップのデータバス幅(x8, x16, ...)単位で1ワードと呼ぶ.
容量256Mbitのメモリチップなら,
x8: 256Mbit = 8 bit/ワード * 32M ワード
x16: 256Mbit = 16 bit/ワード * 16M ワード
...

プリフェッチとは

  • リードラッチに,データバス幅のプリフェッチ数倍のデータを読んでおき,データバスに出力.
  • ライトFIFOに,データバス幅のプリフェッチ数倍のデータを詰めておき,メモリにまとめ書き.

DDR3のx16品なら,

  • 8ワード(128bit)ラッチしておき,MUXで各ワード(16bit)を切り替えてDQに出力.
  • DQから1ワード(16bit)ずつFIFOに詰めておき,8ワード(128bit)をまとめて書き込み.

メモリクロックのプリフェッチ数倍でデータをやり取りできる.
Micron; tn4719_form_function_ddr2

データレートの例

データレート = [非DDR=1 or DDR=2] * バスクロック = [プリフェッチ数] * メモリクロック

  • SDRAM
    133 MT/s/pin = 133 MHz = 133 MHz
  • DDR SDRAM
    400 MT/s/pin = 2200 MHz = 4100 Hz
  • DDR3 SDRAM
    1600 MT/s/pin = 2800 MHz = 8200 MHz

※標準モジュールは64 bit幅のデータバスなので,
DDR3-1600標準モジュールのデータレートは,
1600 (MT/s/pin) * 64 (pin) / 8 (Byte/bit) = 12.8 (GB/s)

BankとRowとColumn

Micron; 256Mb SDRAMデータシート
SDRAM 16Mb x16品を例にとると,

  • BankセレクトBA[1:0] -> 2^2 = 4 Banks
  • RowアドレスA[12:0] -> 2^13 = 8192 Rows
  • ColumnアドレスA[8:0] -> 2^9 = 512 Columns

(Bank, Row, Column)の組み合わせで1つのワード(16bit)が選択されるから,
4 * 8192 * 512 * 16 = 2^28 = 256 Mbit

操作

Rowをアクティブ(1行まとめてメモリセルからラッチ)にして,
読み書きした後,プリチャージ(ラッチからメモリセルに書き戻し.DRAMは読み出すとデータ破壊される)する.

  • READ
    (Bank, Row)選んでアクティブコマンド発行
    → [tRCD後,指定Rowの16 bit * 512 Columnsがセンスアンプで読まれラッチ(=「活性化」)]
    → Column選んでリードコマンド発行
    → [CASレイテンシ(CL)後のクロックから,指定Columnから順繰り※1に16 bitデータ出力]
    → プリチャージコマンド発行※2
    → [tRP後,プリチャージ完了]

  • WRITE
    (Bank, Row)選んでアクティブコマンド発行
    → [tRCD後,指定Rowの16 bit * 512 Columnsがセンスアンプで読まれラッチ(=「活性化」)]
    → Column選んで,データ入れて,ライトコマンド発行
    → [クロック毎に順繰り※1に16 bitデータ入力,最後のデータからtWR待つ]
    → プリチャージコマンド発行※2
    → [tRP後,プリチャージ完了]

※1 シーケンシャル,インタリーブで順番のつけ方変わる
※2 リードorライトコマンド発行時,A10=H(オートプリチャージ有効)なら,プリチャージコマンド発行不要

Command Rate(CR)

コマンド受付に何クロックかけるか.1T, 2T, ...が使われる.
「Column選んで,データ入れて,ライトコマンド発行」では,
1Tでは,コマンド信号入れた1CLK目で,アドレスバス,データバスを読み取り,コマンド受け付けるが,
2Tでは,コマンド信号入れてから2CLK目で,コマンド受け付ける.タイミングマージンが確保しやすい.

Rank

データバスDQをいくつのメモリチップで共有するか.
シングルランクなら,メモリコントローラとメモリチップで1対1接続だが,
デュアルランクなら,1対2接続となる.#CSで有効とするメモリチップを選択してアクセスする.
無効にしたメモリチップに繋がるDQはスタブになるので,信号品質は劣化する.

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?