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