推荐答案
测试一下
题目
FIFO最小深度计算?
参考答案与知识点
参考答案
FIFO最小深度计算用于确保在异步时钟域数据传递时不丢失数据,核心是评估最坏情况下写数据量与读数据量的差值。最坏情况通常发生在写时钟频率大于读时钟频率、写使能连续(或背靠背突发)而读使能可能非连续时。
常用公式:
FIFO深度 ≥ 突发长度 - (突发长度 × (读时钟频率 / 写时钟频率) × 读使能有效占空比)
若读使能连续且读时钟为最快频率下的最慢读速率,可简化为:
FIFO深度 = 突发长度 - (突发长度 × (读时钟周期 / 写时钟周期))
实际计算步骤:
1. 确定最大突发写长度(连续写的数据个数)。
2. 确定写时钟频率与读时钟频率。
3. 确定读使能的有效模式:若读使能每个读时钟周期拉高一次,则每周期读1个数据;若读使能每N个周期拉高一次,则读速率降为1/N。
4. 计算在写突发持续时间内读出的数据量:
写突发持续时间 = 突发长度 × 写时钟周期
该时间内读时钟周期数 = 写突发持续时间 / 读时钟周期
该时间内读出的数据量 = 读时钟周期数 × 每读时钟周期的读取个数(读使能平均占空比)
5. FIFO最小深度 = 突发长度 - 读出的数据量,并向上取整到整数。
易错点:
- 忽略背靠背传输:如果写使能不连续但可能连续两个写时钟写数据,需将最坏情况下的连续写长度作为突发长度。
- 未考虑读使能占空比:读使能并非每个周期有效时,需精确计算平均读速率。
- 读写时钟频率互换或频率比计算错误:需以实际时钟频率为单位,不可混淆。
- 忘记向上取整:深度必须为整数,且需留安全余量。
示例:写时钟100MHz,读时钟80MHz,最大突发写长度100,读使能每4个读时钟周期读1个数据。写周期10ns,读周期12.5ns,写突发持续1000ns,读时钟周期数=1000/12.5=80,读出数据=80/4=20,最小深度=100-20=80。
涉及知识点
- FIFO深度计算公式
- 突发长度与背靠背传输
- 读写使能占空比分析
- 时钟周期与频率换算
- 最坏情况场景选择