主存的技术指标:
存储容量:能存放二进制代码的总位数
存储容量 = 存储单元个数 x 存储字长
例如:存储字长32位 = 4字节,存储容量=4*32=128MB
存储速度
存储器带宽
地址线:单向输入,相当于门牌号,地址线有两位,门牌号2位,可以表示(0-99)102户主,
译码驱动:把地址总线送来的地址信号翻译成对应的存储单元的选择信号,该信号在读写电路配和下 完成读写操作
片选线:
CS :芯片选择信号
CE: 芯片使能信号
读写控制线:
WE:(低电平写 高电平读)
OE:(允许读) WE(允许写)
半导体存储芯片的译码驱动方式:
地址线:10根,数据线为4根, 芯片容量 :210 x 4 = 4k位
存在问题:
假设1M *8的存储器,20位地址线,有220次方,也就是100万条线,内存很难集成这么高,那么新的方法来了。。。。
保存0与1的原理:利用触发器工作原理存储信息
一般有一个输出端和两个输入端(“+”、“-”端各一个),当输入端的“+”端有触发信号时,输出端不管原来是什么状态,都会立即变为高电平,且一直稳定地输出高电平。如果当输入端的“-”端有触发信号时,输出端不管原来是什么状态,都会立即变为低电平,且一直稳定地输出低电平。这就是双稳态电路。
1.给出行选信号,打开T5 ,T6
2.给出列选信号,打开T7,T8
3.读选择有效
4.存放在A中的数据通过T6晶体管,送到位线A上,同时T8也是导通的,信号继续向下送,读选择有效,Dout,读出信号
0.将数据送至Din端
1.给出行选信号,打开T5 ,T6
2.给出列选信号,打开T7,T8
3.写选择有效,Din线打开
4.左 Din (取非) ->T7 ->T5->A`
5.右Din->T8->T6->A
保存0与1的原理:DRAM使用电容存储,电荷维持1~2ms,所以必须隔一段时间刷新(refresh)一次,如果存储单元没有被刷新,存储的信息就会丢失。 关机就会丢失数据。
高电容表示存1
低电容表示存0
1.T4管放置预充电信号,读数据线达到高电平Vdd
2.读数据线打开T2
3.如果极间电容Cg原存“1”(高电荷),T1导通,因为T2,T1导通后接地,读数据线电平降为(低电荷)读出“0”
4.如果极间电容Cg原存“0”(低电荷),T1截止,读数据线电平不变 读出“1”
5.读出线因为电平改变,读出信息与原信息相反
1.写数据线有效 T3管导通
2.如果写入数据为1,写数据线为高电平,通过T3向Cg进行充电,Cg中保存1
3.如果写入数据为0,写数据线为低电平,通过T3向Cg进行放电,Cg中保存0
4.写入信息与输入信息完全相同
1.字线上的高电平使T打开,
2.如果Cs上保存“1”为高电荷,经过T管在数据线上产生高电流,可以视为读出“1”
3.如果Cs上保存“0”为高电荷,经过T管在数据线上产生低电流,可以视为读出“0”
1.子线为高电平使T管导通,
2.如果写入“1”,数据线为高电平,经过T管对Cs充电,使其存“1”
3.如果写入“0”,数据线为低电平,经过T管对Cs放电,使其无电荷存“0”
刷新实质:先将原存信息读出,再有刷新放大器形成原信息并且重新写入的再生过程
与行地址有关
存储芯片容量有限,必须将若干存储芯片连在一起才能组成足够容量的存储器,通常有:
位扩展:
2片1K x 4位 存储芯片怎么组成1k x 8位的存储芯片?
字扩展:
2片1K x 8位 存储芯片怎么组2k x 8位的存储芯片?
1k=210
2k=211
同时扩展:
8片1K x 4位 存储芯片怎么组成4k x 8位的存储芯片?
1)地址线的连接
cpu的地址线比存储芯片的地址线多,通常是将cpu地址线的低位与存储芯片的地址线连接,高位扩充使用
2)数据线的连接
3)读写命令线的连接
高电平读 低电平写
4)片选线的连接(关键)
如果cpu没有访问存储器访问了I/O,来自CPU的片选有效信号MREQ为高电平,表示不要求存储器工作
5)合理选择存储芯片
ROM存放系统程序
RAM存放用户信息
设欲检测的二进制代码为n位,为使其具有纠错能力,需要添加K位检测位,组成n+k位的代码,检测位数K 应该满足 2k>= n+ k +1
检测位编号为:1 2 4 8 … 2k-1
c1 检测的小组包含1 3 5 7 9 11 。。。位
c2 检测的小组包含2 3 6 7 10 11 14 15 。。。位
c4 检测的小组包含4 5 6 7 12 13 14 15 。。。位
存储器模块数为:n,存取周期为:T 总线传输周期:t 已知低位交叉的存储器,连续读取n个字所需要的时间t1为: T +(n-1)t
已知高位交叉的存储器,连续读取n个字所需要的时间t2为: nT
单体多字系统:
适用于程序和数据在存储体内是连续存放的情况。在一个存取周期内,从同一地址取出多条指令,然后再逐条将指令送至CPU执行,这样增大了存储器的带宽,提高了单体存储器的速度。这里的单体应该就是一个模块,但是每次可以读取多个字,可以和多体进行比较。
多体并行系统
有多个模块,每个模块有相同的容量以及存取速度,各模块各自都有独立的地址寄存器(MAR),数据寄存器(MDR),地址译码,驱动电路和读写电路,他们能够并行工作,同时也能交叉工作(什么是交叉工作?),但是并行读出的数据在总线上需要分时传送。
地址分为体号与体内地址。
对于高位交叉编址的多体存储器而言,程序按体内地址顺序存放,他们在每一个模块中的地址是连续的,有利于存储器的扩充。高位地址表示体号,低位地址表示体内地址。
对于低位交叉编址的多体存储器而言,程序连续存放在相邻体中(又有交叉存储之称),低位地址表示体号,高位地址表示体内地址。这种编址方式又称为模M编址,其中M为模块数。
每个模块的存取周期是不变的,但是CPU交叉访问各体,使得这几个存储体的读/写过程重叠进行。
对于低位交叉的存储器,连续读取n个字所需的时间为T+(n-1)t,
对于高位交叉的存储器,连续读取n个字所需的时间为nT,
背景:I/o设备向主存请求的级别高于cpu访存,出现了cpu等待I/o设备访存的现象,致使cpu空等一段时间,降低了工作效率;cache的出现让cpu可以不直接访问主存,而与高速cache交换信息
程序访问的局部性:cpu从主存中存取指令的数据,只对主存局部区域地址访问,这是由于指令和数据在主存内都是连续存放的,使得cpu在执行程序中,访存具有相对局部性,这就称为程序访问的局部性;
公式: