微网站建设第一步是进行什么的设置,可以做推广东西的网站,mongo wordpress,wordpress虚拟商城主题文章目录 前言一、FIFO的最小深度写速度快于读速度写速度等于或慢于读速度 二、 举例说明1. FIFO写时钟为100MHz#xff0c;读时钟为80Mhz情况一#xff1a;一共需要传输2000个数据#xff0c;求FIFO的最小深度情况二#xff1a;100个时钟写入80个数据#xff0c;1个时钟读… 文章目录 前言一、FIFO的最小深度写速度快于读速度写速度等于或慢于读速度 二、 举例说明1. FIFO写时钟为100MHz读时钟为80Mhz情况一一共需要传输2000个数据求FIFO的最小深度情况二100个时钟写入80个数据1个时钟读1个数据求FIFO的最小深度情况三100个时钟写入80个数据3个时钟读1个数据求FIFO的最小深度 三、什么情况下不太需要考虑FIFO的最小深度 FIFO的设计可参考 FIFO的Verilog设计一——同步FIFO FPGA的Verilog设计二——异步FIFO 参考文献 [1]FIFO最小深度计算
前言 在实际使用FIFO时需要考虑FIFO的深度如何设置如果深度设置不当可能会出现资源浪费或者数据丢失等情况。下面将简要介绍FIFO的最小深度如何计算。
一、FIFO的最小深度 由前两篇文章对FIFO的介绍FIFO常用于数据缓存、数据匹配和多bit跨时钟域处理。 因此在读写速度不匹配的时候可以使用FIFO进行数据缓存。当读速度慢于写速度时FIFO可作为一个缓存单元。此时总会有部分数据缓存在FIFO中但是如果读写速度相差过大就会导致数据溢出。所以在写速度最大、读速度最小时正好不导致FIFO出现数据溢出的最小深度。当读速度快于写速度时FIFO更多的是起着变换时钟域的作用。
写速度快于读速度 FIFO写速度快于读速度模型的应用场景为无论是数据需不需要跨时钟域只要FIFO写速度快于读速度FIFO写入一个数据需要 t 1 t_1 t1秒读出一个数据需要 t 2 t_2 t2秒 t 1 t 2 t_1t_2 t1t2一共需要传输 n n n个数据。 FIFO写入n个数据的时间为 n t 1 nt_1 nt1FIFO在 n t 1 nt_1 nt1时间内读出数据个数为 n t 1 t 2 \frac{nt_1}{t_2} t2nt1此时FIFO中剩余数据个数 ⌈ n − n t 1 t 2 ⌉ \lceil n-\frac{nt_1}{t_2} \rceil ⌈n−t2nt1⌉。
写速度等于或慢于读速度 FIFO写速度等于或慢于读速度模型的应用场景为在多bit数据需要变换时钟域情况下FIFO的最小深度设置为1即可。因此FIFO只是起着变换时钟域的作用。
二、 举例说明
1. FIFO写时钟为100MHz读时钟为80Mhz
情况一一共需要传输2000个数据求FIFO的最小深度 FIFO写入一个数据需要 t 1 1 100 M t_1\frac{1}{100M} t1100M1s读出一个数据需要 t 2 1 80 M t_2\frac{1}{80M} t280M1s FIFO写入2000个数据需要的时间 n t 1 2000 100 M nt_1\frac{2000}{100M} nt1100M2000s FIFO在 n t 1 nt_1 nt1时间内读出数据个数为 n u m r d n t 1 t 2 2000 ∗ 80 M 100 M 1600 num_{rd} \frac{nt_1}{t_2} \frac{2000*80M}{100M} 1600 numrdt2nt1100M2000∗80M1600 此时FIFO剩余数据个数为 n u m 2000 − n u m r d 2000 − 1600 400 num 2000 - num_{rd} 2000-1600 400 num2000−numrd2000−1600400 可得FIFO最小深度为400。
情况二100个时钟写入80个数据1个时钟读1个数据求FIFO的最小深度 FIFO写入一个数据需要 t 1 1 100 M t_1\frac{1}{100M} t1100M1s读出一个数据需要 t 2 1 80 M t_2\frac{1}{80M} t280M1s 100个时钟写入80个数据可以理解为80个有效写时钟和20个无效写时钟。 此为突发读写情况需要考虑什么时候突发写的数据最多。当前后两个100时钟的突发写是连续时突发写的数量最多如下图所示 FIFO写入160个数据需要的时间 n t 1 160 100 M nt_1\frac{160}{100M} nt1100M160s FIFO在 n t 1 nt_1 nt1时间内读出数据个数为 n u m _ r d n t 1 t 2 160 ∗ 80 M 100 M 128 num\_rd \frac{nt_1}{t_2} \frac{160*80M}{100M} 128 num_rdt2nt1100M160∗80M128 此时FIFO剩余数据个数为 n u m 160 − n u m _ r d 160 − 128 32 num 160 - num\_rd 160-128 32 num160−num_rd160−12832 可得FIFO最小深度为32。 note:诀窍在于找出最大连续写入的数据量。
情况三100个时钟写入80个数据3个时钟读1个数据求FIFO的最小深度 FIFO写入一个数据需要 t 1 1 100 M t_1\frac{1}{100M} t1100M1s读出一个数据需要 t 2 3 ∗ 1 80 M t_23*\frac{1}{80M} t23∗80M1s 同上情况FIFO最大连续写入的数据量写入160个数据需要的时间 n t 1 160 100 M nt_1\frac{160}{100M} nt1100M160 FIFO在 n t 1 nt_1 nt1时间内读出数据个数为 n u m _ r d n t 1 t 2 160 ∗ 80 M 3 ∗ 100 M 42.67 num\_rd \frac{nt_1}{t_2} \frac{160*80M}{3*100M} 42.67 num_rdt2nt13∗100M160∗80M42.67 此时FIFO剩余数据个数为 n u m 160 − n u m _ r d 160 − 42.67 117.33 num 160 - num\_rd 160-42.67 117.33 num160−num_rd160−42.67117.33 可得FIFO最小深度为 ⌈ 117.33 ⌉ 118 \lceil117.33\rceil118 ⌈117.33⌉118可以设置成2的幂次方128。
三、什么情况下不太需要考虑FIFO的最小深度 何时不用过分考虑FIFO的最小深度在数据发送端如果能够接受FIFO的空满信号反馈时可以设置个大概的深度即可。利用FIFO的空满信号或者almost_full/almost_empty的反馈来控制FIFO的读写使能能够有效解决数据的溢出。