Xilinx IP核手册阅读——FIFO

Introduction

在这里插入图片描述
该核心为所有FIFO配置提供了优化的解决方案,并在利用最少资源的同时提供了最大性能(高达500 MHz)。

FIFO IP核提供本地接口AXI内存映射接口AXI4流接口 FIFO。本地接口为缓冲、数据位宽转换和时钟域去耦等应用提供最优方案,支持有序的存储和检索。

AXI内存映射接口和AXI4流接口源自从本地接口FIFO,前者支持AXI4, AXI3和AXI4-Lite三种类型。

AXI为一种协议,是一种标准化的总线接口,线多,操作复杂,常用的还是Native FIFO。

可看到,Introduction部分介绍的非常笼统,从很大的方向上讲明FIFO是什么。

Ch. 1: Overview

在这里插入图片描述
概述,和Introduction中的内容差不多,指明:FIFO的使用场景、最大时钟、支持的接口类型以及在VIVADO中使用时,需要配套,包括读取、写入指针和状态标志的生成等逻辑。
在这里插入图片描述
本地接口FIFO可以使用块RAM,分布式RAM或某些FPGA系列中可用的内置FIFO资源来创建高性能、区域优化的FPGA设计。

本地接口FIFO支持标准模式和首字直通(First Word Fall Through)(FWFT)两种操作模式,后者可以不需要读命令,自动的将最新数据放在dout上,相当于数据输入进去就会漏出来。

在这里插入图片描述
黑色为强制保留端口,蓝色为可选端口,灰色为可选边带端口。故黑色应为最重要端口,可见FIFO分为写时钟和读时钟两个区域,分别对应外部的写和读。

(跳过AXI接口FIFO的overview)

Feature Summary

在这里插入图片描述Feature Summary中首先介绍了共同的功能

  1. 支持各种各样的接口
  2. 深度最大到131072字
  3. 读写时钟域可以独立可以一样
  4. VHDL演示了演示了IP核心的设计流程,包括如何实例化和模拟它(学的Verilog,还有参考价值吗?)
  5. 使用Xilinx Vivado IP目录自定义程序进行完全配置(VIvado里可以用就是了)

在这里插入图片描述
Native FIFO特定功能:

  1. 支持的位宽1~1024
  2. 对称或非对称纵横比(读写端口比范围从1:8到8:1),说白了就是输入输出位宽的比例,最大比例是8
  3. 同步或者异步复位选项
  4. 可以灵活的选择存储资源类型
  5. 支持标准模式和首字直通(First Word Fall Through)(FWFT)两种操作模式
  6. Full和Empty状态标志,以及用于指示还剩一个单词的Almost Full和Almost Empty标志
  7. 可编程的满和空状态标志,由用户定义的常量或专用输入端口设置
  8. 可配置的握手信号
  9. Hamming错误注入和校正检查(ECC)支持块RAM和内置FIFO配置
  10. 块RAM FIFO的软ECC支持(高达64位数据宽度)
  11. 块RAM和内置FIFO配置的嵌入式寄存器选项
  12. UltraScale的动态电源门控和ECC流水线寄存器支持™ 体系结构内置FIFO配置

上述的各种支持功能,常用性应该也是前边的几个,后边的配置,暂时基本上接触不上,人家毕竟做手册,写的全是他的事儿,怎么看是咱的事儿。

接下来手册里进一步介绍了如上12种功能的具体内容,把一句话扩展成一段话,对哪个功能感兴趣可以再去看,Native FIFO Interface Signals这节应该好好看一下。

在这里插入图片描述

Native FIFO Interface Signals

在这里插入图片描述
在这里插入图片描述
rst 为复位输入端口,一种异步复位信号,用于初始化所有内部指针和输出寄存器。不适用于UltraScale设备内置的FIFO
sleep 仅适用于UltraScale设备内置的FIFO

首先来看写端的端口,表格1-5按照必须和可选划分
在这里插入图片描述
必须的:
wr_clk-写时钟:写入域上的所有信号都与该时钟同步
din[n:0]-输入数据:接入的数据
wr_en-写使能:如果FIFO未满,置位该信号将把din的数据写入FIFO
full-写满信号:它被置位时,说明FIFO已经写满了,FIFO将不再理会后续的写使能信号,直接自闭,保持里面的数据不动。

