日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FPGA FIFO深度计算

發布時間:2023/12/9 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA FIFO深度计算 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://comm.chinaaet.com/adi/blogdetail/37555.html

首先,一定要理解清楚FIFO的應用場景,這個會直接關系到FIFO深度的計算,如果是面試官拋出的問題,那么有不清楚的地方,就應該進行詢問。如果是筆試或者工程中需要計算FIFO深度的話,那么就需要自己考慮清楚。

?

其次,異步FIFO,讀寫時鐘不同頻,那么FIFO主要用于數據緩存,我們選擇的FIFO深度應該能夠保證在最極端的情況下,仍然不會溢出。因此考慮的前提一般都是寫時鐘頻率大于讀時鐘頻率,但是若寫操作是連續的數據流,那么再大的FIFO都無法保證數據不溢出。因此可以認為這種情況下寫數據的傳輸是“突發Burst”的,即寫操作并不連續,設計者需要根據滿標志控制或者自己來控制寫操作的起止。

宏觀地,從整個時間域上看,"寫數據=讀數據",這個條件必須要滿足,如果這個大條件不滿足的話,用FIFO是沒有效果的。但是在發送方"突發"發送數據的時間T內,是很有可能寫數據>讀數據的,因此FIFO的深度要能夠保證,在這段時間T內,如果接收方未能將發送方發送的數據接收完畢的話,剩下的數據都是可以存儲在FIFO內部而且不會溢出的,那么在發送方停止發送數據的"空閑時隙"內,接收方可以從容地接收剩下來的數據。

?

紅字部分就是個人認為在FIFO深度計算中,最重要的部分了。接著來看一個例子,這是我看一個網友寫時,是他當時遇到的一道筆試題。

一個8bit寬的AFIFO,輸入時鐘為100MHz,輸出時鐘為95MHz,設一個package為4Kbit,且兩個package之間的發送間距足夠大。問AFIFO的深度。

?

因為這位網友可能只是簡述,因此信息并不完整,我的個人理解是這樣的場景,一個異步FIFO,讀寫頻率不同,讀寫位寬相同。發送發一次Burst突發的數據量為4Kbit,即500Word,在兩次Burst突發之間有足夠的時間,因此我們只用考慮在發送方Burst發送數據的時間T內,如果接受方沒法將數據全部接受,其余數據均可存在FIFO內且不溢出,那么在發送方停止Burst發送數據的時間段內,接收方就可以從容的從FIFO內讀取數據。首先發送方Burst發送數據的時間段為 T = 500/100MHz,發送的數據量為 B_send = 500word,而在T這段時間內,接收方能夠接受的數據量為B_rec =? T*95MHz = 500 * 95 / 100 word = 475word,因此 B_remain = B_send - B_rec = 500 - 475 = 25 。那么FIFO的深度至少要大于等于25才行。

?

再看另外一個例子,還是從網上找到的,

寫時鐘頻率w_clk,
讀時鐘頻率r_clk,
寫時鐘周期里,每B個時鐘周期會有A個數據寫入FIFO
讀時鐘周期里,每Y個時鐘周期會有X個數據讀出FIFO
則,FIFO的最小深度是?

?

首先,我們可以認為寫操作是Burst突發的。

其次,寫操作的效率并不是100%的,而是A/B的,因此我們可以認為實際的F_wr = (A/B)*w_clk,同理,實際中F_rd = (X/Y)*r_clk。

另外,和第一個例子不同的是,這個題目里面并沒有約束Burst突發的場景,在正常情況下,應該是這樣的

空閑---Burst突發---空閑---Burst突發---空閑---Burst突發。但是我們在計算中,需要考慮最極端的情況,即

空閑---Burst突發---Burst突發---空閑---Burst突發---空閑。即傳輸過程中,可能會出現"背靠背"的情況,那么我們設計的FIFO深度必須能夠保正,在"背靠背"的時間段內,如果接收方沒法接受所有數據,那么剩余的數據可以被存儲在FIFO內部且不會溢出。那么就可以開始計算了。假設"背靠背"時發送的數據 = BL,那么"背靠背"的時間 =? BL / w_clk ,注意,這段時間內 F_wr = w_clk? 而不是之前提到的 (A/B)*w_clk。在這段時間內,接收方可以接受的數據 = (BL / w_clk)? * (X/Y)*r_clk ,

剩下的數據量 =?BL -? ( BL / w_clk ) * (X/Y)*r_clk,那么FIFO的深度至少就要為

" depth =? BL -? ( BL / w_clk ) * (X/Y)*r_clk "這樣的深度了。

將上述公式變換下,得到 depth = BL - BL? * (X/Y) * (r_clk/w_clk) 。這個公式就是網上流傳的計算FIFO深度的公式,我想應該就是這個推理過程吧。

?

上述的討論的一個前提就是FIFO的讀寫位寬一致,如果這個條件不滿足的話,那么FIFO的深度的計算就更加復雜一些,但是我們還是可以把FIFO的讀寫位寬也折合成一定的因子,帶入 實際的F_wr = (A/B)*w_clk 和 F_rd = (X/Y)*r_clk 中去,應該是是可以解決的。

轉載于:https://www.cnblogs.com/yangjun1219/p/5598982.html

總結

以上是生活随笔為你收集整理的FPGA FIFO深度计算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。