lcytms 发表于 2016-11-22 16:56:53

FPGA初级课程第十八讲 FIFO

FPGA初级课程
第十八讲 FIFO

Hi,大家好!我是至芯科技的李老师。
今天讲课的题目是:FIFO。
本节课我先简要地介绍一下FIFO(先进先出存储器)的基本概念,然后实际演示一下应用FIFO的IP核来进行FIFO逻辑电路的建模与仿真,并通过仿真查看效果。



lcytms 发表于 2016-11-22 16:59:32

我们打开至芯科技编写的《14.炼狱传奇-FIFO之战.pdf》文档。


FIFO是First Input First Output的缩写,先进先出队列,这是一种传统的按序执行方法,是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。

接下来我们学习如何在Quartus中使用FIFO IP核,我们常用的FIFO为双时钟的异步FIFO,在这里为了较为简单,方便大家理解,虽然我们使用的是异步FIFO,但两个时钟端口使用的确是同一个时钟。

lcytms 发表于 2016-11-22 17:00:36

恰当地使用各种已有IP核资源,能使您的设计事半功倍,实现高效开发。
FIFO不同于堆栈,堆栈操作是后进先出(LIFO),相同的地方是二者都是顺序操作,只不过FIFO是在一端写入,另一端读出,而堆栈是只在一端进行读写操作。
普通存储器需要由地址线决定读取或写入某个指定的地址,FIFO和堆栈则不然,都是对地址进行顺序操作。这也是FIFO作为先进先出存储器的基本特性。


下面我们就来使用FIFO的IP核设计一个FIFO写入和FIFO读出的逻辑,然后检查读出结果是否正确。

lcytms 发表于 2016-11-22 17:01:40

FIFO的基本概念既然已经清楚,我们下面来进行系统设计。
命名FIFO的逻辑为my_fifo。
后面还要建一个fifo逻辑用于调用这个my_fifo逻辑和fifo_write写控制逻辑、fifo_read读控制逻辑。
my_fifo架构图如下所示。

lcytms 发表于 2016-11-22 17:02:44

在my_fifo逻辑的前级添加fifo_write写控制逻辑、fifo_read读控制逻辑之后,完整的演示程序fifo.v逻辑架构如下图所示。

lcytms 发表于 2016-11-22 17:03:57

新建工程文件夹fifo。
打开Quartus II软件,打开新工程向导。
新建逻辑模块fifo.v。
搭建逻辑框架。
module fifo (clk, rst_n, q);

        input clk, rst_n;
       
        output q;

       

endmodule

lcytms 发表于 2016-11-22 17:05:15

下一步用IP核管理工具生成my_fifo逻辑。
进入主菜单选择IP核管理界面。

lcytms 发表于 2016-11-22 17:06:41

IP核管理界面p1。
默认为新建,点击Next。

lcytms 发表于 2016-11-22 17:07:51

IP核管理界面p2a。
在左上方搜索框内输入fifo,点击Memory Compiler下方出现的FIFO,右侧矩形框内输入输出文件的名称my_fifo,点击Next。

lcytms 发表于 2016-11-22 17:09:24

IP核管理界面p3。
检查q为8 bits,FIFO deep为256 words,选No使用分开(respectively)的rdclk和wrclk。
点击Next。直接跳到IP核管理界面p5。
页: [1] 2 3 4
查看完整版本: FPGA初级课程第十八讲 FIFO