0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

超全面解析FIFO的原理及應用

電子工程師 ? 來源:數(shù)字ICer ? 作者:數(shù)字ICer ? 2021-05-29 09:10 ? 次閱讀

First Input First Output的縮寫,先入先出隊列,這是一種傳統(tǒng)的按序執(zhí)行方法,先進入的指令先完成并引退,跟著才執(zhí)行第二條指令。是一種先進先出的數(shù)據緩存器,他與普通存儲器的區(qū)別是沒有外部讀寫地址線,這樣使用起來非常簡單,但缺點就是只能順序寫入數(shù)據,順序的讀出數(shù)據,其數(shù)據地址由內部讀寫指針自動加1完成,不能像普通存儲器那樣可以由地址線決定讀取或寫入某個指定的地址。

FIFO是隊列機制中最簡單的,每個接口上只有一個FIFO隊列,表面上看FIFO隊列并沒有提供什么QoS保證,甚至很多人認為FIFO嚴格意義上不算做一種隊列技術,實則不然,F(xiàn)IFO是其它隊列的基礎,F(xiàn)IFO也會影響到衡量QoS的關鍵指標:

報文的丟棄、延時、抖動。既然只有一個隊列,自然不需要考慮如何對報文進行復雜的流量分類,也不用考慮下一個報文怎么拿、拿多少的問題,即FIFO無需流分類、調度機制,而且因為按順序取報文,F(xiàn)IFO無需對報文重新排序。簡化了這些實現(xiàn)其實也就提高了對報文時延的保證。

FIFO關心的就是隊列長度問題,隊列長度會影響到時延、抖動、丟包率。因為隊列長度是有限的,有可能被填滿,這就涉及到該機制的丟棄原則,F(xiàn)IFO使用Tail Drop機制。如果定義了較長的隊列長度,那么隊列不容易填滿,被丟棄的報文也就少了,但是隊列長度太長了會出現(xiàn)時延的問題,一般情況下時延的增加會導致抖動也增加;如果定義了較短的隊列,時延的問題可以得到解決,但是發(fā)生Tail Drop的報文就變多了。類似的問題其它排隊方法也存在。

Tail Drop機制簡單的說就是如果該隊列如果已經滿了,那么后續(xù)進入的報文被丟棄,而沒有什么機制來保證后續(xù)的報文可以擠掉已經在隊列內的報文。

FIFO隊列原理簡述

FIFO隊列不對報文進行分類,當報文進入接口的速度大于接口能發(fā)送的速度時,F(xiàn)IFO按報文到達接口的先后順序讓報文進入隊列,同時,F(xiàn)IFO在隊列的出口讓報文按進隊的順序出隊,先進的報文將先出隊,后進的報文將后出隊。

FIFO隊列具有處理簡單,開銷小的優(yōu)點。但FIFO不區(qū)分報文類型,采用盡力而為的轉發(fā)模式,使對時間敏感的實時應用(如VoIP)的延遲得不到保證,關鍵業(yè)務的帶寬也不能得到保證。

FIFO應用

FIFO一般用于不同時鐘域之間的數(shù)據傳輸,比如FIFO的一端是AD數(shù)據采集,另一端是計算機的PCI總線,假設其AD采集的速率為16位100K SPS,那么每秒的數(shù)據量為100K×16bit=1.6Mbps,而PCI總線的速度為33MHz,總線寬度32bit,其最大傳輸速率為1056Mbps,在兩個不同的時鐘域間就可以采用FIFO來作為數(shù)據緩沖。

另外對于不同寬度的數(shù)據接口也可以用FIFO,例如單片機位8位數(shù)據輸出,而DSP可能是16位數(shù)據輸入,在單片機與DSP連接時就可以使用FIFO來達到數(shù)據匹配的目的。

FIFO的寬度:

也就是英文資料里常看到的THE WIDTH,它指的是FIFO一次讀寫操作的數(shù)據位,就像MCU有8位和16位,ARM32位等等,F(xiàn)IFO的寬度在單片成品IC中是固定的,也有可選擇的,如果用FPGA自己實現(xiàn)一個FIFO,其數(shù)據位,也就是寬度是可以自己定義的。