(此处为什么说置位而不是拉高拉低呢?手册中用asserted,说明它是可以配置的,高有效、低有效都行)

可选的:
wr_rst Input-写复位:同步在写时钟上的信号,当它置位时,初始化写入时钟域的所有内部指针和标志。
almost_full-几乎满:当置位时,标志着再写一个,就得满了,就差那么一个。
prog_full-可编程满:自己设置一个阈值,大于等于阈值就是满,该信号就会被置位,小于阈值就不会置位。
在这里插入图片描述
wr_data_count [d:0]-写入数据计数:它输出的是已经写入FIFO的数据字数,该计数保证永远不会低估FIFO中的字数,以确保您永远不会溢出FIFO。这种行为的例外是,当写入操作发生在wr_clk/clk的上升沿时,该写入操作将仅反映在下一个上升时钟沿的wr_data_count,意思为,该时钟写入,至少下个时钟才能实现wr_data_count++,差了一个时钟。

其余的跳过。

读端口大部分和写端口同理,重点介绍下面两个端口功能。在这里插入图片描述rd_data_count [c:0]-读计数:指示FIFO中可供读取的字数。计数保证永远不会过度报告可供读取的字数,以确保FIFO不会下溢(榨干),这种行为的例外是,当读取操作发生在rd_clk/clk的上升沿时,该读取操作仅反映在下一个上升时钟沿的rd_data_count上,也就是你在一时钟处进行读操作时,下一个时钟才能完成rd_data_count- -的操作。
该端口需要注意,它不是代表从FIFO中已经读出的数据计数(done),而是FIFO中可以读出来的数据计数(to do),它的计数从empty拉低开始
在这里插入图片描述
如上图,复位信号拉低后,经过1clk后,写使能拉高,数据开始写入FIFO,再经过2clk,wr_count开始计数,empty信号拉低后,rd_cout信号开始计数,但是注意光标时间,wr_count和rd_count两个信号并不是和clk时钟信号对齐的。(这个问题。。。。应该是IP核的固有问题?)
在这里插入图片描述

Applications

Native FIFO Applications

在这里插入图片描述
介绍了一个FIFO的典型应用,指导意义有限。

至此,Overview看了个大概,总结来说,该章中主要介绍IP核的应用场景、适配性等问题,并会给出IP核接口的详细说明,还会有简略的时序图说明接口之间的关系,力求全面总体,后面的章节一定是对ch1中提到的多有功能做出系统的详细的说明。

Ch. 2: Product Specification

本章包括有关性能和延迟的详细信息。本章中各种指针向其他文章,不想看。

Ch. 3: Designing with the Core

本章应该比较重要,一个⭐,一个IMPORTANT,说明开发者要严格遵守下面章节的内容设计。

在这里插入图片描述

General Design Guidelines

在这里插入图片描述
官方手册真是那个啊,上来让评估设计难度,真他娘的专业,主要从:最大时钟频率、目标设备架构(接口类型?)和特定用户功能三方面考虑,确保使用设计技术来促进实施,包括流水线和使用约束(时间约束、放置和/或面积约束)。

接下来了解信号管道化和同步,为了理解FIFO设计的本质,了解如何使用流水线来最大限度地提高性能,并实现时钟域交叉的同步逻辑是很重要的。写入din接口的数据可能需要多个时钟周期才能在读取接口上访问。
在这里插入图片描述
感觉略抽象,对于时序的前考虑有点困难。

同步的注意事项: 必须使用FIFO Full和Empty标志来保证正确的行为。
在这里插入图片描述
图3-1中给出了所有和时钟有关的信号,rst除外,它是异步复位信号。除了写使能、写数据两个口,所有输出的状态信号,都严格同步于其所在的时钟域,且只能在其所在的时钟域使用,观察图中,并没有wr_cout和rd_count信号,对应Native FIFO Interface Signals最后一段提到的,这两个计数信号并不会同步于所在的时钟。

Initializing the FIFO Generator

在这里插入图片描述
在这里插入图片描述
下划线的对应两种设计模式,不同的设计模式对复位的要求是不同的。

