笔试|面试|FPGA知识点大全系列(9)FIFO深度计算详解


前言

嗨,今天来继续学习FPGA相关知识点~


38.FIFO的深度计算问题

FIFO的最小深度问题,可以理解为两个模块之间的数据传输问题;只有在读取速度慢于写入速度的情况下,我们才需要一个FIFO,来暂时的寄存这些没有被读出去的数据;

一个最主要的逻辑思想是:

确定FIFO的大小,就是要找到在写入过程中没有被读取的数据的个数;即FIFO的深度等于未被读取的数据的数量。

现在考虑一种实例,A时钟域数据发往B时钟域,将会出现以下几种情况:

1️⃣情况1:fa>fb,且在读和写中都没有空闲周期;

例如:

写入频率fa = 80MHz,读取频率fb = 50MHz。
突发长度即要写入的数据数目为120个。

计算如下:

写入一个数据需要的时间 = 1 / 80MHz = 12.5ns;
写入突发事件中所有数据需要时间 = 120 * 12.5 = 1500ns;
读取一个数所需时间 = 1 / 50MHz = 20ns;
所有数据写入完成后使用1500ns,1500ns可以读出数据为 = 1500 / 20 = 75个。
所以,要在FIFO中存储的剩余数据量为 120 - 75 = 45;
故:设计的FIFO的最小深度为45!

2️⃣情况2:fa>fb,两个连续的读写之间有一个时钟周期延迟;

这种情况和情况1️⃣一样,仅仅是人为的制造了某种混乱;

3️⃣情况3:fa>fb,在读和写中都有空闲周期;

例如:
写入频率fa = 80MHz,读取频率fb = 50MHz。
突发长度即要写入的数据数目为120个。
两个连续的写之间空闲周期为1,两个连续的读之间空闲周期为3;

计算如下:
可以理解为每两个时钟周期写入一次数据,每四个时钟周期读出一个数据。
写入一个数据需要的时间 = 2 * (1 / 80MHz) = 2 * 12.5 = 25ns;
写入突发事件中所有数据需要时间 = 120 * 25 = 3000ns;
读取一个数所需时间 = 4 * (1 / 50MHz) = 4 * 20 = 80ns;
所有数据写入完成后使用3000ns,可以读出数据为 = 3000 / 80 = 37.5 ≈ 37个。
所以,要在FIFO中存储的剩余数据量为120 - 37 = 83;
故:设计的FIFO的最小深度为

1.面积与速度的平衡与互换 这里的面积指一个设计消耗FPGA/CPLD的逻辑资源的数量,对于FPGA可以用消耗的FF(触发器)和LUT(查找表)来衡量,更一般的衡量方式可以用设计所占的等价逻辑门数。速度指设计在芯片上稳定运行所能达到的最高频率,这个频率由设计的时序状况来决定,以及设计满足的时钟要求:PADtoPADTIme、ClockSetupTIme、ClockHoldTIme、Clock-to-OutputDelay等众多时序特征量密切相关。面积和速度这两个指标贯穿FPGA/CPLD设计的时钟,是设计质量的评价的终极标准——面积和速度是一对对立统一的矛盾体。要求一个同时具备设计面积最小、运行频率最高是不现实的。更科学的设计目标应该是在满足设计时序要求(包括对设计频率的要求)的前提下,占用最小的芯片面积。或者在所规定的面积下,是设计的时序余量更大、频率跑的更高。这两种目标充分体现了面积和速度的平衡的思想。作为矛盾的两个组成部分,面积和速度的地位是不一样的。相比之下,满足时序、工作频率的要求更重要一些,当两者冲突时,采用速度优先的准则。从理论上讲,如果一个设计时序余量较大,所能跑的速度远远高于设计要求,那么就通过功能模块的复用来减少整个设计消耗的芯片面积,这就是用速度的优势换取面积的节约。反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么一般可以通过将数据流串并转换,并行复制多个操作模块,对整个设计采取乒乓操作和串并转换的思想运行。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值