2、单位及换算
例题
例题 1 2010 年下半年·存储器地址译码题
题目
采用 2K×4 位 的存储器芯片组成 16K×8 位 的存储器(地址单元为 0000H ~ 3FFFH,每个芯片的地址空间连续)。
则地址单元 0B1FH 所在芯片的最小地址编号为( )。
- A. 0000H
- B. 0800H
- C. 2000H
- D. 2800H
解析
数据规格换算
- 2K×4:有 2K = 2048 = 2¹¹ 个地址、每地址 4 bit。
- 16K×8:有 16K = 16384 = 2¹⁴ 个地址、每地址 8 bit。
架构原则:先并后串
- 并位宽:两片 2K×4 并成 2K×8(地址线共用,数据线拼 8 位)。
- 串容量:将“2K×8 块”再做片选级联,扩到 16K:
[ \frac{16K}{2K} = 8 \text{ 块} ] 因此共有 8 个 2K×8 的块(每块由两片 2K×4 组成)。
块大小(BlockSize)= 单块容量 = 2K = 0x0800
地址线分配
- 片内地址线:A10 ~ A0(11 位) → 控制 2K 范围内单元。
- 片选译码:A13 ~ A11(3 位) → 选择 8 个块之一(000 ~ 111)。
- 整机地址范围:0000H ~ 3FFFH(共 2¹⁴ 个地址)。
分块起始地址表(步长 0x0800)
块号(A13..A11) | 起始地址 |
---|---|
000 | 0000H |
001 | 0800H |
010 | 1000H |
011 | 1800H |
100 | 2000H |
101 | 2800H |
110 | 3000H |
111 | 3800H |
定位 0B1FH 所在块
方法一(除法取整): [ \left\lfloor \frac{0x0B1F}{0x0800} \right\rfloor = \left\lfloor \frac{2847}{2048} \right\rfloor = 1 ] → 在第 1 块(从 0 起计),其起始地址为
[ 1 \times 0x0800 = \mathbf{0x0800} ]
方法二(区间判断): [ 0x0800 \le 0x0B1F \le 0x0FFF ] → 仍落在以 0x0800 为起点的块内。
因此,0B1FH 所在芯片(块)的最小地址编号为 0800H。
答案:B. 0800H
易错点与核验
- 0000H 是第 0 块起始,仅当地址 < 0x0800 时成立。
- 2000H / 2800H 为第 4 / 第 5 块起始,远大于 0x0B1F。
- 片数核对:每块 2 片(2K×4 并成 2K×8),共 8 块 → 16 片。
- 地址线数:16K 需 14 根(A13..A0),与“11 位片内 + 3 位片选”一致。
通用解题模板(速记)
- 先并位宽,后串容量。
- 块大小 = 单块地址数(本题 2K = 0x0800)。
- 块起始地址 = 向下对齐到块边界:
[ \text{start} = \big\lfloor \frac{\text{addr}}{\text{BlockSize}} \big\rfloor \times \text{BlockSize} ] - 低位 → 片内地址,高位 → 片选译码。
2012 年上半年·地址空间容量计算(完整解析与笔记)
题目
内存单元按字节编址,地址 0000A000H ~ 0000BFFFH,共有( )个存储单元。
- A. 8192K
- B. 1024K
- C. 13K
- D. 8K
解题要点
- 按字节编址:每个地址对应 1 字节,因此“存储单元数 = 字节数”。
- 地址范围是闭区间,总数公式: [ N = \text{End} - \text{Start} + 1 ]
- 将十六进制计算: [ \text{End} = 0x0000BFFF,\quad \text{Start} = 0x0000A000 ] [ N = 0xBFFF - 0xA000 + 1 = 0x1FFF + 1 = 0x2000 = 8192 = \mathbf{8K} ]
也可快速判断:
- 0xA000 ~ 0xAFFF:4K
- 0xB000 ~ 0xBFFF:4K
- 合计 8K 字节。
答案
D. 8K
易错点
- 忽略“+1”(闭区间计算)。
- 把 K 当成 KB 的个数而非地址个数;本题按字节编址,8K 个地址 = 8KB。