深入理解FIFO(包含有FIFO深度的解釋)
FIFO:
一、先入先出隊列(FirstInputFirstOutput,F(xiàn)IFO)這是一種傳統(tǒng)的按序執(zhí)行方法,先進入的指令先完成并引退,跟著才執(zhí)行第二條指令。
1.什么是FIFO?
FIFO是英文FirstInFirstOut的縮寫,是一種先進先出的數(shù)據(jù)緩存器,他與普通存儲器的區(qū)別是沒有外部讀寫地址線,這樣使用起來非常簡單,但缺點就是只能順序?qū)懭霐?shù)據(jù),順序的讀出數(shù)據(jù),其數(shù)據(jù)地址由內(nèi)部讀寫指針自動加1完成,不能像普通存儲器那樣可以由地址線決定讀取或?qū)懭肽硞€指定的地址。
2.什么情況下用FIFO?
FIFO一般用于不同時鐘域之間的數(shù)據(jù)傳輸,比如FIFO的一端時AD數(shù)據(jù)采集,另一端時計算機的PCI總線,假設其AD采集的速率為16位100KSPS,那么每秒的數(shù)據(jù)量為100K×16bit=1.6Mbps,而PCI總線的速度為33MHz,總線寬度32bit,其最大傳輸速率為1056Mbps,在兩個不同的時鐘域間就可以采用FIFO來作為數(shù)據(jù)緩沖。另外對于不同寬度的數(shù)據(jù)接口也可以用FIFO,例如單片機位8位數(shù)據(jù)輸出,而DSP可能是16位數(shù)據(jù)輸入,在單片機與DSP連接時就可以使用FIFO來達到數(shù)據(jù)匹配的目的。
3.FIFO的一些重要參數(shù)
FIFO的寬度:也就是英文資料里常看到的THEWIDTH,它只的是FIFO一次讀寫操作的數(shù)據(jù)位,就像MCU有8位和16位,ARM32位等等,F(xiàn)IFO的寬度在單片成品IC中是固定的,也有可選擇的,如果用FPGA自己實現(xiàn)一個FIFO,其數(shù)據(jù)位,也就是寬度是可以自己定義的。
FIFO的深度:THEDEEPTH,它指的是FIFO可以存儲多少個N位的數(shù)據(jù)(如果寬度為N)。如一個8位的FIFO,若深度為8,它可以存儲8個8位的數(shù)據(jù),深度為12,就可以存儲12個8位的數(shù)據(jù),F(xiàn)IFO的深度可大可小,個人認為FIFO深度的計算并無一個固定的公式。在FIFO實際工作中,其數(shù)據(jù)的滿/空標志可以控制數(shù)據(jù)的繼續(xù)寫入或讀出。在一個具體的應用中也不可能由一些參數(shù)算數(shù)精確的所需FIFO深度為多少,這在寫速度大于讀速度的理想狀態(tài)下是可行的,但在實際中用到的FIFO深度往往要大于計算值。一般來說根據(jù)電路的具體情況,在兼顧系統(tǒng)性能和FIFO成本的情況下估算一個大概的寬度和深度就可以了。而對于寫速度慢于讀速度的應用,F(xiàn)IFO的深度要根據(jù)讀出的數(shù)據(jù)結(jié)構(gòu)和讀出數(shù)據(jù)的由那些具體的要求來確定。
滿標志:FIFO已滿或?qū)⒁獫M時由FIFO的狀態(tài)電路送出的一個信號,以阻止FIFO的寫操作繼續(xù)向FIFO中寫數(shù)據(jù)而造成溢出(overflow)。
空標志:FIFO已空或?qū)⒁諘r由FIFO的狀態(tài)電路送出的一個信號,以阻止FIFO的讀操作繼續(xù)從FIFO中讀出數(shù)據(jù)而造成無效數(shù)據(jù)的讀出(underflow)。
讀時鐘:讀操作所遵循的時鐘,在每個時鐘沿來臨時讀數(shù)據(jù)。
寫時鐘:寫操作所遵循的時鐘,在每個時鐘沿來臨時寫數(shù)據(jù)。
讀指針:指向下一個讀出地址。讀完后自動加1。
寫指針:指向下一個要寫入的地址的,寫完自動加1。
讀寫指針其實就是讀寫的地址,只不過這個地址不能任意選擇,而是連續(xù)的。
4.FIFO的分類
根均FIFO工作的時鐘域,可以將FIFO分為同步FIFO和異步FIFO。同步FIFO是指讀時鐘和寫時鐘為同一個時鐘。在時鐘沿來臨時同時發(fā)生讀寫操作。異步FIFO是指讀寫時鐘不一致,讀寫時鐘是互相獨立的。
5.FIFO設計的難點
FIFO設計的難點在于怎樣判斷FIFO的空/滿狀態(tài)。為了保證數(shù)據(jù)正確的寫入或讀出,而不發(fā)生益處或讀空的狀態(tài)出現(xiàn),必須保證FIFO在滿的情況下,不能進行寫操作。在空的狀態(tài)下不能進行讀操作。怎樣判斷FIFO的滿/空就成了FIFO設計的核心問題。由于同步FIFO幾乎很少用到,這里只描述異步FIFO的空/滿標志產(chǎn)生問題。
在用到觸發(fā)器的設計中,不可避免的會遇到亞穩(wěn)態(tài)的問題(關于亞穩(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)錯誤,讀/寫時鐘采樣的地址指針會與真實的值之間不同,這就導致寫入或讀出的地址錯誤。由于考慮延時的作用,空/滿標志的產(chǎn)生并不一定出現(xiàn)在FIFO真的空/滿時才出現(xiàn)??赡蹻IFO還未空/滿時就出現(xiàn)了空/滿標志。這并沒有什么不好,只要保證FIFO不出現(xiàn)overfloworunderflow就OK了。
很多關于FIFO的文章其實討論的都是空/滿標志的不同算法問題。
在VijayA.Nebhrajani的《異步FIFO結(jié)構(gòu)》一文中,作者提出了兩個關于FIFO空/滿標志的算法。
第一個算法:構(gòu)造一個指針寬度為N+1,深度為2^N字節(jié)的FIFO(為便方比較將格雷碼指針轉(zhuǎn)換為二進制指針)。當指針的二進制碼中最高位不一致而其它N位都相等時,F(xiàn)IFO為滿(在CliffordE.Cummings的文章中以格雷碼表示是前兩位均不相同,而后兩位LSB相同為滿,這與換成二進制表示的MSB不同其他相同為滿是一樣的)。當指針完全相等時,F(xiàn)IFO為空。這也許不容易看出,舉個例子說明一下:一個深度為8字節(jié)的FIFO怎樣工作(使用已轉(zhuǎ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”。當然,這就是滿條件?,F(xiàn)在,假設執(zhí)行了8次的讀操作,使得rd_ptr_bin=“1000”,這就是空條件。另外的8次寫操作將使wr_ptr_bin等于“0000”,但rd_ptr_bin仍然等于“1000”,因此FIFO為滿條件。
顯然起始指針無需為“0000”。假設它為“0100”,并且FIFO為空,那么8個字節(jié)會使wr_ptr_bin=“1100”,,rd_ptr_bin仍然為“0100”。這又說明FIFO為滿。
在VijayA.Nebhrajani的這篇《異步FIFO結(jié)構(gòu)》文章中說明了怎樣運用格雷碼來設置空滿的條件,但沒有說清為什么深度為8的FIFO其讀寫指針要用3+1位的格雷碼來實現(xiàn),而3+1位的格雷碼可以表示16位的深度,而真實的FIFO只有8位,這是怎么回事?而這個問題在CliffordE.Cummings的文章中得以解釋。三位格雷碼可表示8位的深度,若在加一位最為MSB,則這一位加其他三位組成的格雷碼并不代表新的地址,也就是說格雷碼的0100表示表示7,而1100仍然表示7,只不過格雷碼在經(jīng)過一個以0位MSB的循環(huán)后進入一個以1為MSB的循環(huán),然后又進入一個以0位MSB的循環(huán),其他的三位碼仍然是格雷碼,但這就帶來一個問題,在0100的循環(huán)完成后,進入1000,他們之間有兩位發(fā)生了變換,而不是1位,所以增加一位MSB的做法使得該碼在兩處:0100~1000,1100~0000有兩位碼元發(fā)生變化,故該碼以不是真正的格雷碼。增加的MSB是為了實現(xiàn)空滿標志的計算。VijayA.Nebhrajani的文章用格雷碼轉(zhuǎn)二進制,再轉(zhuǎn)格雷碼的情況下提出空滿條件,僅過兩次轉(zhuǎn)換,而CliffordE.Cummings的文章中直接在格雷碼條件下得出空滿條件。其實二者是一樣的,只是實現(xiàn)方式不同罷了。
第二種算法:CliffordE.Cummings的文章中提到的STYLE#2。它將FIFO地址分成了4部分,每部分分別用高兩位的MSB00、01、11、10決定FIFO是否為goingfull或goingempty(即將滿或空)。如果寫指針的高兩位MSB小于讀指針的高兩位MSB則FIFO為“幾乎滿”,
若寫指針的高兩位MSB大于讀指針的高兩位MSB則FIFO為“幾乎空”。
在VijayA.Nebhrajani的《異步FIFO結(jié)構(gòu)》第三部分的文章中也提到了一種方法,那就是方向標志與門限。設定了FIFO容量的75%作為上限,設定FIFO容量的25%為下限。當方向標志超過門限便輸出滿/空標志,這與CliffordE.Cummings的文章中提到的STYLE#2可謂是異曲同工。他們都屬于保守的空滿判斷。其實這時輸出空滿標志FIFO并不一定真的空/滿。
說到此,我們已經(jīng)清楚地看到,F(xiàn)IFO設計最關鍵的就是產(chǎn)生空/滿標志的算法的不同產(chǎn)生了不同的FIFO。但無論是精確的空滿還是保守的空滿都是為了保證FIFO工作的可靠。
二、先進先出法(firstin,firstout,F(xiàn)IFO)
先進先出法是指根據(jù)先入庫先發(fā)出的原則,對于發(fā)出的存貨以先入庫存貨的單價計算發(fā)出存貨成本的方法.采用這種方法的具體做法是:先按存貨的期初余額的單價計算發(fā)出的存貨的成本,領發(fā)完畢后,再按第一批入庫的存貨的單價計算,依此從前向后類推,計算發(fā)出存貨和結(jié)存貨的成本.
先進先出法是存貨的計價方法之一。它是根據(jù)先購入的商品先領用或發(fā)出的假定計價的。用先進先出法計算的期末存貨額,比較接近市價。
先進先出法是以先購入的存貨先發(fā)出這樣一種存貨實物流轉(zhuǎn)假設為前提,對發(fā)出存貨進行計價的一種方法。采用這種方法,先購入的存貨成本在后購入的存貨成本之前轉(zhuǎn)出,據(jù)此確定發(fā)出存貨和期末存貨的成本
關鍵詞: FIFO
您可能也感興趣:
今日熱點
為您推薦
隔離險受不少年輕人推崇 不僅看理賠條款還要看免責條款
北京發(fā)布社保對賬單公告 4月起可查詢電子版?zhèn)€人繳費信息
廣東啟動車險市場專項整治行動 保護消費者合法權益
更多
- CEVA Logistics 與 Kodiak Robotics 攜手推出自動駕駛陸運服務
- 合肥將爭創(chuàng)國家科技創(chuàng)新中心 打造極具競爭力的創(chuàng)新企業(yè)集群
- 英飛凌推出新天線調(diào)諧器,讓5G智能手機擁有超高的數(shù)據(jù)傳輸速...
- 中國 AR/VR 行業(yè)趨勢轉(zhuǎn)變,凸顯智能眼鏡對創(chuàng)新 3D 打印處...
- 貿(mào)澤電子2022 Empowering Innovation Together計劃起航 推出關于RISC-V的新播客
- 萊迪思加入OPC基金會
- 互聯(lián)工廠:工業(yè)連接助推工業(yè)4.0
- Qucell選擇Radisys來建設5G小基站
排行
最近更新
- 深入理解FIFO(包含有FIFO深度的解釋)
- RS485詳解
- 一年多了 你們的Apple Watch用的還好嗎?
- 液體比重天平的使用要點
- 【E問E答】SMT貼片加工對膠水的要求是什么?
- 人民體談:冬殘奧會與智能科技的“雙向奔赴”
- 北京:新增本土新冠肺炎病毒感染者8例
- 不舍說再見!冰墩墩雪容融都下班了
- 自強不息!筑造無限可能——北京冬殘奧會中國代表團獎牌全記錄
- 吉林省疫情形勢嚴峻復雜 多地加快進行全員核酸檢測
- 吉林市正增建3家方艙醫(yī)院共1萬張床位
- 他們,給了自己一雙翅膀
- 【中銀宏觀:2月金融數(shù)據(jù)點評】實體經(jīng)濟融資需求下降
- 一圖讀懂丨新冠病毒檢測策略
- 天空:英國房地產(chǎn)老板愿出資維持藍軍運營,有意加入俱樂部競標
- 粉絲代幣公司Socios首席執(zhí)行官兼創(chuàng)始人被指控操縱價格
- 讓美好在春天“發(fā)芽”
- 同飲“東江”水 共植“高潭”綠
- 重理工藥學與生物工程學院開展“花樣女生,魅力無限”女生節(jié)活動
- 好消息!重慶高新區(qū)又一綜合市場即將投入使用
- 幼小共研,雙向銜接
- 合力筑“防護網(wǎng)” 守護群眾財產(chǎn)安全
- 西二鋪鄉(xiāng)盛開櫻桃花
- 中國若是把1.1萬億美國國債全部拋售,會對美國造成什么影響?
- 2月份人民幣貸款增加1.23萬億元 企業(yè)債與專項債發(fā)行同比多增
- 射洪聽聞 | 聽!撂荒耕地里奏響了春耕的交響樂
- 新強聯(lián)擬發(fā)行15億元可轉(zhuǎn)換公司債券獲深交所受理
- 要買就買暴雷可轉(zhuǎn)債
- 深圳全市社區(qū)小區(qū)明起封閉式管理公交地鐵停運在全市范圍內(nèi)開...
- $舒泰神(SZ300204)$ 即將大漲的理由?。?/a>