计算机组成原理第三章

第三章要解决的问题如下:
程序的局部性指的是什么?
存储器的层次结构是什么?
存储器的技术指标是什么?
什么是哈佛结构?
什么是大小端模式?
什么是边界对齐?
什么是SRAM?
什么是DRAM?
什么是存储器扩展?
如何根据芯片参数判断地址线和数据线数目?
如何计算芯片的地址空间?
什么是译码器?

1.程序的局部性原理

在某一段时间内频繁访问某一局部的存储器地址空间,而对此范围之外的地址空间则很少访问的现象称为程序的局部性原理。
而局部性原理又可以分为两部分:
1.时间局部性:最近被访问的信息很可能还要被访问。
时间局部性体现了一种程序结构:循环结构
2.空间局部性:最近被访问的信息邻近地址的信息也有可能被访问。
空间局部性体现了一种程序结构:顺序结构

2.存储器的层次结构


存储器的大致结构如上图所示,需要注意的是速度越靠上越快,容量越靠下越大,价格越靠上越高。
其中辅存的作用是:解决了主存容量不够和高成本的问题。
Cache的作用是:解决了主存与CPU之间速度不匹配的问题。

两级存储系统:内存储器和外存储器。
三级存储系统Cache、主存和外存储器。即将内存储器又分为Cache和主存两部分。
注意:CPU不能直接访问外存储器,外存储器的信息必须调入内存储器后才能由CPU处理。

3.存储器的技术指标

存储器的性能指标主要是存储容量存取速度。而存取速度通常可以用存取时间、存储周期和存储器带宽来描述。
存储容量:存储容量是指一个存储器中可存储的信息比特数,可以表示为存储字数(存储单元数) × \times ×存储字长(每单元的比特数)
存取时间:从存储器接受到读/写命令开始到信息被读出或写入完成所需的时间,取决于存储介质的物理特性和寻址部件的结构。
存储周期:存储器连续读写过程中一次完整的存取操作所需的时间,即CPU连续两次访问存储器的最小时间间隔。
存储器带宽(数据传输速率,频宽):单位时间里存储器所存取的信息量,带宽=总线宽度/存储周期
下图是对存取时间和存储周期的细致划分:

由图可知,存储周期=存取时间+恢复时间,因此一般情况下,存储周期略大于存取时间。

4.哈佛结构


哈佛结构是一种将指令储存和数据储存分开的存储器结构,可支持:数据和指令并行储存、指令预取,提高处理器的执行效率;另外,指令和数据可有不同的数据宽度。

5.大小端模式


如上图所示,对于一个int数据 ( 01234567 ) H (01234567)_H (01234567)H,我们将其转换为 ( 00000001001000110100010101100111 ) B (00000001001000110100010101100111)_B (00000001001000110100010101100111)B,因为多字节数据在内存里是占连续的几个字节,而int数据又占据连续的4个字节,所以应该将该数据划分为以每4个字节为一个地址的方式,但是怎么对应着内存里面的存储呢?这里就涉及了两个方法。
大端模式(Big-endian):是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。即数据从左往右存储。
小端模式(Little-endian):是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。即数据从右往左存储。
举个例子:
0x12345678按大端模式存放时,其所在存储单元最低字节单元存放的数据是0x12,最高字节单元存放的数据是78
0x12345678按小端模式存放时,其所在存储单元最高字节单元存放的数据是0x12,最高字节单元存放的数据是78

6.边界对齐


存放一个机器字的存储单元,通常称为字存储单元,相应的单元地址称为字地址。而存放一字节的单元,称为字节存储单元,相应的地址称为字节地址。

首先来说明一下什么是存储字长:主存的一个存储单元所包含的二进制位数。而目前大多数计算机的主存按字节编址,即一个字节对应一个地址。

边界不对齐:编址的时候不考虑整齐性,有空就补。
边界对齐:编址的时候考虑整齐性,如果不能一次就访问完,有空也不补,而是留出空位,以空间换时间。
一句话:K字节大小的数据必须要存储在K的整数倍的地址上。

7.SRAM

SRAM用锁存器(触发器)作为存储元。只要直流供电电源一直加在这个记忆电路上,它就无限期地保持记忆的1状态或0状态。如果电源断点,则存储的数据(10)就会丢失。

