色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

FIFO設計的難點

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-07-10 09:17 ? 次閱讀

01

FIFO簡介

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

FIFO是隊列機制中最簡單的,每個接口上只有一個FIFO隊列,表面上看FIFO隊列并沒有提供什么QoS保證,甚至很多人認為FIFO嚴格意義上不算做一種隊列技術,實則不然,FIFO是其它隊列的基礎,FIFO也會影響到衡量QoS的關鍵指標:報文的丟棄、延時、抖動。既然只有一個隊列,自然不需要考慮如何對報文進行復雜的流量分類,也不用考慮下一個報文怎么拿、拿多少的問題,即FIFO無需流分類、調度機制,而且因為按順序取報文,FIFO無需對報文重新排序。簡化了這些實現其實也就提高了對報文時延的保證。

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

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

02

FIFO隊列原理簡述

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

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

03

FIFO應用

FIFO一般用于不同時鐘域之間的數據傳輸,比如FIFO的一端是AD數據采集,另一端是計算機的PCI總線,假設其AD采集的速率為16位100K SPS,那么每秒的數據量為100K×16bit=1.6Mbps,而PCI總線的速度為33MHz,總線寬度32bit,其最大傳輸速率為1056Mbps,在兩個不同的時鐘域間就可以采用FIFO來作為數據緩沖。另外對于不同寬度的數據接口也可以用FIFO,例如單片機位8位數據輸出,而DSP可能是16位數據輸入,在單片機與DSP連接時就可以使用FIFO來達到數據匹配的目的。

01

FIFO的寬度:

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

02

FIFO的深度:

THE DEEPTH,它指的是FIFO可以存儲多少個N位的數據(如果寬度為N)。如一個8位的FIFO,若深度為8,它可以存儲8個8位的數據,深度為12 ,就可以存儲12個8位的數據,FIFO的深度可大可小,個人認為FIFO深度的計算并無一個固定的公式。在FIFO實際工作中,其數據的滿/空標志可以控制數據的繼續寫入或讀出。在一個具體的應用中不可能由一些參數精確算出所需的FIFO深度為多少,這在寫速度大于讀速度的理想狀態下是可行的,但在實際中用到的FIFO深度往往要大于計算值。一般來說根據電路的具體情況,在兼顧系統性能和FIFO成本的情況下估算一個大概的寬度和深度就可以了。而對于寫速度慢于讀速度的應用,FIFO的深度要根據讀出的數據結構和讀出數據由那些具體的要求來確定。

03

滿、空標志:

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

04

讀、寫時鐘:

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

05

讀、寫指針

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

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

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

04

FIFO分類

根據FIFO工作的時鐘域,可以將FIFO分為同步FIFO和異步FIFO。同步FIFO是指讀時鐘和寫時鐘為同一個時鐘。在時鐘沿來臨時同時發生讀寫操作。異步FIFO是指讀寫時鐘不一致,讀寫時鐘是互相獨立的。

05

FIFO設計的難點FIFO設計的難點

FIFO設計的難點FIFO設計的難點在于怎樣判斷FIFO的空/滿狀態。

為了保證數據正確的寫入或讀出,而不發生溢出或讀空的狀態出現,必須保證FIFO在滿的情況下,不能進行寫操作。在空的狀態下不能進行讀操作。怎樣判斷FIFO的滿/空就成了FIFO設計的核心問題。由于同步FIFO幾乎很少用到,這里只描述異步FIFO的空/滿標志產生問題。在用到觸發器的設計中,不可避免的會遇到亞穩態的問題(關于亞穩態可查看FPGA中的亞穩態)。在涉及到觸發器的電路中,亞穩態無法徹底消除,只能想辦法將其發生的概率將到最低。其中的一個方法就是使用格雷碼。格雷碼在相鄰的兩個碼元之間只由一位變換(二進制碼在很多情況下是很多碼元在同時變化)。這就會避免計數器與時鐘同步的時候發生亞穩態現象。但是格雷碼有個缺點就是只能定義2^n的深度,而不能像二進制碼那樣隨意的定義FIFO的深度,因為格雷碼必須循環一個2^n,否則就不能保證兩個相鄰碼元之間相差一位的條件,因此也就不是真正的格雷碼了。第二就是使用冗余的觸發器,假設一個觸發器發生亞穩態的概率為P,那么兩個級聯的觸發器發生亞穩態的概率就為P的平方。但這會導致延時的增加。亞穩態的發生會使得FIFO出現錯誤,讀/寫時鐘采樣的地址指針會與真實的值之間不同,這就導致寫入或讀出的地址錯誤。由于考慮延時的作用,空/滿標志的產生并不一定出現在FIFO真的空/滿時才出現。可能FIFO還未空/滿時就出現了空/滿標志。這并沒有什么不好,只要保證FIFO不出現overflow or underflow 就OK了。

