FPGA FIFO基本介绍(FIFO Geneerator(13.2))

软件:vivado 2020.2 

参考文献:文档xilinx官网pg057-fifo-generator文档下载链接官网https://docs.xilinx.com/v/u/en-US/pg057-fifo-generatorhttps://docs.xilinx.com/v/u/en-US/pg057-fifo-generatoricon-default.png?t=N7T8https://docs.xilinx.com/v/u/en-US/pg057-fifo-generator

原官网免费文档已被上传为付费文档,笔者上传的免费文档未过审核。


一、FIFO的基本思想

        first-in first-out (FIFO),即先入先出。fifo可以当做一个进出互不影响的储存器,当然,储存器是有容量的,一直进,储存器满了,自然无法再进;同样,一直出也是一个道理。为了方便理解 ,我们把fifo比作快递中转站,那么所要传递的数据就是一个个快递。对于fifo来说,写通道就是往中转站里存快递;读通道就是从中转站里取快递。

       当上家(主机)想要往中转站(fifo)里存快递(写数据)时,先发出一个信号(wr_en)告诉中转站,它想要存快递,而中转站(fifo)也要告诉上家是否满了(满信号);同样中转站也要告诉下家(从机)它是否还有库存(空信号),下家(从机)发送ready信号告诉中转站(fifo),它准备好接收信号。fifo的深度就是其容量。

        同步fifo即主从机使用同一clk。异步fifo即用不同clk。

二、不同接口的fifo(Native Axi stream)

2.1 Native 接口fifo

b9037c2e02014e65a78be10f2ef55ca9.png

2.1.1 Native接口主要信号及其功能

写数据通道:

      wr_clk.          写时钟

       wr_en           写使能信号,告诉fifo进行写数据使能;

       full                 满信号,告诉写模块,fifo已满;

       almost_full   将满信号,比full提前一个时钟拉高,提示fifo将满;

       prog_full        标记信号,当fifo中数据达到prog_full,此信号拉高;

      din                   写数据,写模块往fifo里写东西时,将din写入fifo

读数据通道:同理,不过多赘述。

2.1.2 Native 接口读写数据的发生时序

          写数据:wr_en拉高时,写入数据,但是full信号拉高(即fifo满)写数据暂停。

          读数据:rd_en拉高时,读取数据,但是empty信号拉高(fifo空)读数据暂停。

换而言之,wr_en && ~full时,写入数据;rd_en && ~empty时,读取数据。

2.1.3 Native 接口fifo算法以及具体verilog代码

native 接口 FIFO Generator 13.2 verilog 代码

2.1.4 standard fifo 与fwft fifo输出时序逻辑分析

[vivado fifo] 如何理解standard fifo 和fwft fifo的输出时序问题

2.2AXI Stream接口FIFO

afe761836a1f4e48b2c4cd8f86dd47ed.png

2.1.1 axis接口fifo主要信号及其功能

        axis接口是axi三种常见类型之一,axi stream。先挖个坑,以后有时间可能会系统介绍axif,axil和axis。回归正题axis接口与native接口类似,不过有写些接口的名称发生变化。

       valid -- rd_en--~empty  :     valid是输出有效信号,其拉高时,数据有效。与rd_en信号含义略有不同但是功能相同,都是想写数据时拉高;同样fifo想往从机里写数据,也要告诉从机fifo内还有数据即~empty拉高。

     ready --~full --rd_en      :        ready是输入准备信号,其拉高说明从机准备好接收数据。fifo准备好接收数据的前提是内部还有空间即~full拉高;而从机的rd_en就是告诉fifo其准备好接收信号。

     与native interface不同的是axi interface满足数据传输时,传输的数据不止有data信号。

       data   :   传输的数据

        strobe: 掩码。掩码的第n位为1,则data第nbyte数据正常输出。为0,则第n byte数据全为0。

      last信号:一次传输完成后,拉高一个时钟。

      user:用户自定义信号。

      id:用于标识传输id。

2.2.2 输出时序逻辑与axi的握手机制

         axis接口数据传输时采用的握手机制是一种非常经典的valid-ready握手机制(就用它俩握手,笔者也不知道有没有官方名字)。其特征为

       1.数据发送方输出valid告诉对方数据有效; 数据接收方输出ready,告诉对方准备接收

        2.当且仅当,valid && ready == 1时发生数据传输。

思考:1.主机 从机 valid ready 它们之间有什么联系?

       没有联系,valid是由发送方输出,ready由接收方发出。通常是主机向从机发送数据,所以valid有主机发出比较常见。但是对于全双工、半双工这些一定会有从机发送数据的情况,此时valid就是由从机发出。

        2. valid和ready同时拉高时,才输出。那么,没传完一个拉低了呢?

        指有二者同时拉高时输出,任和其他情况都不发生数据传输。一次传输要求二者全程拉高,如果中断,数据传输中止,等待下次握手,接着传。

2.2.3 axis接口fifo代码

暂时不想写,代码都在内网机,所有代码全是我用平板手打的太麻烦了。等以后吧。不会的,联系我也行。(๑ت๑)

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值