发布网友 发布时间:2022-11-03 22:07
共1个回答
热心网友 时间:2023-11-02 03:50
写时钟80MHz。
读时钟50MHz。
Burst_Len = 120 ,也就是要求至少安全写入120个数据。
连续写入和连续读取,无空闲时间,写入后立即开始读取 ,读写宽度相同。
写速率 > 读速率,FIFO迟早会被写满,但它要求至少写入120个数据后FIFO不满。
写入120个数据耗时 120 * 12.5 ns = 1500 ns 。
写入开始后FIFO内数据以 30M/Date 速率增加。
数据增加持续了 1500 ns ,FIFO最小深度: 0.0000015 * 30000000 = 45
例子-1 总结公式:
写时钟80MHz。
读时钟50MHz。
Burst_Len = 120 ,也就是要求至少安全写入120个数据。
写入后立即开始读取 ,读写宽度相同。
2个时钟中有1个数据写入(写速率: 80M * 1/2 = 40M )。
4个时钟中有1个数据读出(读速率: 50M * 1/4 = 12.5M )。
FIFO迟早会被写满 ,但它要求至少写入120个数据后FIFO不满。
写一个数据耗时: 2/80MHz = 25ns
需要至少写入120数据,耗时: 25 * 120 = 3000ns
例子2只是读写速率和例子1不同,可以直接用的公式(1) :
FIFO_DEPTH > (写速率-读速率)* Burst_Len/写速率 = (40M-12.5M)*120/40M = 83
写时钟30MHz。
读时钟50MHz。
Burst_Len = 120 ,也就是要求至少安全写入120个数据。
连续写入和连续读取,无空闲时间,写入后立即开始读取 ,读写宽度相同。
FIFO_DEPTH > 1 即可。读速率比写速率快,数据不会滞留。
写时钟30MHz。
读时钟50MHz。
Burst_Len = 120 ,也就是要求至少安全写入120个数据。
2个时钟中有1个数据写入(写速率: 30M * 1/2 = 15M )。
4个时钟中有1个数据读出(读速率: 50M * 1/4 = 12.5M )。
虽然写时钟小于读时钟频率,但是,宏观上写速率大于读速率。可以直接用的公式(1) :
FIFO_DEPTH > (写速率-读速率)* Burst_Len/写速率 = (15M-12.5M)*120/15M = 20
当满足以下所有条件时,就可使用公式(1):
当每100个时钟写80个数据时,微观时间上的写速率与数据排列有关,不能将宏观写速率带入式子(1)
读写时钟频率相同。
100个时钟有80个数据写入。
10个时钟有8个数据读出。
Burst_Len = 160 ,也就是要求至少安全写入160个数据 。
宏观上,读写速率相同;当FIFO足够深时,FIFO不会溢出。
微观上,写速率有多种情况:
Burst_Len足够长时,将上面读出写入速率带入公式(1),可得到网上讨论最多的FIFO深度求解公式:
十分不建议直接用公式(2)无脑计算,上式只有Burst_Len足够长,发生back to back write时才适用。
建议根据1~6步骤,判断微观写速率是否均匀,带入式子(1)计算。
以上,仅备忘用途。
可能会有错误。