深入理解FIFO(包含有FIFO深度的解釋)
FIFO:
一、先入先出隊(duì)列(First Input First Output,FIFO)這是一種傳統(tǒng)的按序執(zhí)行方法,先進(jìn)入的指令先完成并引退,跟著才執(zhí)行第二條指令。
1.什么是FIFO?
FIFO是英文First In First Out 的縮寫,是一種先進(jìn)先出的數(shù)據(jù)緩存器,他與普通存儲(chǔ)器的區(qū)別是沒有外部讀寫地址線,這樣使用起來非常簡(jiǎn)單,但缺點(diǎn)就是只能順序?qū)懭霐?shù)據(jù),順序的讀出數(shù)據(jù),其數(shù)據(jù)地址由內(nèi)部讀寫指針自動(dòng)加1完成,不能像普通存儲(chǔ)器那樣可以由地址線決定讀取或?qū)懭肽硞€(gè)指定的地址。
2.什么情況下用FIFO?
FIFO一般用于不同時(shí)鐘域之間的數(shù)據(jù)傳輸,比如FIFO的一端時(shí)AD數(shù)據(jù)采集,另一端時(shí)計(jì)算機(jī)的PCI總線,假設(shè)其AD采集的速率為16位 100K SPS,那么每秒的數(shù)據(jù)量為100K×16bit=1.6Mbps,而PCI總線的速度為33MHz,總線寬度32bit,其最大傳輸速率為1056Mbps,在兩個(gè)不同的時(shí)鐘域間就可以采用FIFO來作為數(shù)據(jù)緩沖。另外對(duì)于不同寬度的數(shù)據(jù)接口也可以用FIFO,例如單片機(jī)位8位數(shù)據(jù)輸出,而DSP可能是16位數(shù)據(jù)輸入,在單片機(jī)與DSP連接時(shí)就可以使用FIFO來達(dá)到數(shù)據(jù)匹配的目的。
3.FIFO的一些重要參數(shù)
FIFO的寬度:也就是英文資料里常看到的THE WIDTH,它只的是FIFO一次讀寫操作的數(shù)據(jù)位,就像MCU有8位和16位,ARM 32位等等,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ù)寫入或讀出。在一個(gè)具體的應(yīng)用中也不可能由一些參數(shù)算數(shù)精確的所需FIFO深度為多少,這在寫速度大于讀速度的理想狀態(tài)下是可行的,但在實(shí)際中用到的FIFO深度往往要大于計(jì)算值。一般來說根據(jù)電路的具體情況,在兼顧系統(tǒng)性能和FIFO成本的情況下估算一個(gè)大概的寬度和深度就可以了。而對(duì)于寫速度慢于讀速度的應(yīng)用,F(xiàn)IFO的深度要根據(jù)讀出的數(shù)據(jù)結(jié)構(gòu)和讀出數(shù)據(jù)的由那些具體的要求來確定。
滿標(biāo)志:FIFO已滿或?qū)⒁獫M時(shí)由FIFO的狀態(tài)電路送出的一個(gè)信號(hào),以阻止FIFO的寫操作繼續(xù)向FIFO中寫數(shù)據(jù)而造成溢出(overflow)。
空標(biāo)志:FIFO已空或?qū)⒁諘r(shí)由FIFO的狀態(tài)電路送出的一個(gè)信號(hào),以阻止FIFO的讀操作繼續(xù)從FIFO中讀出數(shù)據(jù)而造成無(wú)效數(shù)據(jù)的讀出(underflow)。
讀時(shí)鐘:讀操作所遵循的時(shí)鐘,在每個(gè)時(shí)鐘沿來臨時(shí)讀數(shù)據(jù)。
寫時(shí)鐘:寫操作所遵循的時(shí)鐘,在每個(gè)時(shí)鐘沿來臨時(shí)寫數(shù)據(jù)。
讀指針:指向下一個(gè)讀出地址。讀完后自動(dòng)加1。
寫指針:指向下一個(gè)要寫入的地址的,寫完自動(dòng)加1。
讀寫指針其實(shí)就是讀寫的地址,只不過這個(gè)地址不能任意選擇,而是連續(xù)的。
4.FIFO的分類
根均FIFO工作的時(shí)鐘域,可以將FIFO分為同步FIFO和異步FIFO。同步FIFO是指讀時(shí)鐘和寫時(shí)鐘為同一個(gè)時(shí)鐘。在時(shí)鐘沿來臨時(shí)同時(shí)發(fā)生讀寫操作。異步FIFO是指讀寫時(shí)鐘不一致,讀寫時(shí)鐘是互相獨(dú)立的。
5.FIFO設(shè)計(jì)的難點(diǎn)
FIFO設(shè)計(jì)的難點(diǎn)在于怎樣判斷FIFO的空/滿狀態(tài)。為了保證數(shù)據(jù)正確的寫入或讀出,而不發(fā)生益處或讀空的狀態(tài)出現(xiàn),必須保證FIFO在滿的情況下,不能進(jìn)行寫操作。在空的狀態(tài)下不能進(jìn)行讀操作。怎樣判斷FIFO的滿/空就成了FIFO設(shè)計(jì)的核心問題。由于同步FIFO幾乎很少用到,這里只描述異步FIFO的空/滿標(biāo)志產(chǎn)生問題。
在用到觸發(fā)器的設(shè)計(jì)中,不可避免的會(huì)遇到亞穩(wěn)態(tài)的問題(關(guān)于亞穩(wěn)態(tài)這里不作介紹,可查看相關(guān)資料)。在涉及到觸發(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è)及聯(lián)的觸發(fā)器發(fā)生亞穩(wěn)態(tài)的概率就為P的平方。但這回導(dǎo)致延時(shí)的增加。亞穩(wěn)態(tài)的發(fā)生會(huì)使得FIFO出現(xiàn)錯(cuò)誤,讀/寫時(shí)鐘采樣的地址指針會(huì)與真實(shí)的值之間不同,這就導(dǎo)致寫入或讀出的地址錯(cuò)誤。由于考慮延時(shí)的作用,空/滿標(biāo)志的產(chǎn)生并不一定出現(xiàn)在FIFO真的空/滿時(shí)才出現(xiàn)??赡蹻IFO還未空/滿時(shí)就出現(xiàn)了空/滿標(biāo)志。這并沒有什么不好,只要保證FIFO不出現(xiàn)overflow or underflow 就OK了。
很多關(guān)于FIFO的文章其實(shí)討論的都是空/滿標(biāo)志的不同算法問題。
在Vijay A. Nebhrajani的《異步FIFO結(jié)構(gòu)》一文中,作者提出了兩個(gè)關(guān)于FIFO空/滿標(biāo)志的算法。
第一個(gè)算法:構(gòu)造一個(gè)指針寬度為N+1,深度為2^N字節(jié)的FIFO(為便方比較將格雷碼指針轉(zhuǎn)換為二進(jìn)制指針)。當(dāng)指針的二進(jìn)制碼中最高位不一致而其它N位都相等時(shí),F(xiàn)IFO為滿(在Clifford E. Cummings的文章中以格雷碼表示是前兩位均不相同,而后兩位LSB相同為滿,這與換成二進(jìn)制表示的MSB不同其他相同為滿是一樣的)。當(dāng)指針完全相等時(shí),F(xiàn)IFO為空。這也許不容易看出,舉個(gè)例子說明一下:一個(gè)深度為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”。此時(shí)FIFO中寫入8個(gè)字節(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為滿條件。
顯然起始指針無(wú)需為“0000”。假設(shè)它為“0100”,并且FIFO為空,那么8個(gè)字節(jié)會(huì)使wr_ptr_bin =“1100”,, rd_ptr_bin 仍然為“0100”。這又說明FIFO為滿。
在Vijay A. Nebhrajani的這篇《異步FIFO結(jié)構(gòu)》文章中說明了怎樣運(yùn)用格雷碼來設(shè)置空滿的條件,但沒有說清為什么深度為8的FIFO其讀寫指針要用3+1位的格雷碼來實(shí)現(xiàn),而3+1位的格雷碼可以表示16位的深度,而真實(shí)的FIFO只有8位,這是怎么回事?而這個(gè)問題在Clifford E. Cummings的文章中得以解釋。三位格雷碼可表示8位的深度,若在加一位最為MSB,則這一位加其他三位組成的格雷碼并不代表新的地址,也就是說格雷碼的0100表示表示7,而1100仍然表示7,只不過格雷碼在經(jīng)過一個(gè)以0位MSB的循環(huán)后進(jìn)入一個(gè)以1為MSB的循環(huán),然后又進(jìn)入一個(gè)以0位MSB的循環(huán),其他的三位碼仍然是格雷碼,但這就帶來一個(gè)問題,在0100的循環(huán)完成后,進(jìn)入1000,他們之間有兩位發(fā)生了變換,而不是1位,所以增加一位MSB的做法使得該碼在兩處:0100~1000,1100~0000有兩位碼元發(fā)生變化,故該碼以不是真正的格雷碼。增加的MSB是為了實(shí)現(xiàn)空滿標(biāo)志的計(jì)算。Vijay A. Nebhrajani的文章用格雷碼轉(zhuǎn)二進(jìn)制,再轉(zhuǎn)格雷碼的情況下提出空滿條件,僅過兩次轉(zhuǎn)換,而Clifford E. Cummings的文章中直接在格雷碼條件下得出空滿條件。其實(shí)二者是一樣的,只是實(shí)現(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可謂是異曲同工。他們都屬于保守的空滿判斷。其實(shí)這時(shí)輸出空滿標(biāo)志FIFO并不一定真的空/滿。
說到此,我們已經(jīng)清楚地看到,F(xiàn)IFO設(shè)計(jì)最關(guān)鍵的就是產(chǎn)生空/滿標(biāo)志的算法的不同產(chǎn)生了不同的FIFO。但無(wú)論是精確的空滿還是保守的空滿都是為了保證FIFO工作的可靠。
二、先進(jìn)先出法 (first in,first out ,F(xiàn)IFO)
先進(jìn)先出法是指根據(jù)先入庫(kù)先發(fā)出的原則,對(duì)于發(fā)出的存貨以先入庫(kù)存貨的單價(jià)計(jì)算發(fā)出存貨成本的方法.采用這種方法的具體做法是:先按存貨的期初余額的單價(jià)計(jì)算發(fā)出的存貨的成本,領(lǐng)發(fā)完畢后,再按第一批入庫(kù)的存貨的單價(jià)計(jì)算,依此從前向后類推,計(jì)算發(fā)出存貨和結(jié)存貨的成本.
先進(jìn)先出法是存貨的計(jì)價(jià)方法之一。它是根據(jù)先購(gòu)入的商品先領(lǐng)用或發(fā)出的假定計(jì)價(jià)的。用先進(jìn)先出法計(jì)算的期末存貨額,比較接近市價(jià)。
先進(jìn)先出法是以先購(gòu)入的存貨先發(fā)出這樣一種存貨實(shí)物流轉(zhuǎn)假設(shè)為前提,對(duì)發(fā)出存貨進(jìn)行計(jì)價(jià)的一種方法。采用這種方法,先購(gòu)入的存貨成本在后購(gòu)入的存貨成本之前轉(zhuǎn)出,據(jù)此確定發(fā)出存貨和期末存貨的成本
關(guān)鍵詞: FIFO
您可能也感興趣:
今日熱點(diǎn)
為您推薦
保險(xiǎn)公司隔離險(xiǎn)迅速出圈 過度營(yíng)銷引來監(jiān)管出手
保險(xiǎn)業(yè)去年原保費(fèi)收入微降0.79% 健康險(xiǎn)業(yè)務(wù)增長(zhǎng)3.36%
更多
- 臺(tái)州科技興市步伐更有力 創(chuàng)新鏈產(chǎn)業(yè)鏈深度融合
- 長(zhǎng)三角區(qū)域協(xié)同創(chuàng)新指數(shù)年均增速達(dá)9.54% 成果共用指標(biāo)增幅最大
- 大興機(jī)場(chǎng)臨空區(qū)設(shè)立國(guó)際創(chuàng)新中心 助力外資企業(yè)順利“走進(jìn)來”
- 湖南發(fā)布“創(chuàng)新十條” 幫助企業(yè)紓困增效、激發(fā)創(chuàng)新活力
- 科技部和浙江發(fā)布《創(chuàng)新行動(dòng)方案》 構(gòu)建高標(biāo)準(zhǔn)技術(shù)要素市場(chǎng)...
- 蕪湖釋放創(chuàng)新“N次方”效應(yīng) 數(shù)字賦能驅(qū)動(dòng)產(chǎn)業(yè)升級(jí)
- 重慶:激發(fā)人才創(chuàng)新活力,到2025年創(chuàng)新要素活躍度顯著增強(qiáng)
- 西寧加快知識(shí)產(chǎn)權(quán)強(qiáng)市建設(shè)步伐 去年兌現(xiàn)資助資金200萬(wàn)元
更多
- “德清高新板”掛牌企業(yè)已達(dá)58家 有11家企業(yè)獲得融資超4億元
- 去年重慶重大項(xiàng)目完成投資4093億元 城市更新提質(zhì)增效
- 去年深圳設(shè)立外商投資企業(yè)近6000個(gè) 實(shí)際使用外資超100億美元
- 我國(guó)境外投資綜合服務(wù)不斷優(yōu)化 投資監(jiān)管和風(fēng)險(xiǎn)防控體系逐步完善
- 盤錦市實(shí)際利用外資取得重大進(jìn)展 加強(qiáng)對(duì)外資項(xiàng)目的跟蹤服務(wù)
- 重慶去年非金融類對(duì)外投資增長(zhǎng)43% 優(yōu)勢(shì)產(chǎn)業(yè)增資近億美元
- 廣西將實(shí)施制造業(yè)招商行動(dòng) 扎實(shí)推進(jìn)招才引智
- 廣西扎實(shí)推進(jìn)招商引資工作 去年新簽約項(xiàng)目投資額1.1萬(wàn)億元
排行
- 西藏發(fā)布“十四五”科技創(chuàng)新規(guī)劃 強(qiáng)化重點(diǎn)領(lǐng)域科技攻關(guān)
- 全球5G發(fā)展步伐都在加速
- 全球首次發(fā)現(xiàn)三維翼龍胚胎
- 空間站菌株對(duì)宇航員健康存在影響
- 我國(guó)氣象現(xiàn)代化整體水平邁入世界先進(jìn)行列
- 這一年,科技待解的謎題一籮筐
- 北斗系統(tǒng)正式邁入全球時(shí)代
- 國(guó)產(chǎn)C919大飛機(jī)突破100余項(xiàng)關(guān)鍵技術(shù)
- 北京軌道交通推出電子定期票
- 仿真機(jī)器人現(xiàn)已“進(jìn)軍”考古界
最近更新
- 深入理解FIFO(包含有FIFO深度的解釋)
- RS485詳解
- 一年多了 你們的Apple Watch用的還好嗎?
- 天津自貿(mào)區(qū)金融改革創(chuàng)新穩(wěn)步推進(jìn) 跨境投融資渠道有效拓寬
- 上海浦東加速生物醫(yī)藥產(chǎn)業(yè)布局 做強(qiáng)創(chuàng)新藥的強(qiáng)勁引擎
- UET專業(yè)評(píng)測(cè)出爐:A.O.史密斯櫥下冷熱即飲凈水機(jī)
- 國(guó)泰君安:嚴(yán)禁集團(tuán)員工以任何形式參與虛擬貨幣“挖礦”活動(dòng)
- 陜西:擴(kuò)大有效投資,確保一季度重點(diǎn)項(xiàng)目開工率達(dá)40%
- 天津重新修訂公用公房維修范圍 增加避雷設(shè)施等項(xiàng)目
- 華東醫(yī)藥醫(yī)美業(yè)務(wù)再出手,頻繁布局回報(bào)幾何?
- 明星買房陷“跳單”風(fēng)波:如何認(rèn)定是關(guān)鍵,交易暗藏風(fēng)險(xiǎn)
- 喜茶被爆裁員30%?回應(yīng):不存在所謂大裁員
- 北京:未成年子女?dāng)?shù)量較多的家庭申請(qǐng)公租房可優(yōu)先配租
- 抱誠(chéng)守真 勇立跨境品牌新潮頭
- 慢霧:AToken錢包疑似遭受攻擊 用戶反饋錢包中資產(chǎn)被盜
- 加拿大證券交易所運(yùn)營(yíng)商TMX擬推出首個(gè)加密貨幣期貨產(chǎn)品
- 騰訊幻核攜手榮寶齋將于今日15時(shí)發(fā)行“齊白石畫作數(shù)字藏品”
- 1月新疆油田生產(chǎn)原油120.01萬(wàn)噸 為完成全年產(chǎn)量任務(wù)開好頭
- B站向猝死員工家屬致歉:不僅是公司重大損失,也為公司敲響警鐘
- 近地旅游興盛 年輕旅行者開始挖掘旅行“深度”
- 春節(jié)消費(fèi)市場(chǎng)四大轉(zhuǎn)變凸顯消費(fèi)恢復(fù)韌性
- 央行:保障性租賃住房有關(guān)貸款不納入房地產(chǎn)貸款集中度管理
- 商務(wù)部回應(yīng)美將33家中國(guó)實(shí)體列入出口管制清單
- 優(yōu)愛騰芒“春節(jié)檔”:備貨齊全,但年味不濃
- 教出一個(gè)谷愛凌,有多難?
- 裁員30%、有部門被全裁?喜茶回應(yīng):不存在大裁員的情況
- 央行:加大對(duì)保障性租賃住房發(fā)展的支持力度
- 國(guó)家將視情啟動(dòng)豬肉儲(chǔ)備收儲(chǔ)工作
- 豬糧比價(jià)下跌觸發(fā)二級(jí)預(yù)警 豬肉儲(chǔ)備收儲(chǔ)或啟動(dòng)
- 金融標(biāo)準(zhǔn)化“十四五”發(fā)展規(guī)劃發(fā)布
今日要聞
- 深入理解FIFO(包含有FIFO深度的解釋)
- RS485詳解
- 一年多了 你們的Apple Watch用的還好嗎?
- 天津自貿(mào)區(qū)金融改革創(chuàng)新穩(wěn)步推進(jìn) 跨境投融資渠道有效拓寬
- 國(guó)泰君安:嚴(yán)禁集團(tuán)員工以任何形式參與虛擬貨幣“挖礦”活動(dòng)
- 華東醫(yī)藥醫(yī)美業(yè)務(wù)再出手,頻繁布局回報(bào)幾何?
- 明星買房陷“跳單”風(fēng)波:如何認(rèn)定是關(guān)鍵,交易暗藏風(fēng)險(xiǎn)
- 喜茶被爆裁員30%?回應(yīng):不存在所謂大裁員
- 北京:未成年子女?dāng)?shù)量較多的家庭申請(qǐng)公租房可優(yōu)先配租
- 慢霧:AToken錢包疑似遭受攻擊 用戶反饋錢包中資產(chǎn)被盜