一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

超全面解析FIFO的原理及應(yīng)用

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

First Input First Output的縮寫(xiě),先入先出隊(duì)列,這是一種傳統(tǒng)的按序執(zhí)行方法,先進(jìn)入的指令先完成并引退,跟著才執(zhí)行第二條指令。是一種先進(jìn)先出的數(shù)據(jù)緩存器,他與普通存儲(chǔ)器的區(qū)別是沒(méi)有外部讀寫(xiě)地址線,這樣使用起來(lái)非常簡(jiǎn)單,但缺點(diǎn)就是只能順序?qū)懭霐?shù)據(jù),順序的讀出數(shù)據(jù),其數(shù)據(jù)地址由內(nèi)部讀寫(xiě)指針自動(dòng)加1完成,不能像普通存儲(chǔ)器那樣可以由地址線決定讀取或?qū)懭肽硞€(gè)指定的地址。

FIFO是隊(duì)列機(jī)制中最簡(jiǎn)單的,每個(gè)接口上只有一個(gè)FIFO隊(duì)列,表面上看FIFO隊(duì)列并沒(méi)有提供什么QoS保證,甚至很多人認(rèn)為FIFO嚴(yán)格意義上不算做一種隊(duì)列技術(shù),實(shí)則不然,F(xiàn)IFO是其它隊(duì)列的基礎(chǔ),F(xiàn)IFO也會(huì)影響到衡量QoS的關(guān)鍵指標(biāo):

報(bào)文的丟棄、延時(shí)、抖動(dòng)。既然只有一個(gè)隊(duì)列,自然不需要考慮如何對(duì)報(bào)文進(jìn)行復(fù)雜的流量分類,也不用考慮下一個(gè)報(bào)文怎么拿、拿多少的問(wèn)題,即FIFO無(wú)需流分類、調(diào)度機(jī)制,而且因?yàn)榘错樞蛉?bào)文,F(xiàn)IFO無(wú)需對(duì)報(bào)文重新排序。簡(jiǎn)化了這些實(shí)現(xiàn)其實(shí)也就提高了對(duì)報(bào)文時(shí)延的保證。

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

Tail Drop機(jī)制簡(jiǎn)單的說(shuō)就是如果該隊(duì)列如果已經(jīng)滿了,那么后續(xù)進(jìn)入的報(bào)文被丟棄,而沒(méi)有什么機(jī)制來(lái)保證后續(xù)的報(bào)文可以擠掉已經(jīng)在隊(duì)列內(nèi)的報(bào)文。

FIFO隊(duì)列原理簡(jiǎn)述

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

FIFO隊(duì)列具有處理簡(jiǎn)單,開(kāi)銷小的優(yōu)點(diǎn)。但FIFO不區(qū)分報(bào)文類型,采用盡力而為的轉(zhuǎn)發(fā)模式,使對(duì)時(shí)間敏感的實(shí)時(shí)應(yīng)用(如VoIP)的延遲得不到保證,關(guān)鍵業(yè)務(wù)的帶寬也不能得到保證。

FIFO應(yīng)用

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

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

FIFO的寬度:

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

FIFO的深度:

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

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

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

滿、空標(biāo)志:

滿標(biāo)志:FIFO已滿或?qū)⒁獫M時(shí)由FIFO的狀態(tài)電路送出的一個(gè)信號(hào),以阻止FIFO的寫(xiě)操作繼續(xù)向FIFO中寫(xiě)數(shù)據(jù)而造成溢出(overflow)。

空標(biāo)志:FIFO已空或?qū)⒁諘r(shí)由FIFO的狀態(tài)電路送出的一個(gè)信號(hào),以阻止FIFO的讀操作繼續(xù)從FIFO中讀出數(shù)據(jù)而造成無(wú)效數(shù)據(jù)的讀出(underflow)。

讀、寫(xiě)時(shí)鐘:

讀時(shí)鐘:讀操作所遵循的時(shí)鐘,在每個(gè)時(shí)鐘沿來(lái)臨時(shí)讀數(shù)據(jù)。

寫(xiě)時(shí)鐘:寫(xiě)操作所遵循的時(shí)鐘,在每個(gè)時(shí)鐘沿來(lái)臨時(shí)寫(xiě)數(shù)據(jù)。

讀、寫(xiě)指針

讀指針:指向下一個(gè)讀出地址。讀完后自動(dòng)加1。

寫(xiě)指針:指向下一個(gè)要寫(xiě)入的地址的,寫(xiě)完自動(dòng)加1。

讀寫(xiě)指針其實(shí)就是讀寫(xiě)的地址,只不過(guò)這個(gè)地址不能任意選擇,而是連續(xù)的。

FIFO分類

根據(jù)FIFO工作的時(shí)鐘域,可以將FIFO分為同步FIFO和異步FIFO。

同步FIFO是指讀時(shí)鐘和寫(xiě)時(shí)鐘為同一個(gè)時(shí)鐘。在時(shí)鐘沿來(lái)臨時(shí)同時(shí)發(fā)生讀寫(xiě)操作。

異步FIFO是指讀寫(xiě)時(shí)鐘不一致,讀寫(xiě)時(shí)鐘是互相獨(dú)立的。

FIFO設(shè)計(jì)的難點(diǎn)

FIFO設(shè)計(jì)的難點(diǎn)FIFO設(shè)計(jì)的難點(diǎn)在于怎樣判斷FIFO的空/滿狀態(tài)。

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

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

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

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

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

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

編輯:jq

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

    關(guān)注

    6059

    文章

    44824

    瀏覽量

    644962
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7615

    瀏覽量

    165985
  • 數(shù)據(jù)傳輸
    +關(guān)注

    關(guān)注

    9

    文章

    1991

    瀏覽量

    65468
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    397

    瀏覽量

    44506
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    2029

    瀏覽量

    61773