很多關于FIFO的文章其實討論的都是空/滿標志的不同算法問題。

在Vijay A. Nebhrajani的《異步FIFO結構》一文中,作者提出了兩個關于FIFO空/滿標志的算法。第一個算法:構造一個指針寬度為N+1,深度為2^N字節的FIFO(為方便比較,將格雷碼指針轉換為二進制指針)。當指針的二進制碼中最高位不一致而其它N位都相等時,FIFO為滿(在Clifford E. Cummings的文章中以格雷碼表示是前兩位均不相同,而后兩位LSB相同為滿,這與換成二進制表示的MSB不同其他相同為滿是一樣的)。當指針完全相等時,FIFO為空。這也許不容易看出。

舉個例子說明一下:

一個深度為8字節的FIFO怎樣工作(使用已轉換為二進制的指針)。FIFO_WIDTH=8,FIFO_DEPTH= 2^N = 8,N = 3,指針寬度為N+1=4。起初rd_ptr_bin和wr_ptr_bin均為“0000”。此時FIFO中寫入8個字節的數據。wr_ptr_bin =“1000”,rd_ptr_bin=“0000”。當然,這就是滿條件。現在,假設執行了8次的讀操作,使得rd_ptr_bin =“1000”,這就是空條件。另外的8次寫操作將使wr_ptr_bin 等于“0000”,但rd_ptr_bin 仍然等于“1000”,因此FIFO為滿條件。顯然起始指針無需為“0000”。假設它為“0100”,并且FIFO為空,那么8個字節會使wr_ptr_bin =“1100”,, rd_ptr_bin 仍然為“0100”。這又說明FIFO為滿。在Vijay A. Nebhrajani的這篇《異步FIFO結構》文章中說明了怎樣運用格雷碼來設置空滿的條件,但沒有說清為什么深度為8的FIFO其讀寫指針要用3+1位的格雷碼來實現,而3+1位的格雷碼可以表示16位的深度,而真實的FIFO只有8位,這是怎么回事?而這個問題在Clifford E. Cummings的文章中得以解釋。三位格雷碼可表示8位的深度,若在加一位最為MSB,則這一位加其他三位組成的格雷碼并不代表新的地址,也就是說格雷碼的0100表示表示7,而1100仍然表示7,只不過格雷碼在經過一個以0位MSB的循環后進入一個以1為MSB的循環,然后又進入一個以0位MSB的循環,其他的三位碼仍然是格雷碼,但這就帶來一個問題,在0100的循環完成后,進入1000,他們之間有兩位發生了變換,而不是1位,所以增加一位MSB的做法使得該碼在兩處:0100~1000,1100~0000有兩位碼元發生變化,故該碼以不是真正的格雷碼。增加的MSB是為了實現空滿標志的計算。Vijay A. Nebhrajani的文章用格雷碼轉二進制,再轉格雷碼的情況下提出空滿條件,僅過兩次轉換,而Clifford E. Cummings的文章中直接在格雷碼條件下得出空滿條件。其實二者是一樣的,只是實現方式不同罷了。