如上图所示:左边是一个MOS管,右边是两个MOS管串联,T1始终连接一个高电压,为导通状态。T2若导通,因为T1的导通电阻是T2的100倍,这时电压全在T1侧,故输出电压小,为截止状态;T2若截止,则相当于T2导通电阻无限大,此时电压全在T2侧,输出电压大,为导通状态。
任何一个SRAM,都有三组信号线与外部打交道:
1.地址线:它指定了存储器的容量,设地址线为 n n n条,则存储器的容量是 2 n 2^n 2n个存储单元。
2.数据线:它指定了存储器的字长,设数据线有 n n n条,则存储器的字长是 n n n位。
3.控制线:它指定了对存储器进行读还是写操作。注意:读写操作不会同时发生。

若字长为16位,则1字长=16/8=2字节,按字寻址就为: 存 储 容 量 字 长 = 存 储 容 量 2 字 节 = 2 24 2 = 2 23 = 8 M \frac{存储容量}{字长}=\frac{存储容量}{2字节}=\frac{2^{24}}{2}=2^{23}=8M =2=2224=223=8M
若字长为32位,则1字长=16/8=4字节,按字寻址就为: 存 储 容 量 字 长 = 存 储 容 量 4 字 节 = 2 24 4 = 2 23 = 4 M \frac{存储容量}{字长}=\frac{存储容量}{4字节}=\frac{2^{24}}{4}=2^{23}=4M =4=4224=223=4M
为了方便组织更大的存储容量,目前的SRAM芯片采用双译码模式。

对于单译码结构 n n n位地址需要 n n n条地址线,存储单元为 2 n 2^n 2n,译码输入线为 n n n条,译码输出线为 2 n 2^n 2n条;
对于双译码结构 n n n位地址需要 n n n条地址线,存储单元为 2 n 2^n 2n,而译码分为两部分,一部分给 X X X地址译码,一部分给 Y Y Y地址译码,故译码输入线为 n 2 + n 2 = n \frac{n}{2}+\frac{n}{2}=n 2n+2n=n条,所需译码线为 2 n 2 + 2 n 2 = 2 n 2 + 1 2^\frac{n}{2}+2^\frac{n}{2}=2^{\frac{n}{2}+1} 22n+22n=22n+1条。

8.DRAM

DRAM存储位元是基于电容器上的电荷量存储信息的,DRAM的读操作是破坏性的,读操作会使电容器上的电荷流失,因而读出后必须刷新。而未读写的存储元也要定期刷新,因为电荷量会逐渐泄露而减少。
由于DRAM容量很大,地址线的数目相当多,为减少芯片引脚的数量,将地址分为行、列两部分分时传送。存储容量为 1 M 1M 1M字,共需 20 20 20位地址线。此芯片地址引脚的数量为 10 10 10位。

为什么要进行刷新:存储单元被访问是随机的,有些存储单元可能长时间的不被访问,不进行存储器的读写操作,其存储单元内的原信息就可能会丢失。
刷新的实质:先将原信息读出,再由刷新放大器形成原信息重新写入的再生成的过程。
刷新周期:两次刷新之间的时间间隔,又称刷新间隔。
刷新地址:由刷新地址计数器给出。刷新地址计数器的宽度等于行地址锁存器的宽度。且自动刷新不需要给出列地址。即刷新按行进行。
刷新时间:规定的一个周期内刷新的总时间。
注意区分刷新周期跟刷新时间。
集中刷新:
在一个刷新周期内,利用一段固定的时间,依次对存储器的所有行进行逐一再生,期间停止对存储器的读写操作,这段时间称为死区
优点:读写操作时不受刷新工作的影响,系统的存取速度较快。
缺点:在集中刷新期间(死区)不能访问存储器。

2 m s 2ms 2ms的刷新周期,可以算出存取次数为 2 m s 0.5 μ s = 4000 \frac{2ms}{0.5\mu s}=4000 0.5μs2ms=4000个,又因为DRAM内部有 128 128 128行,故刷新次数为 128 128 128个,刷新时间为 128 × 0.5 μ s = 64 μ s 128\times0.5\mu s=64\mu s 128×0.5μs=64μs,读写次数为 4000 − 128 = 3872 4000-128=3872 4000128=3872个,读写时间为 2 m s − 64 μ s = 1936 μ s 2ms-64\mu s=1936\mu s 2ms64μs=1936μs
分散刷新:
指对每行存储单元的刷新分散到每个存储周期内完成(对某一行某芯片进行读写操作后,紧接着刷新,包含在了读写周期内)。
优点:无死区
缺点:存取周期长,整个系统的速度降低了。

