裴峰,吳健,魏海潮,王珺楠
(中北大學 信息與通信工程學院,山西 太原,030051)
存儲測試是指在對被測對象無影響或在允許范圍的條件下,在被測體內置入微型數據采集與存儲測試儀,現場實時完成信息的快速采集與記憶,事后回收的記錄儀器[1]。存儲測試技術在載人航天測試、爆炸沖擊波測試、炮彈膛壓測試等諸多領域應都有廣泛的應用[2],目前大多數的存儲測試系統都是由CPLD和單片機配合工作來實現,由于系統包含的器件較多這為系統的設計和調試帶來了很大的難度,而且最終的系統在穩定性和可靠性都較差[3]。為了解決上述問題本文設計了一種基于單片FPGA的存儲測試系統。為了實現整個系統由單片FPGA來控制,在FPGA內部運用有限狀態機設計方法設計了一個針對FT245RL的數據傳輸控制器實現了過去由單片機和CPLD配合才能完成的功能。
圖1給出了基于FPGA的存儲測試系統總體結構圖,本系統采用XILINX公司的XC4VSX25 FPGA作為系統核心控制單元、采用AD公司的AD7492作為系統模數轉換器,采用三星公司的k9k2G8U0M FLASH作為系統數據存儲介質(存儲空間滿足實際需要),采用FT245RL芯片作為系統板與上位機鏈接的通信接口芯片[4-5]。
系統的總體工作流程為:傳感器輸出的模擬信號經過調理電路調整到AD可采范圍后AD轉換器對其進行轉換,FPGA提供AD轉換的時鐘,在一次模數轉換周期內,AD轉換的12位的數據分高6位和低6位存儲到FPGA內部的FIFO中,最后在FPGA的控制下將FIFO中的數據存入FLASH。當整個采集完成后,在需要的時候就可以通過USB接口將Flash中的數據傳輸到上位機來顯示和分析。

圖1 基于FPGA的存儲測試系統結構圖
目前,USB有兩個規范,即USB1.1和USB2.0。USB1.1是目前較為普遍的USB規范,其低速方式的傳輸速率為1.5Mbps,高速方式的傳輸速率為12Mbps(1.5MByte/s)。USB2.0規范是由USB1.1規范演變而來的,其理想傳輸速率為480Mbps(60MByte/s),足以滿足大多數外設的速率要求[6]。USB是一種復雜的傳輸協議,這給USB接口的設計和開發帶來很大難度。文獻[7-8]的研究表明,在應用層對數據采集系統進行USB接口設計時,可以選擇集成USB協議的專用芯片進行二次開發應用,從而降低了系統開發難度。鑒于此,通過查閱大量資料,本設計選用美國FTDI公司的FT245RL芯片進行USB接口的設計。
圖2給出了以FPGA和FT245RL為核心器件的USB接口原理框圖。圖2中,Flash是集成于存儲測試系統中的數據存儲器,測試過程結束后,Flash中存滿了測試數據。FPGA在USB接口中起到橋梁的作用,其I/O端口37-44與Flash的8bit數據位相連,作為數據總線。同樣,FPGA的I/O端口97-104與FT245RL中的8bit數據位相連,成為另外一條數據總線。Flash的片選端CE,命令控制端CLE, 地址控制端ALE,寫控制端WR,讀控制端RE分別和FPGA的I/O端口56、54、55、61、60相連接,而FT245RL中4個與數據傳輸有關的控制信號則與FPGA的I/O端口90-93相連。控制信號的方向參照圖2中箭頭方向。

圖2 USB接口原理框圖
本文采用有限狀態機的方法來設計FT245RL控制器,其狀態轉換和控制輸出如圖3所示。在圖3中,系統上電復位后進入初始化狀態,然后CPLD就開始不斷的去讀取FT245RL的RXF端口并判斷其是否為零,當RXF=0時就說明上位機有數發過來然后系統進入讀數狀態,當讀取的數據和上位機軟件給出的數據(這里設定這個數為85)一致時系統就開始不斷讀取FT245RL的TXE端口并判斷其是否為零,當TXE=0時就說明可以向FT245RL的FIFO中寫數了,進入寫數狀態首先應寫入和上位機約定的數據(這里設定為88)從而表示上位機發出的數據已經正確的收到上位機和測試系統已經建立起正確的通信,接下來就可以循環讀取Flash中的數據并依據FT245RL的TXE端口依次將數據寫入FT245RL的FIFO中。

圖3 FT245RL控制器狀態機狀態圖
計算機端程序采用VB6.0編寫,通過調用FTDI提供的動態鏈接庫,進行讀、寫函數等的調用與操作。當FT245RL初始化完成后,就可以進行數據發送和接收。發送數據時,將數據賦值到發送數組,調用發送函數FT_Write,然后判斷函數返回值是否等于1。若為1,說明數據發送成功;若不為1,則需要重新發送。接收數據時,首先需要設定接收超時時間。然后,調用FT_Getstatus函數讀取接收緩沖區的狀態,判斷接收隊列中是否有數以及是否滿足設定的讀取字節數閾值。若滿足讀取條件,則調用讀數函數FT_Read,讀取當前緩沖區的數據并存入數組;若不滿足讀取條件,則一直等待,直到滿足讀取條件或產生接收超時。若產生超時,程序自動跳出接收程序,避免陷入死循環。接收流程如圖4所示。

圖4 上位機接收流程圖
為了驗證本數據傳輸控制器及測試系統的可行性,系統被用來采集了一路最大值5V,最小值0V,頻率為100Hz的正弦信號,如圖5(a)所示。測試系統在采樣頻率為1MHz的情況下,測試結果在FT245RL數據傳輸控制器的控制下通過USB接口傳輸到上位機的結果如圖5(b)所示。從圖5(b)可以看出一個周期內采樣點數為10000,這正好吻合了測試系統的采樣頻率,測試結果幅值和數據量上也和被測信號一致,而且數據曲線平滑噪聲較小。

圖5 正弦波測試結果
在FPGA內部準確的實現針對FT245RL的數據傳輸控制器從而使得整個存儲測試系統在一片FPGA的控制下得以實現,經過實驗證明該存儲測試系統實現簡單,調試容易、性能穩定可靠、最高采樣率可達1M/s。
[1]何瑛,朱明武,李永新.膛內多路瞬態信號存儲測試技術[J].儀器儀表學報,2001,22(3):134-136.
[2]文豐,喬建忠,李艷.高過載存儲測試中抗過載技術的研究[J].傳感器與微系統,2009, 28(9):31-33.
[3]董健,蔣建偉,萬麗珍.CPLD與單片機在超壓存儲測試系統中的應用[J].測試技術學報,2005,19(1):44-47.
[4]張海峰.基于FPGA的數據采集系統的SOPC實現[D].鄭州:鄭州大學,2005.
[5]鐘雷.基于FPGA的通用存儲器控制器的系統設計與實現[D].上海:復旦大學,2009.
[6]戴向華.USB原理及其在數據采集中的應用[J].計算機工程與設計,2004,25(5):840-843.
[7]吳振宇,常玉寶,馮林.基于FPGA和USB2.0的高速數據采集系統[J].儀器儀表學報,2006,27(z1):125-127.
[8]蘇彥鋒,衣曉峰,周榮政,等.USB外設接口的FPGA[J].儀器儀表學報,2002,22(19):125-127.