第二種算法:Clifford E. Cummings的文章中提到的STYLE#2。它將FIFO地址分成了4部分,每部分分別用高兩位的MSB 00 、01、 11、 10決定FIFO是否為going full 或going empty (即將滿或空)。如果寫指針的高兩位MSB小于讀指針的高兩位MSB則FIFO為“幾乎滿”,若寫指針的高兩位MSB大于讀指針的高兩位MSB則FIFO為“幾乎空”。在Vijay A. Nebhrajani的《異步FIFO結構》第三部分的文章中也提到了一種方法,那就是方向標志與門限。設定了FIFO容量的75%作為上限,設定FIFO容量的25%為下限。當方向標志超過門限便輸出滿/空標志,這與Clifford E. Cummings的文章中提到的STYLE #2可謂是異曲同工。他們都屬于保守的空滿判斷。其實這時輸出空滿標志FIFO并不一定真的空/滿。以上,我們已經清楚地看到,FIFO設計最關鍵的就是產生空/滿標志的算法的不同產生了不同的FIFO。但無論是精確的空滿還是保守的空滿都是為了保證FIFO工作的可靠。

原文標題:FIFO解析攻略

文章出處:【微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲器
    +關注

    關注

    38

    文章

    7484

    瀏覽量

    163763
  • 數據傳輸
    +關注

    關注

    9

    文章

    1880

    瀏覽量

    64557
  • fifo
    +關注

    關注

    3

    文章

    387

    瀏覽量

    43648
