fifo深度的解釋_第1頁(yè)
fifo深度的解釋_第2頁(yè)
fifo深度的解釋_第3頁(yè)
fifo深度的解釋_第4頁(yè)
fifo深度的解釋_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、深入理解FIFO (包含有FIFO深度的解釋)FIFO:一、先入先出隊(duì)列 (First Input First Output , FIFO) 這是 一種傳統(tǒng)的按序執(zhí)行方法, 先進(jìn)入的指令先完成并引退, 跟著才執(zhí)行 第二條指令。1什么是 FIFOFIFO是英文First In First Out的縮寫(xiě),是一種先進(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è)指定的地址。2什么情況下用 FIFOFIFO一般用于不同

2、時(shí)鐘域之間的數(shù)據(jù)傳輸,比如 FIFO的一 端時(shí)AD數(shù)據(jù)采集,另一端時(shí)計(jì)算機(jī)的PCI總線,假設(shè)其AD采集的速 率為16位100K SPI,那么每秒的數(shù)據(jù)量為100KX 16bit二,而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ù)匹配的目的。3. FIFO的一些重要參數(shù)FIFO的寬度:也就是英文資料里??吹降?THEWIDTH它只 的是FIFO

3、 次讀寫(xiě)操作的數(shù)據(jù)位,就像 MCU有8位和16位,ARMB2 位等等,F(xiàn)IFO的寬度在單片成品IC中是固定的,也有可選擇的,如 果用FPGAI己實(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ù), FIFO的深度可大可小,個(gè)人認(rèn)為FIFO深度的計(jì)算并無(wú)一個(gè)固定的公 式。在FIFO實(shí)際工作中,其數(shù)據(jù)的滿/空標(biāo)志可以控制數(shù)據(jù)的繼續(xù)寫(xiě) 入或讀出。在一個(gè)具體的應(yīng)用中也不可能由一些參數(shù)

4、算數(shù)精確的所需 FIFO 深度為多少,這在寫(xiě)速度大于讀速度的理想狀態(tài)下是可行的, 但在實(shí)際中用到的FIFO深度往往要大于計(jì)算值。一般來(lái)說(shuō)根據(jù)電路 的具體情況,在兼顧系統(tǒng)性能和 FIFO 成本的情況下估算一個(gè)大概的 寬度和深度就可以了。而對(duì)于寫(xiě)速度慢于讀速度的應(yīng)用, FIFO 的深 度要根據(jù)讀出的數(shù)據(jù)結(jié)構(gòu)和讀出數(shù)據(jù)的由那些具體的要求來(lái)確定。滿標(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

5、中讀出數(shù)據(jù)而造成無(wú)效數(shù) 據(jù)的讀出( underflow )。讀時(shí)鐘:讀操作所遵循的時(shí)鐘, 在每個(gè)時(shí)鐘沿來(lái)臨時(shí)讀數(shù)據(jù)。寫(xiě)時(shí)鐘:寫(xiě)操作所遵循的時(shí)鐘, 在每個(gè)時(shí)鐘沿來(lái)臨時(shí)寫(xiě)數(shù)據(jù)。讀指針:指向下一個(gè)讀出地址。讀完后自動(dòng)加 1。 寫(xiě)指針:指向下一個(gè)要寫(xiě)入的地址的,寫(xiě)完自動(dòng)加1。讀寫(xiě)指針其實(shí)就是讀寫(xiě)的地址, 只不過(guò)這個(gè)地址不能任意選 擇,而是連續(xù)的。4. FIFO的分類根均FIFO工作的時(shí)鐘域,可以將 FIFO分為同步FIFO和異 步FIFO。同步FIFO是指讀時(shí)鐘和寫(xiě)時(shí)鐘為同一個(gè)時(shí)鐘。在時(shí)鐘沿來(lái) 臨時(shí)同時(shí)發(fā)生讀寫(xiě)操作。異步 FIFO是指讀寫(xiě)時(shí)鐘不一致,讀寫(xiě)時(shí)鐘 是互相獨(dú)立的。5. FIFO設(shè)計(jì)的難點(diǎn)FI

6、FO 設(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)這里不作介紹,可查看相關(guān)資料) 。在涉及到觸發(fā)器的 電路中,亞穩(wěn)態(tài)無(wú)法徹底消除, 只能想辦法將其發(fā)生的概率將到最低。 其中的一個(gè)方法就是使用格雷碼。 格雷碼在相鄰的兩個(gè)碼元之間只由 一位變換 (二進(jìn)制

7、碼在很多情況下是很多碼元在同時(shí)變化 )。這就會(huì)避 免計(jì)數(shù)器與時(shí)鐘同步的時(shí)候發(fā)生亞穩(wěn)態(tài)現(xiàn)象。 但是格雷碼有個(gè)缺點(diǎn)就是只能定義2An的深度,而不能像二進(jìn)制碼那樣隨意的定義FIFO的深度,因?yàn)楦窭状a必須循環(huán)一個(gè) 25,否則就不能保證兩個(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ò)誤,讀/寫(xiě)時(shí)鐘采樣的地址指針 會(huì)與真實(shí)的值之間不同, 這就導(dǎo)致寫(xiě)入或讀出的地址錯(cuò)誤。 由于考慮 延時(shí)的作用,空 /滿標(biāo)志的產(chǎn)生并不一定

