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

本文详细分析了FPGA中的FIFO(FirstInFirstOut)特别是standardfifo和fwftfifo在数据输出时序上的差异,解释了标准FIFO的延迟一个时钟现象,并揭示了fwftfifo为何能实现无延迟输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇作为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使用者)一般无法看到。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值