对于用块RAM或分布式RAM实现的FIFO,不需要复位,输入引脚是可选的。对于常见的时钟配置,可以选择异步或同步复位。对于独立的时钟配置,您可以选择异步复位(rst)或同步复位(wr_rst/rd_rst),分别针对各自的时钟域。
在这里插入图片描述
这个选项是否勾选,手册中介绍:

在这里插入图片描述
总之,勾选的话,执行异步复位时,rst置位,它将同步到用于确保FIFO初始化为已知状态的时钟域(?);不勾选的话,只要wr_rst被置位,写时钟域就保持复位状态,只要rd_rst被置位,读时钟域就会保持复位状态。(是否使用前者更好?)

FIFO Usage and Control(重要)

在这里插入图片描述

在这里插入图片描述
这段话把写入过程中的逻辑说的很清楚,当FIFO不full且wr_en信号拉高时,din数据写入,同时wr_ack也会置位,wr_ack表示:
在这里插入图片描述
如果一直不读,FIFO早晚被写满,满了之后,就会忽略wr_en的写请求,且保持内部数据不变,同时拉高溢出信号(overflow flag)。

官方给出了一个实例,值得认真参阅
在这里插入图片描述
下面是读操作。
在这里插入图片描述
上图把读过程中的几个关键信号逻辑讲的很明白。突然有点理解状态信号的含义,读写使能信号是被控制的量,相当于一个系统的输出,而状态信号如full、empty、almost系列、上溢、下溢等,都是一个系统的输入,而这个输入输出关系,在IP核的端口层面来看,又是反过来的。这个system,就是我们要配套FIFO编写的逻辑,用flag去控制en。
在这里插入图片描述
下面介绍了两种读取模式,FWFT应该也比较常用,但是暂时用不上。
在这里插入图片描述
第一种:Standard FIFO Read Operation
在这里插入图片描述
第二种:First-Word Fall-Through FIFO Read Operation
在这里插入图片描述
对比一下,第二种模式的empty信号和underflow信号都比第一种延后1clk。
在这里插入图片描述

Clocking

在这里插入图片描述
在这里插入图片描述

Reset

讲了同步复位和异步复位的概念。

Latency

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Xilinx MIG IP核是一种用于处理DDR存储器接口的IP核。它具有用户接口和DDR物理芯片接口两组接口。用户接口用于FPGA与MIG IP核之间的交互,而DDR物理芯片接口负责产生具体的操作时序,并直接操作芯片管脚。用户只需操作MIG IP的用户接口就能进行DDR数据的读写。\[1\] 在Xilinx的MIG IP核中,用户接口模块是整个IP核的关键部分。它包括指令路径和数据路径,都是基于握手协议的。例如,在指令路径中,只有当app_en和app_rdy同时为高时,app_cmd才会被有效接收。在写数据通道中,只有当app_wdf_wren和app_wdf_rdy同时为高时,app_wdf_data才会写入FIFO。\[2\] 对于DDR3存储器,以Micron的MT41K256M16TW-107为例,它是一种4Gb大小的DDR3存储器,具有256M*16的大小,速度等级为1866MT/s。它采用8Bank配置,数据位宽为16bit,行地址为A\[14:0\],列地址为A\[9:0\]。需要注意的是,由于8n prefetch,实际上只使用了列地址A\[2:0\]。存储矩阵中的一个单元(CELL)为128bit,即一个Bank内按32768*128*128划分。\[3\] 总结来说,Xilinx MIG IP核是用于处理DDR存储器接口的IP核,它具有用户接口和DDR物理芯片接口。用户只需操作用户接口就能进行DDR数据的读写。在Xilinx的MIG IP核中,用户接口模块是关键部分,它基于握手协议进行指令和数据的传输。对于DDR3存储器,具体的配置取决于所使用的存储器型号和要求。 #### 引用[.reference_title] - *1* [Xilinx DDR3 —— MIG IP核的原理(APP接口)](https://blog.csdn.net/weixin_43872190/article/details/122993541)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [xilinx ddr3 MIG ip核使用详解](https://blog.csdn.net/admiraion123/article/details/107891017)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值