FIFO的深度:

THE DEEPTH,它指的是FIFO可以存儲多少個N位的數(shù)據(如果寬度為N)。如一個8位的FIFO,若深度為8,它可以存儲8個8位的數(shù)據,深度為12 ,就可以存儲12個8位的數(shù)據,F(xiàn)IFO的深度可大可小,個人認為FIFO深度的計算并無一個固定的公式。

在FIFO實際工作中,其數(shù)據的滿/空標志可以控制數(shù)據的繼續(xù)寫入或讀出。在一個具體的應用中不可能由一些參數(shù)精確算出所需的FIFO深度為多少,這在寫速度大于讀速度的理想狀態(tài)下是可行的,但在實際中用到的FIFO深度往往要大于計算值。

一般來說根據電路的具體情況,在兼顧系統(tǒng)性能和FIFO成本的情況下估算一個大概的寬度和深度就可以了。而對于寫速度慢于讀速度的應用,F(xiàn)IFO的深度要根據讀出的數(shù)據結構和讀出數(shù)據由那些具體的要求來確定。

滿、空標志:

滿標志:FIFO已滿或將要滿時由FIFO的狀態(tài)電路送出的一個信號,以阻止FIFO的寫操作繼續(xù)向FIFO中寫數(shù)據而造成溢出(overflow)。

空標志:FIFO已空或將要空時由FIFO的狀態(tài)電路送出的一個信號,以阻止FIFO的讀操作繼續(xù)從FIFO中讀出數(shù)據而造成無效數(shù)據的讀出(underflow)。

讀、寫時鐘:

讀時鐘:讀操作所遵循的時鐘,在每個時鐘沿來臨時讀數(shù)據。

寫時鐘:寫操作所遵循的時鐘,在每個時鐘沿來臨時寫數(shù)據。

讀、寫指針

讀指針:指向下一個讀出地址。讀完后自動加1。

寫指針:指向下一個要寫入的地址的,寫完自動加1。

讀寫指針其實就是讀寫的地址,只不過這個地址不能任意選擇,而是連續(xù)的。

FIFO分類

根據FIFO工作的時鐘域,可以將FIFO分為同步FIFO和異步FIFO。

同步FIFO是指讀時鐘和寫時鐘為同一個時鐘。在時鐘沿來臨時同時發(fā)生讀寫操作。

異步FIFO是指讀寫時鐘不一致,讀寫時鐘是互相獨立的。

FIFO設計的難點

FIFO設計的難點FIFO設計的難點在于怎樣判斷FIFO的空/滿狀態(tài)。

為了保證數(shù)據正確的寫入或讀出,而不發(fā)生溢出或讀空的狀態(tài)出現(xiàn),必須保證FIFO在滿的情況下,不能進行寫操作。在空的狀態(tài)下不能進行讀操作。怎樣判斷FIFO的滿/空就成了FIFO設計的核心問題。由于同步FIFO幾乎很少用到,這里只描述異步FIFO的空/滿標志產生問題。

在用到觸發(fā)器的設計中,不可避免的會遇到亞穩(wěn)態(tài)的問題(關于亞穩(wěn)態(tài)可查看FPGA中的亞穩(wěn)態(tài))。在涉及到觸發(fā)器的電路中,亞穩(wěn)態(tài)無法徹底消除,只能想辦法將其發(fā)生的概率將到最低。

其中的一個方法就是使用格雷碼。格雷碼在相鄰的兩個碼元之間只由一位變換(二進制碼在很多情況下是很多碼元在同時變化)。這就會避免計數(shù)器與時鐘同步的時候發(fā)生亞穩(wěn)態(tài)現(xiàn)象。但是格雷碼有個缺點就是只能定義2^n的深度,而不能像二進制碼那樣隨意的定義FIFO的深度,因為格雷碼必須循環(huán)一個2^n,否則就不能保證兩個相鄰碼元之間相差一位的條件,因此也就不是真正的格雷碼了。

