chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

FIFO設(shè)計的難點

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-07-10 09:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

01

FIFO簡介

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

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

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

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

02

FIFO隊列原理簡述

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

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

03

FIFO應(yīng)用

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

01

FIFO的寬度:

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

02

FIFO的深度:

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

03

滿、空標(biāo)志:

滿標(biāo)志:FIFO已滿或?qū)⒁獫M時由FIFO的狀態(tài)電路送出的一個信號,以阻止FIFO的寫操作繼續(xù)向FIFO中寫數(shù)據(jù)而造成溢出(overflow)??諛?biāo)志:FIFO已空或?qū)⒁諘r由FIFO的狀態(tài)電路送出的一個信號,以阻止FIFO的讀操作繼續(xù)從FIFO中讀出數(shù)據(jù)而造成無效數(shù)據(jù)的讀出(underflow)。

04

讀、寫時鐘:

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

05

讀、寫指針

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

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

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

04

FIFO分類

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

05

FIFO設(shè)計的難點FIFO設(shè)計的難點

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

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

很多關(guān)于FIFO的文章其實討論的都是空/滿標(biāo)志的不同算法問題。

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

舉個例子說明一下:

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

第二種算法: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結(jié)構(gòu)》第三部分的文章中也提到了一種方法,那就是方向標(biāo)志與門限。設(shè)定了FIFO容量的75%作為上限,設(shè)定FIFO容量的25%為下限。當(dāng)方向標(biāo)志超過門限便輸出滿/空標(biāo)志,這與Clifford E. Cummings的文章中提到的STYLE #2可謂是異曲同工。他們都屬于保守的空滿判斷。其實這時輸出空滿標(biāo)志FIFO并不一定真的空/滿。以上,我們已經(jīng)清楚地看到,F(xiàn)IFO設(shè)計最關(guān)鍵的就是產(chǎn)生空/滿標(biāo)志的算法的不同產(chǎn)生了不同的FIFO。但無論是精確的空滿還是保守的空滿都是為了保證FIFO工作的可靠。

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

