FIFO Generate IP核使用——Native接口时读写宽度不一致详解

news2024/9/25 11:17:52

表3-4显示了在选择了Native接口时哪些时钟类型支持非对称的宽高比,即读写宽度不一致。

非对称的宽高比允许FIFO的输入和输出度不同。FIFO支持以下写-读宽高比(Write-to-Read Aspect Ratios):1:8, 1:4, 1:2, 1:1, 2:1, 4:1, 8:1。

这个功能是通过在Vivado IP Catalog中自定义FIFO时选择独特的写和读宽度来实现的如上图所示。默认情况下,写和读宽度被设置为相同的值(提供1:1的宽高比),但支持1:8到8:1之间的任何比例,并且FIFO的输出深度会根据输入深度以及写和读宽度自动计算。

对于非对称宽高比,满(full)和空(empty)标志仅在能够写入或读取一个完整的字时才被激活。FIFO不允许访问部分字。例如,假设一个FIFO已满,如果写宽度是8位而读宽度是2位,你需要完成四个有效的读操作之后,满标志才会取消断言,并且才会接受一个写操作。写数据计数器会显示根据写端口比例计算的FIFO字数,而读数据计数器会显示根据读端口比例计算的FIFO字数。

注意:对于写宽度小于读宽度的非对称宽高比(1:8, 1:4, 1:2),最高有效位(MSB)将首先被读取。这意味着,在读取时,数据会按照最高有效位到最低有效位的顺序逐个读取,直到达到读宽度所指定的位数。这种设计使得FIFO能够在宽度不匹配的情况下仍然有效地传输数据。

图3-13展示了一个具有1:4宽高比(写宽度=2,读宽度=8)的FIFO的示例,在可以执行读操作之前,需要连续执行四个写操作。第一个写操作是01,接着是00,然后是11,最后是10。内存是从左到右(从最高有效位MSB到最低有效位LSB)填充的。当执行读操作时,接收到的数据是01_00_11_10。

图3-14展示了一个具有1:4宽高比的FIFO的din(数据输入)、dout(数据输出)以及握手信号。当四个字被写入FIFO后,空信号被取消断言(即变为无效状态,表示FIFO不再为空)。然后,在执行一个单独的读操作后,空信号再次被断言(即变为有效状态,表示FIFO再次为空)。

这是因为在这个例子中,FIFO的写宽度是数据宽度(或字宽度)的四分之一。因此,需要连续写入四个2位宽的“字”(在这里每个“字”实际上是两个位)来填充一个完整的8位宽的数据字,然后才能从FIFO中读取这个8位宽的数据字。当这四个2位宽的“字”被写入后,FIFO就包含了足够的数据来执行一个8位宽的读操作,因此空信号会被取消断言。一旦这个8位数据字被读取,FIFO再次变空,因此空信号会再次被断言。

图3-15展示了一个宽高比为4:1的FIFO(写宽度为8,读宽度为2)。在这个例子中,执行了一个写操作,之后跟随四个读操作。写操作的数据是11_00_01_11。当执行读操作时,数据是从左到右(从最高有效位MSB到最低有效位LSB)接收的。如上图所示,第一次读操作得到的数据是11,接着是00,然后是01,最后是11。

在这个例子中,FIFO的写宽度是读宽度的四倍。因此,一个完整的写操作会写入一个8位宽的数据字。然后,由于读宽度只有2位,所以需要连续进行四次读操作才能读取整个8位宽的数据字。每次读操作都会从FIFO中读取2位的数据,并按照它们被写入的顺序(从左到右,即从MSB到LSB)来接收这些位。

图3-16展示了一个宽高比为4:1的FIFO的din、dout以及握手信号。在执行一个写操作后,FIFO的空信号被取消断言(即变为无效状态,表示FIFO不再为空)。由于没有其他写操作发生,所以FIFO在连续进行四次读操作后再次断言空信号。

在这个例子中,写操作向FIFO中写入了一个8位宽的数据字。由于FIFO的宽高比为4:1,即写宽度为8位而读宽度为2位,因此一个完整的写操作对应四个读操作。在四次读操作之后,FIFO中的所有数据都被读取出来,因此空信号被再次断言(即变为有效状态),表示FIFO现在为空,可以再次进行写操作来填充数据。这个过程中,满信号可能从未被断言,除非有连续多个写操作尝试在FIFO满时继续写入数据。

First-Word Fall-Through(FWFT)FIFO