刷新周期为 2 m s 2ms 2ms,又因为读写操作与刷新交替进行,故存取次数为 2 m s 0.5 μ s + 0.5 μ s = 2000 \frac{2ms}{0.5\mu s+0.5\mu s}=2000 0.5μs+0.5μs2ms=2000个,刷新时间为 128 × 1 μ s = 128 μ s 128\times1\mu s=128\mu s 128×1μs=128μs
异步刷新:
前两种方式的结合,缩短了死时间,充分利用了最大刷新间隔为2ms的特点(只要在2ms内对这一行刷新一遍就行)。且把刷新安排在指令译码阶段,不会出现死区
这种方案克服了分散刷新许独占 0.5 μ s 0.5μs 0.5μs用于刷新,使存取周期加长且降低系统速度的缺点,又不会出现集中刷新的访问死区问题,从根本上提高了工作效率。

刷新时间为 2000 m s 128 ≈ 15.6 μ s \frac{2000ms}{128}\approx15.6\mu s 1282000ms15.6μs

9.存储扩展

1.位扩展

位扩展:是指增加存储字长。例如,21K × \times ×4位的芯片,可以组成1K × \times ×8位的存储器。
题外话:怎么根据给出的芯片判断地址线和数据线数目

2.字扩展

字扩展:这种方式仅仅增加了存储单元数,各单元位数不变。

3.字位扩展

字位扩展:即加长存储单元的数量又增加各单元的位数,字位同时扩展的时候,先进行为扩展,在进行字扩展。

所需芯片数量: 128 K × 32 16 K × 8 = 32 \frac{128K\times 32}{16K\times 8}=32 16K×8128K×32=32

10.根据芯片参数判断地址线和数据线数目

一般题目中会给出芯片的参数值,如16K × \times ×8的芯片,16K代表存储器的容量,故为地址线的数目,16K= 2 14 2^{14} 214,故地址线就为14条,8代表存储器的字长,故为数据线的数目,8= 2 3 2^3 23,故数据线就为3条;128K × \times ×32的芯片,128K= 2 16 2^{16} 21632= 2 5 2^5 25,其地址线为16条,数据线为5条。

11.计算芯片的地址空间


如上图所示,地址空间的编码是根据地址线的个数来确定的,即地址线有 n n n条,则二进制位有 n n n位,对于16K × \times ×8的芯片,地址线有14条,故编码地址从 A 0 − A 13 A_0-A_{13} A0A13,进行扩展后,地址线有17条,故编码地址扩展3位,从 A 14 − A 16 A_{14}-A_{16} A14A16,而地址的编码又是以16进制的形式存储,故每四个二进制位表示一个地址,不足四位的,高位补0。例如00000000000000000=00000H00011111111111111=03FFFH11100000000000000=1C000H

12.译码器

在编码时,每一组代码都被赋予了特定的含义,即表示一个确定的信息,而译码则是编码的逆过程,是把每一组代码的含义翻译出来的过程。完成译码功能的逻辑电路称为译码器。

二进制译码器

将具有特定含义的一组二进制代码,按其原意翻译成对应的输出信号的逻辑电路,叫做二进制译码器。由于 n n n位二进制代码可以对应 2 n 2^n 2n个特定含义,所以二进制译码器是一个具有 n n n根输入线和 2 n 2^n 2n根输出线的逻辑电路,如下图所示。

对于每一组可能的输入代码,译码器仅有一个输出信号为有效电平。因此,我们可以将二进制译码器当做一个最小项发生器,即每个输出正好对应于一个最小项。



译码器和其他功能模块都经常含有一个或几个使能输入端,利用使能端控制输入,既能允许电路正常工作,也能使电路处于禁止工作状态。

3-8译码器

1.逻辑图

2.真值表

3.特点

4.Logisim实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值