0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FIFO IP核报Memory Collision Error on RAMB36E1解决方案

冬至配饺子 来源:Bug记录 作者:woodfan 2023-06-19 14:56 次阅读

以前很少用到仿真,这次在仿真的过程中,遇到了某个警告,于是转过头又去研究了FIFO中的Safety Circuit的作用。

FIFO在FPGA中用的很多,常用于做少量数据的缓存和同步数据时钟域, 本文将介绍Memory Collision Error on RAMB36E1错误及相应的解决方案,其中涉及到Vivodo FIFO IP核的Safety Circuit设置。

事情是这样的,在某个设计中,我需要用异步FIFO同步数据的时钟域,在这个工程中,读写会持续进行,虽然读时钟速率是写时钟速率的N倍,但是读使能N个读时钟周期才会拉高一次,所以两边速率可以说是一致;在写入一半的数据后,读过程也开始了,两边一读一写,FIFO内部的数据量不增不减。

在仿真的过程中,我遇到了下图的仿真警告提示。

图片

之所以说不是错误而是警告,是因为这个提示并没有影响最终的结果。仿真依旧在运行,直到结束。

随后搜集了一番资料,在参考资料1(AR34859)中,解决方案是对FIFO内部的Block RAM,在双端口模式下,使用WRITE_FIRST或NO_CHANGE模式;

在资料2(Xilinx Memeory Resource pdf)的17页,介绍了Block RAM写模式,几种模式中,区别主要在

  • WRITE_FIRST: 写入的数据会马上出现在数据输出端口
  • READ_FIRST: 写入数据的同时,数据输出端口的数据还是该地址保存的前一个数据
  • NO_CHANGE: 在写入数据的时候,数据输出端口的数据会一直保持前一次读出的数据不变。

最后,官方给出了避免Conflict的建议。虽然,FIFO内部确实使用了Block RAM,但Xilinx对其加密了,无法看到内部的实现细节;官方应该不至于在FIFO Block RAM的设置上有这种错误,感觉问题并不是出现在这。

把FIFO单独拿出来做仿真测试时,却怎么也无法复原这个BUG。于是找到参考资料3(FIFO IP核手册),在Reset相关章节发现了一点玄机。

图片

FIFO Asynchronous Reset Timing Without Safety Circuit

在异步FIFO里,只能选择异步复位,而FIFO内部会把输入的异步复位信号同步到各自的时钟域;根据上图,复位信号拉低后,还是有一段时间不能对FIFO有读写操作,那么怎么知道是哪段时间呢。IP核的设置里面,可以设置在复位状态下,FULL的输出状态,设置为1,这样就可以根据FULL防止写入,复位后EMPTY为1,也可以防止读取。

图片

而在我对FIFO的操作中,我好心的把异步复位信号同步到RD时钟域下,然后输入到FIFO的RST端口,但是却没有注意到这个地方。

我取消了异步复位信号的同步,直接输入到FIFO的RST,复位与写使能之间的时间隔得足够长,警告果然消失了。

这里,再介绍另一种方法,选中上图的Enable Safety Circuit,在Safety Circuit启用下,时序图又变成这样:

图片

FIFO Asynchronous Reset Timing With Safety Circuit

在复位后,需要等待WR_RST_BUSY从1到0后,才能进行其他的操作(包括复位和写);同理,读取数据也需要等待RD_RST_BUSY从1到0。

此外,Enable Safety Circuit会同步FIFO内部的BRAM输入信号和输出信号,具体可以看看参考资料4(AR42571);文档也提到了,复位信号最好保持MAX(3, C_SYNCHRONIZER_STAGE)个慢时钟周期,两次复位中间要间隔6个慢时钟周期。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA设计
    +关注

    关注

    9

    文章

    427

    浏览量

    26352
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1332

    浏览量

    113937
  • FIFO存储
    +关注

    关注

    0

    文章

    103

    浏览量

    5919
  • RST
    RST
    +关注

    关注

    0

    文章

    30

    浏览量

    7336
  • BRAM
    +关注

    关注

    0

    文章

    41

    浏览量

    10896
