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


    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可得模块号:

    地址3917251371348416710
    访问的模块号311231100132

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

    冲突地址序列
    开始_ _ _ 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。

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

    M0M1M2M3
    0123
    4567
    891011
    12131415
    16171819
    20212223
    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 为底的单位。

    单位大小十六进制数
    K210400H
    M22010,0000H
    G230~
    T240~

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

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

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

    10 为底的存储单位2 为底的存储单位
    KB = 103BKiB = 210B
    MB = 106BMiB = 220B
    GB = 109BGiB = 230B
    TB = 1012BTiB = 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)111
    字节 (byte, B)888
    半字 (1B/2B/4B)81632
    字 (2B/4B/8B,机器字长)163264
    双字3264128
    四字64128256
    • 指令字长:一个指令字中包含的二进制位数。

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

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

    补充:不同机器下的数据类型长度
    类型16 位机器32 位机器64 位机器
    char888
    short161616
    int163232
    long323232
    long long646464
    float163232
    double646464

    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—

  • 相关阅读:
    C++ 类成员指针
    104. Go单测系列4---编写可测试的代码
    1108 String复读机分数 20
    (附源码)springboot码头作业管理系统 毕业设计 341654
    Flutter入门-与原生数据传递
    软件测试/测试开发/人工智能丨视觉与图像识别自动化测试
    C# 如何使用windows服务做定时任务
    SpringBoot全局异常处理请求参数校验及响应体包装
    20、设计模式之责任链模式(Chain)
    【leetcode】【剑指offer】【二进制中1的个数】
  • 原文地址:https://blog.csdn.net/baidu_39514357/article/details/126677628