原文標(biāo)題:FIFO解析攻略

文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    電磁兼容與雷達(dá)隱身技術(shù)測(cè)試系統(tǒng)平臺(tái)全面解析

    電磁兼容與雷達(dá)隱身技術(shù)測(cè)試系統(tǒng)平臺(tái)全面解析
    的頭像 發(fā)表于 04-28 17:10 ?88次閱讀
    電磁兼容與雷達(dá)隱身技術(shù)測(cè)試系統(tǒng)平臺(tái)<b class='flag-5'>全面</b><b class='flag-5'>解析</b>

    電磁環(huán)境動(dòng)態(tài)監(jiān)測(cè)與分析平臺(tái)軟件全面解析

    電磁環(huán)境動(dòng)態(tài)監(jiān)測(cè)與分析平臺(tái)軟件全面解析
    的頭像 發(fā)表于 04-28 16:28 ?108次閱讀
    電磁環(huán)境動(dòng)態(tài)監(jiān)測(cè)與分析平臺(tái)軟件<b class='flag-5'>全面</b><b class='flag-5'>解析</b>

    電磁脈沖防護(hù)系統(tǒng)平臺(tái)全面解析

    電磁脈沖防護(hù)系統(tǒng)平臺(tái)全面解析
    的頭像 發(fā)表于 04-27 16:57 ?98次閱讀
    電磁脈沖防護(hù)系統(tǒng)平臺(tái)<b class='flag-5'>全面</b><b class='flag-5'>解析</b>

    別再傻傻分不清!USB和TYPE-C的全面解析

    別再傻傻分不清!USB和TYPE-C的全面解析
    的頭像 發(fā)表于 04-26 15:51 ?1256次閱讀

    智多晶FIFO_Generator IP介紹

    FIFO_Generator是智多晶設(shè)計(jì)的一款通用型FIFO IP。當(dāng)前發(fā)布的FIFO_Generator IP是2.0版本,相比之前的1.1版本主要新增了非等比輸入輸出數(shù)據(jù)位寬支持和異步FI
    的頭像 發(fā)表于 04-25 17:24 ?763次閱讀
    智多晶<b class='flag-5'>FIFO</b>_Generator IP介紹

    AXI接口FIFO簡(jiǎn)介

    AXI接口FIFO是從Native接口FIFO派生而來(lái)的。AXI內(nèi)存映射接口提供了三種樣式:AXI4、AXI3和AXI4-Lite。除了Native接口FIFO支持的應(yīng)用外,AXI FIFO
    的頭像 發(fā)表于 03-17 10:31 ?685次閱讀
    AXI接口<b class='flag-5'>FIFO</b>簡(jiǎn)介

    SDRAM控制器的設(shè)計(jì)——Sdram_Control.v代碼解析(異步FIFO讀寫(xiě)模塊、讀寫(xiě)SDRAM過(guò)程)

    前言 SDRAM控制器里面包含5個(gè)主要的模塊,分別是PLL模塊,異步FIFO 寫(xiě)模塊,異步FIFO讀模塊,SDRAM接口控制模塊,SDRAM指令執(zhí)行模塊。 其中異步FIFO模塊解讀
    的頭像 發(fā)表于 03-04 10:49 ?1190次閱讀
    SDRAM控制器的設(shè)計(jì)——Sdram_Control.v代碼<b class='flag-5'>解析</b>(異步<b class='flag-5'>FIFO</b>讀寫(xiě)模塊、讀寫(xiě)SDRAM過(guò)程)

    FIFO IP核的使用教程

    在數(shù)字設(shè)計(jì)中,利用FIFO進(jìn)行數(shù)據(jù)處理是非常普遍的應(yīng)用,例如,實(shí)現(xiàn)時(shí)鐘域交叉、低延時(shí)存儲(chǔ)器緩存、總線位寬調(diào)整等。下圖給出了FIFO生成器支持的一種可能配置。
    的頭像 發(fā)表于 01-03 09:36 ?2438次閱讀
    <b class='flag-5'>FIFO</b> IP核的使用教程

    FIFO Generator的Xilinx官方手冊(cè)

    FIFO作為FPGA崗位求職過(guò)程中最常被問(wèn)到的基礎(chǔ)知識(shí)點(diǎn),也是項(xiàng)目中最常被使用到的IP,其意義是非常重要的。本文基于對(duì)FIFO Generator的Xilinx官方手冊(cè)的閱讀與總結(jié),匯總主要知識(shí)點(diǎn)
    的頭像 發(fā)表于 11-12 10:46 ?1372次閱讀
    <b class='flag-5'>FIFO</b> Generator的Xilinx官方手冊(cè)

    FIFO的深度應(yīng)該怎么計(jì)算

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

    Efinity FIFO IP仿真問(wèn)題 -v1

    Efinity目前不支持聯(lián)合仿真,只能通過(guò)調(diào)用源文件仿真。 我們生成一個(gè)fifo IP命名為fifo_sim 在Deliverables中保留Testbench的選項(xiàng)。 在IP的生成目錄下會(huì)有以下
    的頭像 發(fā)表于 10-21 11:41 ?1391次閱讀
    Efinity <b class='flag-5'>FIFO</b> IP仿真問(wèn)題 -v1

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

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

    驅(qū)動(dòng)LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動(dòng)檢測(cè)與數(shù)據(jù)采集(8)----中斷獲取FIFO數(shù)據(jù)并應(yīng)用MotionFX庫(kù)解析空間坐標(biāo)

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

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

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

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

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