Appearance
题目
假定 DRAM 芯片中存储阵列的行数为 r、列数为 c,对于一个 2K×1 位的 DRAM 芯片,为保证其地址引脚数最少,并尽量减少刷新开销,则 r、c 的取值分别是( )。
错因
A
把"地址引脚最少"想成"行数最少",所以选 1 列。但 DRAM 用"行/列地址复用"——同一组引脚分时传行号和列号——引脚数 = ,由 r 和 c 中较大者决定。本选 r=2048、c=1,max = 2048 → 引脚 11 个,远不是最少;而且行数 2048 → 刷新 2048 次,开销大。
B
地址引脚数算对了 6 个(max(64, 32) = 64,log₂64 = 6),但行列方向选反——r=64 行 → 每个刷新周期要刷 64 行;选 r=32(即 C)只需刷 32 行,刷新开销减半。在引脚数相同的两个方案里,要选行数更少的。
D
只考虑刷新最少(行数 1,刷新只 1 次),但 c=2048 → 引脚要 11 个。题面是两个目标的复合优化,不能只优化一个。
总解析
第一步:理解 DRAM 地址引脚复用
DRAM 总容量 = (位)。由于行地址和列地址分时通过同一组引脚送入(先送行 RAS,再送列 CAS),地址引脚数:
要让引脚数最少 → max(r, c) 最小 → r 和 c 越接近越好(在 的约束下)。
第二步:列出所有合法的 (r, c) 组合
,且 :
| r | c | max(r,c) | 引脚数 ⌈log₂ max⌉ |
|---|---|---|---|
| 1 | 2048 | 2048 | 11 |
| 2 | 1024 | 1024 | 10 |
| 4 | 512 | 512 | 9 |
| 8 | 256 | 256 | 8 |
| 16 | 128 | 128 | 7 |
| 32 | 64 | 64 | 6 ← 最小 |
| 64 | 32 | 64 | 6 ← 最小 |
| 128 | 16 | 128 | 7 |
| ... | ... | ... | ... |
| 2048 | 1 | 2048 | 11 |
引脚数最少的方案是 r=32, c=64 或 r=64, c=32——两种 max 都等于 64,引脚数都是 6。
第三步:在引脚数相同的两个方案里选刷新少的
DRAM 刷新是按行刷新——每个刷新周期把所有行依次刷一遍。行数越少 → 一个刷新周期内要做的工作越少 → 刷新开销越小。
| 方案 | 引脚 | 行数 r | 刷新开销 |
|---|---|---|---|
| r=64, c=32 | 6 | 64 行 | 较大 |
| r=32, c=64 | 6 | 32 行 | 较小 ← 选这个 |
最终答案是 C(r=32, c=64)。
示意结构(32 行 × 64 列的存储阵列):
列 0 列 1 列 2 ... 列 63
┌────┬────┬────┬────┬────┐
行 0 │ □ │ □ │ □ │... │ □ │
行 1 │ □ │ □ │ □ │... │ □ │
... │... │... │... │... │... │
行 31 │ □ │ □ │ □ │... │ □ │
└────┴────┴────┴────┴────┘
地址引脚复用:先送 5 位行号(log₂32=5),再送 6 位列号(log₂64=6)
实际共用 6 根( max(5, 6)=6 )
刷新:32 行,每个刷新周期遍历 32 行即可易错点速查:
- DRAM 引脚数公式 = (行列复用),不是
- 引脚最少 → r 和 c 接近正方形(在面积 给定时 max 最小)
- 刷新按行,行越少刷新越省
- 两个目标排序:引脚数最少为主,刷新最少为辅(题面用"保证 X,并尽量 Y"明示了主次)