FPGA IP核配置FIFO中遇到数据不匹配以及输出数据缺失问题的解决与思考

这篇具有很好参考价值的文章主要介绍了FPGA IP核配置FIFO中遇到数据不匹配以及输出数据缺失问题的解决与思考。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本人配置了一个16bit数据转8bit 数据的FIFO,因为不涉及异步时钟,所以使用的是单时钟。

一、初级问题empty信号一直为高,嗯~让我难以下手,毕竟这个问题过于简单化了,这是复位的问题,我的是低电平复位,前期为了方便,我便把复位信号拉低了,然后它一直处于复位状态。我把复位信号直接拉高(让复位信号为1),这个问题不再出现。

仿真时出现了一种很奇怪的问题,当给FIFO写入数据时,FIFO中的数据不能准确的读出来,或者说是这种数据是错位的,怎样的错位呢,如下所示

写入数据:

0x0102        0x0304        0x0506        0x0708        0x090A        0x0B0C        0x0D0E···········

第一次读出数据

8‘h01        8'h02        8'h03        8'h04        8'h05·········(很正常)

第二次读出数据

8’h1D        8'h1E        8'h1F        8'h20        8'h21·········(开始出现问题)

第三次读数据

8’h48        8'h49        8'h4A        8'h4B        8'h4C··········(觉得问题升级了)

············

············

 解决

FIFO里的数据没有清空,它会一直读还在FIFO里的数据,所以很明显是复位信号的问题。由于前面安排的复位信号拉高了,所以它一直都没有复位,也就是FIFO中不会被清空,FIFO是一个先入先出缓存器,没读完的数据会一直读下去。

安排合适的复位信号可以得以完美解决。

二、第一阶段问题

出现这种问题想到的是什么,FIFO请求??还是............

1、第一步,便是查看波形看数据是否正确,或者说是哪一个信号出现了疏漏;

2、第二步,输出数据用到的,请求或者复位信号该怎么安排,什么时候复位,什么时候接受请求信号,另一个模块什么时候发送请求信号;

3、第三步,查看波形;

4、第四步,分析信号。

......

这个流程一般情况下是能解决问题的,然后我就开始了我的找错生涯。

我发现

1、我的复位信号出现了问题,我为了让它(FIFO里的数据)输出,我让FIFO复位信号一直拉高(我是低电平复位),然后就出现了上述问题;

2、另外我遇到了一个问题,当我想要安排一个复位信号的时候,我发现我的复位信号不知道该怎么安排或者说这个时候我才发现了复位信号的重要性;

3、当我解决了复位信号后,我的请求信号也出现了很大的问题。

我解决

1、既然有很多信号有问题,那么先一步一步得来,一个个得解决;

2、复位信号:自己安排一个复位信号,也就是自己写一个复位信号,完美解决问题;

3、请求信号:请求信号是后一个模块给我的,那么我就得去发生请求信号的模块里解决问题,原来我当初为了方便,直接把请求信号拉高了,也就是它一直读FIFO,发现问题后自己安排请求信号,完美解决问题。

三、第二阶段问题

问题1:当我使用逻辑分析仪之后,我发现我的最后一字节数据发生了错误或者是完全,没有输出最后一字节数据;

问题2:当我完全查看数据后发现,每隔512字节偶尔有一字节数据错误;

解决问题:

第一阶段

1、最后一字节数据错误(没有输出),那便是输出信号的问题,让输出有效信号打一拍,我觉得还是很合理的,输出的数据确实有了最后一字节数据,但是我中间每隔512字节的数据不见了几个,这就~

2、第一阶段的我完全不知道怎么解决每隔512字节的数据错误问题,或者说是不知道问题出在了哪里;

第二阶段

1、最后一字节数据错误,那我自己分配一个信号,让它在最后一字节出现的时候拉高,让此信号和原来的有效信号取或,然后顺利解决问题;

2、每隔512字节,输出数据的时候会输出两个值,一个是无效数据,一个是有效数据,无效数据输出在前,有效数据输出在后,我想要的数据被前面的无效数据覆盖了,这就很~,最后想了一个办法顺利解决了这个问题——让它强制输出我想要的数据。问题完美解决。

四、思考

FIFO最重要的有三个信号,一个是复位一个是读请求一个是写使能;只要安排明白这三个信号,大概是不会出现太大的问题的,但是小问题也许会有。(这个东西不敢绝对化)但是,只要自己把逻辑理顺,根据逻辑完成它,一般都是会成功的。——所以,逻辑很重要

自己手里的东西总会遇到多多少少的问题,遇到问题首要任务就是分析问题,理解问题,然后解决问题,如果出现问题多多少少要找自身的原因,或者是自己的逻辑没有理顺,或者是哪一个信号或者条件安排没有完善,当问题一个个得出来的时候,自己就要一个个的去解决,解决一个问题自己就离成功进了一步,当自己完成之后,就会发现,“哦,原来这个问题~怎么感觉有些简单呢,就仅仅只有两三行代码就解决了。”

