Xilinx IP核手册阅读——FIFO

2023-11-12

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xilinx IP核手册阅读——FIFO 的相关文章

  • FPGA设计篇之流水线思想

    FPGA设计篇之流水线思想 一 写在前面 二 正文开始 2 1举个栗子 2 2 1情况一 组合逻辑 2 1 2情况二 流水线设计 2 1 4 小总结 2 2举第二个栗子 写在最后 一 写在前面 流水线 大家好 我是富土康三号流水线的张全蛋
  • Verilog的奇技淫巧[更新中]

    1 Verilog常用的数据选择语句vect a b 或vect a b 转载自 MDY常用的数据选择语句Verilog明德扬论坛 Powered by Discuz vect为变量名字 a为起始位置 加号或者减号代表着升序或者降序 b是进
  • Vivido添加pynq-Z2开发板

    一 下载pynq z2开发板文件 下载地址 https www tulembedded com FPGA ProductsPYNQ Z2 html 二 将下载的文件解压到vivado安装的位置 如果boards目录下面没有boards fi
  • Verilog中forever、repeat、while、for四类循环语句(含Verilog实例)

    当搭建FPGA逻辑时 使用循环语句可以使语句更加简洁易懂 Verilog中存在四类循环语句 如标题 几种循环语句的具体介绍和用法如下 1 forever 连续的执行语句 语法格式 forever
  • Matlab 高斯信道下QPSK通带通信系统的简单仿真

    1 原理 2 仿真 3 总结反思 4 参考资料 1 原理 QPSK的具体内容请参考百度 QPSK的调制jie框图大致如下 QPSK信号可以采用正交调制的方式产生 如第一张图片的左半部分 I路信号与cos 信号相乘 Q 路信号与sin信号相乘
  • 手把手教你Modelsim仿真【2020.4版本】

    首先新建一个文件夹 test5 打开Modelsim 依次选择 File gt Change Directory 把目录选择到创建的 test5 文件夹 创建库 依次选择 File gt New gt Library 一般我们选择第三个 库
  • verilog中wire和reg类型的区别

    module counter parameter CNT MAX 25 d24 999 999 input wire sys clk input wire sys rst n output reg led out reg 24 0 cnt
  • 关于Keil中Memory中观察不到数据变化的问题以及启动文件栈的初始化

    关于Keil中Memory中观察不到数据变化的问题 在KEIL中观察Memory数据变化 一定要记得只能在RAM地址或ROM之内观察 如下图所示 RAM的地址设置在地址为0x20000000开始的地方 大小为0x20000 因此只有在这个范
  • FPGA的基本设计流程

    FPGA开发主要包括系统设计 设计输入 功能仿真 综合优化 综合后仿真 实现与布局布线 时序方针与验证 板级方针与验证 芯片编程与调试等9个部分 如下图所示 1 电路设计 在系统设计之前 首先要进行的是方案论证 系统设计和FPGA芯片选择等
  • FIFO读写控制

    如果在两个模块之间传输数据 两个模块之间的处理速率不同 会导致采集数据的遗漏或错误 在他们之间加一个数据缓存器 所有数据先经过缓存器缓存 再输入数据接送模块 创建两个模块 一个 作为发送模块 一个作为接受模块 发送模块检测到 fifo为空开
  • Verilog实现两路组相联cache

    cache代码 timescale 1ns 1ps cache共32块 分为16组 每组2块 即两路组相联 1块 4字 1字 4字节 主存共1024块 4096个字 主存地址共12位 1 0 为块内偏移 5 2 为组地址 11 6 为Tag
  • Verilog之assign

    Verilog中的关键词assign主要用于如下两个地方 数据流建模 用于数据流建模的显示连续赋值语句语法格式如下
  • FPGA硬件工程师Verilog面试题(基础篇二)

    作者简介 大家好我是 嵌入式基地 是一名嵌入式工程师 希望一起努力 一起进步 个人主页 嵌入式基地 系列专栏 FPGA Verilog 习题专栏 微信公众号 嵌入式基地 FPGA硬件工程师Verilog面试题 二 习题一 多功能数据处理器
  • IC数字后端

    在 innovus 里面 有时候我们需要控制 tie cell 的 fanout 和 net length 来避免 tie cell 可能出现 max transition 或者 max fanout 的违例 一般来说 只要 fanout
  • 【数字IC】从零开始的Verilog SPI设计

    从零开始的Verilog SPI协议设计 一 写在前面 1 1 协议标准 1 2 数字IC组件代码 1 3 设计要求 1 4 其他协议解读 1 4 1 UART协议 1 4 2 SPI协议 1 4 3 I2C协议 1 4 4 AXI协议 二
  • [从零开始学习FPGA编程-28]:进阶篇 - 基本组合电路-奇偶校验生成器(Verilog语言版本)

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 第1章 奇偶校验生成器 1 1 什么是奇校验 1 2 Verilog语言描述
  • 使用七牛云进行文件上传

    目录 一 七牛云入门测试 1 注册七牛云账号 完成后选择对象存储 2 在里面创建空间 一个空间相当于一个文件夹 就是将对象上传到的地方 3 查看个人秘钥 注册完成账号后 会有一个秘钥 上传文件的时候进行授权和认证 4 文件上传测试 二 封装
  • 【FPGA】通俗理解从VGA显示到HDMI显示

    注 大部分参考内容来自 征途Pro FPGA Verilog开发实战指南 基于Altera EP4CE10 2021 7 10 上 贴个下载地址 野火FPGA Altera EP4CE10征途开发板 核心板 野火产品资料下载中心 文档 hd
  • 无线网络管理系统与无线路由器的区别

    第5章 波形发生器软件设计 本章我们将介绍系统的软件设计 系统中控制软件占有很重要的地位 它不仅要产生波形数据 控制波形的发生 还要控制显示电路和键盘电路 因此系统软件的好坏直接决定着系统的功能和稳定 5 1软件的总体结构 在本系统中 由于
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573

