FPGA 笔记四
一、ROM和RAM的区别:
转载(https://blog.csdn.net/Gdadiao123/article/details/79891791)
- ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access
Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。 - RAM有两大类,一种称为静态RAM(Static
RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。另一种称为动态RAM(Dynamic
RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很多,计算机内存就是DRAM的。 - DRAM分为很多种,常见的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR
RAM、RDRAM、SGRAM以及WRAM等,这里介绍其中的一种DDR RAM。DDR RAM(Date-Rate RAM)也称作DDR
SDRAM,这种改进型的RAM和SDRAM是基本一样的,不同之处在于它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了。这是目前电脑中用得最多的内存,而且它有着成本优势,事实上击败了Intel的另外一种内存标准-Rambus
DRAM。在很多高端的显卡上,也配备了高速DDR
RAM来提高带宽,这可以大幅度提高3D加速卡的像素渲染能力,RAM主要用来存放程序及程序执行过程中产生的中间数据、运算结果等。 - ROM也有很多种,PROM是可编程的ROM,PROM和EPROM(可擦除可编程ROM)两者区别是,PROM是一次性的,也就是软件灌入后,就无法修改了,这种是早期的产品,现在已经不可能使用了,而EPROM是通过紫外光的照射擦出原先的程序,是一种通用的存储器。另外一种EEPROM是通过电子擦出,价格很高,写入时间很长,写入很慢。
- FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦出可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM的优势),U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来
Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘)。
二、FPGA中RAM IP核简介 (可通过软件进行RAM的调试)
-
data:RAM写数据端口; address:RAM读写地址端口,对于单口RAM来说,读地址和写地址共用同一组地址;
-
wren:写使能信号,高电平有效; byteena:字节使能控制,该功能屏蔽了输入数据,这样仅写入数据中指定字节,未被写入的字节保留之前写入的值。当写入数据的位宽为16位、18位、32位和36位时,M9K模块 将支 持字节使能,wren信号以及字节byteena信号一起控制RAM模块的写操作。byteena信号在RAM IP核创建过程中是可选的,可选择是否使用字节使能控制功能。
-
addressstall:地址使能控制,当addressstall信号为高电平时,有效地址时钟使能就会保持之前的地址。addressstall信号在RAM IP核创建过程中是可选的,可选择是否使用地址使 能控制功能。
-
clockena:时钟使能控制,高电平有效; rden:读使能信号,高电平有效; aclr:异步
-
复位信号,高电平有效;
-
inclock、outclock:单口RAM端口支持输入与输出时钟模式和单时钟模式。在输入与输出
时钟模式下,输入时钟控制存储器模块的所有输入寄存器,其中包括数据、地址、byteena、
wren以及rden寄存器;输出时钟控制数据输出寄存器。在单时钟模式下,没有inclock信号与
outclock信号,只有一个clock信号,可以通过单时钟以及时钟使能来控制M9K存储器模块中的 所有寄存器。 -
RAM读写时序:
-
写数据:
-
读数据:
三、FIFO读写
-
FIFO一般用于不同时钟域之间的数据传输,也常用来实现不同位宽的接口的数据匹配。
-
FIFO读数据(高电平有效)
-
-
FIFO写数据(高电平有效)
-
-
FIFO一些常见参数:
-
FIFO的宽度:FIFO一次读写操作的数据位N;
-
FIFO的深度:FIFO可以存储多少个宽度为N位的数据。
-
空标志:对于双时钟FIFO又分为读空标志rdempty和写空标志wrempty。FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效 数据的读出。
-
满标志:对于双时钟FIFO又分为读满标志rdfull和写满标志wrfull。FIFO已满或将要写满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出。
-
读时钟:读FIFO时所遵循的时钟,在每个时钟的上升沿触发。
-
写时钟:写FIFO时所遵循的时钟,在每个时钟的上升沿触发。
-
对于FIFO的基本知识先了解这些就足够了,可能有人会好奇为什么会有单时钟FIFO和双时钟FIFO,它们各自的用途是什么。之所以有单时钟FIFO和双时钟FIFO是因为各自的作用不同。单时钟FIFO常用于同步时钟的数据缓存,双时钟FIFO常用于跨时钟域的数据信号的传递,例如时钟域A下的数据data1传递给异步时钟域B,当data1为连续变化信号时,如果直接传递给时钟域B则可能会导致收非所送的情况,即在采集过程中会出现包括亚稳态问题在内的一系列问题,使用双时钟FIFO能够将不同时钟域中的数据同步到所需的时钟域中。
-
== 亚稳态问题补充:在数字电路中,数据在传输过程中,需要满足寄存器对建立和保持时间的要求,也就是上升沿来临之前数据就要处于稳定状态,而在时钟上升沿之后需要数据保持一段时间的稳定,这样数据才能被稳定采集。而在不同时钟域里面,不一定满足以上的条件,寄存器处于一个亚稳态的状态,数据处于不稳定状态,数据传输会出错,亚稳态也会一级一级往后传输,产生严重的错误。==
四、FPGA中ROM IP核简介
- ROM读写时序:基本跟RAM读数据时序一样。
- ROM初始化:存储器初始化的文件为.mif文件或者.hex文件(RAM初始化也如此需要在quartus软件上加载生成好的.mif或者.hex文件。)