随机存取存储器RAM:
能够随时进行数据的读出和写入,掉电后信息全部丢失。
只读存储器ROM:
用户在使用时只能读出其中的信息,不能修改和写入信息,掉电不会消失。
半导体存储器一般由存储器、译码驱动电路、地址寄存器、读写驱动电路、数据寄存器、控制逻辑组成。
存储体:
存放1位信息:0、1——记忆单元/基本存储电路
N个记忆单元——存储单元
2^M个存储单元——存储体
数据:
存储体里一个存储单元为N位,故需要N条数据线。
地址:
存储体里有2^M个存储单元,要选完这些单元要用M条地址线。
因此——存储器容量:
半导体存储器芯片的存储容量是指存储器可以容纳的二进制信息量。用m×n表示,m为存储单元数,n为每个存储单元存储信息的位数。
因此,若某存储器芯片有M位地址总线、N位数据总线,则其存储容量为2^M×N位。
例:某存储器芯片的地址线为16位,存储字长为8位,则其存储容量为多少?
解:该存储器芯片中M为16位,N为8位,则其存储容量为2^16×8位=64K×8位。
2^10 = 1k
2^20 = 1M
2^30 = 1G
6116有2K × 8位= 2^11 x 8 = 16384个存储位,排列成128x128的矩阵,可构成2KB的内存。
2K 表示芯片内的地址有11位(A0-A10),因此有11条地址线,
8位表示一个单元有8个二进制位,因此有8条数据线,
芯片内有128×128的存储单元矩阵。
它有11条地址线,
7条用于行地址译码(可选择2^ 7=128个),
4条用于列地址译码(可选择2^4 = 16个),共128x16 = 2048 = 2K。
DRAM芯片都设计成位结构形式,即每个存储单元只有一位数据位。
一个芯片上含有若干字,如4K×1位,8K×1位,16K×1位, 64K×1位或256K×1位等。
存储体的这一结构形式是DRAM芯片的结构特点之一。
Intel 2164A的内部结构
Intel 2732A是一种4K×8 b的EPROM
4k = 2^12,因此需要12条地址线A_11~A_0
8位数据,需要8条数据线O_7~O_0;
~CE为芯片允许信号,用来选择芯片;
~OE为输出允许信号,用来把输出数据送上数据线,只有当这两条控制线同时有效时,才能从输出端得到读出的数据。
NOR FLASH最初由Intel公司于1988年推出,其采用了ETOX(EPROM Tennel Oxide)技术,因此具有EPROM的数据非易失性和可更新性。
NAND FLASH结构最初由东芝公司于1989年推出,与前几种ROM不同,其数据和地址采用同一总线进行串行读取,不能随机按字节进行访问。
双端口存储器具有两组相互独立的读写控制电路,两组电路独立并行工作,因而工作速度较快而得到较为广泛的应用。
典型的双端口静态存储器芯片IDT7132
在高速双端口存储器IDT7132 中,有两个相互独立的端口:左端口和右端口。分别具有各自的地址线、数据线和控制信号。当任意一个端口被选中时,即可对整个存储器进行读写。
存储器结构确定
微机中的内存往往被分为片内存储器和扩展的片外存储器。构建存储器系统时,应根据微处理器的不同,选择不同的存储器组织结构。如:
外部存储器系统设计步骤
存储层次(Memory hierarchy)是综合考虑容量、速度、价格的因素,建立的存储器组合,以满足系统对存储器在性能和经济两个方面的要求。
存储层次的结构:
为了缓解CPU与内存之间额速度差异,目前的微机型技术一般采用在CPU和内存之间插入一速度较快的SRAM,起缓冲作用。
问题的提出:
微机系统中的内部存储器通常采用动态RAM构成,具有价格低,容量大的特点,但由于动态RAM采用MOS管电容的充放电原理来表示与存储信息,其存取速度相对于CPU的信息处理速度来说较低。这就导致了两者速度的不匹配,也就是说,慢速的存储器限制了高速CPU的性能,影响了微机系统的运行速度,并限制了计算机性能的进一步发挥和提高。高速缓冲存储器就是在这种情况下产生的。
存储器访问的局部性:
CPU需要频繁地与内存进行数据交换,包括取指令代码及数据的读写操作。
在一个较短的时间内,取指令代码的操作往往集中在存储器逻辑地址空间的很小范围内(多数情况下,指令顺序执行,因此指令代码地址的分布就是连续的,再加上循环程序段和子程序段都需要重复执行多次,因此对这些局部存储单元的访问就具有时间上集中分布的倾向);
数据读写操作的这种集中性倾向虽不如取指令代码那么明显,但对数组的存储和访问以及工作单元的选择也可以使存储器单元相对集中。
这种对局部范围的存储器单元的访问比较频繁,而对此范围以外的存储单元访问相对甚少的现象,称为程序访问的局部性。
Cache-主存存储结构及其实现:
在主存和CPU之间设置高速缓冲存储器Cache,把正在执行的指令代码单元附近的一部分指令代码或数据从主存装入Cache中,供CPU在一段时间内使用。由于存储器访问的局部性,在一定容量Cache的条件下,可以做到使CPU大部分取指令代码及进行数据读写的操作都只要通过访问Cache,而不是访问主存而实现。
优点:
如果数据在Cache中,则CPU对Cache进行读写操作,称为一次命中。命中时,CPU从Cache中读(写)数据。由于Cache速度与CPU速度相匹配,因此不需要插入等待状态,故CPU处于零等待状态,也就是说CPU与Cache达到了同步,因此有时称高速缓存为同步Cache;
若数据不在Cache中,则CPU对主存操作,称为一次失败。失败时, CPU必须在其总线周期中插入等待周期TW。
例如:RAM的存取时间为80ns,CACHE的存取时间为6ns,CACHE的命中率为90%。
则存储器整体访问时间由没有CACHE的80ns减少为:
6ns×90% + 80ns×10% = 13.4ns
在一定的范围内,Cache越大,命中率就越高,但相应成本也相应提高。
Cache与内存的空间比一般为1:128。
虚拟存储器(Virtual Memory)是指在内存不足的情况下,利用外存储器的一部分空间模拟内存,使软件可以将其当成一般的内存使用,从使用的角度来看,除了速度较慢外,其他的和内存相比并无明显区别。
(1) 主存-辅存层次
主存一般由半导体器件构成,辅存一般为磁存储器和光存储器。主存的速度远高于辅存,但辅存成本低,容量 大,而且断电后信息不会丢失。
CPU不能直接访问辅存,辅存主要用于存放大量程序、数据文件。当CPU执行某程序时,在存储管理软件和有关硬件的支持下,把有关程序从辅存调入主存,再由CPU执行,这样便形成了主-辅存的存储层次。
(2) 虚拟存储器的概念
一台计算机主存容量有限,而辅存容量很大,如果一个程序及数据要比主存容量大,就无法运行。为解决这类问题,采用了硬件和软件的综合技术 ——虚拟存储器。
在STM32的存储器系统中,存储器与外设空间采用统一编址方式,且各字节按小端格式在存储器中存储。
STM32 采用了固定的存储映射结构,其地址空间是4 GB,程序存储器、数据存储器、寄存器和 I/O 端口排列在此空间内,整个存储空间分为8个主要块,每个块为 512 MB。
通过地址计算内存:
地址0x00000000 ~ 0x1FFFFFFF,就是2x16^7 = 0.5G = 512 MB)
代码区(0x00000000 ~ 0x1FFFFFFF):用于存放程序。
SRAM 区(0x20000000 ~ 0x3FFFFFFF):用于片内SRAM,可存储数据,亦可以存放程序,用于固件升级等维护工作。
片上外设区(0x40000000 ~ 0x5FFFFFFF):用于片上外设。STM32通过把片上外设的寄存器映射到外设区,从而可以简单地通过访问内存的方式来访问这些外设的寄存器,以控制外设的工作。
外部RAM 区的前半段(0x6000 0000 ~ 0x7FFF FFFF):指向片上RAM 或片外RAM。
外部RAM 区的后半段(0x8000 0000 ~ 0x9FFF FFFF):指向片上RAM 或片外RAM。这两部分合起来可以组成1GB的片外RAM空间。
系统区(0xE000 0000 ~ 0xFFFF FFFF):用于私有外设和芯片厂商指定功能区。
STM32系列采用可变静态存储控制器(Flexible Static Memory Controller, FSMC)这种新型的存储器扩展技术来进行外部存储器扩展,其可根据系统的应用需要,灵活方便地进行不同类型大容量静态存储器的扩展。
FSMC支持多种数据宽度的异步读/ 写操作,而且支持对NOR闪存、PSRAM、NAND 闪存的同步突发访问,支持程序从FSMC扩展的外部存储器直接运行。
外部RAM的扩展:
STM32支持1GB 的外部RAM扩展,在进行存储器扩展时,FSMC可以将外部存储器划分为256MB 的连续4个存储块。(0x60000000 到 0x9FFFFFFF)
位绑定操作是指把一个地址单元的32 位变量中的每一位,通过一个简单的地址变换算法,映射到另一个地址空间,使得每一位占用1个地址,当对此地址空间进行操作时,只有数据的最低位是有效的。
当对某空间位操作时,就不必进行传统的读取-屏蔽-操作,可以直接对32位变量中的每一位进行直接操作,从而优化了RAM和I/O寄存器的读/写方式,提高了32位变量中位操作的速度。
在SRAM区的下部,地址空间0x2000 0000~ 0x2010 0000为存储器“1MB的位绑定区(Bit - Band)”,与之对应的是 32MB 的“位绑定别名区”,位于地址空间0x2200 0000~0x23FF FFFF。
位绑定别名区里面的每一个字(32 位) 就对应位绑定区的一位,而在位绑定区中,每一位都会映射到别名地址区的一个字中的最末位,从而使得对别名地址的访问最终会变换成对位绑定区的访问。
别名区中的每个字与对应位绑定区的相应位的对应关系为:
如SRAM 地址为0x20000300 的字节中的第2 位,对应别名区中地址计算如下: