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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287310.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287310.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287310.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

玩轉ASP.NET Core 6.0框架-序言

ASP.NET Core是微軟提供的強大的web框架,它有很多潛在的強大而有用的功能。本專欄的目標是幫助您把框架的隱藏能力最大限度地發揮出來,讓您能夠按需定制ASP NET Core框架。本專欄提供了一種具體的操作和實現方法,可以讓你在短時間盡可能地提高…

從C#開始的面向對象編程經典自學教程

1、C語言的時代 在C語言時代,可以認為那時的編程過程就是表格加工過程,也就是從A表格到B表格、再到C表格…..等等,這個過程中,計算機語言如何描述一個表格,成為計算機語言的關鍵。 對一個表格的分析可以發現:表格是兩部分組成:表頭和表格: 學生表 STUDENT 在這個表格…

Java之對List里面的對象名字進行模糊查詢

1 問題 對list里面的對象名字進行模糊查詢 2 解決辦法 //即可以進行模糊匹配matcher.find()//匹配查詢matcher.matches() /*** 模糊查詢*/public static ArrayList<SearchBean> search(String name, List<SearchBean> list) {ArrayList<SearchBean> results…

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(2)在python中加號竟然如此善變

本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋了新手在學習中的一般問題。此系列將會持續更新&#xff0c;包括別的語言以及實戰都將使用對話的方式進行教學&#xff0c;基礎編程語言教學適用于零基礎小白&#xff0c;之后實戰課程也將會逐步更新。 若…

mysql數據庫rp集群,使用MySQL-Cluster搭建MySQL數據庫集群

1、MySQL集群的作用&#xff1a;- 解決訪問節點的單點故障- 數據存儲節點的單點故障- 解決數據存儲節點數據備份問題2、集群&#xff1a;使用一組服務器提供相同的服務3、關于MySQL-Cluster&#xff1a;MySQL官方提供的集群版本已集成標準版MySQL程序&#xff0c;可獨立安裝使用…

桌面虛擬化云技術將支撐數字化醫院

桌面虛擬化云技術將支撐數字化醫院 2013-12-04 10:32 現今醫療行業已經從醫院——患者的二元關系走向從醫院——患者——政府監督——醫療保險的多元關系&#xff0c;醫療體系需要更高效的運轉&#xff0c;患者需要更好的就醫體驗&#xff0c;這使得醫療行業信息化建設的重要性…

Blazor University (23)路由 —— 路由參數

原文鏈接&#xff1a;https://blazor-university.com/routing/route-parameters/路由參數源代碼[1]到目前為止&#xff0c;我們已經了解了如何將靜態 URL 鏈接到 Blazor 組件。靜態 URL 只對靜態內容有用&#xff0c;如果我們希望同一個組件根據 URL 中的信息&#xff08;例如客…

【經典回放】多種語言系列數據結構算法:棧(C版)

本文采用C語言實現棧結構算法并舉例應用。 一 棧的基本原理分析 作為棧這種數據結構,數據是進行所謂的先進后出操作,但棧在操作中,并不需要在中間插入刪除操作、一般也不需要在進棧數據中查找什么,這種情況下,恰恰是順序表可以完成的非常好的場合,所以棧經常是用一個簡單…

Android之提示android.content.res.Resources$NotFoundException: Resource ID #0x7f08010a

1 問題 在我的oppo機器上面運行一個頁面沒有奔潰,但是在紅米安卓5.1版本運行頁面奔潰,奔潰信息如下 /Timeline(11600): Timeline: Activity_launch_request time:61313216 I/WtProcessController( 3721): FOREGROUND INFO: name=com.appsinnova.android.keepshare uid=1023…

《看聊天記錄都學不會C語言?太菜了吧》(14)這么神奇?我寫了20行代碼竟然一行就可以搞定?