随机推荐

  • 求无冲突矢量集合

    在PRNET中 i发送的分组能被j正确接收的充要条件是 1 存在i j的链路 2 当i发送时 没有其他节点k发送 即不存在k j 广播形式的也算 3 i发给j时 j只处于接收状态 即j不能发给其他节点 除了上述这些原则 还有一些在做题的时候
  • Linux Ubuntu apt-get安装mysql

    自从转前端以后好久都没有和数据库打过交道了 最近在写一个node项目需要用到mysql 但是又不想在本地安装数据库 就想着在云服务器上安装了 网上百度了安装方法 大多都是去mysql官网下载官方编译好的二进制文件 这个至少都是几百M大小的安
  • 用BeanFactoryAware接口,用BEAN的名称来获取BEAN对象

    用BeanFactoryAware接口 用BEAN的名称来获取BEAN对象 applicationContext beans xml
  • Docker----Dockerfile中执行pip install 命令报 Failed to establish a new connection 错误的解决办法

    原文链接 Docker Dockerfile中执行pip install 命令报 Failed to establish a new connection 错误的解决办法 问题 在Dockerfile文件中通过RUN pip install
  • 计算机视觉2021年3月28最新论文

    编辑 AI速递 计算机视觉 3月28日 1 USB Universal Scale Object Detection Benchmark 标题 USB 万能物体检测基准 链接 https arxiv org abs 2103 14027 2
  • Connected to the target VM, address:XXXX, transport: socket

    问题 1 Connected to the target VM address 127 0 0 1 65604 transport socket 排查方案 我是最近半年多次遇到这个问题 这个就是用debug模式启动程序 方便调试 运行一半直
  • Ablation Study消融研究

    作者 飘哥 链接 https www zhihu com question 291655038 answer 683038545 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 术语 消融研究 通常用于神经网
  • Python解释器验证器工具类

    需求背景 现需要实现一个工具类 功能为验证给定路径是否为有效的 Python 解释器可执行文件 不一定是主程序所使用的解释器 并获取该解释器版本信息 是否安装某模块 包等信息 该工具类将赋予主程序类似 PyCharm 中选取 Python
  • C#的架构、框架、设计模式

    建立层务必使用类库选项 不要使用文件夹 没错 说的就是我自己 一 两层架构 1 架构概述 两层架构适合小型 中小型项目 名称 标识 用途 数据访问对象 DAL 模型服务 需要添加Models引用 实体对象 Models 模型 用户界面 UI
  • SpringMVC @RequestBody 自动转json Http415错误

    项目中想用 RequestBody直接接收json串转成对象 网上查了使用方法 看着非常简单 不过经过测试很快发现页面直接报415错误 h1 HTTP Status 415 h1 hr size 1 p b type b Status re
  • React的几种路由配置方法

    1 标签 常用 import IndexRoute from react router const Dashboard React createClass render return div Welcome to the app div R
  • python内置array模块,与numpy中的array和list之间的转换

    numpy中matrix类型与array类型的转换 如何让 M matrix 1 2 3 4 如何转变为 array 1 2 3 4 比较优雅的办法 x matrix arange 12 reshape 3 4 gt gt gt x mat
  • 全国计算机等级考试题库二级C操作题100套(第76套)

    第76套 给定程序中 函数fun的功能是 计算下式前n项的和作为函数值返回 例如 当形参n的值为10时 函数返回 0 204491 请在程序的下划线处填入正确的内容并把下划线删除 使程序得出正确的结 果 注意 源程序存放在考生文件夹下的BL
  • 使用Fiddler修改请求参数

    1 下载比较新版的Fiddler 2 进入到调试的页面 并填写好参数 以获取短信验证码接口为例 3 先清空Fiddler列表中已经存在的请求 以便观察 4 打开断点调试 下面两种方式都可以 F11是快捷键 按F11 键盘快捷键 或者如下图勾
  • Qt在嵌入式系统QNX的HMI应用方案

    author 锋影 扣扣 174176320 e mail 174176320 qq com 黑莓推出了其全新的黑莓10平台QT的智能手机和平板电脑 它产生了大量的兴趣在QT上移动 黑莓10是基于QNX1操作系统的黑莓 也许不是很出名 是Q
  • lightGBM 调参

    文章目录 1 概述 1 lgb cv函数使用方法 1 参数 2 param需要填写的参数 2 GridSearchCV调参 第一步 学习率和迭代次数 第二步 确定max depth和num leave 第三步 确定min data in l
  • Mac配置与下载安卓SDK,配置adb命令

    所以如果想要单独下载SDK 参考如下步骤 文章目录 配置步骤 1 首先需要安装java的JDK 2 解压上面下载好的文件 3 补充SDK内容 4 配置环境变量 5 测试adb命令 其他信息 配置步骤 1 首先需要安装java的JDK 首先登
  • Linux查看磁盘空间

    如何查看磁盘空间 1 查看内存空间 dever iZ2zeewvm4yos65shrzg3wZ free total used free shared buff cache available Mem 7724300 1528996 300
  • vue项目的webpack打包优化

    前言 我第一次从搭建项目环境 到打包准备上线测试 vue对开发者来说学习成本不高 带来了很多的便利 没有经过如何优化 直接打包出来 打开页面时就看到无尽的加载中 啥 是网络不好了 等了半分钟时间页面终于出现了 我第一次打包 所以百度做功课
  • Xilinx IP核手册阅读——FIFO

    目录 Introduction Ch 1 Overview Feature Summary Native FIFO Interface Signals Applications Native FIFO Applications Ch 2 P