隨著數(shù)字電視技術(shù)的進(jìn)一步成熟,在視頻服務(wù)器方面,,利用支持軟件豐富,、運(yùn)算速度不斷提高、具有較高性能價(jià)格比的微機(jī)來代替昂貴的專用設(shè)備實(shí)現(xiàn)數(shù)字視頻碼流的復(fù)用具有一定的實(shí)際意義,,但是一般的桌面操作系統(tǒng)定時(shí)不夠精確,、處理大量并發(fā)任務(wù)效率不高以及突發(fā)傳送等問題影響了復(fù)用后碼流的質(zhì)量,,為了保證復(fù)用后的碼流可以均勻平滑地傳送到調(diào)制器,還考慮到微機(jī)的工作效率,,就需要用FIFO來進(jìn)行碼流的緩沖,。如果FIFO的容量足夠大,微機(jī)就可以通過DMA方式一次發(fā)送大量的數(shù)據(jù),,最后再經(jīng)過FIFO的緩沖,,按照預(yù)設(shè)頻率均勻送出。
在其它許多實(shí)際應(yīng)用中,,也會(huì)利用到FIFO來完成數(shù)據(jù)流的緩沖,,消除突發(fā)傳送帶來的數(shù)據(jù)抖動(dòng),達(dá)到平滑輸出的效果,。FIFO的容量和速度直接影響到緩沖的效果,但是目前大容量FIFO價(jià)格昂貴,,這就影響到了FIFO的進(jìn)一步實(shí)際應(yīng)用,。本文介紹了一種利用外部SRAM和CPLD構(gòu)成的廉價(jià)、高速,、大容量先進(jìn)先出緩沖器FIFO的設(shè)計(jì)方法,。
一、系統(tǒng)的設(shè)計(jì)思路
為了用外部SRAM來實(shí)現(xiàn)FIFO,,要解決以下問題:
區(qū)分同時(shí)到達(dá)的讀寫信號(hào),,并且產(chǎn)生間隔的對(duì)外部SRAM的讀寫信號(hào)
在SRAM順序?qū)ぶ返幕A(chǔ)上實(shí)現(xiàn)數(shù)據(jù)的先進(jìn)先出
全空、全滿,、半空,、半滿狀態(tài)的判定
盡量降低對(duì)器件速度的要求
二、設(shè)計(jì)方法
同步設(shè)計(jì)
在系統(tǒng)中地址產(chǎn)生,、比較器結(jié)果輸出,、FIFO各種狀態(tài)的輸出都采用同步觸發(fā)方式,全部按照系統(tǒng)時(shí)鐘統(tǒng)一進(jìn)行,,這能在很大程度上消除異步方式引起的邏輯狀態(tài)變化時(shí)間的不確定和毛刺的產(chǎn)生,,但也沒必要在所有的地方都強(qiáng)求按同步設(shè)計(jì),只要能符合時(shí)序要求,,異步方式也可以,,目的是盡量減少設(shè)計(jì)的復(fù)雜度和占用的資源。
原理圖輸入
設(shè)計(jì)在Altera公司的MAX+plus II V9.6軟件下編譯仿真,。在系統(tǒng)的整體設(shè)計(jì)中采用原理圖的方式,,可以方便地進(jìn)行時(shí)序控制和仿真。
三,、具體信號(hào)的產(chǎn)生及時(shí)序分析
信號(hào)分析的具體條件
以下的設(shè)計(jì)都是在CPLD為EPM7128SQC100-6,,SRAM為IDT71128-12的條件下進(jìn)行,對(duì)FIFO的最高要求為雙向同時(shí)讀寫,時(shí)鐘RCLK和WCLK為10MHz,,脈沖寬度為50ns,,系統(tǒng)時(shí)鐘CLK為50MHz,脈沖寬度為10ns,。對(duì)于較低速度的讀寫,,50MHz的系統(tǒng)時(shí)鐘也可以適應(yīng),如果外部要求降低,,也可按照與RCLK,、WCLK的等比例換用較低的系統(tǒng)時(shí)鐘。外部數(shù)據(jù)是在上升沿有效,,F(xiàn)IFO的輸出也是上升沿有效,。
基本信號(hào)的產(chǎn)生以及時(shí)序圖
系統(tǒng)采用獨(dú)立的系統(tǒng)時(shí)鐘CLK。為區(qū)分同時(shí)到達(dá)的外部讀寫信號(hào),,內(nèi)部產(chǎn)生的讀寫信號(hào)分別用系統(tǒng)時(shí)鐘的上升沿和下降沿觸發(fā),,同時(shí)讓產(chǎn)生的內(nèi)部讀寫信號(hào)互斥,以得到間隔的對(duì)外部SRAM的讀寫信號(hào),;考慮到實(shí)際的需要以及器件和內(nèi)部時(shí)鐘的速度,,按照四個(gè)脈沖寬度的方式產(chǎn)生讀寫信號(hào),以保證在最小10個(gè)脈沖時(shí)間內(nèi)各有一次有效讀寫,。
外部讀寫時(shí)鐘RCLK,、WCLK先經(jīng)過各自的使能控制信號(hào)REN、WEN進(jìn)入CPLD,;為保證讀寫互斥,,外部讀寫異步鎖存之后,讀信號(hào)鎖存后面的第一個(gè)上升沿,,寫信號(hào)鎖存后面的第一個(gè)下降沿,,并且用各自的前三個(gè)脈沖控制對(duì)方鎖存第一個(gè)脈沖。
通過對(duì)各種情況的分析,,基本讀寫脈沖OE和MW之間的最小間隔是一個(gè)脈沖,,在有連續(xù)兩個(gè)外部讀或?qū)懙那闆r下所產(chǎn)生的兩個(gè)OE或MW之間的最小間隔是兩個(gè)脈沖。
讀寫地址信號(hào)
讀寫各有一個(gè)地址指針,,每讀出一個(gè)數(shù)讀地址加一,,讀指針就指向下一個(gè)最早寫入的數(shù),經(jīng)過SRAM陣列的最高地址后,,又從起始地址開始,,這樣就可以達(dá)到先進(jìn)先出的效果;只有有效的讀寫脈沖才能觸發(fā)地址計(jì)數(shù)器,;為使整個(gè)系統(tǒng)的動(dòng)作時(shí)間一致,,采用同步設(shè)計(jì),,讀寫都統(tǒng)一選擇上升沿觸發(fā)計(jì)數(shù)器變化;地址改變先于后面的/WE,、/OE脈沖的產(chǎn)生,。
地址發(fā)生器采用計(jì)數(shù)器宏單元。FIFO容量的大小由計(jì)數(shù)器決定,,簡(jiǎn)單地增加計(jì)數(shù)器的位數(shù)和SRAM的數(shù)量,,就可以擴(kuò)大FIFO的容量。讀寫地址產(chǎn)生之后,,經(jīng)過一個(gè)總線復(fù)用器后輸出作為對(duì)外部SRAM讀寫的地址線,;總線復(fù)用器的選擇由MW信號(hào)控制,只有在MW有效的時(shí)候才輸出為寫地址,,其它時(shí)間都是讀地址,。
讀寫地址在由計(jì)數(shù)器產(chǎn)生經(jīng)過總線復(fù)用時(shí),會(huì)產(chǎn)生靜態(tài)冒險(xiǎn),;對(duì)于讀寫地址比較器,,因?yàn)樗i存的時(shí)刻距離地址變化后兩個(gè)脈沖,而且比較器輸入的地址不經(jīng)過總線復(fù)用,,這就可以保證在比較器鎖存的時(shí)刻地址比較結(jié)果已經(jīng)穩(wěn)定而且不受靜態(tài)冒險(xiǎn)的影響;對(duì)于到SRAM的讀寫地址,,在讀寫控制脈沖/OE,、/WE有效前還有兩個(gè)脈沖的時(shí)間穩(wěn)定,不會(huì)因?yàn)榈刂凡环€(wěn)定產(chǎn)生錯(cuò)誤操作,。
讀寫地址相等時(shí)比較器輸出相等標(biāo)志EF,,F(xiàn)IFO半滿,即除去最高位以外的地址都相等的情況輸出半滿標(biāo)志EHF,。
FIFO狀態(tài)信號(hào)
1,、小于半滿LHFULL
在上電或復(fù)位之后,LHFULL立刻有效,。利用另一個(gè)觸發(fā)器上電或者復(fù)位的清零,,置位LHFULL觸發(fā)器,使其有效,,但在第一個(gè)寫之后這個(gè)觸發(fā)器就不再對(duì)LHFULL的變化有影響,。在讀寫地址比較器輸出半滿的時(shí)候再來一個(gè)讀,就判定為小于半滿LHFULL,。從大于半滿到小于半滿,,需要經(jīng)過兩個(gè)連續(xù)的讀,第一個(gè)讀使比較器得到半滿結(jié)果,,第二個(gè)讀使LHFULL有效,。當(dāng)經(jīng)過一個(gè)寫從小于半滿到半滿時(shí),,在讀寫地址比較器輸出半滿使LHFULL觸發(fā)器狀態(tài)可以變化后的下一個(gè)上升沿清除LHFULL觸發(fā)器。觸發(fā)器的使能端選為EHF,,保證狀態(tài)信號(hào)只在半滿的時(shí)候才發(fā)生變化,。
2、大于半滿GHFULL
半滿的時(shí)候再來一個(gè)寫,,GHFULL置位為高有效,。GHFULL的設(shè)計(jì)原理同LHFULL,且不需要上電復(fù)位置位的處理,。
3,、全滿FULL
當(dāng)比較器輸出結(jié)果為讀寫地址相等時(shí),如果此時(shí)執(zhí)行的操作是寫,,即在一個(gè)寫之后讀寫地址才相等,,就判定為全滿,置FULL為有效,。在全滿狀態(tài)下,,如果有一個(gè)讀,F(xiàn)ULL就被清零,。
1,、 全空EMPTY
在上電或復(fù)位之后,EMPTY立刻有效,。利用另一個(gè)觸發(fā)器上電或者復(fù)位的清零,,置位EMPTY觸發(fā)器,使其有效,,但在第一個(gè)寫之后這個(gè)觸發(fā)器就不再對(duì)EMPTY的變化有影響,。當(dāng)比較器輸出結(jié)果為讀寫地址相等時(shí),如果此時(shí)執(zhí)行的操作是讀,,即在一個(gè)讀之后讀寫地址相等,,就判定為全空,置EMPTY有效,。全空狀態(tài)下,,如果有一個(gè)寫,EMPTY就被清零,。
復(fù)位信號(hào)
只要RST信號(hào)為低就會(huì)產(chǎn)生有效的復(fù)位,,讀寫的地址計(jì)數(shù)器都被清零,全滿,、大于半滿狀態(tài)清除,,全空和小于半滿置位,F(xiàn)IFO鎖存輸出為零,。
與外部SRAM的連接及對(duì)SRAM的讀寫定時(shí)分析
CPLD與SRAM之間除去讀寫復(fù)用的地址和數(shù)據(jù)線以外,,還需要有輸出使能信號(hào)/OE,,讀寫信號(hào)/WE,片選信號(hào)/CS,。地址線,、數(shù)據(jù)線、/OE和/WE如前所述,;片選信號(hào)由地址高位譯碼產(chǎn)生,,在這里是把最高位取反,得到兩個(gè)片選信號(hào),。
讀寫信號(hào)的時(shí)序符合設(shè)計(jì)采用的IDT71128-12 SRAM的定時(shí)要求,。
寫操作:
寫周期最小12ns,地址有效到結(jié)束寫最小10ns,,片選到寫結(jié)束最小10ns,,寫脈沖最小10ns,數(shù)據(jù)有效到寫結(jié)束最小7ns,。地址在/WE之前建立,,在/WE結(jié)束之后變化;數(shù)據(jù)保持到/WE無效再變化,;在地址變化時(shí),,/WE、/CS不能都有效,;在有效的寫時(shí),,/CS、/WE為低,;
讀操作:
地址尋址時(shí)間最大12ns,讀周期最小12ns,,片選尋址時(shí)間最大12ns,,輸出使能到數(shù)據(jù)輸出有效最大6ns。在讀周期/WE為高,,/OE為低,,讀周期結(jié)束時(shí)地址和數(shù)據(jù)應(yīng)該保持不變。
寫地址與MW脈沖的上升沿同時(shí)變化,,在兩個(gè)脈沖之后,,寫地址能夠穩(wěn)定,這時(shí)/WE才有效,,并且由于連續(xù)兩個(gè)讀寫脈沖之間最少有一個(gè)脈沖的間隔,,而且MW比EW4要有延遲,同時(shí)總線選擇也是由MW決定,,就保證了寫地址在/WE前有效并能保持到/WE結(jié)束,;寫數(shù)據(jù)的三態(tài)緩沖由EW4打開,,可以保持到/WE結(jié)束。
讀地址在上一個(gè)寫結(jié)束之后有效,,由于讀地址變化比OE脈沖晚一個(gè)脈沖,,/OE在OE結(jié)束時(shí)開始,保證了/OE開始的時(shí)候讀地址已穩(wěn)定和讀周期時(shí)間符合要求,;寫數(shù)據(jù)已由EW4關(guān)閉,,由于讀寫之間的。