FWFT FIFO与标准FIFO相比,在读取端口上提供了两个额外的可读字。对于写/读宽高比大于或等于1(如1:1、2:1、4:1和8:1)的情况,FWFT实现还通过depth_ratio*2(其中depth_ratio = 写深度 / 读深度)增加了可以写入FIFO的字数。然而,对于写/读宽高比小于1(如1:2、1:4和1:8)的情况,增加的两个额外可读字只相当于不到一个完整的写字。这些部分字的创建导致FIFO的prog_empty(程序化空)和wr_data_count(写入数据计数)信号的行为与之前的描述有所不同。

具体来说,FWFT特性允许在不发出读操作的情况下从FIFO中查看下一个可用字。当FIFO中有数据时,第一个字会直接从FIFO中掉落并自动出现在输出总线(dout)上。一旦第一个字出现在dout上,empty信号会变为无效,表示FIFO中有一个或多个可读字,并且VALID信号变为有效,表示dout上存在有效字。

与标准读模式不同,在FWFT模式下,当从FIFO中读取最后一个数据时,空标志位被置位,而在标准读取模式下,当empty变为有效时,VALID会在1个时钟周期中持续有效。此外,FWFT特性还将FIFO的有效读取深度增加两个读取字,这意味着在FWFT模式下,FIFO可以连续读取更多的数据,直到达到其物理存储限制。

对于非对称宽高比的FIFO,写宽度和读宽度的不同会导致数据处理和存储方式的差异。在FWFT模式下,这些差异可能更加明显,因为FWFT特性允许在不进行完整读操作的情况下访问数据。这可能会导致在某些情况下,FIFO的某些信号(如prog_emptywr_data_count)的行为与标准模式有所不同。

Programmable Empty (prog_empty)

prog_empty 信号是一个可编程的阈值信号,当FIFO中可读字的数量小于或等于该阈值时,prog_empty 会被断言。然而,当写/读宽高比小于1(取决于读和写时钟的频率)时,可能会出现prog_empty 违反这个规则的情况,但这种情况仅在empty 被断言时发生。

为了避免这种情况,你可以将可编程空断言阈值设置为 3*depth_ratio*frequency_ratio(其中 depth_ratio = 写深度/读深度 且 frequency_ratio = 写时钟频率 / 读时钟频率)。如果可编程空断言阈值设置得低于这个值,那么当empty 被断言时,prog_empty 可能也会被断言。

Write Data Count (wr_data_count)

wr_data_count 信号通常悲观地报告写入FIFO的字数,并且保证永远不会少报FIFO中的字数,以确保不会溢出FIFO。然而,当写/读宽高比小于1时,如果读写操作导致FIFO中存在部分写字,那么可能会少报FIFO中的字数。

这种行为在FIFO接近满(即距离满只有1或2个字)时最为关键,因为在这个状态下,wr_data_count 少报字数,因此不能用来判断FIFO是否已满。在这种配置下,你应该使用full 标志来禁止向FIFO写入任何数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1644615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据分析】这些年我发过的微信朋友圈

TencentRecordAnalysisV1.0.3.zip 蓝奏云:链接:链接TencentRecordAnalysis (lanzoub.com)密码:9hww 朋友圈还是以本行业岩土、工作相关的内容居多。 对于一个不怎么发圈的人来说,这几天有点反常,这几天大概是我成功的开发了几个失败的GPT应用…

C++:set和map的介绍

目录 关联式容器 键值对 set介绍: set的模板参数列表 set的双向迭代器: insert的使用和set的特性: set的删除: set的find: lower_bound 、 upper_bound: multiset: map介绍&#xff…

机器学习-K近邻算法(KNN)

目录 什么是KNN算法 图解KNN基本算法 (1)k近邻算法中k的选取 (2)距离函数 (3)归一化处理 (4)概率kNN KNN算法的优缺点 优势 缺点 KNN算法总结 什么是KNN算法 k近邻算法&…

MySQL-集群的高可用

MMM: Multi-Master Replication Manager for MySQL,Mysql主主复制管理器是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置(同一时间只有一个节点是可写的) …

成功者的8个时间管理技巧,让你在职场中脱颖而出

在职场中,高效的时间管理不仅能帮助你完成更多工作,还能提升你的工作效率和工作质量。以下是八个时间管理技巧: 一、明确职业目标,设定优先级 明确自己的职业目标,并根据这些目标设定工作任务的优先级。这有助于你专…