第二就是使用冗余的觸發(fā)器,假設一個觸發(fā)器發(fā)生亞穩(wěn)態(tài)的概率為P,那么兩個級聯(lián)的觸發(fā)器發(fā)生亞穩(wěn)態(tài)的概率就為P的平方。但這會導致延時的增加。亞穩(wěn)態(tài)的發(fā)生會使得FIFO出現(xiàn)錯誤,讀/寫時鐘采樣的地址指針會與真實的值之間不同,這就導致寫入或讀出的地址錯誤。

由于考慮延時的作用,空/滿標志的產生并不一定出現(xiàn)在FIFO真的空/滿時才出現(xiàn)??赡蹻IFO還未空/滿時就出現(xiàn)了空/滿標志。這并沒有什么不好,只要保證FIFO不出現(xiàn)overflow or underflow 就OK了。

以上,我們已經清楚地看到,F(xiàn)IFO設計最關鍵的就是產生空/滿標志的算法的不同產生了不同的FIFO。但無論是精確的空滿還是保守的空滿都是為了保證FIFO工作的可靠。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6023

    文章

    44376

    瀏覽量

    628463
  • 存儲器
    +關注

    關注

    38

    文章

    7366

    瀏覽量

    163098
  • 數(shù)據傳輸

    關注

    9

    文章

    1698

    瀏覽量

    64218
  • fifo
    +關注

    關注

    3

    文章

    382

    瀏覽量

    43404
  • 觸發(fā)器
    +關注

    關注

    14

    文章

    1990

    瀏覽量

    60873