收藏 人收藏

    评论

    相关推荐

    #硬声创作季 #FPGA FPGA-27-04 Quartus中fifo IP介绍与仿真测试-1

    fpgafifoIP
    水管工
    发布于 :2022年10月29日 02:28:30

    #硬声创作季 #FPGA FPGA-27-04 Quartus中fifo IP介绍与仿真测试-4

    fpgafifoIP
    水管工
    发布于 :2022年10月29日 02:29:34

    implement时资源不够的错误(新人求助)

    , please consider targeting a larger device.说的那些RAMB36/FIFO RAMB36E1 RAMB18 都是什么啊?求各路大神指导。。。
    发表于 01-29 11:21

    求助:用fifo ip作延时输出数据

    同上,如何用fifo ip作延时输出数据,想输入一组数据,大概300个,clk上升沿输出一个,想延迟128个数据输出的时间后,将这一组数据通过fifo输出,求大神指点代码该怎么写,大
    发表于 04-26 11:37

    ISE中,调用FIFO IP遇到的问题?

    fifo IP fifo_uart fifo_uut(.clk(clk), // input clk.rst(rst_n), // inp
    发表于 09-14 11:36

    Vivado 2013.4中的高扇出网怎么确定得到了优化?

    嗨,我正在使用vivado 2013.4并且在实现后从触发器的Q引脚到180个负载(RAMB36E1上的ENBWREN引脚)获得高扇出网络。它符合时间,但是,我希望网络能够得到缓冲。1.有没有
    发表于 10-18 14:28

    映射错误RAMB36E1

    ; my_fifo_generated_with_coregen的属性register_balancing:实体是“否”;它没有解决问题。我假设问题来自RAMB36E1在coregen生成的FIFO中实例化,该RAM的输入
    发表于 10-18 14:41

    请问DRC RTSTAT-1FIFO生成器的部分冲突应该如何解决?

    /gf36e1_inst.sngfifo36e1/REGCE Conflicts with Site Pins: BRAM_L_X30Y45/BRAM_FIFO36_REGCEAREGCEL (RAMB36_X1Y9/REGCE
    发表于 10-31 16:26

    VIVADO的筹码镜内存损坏

    显示的信号。我也在实施过程中遇到了这个消息。[DRC 23-20]规则违规(REQP-1839)RAMB36异步控制检查 -RAMB36E1 ........... inst_icon / U0
    发表于 11-06 11:44

    如何手动将初始值写入RAMB16 S36

    嗨,大家好,我有一个使用RAMB16_S36原语作为指令RAM的项目我想初始化它的前几位,就像给BRAM提供coe文件一样。如何手动将初始值写入RAMB16_S36?我发现有一堆参数[255:0
    发表于 04-17 06:46

    X_RAMB18E1上的ISim致命错误

    X_RAMB18E1.vhd中:prcs_clk 致命错误:ISim:该应用程序发现了一种无法恢复的特殊情况。流程将终止。要搜索此问题的可能解决方案,请访问Xilinx答案数据库,访问http
    发表于 04-02 08:42

    RAMB36E1上运行低电平如何强制设计使用RAMB18E1

    的245个97%特定功能利用率: RAMB36E1 / FIFO36E1s数量:416中的360 86% 仅使用RAMB36E1的数字:360 仅使用FIFO36E1的数字:0
    发表于 06-12 08:35

    花费太多时间在vivado中运行实现怎么缩短时间?

    %| + ------------------- + ------ + ------- + ----------- + ------- + | Block RAM Tile | 430 | 0 | 545 | 78.89 || RAMB36 / FIFO * | 429
    发表于 08-06 06:19

    间通信(IPC)解决方案

    是Mailbox的工作方式。 TDA4VM的IPC方案,基于Mailbox的实现的方式的不同,常用的间通信方式有两种。 基于RPMSG的间通信解决方案,适合小块数据消息传递。基于S
    发表于 11-03 07:26

    LogiCORE IP AXI4-Stream FIFO内核解决方案

    LogiCORE IP AXI4-Stream FIFO内核允许以内存映射方式访问一个AXI4-Stream接口。该内核可用于与AXI4-Stream IP接口,类似于LogiCORE IP
    的头像 发表于 09-25 10:55 784次阅读
    LogiCORE <b class='flag-5'>IP</b> AXI4-Stream <b class='flag-5'>FIFO</b>内核<b class='flag-5'>解决方案</b>