文章出處:【微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

    關(guān)注

    39

    文章

    7724

    瀏覽量

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

    關(guān)注

    9

    文章

    2181

    瀏覽量

    67388
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    407

    瀏覽量

    45613
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

    FIFO存儲器的種類、IP配置及應(yīng)用

    FIRST IN FIRST OUT (先入先出)。顧名思義,FIFO是一個數(shù)據(jù)具有先進(jìn)先出的存儲器。
    的頭像 發(fā)表于 01-13 15:15 ?176次閱讀
    <b class='flag-5'>FIFO</b>存儲器的種類、IP配置及應(yīng)用

    半導(dǎo)體電鍍的難點分析

    半導(dǎo)體電鍍工藝面臨多重技術(shù)挑戰(zhàn),這些難點源于微觀尺度下的物理化學(xué)效應(yīng)與宏觀工藝控制的相互制約。以下是關(guān)鍵難點的深度剖析: 一、均勻性控制困境 在晶圓級制造中,電流密度分布的自然梯度導(dǎo)致邊緣效應(yīng)顯著
    的頭像 發(fā)表于 10-09 13:30 ?623次閱讀

    求助,關(guān)于串口設(shè)備驅(qū)動fifo問題

    的一幀有300對字節(jié),最少37字節(jié),DMA模式為循環(huán)模式,緩沖buf,自己理解的是DMA的buf就是serial.c中的fifo buf,buf的size設(shè)置為2048; 問題: 1、數(shù)據(jù)接收存在粘包
    發(fā)表于 09-12 08:18

    MQTT物聯(lián)網(wǎng)數(shù)據(jù)解析的難點有哪些?

    MQTT物聯(lián)網(wǎng)數(shù)據(jù)解析的難點主要源于物聯(lián)網(wǎng)場景中設(shè)備的多樣性、數(shù)據(jù)的復(fù)雜性以及系統(tǒng)的高要求,具體可歸納為以下幾個方面。
    的頭像 發(fā)表于 08-05 18:13 ?793次閱讀

    cy7c68013a異步slave fifo模式,外部mcu無法讀寫fifo怎么解決?

    cy7c68013a 異步slave fifo 模式,外部mcu無法讀寫fifo 上位機(jī)發(fā)送bulk數(shù)據(jù),flag標(biāo)志是對的,SLCS也拉低了,是設(shè)置的低有效, 檢測到了flag不為空的標(biāo)志后
    發(fā)表于 06-03 10:49

    智多晶FIFO_Generator IP介紹

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

    國產(chǎn)芯片清洗機(jī)目前遇到的難點是什么

    國產(chǎn)芯片清洗機(jī)目前遇到了一系列難點,這些難點涉及技術(shù)、材料、市場競爭以及標(biāo)準(zhǔn)認(rèn)證等多個方面。以下是對這些難點的詳細(xì)分析: 一、技術(shù)難點 高精度清洗技術(shù) 難題:芯片清洗需要在微觀尺度上實
    的頭像 發(fā)表于 04-18 15:02 ?749次閱讀

    基于FPGA的FIFO實現(xiàn)

    FIFO(First in First out)為先進(jìn)先出隊列,具有存儲功能,可用于不同時鐘域間傳輸數(shù)據(jù)以及不同的數(shù)據(jù)寬度進(jìn)行數(shù)據(jù)匹配。如其名稱,數(shù)據(jù)傳輸為單向,從一側(cè)進(jìn)入,再從另一側(cè)出來,出來的順序和進(jìn)入的順序相同。
    的頭像 發(fā)表于 04-09 09:55 ?1358次閱讀
    基于FPGA的<b class='flag-5'>FIFO</b>實現(xiàn)

    AXI接口FIFO簡介

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

    解鎖TSMaster fifo函數(shù):報文讀取的高效方法

    前言:TSMaster目前有兩種讀取報文的模式:回調(diào)函數(shù)模式和fifo模式。fifo函數(shù)是TSMaster近期新增的函數(shù),本文將重點介紹fifo模塊。關(guān)于回調(diào)函數(shù)的使用方法可以參考幫助模塊的《快速
    的頭像 發(fā)表于 03-14 20:04 ?1068次閱讀
    解鎖TSMaster <b class='flag-5'>fifo</b>函數(shù):報文讀取的高效方法

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

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

    靜力水準(zhǔn)儀在實際操作中有哪些難點

    靜力水準(zhǔn)儀是一種高精度的測量儀器,它能精確地測量兩點之間的高度差異,誤差僅在毫米級別。盡管它非常精確,但在實際操作中還是會遇到一些挑戰(zhàn)。這些難點主要來源于儀器本身、操作過程以及環(huán)境因素。下面我們來看
    的頭像 發(fā)表于 02-11 13:41 ?1069次閱讀
    靜力水準(zhǔn)儀在實際操作中有哪些<b class='flag-5'>難點</b>

    使用SCL編寫FIFO功能塊

    一、 導(dǎo)讀? ? 前幾天一位搞電氣的朋友問S7-1200中如何做個先入先出的功能,說原來用S7-200SMART的時候有填表指令和FIFO指令可以實現(xiàn)該功能,現(xiàn)在S7-1200中找了一圈都沒有
    的頭像 發(fā)表于 02-09 10:27 ?1318次閱讀
    使用SCL編寫<b class='flag-5'>FIFO</b>功能塊

    機(jī)械加工生產(chǎn)管理的難點與MES系統(tǒng)的解決方案

    機(jī)械加工生產(chǎn)管理面臨諸多難點,包括生產(chǎn)計劃與調(diào)度、質(zhì)量控制、物料管理、設(shè)備維護(hù)和人員管理等。萬界星空科技MES系統(tǒng)通過其定制化的功能,能夠有效解決這些難點,提高生產(chǎn)效率、確保產(chǎn)品質(zhì)量、降低生產(chǎn)成本,從而提升企業(yè)的競爭力。
    的頭像 發(fā)表于 02-08 14:15 ?761次閱讀
    機(jī)械加工生產(chǎn)管理的<b class='flag-5'>難點</b>與MES系統(tǒng)的解決方案

    在ADS822加FIFO測試的時候老是卡死,為什么?

    請問下專家:為什么我在ADS822加FIFO測試的時候老是卡死,基本過程是這樣的,我外部提供一個時鐘,分別給ADS822做采樣時鐘與FIFO的寫時鐘,程序開始控制FIFO寫開啟,讀關(guān)閉,然后
    發(fā)表于 02-06 06:32