Appearance
题目
用 8 个 64M×8bit 的 DRAM 芯片按交叉编址方式构成主存储器,并与一个宽度为 64bit 的存储器总线相连。主存每次最多读写 64bit,且按字节编址。则下列地址中,与主存地址 0018 001DH 位于同一芯片中的是( )。
错因
B
完全没用"同体(同芯片)= 地址低 3 位相同"这个判据,可能用了"地址高位相同"或"地址相近"凭感觉选——B 的低 3 位是 000,与目标地址 101 不同,肯定不是同一芯片。低位交叉编址下,物理上相邻的字节是分散在不同芯片里的,"地址数值相近"和"位于同一芯片"完全是两回事。
C
掉进了"地址相邻 = 同芯片"的陷阱——地址 0018 001EH 看起来跟 0018 001DH 只差 1,似乎应该在一起。但低位交叉编址恰恰相反:相邻字节分布在相邻的不同芯片里(这才能让 8 个芯片同时供给 64bit)。0018 001DH 的低 3 位是 101(芯片 5),0018 001EH 的低 3 位是 110(芯片 6),属于不同芯片。
D
容易被后缀字母干扰漏看——D 的后缀是 B(二进制),不是 H,所以这串数 0101 0011B = = 83 字节。低 3 位 = 011(芯片 3),与目标地址低 3 位 101(芯片 5)不一致。还有一种更隐蔽的错法:把 D 也按十六进制读成 0x01010011,末位 1 的低 3 位 = 001(芯片 1),看起来仍非答案——巧合的是无论哪种解读都不是同体,但严谨做题必须先看后缀确定进制。
总解析
结构分析:
- 8 个芯片,每片 64M × 8bit = 64MB,位扩展每次读 8bit
- 64bit 总线 = 8 字节,每次访存要 8 个芯片同时各供 1 字节 → 这就是低位交叉编址的工作模式
- 每个芯片就是一个"体",体号 = 字节地址 mod 8
地址低 3 位 = 体号(芯片号):
| 地址(mod 8)的位 | 含义 |
|---|---|
| 第 0 位 | 字节在芯片内的最低位选择 |
| 第 1–2 位 | … |
| 第 0–2 位(合起来) | 芯片号(体号) |
也就是说:
目标地址 0018 001DH 的体号:
末位 D = 1101B,取最低 3 位 = 101B = 5。 所以目标地址在芯片 5。
逐项判断"低 3 位是否 = 101"(注意 D 后缀是 B 表示二进制,不是十六进制):
| 选项 | 进制 | 末 4 位二进制 | 低 3 位 | 体号 | 同体? |
|---|---|---|---|---|---|
| A | H:末位 D | 1101 | 101 | 5 | ✓ |
| B | H:末位 0 | 0000 | 000 | 0 | ✗ |
| C | H:末位 E | 1110 | 110 | 6 | ✗ |
| D | B:直接读末 4 位 | 0011 | 011 | 3 | ✗ |
容量校验(顺手):
8 片 × 64MB/片 = 512MB = 字节 ≈ 5.4 × ,地址需要 29 位。A、B、C 的十六进制地址均小于 0x20000000 < ,在范围内;D 是二进制 0101 0011B = 83 字节,自然也在范围内。
最终答案是 A(0000 01D5H)。
速记口诀:
- 低位交叉编址:相邻地址分散到不同体(高速并行)
- 高位交叉编址:连续地址在同一体内(容量扩展)
- 判同体:看"地址 mod 体数"是否相等,等价于看二进制最低 位