8、出現(xiàn)在 FIFO 真的空/ 滿時(shí)才 出現(xiàn)。可能FIFO還未空/滿時(shí)就出現(xiàn)了空/滿標(biāo)志。這并沒(méi)有什么不 好,只要保證FIFO不出現(xiàn)oveflow or undeflow就OK了。很多關(guān)于 FIFO 的文章其實(shí)討論的都是空 / 滿標(biāo)志的不同算 法問(wèn)題。在Vijay A. Nebhani的異步FIFO結(jié)構(gòu)一文中,作者提出了兩個(gè)關(guān)于FIFO空/滿標(biāo)志的算法。第一個(gè)算法:構(gòu)造一個(gè)指針寬度為 N+1,深度為2AN字節(jié)的 FIFO (為便方比較將格雷碼指針轉(zhuǎn)換為二進(jìn)制指針)。當(dāng)指針的二進(jìn) 制碼中最高位不一致而其它 N位都相等時(shí),F(xiàn)IFO為滿(在Clifford E. Cummi ngs的文章中以格雷碼表示是

9、前兩位均不相同,而后兩位LSB相同為滿,這與換成二進(jìn)制表示的MSB不同其他相同為滿是一樣的)。 當(dāng)指針完全相等時(shí), FIFO 為空。這也許不容易看出,舉個(gè)例子說(shuō)明 一下:一個(gè)深度為 8字節(jié)的 FIFO 怎樣工作(使用已轉(zhuǎn)換為二進(jìn)制的 指針)。FIFO_WIDTH=,8 FIFO_DEPTH二 2AN = 8, N = 3,指針寬度為N+1=4 起初 rd_ptr_bin 和 wr_ptr_bin 均為“ 0000” 此時(shí) FIFO 中 寫(xiě)入 8 個(gè)字節(jié)的數(shù)據(jù)。 wr_ptr_bin =“ 1000”,rd_ptr_bin=“0000”。當(dāng)然,這就是滿條件。現(xiàn)在,假設(shè)執(zhí)行了 8 次的讀操作,使得

10、 rd_ptr_bin =“ 1 000 ”,這就是空條件。另外的 8 次寫(xiě)操作將使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”這又說(shuō)明FIFO為滿。在Vijay A. Nebhani的這篇異步 FIFO結(jié)構(gòu)文章中說(shuō)明了怎樣運(yùn)用格雷碼來(lái)設(shè)置空滿的條件, 但沒(méi)有說(shuō)清為什么深度為 8的FIFO其讀寫(xiě)指針要用3+1位的格雷碼來(lái)實(shí)現(xiàn),而3+1位

11、的格雷 碼可以表示16位的深度,而真實(shí)的FIFO只有8位,這是怎么回事而 這個(gè)問(wèn)題在 Clifford E. Cummings 的文章中得以解釋。三位格雷碼 可表示8位的深度,若在加一位最為MSB則這一位加其他三位組成 的格雷碼并不代表新的地址,也就是說(shuō)格雷碼的 0100 表示表示 7, 而1100仍然表示乙只不過(guò)格雷碼在經(jīng)過(guò)一個(gè)以 0位MSB勺循環(huán)后 進(jìn)入一個(gè)以1為MSB勺循環(huán),然后又進(jìn)入一個(gè)以0位MS啲循環(huán),其 他的三位碼仍然是格雷碼,但這就帶來(lái)一個(gè)問(wèn)題,在 0100的循環(huán)完 成后,進(jìn)入 1000,他們之間有兩位發(fā)生了變換,而不是 1 位,所以 增加一位 MSB的做法使得該碼在兩處:010

12、01000, 11000000有兩 位碼元發(fā)生變化,故該碼以不是真正的格雷碼。增加的MSB是為了實(shí) 現(xiàn)空滿標(biāo)志的計(jì)算。 Vijay A. Nebhrajani 的文章用格雷碼轉(zhuǎn)二進(jìn)制, 再轉(zhuǎn)格雷碼的情況下提出空滿條件,僅過(guò)兩次轉(zhuǎn)換,而 Clifford E.Cummi ngs的文章中直接在格雷碼條件下得出空滿條件。其實(shí)二者是 一樣的,只是實(shí)現(xiàn)方式不同罷了。第二種算法:Clifford E. Cummings的文章中提到的STYLE#2。它將FIFO地址分成了 4部分,每部分分別用高兩位的 MSB 00、01、11、10 決定 FIFO 是否為 going full 或 going empty

13、(即將 滿或空)。如果寫(xiě)指針的高兩位MSBJ、于讀指針的高兩位MS測(cè)FIFO 為“幾乎滿”,若寫(xiě)指針的高兩位MSB大于讀指針的高兩位MSB則FIFO為 “幾乎空”。在Vijay A. Nebhani的異步FIFO結(jié)構(gòu)第三部分的文章中也提到了一種方法,那就是方向標(biāo)志與門(mén)限。設(shè)定了FIFO容量的75%乍為上限,設(shè)定FIFO容量的25%為下限。當(dāng)方向標(biāo)志超過(guò)門(mén) 限便輸出滿 /空標(biāo)志,這與 Clifford E. Cummings 的文章中提到的 STYLE #2 可謂是異曲同工。他們都屬于保守的空滿判斷。其實(shí)這時(shí) 輸出空滿標(biāo)志FIFO并不一定真的空/滿。說(shuō)到此,我們已經(jīng)清楚地看到, FIFO 設(shè)計(jì)最關(guān)鍵的就是產(chǎn)生空/滿標(biāo)志的算法的不同產(chǎn)生了不同的 FIF O。但無(wú)論是精確的空滿 還是保守的空滿都是為了保證 FIFO工作的可靠。二、先進(jìn)先出法 (first in,first out, FIFO)先進(jìn)先出法是指根據(jù)先入庫(kù)先發(fā)出的原則, 對(duì)于發(fā)出的存貨 以先入庫(kù)存貨的單價(jià)計(jì)算發(fā)出存貨成本的方法 . 采用這種方法的具體 做法是:先按存貨的期初余額的單價(jià)計(jì)算發(fā)出的存貨的成

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論