一種基于FPGA實(shí)現(xiàn)的高速緩存設(shè)計(jì)
出處:景 艷,黃士坦,張遂南 發(fā)布于:2007-09-24 14:55:07
摘 要:為了解決嵌入式實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)中,高速采集數(shù)據(jù)量大,而處理器的處理速度有限的矛盾,保證數(shù)據(jù)不丟失并提高處理器的數(shù)據(jù)吞吐率,文中提出一種基于FPGA(現(xiàn)場(chǎng)可編程門陣列) 實(shí)現(xiàn)的FIFO(先入先出存儲(chǔ)器) 結(jié)構(gòu)設(shè)計(jì),它可以成倍提高數(shù)據(jù)流通速率,增加嵌入式系統(tǒng)的實(shí)時(shí)性。
關(guān)鍵詞:高速數(shù)據(jù)采集系統(tǒng);數(shù)字信號(hào)處理器;異步先入先出存儲(chǔ)器;現(xiàn)場(chǎng)可編程門陣列
引 言
隨著雷達(dá)、通信和圖像處理中數(shù)字處理技術(shù)的飛速發(fā)展,現(xiàn)代化生產(chǎn)和科學(xué)研究對(duì)數(shù)據(jù)采集系統(tǒng)的要求更加嚴(yán)格。在嵌入式條件下,要求數(shù)據(jù)獲取的速度越來(lái)越快,越來(lái)越高,以致數(shù)據(jù)量及處理速度要求大增,高速ADC的出現(xiàn)和DSP性能的不斷提高也對(duì)系統(tǒng)將來(lái)的升級(jí)提出了更高要求,特別在一些特殊領(lǐng)域,如航空、航天等,其嵌入式系統(tǒng)體積小、功能強(qiáng)、實(shí)時(shí)性高,為了避免數(shù)據(jù)處理不及時(shí),發(fā)生數(shù)據(jù)丟失,破壞系統(tǒng)可靠性,更要進(jìn)一步提高系統(tǒng)實(shí)時(shí)性,必須研究開(kāi)發(fā)高速嵌入式數(shù)據(jù)采集系統(tǒng)。
針對(duì)具體的任務(wù)要求,文中提出了一種通過(guò)FPGA 實(shí)現(xiàn)轉(zhuǎn)換接口的高速數(shù)據(jù)采集系統(tǒng)的系統(tǒng)結(jié)構(gòu),即高速A/D+大容量FPGA+高速DSP的嵌入式高速數(shù)據(jù)采集系統(tǒng)。模數(shù)轉(zhuǎn)換器A/D進(jìn)行高速數(shù)據(jù)采集,F(xiàn)PGA實(shí)現(xiàn)對(duì)高速A/D 采集數(shù)據(jù)的存儲(chǔ)和控制調(diào)度,DSP 通過(guò)查詢方式訪問(wèn)前端采集通道,對(duì)采集的數(shù)據(jù)進(jìn)行高速處理,這種方法大大提高了DSP 可以訪問(wèn)的外設(shè)數(shù)目,提高了DSP的處理能力,同時(shí)由于DSP 不直接與模數(shù)轉(zhuǎn)換芯片接口,所以ADC 芯片的升級(jí)或者替代都不會(huì)影響原來(lái)的數(shù)據(jù)采集,而且采用了時(shí)分復(fù)用方式讀取轉(zhuǎn)換完成的數(shù)據(jù),因此這個(gè)系統(tǒng)數(shù)據(jù)采集速率可以達(dá)到所采用的ADC 芯片輸出的速率,能充分發(fā)揮DSP 算法處理功能強(qiáng)大、速度快的優(yōu)勢(shì),而FPGA 設(shè)計(jì)靈活、通用性強(qiáng)等特點(diǎn),使得整個(gè)系統(tǒng)具有實(shí)時(shí)性高、體積小、開(kāi)發(fā)周期短、易于維護(hù)和擴(kuò)展、適合于實(shí)時(shí)信號(hào)處理等多個(gè)優(yōu)點(diǎn)。文中結(jié)合成功開(kāi)發(fā)的高速采集系統(tǒng)結(jié)構(gòu),提出一種基于FPGA實(shí)現(xiàn)的FIFO構(gòu)來(lái)實(shí)現(xiàn)高速緩存,它可以成倍提高數(shù)據(jù)流通速率,增加嵌入式系統(tǒng)的實(shí)時(shí)性。
高速數(shù)據(jù)采集系統(tǒng)結(jié)構(gòu)
實(shí)時(shí)信號(hào)處理系統(tǒng)中,高層處理算法的特點(diǎn)是所處理的數(shù)據(jù)量較低層算法少,但算法的控制結(jié)構(gòu)復(fù)雜,適于用運(yùn)算速度高、尋址方式靈活、通信機(jī)制強(qiáng)大的DSP芯片來(lái)實(shí)現(xiàn)。特別是TI 公司的C6000 系列DSP,其峰值處理速度已達(dá)每秒數(shù)十億條指令,是當(dāng)今的DSP之一,非常適合于嵌入式實(shí)時(shí)系統(tǒng)應(yīng)用。低層的信號(hào)預(yù)處理算法處理的數(shù)據(jù)量大、計(jì)算量大、對(duì)處理速度的要求高,但運(yùn)算結(jié)構(gòu)相對(duì)比較簡(jiǎn)單,適于用FPGA來(lái)進(jìn)行硬件實(shí)現(xiàn),這樣能同時(shí)兼顧速度及靈活性。目前FPGA的容量已經(jīng)跨過(guò)了百萬(wàn)門級(jí),使得FPGA成為解決系統(tǒng)級(jí)設(shè)計(jì)的重要選擇方案之一。它主要應(yīng)用于協(xié)處理器,輔助DSP芯片完成一些計(jì)算密集型的算法。
在筆者設(shè)計(jì)的高速信息處理計(jì)算機(jī)中,高速ADC模塊、FPGA 模塊以及DSP 模塊構(gòu)成了高速數(shù)據(jù)采集系統(tǒng),從此結(jié)構(gòu)中可以看到,DSP可以在未知ADC 控制方式的情況下,定時(shí)地訪問(wèn)外設(shè)來(lái)獲得模數(shù)轉(zhuǎn)換后的數(shù)據(jù),而大容量的FPGA協(xié)助DSP完成數(shù)據(jù)的預(yù)處理,并可以保證采集數(shù)據(jù)不丟失。
其中ADC是一個(gè)12位、65MHz采樣速率的高速模數(shù)轉(zhuǎn)換器,可進(jìn)行高速采樣,處理器選用TI公司的TMS320C6701 。DSP 內(nèi)部時(shí)鐘頻率可以達(dá)到167MHz,DSP讀取外部SDRAM 的時(shí)鐘頻率是1/2×CPU ,而讀取外部異步存儲(chǔ)器的時(shí)鐘頻率可以通過(guò)CE 空間控制寄存器來(lái)編程控制,其參數(shù)需要滿足一定要求,即CLK>(Setup+Strobe+Hold)>2個(gè)時(shí)鐘周期,時(shí)鐘頻率可達(dá)80MHz。如果DSP 不通過(guò)緩存直接與A/D相連,在采樣過(guò)程中,若A/D連續(xù)采樣數(shù)據(jù),DSP一直處于連續(xù)的間隔取數(shù)的狀態(tài),這將占用DSP 大部分處理時(shí)間,導(dǎo)致DSP 不能從事其他工作。也有可能出現(xiàn)上的數(shù)據(jù)還沒(méi)有被計(jì)算機(jī)處理完,下采集過(guò)程就開(kāi)始的情況。如果選取更高速的A/D ,更會(huì)發(fā)生數(shù)據(jù)丟失,破壞系統(tǒng)的可靠性。因此的做法是采用高速緩存來(lái)存儲(chǔ)采樣到的數(shù)據(jù),再集中傳輸一批數(shù)據(jù),保證DSP有充足的時(shí)間去處理、計(jì)算。
系統(tǒng)中采用容量比較大的FPGA,利用自主設(shè)計(jì)的IP核,主要協(xié)助主處理器實(shí)現(xiàn)數(shù)據(jù)的預(yù)處理(如FFT) 功能。為了保證設(shè)計(jì)的硬件系統(tǒng)體積盡可能小,因此在不增加系統(tǒng)的硬件負(fù)擔(dān)的前提條件下,利用系統(tǒng)中現(xiàn)有的FPGA,設(shè)計(jì)了基于FPGA 實(shí)現(xiàn)的異步FIFO 存儲(chǔ)器作為高速緩存器,它滿足前后讀寫(xiě)時(shí)鐘頻率不同的硬件環(huán)境,可使采集系統(tǒng)設(shè)計(jì)靈活、簡(jiǎn)單、方便,具有很強(qiáng)的可擴(kuò)展性。FIFO 存儲(chǔ)器具有兩個(gè)特點(diǎn):數(shù)據(jù)進(jìn)出有序;輸出輸入口獨(dú)立。靈活使用FIFO ,可根據(jù)需要設(shè)計(jì)為不同速率、不同容量的數(shù)字系統(tǒng),接口電路簡(jiǎn)潔且不占用系統(tǒng)地址資源,系統(tǒng)移植或升級(jí)換代方便,而且控制簡(jiǎn)單。
基于FPGA 實(shí)現(xiàn)的異步FIFO 的設(shè)計(jì)
FIFO結(jié)構(gòu)設(shè)計(jì)
設(shè)計(jì)一個(gè)異步FIFO ,讀寫(xiě)使能由不同的時(shí)鐘激勵(lì)來(lái)控制輸入數(shù)據(jù)和輸出數(shù)據(jù),空/滿標(biāo)志來(lái)防止數(shù)據(jù)的上溢和下溢,以及“半滿”狀態(tài)標(biāo)志,在字寬和容量深度兩方面都可以擴(kuò)展。讀寫(xiě)操作自動(dòng)訪問(wèn)存儲(chǔ)空間連續(xù)的存儲(chǔ)單元,讀出的數(shù)據(jù)和寫(xiě)入的數(shù)據(jù)順序相同,不需要額外的地址信息。首先,由復(fù)位信號(hào)清空存儲(chǔ)器數(shù)據(jù);然后,在寫(xiě)使能和寫(xiě)時(shí)鐘控制下向存儲(chǔ)器中寫(xiě)數(shù)據(jù),當(dāng)FIFO寫(xiě)半滿,half-full將有效(同步于寫(xiě)時(shí)鐘) ,觸發(fā)C6701中斷,C6701中斷服務(wù)程序通過(guò)DMA將FIFO中的數(shù)據(jù)取走并寫(xiě)入C6701片內(nèi)數(shù)據(jù)存儲(chǔ)器或SDRAM中去,F(xiàn)IFO中的數(shù)據(jù)空間存滿后,full信號(hào)有效,外部設(shè)備就不再向FIFO中寫(xiě)數(shù)據(jù)了;同理,在讀時(shí)鐘和讀使能控制下從存儲(chǔ)器中讀數(shù)據(jù)時(shí),若FIFO中的數(shù)據(jù)被外部設(shè)備取空了,則empty 信號(hào)有效,外部設(shè)備停止對(duì)FIFO的讀取。
本系統(tǒng)數(shù)據(jù)寬度根據(jù)需要,兩個(gè)端口可以設(shè)計(jì)為兩端是12位、16位、32位。
一般常用的FIFO設(shè)計(jì),都是兩端數(shù)據(jù)寬度相同的FIFO 結(jié)構(gòu)。這很容易在XILINX公司提供的IP核中找到,或者用行為級(jí)語(yǔ)言描述得到。
但是,在筆者設(shè)計(jì)的硬件平臺(tái)下,這些設(shè)計(jì)有局限性,分析如下:
因?yàn)門I公司的DSP C6701的EMIF支持32bit寬度的ASRAM,SDRAM和SBSRAM等存儲(chǔ)器,只有CE1空間支持16bit和8bit的ROM接口,本系統(tǒng)設(shè)計(jì)的FPGA是CE2和CE3空間尋址,物理接口是32bit。那么如果FIFO讀寫(xiě)端口設(shè)計(jì)為12位,DSP接收的32位數(shù)據(jù)僅低12 位有效,而高20位是無(wú)效數(shù)據(jù),一方面,這將大大降低DSP 讀取數(shù)據(jù)的吞吐率,另一方面由于需要處理無(wú)效數(shù)據(jù)而降低系統(tǒng)的實(shí)時(shí)性。
為了改進(jìn)系統(tǒng)的性能,提高系統(tǒng)的實(shí)時(shí)性,可以采取兩個(gè)措施:一是設(shè)計(jì)整字節(jié)寬度的FIFO端口,基于前端A/D的要求,的數(shù)據(jù)寬度是16位;二是設(shè)計(jì)寬位數(shù)端口的FIFO,提高數(shù)據(jù)的吞吐率,基于后端DSP的要求,的數(shù)據(jù)寬度是32位。由于C6701可以對(duì)數(shù)據(jù)存儲(chǔ)器進(jìn)行8bit/16bit/32bit的數(shù)據(jù)訪問(wèn),數(shù)據(jù)從FIFO中讀取數(shù)據(jù)到DSP 的數(shù)據(jù)存儲(chǔ)器后,可以根據(jù)需要決定是按字節(jié)、字、還是雙字處理。
針對(duì)筆者的硬件系統(tǒng),提出了一種基于FPGA的新型FIFO結(jié)構(gòu),輸入數(shù)據(jù)寬度與輸出數(shù)據(jù)寬度不同,即輸入為16位、輸出為32位的異步FIFO。分析系統(tǒng)的數(shù)據(jù)吞吐率:由于A/D數(shù)據(jù)輸入口的速度固定,數(shù)據(jù)按采樣頻率輸入FIFO ,因此輸入數(shù)據(jù)的時(shí)間是不變的,而C6701訪問(wèn)可以取走兩個(gè)有效數(shù)據(jù),在相同數(shù)據(jù)量的條件下明顯降低數(shù)據(jù)讀取時(shí)間,大大增加了DSP讀取數(shù)據(jù)的吞吐率,提高系統(tǒng)實(shí)時(shí)處理時(shí)間。
如果輸入數(shù)據(jù)的高4 位不接地,則傳給DSP的數(shù)據(jù)高4位是任意值,所以取完數(shù)后要將取得的數(shù)進(jìn)行預(yù)處理,這將降低DSP 的實(shí)時(shí)處理時(shí)間。因此在設(shè)計(jì)硬件電路時(shí)將FIFO的datain(15:12) 硬件置0,避免了DSP的軟件復(fù)位,省去DSP對(duì)數(shù)據(jù)的預(yù)處理過(guò)程,從而提高了DSP的實(shí)時(shí)處理能力。
筆者設(shè)計(jì)的FIFO是利用兩個(gè)16位RAM并行連接,輸入數(shù)據(jù)在寫(xiě)控制模塊的調(diào)度下依次寫(xiě)入兩個(gè)RAM中,兩個(gè)RAM的輸出經(jīng)過(guò)緩存器直接與DSP相應(yīng)數(shù)據(jù)線相連,保證了32位的數(shù)據(jù)寬度,內(nèi)部實(shí)現(xiàn)如圖3所示,其中的寫(xiě)控制邏輯實(shí)現(xiàn) 。其中寫(xiě)控制邏輯分別產(chǎn)生兩個(gè)片選信號(hào)實(shí)現(xiàn)對(duì)兩個(gè)存儲(chǔ)器交替按字(16bit) 進(jìn)行寫(xiě),讀控制邏輯對(duì)兩個(gè)存儲(chǔ)器按雙字(32bit) 同時(shí)讀,可以實(shí)現(xiàn)兩端讀寫(xiě)數(shù)據(jù)寬度的不同。
地址產(chǎn)生邏輯 ,讀寫(xiě)地址產(chǎn)生利用相同的地址產(chǎn)生邏輯,在不同的時(shí)鐘和使能信號(hào)控制下實(shí)現(xiàn)地址的增加。寫(xiě)地址產(chǎn)生器用CE1 作為允許增控制信號(hào),讀地址產(chǎn)生器用rd - en 作為允許增控制信號(hào)來(lái)實(shí)現(xiàn)地址的產(chǎn)生。
異步FIFO的FPGA實(shí)現(xiàn)
由于FIFO是一種RAM的結(jié)構(gòu),在大多數(shù)參考資料中對(duì)RAM 的描述都是建立在數(shù)組存取的基礎(chǔ)上的。在大多數(shù)EDA軟件中,對(duì)VHDL硬件描述語(yǔ)言的編譯都是通過(guò)綜合器來(lái)完成的,綜合器將VHDL轉(zhuǎn)變成物理可形成的電路格式。然而遺憾的是,綜合器對(duì)數(shù)組的綜合一般是將其轉(zhuǎn)變成寄存器的結(jié)構(gòu)。可編程器件中的寄存器個(gè)數(shù)是有限的,而FIFO是一種基于RAM的器件,需要有大量的存儲(chǔ)空間,也就會(huì)用掉大量的寄存器。所以,當(dāng)直接用數(shù)組的形式來(lái)描述FIFO結(jié)構(gòu)時(shí),綜合后的結(jié)構(gòu)都會(huì)非常龐大。
幸運(yùn)的是,XILINX FPGA器件提供的片內(nèi)的RAM可直接使用,而不必使用寄存器來(lái)構(gòu)成存儲(chǔ)空間,從而大大提高了芯片的利用率。在XILINX FPGA產(chǎn)品中,根據(jù)型號(hào)的不同,提供了兩種RAM 結(jié)構(gòu): 分布式RAM和BLOCK RAM。
分布式RAM 存在于所有的XILINX FPGA器件中,而對(duì)于BLOCK RAM,只有的SPARTAN VETEX系列中才提供。分布式RAM 存儲(chǔ)器是由CLB 中的RAM結(jié)構(gòu)實(shí)現(xiàn)的(LUT),每個(gè)CLB 多可以組成32×1或16×2 容量的RAM。
BLOCK RAM存儲(chǔ)器按列排列,左邊從0列開(kāi)始,每隔12 列CLB 排列一個(gè)BLOCK RAM存儲(chǔ)器。每個(gè)BLOCK RAM是一個(gè)完全同步的雙端口RAM,每個(gè)端口都有獨(dú)立的控制信號(hào),非常適合于FIFO器件的編寫(xiě)。
其中XCV1000E的Block SelectRAM共有96塊BLOCK RAM ,這種嵌入式的塊RAM每塊含有4096-bit存儲(chǔ)單元,用戶可以根據(jù)需要靈活配置。
單個(gè)塊RAM 所存儲(chǔ)的數(shù)據(jù)寬度可為16位,可以多個(gè)塊RAM級(jí)連以構(gòu)成更大的數(shù)據(jù)寬度,多可有64個(gè)塊級(jí)連構(gòu)成1024位的數(shù)據(jù)存儲(chǔ)器。
用兩種方法使用FPGA資源情況的比較。
由表2 可以看出,基于寄存器FIFO在綜合后用掉了VirtexTM-E器件大量的SLICES資源,而充分考慮FPGA器件結(jié)構(gòu),用其自帶的存儲(chǔ)器BLOCK RAM來(lái)設(shè)計(jì),則僅用掉1%的SLICES資源,兩廂一比較,明顯后一種設(shè)計(jì)可以充分節(jié)省現(xiàn)有的FPGA資源,設(shè)計(jì)出容量更大的存儲(chǔ)器,且更經(jīng)濟(jì)、有效。
結(jié)束語(yǔ)
由于現(xiàn)在ADC的和速度是一對(duì)矛盾,高速度難以做到高,所以采集到的數(shù)據(jù)位數(shù)較低,而后端處理器的處理位數(shù)越來(lái)越高?,F(xiàn)在的DSP一般都可以做到32位,因此,如何實(shí)現(xiàn)高速ADC和DSP的接口,提高系統(tǒng)的實(shí)時(shí)性是數(shù)據(jù)采集系統(tǒng)普遍關(guān)注的問(wèn)題。文中針對(duì)自己設(shè)計(jì)的高速數(shù)據(jù)采集通道的硬件平臺(tái),提出了一種新型的存儲(chǔ)器設(shè)計(jì)思想,輸入輸出數(shù)據(jù)寬度不同的高速FIFO緩存,并根據(jù)所選用的FPGA器件特點(diǎn),選擇了資源占用少、效率的實(shí)現(xiàn)方法,解決了高速數(shù)據(jù)采集通道數(shù)據(jù)容量大、實(shí)時(shí)性要求高的問(wèn)題。對(duì)其他高速采集系統(tǒng)同樣具有參考價(jià)值。
參考文獻(xiàn):
[1]. TMS320C6701 datasheet http://www.hbjingang.com/datasheet/TMS320C6701+_1077796.html.
[2]. ROM datasheet http://www.hbjingang.com/datasheet/ROM_1188413.html.
[3]. XCV1000E datasheet http://www.hbjingang.com/datasheet/XCV1000E_903776.html.
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- EDA技術(shù)工具鏈與全流程設(shè)計(jì)運(yùn)維指南2026/1/5 10:28:51
- PLC程序現(xiàn)場(chǎng)疑難問(wèn)題排查與深度優(yōu)化指南2025/12/24 14:36:36
- PLC程序現(xiàn)場(chǎng)調(diào)試與優(yōu)化實(shí)操指南2025/12/24 14:29:57
- 工業(yè)PLC模擬量信號(hào)采集:調(diào)理技術(shù)與抗干擾工程方案2025/12/15 14:39:08
- PLC設(shè)備如何選型2025/9/5 17:15:14
- 物聯(lián)網(wǎng)節(jié)點(diǎn)低功耗設(shè)計(jì):信號(hào)鏈中的濾波與功耗管理
- 同步整流中MOSFET的應(yīng)用要點(diǎn)
- 輸出短路對(duì)電源芯片的影響
- 連接器壽命評(píng)估與可靠性設(shè)計(jì)
- PCB電源完整性(PI)設(shè)計(jì)核心實(shí)操規(guī)范
- 多層PCB疊層設(shè)計(jì)核心實(shí)操規(guī)范
- 提高M(jìn)OSFET效率的電路優(yōu)化方法
- 電源管理IC在智能家居中的應(yīng)用
- 差分信號(hào)連接器設(shè)計(jì)要點(diǎn)
- PCB焊盤與過(guò)孔設(shè)計(jì)核心實(shí)操規(guī)范(含可焊性與可靠性保障)