HTML5实现酷炫个人产品推广、工具推广、信息推广、个人主页、个人介绍、酷炫官网、门户网站模板源码

文章目录 1.设计来源1.1 主界面1.2 我的产品界面1.3 关于我们界面1.4 照片墙界面1.5 发展历程界面1.6 优秀人才界面1.7 热门产品界面1.8 联系我们界面 2.灵活调整模块3.效果和源码3.1 动态效果3.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.c…

PADS 规则设置-导线不跟随器件-导线允许回路

1、PADS Layout中设置拖动器件时导线不跟着移动 2、PADS Router中设置走线允许回路

Python基础学习之logging模块

在Python编程中,日志记录(Logging)是一个非常重要的功能。它不仅可以帮助我们追踪和调试代码中的错误,还可以记录程序运行时的关键信息,以便后续分析和优化。Python标准库中的logging模块为我们提供了强大的日志记录功…

受控文件传输要怎么做 才能保障数据不泄露?

受控文件传输是指在严格的安全措施和政策控制下进行文件传输的过程,受控文件传输的目的是确保数据的安全性和完整性,同时满足合规性和审计要求,适用于需要高安全级别的企业环境,如金融机构、医疗机构、政府机构等。 为了实现受控文…

Rust 实战thiserror+自定义错误消息体

导航 一、背景二、实践1、导入thiserror2、自定义错误消息体(1)创建ErrMsg.rs和创建自定义结构体(2)lib.rs添加ErrMsg(3)main函数(4)完整代码 一、背景 开发中遇到需要通用、能够满…

发卡授权盗u源码系统搭建ZHU16728

2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包去除后门板,搭建系统TGaqxm01 。功能完美。 此套系统二开后完美授权成功,百分百授权。不是市面上那种授不了权的那种。 授权额度Unlimited 懂的都懂。 1.Php静态 2.目录puicta 3.扩sal 4.ss…

避雷!7.7分,新增1区TOP被标记On Hold,5本已被踢除!

本周投稿推荐 SSCI • 2/4区经管类,2.5-3.0(录用率99%) SCIE(CCF推荐) • 计算机类,2.0-3.0(最快18天录用) SCIE(CCF-C类) • IEEE旗下,1/2…

Mysql索引失效情况

索引失效的情况 这是正常查询情况,满足最左前缀,先查有先度高的索引。 1. 注意这里最后一种情况,这里和上面只查询 name 小米科技 的命中情况一样。说明索引部分丢失! 2. 这里第二条sql中的,status > 1 就是范围查…

【图书推荐】《ChatGLM3大模型本地化部署、应用开发与微调》

本书目的 本书通过多个PyTorch实战案例,帮助读者掌握ChatGLM3大模型本地化部署、应用开发与微调技能。智能问答机器人、美妆助手、上市公司财务报表信息抽取、上市公司财务报表智能问答与财务预警等案例,都可以按读者自己的业务需求,改造成可…

Ubuntu多版本(低版本)gcc/g++安装、切换与卸载图文教程

目录 1 问题背景2 多版本安装3 多版本切换4 多版本卸载5 其他问题 1 问题背景 环境: gcc 9.4.0g 9.4.0Ubuntu20.04 现象:通过apt install build-essential安装的gcc和g默认是当前版本系统支持的最高版本编译器,但是很多工程的编译需要安装低版…

大数据信用风险特别高,那大数据信用高风险要如何降低呢?

在大数据信用报告中,综合评分是直观体现信用风险高低的重要元素,也就是我们长听说的大数据信用分,很多人在查大数据信用报告之后,发现自己的大数据信用风险特别高,那大数据信用高风险要如何降低呢?小编从引起高风险的…

在线点餐系统搭建重点,会用到哪些三方服务?

在线点餐系统的搭建是一个涉及多个环节和技术的过程,其重点包括需求分析、系统设计、功能实现、用户体验以及系统的稳定性和安全性等方面。在搭建过程中,可能会使用到以下三方服务: 云服务提供商:云服务为在线点餐系统提供了基础…

充电宝怎么选?哪些充电宝的性价比比较高?性价比高充电宝推荐

在快节奏的现代生活中,共享充电宝已成为我们出行的常见伴侣。它们遍布城市的各个角落,为手机电量告急的我们提供了及时的帮助。然而,这种便利背后也隐藏着一些不那么方便的小插曲。 首先,我们得承认共享充电宝的便捷性。无论你是…