[vivado fifo] 如何理解standard fifo 和fwft fifo的输出时序问题

本篇作为FPGA FIFO基本介绍(FIFO Geneerator(13.2))的补充文档,解释Native 接口fifo的两种数据输出时序问题。


一、延迟现象出现原因

     不止fifo会出现延迟一个时钟的现象,axi等也会出现延迟现象,有时还会出现延迟2-3个时钟,但是有时一个时钟都不延迟。代码延迟有什么规律吗?他们究竟会延迟几个时钟?

     答案是一个时钟都不会延迟。所有的延迟均是其条件未满足,条件未满足当然不执行。在vivado仿真中一般忽略语句执行所需时间。同一时刻,满足条件的语句同时执行。

always @(posedge clk) befin
    if (!rst_n) begin
        a <= 0;
        b <= 0;
    end
    else begin
        a <= 1;
        if (a)
            b <= 1;
    end

上述代码段,在rst_n拉高后的第一个时钟上升沿clk1时,a<=1。if语句中a是此时刻到来前的值0。所以,clk1后a=1,b=0;clk2到来,clk2到来前a=1,所以执行b<=1。从现象上,看出现了延迟,但实际上并没有。

二、standard fifo与fwft fifo

          我们都知道,当ra_en拉高时,fifo才输出数据,就类似上面a拉高,b才会拉高为1。fifo内部的判断rd_en拉高才输出数据的机制,就决定了输出会比rd_en延迟一个时钟。这也正是standard fifo中输出延迟的原因。

       但是为什么fwft fifo没有出现延迟呢?实际上,fwft提前拉高了rd_en,先输出一个数据放入寄存器准备着,但是不让你看到。然后等外部rd_en拉高的同时才一起输出。

      我们可以把这个提前输出的数据当成预制菜假冒现做的。做菜需要时间,不可能听到客人点菜就出菜。所以standard fifo就是老老实实的听到客人点菜(rd_en=1),做完才端上来(延迟一个时钟)。而fwft,就是整个预制菜,听到客人点菜(rd_en=1),就把预制菜端上来,说现做的(无延迟输出)。从客人的角度,你叫了菜就立马有了。从厨师的角度,老板让提前做一份菜,留着。

注意老板让提前做一份,还有被提前做的那份菜,是在厨房(ip核)内部发生的,顾客(ipcore使用者)一般无法看到。

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vivado中的FIFO IP核具有读写时序,读写时序是指FIFO中的读操作和写操作之间的时序关系。 在FIFO IP核中,读写时序由以下几个要素决定: 1. 时钟:FIFO的读写操作都需要使用时钟信号进行同步。通常情况下,读写操作应该在时钟的上升沿进行。 2. 读写控制信号:FIFO IP核提供了一些控制信号来控制读写操作。例如,读使能信号(read_en)用于使能读操作,写使能信号(write_en)用于使能写操作。 3. 数据输入输出FIFO IP核有一个数据输入端口(write_data)和一个数据输出端口(read_data),用于进行数据的写入和读取。 在进行FIFO读写操作时,需要以下步骤来确保正确的时序: 1. 写操作时序:当进行写操作时,需要先将写数据(write_data)设置为要写入的数据值,并将写使能信号(write_en)置为高电平。此时,写操作会在下一个时钟上升沿被触发。 2. 读操作时序:当进行读操作时,需要先将读使能信号(read_en)置为高电平。读操作也会在下一个时钟上升沿被触发,并将读取到的数据值放置在读数据(read_data)端口。 需要注意的是,FIFO IP核中的读写操作需要在时钟的上升沿进行,并且读写控制信号需要在时钟上升沿之前进行设置,以确保正确的时序关系。此外,还要根据具体的应用需求来设置FIFO的深度和宽度,以满足数据传输的要求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值