SDRAM控制器设计之异步FIFO的调用

描述

本案例为何需要引入FIFO

为了加深读者对 FPGA 端控制架构的印象,在数据读取的控制部分,首先我们可以将SDRAM 想作是一个自来水厂,清水得先送至用户楼上的水塔中存放,在家里转开水龙头要用水时,才能及时供应,相同的原理,要读取 SDRAM 中的数据来处理时, FPGA 端的控制架构中一定要有相当于水塔功能的“读出数据缓冲器”,在数据的处理上才会流畅。

而在使用自来水时,自来水厂会补充清水至水塔中,用户才可以连续的使用,同样保存着从 SDRAM 读出数据的缓冲器,当数据量下降到某个程度时也必须要补充,在数据的处理上才不会中断。

FPGA

接着在数据写入的控制部分,我们可以将 SDRAM 想作是一个银行,相信当你身上有零钱时会顺手存进存钱罐,而不会费时的跑一趟银行去存钱,相同的原理,要将数据写入SDRAM 时, FPGA 端的控制架构中一定要有相当于存钱罐功能的“写入数据缓冲器”,才不会降低 SDRAM 存取的使用效率。只有在存钱罐存到一个程度时,我们才会取出钱拿去银行存放,同样保存着要写入 SDRAM 数据的缓冲器,当数据量上升到某个程度时也必须要取出放进 SDRAM,才不会造成数据的遗失。

FPGA

 

 

FIFO IP核简介

FIFO 本质是RAM,其作用主要是作为缓存。

RAM和ROM的读写都是根据地址来的,而FIFO( First In First Out)读写不需要提供读地址和写地址,其数据读写按照先入先出的方式。所以FIFO的读写非常简单,但灵活性稍差,不能做到灵活读写。

FPGA

FIFO分两种:同步FIFO和异步FIFO。同步FIFO读写时钟是一个。异步FIFO的读时钟和写时钟是分开的。

同步FIFO和异步FIFO常应用在同步时钟系统和异步时钟系统中。异步FIFO应用场景如多比特数据做跨时钟域处理、前后带宽不同步等。

本案例中用到的是异步FIFO。异步FIFO IP模块接口如下图:

FPGA

异步FIFO IP模块信号描述如下:

FPGA

*注意:FIFO复位信号是高电平有效。

打开FIFO IP 设置界面可以找到FIFO文档链接:

FPGA

阅读FIFO文档可知异步FIFO写操作的各个信号在写时钟下进行工作,读操作的各个信号在读时钟下进行工作:

FPGA

Sdram_Control.v文件里面例化了两个FIFO模块,一个是异步FIFO写模块,用于缓存要写入SDRAM器件的数据。异步FIFO写模块的数据写入在27MHz时钟下进行,数据的读出在100MHz时钟下进行。

FPGA

Sdram_Control.v文件例化的另一个FIFO模块是异步FIFO读模块,用于缓存从SDRAM器件读出的数据。异步FIFO读模块的数据写入在100MHz时钟下进行,数据的读出在27MHz时钟下进行。

FPGA

FIFO IP 设置

异步FIFO写模块的IP设置如下:

FIFO数据位宽是16bit,与SDRAM位宽保持一致。

FIFO存储深度设置512字,虽然实际存储255个数据,但一般深度都设置大一点。

勾选读写时钟分开的选项。

勾选读端口的rdusedw接口,用来生成写SDRAM器件的请求信号。

其他选项可以选择默认。

FPGA

 

FPGA

 

FPGA

异步FIFO读模块的IP设置如下:

FIFO数据位宽是16bit,与SDRAM位宽保持一致。

FIFO存储深度设置512字,虽然实际存储127个数据,但一般深度都设置大一点。

勾选读写时钟分开的选项。

勾选写入端口的wrusedw接口,用来生成读SDRAM器件的请求信号。

其他选项可以选择默认。

FPGA

 

FPGA

 

FPGA

                                         

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分