收藏 人收藏

    評論

    相關推薦

    FIFO Generator的Xilinx官方手冊

    FIFO作為FPGA崗位求職過程中最常被問到的基礎知識點,也是項目中最常被使用到的IP,其意義是非常重要的。本文基于對FIFO Generator的Xilinx官方手冊的閱讀與總結,匯總主要知識點
    的頭像 發表于 11-12 10:46 ?337次閱讀
    <b class='flag-5'>FIFO</b> Generator的Xilinx官方手冊

    FIFO的深度應該怎么計算

    FIFO是FPGA/IC設計中經常使用到的模塊,它經常被用在兩個模塊之間進行數據的緩存,以避免數據在傳輸過程中丟失。同時FIFO也經常被用在跨時鐘域處理中。
    的頭像 發表于 10-25 15:20 ?289次閱讀
    <b class='flag-5'>FIFO</b>的深度應該怎么計算

    分享一個嵌入式通用FIFO環形緩沖區實現庫

    開源項目ringbuff ,是一款通用FIFO環形緩沖區實現的開源庫,作者MaJerle,遵循 MIT 開源許可協議。
    的頭像 發表于 10-23 16:20 ?375次閱讀
    分享一個嵌入式通用<b class='flag-5'>FIFO</b>環形緩沖區實現庫

    Efinity FIFO IP仿真問題 -v1

    Efinity目前不支持聯合仿真,只能通過調用源文件仿真。 我們生成一個fifo IP命名為fifo_sim 在Deliverables中保留Testbench的選項。 在IP的生成目錄下會有以下
    的頭像 發表于 10-21 11:41 ?984次閱讀
    Efinity <b class='flag-5'>FIFO</b> IP仿真問題 -v1

    浮動板對板連接器技術難點分析

    浮動板對板連接器在現代電子設備中越來越普遍,然而其設計和應用場景中仍存在多項技術難點。這些難點不僅影響了連接器的性能和可靠性,也對整個產品的設計提出了更高的要求。
    的頭像 發表于 09-20 10:55 ?840次閱讀
    浮動板對板連接器技術<b class='flag-5'>難點</b>分析

    AFE49130超小型集成式AFE和FIFO數據表

    電子發燒友網站提供《AFE49130超小型集成式AFE和FIFO數據表.pdf》資料免費下載
    發表于 07-31 11:18 ?1次下載
    AFE49130超小型集成式AFE和<b class='flag-5'>FIFO</b>數據表

    具有128字節FIFO的TL16C750E UART數據表

    電子發燒友網站提供《具有128字節FIFO的TL16C750E UART數據表.pdf》資料免費下載
    發表于 07-08 09:10 ?0次下載
    具有128字節<b class='flag-5'>FIFO</b>的TL16C750E UART數據表

    具有FIFO的雙異步通信元件TL16C552A數據表

    電子發燒友網站提供《具有FIFO的雙異步通信元件TL16C552A數據表.pdf》資料免費下載
    發表于 06-26 11:28 ?0次下載
    具有<b class='flag-5'>FIFO</b>的雙異步通信元件TL16C552A數據表

    同步FIFO和異步FIFO區別介紹

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

    DMA產生FIFO error interrupt錯誤的原因?

    DMA用于接收采集AD轉化數據,而且AD每間隔50us采集一次,DMA配置成單次模式,并收數長度50次,未啟用FIFO模式,但是當外部中斷非常頻繁時,DMA不知怎么回事,產生了FIFO 錯誤,按道理
    發表于 05-15 06:34

    關于同步FIFO和異步FIFO的基礎知識總結

    FIFO是一種先進先出數據緩存器,它與普通存儲器的區別是沒有外部讀寫地址線,使用起來非常簡單,缺點是只能順序讀寫,而不能隨機讀寫。
    的頭像 發表于 04-09 14:23 ?3222次閱讀
    關于同步<b class='flag-5'>FIFO</b>和異步<b class='flag-5'>FIFO</b>的基礎知識總結

    汽車氛圍燈靜電浪涌的難點

    汽車氛圍燈靜電浪涌的難點
    的頭像 發表于 04-03 08:02 ?865次閱讀
    汽車氛圍燈靜電浪涌的<b class='flag-5'>難點</b>

    無線鼠標的FCC認證難點有哪些?

    無線鼠標的FCC認證是確保該產品在美國市場合規銷售的重要要求。然而,該認證過程可能面臨一些難點和挑戰。下面將對無線鼠標FCC認證的難點進行分析,并介紹其主要困擾。首先,無線鼠標的FCC認證難點之一
    的頭像 發表于 03-04 17:39 ?419次閱讀
    無線鼠標的FCC認證<b class='flag-5'>難點</b>有哪些?

    如何清除SPI通信中的TX_FIFO和RX_FIFO

    你好, 如何清除 SPI通信中的 TX_FIFO 和 RX_FIFO?是否有任何 API 可以清除接收數據緩沖區。
    發表于 02-27 07:16

    異步FIFO結構設計

    電子發燒友網站提供《異步FIFO結構設計.pdf》資料免費下載
    發表于 02-06 09:06 ?0次下載
    主站蜘蛛池模板: 欧美高清videos 360p| 高清大胆欧美videossexo| 2019夜夜| www色小姐| 国产精品一区二区制服丝袜| 国产欧美一区二区精品性色tv | 日本午夜福利无码高清| 秋霞电影网午夜一级鲁丝片| 我不卡影院手机在线观看| 亚洲AV综合99一二三四区| 中文字幕高清在线中文字幕| ccc36色小姐电影| 国产精品久久久久影院色老大 | 翁公吮她的花蒂和奶水| 伊人久久大香线蕉综合色啪| 9420高清免费观看在线大全| 动漫美女无衣| 久久国产综合精品欧美| 欧美另类videosbest| 亚州三级视频| bl(高h)文| 久久精品动漫网一区二区| 日本乱hd高清videos| 一本色道久久综合亚洲精品加 | 亚洲熟女片嫩草影院| 成人免费公开视频| 久久国产免费一区二区三区| 区久久AAA片69亚洲| 一级特黄aa大片欧美| 各种肉黄浪荡故事集| 美国色情三级欧美三级纸匠情挑| 十二月综合缴缴情| 99久酒店在线精品2019| 九九这里有精品| 羞羞答答影院在线| 高h超辣bl文| 秋霞伦理电影在线看| 2021年国产精品久久| 黄子佼81岁父亲现状曝光| 视频在线观看高清免费看| jizz老师|