基础知识
ROM和RAM:
ROM:只读存储器(Read Only Memory),数据只能读出而不能写入,最早的ROM只是用来存储程序的地方,比如BIOS。
- PROM:可编程只读存储器,这样的产品只允许写入一次,所以也被称为“一次可编程只读存储器”。PROM在出厂时,存储的内容全为1,用户可以根据需要将其中的某些单元写入数据0(部分的PROM在出厂时数据全为0,则用户可以将其中的部分单元写入1),以实现对其“编程”的目的。PROM的典型产品是“双极性熔丝结构”,如果我们想改写某些单元,则可以给这些单元通以足够大的电流,并维持一定的时间,原先的熔丝即可熔断,这样就达到了改写某些位的效果。
- EPROM:可擦写可编程只读存储器,即Erasable Programmable Read-Only Memory。它可以使用紫外线照射一定的时间来达到擦出的功能,擦除后即可进行再编程。
- EEPROM:电可擦除可编程只读存储器,即Electrically Erasable Programmable Read-Only Memory。它的最大优点是可直接用电信号擦除,也可用电信号写入。它的擦除方式是使用高压电场,所以在EEPROM芯片内部都设置有电荷泵电路来产生高压。
- Flash memory:闪存,也是一种非易失性的内存,属于EEPROM的改进产品。它的最大特点是必须按块(Block)擦除,而EEPROM则可以一次只擦除一个字节(Byte)。目前“闪存”被广泛用在PC机的主板上,用来保存BIOS程序,便于进行程序的升级。FLASH分为NOR FLASH和NAND FLASH。NOR型闪存更像内存,有独立的地址线和数据线,但价格比较贵,容量比较小;而NAND型更像硬盘,地址线和数据线是共用的I/O线,类似硬盘的所有信息都通过一条硬盘线传送一般,成本要低一些,而容量大得多。因此,NOR型闪存比较适合频繁随机读写的场合,通常用于存储程序代码并直接在闪存内运行,手机就是使用NOR型闪存的大户,所以手机的“内存”容量通常不大;NAND型闪存主要用来存储资料,常用的闪存产品有SSD、U盘等
RAM:随机存取存储器(Random Access Memory),是与 CPU 直接交换数据的内部存储器。速度远远大于ROM,但是掉电后数据会丢失。
此处的随机是指RAM能够在任意时刻在任意存储位置进行读写,是相对于早期磁带等顺序存储设备而言。只要给出行地址和列地址,就能确定目标数据,这一过程和目标数据所处的物理位置无关。与“随机存取”相对的,是“串行访问”,指存取数据所花的时间与目标数据所在的物理位置有关。串行访问里面又分为顺序存取和直接存取。顺序存取如磁带,要想访问一个某一存储单元,必须先访问该单元前面的单元。直接存取如磁盘,磁头可以直接定位到目标存储单元,不需访问该单元前面的单元。需要注意的是,即使是直接定位,定位磁头所花的时间也是不同的,比如磁头当前在磁道0,定位到磁道2和磁道10000的时间肯定不同,所以存取数据所花的时间与目标数所在的物理位置仍然有关。
- DRAM:动态随机存取存储器,使用电容的电量来表示逻辑 0 和 1,电容充放电的特性导致其需要不断的刷新来保证数据不丢失,这就是“动态”的由来。存储容量较大,多用于数据存储。DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但价格要便宜很多,计算机内存条就是DRAM的。
- SRAM:静态随机存取存储器,使用触发器的两个稳定状态来表示逻辑 0 和 1,不需要刷新操作。存储容量一般较小,但读写速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。
- SDRAM:同步动态随机存储器,同步是指其时钟频率和总线的系统时钟相同,并且内部命令的发送与数据的传输都以它为基准。
SDRAM发展历史:
SDR SDRAM -> DDR SDRAM - > DDR2 SDRAM ->DDR3 SDRAM -> ……
SDR:相对于时钟来讲,数据只在时钟上升沿传输。
DDR:相对于时钟来讲,数据在时钟的上升沿与下降沿都传输。所以DDR在每个时钟周期都可以完成两倍于SDR的数据传输量。
SDRAM
SDRAM相对于FPGA内部的BRAM、LUT、RAM速度较低,带宽较小,但是SDRAM的容量远远大于FPGA内部的RAM。在7系FPGA中,RAM资源的大小通道为300Kbit ~ 900Kbit,而SDRAM的容易一般为256M*16bit = 4096Mbit。由此可见,SDRAM的容量远远大于FPGA内部的RAM容量。
而FPGA内部的资源是有限的,所以当我们需要存放大量数据时(如缓存一帧摄像头的图像、缓存以太网下发的大量数据等等),内部RAM的空间不够。这时,我们就要考虑将数据存放到SDRAM中。
在使用SDRAM中,我们需要考虑的问题就是SDRAM的读写带宽。如果读带宽>写带宽,那么可放心使用SDRAM。如果读带宽<写带宽,这时由于无法及时将数据搬运出SDRAM,会造成SDRAM存储满了的情况,在这种情况下,需要结合写数据有没有空闲或者写数据可不可以丢(覆盖)等等因素评估,是否可以满足存储要求。
存储容量
内存芯片寻址的基本原理:和表格的检索原理一样,先指定一个行,再指定一个列,我们就可以准确地找到所需要的单元格。这个单元格称为存储单元,这个表格称为逻辑Bank(L-Bank)。存储单元的位宽就是内存芯片的位宽。芯片是16位的,所以存储单元也就是16位的。
通常 SDRAM 的存储空间被划分为 4 个 L-Bank,在寻址时需要先指定其中一个 L-Bank,然后在这个选定的 L-Bank 中选择相应的行与列进行寻址(寻址就是指定存储单元地址的过程)。对 SDRAM 的读写是针对存储单元进行的,对 SDRAM 来说一个存储单元的容量等于数据总线的位宽,单位是 bit。那么 SDRAM 芯片的总存储容量我们就可以通过下面的公式计算出来:SDRAM总存储容量 = 行数 × 列数 × L-Bank的数量 × 存储单元的容量。比如W9825G6KH这颗芯片,为4M * 4 L_BANKS * 16BIT。
工作原理
SDRAM的读写是通过存储电容充放电实现的。存储电容满电荷就是1,放完电后就是0。在SDRAM中,行地址与列地址线是共用的。SDRAM初始化完成之后,选定L-BANK和行列地址线。选定地址后,就已经确定了具体的存储单元。接着打开行选通三极管,再打开列选通三极管,电容的电平状态就能呈现在位线上,即实现了数据读取。
但是在CAS发出之后,仍要经过一定的时间才能有数据输出,从CAS与读取命令发出到第一笔数据输出的这段时间,被定义为CL(CAS Latency,CAS潜伏期)。由于CL只在读取时出现,所以CL又被称为读取潜伏期(RL,Read Latency)。
写数据时由于数据信号由控制端发出,输入时芯片无需做任何调校,只需直接传到数据输入寄存器中,然后再由写入驱动器进行对存储电容的充电操作。不过,数据并不是即时地写入存储电容,因为选通三极管(就如读取时一样)与电容的充电必须要有一段时间,所以数据的真正写入需要一定的周期。为了保证数据的可靠写入,都会留出足够的写入/校正时间-tWR,这个操作也被称作写回。tWR至少占用一个时钟周期或再多一点(时钟频率越高,tWR占用周期越多)。
芯片引脚
还是以W9825G6KH为例:
名字 | 功能 | 备注 |
A0 ~ A12 | 地址信号 | |
BS0/BA0 BS1/BA1 | BANK地址信号 | 最多四个BANK,两位即可 |
DQ0 ~ DQ15 | 数据信号 | |
CS/ | 片选信号 | 低有效 |
RAS/ | 行地址指示信号 | |
CAS/ | 列地址指示信号 | |
WE/ | 写使能 | |
LDQM UDQM | 掩码信号 | LDQM为低字节掩码 UDQM为高字节掩码 |
CLK | 时钟 | |
CKE | 时钟使能 | 为高时时钟有效 |
VDD | 电源 | |
VSS | 地 | |
VDDQ | IO电源 | |
VSSQ | IO地 | |
NC | 空引脚,不连接 |