G
N
I
D
A
O
L

【组成原理-存储】存储器的相关知识

1 存储器的分类

1.1 随机存储器 RAM

特点 SRAM(静态) DRAM(动态)
存储信息 触发器 电容
破坏性读出
需要刷新 不要 需要(分散刷新(无死区时间)、集中刷新、异步刷新)
地址传送 行、列地址同时送 行、列地址分开两次送(地址复用技术)
读写速度
成本
用途 Cache 主存

1.2 只读存储器 ROM

【注】只读存储器并非“只能读而不能写”,现在的只读存储器可通过电擦除等方式写入。

  • MROM(只读存储器)
  • PROM(一次可编程只读存储器)
  • EPROM(可编程可擦除只读存储器)
  • EEPROM(带电可编程可擦除只读存储器)
  • Flash(闪存、U盘):具有 EEPROM 的特点,即带电可擦除重写
  • SSD(固态硬盘):
项目 描述
原理 Flash 芯片
组成 多个闪存芯片,每个芯片有多个块,每个块有多个页
读写特性 以“页”为单位读写,支持随机访问(读快、写慢)
擦除特性 以“块”为单位擦除,一个块如果被擦除次数过多会损坏
磨损均衡技术 动态磨损均衡(优先写入擦除次数较少的块)、静态磨损均衡(自动检测并迁移分配数据,使其寿命更长)
优点 噪音小,读写速度快,抗震
缺点 造价高

1.3 串行访问存储器

  • 磁带、磁盘、光盘(CD-ROM)

【注】磁盘和光盘既可串行访问又可随机访问。

1.4 多模块存储器

  • 高位交叉存储器(顺序方式):高位地址表示体号,低位地址表示体内地址
  • 低位交叉存储器(交叉方式,常考四体交叉):低位地址表示体号,高位地址表示体内地址,公式:模块号 = 单元地址 % 模块数。对于四体交叉,低两位地址表示体号,公式:模块号 = 单元地址 % 4

存取周期 = 存取时间 + 恢复时间

  • 设模块数为 m,模块存取一个字的存取时间为 t,恢复时间为 r,则连续存取 m 个字(此时 r=t)所需的时间(存取周期)为T = t+(m-1)r = r+(m-1)r = mr。对于四体交叉,连续存取 4 个字(此时 r=t)所需的时间(存取周期)为T = t+3r = 4r

1.4.1 例题 1

【例 1】假定一个存储器系统支持四体交叉存取,某程序执行过程中访问地址序列为 3,9,17,2,51,37,13,4,8,41,67,10,哪些地址访问会发生体冲突?

【解】第一步:根据公式:模块号 = 单元地址 % 4可得模块号:

地址 3 9 17 2 51 37 13 4 8 41 67 10
访问的模块号 3 1 1 2 3 1 1 0 0 1 3 2

第二步:根据文章《关于交叉存储器检测访问冲突的一种算法》所介绍的方法(王婆卖瓜自卖自夸?),即可快速准确地写出冲突项:

冲突地址 序列
开始 _ _ _ 3 1 1 2 3 1 1 0 0 1 3 2 _ _ _
对应 9 和 17 _ _ (_ 3 1 1) 2 3 1 1 0 0 1 3 2 _ _ _
对应 17 和 37 _ _ _ 3 1 _ _ _ (1 2 3 1) 1 0 0 1 3 2 _ _ _
对应 37 和 13 _ _ _ 3 1 _ _ _ 1 2 (3 _ 1 1) 0 0 1 3 2 _ _ _
对应 4 和 8 _ _ _ 3 1 _ _ _ 1 2 3 _ 1 _ _ (_ 1 0 0) 1 3 2 _ _ _
结束 3 1 _ _ _ 1 2 3 _ 1 _ _ _ 1 0 _ _ _ 0 1 3 2

所以一共有四对冲突地址,访问总时间为 22r。

四体交叉存储器与地址的对应关系如下:

M0 M1 M2 M3
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
16 17 18 19
20 21 22 23
... ... ... ...

