时间:2025-09-01 14:14
人气:
作者:admin
本案例为何需要引入FIFO
为了加深读者对 端控制架构的印象,在数据读取的控制部分,首先我们可以将 想作是一个自来水厂,清水得先送至用户楼上的水塔中存放,在家里转开水龙头要用水时,才能及时供应,相同的原理,要读取 SDRAM 中的数据来处理时, FPGA 端的控制架构中一定要有相当于水塔功能的“读出数据缓冲器”,在数据的处理上才会流畅。
而在使用自来水时,自来水厂会补充清水至水塔中,用户才可以连续的使用,同样保存着从 SDRAM 读出数据的缓冲器,当数据量下降到某个程度时也必须要补充,在数据的处理上才不会中断。
接着在数据写入的控制部分,我们可以将 SDRAM 想作是一个银行,相信当你身上有零钱时会顺手存进存钱罐,而不会费时的跑一趟银行去存钱,相同的原理,要将数据写入SDRAM 时, FPGA 端的控制架构中一定要有相当于存钱罐功能的“写入数据缓冲器”,才不会降低 SDRAM 存取的使用效率。只有在存钱罐存到一个程度时,我们才会取出钱拿去银行存放,同样保存着要写入 SDRAM 数据的缓冲器,当数据量上升到某个程度时也必须要取出放进 SDRAM,才不会造成数据的遗失。
FIFO IP核简介
FIFO 本质是RAM,其作用主要是作为缓存。
RAM和的读写都是根据地址来的,而FIFO( Fit In First Out)读写不需要提供读地址和写地址,其数据读写按照先入先出的方式。所以FIFO的读写非常简单,但灵活性稍差,不能做到灵活读写。
FIFO分两种:同步FIFO和异步FIFO。同步FIFO读写是一个。异步FIFO的读时钟和写时钟是分开的。
同步FIFO和异步FIFO常应用在同步时钟系统和异步时钟系统中。异步FIFO应用场景如多比特数据做跨时钟域处理、前后带宽不同步等。
本案例中用到的是异步FIFO。异步FIFO IP模块如下图:
异步FIFO IP模块描述如下:
*注意:FIFO复位信号是高电平有效。
打开FIFO IP 设置界面可以找到FIFO文档链接:
阅读FIFO文档可知异步FIFO写操作的各个信号在写时钟下进行工作,读操作的各个信号在读时钟下进行工作:
Sdram_Control.v文件里面例化了两个FIFO模块,一个是异步FIFO写模块,用于缓存要写入SDRAM器件的数据。异步FIFO写模块的数据写入在27MHz时钟下进行,数据的读出在100MHz时钟下进行。
Sdram_Control.v文件例化的另一个FIFO模块是异步FIFO读模块,用于缓存从SDRAM器件读出的数据。异步FIFO读模块的数据写入在100MHz时钟下进行,数据的读出在27MHz时钟下进行。
FIFO IP 设置
异步FIFO写模块的IP设置如下:
FIFO数据位宽是16bit,与SDRAM位宽保持一致。
FIFO存储深度设置512字,虽然实际存储255个数据,但一般深度都设置大一点。
勾选读写时钟分开的选项。
勾选读的rdusedw接口,用来生成写SDRAM器件的请求信号。
其他选项可以选择默认。
异步FIFO读模块的IP设置如下:
FIFO数据位宽是16bit,与SDRAM位宽保持一致。
FIFO存储深度设置512字,虽然实际存储127个数据,但一般深度都设置大一点。
勾选读写时钟分开的选项。
勾选写入端口的wrusedw接口,用来生成读SDRAM器件的请求信号。
其他选项可以选择默认。
Fidus Sidewinder-100集成PCIe NVMe 控制系统,有