DSP應(yīng)用設(shè)計關(guān)鍵之接口設(shè)計(二)
二、FIFO實現(xiàn)高速模數(shù)轉(zhuǎn)換器與DSP的接口
在數(shù)字信號處理系統(tǒng)中,大多數(shù)高速模數(shù)轉(zhuǎn)換器都不能直接與DSP相連接。FIFO恰好架起了DSP與ADC之間的一座橋梁,因為它能緩存大量的數(shù)據(jù)塊。同時由于DSP訪問外部存儲器器件必須通過外部存儲器接口External Memory Interface, EMIF, 而C6000系列DSP的EMIF具有很強的接口能力。它不僅具有很高的數(shù)據(jù)吞吐率(最高1200MB/s),而且可以與目前幾乎所有類型的存儲器直接接口。本文介紹了用FIFO 在DSPs和模擬前端(AFEs)之間進行數(shù)據(jù)緩存的實現(xiàn)方法。
1 AD9042高速模數(shù)轉(zhuǎn)換器
AD9042是一款低功率12bit的41MSPS模數(shù)轉(zhuǎn)換器。它的快速、高分辨率特點使其非常適合于視頻、多媒體、圖像處理、高速數(shù)據(jù)采集和通信等很多應(yīng)用領(lǐng)域。圖1為AD9042的采樣時序圖。由該圖可以看出:AD9042不能與TMS320C6205直接相連。
因為ADC總是在進行數(shù)據(jù)輸出,因此輸出無高阻狀態(tài),而如果模數(shù)轉(zhuǎn)換器直接與DSP總線相連接,DSP就不能使用其它外圍設(shè)備了,而且DSP必須在每個轉(zhuǎn)換時鐘周期讀一次采樣數(shù)據(jù),這樣,即使使用DMA通道傳輸也是不可能實現(xiàn)的,因為其它外圍設(shè)備也要使用總線。
雖然采樣鎖存可以解決數(shù)據(jù)總是輸出的問題,但是,如果模數(shù)轉(zhuǎn)換器運行在41MSPS,那么,DSP每24ns就要讀一次新采樣。這將占去DSP中的大部分I/O帶寬,此時如果DSP處于busy態(tài),那么在24ns內(nèi)就不能讀取下一次采樣,這樣將使數(shù)據(jù)丟失。
一個比較好的解決辦法是使用FIFO作為輸入緩沖,由ADC把采樣轉(zhuǎn)換的值同步寫進FIFO。每寫入一塊數(shù)據(jù)便向DSP發(fā)出一信號,以提醒DSP從FIFO中讀取數(shù)據(jù)塊。這樣比單次讀的效率要快很多。
2 CY7C4265-10AC同步FIFO
CY7C4265是高速低功耗CMOS時鐘FIFO存儲器。它是一款同步FIFO,意思是它的讀寫端口使用同步接口,每一個端口的時鐘都是互相獨立的,這些時鐘可以同步,也可以異步。這使得FIFO的讀寫口能以不同的速度運行。傳統(tǒng)的FIFO在進行數(shù)據(jù)傳輸時通常要求額外的控制邏輯,而新一代CY7C4265則可實現(xiàn)FIFO與DSP之間的無縫連接。3 FIFO與EMIF的連接
C6000系列DSP的EMIF具有很強的接口能力,它可以連接不同類型的存儲器,如異步SRAM?SDRAM、SBSRAM等。
3 EMIF與FIFO的接口
CY7C4265 FIFOs提供有與DSP的無縫連接,這樣的無縫連接要求FIFO作為一個輸出緩沖器。而當FIFO作為輸入緩沖器時,F(xiàn)IFO是EMIF的唯一異步設(shè)備。本設(shè)計恰好讓FIFO作為輸入緩沖器,且就此一個異步設(shè)備,因而避免了復(fù)雜的接口邏輯。
圖2是EMIF與FIFO接口的具體硬件實現(xiàn),F(xiàn)I-FO的半滿標志HF作為DSP的輸入信號。HF用于告訴DSP此時FIFO中的有效數(shù)據(jù)是可以讀取的(而且容量是FIFO總大小的一半),以便DSP產(chǎn)生一個中斷來讀取FIFO中的數(shù)據(jù)塊。
3.1 DSP讀FIFO時序
在這個高速微弱信號數(shù)據(jù)采集卡的設(shè)計中,C6205的時鐘頻率為200MHz,且沒有使用其它外部控制邏輯。圖2中,EMIF異步接口提供的控制信號可以通過不同的組合(并非都需要)實現(xiàn)與不同類型器件的無縫接口。EMIF的CExCTL寄存器負責設(shè)置異步讀/寫操作的接口時序,以滿足對不同速度異步器件的存取要求。
C6000異步接口時序具有很強的可編程性,每個讀/寫周期由三個階段構(gòu)成:建立時間(Setup)、觸發(fā)時間(Strobe)、保持時間(Hold)。其中建立時間是從存儲器訪問周期開始(片選?地址有效)到讀/寫選通有效之前的時間;觸發(fā)時間是讀/寫選通信號從有效到無效之間的時間;保持時間則是從讀/寫無效到訪問周期結(jié)束之間時間。
DSP的ARE信號作為FIFO的讀時鐘,F(xiàn)IFO在ARE的上升沿在總線上輸出數(shù)據(jù),DSP和FIFO的獨立時序參數(shù)值。
根據(jù)DSP的異步讀時序,為了完成C6205的建立時間,第一個數(shù)據(jù)的讀取必須滿足下式:
Setup+Strobe ≥td?CK-AOEV?max+tOEmax+tSU?EDV-CK?min
根據(jù)上式,在最差情況下,建立和觸發(fā)時間必須大于15ns(4ns+7ns+4ns)。當DSP的時鐘頻率為200MHz時,一個時鐘周期應(yīng)該是5ns。此時如果Setup和Strobe的值都取1,則Setup+strobe為10ns,故不能滿足時序要求,因此Setup和Strobe這兩個可編程參數(shù)若一個取1,另外一個必須大于等于2。而實際上,Setup和Strobe可以都取1,其原因是C6205不論是連續(xù)存取還是單次存取操作,在存取第一個數(shù)時,EMIF會自動將最小建立時間設(shè)置為2。
而對于以后數(shù)據(jù)的讀取,OE總是有效?,F(xiàn)在主要考慮的是FIFO的訪問時間應(yīng)滿足下式:
Hold+Setup+Strobe ≥tAmax+tSU?EDV-CK?min
也就是說,一個完整的數(shù)據(jù)訪問時間必須大于12ns(8ns+4ns),即Hold+Setup+Strobe ≥3;要完成C6205的保持時間,必須滿足下面兩個公式:
td?CK-AREV?min+tAmin ≥ th?CK-EDV?min
Hold ≥th?CK-EDV?min-td?CK-AREV?min-tOHZmin
當上邊的式子滿足條件時,-0.2+2>0.8。為了得到最小的Hold時間,此時Hold可以為0ns,也就是說,Hold可以被編程為0。
最后要滿足的條件是時鐘的高低時間。因為FIFO的時鐘信號直接由ARE產(chǎn)生,因此ARE信號保持低電平的時間必須大于FIFO的時鐘周期。即:
Strobe ≥tCLKL min
Hold+Setup ≥tCLKH min
Setup+Strobe+Hold ≥tCLK min
由以上七個式子可知,在200MHz的鐘頻率下,CExCTL寄存器中Setup/Strobe/Hold的值可以作如下設(shè)置:
Setup=1,Strobe=1,Hold=1;
此時,DSP讀取FIFO中數(shù)據(jù)的速度為66.7MHz。
4 結(jié)論
FIFO在ADC高速模數(shù)轉(zhuǎn)換器與DSP的通訊過程中起到了很好的數(shù)據(jù)緩沖作用,其標志位可被用來控制FIFO中數(shù)據(jù)的讀取。如果選用內(nèi)部時鐘頻率為133MHz的SN74V2×5-7系列FIFO,DSP讀取數(shù)據(jù)的速度可以達到100MHz。