原文標題:FIFO解析攻略

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    raksmart洛杉磯云服務器全面解析

    RAKsmart洛杉磯云服務器是一種高性能的云計算解決方案,專為滿足不同業(yè)務需求而設計。以下是對RAKsmart洛杉磯云服務器的具體介紹,rak小編為您整理發(fā)布raksmart洛杉磯云服務器全面解析。
    的頭像 發(fā)表于 09-14 09:36 ?119次閱讀

    陀螺儀LSM6DSOW開發(fā)(4)----中斷獲取FIFO數(shù)據

    本文將探討如何使用中斷機制獲取FIFO數(shù)據并應用MotionFX庫解析空間坐標。MotionFX庫是一種用于傳感器融合的強大工具,可以將加速度計、陀螺儀和磁力計的數(shù)據融合在一起,實現(xiàn)精確的姿態(tài)和位置
    的頭像 發(fā)表于 08-08 16:03 ?296次閱讀
    陀螺儀LSM6DSOW開發(fā)(4)----中斷獲取<b class='flag-5'>FIFO</b>數(shù)據

    國產光電耦合器的全面解析

    隨著我國對新能源和高科技產業(yè)的重視, 國產光電耦合器 (光耦)在各個領域的應用越來越廣泛。盡管國內企業(yè)在光電耦合器領域取得了顯著的進展,但國外企業(yè)仍然在技術和市場上保持一定的優(yōu)勢。本文將全面解析國產光電耦合器的應用、基本原理、市場情況及未來發(fā)展方向。
    的頭像 發(fā)表于 07-26 14:03 ?154次閱讀

    驅動LSM6DS3TR-C實現(xiàn)高效運動檢測與數(shù)據采集(8)----中斷獲取FIFO數(shù)據并應用MotionFX庫解析空間坐標

    本文將探討如何使用中斷機制獲取FIFO數(shù)據并應用MotionFX庫解析空間坐標。MotionFX庫是一種用于傳感器融合的強大工具,可以將加速度計、陀螺儀和磁力計的數(shù)據融合在一起,實現(xiàn)精確的姿態(tài)和位置
    的頭像 發(fā)表于 07-21 10:02 ?399次閱讀
    驅動LSM6DS3TR-C實現(xiàn)高效運動檢測與數(shù)據采集(8)----中斷獲取<b class='flag-5'>FIFO</b>數(shù)據并應用MotionFX庫<b class='flag-5'>解析</b>空間坐標

    陀螺儀LSM6DSV16X與AI集成(9)----中斷獲取FIFO數(shù)據并應用MotionFX庫解析空間坐標

    本文將探討如何使用中斷機制獲取FIFO數(shù)據并應用MotionFX庫解析空間坐標。MotionFX庫是一種用于傳感器融合的強大工具,可以將加速度計、陀螺儀和磁力計的數(shù)據融合在一起,實現(xiàn)精確的姿態(tài)和位置
    的頭像 發(fā)表于 07-18 10:46 ?754次閱讀
    陀螺儀LSM6DSV16X與AI集成(9)----中斷獲取<b class='flag-5'>FIFO</b>數(shù)據并應用MotionFX庫<b class='flag-5'>解析</b>空間坐標

    同步FIFO和異步FIFO區(qū)別介紹

    1. FIFO簡介 FIFO是一種先進先出數(shù)據緩存器,它與普通存儲器的區(qū)別是沒有外部讀寫地址線,使用起來非常簡單,缺點是只能順序讀寫,而不能隨機讀寫。 2. 使用場景 數(shù)據緩沖:也就是數(shù)據寫入過快
    的頭像 發(fā)表于 06-04 14:27 ?777次閱讀
    同步<b class='flag-5'>FIFO</b>和異步<b class='flag-5'>FIFO</b>區(qū)別介紹

    異步FIFO結構設計

    電子發(fā)燒友網站提供《異步FIFO結構設計.pdf》資料免費下載
    發(fā)表于 02-06 09:06 ?0次下載

    解析桌面式三工位彈簧壓力試驗機的全面應用

    解析桌面式三工位彈簧壓力試驗機的全面應用
    的頭像 發(fā)表于 01-11 09:08 ?429次閱讀
    <b class='flag-5'>解析</b>桌面式三工位彈簧壓力試驗機的<b class='flag-5'>全面</b>應用

    探索手機側鍵奧秘:手機側鍵手感測試儀全面解析

    探索手機側鍵奧秘:手機側鍵手感測試儀全面解析!|深圳磐石
    的頭像 發(fā)表于 12-19 09:17 ?524次閱讀
    探索手機側鍵奧秘:手機側鍵手感測試儀<b class='flag-5'>全面</b><b class='flag-5'>解析</b>

    談一談FIFO的深度

    最近加的群里面有些萌新在進行討論**FIFO的深度**的時候,覺得 **FIFO的深度計算比較難以理解** 。所
    的頭像 發(fā)表于 11-28 16:19 ?1110次閱讀
    談一談<b class='flag-5'>FIFO</b>的深度

    藍牙4.1新技術全面解析(附藍牙掃盲知識)

    電子發(fā)燒友網站提供《藍牙4.1新技術全面解析(附藍牙掃盲知識).doc》資料免費下載
    發(fā)表于 11-10 16:26 ?1次下載
    藍牙4.1新技術<b class='flag-5'>全面</b><b class='flag-5'>解析</b>(附藍牙掃盲知識)

    FIFO為什么不能正常工作?

    FIFO為什么不能正常工作?復位信號有效長度不夠,接口時序不匹配,可看下面這篇文章。 本文將介紹: 非DFX工程如何確保異步FIFO自帶的set_max_delay生效? DFX工程如何確保異步
    的頭像 發(fā)表于 11-02 09:25 ?985次閱讀
    <b class='flag-5'>FIFO</b>為什么不能正常工作?

    簡述一種fifo讀控制的不合理設計案例

    本文將簡述一種fifo讀控制的不合理設計案例,在此案例中,異常報文將會堵在fifo中,造成頭阻塞。
    的頭像 發(fā)表于 10-30 14:25 ?309次閱讀
    簡述一種<b class='flag-5'>fifo</b>讀控制的不合理設計案例

    請問異步FIFO的溢出操作時怎么樣判斷的?

    請問異步FIFO的溢出操作時怎么樣判斷的? 異步FIFO是數(shù)據傳輸?shù)囊环N常用方式,在一些儲存器和計算機系統(tǒng)中,常常會用到異步FIFO。作為一種FIFO,異步
    的頭像 發(fā)表于 10-18 15:28 ?1403次閱讀

    同步FIFO和異步FIFO的區(qū)別 同步FIFO和異步FIFO各在什么情況下應用

    同步FIFO和異步FIFO的區(qū)別 同步FIFO和異步FIFO各在什么情況下應用? 1. 同步FIFO和異步
    的頭像 發(fā)表于 10-18 15:23 ?1465次閱讀