摘 要:為了解決嵌入式實時數據采集系統中,高速采集數據量大,而處理器的處理速度有限的矛盾,保證數據不丟失并提高處理器的數據吞吐率,文中提出一種基于FPGA(現場可編程門陣列) 實現的最優(yōu)FIFO(先入先出存儲器) 結構設計,它可以成倍提高數據流通速率,增加嵌入式系統的實時性。
關鍵詞:高速數據采集系統;數字信號處理器;異步先入先出存儲器;現場可編程門陣列
引 言
隨著雷達、通信和圖像處理中數字處理技術的飛速發(fā)展,現代化生產和科學研究對數據采集系統的要求更加嚴格。在嵌入式條件下,要求數據獲取的速度越來越快,精度越來越高,以致數據量及處理速度要求大增,高速ADC的出現和DSP性能的不斷提高也對系統將來的升級提出了更高要求,特別在一些特殊領域,如航空、航天等,其嵌入式系統體積小、功能強、實時性高,為了避免數據處理不及時,發(fā)生數據丟失,破壞系統可靠性,更要進一步提高系統實時性,必須研究開發(fā)高速嵌入式數據采集系統。
針對具體的任務要求,文中提出了一種通過FPGA 實現轉換接口的高速數據采集系統的系統結構,即高速A/D+大容量FPGA+高速DSP的嵌入式高速數據采集系統。模數轉換器A/D進行高速數據采集,FPGA實現對高速A/D 采集數據的存儲和控制調度,DSP 通過查詢方式訪問前端采集通道,對采集的數據進行高速處理,這種方法大大提高了DSP 可以訪問的外設數目,提高了DSP的處理能力,同時由于DSP 不直接與模數轉換芯片接口,所以ADC 芯片的升級或者替代都不會影響原來的數據采集,而且采用了時分復用方式讀取轉換完成的數據,因此這個系統數據采集速率可以達到所采用的ADC 芯片輸出的最高速率,能充分發(fā)揮DSP 算法處理功能強大、速度快的優(yōu)勢,而FPGA 設計靈活、通用性強等特點,使得整個系統具有實時性高、體積小、開發(fā)周期短、易于維護和擴展、適合于實時信號處理等多個優(yōu)點。文中結合成功開發(fā)的高速采集系統結構,提出一種基于FPGA實現的最優(yōu)FIFO構來實現高速緩存,它可以成倍提高數據流通速率,增加嵌入式系統的實時性。
高速數據采集系統結構
實時信號處理系統中,高層處理算法的特點是所處理的數據量較低層算法少,但算法的控制結構復雜,適于用運算速度高、尋址方式靈活、通信機制強大的DSP芯片來實現。特別是TI 公司的C6000 系列DSP,其峰值處理速度已達每秒數十億條指令,是當今最先進的DSP之一,非常適合于嵌入式實時系統應用。低層的信號預處理算法處理的數據量大、計算量大、對處理速度的要求高,但運算結構相對比較簡單,適于用FPGA來進行硬件實現,這樣能同時兼顧速度及靈活性。目前FPGA的容量已經跨過了百萬門級,使得FPGA成為解決系統級設計的重要選擇方案之一。它主要應用于協處理器,輔助DSP芯片完成一些計算密集型的算法。
在筆者設計的高速信息處理計算機中,高速ADC模塊、FPGA 模塊以及DSP 模塊構成了高速數據采集系統,從此結構中可以看到,DSP可以在未知ADC 控制方式的情況下,定時地訪問外設來獲得模數轉換后的數據,而大容量的FPGA協助DSP完成數據的預處理,并可以保證采集數據不丟失。
其中ADC是一個12位精度、65MHz采樣速率的高速模數轉換器,可進行高速采樣,處理器選用TI公司的TMS320C6701 。DSP 內部最高時鐘頻率可以達到167MHz,DSP讀取外部SDRAM 的最高時鐘頻率是1/2×CPU ,而讀取外部異步存儲器的時鐘頻率可以通過CE 空間控制寄存器來編程控制,其參數需要滿足一定要求,即CLK>(Setup+Strobe+Hold)>2個時鐘周期,時鐘頻率最高可達80MHz。如果DSP 不通過緩存直接與A/D相連,在采樣過程中,若A/D連續(xù)采樣數據,DSP一直處于連續(xù)的間隔取數的狀態(tài),這將占用DSP 大部分處理時間,導致DSP 不能從事其他工作。也有可能出現上一次的數據還沒有被計算機處理完,下一次采集過程就開始的情況。如果選取更高速的A/D ,更會發(fā)生數據丟失,破壞系統的可靠性。因此最好的做法是采用高速緩存來存儲采樣到的數據,再集中傳輸一批數據,保證DSP有充足的時間去處理、計算。
系統中采用容量比較大的FPGA,利用自主設計的IP核,主要協助主處理器實現數據的預處理(如FFT) 功能。為了保證設計的硬件系統體積盡可能小,因此在不增加系統的硬件負擔的前提條件下,利用系統中現有的FPGA,設計了基于FPGA 實現的異步FIFO 存儲器作為高速緩存器,它滿足前后讀寫時鐘頻率不同的硬件環(huán)境,可使采集系統設計靈活、簡單、方便,具有很強的可擴展性。FIFO 存儲器具有兩個特點:數據進出有序;輸出輸入口獨立。靈活使用FIFO ,可根據需要設計為不同速率、不同容量的數字系統,接口電路簡潔且不占用系統地址資源,系統移植或升級換代方便,而且控制簡單。
基于FPGA 實現的異步FIFO 的設計
FIFO結構設計
設計一個異步FIFO ,讀寫使能由不同的時鐘激勵來控制輸入數據和輸出數據,空/滿標志來防止數據的上溢和下溢,以及“半滿”狀態(tài)標志,在字寬和容量深度兩方面都可以擴展。讀寫操作自動訪問存儲空間連續(xù)的存儲單元,讀出的數據和寫入的數據順序相同,不需要額外的地址信息。首先,由復位信號清空存儲器數據;然后,在寫使能和寫時鐘控制下向存儲器中寫數據,當FIFO寫半滿,half-full將有效(同步于寫時鐘) ,觸發(fā)C6701中斷,C6701中斷服務程序通過DMA將FIFO中的數據取走并寫入C6701片內數據存儲器或SDRAM中去,FIFO中的數據空間存滿后,full信號有效,外部設備就不再向FIFO中寫數據了;同理,在讀時鐘和讀使能控制下從存儲器中讀數據時,若FIFO中的數據被外部設備取空了,則empty 信號有效,外部設備停止對FIFO的讀取。
本系統數據寬度根據需要,兩個端口可以設計為兩端是12位、16位、32位。
一般常用的FIFO設計,都是兩端數據寬度相同的FIFO 結構。這很容易在XILINX公司提供的IP核中找到,或者用行為級語言描述得到。
但是,在筆者設計的硬件平臺下,這些設計有局限性,分析如下:
因為TI公司的DSP C6701的EMIF支持32bit寬度的ASRAM,SDRAM和SBSRAM等存儲器,只有CE1空間支持16bit和8bit的ROM接口,本系統設計的FPGA是CE2和CE3空間尋址,物理接口是32bit。那么如果FIFO讀寫端口設計為12位,DSP接收的32位數據僅低12 位有效,而高20位是無效數據,一方面,這將大大降低DSP 讀取數據的吞吐率,另一方面由于需要處理無效數據而降低系統的實時性。
為了改進系統的性能,提高系統的實時性,可以采取兩個措施:一是設計整字節(jié)寬度的FIFO端口,基于前端A/D的要求,最佳的數據寬度是16位;二是設計寬位數端口的FIFO,提高數據的吞吐率,基于后端DSP的要求,最佳的數據寬度是32位。由于C6701可以對數據存儲器進行8bit/16bit/32bit的數據訪問,數據從FIFO中讀取數據到DSP 的數據存儲器后,可以根據需要決定是按字節(jié)、字、還是雙字處理。
針對筆者的硬件系統,提出了一種基于FPGA的新型FIFO結構,輸入數據寬度與輸出數據寬度不同,即輸入為16位、輸出為32位的異步FIFO。分析系統的數據吞吐率:由于A/D數據輸入口的速度固定,數據按采樣頻率輸入FIFO ,因此輸入數據的時間是不變的,而C6701一次訪問可以取走兩個有效數據,在相同數據量的條件下明顯降低數據讀取時間,大大增加了DSP讀取數據的吞吐率,提高系統實時處理時間。
如果輸入數據的高4 位不接地,則傳給DSP的數據高4位是任意值,所以取完數后要將取得的數進行預處理,這將降低DSP 的實時處理時間。因此在設計硬件電路時將FIFO的datain(15:12) 硬件置0,避免了DSP的軟件復位,省去DSP對數據的預處理過程,從而提高了DSP的實時處理能力。
筆者設計的FIFO是利用兩個16位RAM并行連接,輸入數據在寫控制模塊的調度下依次寫入兩個RAM中,兩個RAM的輸出經過緩存器直接與DSP相應數據線相連,保證了32位的數據寬度,內部實現如圖3所示,其中的寫控制邏輯實現 。其中寫控制邏輯分別產生兩個片選信號實現對兩個存儲器交替按字(16bit) 進行寫,讀控制邏輯對兩個存儲器按雙字(32bit) 同時讀,可以實現兩端讀寫數據寬度的不同。
地址產生邏輯 ,讀寫地址產生利用相同的地址產生邏輯,在不同的時鐘和使能信號控制下實現地址的增加。寫地址產生器用CE1 作為允許增控制信號,讀地址產生器用rd - en 作為允許增控制信號來實現地址的產生。
異步FIFO的FPGA實現
由于FIFO是一種RAM的結構,在大多數參考資料中對RAM 的描述都是建立在數組存取的基礎上的。在大多數EDA軟件中,對VHDL硬件描述語言的編譯都是通過綜合器來完成的,綜合器將VHDL轉變成物理可形成的電路格式。然而遺憾的是,綜合器對數組的綜合一般是將其轉變成寄存器的結構??删幊唐骷械募拇嫫鱾€數是有限的,而FIFO是一種基于RAM的器件,需要有大量的存儲空間,也就會用掉大量的寄存器。所以,當直接用數組的形式來描述FIFO結構時,綜合后的結構都會非常龐大。
幸運的是,XILINX FPGA器件提供的片內的RAM可直接使用,而不必使用寄存器來構成存儲空間,從而大大提高了芯片的利用率。在XILINX FPGA產品中,根據型號的不同,提供了兩種RAM 結構: 分布式RAM和BLOCK RAM。
分布式RAM 存在于所有的XILINX FPGA器件中,而對于BLOCK RAM,只有最新的SPARTAN VETEX系列中才提供。分布式RAM 存儲器是由CLB 中的RAM結構實現的(LUT),每個CLB 最多可以組成32×1或16×2 容量的RAM。
BLOCK RAM存儲器按列排列,左邊從0列開始,每隔12 列CLB 排列一個BLOCK RAM存儲器。每個BLOCK RAM是一個完全同步的雙端口RAM,每個端口都有獨立的控制信號,非常適合于FIFO器件的編寫。
其中XCV1000E的Block SelectRAM共有96塊BLOCK RAM ,這種嵌入式的塊RAM每塊含有4096-bit存儲單元,用戶可以根據需要靈活配置。
單個塊RAM 所存儲的數據寬度最高可為16位,可以多個塊RAM級連以構成更大的數據寬度,最多可有64個塊級連構成1024位的數據存儲器。
用兩種方法使用FPGA資源情況的比較。
由表2 可以看出,基于寄存器FIFO在綜合后用掉了VirtexTM-E器件大量的SLICES資源,而充分考慮FPGA器件結構,用其自帶的存儲器BLOCK RAM來設計,則僅用掉1%的SLICES資源,兩廂一比較,明顯后一種設計可以充分節(jié)省現有的FPGA資源,設計出容量更大的存儲器,且更經濟、有效。
結束語
由于現在ADC的精度和速度是一對矛盾,高速度難以做到高精度,所以采集到的數據位數較低,而后端處理器的處理位數越來越高?,F在的DSP一般都可以做到32位,因此,如何實現高速ADC和DSP的接口,提高系統的實時性是數據采集系統普遍關注的問題。文中針對自己設計的高速數據采集通道的硬件平臺,提出了一種新型的存儲器設計思想,輸入輸出數據寬度不同的高速FIFO緩存,并根據所選用的FPGA器件特點,選擇了資源占用最少、效率最高的實現方法,解決了高速數據采集通道數據容量大、實時性要求高的問題。對其他高速采集系統同樣具有參考價值。
參考文獻:
[1].TMS320C6701 datasheethttp://www.dzsc.com/datasheet/TMS320C6701+_1077796.html.
[2].ROMdatasheethttp://www.dzsc.com/datasheet/ROM_1188413.html.
[3].XCV1000Edatasheethttp://www.dzsc.com/datasheet/XCV1000E_903776.html.
來源:零八我的愛0次