若是大一學子或者是真心想學習剛入門的小伙伴可以私聊我&#xff0c;若你是真心學習可以送你書籍&#xff0c;指導你學習&#xff0c;給予你目標方向的學習路線&#xff0c;無套路&#xff0c;博客為證。 本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋…

Javascript和android原生互調

最近在做原生和js端的互調的功能&#xff0c;自己改了個demo&#xff0c;給大家講解下。 先上js代碼 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>方法調用基本流程測試</title> </head> <body> &l…

ice 服務java連接,“先進的互聯互通技術”–使用ice聯通php和java [part 1 server]

PHP沒有中間件&#xff0c;導致了對很多麻煩。比如&#xff0c;對數據庫的操作必須要鏈接數據庫&#xff0c;然后做SQL操作。WEB程序直接操作數據庫的方法&#xff0c;這樣會帶來很多人為因素的事故隱患&#xff0c;以及管理上的麻煩&#xff0c;尤其是對大型的網站應用來說。規…

HttpCookie

參考 : http://www.cnblogs.com/fish-li/archive/2011/07/03/2096903.html 上文結尾有提到一個說法 4. HttpRequest.Cookies 與 HttpResponse.Cookies 會有關系&#xff08;很奇怪吧&#xff09;。 微軟官網也是這么說的 : https://msdn.microsoft.com/en-us/library/system.we…

Android之BaseQuickAdapter.setOnItemChildClickListener點擊死人也沒反應的原因

1 問題 用BaseQuickAdapter設置子view點擊事件 unInstalledAdapter!!.setOnItemChildClickListener(object: BaseQuickAdapter.OnItemChildClickListener {override fun onItemChildClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) {var info =…

【經典回放】多種語言系列數據結構算法:棧(C#版)

本文采用C#語言實現棧結構算法并舉例應用。 一、C#的棧對象使用 對C#而言,要使用棧是極其簡單的事情,因為C#已經有棧對象,所以根本不需要自用再用順序表構造棧,只需要你會說明、會應用即可。 在C#中棧對象的類型名稱是Stack,這是個泛型的對象,所以,你在使用這個對象的時…

美國銀行將AI應用于企業應收賬款處理

據外媒消息&#xff0c;美國銀行&#xff08;Bank of America&#xff09;與Fintech創業公司High Radius達成合作&#xff0c;將人工智能應用于企業應收賬款處理。該應用程序專為大型、復雜的公司管理大筆支付業務&#xff0c;因這些公司常常發生回款信息丟失或一方單獨收到付款…

在 Kubernetes 上部署 Secret 加密系統 Vault

HashiCorp Vault 是一個基于身份的 Secret 和加密管理系統。Secret 是您想要嚴格控制訪問的內容&#xff0c;例如 API 加密密鑰、密碼或證書。Vault 提供由身份驗證和授權方法控制的加密服務。使用 Vault 的 UI、CLI 或 HTTP API&#xff0c;可以安全地存儲和管理對機密和其他敏…

《看聊天記錄都學不會C語言?太菜了吧》(15)你學了一節課的函數我5分鐘搞定了,還很熟

若是大一學子或者是真心想學習剛入門的小伙伴可以私聊我&#xff0c;若你是真心學習可以送你書籍&#xff0c;指導你學習&#xff0c;給予你目標方向的學習路線&#xff0c;無套路&#xff0c;博客為證。 本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋…

【經典回放】多種語言系列數據結構算法:棧(JavaScript版)

本文采用JavaScript語言實現棧結構算法并舉例應用。 JavaScript的棧是數組對象中自動提供的,這點如同C#,實際也不需要自己編寫什么棧的程序,如果你用: var s=new Array(); 定義一個s的數組,則這個s上將有以下的方法可供使用: 其中:FF: Firefox, IE: Internet Explore…

設計模式(10)-----模板方法模式

模板方法模式(Template Method) 定義 定義了一個操作中的算法的骨架&#xff0c;而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。 UML類圖 例子 AbstractClass package com.csdhsm.pattemdesign.template;/** * Title: …