一、概述
1、基本构成
- 结合上图总结一下之前的数据读取的操作
- CPU在第一个时钟周期时通过地址总线发出要取数据的地址,这个地址是指的存储单元的地址。
- MAR收到后,经过译码器得到指定的存储单元。
- CPU在第二个时钟周期时通过控制总线讲读指令发送到主存储器
- 控制电路根据信令来操作读写电路
- 将之前得到主存储器地址中的数据写入MDR
- 通过数据总线讲MDR中的数据送入到IR或者ACC
2、主存与CPU之间的联系
- CPU和主存之间主要是三个总线:地址、数据、命令
- 数据总线是双向的,而地址是单向
3、主存中存储单元地址的分配
- 数据在存储器中存储主要有两个方式,大端和小端。
- 图中高位字节指的是0x12345678中的12,其中从左到右为从高高低
- 但是在存储器中,地址小的为低位
- 所以大端中就是高位的12存在了低位,小端就是低位的78存在了低位。
- 关于按字节寻址和按字寻址详见延展阅读,
二、半导体存储芯片
1、基本结构
- 芯片容量计算:2^(地址线数量) * 数据线带宽,e.g 地址线10跟,数据线 4bit,那么容量就是 2^10 * 4 = 1k * 4bit
- 片选线:
- 片选线的作用是来标记一次数据存储过程中,数据是否存在于一个存储芯片中。
- 两周标识方式:CS\CE,上面的线表示低电平。也就是说如果管脚是低电平就说明这次要访问的是这个芯片。
- 比如内存条上有很多存储芯片,那么一次可能用到的数据在一个或者多个芯片上。
- 读写控制线:可以使用一根或者两个线来表示
2、片选线的作用
- 上图展示了一个使用片选线的demo
- 每个芯片16K x 1bit,当计算机需要64K x 8bit时需要32个芯片来实现。
- 8个芯片串行,用之前大楼的概念来看,就是整个楼有2^16个房间,每个房间8个床位,但是注意这8个床位其实是跨房间的(或者说是跨楼的)。如果要住8个人(8bit数据),那么并不是全住在第一个房间,而是住在8个楼(一组串行芯片)的编号相同房间中编号相同的床位上(图中每个房间其实只有一个床位)。
3、译码驱动
- 地址总线传到存储器的地址需要进行译码,然后才能得到在存储器对应的地址。
线选法
- 线选法图中有4根地址线,因此存储单元有 2^4 = 16个,对应字线0-15。
- 根据4根线上的数据得到具体的字线后,字线上的数据读写到MDR。
- 弊端是如果想要一个1M*8大小的存储器,那么地址线需要20条,而字线需要1M条,对于芯片来说很难。
重合法
- 相当于笛卡尔坐标系
- 10条地址线可以表达出 32 * 32个位置,每个位置是1bit
- 与线选法比较,1M*8的空间 = 2^20 * 2^3 = 2^23bit , 用重合法可以做 2^12 * 2^11 这样一个矩阵,也就是 4k + 2k = 6k条字线。
- 最初看到这里的时候有个疑惑,就是根据重合法每次只能拿到一个bit,但是看到后面的Intel 2114 RAM矩阵后就知道了如何使用重合法一次获得多个bit。
三、随机存取机器(RAM)→ 内存
1、静态RAM(SRAM)
保存0和1的原理
- 双稳态触发器
基本单元电路如何构成
静态RAM芯片如何读写
Intel 2114 RAM 矩阵
- 上图很好的解释了在使用重合法时如何一次读取多个bit数据。
- 行地址译码6位,所以范围是0-63,也就是说字线有64条。 列地址译码有4位,也就是说有16个。
- 字长为64bit,将64分成4组,每组是16bit(对应列地址位数)。
- 当行地址是0,列地址也是0时,其实取的是四组中第0位的数据,这样就实现了重合法一次取出多位。
- 写操作基本相同。
2、动态RAM(DRAM)
保存0和1的原理
- 电容,充电是1,没充电是0。
基本单元电路如何构成
- 左边3管动态RAM,右边单管。
动态RAM芯片如何读写
- 行地址译码器这里参加译码的不止是地址还有读写选择线。
- 三角形是刷新放大器。作用:电容存储电荷的原理,电容会漏掉,经过一段时间电容上信号消失。刷新放大器对电容中保持的信息进行重现。
动态RAM刷新
- 只和行地址有关,与列地址无关。一次刷新刷的就是一行所有的基本单元电路。
刷新方式
- 集中式
可以看到2毫秒按照存取周期0.5微秒分成了4000份,其中128个周期是用来刷新的。
在死区时间内CPU和IO设备如果想访问动态RAM只能等待。
分散式
本来每个存取周期是0.5微秒,但是为了刷新又加了0.5,导致一个存取周期变为了1微秒。
没有了死区
和集中式比较,2毫秒内每行要刷新15.6次,存在过度刷新的问题。
异步式
- 在15.6微秒中可以认为是集中式,在2毫秒的周期内看是分散式的。
- 确实在安排好的情况下不会出现死区。
3、SRAM和DRAM的比较
- 注意引脚数,DRAM行地址和列地址可以分开传输,所以少。但是这样在速度上慢。
- 而且DRAM电容充放电比较慢,所以读取速度慢。
四、只读存储器 ROM
- 基本都是电子元器件的内容
五、存储器与CPU的连接
存储器扩展
- 位扩展
位扩展利用两个芯片的数据线放到数据总线上不同的线上
字扩展
利用多出来的一条地址线作为片选线,从而实现两个芯片逻辑上的串联。扩展地址线长度。
位和字扩展
- 多出两根地址线,形成一个范围从0-3的可变数字。
- 将8个芯片分成4组,刚好对应上面的数字。通过地址线A11 A10加不同的电来实现片选译码。
- 对于每组2个芯片正常的位扩展。
一个连接的练习
- 开始学位和字的扩展时觉得很奇怪,但是当会后讲到一个如何设计CPU与存储芯片连接的题时就明白了一个核心:因为CPU的地址线和数据线数量与芯片的不同,因此需要进行位的扩展来适应CPU的数据线,需要合理的设计地址线来做片选译码和地址译码。
- 通常地址线的高位做片选译码,低位做地址译码。
六、提高访存速度的措施
- 高位交叉,高位交叉中很大概率是M0被频繁访问,而后面的不会。因为数据或者指令总是按照内存地址的顺序被使用。
- 低位交叉
- 这样的地址布局可以使得M0-3这四个存储体可以依次的被CPU使用。如果报错的是代码指令,就是先调用M0的0000位置,然后是M1的0000位置,依次使用。
- 低位交叉被并发的访问,将一个存储周期分成4份。
延展阅读
1、关于按字寻址和按字节寻址的理解
设有一个1MB容量的存储器,字长32位,问:按字节编址,字编址的寻址范围以及各自的寻址范围大小?
如果按字节编址,则
1MB = 2^20B
1字节=1B=8bit
2^20B/1B = 2^20
地址范围为0~(2^20)-1,也就是说需要二十根地址线才能完成对1MB空间的编码,所以地址寄存器为20位,寻址范围大小为 2^20 = 1M
如果按字编址,则
1MB=2^20B
1字=32bit=4B
2^20B/4B = 2^18
地址范围为0~2^18-1,也就是说我们至少要用18根地址线才能完成对1MB空间的编码。因此按字编址的寻址范围是 2^18
以上题目注意几点:
1.区分寻址空间与寻址范围两个不同的概念,寻址范围仅仅是一个数字范围,不带有单位。而寻址范围的大小很明显是一个数,指寻址区间的大小。而寻址空间指能够寻址最大容量,单位一般用MB、B来表示;本题中寻址范围为0~(2^20)-1,寻址空间为1MB。
2.按字节寻址,指的是存储空间的最小编址单位是字节,按字编址,是指存储空间的最小编址单位是字,以上题为例,总的存储器容量是一定的,按字编址和按字节编址所需要的编码数量是不同的,按字编址由于编址单位比较大(1字=32bit=4B),从而编码较少,而按字节编址由于编码单位较小(1字节=1B=8bit),从而编码较多。
3.区别M和MB。
M为数量单位。1024=1K,1024K=1M
MB指容量大小。1024B=1KB,1024KB=1MB.