SDRAM intro
Readings:
- DDR4 Tutorial - Understanding the Basics - via sv:io
- DDR4 SDRAM - Timing Parameters Cheat Sheet - via sv:io
- DDR4 memory organization and how it affects memory bandwidth, Xiaomin Shen
- CS698Y: Modern Memory Systems hosted by IIT Kanpur
- DDR4 Bank Groups in Embedded System Applications, Graham Allan Totu
- WATCH THIS! DRAM - by Open Logic (youtube)
- Executing Commands in Memory: DRAM Commands, Stephen St. Michael
On DRAM address mapping and memory controller
- Minghua Wang et.al.,DRAMDig: A Knowledge-assisted Tool to Uncover DRAM Address Mapping
https://arxiv.org/pdf/2004.02354 - Marius Hillenbrand, KIT, Physical Address Decoding in Intel Xeon v3/v4 CPUs: A Supplemental Datasheet
https://os.itec.kit.edu/downloads/publ_2017_hillenbrand_xeon_decoding.pdf - Mark Seaborn, How physical addresses map to rows and banks in DRAM https://lackingrhoticity.blogspot.com/2015/05/how-physical-addresses-map-to-rows-and-banks.html
Tech specs and datasheet
- Micron Datasheet: {4,8,16}Gb: x4, x8, x16 DDR4 SDRAM Features.1
- JEDEC docs
- DDR4 SDRAM (JESD79-4)
- DDR4 SDRAM Registered DIMM Design Specification
RAS, Rowhammer
- Exploiting the DRAM rowhammer bug to gain kernel privileges
- Reliability, Availability, and Serviceability (RAS) for DDR DRAM interfaces, presentation by Marc Greenberg
- Thoughts on Intel® Xeon® E5-2600 v2 Product Family Performance Optimisation – component selection guidelines, presentation by Marcin Kaczmarski
§ TEXT (TAKEAWAYS)
- Memory system can be orginized in {Channel, Rank, Chip, Brank Group, Bank, Array, Row/Column}.
- Modern CPUs use integrated Memory Controller(s), which maps a physical address into actual DRAM cells (rank X chip X bank group X bank X row X column).
- CPU can have multiple DRAM channels, each having its own memory controller and bus. Each channel can be accessed independently.
- DRAM access can be interleaved on multiple level. The cpu could interleave channel/rank/bank group/bank by arranging the physical memory address mapping. This helps boosting performance.
§ DRAM HW ORGANIZATION
- Channel
- each channel is read by the CPU independently. The concept of “Channel” is external to DRAM (or DDR, or DIMM). It’s about how the CPU operates memory.
- DIMM (Dual Inline Memory Module)
- the physical format of the memory stick. SO-DIMM (small outline) for laptops.
- Rank
- A set of DRAM chips, a unit thats offer [machine word] wide data access (say, 64 bits, or 72 bits for ECC). One rank is selected i.e. connected to the bus and accessed at a time.2
- Chip (x4, x8 or x16)
- a single DRAM IC chip. If I understand correctly, one bank of a bank group is selected at one time.
- Bank Group
- each chip has multiple banks and they can be optionally organized in groups. Access to bank in a different group would be faster than sequential access to another bank in the same group. Each bank group share the same IO gating.
- Bank (x4, x8 or x16)
- Basic unit that outputs x{4,8,16} bits at one access. Consists of #{4,8,16} arrays sharing the same row/col selection. (Actually, all active arrays/banks in the same active RANK selects the same row/colulm.
- Array {Row, Column}
- matric addressing unit of memory cells. The “Row” and “column” are also refered to as “word line” and “bit line”. Each array has it sense amplifier and outputs 1 bit at a time
- depth and width of memory chip
- width is how many bits a chip offer of the 64bit output, i.e. number of banks. it is either x4, x8 or x16. Typical configuration: 8 chips (8x each) offer 64bit. or 9 chips for 72 bits ecc. Depth is the size of the DRAM chip.
┌───────────────────────────────────────────────────────────────────┐\
│ DIMM │ |
┌───────────────────────────────────────────────────────────────────┐ ┌┘ C
│ DIMM ┌─────────────────────────────────────────────────────────┐ │ └┐ H
└┐ │ ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐ │ ┌┘ │ A
┌┘ │ │CHIP│ │CHIP│ │CHIP│ │CHIP│ │CHIP│ │CHIP│ │CHIP│ │CHIP│ │ └┐ │ N
│ │ └────┘ └────┘ └────┘ └────┘ └────┘ └────┘ └────┘ └────┘ │ │ ┌┘ N
└┐ │ RANK (typically a "side" of the ram) │ ┌┘ └┐ E
┌┘ └─────────────────────────────────────────────────────────┘ └┐ │ L
│ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ │───┘ |
└─┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴─┘ /
Fig.1. Channel, DIMM, RANK, and CHIP
┌────────────────────────────────────────────────┐ \
│ x4, x8 or x16 arrays │ |
┌────────────────────────────────────────────────┐ │ |
│ ARRAY │ │ |
┌────────────────────────────────────────────────┐ │ │ |
│ ARRAY │ │ │ |
│ ┌────┐ ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │ │ │ |
│ │ S ├─────┤ │ │ │ │ │ │ │ │ │ │ │ │ │ | B
│ │R E │ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │ │ │ | A
│ │ L ├─────┤ │ │ │ │ │ │ │ │ │ │ │ │ │ | N
│ DEC │O E │RSEL ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │ │ │ | K
│ ┌────►│ C ├────►│0│1│2│3│T│5│6│7│8│9│ │ │ │ |
│ │ │W T │ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │ │ │ |
│ │ │ I ├─────┤ │ │ │ │ │ │ │ │ │ │ │ │ │ |
│ │ │ O │ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │ │ │ |
│ │ │ N ├─────┤ │ │ │ │ │ │ │ │ │ │ │ │ │ |
│ │ └────┘ └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ │ │ │ |
│ │ CPY ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ │ │ │ |
│ │ ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │ │ │ |
│ │ ROW BUFFER │0│1│2│3│T│5│6│7│8│9│ │ │ │ |
│ │ └─┴─┴─┴─┘▲└─┴─┴─┴─┴─┘ │ │───┘ |
│ ┌────┴────┐ DEC │ CSEL │ │ |
│ │CELL ADDR├────────────────────┘ │───┘ |
│ └─────────┘ │ |
└────────────────────────────────────────────────┘ /
T : target cell (bit)
RSEL: row selection
CSEL: column selection
DEC : address decoder
CPY : transfer into row buffer (this is destructive)
ROW BUFFER : aka. sense amplifier
Fig.2. DRAM Bank, Array and Row-Column Addressing
In-Array addressing:
- Address is broken into row and column; first select the row
- whole row is copied into a row buffer (sense amplifiers). Then select the column (bit) and read it out. WRITE works similarly. The buffer is written back into the row regardless read/write. (destructive read)
- Logically there is one row buffer per bank, in practice there are multiple, one at each subarray
- all subarray in a bank share the same row and col address. i.e. reading the same cell from each array to compose x{4,8,16} bits output for the DRAM.
some notes on DIMM pins
Note that the col and row addr is multiplexed on the ADDR pins, i.e. sent in serial. 3
DDR4 288 pin DIMM has:
A[0 :17] Address Bus (A17 is in most cases non-valid)
BA[0 : 1] Bank Select
BG[0 : 1] Bank Group Select
CS Rank Select ... bits depends
2^( 17 + 17 + 2 + 2 + 1 ) x 8 x 8
Row 4 groups, 2 ranks depth chips
Col 4 banks each |_________|
64bit bus (DQ)
= quite some TBs
§ ADDRESSING
Parameter 4Gb x 4 2Gb x 8 1Gb x 16
----------------------------------------------------------------------
#Bank Groups 4 4 2
BG addr BG[1:0] BG[1:0] BG0
#Bank per BG 4 4 4
Bank addr in Group BA[1:0] BA[1:0] BA[1:0]
Row addressing A[17:0] 256K A[16:0] 128K A[16:0] 128K
Col addressing A[9 :0] 1K A[9 :0] 1K A[9 :0] 1K
Page Size 512B 1KB 2KB
From: "Table 2: Addressing", 16Gb: x4, x8, x16 DDR4 SDRAM Features, Micron
Note Page Size. Pagesize indicates the size of all row buffers of the active bank. (Locality) sequentially accessing the same page is faster, because all subsequent data is already in the buffers (no need for another ACTIVATE command)
Page size is supposed to be multiple of cache line size.
Page Size = (ColSize) x ORG / 8
ORG = number of DQ bits, i.e. 4/8/16
§ DRAM COMMANDS / OPERATIONS
- PRECHARGE
- deactivate the open row in a particular bank, or the open row in all banks. This write buffered row back into capacitors (effectively refreshing). After PRECHARGE, a bank must be activated (again) before next READ or WRITE.
- ACTIVATE + BG, BA, Addr(row), + CS (rank selected)
- enable access to a ROW in the specified Bank. The selected row is buffered (via sense amplifier) until PRECHARGE.
- READ
- read out a COLUMN. If next R/W is in a different row then READ should be followed by a PRECHARGE (or Read and Auto-Precharge command)
- WRITE
- like READ, but data is written into the row buffer bits. With the next PRECHARGE the data is committed to the cells. (? can I perform multiple writes to the same row and do PRECHARGE at once?)
- REFRESH
- keeps an internally incrementing refreshed-row counter (keeps track of the last-refreshed row). The current row of every bank is refreshed. REFRESN requrires the bank to be precharged. i.e. there is no activate row (ongoing READ/WRITE).
Most DRAMs will perform 8192 refresh cycles every 64 ms. That’s every 7.813 μ s. This has remained constant despite growing device densities. 4
- OTHERS
- NOP, Load Mode Register, Burst Terminate, Command Inhibit (Device deselect)
Burst Mode R/W
§ TIMING
CKE_L
┌───────┐
┏━━━━━━━━━━━━┓ │
┌────SRE──►┃SELF-REFRESH┃◄──┘
│ ┗━━━━━━━━━━━━┛
┏━━━━━━┓ │
┃ IDLE ┃◄──SRX────┘
┃ ┃ ┏━━━━━━━━━━━━┓
┌---------------------------►┃ ┃───REF──►┃ ┃
| ┃ ┃◄--------┃ REFRESHING ┃
| ┗━━━━━━┛ ┗━━━━━━━━━━━━┛
| │ACTIVATE
| │
| ┏━━━─▼─━━━━━┓
| ┃ACTIVATING ┃ ────► command sequence
| ┗━━━━━━━━━━━┛ ---─► auto. sequence
| |
| |
| WRITE_A ┏━━━─▼─━━━━━┓ READ_A
| ┌─────────────────────────┃ ┃────────────────────────┐
| │ ┌────WRITE────┃BANK ACTIVE┃────────────┐ │
| │ WRITE │ ┌---------─►┃ ┃◄-------─┐ │ READ │
| │ ┌─────┐ │ | ┗━━━━━━━━━━━┛ | │ ┌──────┐ │
| │ │ │ │ | │ | │ │ │ │
| │ │ ┏━━━━▼─▼─━━┓ │ ┏━━━─▼─━━━━┓ │ │
| │ │ ┃ ┃◄────────────┼───READ──────┃ ┃ │ │
| │ └─►┃ WRITING. ┃ │ ┃ READING. ┃◄─┘ │
| │ ┃ ┃───WRITE─────┼────────────►┃ ┃ │
| │ ┗━━━━━━━━━━┛ │ ┗━━━━━━━━━━┛ │
| │ │ │ │ PRE,PREA │ │ │ │
| │ │ │ │ │ │ │ │ │
| │ │ │ └───────────────┼───READ_A─────┐ │ │ │ │
| │ │ │ │ │ │ │ │ │
| │ │ │ ┌─────WRITE_A───┼──────────────┼─┘ │ │READ_A │
| │ │ │ │ │ │ │ │ │
| │ WRITE_A │ └─┼───PRE,PREA─┐ │ ┌─PRE,PREA─┼───┘ │ │
| │ │ │ │ │ │ │ │ │
| │ ┏━─▼─━━━─▼─┓ ┏─▼──▼───▼─━━┓ ┏─▼─━━━─▼─━┓ │
| │ ┃ ┃ ┃ ┃ ┃ ┃ │
| └─────►┃ WRITING. ┃------─►┃PRECHARGING ┃◄---─┃ READING. ┃◄────┘
| ┃ ┃ ┃ ┃ ┃ ┃
| ┗━━━━━━━━━━┛ ┗━━━━━━━━━━━━┛ ┗━━━━━━━━━━┛
| |
| |
└----------------------------------┘
Fig.3. DRAM State Diagram
Derived From: "Figure 13: Simplified State Diagram",
16Gb: x4, x8, x16 DDR4 SDRAM Features, Micron
§ MISC
- CAS (Column Address Strobe) and RAS (Row -)
- CAS and RAS pin tell either row or column address is in the address line. CAS Latency measures the delay between READ command and the moment the data is available.
- WE
- Write Enable
- CS
- Chip Select
┌─────────────────────────────────────────────────┐
│ CS RAS CAS WE ADDR │
│ ──────────────────────────────── │
│ ACTIVATE │ L L H H Row │
│ PRECHARGE │ L L H L │
│ READ │ L H L H Col │
│ WRITE │ L H L L │
│ REFRESH │ L L L H │
│ NOP │ L H H H │
│ BURST TERM. │ L H H L │
│ LOAD MODE REG.│ L L L L │
│ COMMAND INH. │ H X X X │
└─────────────────────────────────────────────────┘
In this case .. Low is yes, High is No...
(shamelessly taken from Stephen’s article 4 (Figure 5. DRAM commands - Truth Table)
-
you may find them on micron website, but these may be restricted to registered user only, perhaps with a NDA. ↩︎
-
rank interleaving: not selected ranks go through their refresh cycles in parallel. ↩︎
-
for a typical memory read, first
ACTIVATE
command with {CS, BG, BA} and ADDR (row number). To open a row for subsequent access. ThenREAD
command with selects and ADDR (col number). ↩︎ -
Executing Commands in Memory: DRAM Commands, Stephen St. Michael ↩︎ ↩︎