1.4.2 例题 2

【例 2】某机器采用四体低位交叉存储器,现分别执行下述操作:(1)读取 6 个连续地址单元中存放的存储字,重复 80 次;(2)读取 8 个连续地址单元中存放的存储字,重复 60 次。则(1)、(2)所花时间之比为多少?

【解】我们继续用上题方法解此题,这要比王道书中的解题思路要清晰不少。

(1)读取 6 个连续地址所花时间:1 2 3 4 1 2,总共花费 6r;

两轮读取 6 个连续地址所花时间:1 2 3 4 1 2 _ _ 1 2 3 4 1 2,总共花费 14r,第二轮(_ _ 1 2 3 4 1 2)所用时间:14r - 6r = 8r,以后每一轮都是 8r;

所以序列为:1 2 3 4 1 2 _ _ 1 2 3 4 1 2_ _ 1 2 3 4 1 2_ _ 1 2 3 4 1 2 ... 1 2 3 4 1 2 _ _ _(注意:总共时间包括所有存储器的恢复时间!所以最后给出三个空位用来恢复!

总共时间为:80 * 8r -2r + 3r = 641r

也可以由上面序列直接算:80 * 8r + 1r = 641r

(2)读取 8 个连续地址所花时间:1 2 3 4 1 2 3 4,总共花费 8r;

两轮读取 8 个连续地址所花时间:1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4,总共花费 16r,第二轮(1 2 3 4 1 2 3 4)所用时间:16r - 8r = 8r,所以每一轮都是 8r;

所以序列为:1 2 3 4 1 2 3 4 1 2 3 4 ... 1 2 3 4 _ _ _(注意:总共时间包括所有存储器的恢复时间!所以最后给出三个空位用来恢复!

总共时间:60 * 8r + 3r = 483r

所以时间之比为 641r : 483r = 4:3。

1.4.3 例题 3

【例 3】设存储器容量为 32 字,字长 64 位,模块数 m=4,分别用顺序方式和交叉方式进行组织。存储周期 T=200ns,数据总线宽度为 64 位,总线传送周期 r=50ns。若连续读出 4 个字,问顺序存储器和交叉存储器的读取 4 个字所需时间各是多少?

【解】连续读出 4 个字的位数 = 64b * 4 = 256b

顺序存储器连续读出 4 个字所需时间 = 4 * 200 = 800ns

交叉存储器连续读出 4 个字所需时间 = 200 + 3*50 = 350ns

2 字长和存储容量

2.1 存储单位

在计算机组成原理课程中,使用 K、M、G、T 均表示以 2 为底的单位。如 2K 个存储单元的意思是 2048 个存储单元,而不是 2000 个。但是,对于磁盘的存储容量及数据传输率,依然使用以 10 为底的单位。

单位 大小 十六进制数
K 210 400H
M 220 10,0000H
G 230 ~
T 240 ~

注意!!!408 考试使用 KB、MB、GB、TB 表示 2 为底的存储单位!!!

注意!!!408 考试使用 KB、MB、GB、TB 表示 2 为底的存储单位!!!

注意!!!408 考试使用 KB、MB、GB、TB 表示 2 为底的存储单位!!!

10 为底的存储单位 2 为底的存储单位
KB = 103B KiB = 210B
MB = 106B MiB = 220B
GB = 109B GiB = 230B
TB = 1012B TiB = 240B

【例】128 MB = 128 * 220 B = 27 * 220 B = 227 B

16MB = 16 * 220 B = 24 * 220 B = 224 B

2.2 字长

  • 字长:用于表示 CPU 内部通用寄存器的宽度。字长包括机器字长、指令字长、存储字长,必须为字节(8 位)的整数倍。

  • 机器字长:机器进行一次整数运算所能处理的二进制数据的位数,即 CPU 位数,或简称为字长。

【注】操作系统位数:操作系统可寻址位数(小于等于 CPU 位数)。32 位处理器只能装 32 位操作系统而不能装 64 位操作系统,64 位处理器能装 32 或 64 位操作系统。

名称 16 位机器(CPU)中的位数 32 位机器(CPU)中的位数 64 位机器(CPU)中的位数
位 (bit, b) 1 1 1
字节 (byte, B) 8 8 8
半字 (1B/2B/4B) 8 16 32
字 (2B/4B/8B,机器字长) 16 32 64
双字 32 64 128
四字 64 128 256
  • 指令字长:一个指令字中包含的二进制位数。

  • 存储字长:一个存储单元存储的二进制位数。

指令字长一般取存储字长的整数倍,若指令字长等于存储字长的 2 倍,则需要 2 个访存周期来取出一条指令;若指令字长等于存储字长,则取指周期等于机器周期。

补充:不同机器下的数据类型长度

类型 16 位机器 32 位机器 64 位机器
char 8 8 8
short 16 16 16
int 16 32 32
long 32 32 32
long long 64 64 64
float 16 32 32
double 64 64 64

2.3 存储容量

  • 存储容量 = 存储单元个数 * 每个存储单元的长度(位数,又称为存储字长)

【例 1】存储器容量为 2M * 8 位,表示该存储器有 2 * 220 = 221 个存储单元(若为 SRAM,则有 21 根地址线),该存储器的地址寄存器为 21 位;每个存储单元存放 8 位二进制数据(有 8 根数据线,存储字长为 8 位,即 1 字节),该存储器的数据寄存器为 8 位;存储容量为 2M * 1B = 2MB。

【例 2】存储器容量为 8K * 16 位,表示该存储器有 8 * 210 = 213 个存储单元(若为 SRAM,则有 13 根地址线),该存储器的地址寄存器为 13 位;每个存储单元存放 16 位二进制数据(有 16 根数据线,存储字长为 16 位,即 2 字节),该存储器的数据寄存器为 16 位;存储容量为 8K * 2B = 16KB。

  • 设 A 存储器容量为 x1 * y1 位,B 存储芯片容量为 x2 * y2 位,则组成 A 存储器所需要的 B 芯片片数为(x1 * y1)/(x2 * y2)

【例 3】16 片 2K * 4 位的存储芯片,可设计为多少存储容量的 16 位存储器?

设存储单元个数为 M,则有:(M * 16) / (2K * 4) = 16,解得 M = 8K。

【例 4】某机器的内存按字节编址,地址从 90000H 到 CFFFFH,若用存储容量为 16K * 8 位芯片构成该内存,则需要多少块芯片?

存储单元个数为 D0000H - 90000H = 40000H = 4 * 164 = 218 = 28 * 210 = 256K,且内存按字节编址(8 位),所以有:(256K * 8) / (16K * 8) = 16,即需要 16 块芯片。

【例 5】某 32 位机器的内存按字编址,地址从 90000H 到 CFFFFH,若用存储容量为 16K * 8 位芯片构成该内存,则需要多少块芯片?

存储单元个数为 D0000H - 90000H = 40000H = 4 * 164 = 218 = 28 * 210 = 256K,且内存按字编址(每个存储单元大小为 32 位),所以有:(256K * 32) / (16K * 8) = 64,即需要 64 块芯片。

2.4 存储容量的扩展

  • 位扩展法:将存储芯片的存储字长(即一个存储单元的数据位数)扩充,使其数据位数与 CPU 的数据线数相等。

【例 1】8K * 1b --> 8K * 8b:

  • 需要 8(= (8K * 8b) / (8K * 1b))片存储芯片用来扩充。
  • 一个 8 位 CPU 在读取该存储器时,同时读取 8b 数据,即同时选中并读取 8 个 8K * 1b 的存储芯片。
  • 字扩展法:将存储芯片的存储单元个数扩充,存储字长(数据位数)不变。

【例 2】16K * 8b --> 64K * 8b:

  • 需要 4(= (64K * 8b) / (16K * 8b))片存储芯片用来扩充。
  • 扩充后的存储器地址空间大小为 216,即地址位数为 16(A15—A0),最高两位(A15A14)指示选中 4 块存储芯片中的哪个芯片。
  • 该电路设计需要一个 2/4 译码器。
  • 一个 8 位 CPU 在读取该存储器时,只能选中并读取其中一个 16K * 8b 芯片。
  • 字位同时扩展法:将存储芯片的存储字长和存储单元个数同时扩充。

【例 3】16K * 4b --> 64K * 8b:

  • 需要 8(= (64K * 8b) / (16K * 4b))片存储芯片用来扩充,每 2(= 8b / 4b)片存储芯片组成一组,一共有 4(= 64K / 16K)组。
  • 扩充后的存储器地址空间大小为 216,即地址位数为 16(A15—A0),最高两位(A15A14)指示选中 4 组存储芯片中的哪一组。
  • 该电路设计仍需要一个 2/4 译码器。
  • 一个 8 位 CPU 在读取该存储器时,同一时间只能读取 8b 数据,即只能选中并读取其中一组芯片(2 * 16K * 4b)。

2.5 相关例题

2.5.1 例题 1

【例 1】用一个 512K * 8b 的 Flash 存储芯片组成一个 4M * 32b 的半导体只读存储器,存储器按字编址,试回答以下问题:

(1)该存储器的数据线数和地址线数分别为多少?

(2)共需要几片这样的存储芯片?

(3)一个 32 位 CPU 使用了该存储器,请说明每根地址线、数据线的作用。

(4)一个 8 位 CPU 使用了该存储器,请说明每根地址线、数据线的作用。

【解】(1)该存储器的存储字长为 32b,因此存储器的数据线数为 32;该存储器的存储单元个数为 4M = 222,因此存储器的地址线数为 22。

(2)(4M * 32b) / (512K * 8b) = (222 * 32b) / (219 * 8b) = 32 片

(3)将 512K * 8b 的存储容量扩展为 4M * 32b,存储单元个数和存储字长都被扩充,显然使用了字位同时扩展法

位扩展法:32b / 8b = 4 片/组;字扩展法:4M / 512K = 222 / 219 = 23 = 8 组

采用译码片选法,高位地址线(A21A20A19)通过 3/8 译码器选中访问某组芯片。剩余地址线(A18—A0)访问组内每一片 512K 芯片内部的存储单元。

这是一个 32 位 CPU,所以有 32 根数据线。每组芯片内的 4 片芯片分别连接 D31—D24、D23—D16、D15—D8、D7—D0

(4)与上问不同,这是使用了 8 位 CPU 来访问该存储器,显然若该 CPU 欲读取 32b 数据,只能分成 4 个 8b 数据来读取。访问一次 8b 数据的顺序是:CPU 先选中某一组芯片,然后再选中该组内的某一块芯片,因此有两次选择过程,需要两个译码器。

高位地址线(A21A20A19)通过 3/8 译码器选中访问某组芯片;次高位地址线(A18A17)通过 2/4 译码器选中该组内的某块 512K 芯片;剩余地址线(A16—A0)访问该 512K 芯片内部的存储单元。

这是一个 8 位 CPU,所以有 8 根数据线,全接到每片芯片中。

2.5.2 例题 2

【例 2】地址总线 A0(高位)—A15(低位),用 4K * 4b 的存储芯片组成 16K * 8b 的存储器,则产生片选信号的译码器的输入地址线应该是?

【解】将 4K * 4b 的存储容量扩展为 16K * 8b,存储单元个数和存储字长都被扩充,显然使用了字位同时扩展法

位扩展法:8b / 4b = 2 片/组;字扩展法:16K / 4K = 4 组

所需地址线一共为 14 根(16K = 214),即只需使用地址总线 A2(高位)—A15(低位)。

高位地址线(A2A3)通过 2/4 译码器选中访问哪一组芯片。剩余地址线(A4—A15)访问每一片 4K 芯片。

2.5.3 例题 3

【例 3】设某机中,CPU 的地址总线 A15—A0,数据总线 D7—D0(A0、D0 均为最低位),存储器地址空间为 3000H ~ 67FFH。其中 3000H ~ 4FFFH 为 ROM 区,选用 4K * 2b 的 ROM 芯片,5000H ~ 67FFH 为 RAM 区,选用 2K * 4b 的 SRAM 芯片。请问:

(1)组成该存储器需要多少片 ROM 芯片和 SRAM 芯片?

(2)ROM 芯片、SRAM 芯片各需连接 CPU 的哪几根地址线和数据线?

(3)应如何设置片选信号,分别写出各片选信号的逻辑表达式。

【解】(1)CPU 的地址总线数为 16,数据总线数为 8,可知需要扩展的存储规格为 16K * 8b。

  • 对于整个存储器的存储单元个数:67FFH + 0001H - 3000H = 3800H = 3 * 163 + 8 * 162 = 210 * (3 * 22 + 21) = 14K,因此扩展后的存储规格为 14K * 8b。
  • 对于 ROM 区的存储单元个数:4FFFH + 0001H - 3000H = 2000H = 2 * 163 = 210 * 8 = 8K,因此扩展后的 ROM 规格为 8K * 8b,所需 ROM 芯片个数为(8K * 8b) / (4K * 2b) = 8 片
  • 对于 RAM 区的存储单元个数:67FFH + 0001H - 5000H = 1800H = 163 + 8 * 162 = 210 * (2 + 22) = 6K,因此扩展后的 RAM 规格为 6K * 8b,所需 RAM 芯片个数为(6K * 8b) / (2K * 4b) = 6 片

(2)芯片与地址线的接法要看单片芯片的容量(注意此处问的是芯片的接法而不是 CPU 的接法);数据线的接法要看“位扩展法”。

  • ROM 芯片(4K = 212)的地址线:A11—A0
  • RAM 芯片(2K = 211)的地址线:A10—A0
  • ROM 芯片的分法:8b / 2b = 4 片/组,一共 2 组,所以每组芯片内的 4 片芯片分别连接 D7D6、D5D4、D3D2、D1D0
  • RAM 芯片的分法:8b / 4b = 2 片/组,一共 3 组,所以每组芯片内的 2 片芯片分别连接 D7D6D5D4、D3D2D1D0

(3)片选信号的设置与(2)中芯片分组的分法有关,采用线选法

  • 对于 ROM 区的地址空间(3000H ~ 4FFFH):ROM 分为 2 组,因此也将地址空间等分为 2 部分(3000H ~ 3FFFH、4000H ~ 4FFFH),易得以下片选信号逻辑表达式:
    • 3000H ~ 3FFFH:最高位化为二进制为 0011,因此片选信号CS0 = A15'·A14'·A13·A12
    • 4000H ~ 4FFFH:最高位化为二进制为 0100,因此片选信号CS1 = A15'·A14·A13'·A12'
  • 对于 RAM 区的地址空间(5000H ~ 67FFH):RAM 分为 3 组,因此也将地址空间等分为 3 部分(5000H ~ 57FFH、5800H ~ 5FFFH、6000H ~ 67FFH),易得以下片选信号逻辑表达式:
    • 5000H ~ 57FFH:最高两位化为二进制为 0101 0000 ~ 0101 0111,因此片选信号CS2 = A15'·A14·A13'·A12·A11'
    • 5800H ~ 5FFFH:最高两位化为二进制为 0101 1000 ~ 0101 1111,因此片选信号CS3 = A15'·A14·A13'·A12·A11
    • 6000H ~ 67FFH:最高两位化为二进制为 0110 0000 ~ 0110 0111,因此片选信号CS4 = A15'·A14·A13·A12'·A11'

【注】第(3)问中默认片选信号高电平有效。若题目特别指出片选信号低电平有效,则直接对所求逻辑表达式再取一次反即可,例如:CS0' = (A15'·A14'·A13·A12)'

---EOF---

posted @ 2022-09-03 15:00  漫舞八月(Mount256)  阅读(1491)  评论(5编辑  收藏  举报