利用FPGA實(shí)現(xiàn)異步FIFO設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
目前數(shù)據(jù)采集系統(tǒng)朝著高速和高精度的方向發(fā)展。隨著FPGA的集成度和運(yùn)行速度的提高,可以滿足高速數(shù)據(jù)采集系統(tǒng)的需求。FPGA內(nèi)部具有豐富的存儲(chǔ)單元,易于實(shí)現(xiàn)各種存儲(chǔ)器(如FIFO、雙口RAM等);另外,基于查找表的邏輯單元可用于實(shí)現(xiàn)各種數(shù)字信號(hào)處理(如濾波等),以輔助DSP處理器做各種預(yù)處理。
TI公司推出的高性能數(shù)字信號(hào)處理芯片TMS320C6000系列,工作頻率最高可達(dá)到1GHz,具有處理速度快、靈活、精確和可靠性高等優(yōu)點(diǎn),作為數(shù)據(jù)采集系統(tǒng)中的主處理器,可以滿足實(shí)時(shí)性的要求?;谝陨峡紤],北京合眾達(dá)公司開發(fā)了采用TMS320C6416和FPGA的高速高精度雙通道數(shù)據(jù)采集系統(tǒng),每個(gè)通道的采樣率為3Msps,最高可達(dá)10Msps,采樣精度為14b。系統(tǒng)主要包括以下幾部分:高速A/D轉(zhuǎn)換、FIFO數(shù)據(jù)緩存和EDMA數(shù)據(jù)傳輸,系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
AD9243及轉(zhuǎn)換控制
設(shè)計(jì)中采用的模數(shù)轉(zhuǎn)換器芯片是AD9243。AD9243是ADI公司生產(chǎn)的14位、3Msps高性能模數(shù)轉(zhuǎn)換器。AD9240與AD9243完全兼容,因此系統(tǒng)的最高采樣率可兼容到10Msps。
模數(shù)轉(zhuǎn)換器AD9243的時(shí)序控制與傳統(tǒng)的A/D有所不同,完全依靠時(shí)鐘控制采樣、轉(zhuǎn)換和數(shù)據(jù)輸出,在第一個(gè)時(shí)鐘的上升沿開始采樣轉(zhuǎn)換,第四個(gè)時(shí)鐘上升沿到來時(shí),數(shù)據(jù)將出現(xiàn)在D1~D14端口上。本文采用系統(tǒng)自通電時(shí)起,A/D和時(shí)鐘電路始終處于工作狀態(tài),對(duì)數(shù)據(jù)不停進(jìn)行轉(zhuǎn)換,以減少誤碼率,提高采樣精度。
FIFO的實(shí)現(xiàn)及控制
設(shè)計(jì)中采用FPGA來實(shí)現(xiàn)雙通道數(shù)據(jù)的緩存和數(shù)據(jù)傳輸?shù)倪壿嬁刂啤partan3E是一款高性能低價(jià)格的可編程邏輯器件,具有豐富的邏輯單元和存儲(chǔ)單元。其內(nèi)部的BlockRam可以配置為大小不同的各種類型存儲(chǔ)器,如單口RAM、雙口RAM和同步FIFO,其中FIFO更適合作為A/D 采樣數(shù)據(jù)高速寫入的存儲(chǔ)器。FIFO存儲(chǔ)器就像數(shù)據(jù)管道一樣,數(shù)據(jù)從管道的一頭流入、從另一頭流出,先進(jìn)入的數(shù)據(jù)先流出。FIFO具有兩套數(shù)據(jù)線而無地址線,可在其一端寫操作而在另一端進(jìn)行讀操作,數(shù)據(jù)在其中順序移動(dòng),從而達(dá)到很高的傳輸速度和效率,且由于省去了地址線,有利于PCB板布線。
采用FIFO構(gòu)成高速A/D采樣緩存時(shí),由于轉(zhuǎn)換速度較快,如果直接將ADC采樣后的數(shù)據(jù)存儲(chǔ)到FIFO中,對(duì)時(shí)序配置要求非常嚴(yán)格,如果兩者時(shí)序關(guān)系配合不當(dāng),就會(huì)發(fā)生數(shù)據(jù)存儲(chǔ)出錯(cuò)或者掉數(shù)。利用FPGA可以方便地控制時(shí)序和數(shù)據(jù)傳輸,簡單、可靠地實(shí)現(xiàn)采樣和存儲(chǔ)是選用FPGA的優(yōu)點(diǎn)。該數(shù)據(jù)采集系統(tǒng)中只采用了一個(gè)外部時(shí)鐘源,直接輸入到FPGA,經(jīng)DCM分頻后作為FIFO和ADC的時(shí)鐘源。
在軟件設(shè)計(jì)中,采用ISE開發(fā)環(huán)境開發(fā)FPGA時(shí),調(diào)用Core Generator來構(gòu)造FIFO,可以設(shè)置FIFO的參數(shù),如深度和寬度;設(shè)置FIFO的各種標(biāo)志和控制位,如空滿、半滿全滿、半空全空、可編程滿和可編程空等標(biāo)志位;寫使能、讀使能等控制位,以便實(shí)現(xiàn)與高速A/D和DSP的邏輯接口。FIFO的輸入輸出引腳如表所示:其中WR_EN由DSP的GPIO 口引出,控制數(shù)據(jù)是否寫入到FIFO中,輸出引腳中只用到了PROG_FULL即可與DSP進(jìn)行數(shù)據(jù)傳輸。
FPGA的作用除了構(gòu)造FIFO以實(shí)現(xiàn)數(shù)據(jù)通道復(fù)用外,還可以作為協(xié)處理器進(jìn)行實(shí)時(shí)要求性高的數(shù)據(jù)預(yù)處理(如插值、取平均、FIR濾波等),以減少DSP處理的數(shù)據(jù)量。設(shè)計(jì)中采用分布式算法的FIR濾波,首先對(duì)ADC轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行FIR濾波,然后存入FIFO中以等待DSP的讀取。 FPGA代替ASIC和DSP作為前端數(shù)字信號(hào)處理的運(yùn)算,在規(guī)模、重量和功耗方面都有所降低,而且吞吐量更高,開發(fā)成本進(jìn)一步縮小。
FPGA設(shè)計(jì)中,需提供外部閃存來存儲(chǔ)FPGA的下載文件,上電后數(shù)據(jù)會(huì)自動(dòng)下載到FPGA內(nèi)部,以對(duì)FPGA進(jìn)行配置。FPGA有多種配置方式,包括主串、從串、主并、從并、SPI、BPI,以及JTAG等方式。串行方式即逐位串行配置,接線簡單,但速度比較慢,并行方式即8位同時(shí)傳輸,速度快,但接線復(fù)雜。串行方式和并行方式都需要外加閃存作為配置文件的存儲(chǔ)器。設(shè)計(jì)中本文采用C6416的多通道緩存串行口(McBSP)以SPI方式對(duì)FPGA進(jìn)行配置。
圖1:系統(tǒng)結(jié)構(gòu)框圖
接口和控制電路的設(shè)計(jì)
系統(tǒng)的接口和控制電路主要包括以下兩個(gè)部分:
1. ADC與FIFO的接口電路
利用FPGA構(gòu)造了兩個(gè)完全一樣的FIFO,將兩路A/D轉(zhuǎn)換數(shù)據(jù)分別送入兩個(gè)FIFO中,實(shí)現(xiàn)雙通道采樣數(shù)據(jù)的緩存和傳輸。設(shè)計(jì)中A/D 轉(zhuǎn)換時(shí)鐘和FIFO寫時(shí)鐘為同一時(shí)鐘源,自上電起,A/D和時(shí)鐘電路一直處于工作狀態(tài),不停的進(jìn)行數(shù)據(jù)的轉(zhuǎn)換,但數(shù)據(jù)是否寫入到FIFO中,由FIFO的寫使能信號(hào)來決定,當(dāng)DSP發(fā)出寫使能信號(hào)有效時(shí),轉(zhuǎn)換數(shù)據(jù)才能存儲(chǔ)到FIFO中。從前面的A/D時(shí)序電路中可知,A/D轉(zhuǎn)換數(shù)據(jù)的輸出和轉(zhuǎn)換時(shí)鐘有一定的相位差,在FPGA內(nèi)部可通過延時(shí)或時(shí)鐘管理器來滿足建立時(shí)間和保持時(shí)間,保證數(shù)據(jù)不失碼地傳輸?shù)紽IFO中。
2. FIFO與C6416的接口電路
C6416有兩個(gè)EMIF口,即EMIFA和EMIFB,其中EMIFA的總線寬度支持64b、32b、16b和8b,尋址空間為 1024Mb;EMFIB的總線寬度支持16b和8b,尋址空間為256Mb。本文采用EMIFB作為與FIFO的接口,其總線寬度配置為16b。 EMIFB可以與各種外部存儲(chǔ)器實(shí)現(xiàn)無縫接口,如SBSRAM、SDRAM、異步設(shè)備(包括SRAM、ROM和FIFO)和外部共享存儲(chǔ)設(shè)備等。設(shè)計(jì)中 EMFIB和FIFO的接口采用異步讀的方式,實(shí)現(xiàn)數(shù)據(jù)的可靠傳輸,即通過由/ARE和地址來實(shí)現(xiàn)對(duì)兩個(gè)同步FIFO的異步讀,其控制接口信號(hào)的連接關(guān)系為:
RD_CLK=/ARE
RD_EN1=A20
RD_EN2=A19
表1:FIFO的輸入輸出引腳定義
設(shè)計(jì)中將兩個(gè)FIFO的存儲(chǔ)空間都映射到EMIFB的BCE2中,當(dāng)FIFO的可編程滿信號(hào)PROG_FULL有效時(shí),引發(fā)外部中斷,觸發(fā)EDMA 以實(shí)現(xiàn)數(shù)據(jù)的快速傳輸。由于FIFO不需要地址線,可以通過簡單的接口來產(chǎn)生EDMA的讀地址,實(shí)現(xiàn)EDMA分時(shí)讀兩個(gè)FIFO。異步讀FIFO必須滿足下列時(shí)序關(guān)系:
異步讀時(shí)序如圖2所示,其中EMFIB的時(shí)鐘可以是外部時(shí)鐘源,也可以是由CPU時(shí)鐘分頻獲得。設(shè)計(jì)中使用外部時(shí)鐘源,其頻率為133MHz,可以根據(jù)EMIFB的讀寫控制寄存器配置Setup、Strobe和Hold的值。
圖2:異步讀時(shí)序圖
本文小結(jié)
本文系統(tǒng)地介紹了一種由數(shù)字信號(hào)處理器TMS320C6416、可編程邏輯器件Spartan3E構(gòu)成的高速系統(tǒng)。實(shí)驗(yàn)表明,系統(tǒng)具有抗干擾強(qiáng)、可靠性高、失碼率低等優(yōu)點(diǎn)。設(shè)計(jì)中采用了FPGA來構(gòu)造FIFO,可根據(jù)不同的應(yīng)用場合對(duì)FPGA編程以滿足設(shè)計(jì)要求,因此靈活性較大,是一種較好的高速數(shù)據(jù)采集方案。此外,采用了EDMA傳輸,適于在實(shí)時(shí)性要求較高的各種高速數(shù)據(jù)采集系統(tǒng)中應(yīng)用。該數(shù)據(jù)采集卡采用標(biāo)準(zhǔn)擴(kuò)展總線接口,可以與合眾達(dá)公司的DEC6000系列開發(fā)板連接。