2.4只读存储器(ROM)
- 早期只读存储器--厂家提前写好内容
- 改进1 --用户可以自己写--一次性
- 改进2--可以多次写--要能对信息进行擦除
- 改进3--电可擦写--特定设备
- 改进3--电可擦写--直接连接到计算机
一、掩模ROM(MROM)
厂家把信息直接写在ROM上
- 1K*1的掩模ROM
- 最上面一排晶体管是预充电管
- 经过预充电管预充电后(当作限流电阻使用),所有V线都是高电平,在行列交叉点上有的有晶体管,有的没有晶体管
- 假设某交叉点被选中且有晶体管,若被选中晶体管被导通,两端被导通,V线高电平会变成低电平
- 输出放大器会对数据进行反向
- 行列选择线交叉处有MOS管为1否则为0
二、PROM(一次性编程)
- 熔丝如果进行读出和写入可以用熔丝的通和断来保存信息,如果想保存0用大电流烧断熔丝
- 编程后如果程序需要修改,只能重新购买芯片
三、EPROM(多次性编程)
N型沟道浮动栅MOS电路
- G 栅极、S 源、D漏
- 若在D加正电压,就会在源和漏之间形成浮动栅,使源和漏不导通,保存的信息认为是0
- 如果在D不加电压,不形成浮动栅 S与D导通 为1
- 如果要进行修改,重新写入,需要驱散浮动栅
- 使用紫外线照射进行擦洗
四、EEPROM(多次性编程)
- 电可擦写
- 局部擦写
- 全部擦写
五、Flash Memory(闪速型存储器)
用在u盘或者硬盘,缓存
2.5存储器与CPU的连接
一、存储器容量的扩展
1、位扩展(增加存储字长)
- 用 2片 1K*4位存储芯片组成1K*8位的存储器
- 2114 1K的容量需要10根地址线,将十根地址线输入到每一个2114地址管脚
- 2114是4位的 2个2114提供8位数据 每个2114数据线分别和cpu数据线上的四条进行连接,这样可以满足cpu需要8位数据的要求
- 两个芯片的片选要连接在一起,使两个芯片同时进行工作
- 一旦有读写信号会从两个芯片内部相同的地址单元各读出4位数据信息放在8条不同的数据线上
2、字扩展(增加存储字的数量)
- 用 2片 1K*8位 存储芯片组成2K*8位的存储器 2K需要11条地址线
- 每个芯片用的是A0-A9,系统余了一条地址线A10
- 若A10=0选择第一个芯片如果A10=1就选择第二个芯片,A10就是片选信号
3、字、位扩展
- 用 8片 1K*4位 存储芯片组成 4K*8位的存储器 12根地址线 8根数据线
- 使用2-4译码器 00第一组 01第二组 10第三组 11第四组
二、存储器与CPU的连接
1、地址线的连接
CPU给出地址,存储器找到相应存储单元,一般地址连接时,地址低位作为地址送到存储器地址线中,高位作为芯片选择信号
2、数据线的连接
CPU的数据线条数可能比存储器长度多,这时要做位扩展,使存储器输入输出数据满足CPU要求。
3、读/写命令线的连接
ROM除外(只读不写)
4、片选线的连接
片选线连接时要确认CPU要访问存储器,每一个内存芯片都有自己的地址范围,这个地址范围要满足CPU的要求
5、合理选择芯片
保存系统程序用ROM,保存配置信息的部分用ROM,用户程序或者系统程序运行区域是可读可写的用RAM芯片
- MREQ信号一定要用,只有这个信号是低电平时这次访问的地址才在存储器当中
2.6存储器的校验
内存为例,内存是电子设备,信息保存在电容当中,如果采用静态RAM,会保存在四管触发器当中,如果内存所处的电磁环境比较复杂,或者是在空间环境下收到带电粒子的打击,就可能会造成电容的充电放电,或者是触发器的反转,存放在存储器当中的信息就可能会出错。存储器中保存了程序运行需要用的代码,如果不进行校验,会导致程序的运行错误
合法代码集合
1、{000,001,010,011,100,101,110,111} 检0位错、纠0位错
从000-111连续变换,其中任何代码出错变化之后依然是集合中的合法代码,计算机检测不出代码出错。
2、{000,011,101,110} 检1位错,纠0位错
000 101 110 错1位都可以转为100
3、{000,111}检1位错,纠1位错
4、{0000,1111}检2位错,纠1位错
5、{00000,11111}检2位错,纠2位错
一、编码的最小距离
最小距离:合法代码集中,任意两组合法代码之间二进制位数的最小差异。
编码的检错、纠错能力与编码的最小距离有关
二、汉明码的组成
汉明码采用奇偶检验
- 奇校验:加上一个校验位,加上原来的数据位,让代码1的个数是奇数个
- 偶校验:加上一个校验位,加上原来的数据位,让代码1的个数是偶数个
汉明码采用分组校验
00100011 -> 100100011 第一位校验位,总共偶数个1 偶校验 ->1001000011 两位校验位分两组校验
汉明码的分组是一种非划分方式
三个圈为P3 P2 P1三组
分成三组,每组1位校验位,幷包括4位数据位,1、2、4、8位置放校验码
2.7 提高访存速度的措施
内存速度与cpu速度提升速度相差很多,但是cpu运行程序的时候,需要的数据和指令都要来自于内存,训醒的结果要保存的内存当中去,如果存储器很慢,cpu再快也无法提升整机的速度,cpu得不到所需要的数据和指令就只能空等,这种现象叫做存储墙。
- 采用高速器件
- 采用Cashe-主存
- 调整主存的结构
一、单体多字系统
把存储器的存储字长加长,CPU的字长是16位,存储器的存储字长设为64位,cpu每次存储器,都可以访问出4个机器字,每一个都可以是一个机器指令,或者是长度为16的数字,一次性把这个4个字取出存到数据寄存器当中,用的时候从数据寄存器中将其取走即可提升速度。
问题1:cpu向存储器中某单元写一个长度为16的字,先写到单字长寄存器,再写到4个字长的数据寄存器中,再写入到存储器当中。会造成,我们可能只需要写16位,但剩下的48位也会被写入到给定的存储单元,会造成给定的存储字有48位被修改,修改可能是错误修改。
问题2:如果我们要取的数据或指令不是连续存储的,比如一次取出了4条指令,第一条就是跳转指令,但是跳转比较大,不在这4条当中,这时取出的4位只有一条有用。
二、多体并行系统
1、高位交叉 顺序编址
给存储体构成的存储器进行编址时,从某一个存储体开始顺序对其中单元进行编址
若每个存储体都有自己的控制电路,都有自己的MAR、MDR、地址译码器,能够对读写信号进行锁存,那么4个存储体就可以进行并行操作了
把多个存储体进行独立,并且每个存储体都有自己的控制电路来进行访存操作,四个存储体就有了并行操作的基础
问题:如果用户使用一个程序,程序在计算机中是按序存储的,若一条指令存在000000,下一条存在000001,指令按序执行,在执行程序过程中M0被CPU不停访问,其他存储体是空闲的,按照程序存取特征来说,会造成一个繁忙其他空闲的问题
用高位作为选择信号,选择存储体,低位作为存储体内部的地址输入到存储体当中寻找存储单元。适合存储器容量扩展不适合提高带宽和访存速度
2、低位交叉 各个体轮流编址
代码在存储体当中按地址进行顺序存储,000000,000001,cpu取指令时,在一个访存周期的开始给出要访问的地址包括体号和体内地址。这个信号假如访问M0,M0会把内部地址和读写命令进行锁存,自己完成读操作,cpu在同一个主存周期中继续传输地址给M1、M2,轮流的对M0、M1、M2、M3进行访问。如果M0准备好了数据,在一个存取周期要结束时,可以向cpu进行传送。此方法为分离式通讯提高存储器带宽
三、高性能存储芯片
1、SDRAM(同步DRAM)
在系统时钟的控制下进行读出和写入
如果采用同步方式要求CPU和存储器之间在给定的时间点上必须开始或者完成给定的操作,这样存储器的操作就可以和cpu的速度保持一致,cpu不需要等待
这要求存储器芯片速度非常快
2、RDRAM
主要解决存储器带宽问题
3、带Cashe的DRAM
在DRAM的芯片内集成了一个由SRAM组成的Cashe,有利于猝发式读取
读第一个数据时要从内存中读,速度比较慢,但是读后续的数据,因为已经被缓冲到Cashe当中,速度会非常快。