DRAM Hierarchy
Hierarchical Order: Channel > (*DIMM) > Rank > (*Chip) > Bank Group > Bank > Subarray
(*Physical한 관점에서 존재하는 hierarchy이고, logical한 관점에서는 의미가 없다. 즉, physical address를 translation하는 과정에서 DIMM 또는 Chip에 할당되는 address bit은 없다.)
위의 그림은 DDR5의 DRAM architecture를 보여주는 그림이다. DDR5에서 기존과 다른 특징적인 차이점은 Bank의 수가 2배가 되었으며(32개) Rank안에서 독립적인 두 개의 sub-channel들로 Chip이 쪼개졌다는 것이다.
DRAM Commands
1. Activate (ACT)
Bank(=subarray 안의)의 한 row를 activate하여 bit-line sense amplifier(BLSA 또는 Row Buffer)로 옮기는(activate) 과정이다.
Physical하게는 1) wordline에 Vpp를 인가하여 한 row의 transistor channel을 열고, 2) bitline에는 Vdd/2를 인가한다. 이렇게 되면 transistor에 직렬로 연결된 capacitor에 저장되어 있는 정보(Voltage)가 전달되어 bitline의 전압이 Vdd/2 + alpha (=1) 또는 Vdd/2 - alpha (=0)으로 변하게 된다 (alpha는 양의 전압). 이를 BLSA가 "amplify"하여 Vdd (=1) 또는 0 (=0)으로 bitline을 navigate하여 전압을 안정시킨다.
이 과정을 거쳐 row에 저장되어 있던 정보가 row buffer로 옮겨지게 된다.
2. Read/Write (RD/WR)
Activate된 row에서 원하는 column을 골라 8-bit 단위로 read 또는 write하는 과정이다.
Column decoder에 의해서 선택된 bitline의 정보가 DQ pin을 통해 나가게 된다.
3. Precharge (PRE)
새로운 row를 activate 시키기 위해선 row buffer를 닫는 과정이다.
Physical하게는 1) wordline에 0V를 인가하여 transistor channel을 닫고, 2) bitline에는 다시 Vdd/2를 인가한다.
4. Refresh
DRAM cell 정보 손실(=error)을 막기 위해 cell들을 refresh하는 과정이다.
반복적인 ACT에 의해 capacitor에 저장된 전하가 점점 빠져나가거나 채워지게 되고, 이를 통해 점점 정보를 잃어가게 되는데, 이를 막고자 DRAM은 주기적으로 capacitor에 저장된 전압을 Vdd 또는 0으로 refresh 시켜주게 된다 (보통 2ms 주기로 refresh).
이는 Host에 의해 생성되는 command가 아닌, DRAM 자체적으로 생성하는 command이다.
Address Mapping
Naive하게 생각한다면 address의 LSB 6-bit을 제외하고 (i.e., 64B access) 순차적으로 addr[6:] = {Ch, Ra, Ba, Ro, Co} 와 같은 방식으로 mapping할 수 있지만, 이렇게 되면 작은 data 구조를 저장/접근 하는 경우에 imbalance가 발생하여 DRAM 관점에서 비효율성이 발생한다 (i.e., BW 제대로 활용 못함, tFAW에 의한 제한 등등).
따라서 이를 막고자 일반적으로는 addr[6:] = {Ro, Ba, Ra, Co, Ch} 와 같은 mapping을 사용한다.
DRAM Timing Constraints
1. Row Cmd <-> Row Cmd
- tRAS (Row Activate Time) = tRCD + tCL (=CAS) + tBL
- tRP (Row Precharge Latency = PRE latency)
- tRC (Row Cycle Time) = tRAS + tRP
Key points
ACT를 issue하고 tRAS가 지난 후에 RD/WR cmd를 issue할 수 있다.
한 row의 모든 RD/WR이 끝난 이후에는 tRP가 지나야 (=precharge 해야) 다른 row를 activate할 수 있다.
2. Row Cmd <-> Col Cmd
- tRCD (RAS to CAS Delay): ACT -> RD/WR 사이의 latency (tRAS와 혼동 주의)
- tRTP (Read to Precharge Delay)
- tWR (Write Recovery Delay): 마지막 Write Data 이후 tWR만큼 지나야 PRE 시작할 수 있음
Key points
ACT issue 이후 tRCD만큼 지나야 RD/WR를 issue할 수 있다.
마지막 WR 이후 tWR만큼 지나야 PRE를 issue할 수 있다.
3. Col Cmd <-> Col Cmd
- tCCD: RD -> RD 또는 WR -> WR 사이의 Latency
- tRTW (Read to Write Latency)
- tWTR (Write to Read Latency): 마지막 Write Data 이후 tWTR만큼 지나야 다음 Read를 할 수 있음
4. Col Cmd <-> DATA
- tCL (CAS Latency): RD issue 이후 data가 DQ로 나올 때까지 걸리는 시간
- tCWL (CAS Write Latency): WR issue 이후 data가 row buffer에 write 될 때까지 걸리는 시간
5. Others
- tBL (Burst Read Latency)
- tFAW (Four Activation Window)
- tREF (Refresh Cycle)
PIM (Memory-Level Parallelism)
- DIMM-level parallelism
- Rank-level parallelism
- Bank group-level parallelism
- Bank-level parallelism
- Subarray-level parallelism
아래로 가면 갈 수록 internal BW가 증가하지만, 그만큼 사용가능한 logic area가 작아진다. 따라서, workload에 따라 적절한 level에서 MLP를 적용해야 한다. 아래 그림은 여러 level에서 PIM timing diagram이다.