今天踩的坑努力下次不要再被掉进去。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

星回昭以灿,天行徐且溢。文章来源地址https://www.toymoban.com/news/detail-771847.html

到了这里,关于FPGA IP核配置FIFO中遇到数据不匹配以及输出数据缺失问题的解决与思考的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA原理与结构——FIFO IP核原理学习

    系列文章目录:FPGA原理与结构(0)——目录与传送门         FIFO是英文First-In-First-Out的缩写,是一种先入先出的数据缓冲器,与一般的存储器的区别在于没有地址线, 使用起来简单,缺点是只能顺序读写数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器

    2024年02月11日
    浏览(36)
  • Altera FPGA 储存单元IP核之RAM、FIFO

         只读存储器,系统上电后数据就被写入ROM,运行过程中只能从ROM中读取数据,而不能改变ROM中的数值。      随机存取储存器,可以随时把数据写入任一指定地址的储存单元,也可以随时从任一指定地址中读取数据。其读写速度是由时钟频率决定的。RAM主要用来存放程

    2023年04月08日
    浏览(34)
  • FPGA原理与结构(12)——FIFO IP核原理学习

    系列文章目录:FPGA原理与结构(0)——目录与传送门         FIFO是英文First-In-First-Out的缩写,是一种先入先出的数据缓冲器,与一般的存储器的区别在于没有地址线, 使用起来简单,缺点是只能顺序读写数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器

    2024年02月08日
    浏览(35)
  • xilinx FPGA FIFO IP核的使用(VHDL&ISE)

    1.新建工程和ip核文件 下图显示了一个典型的写操作。拉高WR_EN,导致在WR_CLK的下一个上升边缘发生写入操作。因为FIFO未满,所以WR_ACK输出1,确认成功的写入操作。当只有一个附加的单词可以写入FIFO时,FIFO会拉高ALMOST_FULL标志。当ALMOST_FULL拉高之后,一个附加的写入将导致

    2024年02月03日
    浏览(40)
  • 【FIFO IP系列】FIFO IP参数配置与使用示例

    Vivado IP核提供了强大的FIFO生成器,可以通过图形化配置快速生成FIFO IP核。 本文将详细介绍如何在Vivado中配置一个FIFO IP核,以及如何调用这个FIFO IP核。 1、新建FIFO IP 在Vivado的IP Catalog中找到FIFO Generator IP核,双击打开参数配置界面。 ​ 2、配置FIFO基本参数 ​(1)接口类型 N

    2024年02月12日
    浏览(31)
  • 【FPGA】Xilinx Cordic IP 内核使用记录(输入输出数据格式介绍)及实验仿真

    Rotate 实现的功能是坐标的旋转。 输入 X, Y, Phase 输出X’, Y’ 具体实现的功能对应的数学表达形式如下: 在做FFT 复乘旋转因子时也可以用这个IP核的Rotate功能来实现。旋转因子-旋转! Translation 实现的功能是求模,以及向量的夹角 输入 X, Y 输出X’ and Phase 具体实现的功能对应

    2024年02月07日
    浏览(37)
  • 基于FPGA的EMAC模块与FIFO模块:高速数据传输与存储

    基于FPGA的EMAC模块与FIFO模块:高速数据传输与存储 在现代社会,高速数据传输和存储是信息技术领域的关键问题之一。而基于FPGA的EMAC模块与FIFO模块则成为了解决这些问题的重要途径。本文将介绍这两个模块的原理、实现方法以及如何在FPGA中应用它们。 EMAC模块是以太网MA

    2024年02月03日
    浏览(31)
  • FPGA | RAM IP端口输出延迟问题解决

    Vivado中调用RAM IP,端口输出有延迟 版本器件 Version Vivado 2021.2 ZYNQ 7020 问题描述 ram_wea 信号拉低后,RAM读出数据有两个时钟的延迟 解决方式 在 Summary 中可以看到端口的读出延迟,关于该选项的具体使用方式可以参考Xilinx的数据手册:

    2024年02月16日
    浏览(30)
  • FPGA_学习_17_IP核_ROM(无延迟-立即输出)

    由于项目中关于厂商提供的温度-偏压曲线数据已经被同事放在ROM表了,我这边可用直接调用。 今天在仿真的时候,发现他的ROM表用的IP核是及时输出的,就是你地址给进去,对应地址的ROM数据就立马输出,没有延迟。 我打开他的IP核配置一看,他用的是 Distributed Memory Genera

    2024年02月11日
    浏览(29)
  • FPGA之FIFO详解,初识FIFO

           在篇博客里引入FIFO IP核的概念,FIFO是FPGA中最常用的IP核,经常用在接口模块、串并转换、协议处理、数据缓存等很多场合,所以活学活用这个IP核对于后期项目开发很重要,并且灵活掌握FIFO,也是一名合格的FPGA工程师的一项基本功。        FIFO顾名思义就是First

    2024年01月20日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包