本文提出了一種基于SoPC的FPGA在線測試方法,,是對現(xiàn)有FPGA在線測試方法的一種有效的補充。
1 在線測試數(shù)據(jù)操作流程
基于SoPC的FPGA在線測試方法的數(shù)據(jù)操作流程如圖1所示。如果用戶需要采集FPGA的測試數(shù)據(jù)并且上傳至PC機,,則用戶首先要將被測試數(shù)據(jù)寫入DMA讀從外設,,然后系統(tǒng)自動啟動DMA控制器,將數(shù)據(jù)送入Nios II的數(shù)據(jù)存儲器,。再由JTAG UART控制器經JTAG接口上傳至Nios II IDE(NiosⅡIntegrated Development Environment,,Nios II開發(fā)環(huán)境),Nios II IDE將接收到的數(shù)據(jù)寫入測量數(shù)據(jù)存儲文件,,從而完成了FPGA測試數(shù)據(jù)的上傳,。如果用戶需要將PC機中的激勵數(shù)據(jù)文件下載至FPGA,則系統(tǒng)首先在Nios II IDE中通過Host-Based File System讀出激勵文件數(shù)據(jù),,然后由JTAG接口經JTAG UART控制器下載至Nios II處理器的數(shù)據(jù)存儲器,,Nios II發(fā)起DMA寫傳輸把數(shù)據(jù)從數(shù)據(jù)存儲器搬運至DMA寫從外設并寫入FPGA片上FIFO,從而完成了激勵數(shù)據(jù)的下載,。
2 SoPC平臺架構
SoPC系統(tǒng)部件組成見圖2,系統(tǒng)包括Nios II處理器,、On-Chip RAM,、JTAG UART、EPCS控制器,,SYSID,、定時器、DMA讀控制器dma_0,、DMA寫控制器dam_1,,以及自定義DMA讀從外設fifo_control與自定義DMA寫從外設ext_rdfifo_controller。NiosⅡ的復位地址為EPCS控制器,,異常地址為On_ChipRAM,。DMA讀控制器的讀主端口連接至自定義DMA讀從外設,寫主端口連接至On-Chip RAM,,DMA寫控制器的讀主端口連接至On-Chip RAM,,寫主端口連接至自定義DMA寫從外設。系統(tǒng)的JTAG UART主要實現(xiàn)JTAG接口的控制,,使FPGA能夠通過JTAG接口與PC機進行通信,。
3 DMA讀、寫從外設的設計
測試數(shù)據(jù)在DMA控制器讀數(shù)據(jù)之前是存儲在片上FIFO的,,而激勵數(shù)據(jù)是通過DMA控制器寫入片上FIFO的,。然而DMA控制器數(shù)據(jù)讀、寫主端口采用的是Avalon存儲器映射接口(Avalon Memory Mapped Interface,,Avalon-MM接口),,不能直接對FIFO進行操作,Altera公司也沒有提供相應的控制器核,需要用戶自己開發(fā)DMA讀從外設用于控制FIFO把測試數(shù)據(jù)傳送給DMA控制器,,以及DMA寫從外設用于控制FIFO接收DMA控制器的激勵數(shù)據(jù),。本文開發(fā)的DMA讀從外設模塊結構框圖如圖3所示。
DMA讀從外設包括了3個端口,,即控制從端口,、DMA從端口以及FIFO寫端口。DMA讀從外設的控制從端口包括3個寄存器,,分別是狀態(tài)寄存器status,、控制寄存器control、FIFO已使用字數(shù)寄存器usedw,。NiosⅡ通過讀/寫這些寄存器獲取此外設的狀態(tài)以及實現(xiàn)對此外設的控制,。另外,控制端口還包含了中斷接口用于此外設向NiosⅡ發(fā)起中斷請求,。DMA讀從外設產生中斷請求有2種情況:一是內部FIFO寫滿;二是收到外部測試數(shù)據(jù)的包結束信號,。此時,即使FIFO未寫滿,,DMA讀從外設也會發(fā)起中斷請求,,從而實現(xiàn)采集的測試數(shù)據(jù)的立即傳輸。DMA從端口采用帶流控制信號的AvalonMM總線,,用于實現(xiàn)DMA控制器的測試數(shù)據(jù)讀操作;管道接口是測試數(shù)據(jù)寫入此外設的FIFO接口,,包括數(shù)據(jù)總線、寫有效信號和一些狀態(tài)信號(如FIFO寫滿信號等),。DMA寫從外設的結構與DMA讀從外設類似,,只是沒有中斷請求信號,這里不再詳述,。
4 數(shù)據(jù)傳輸?shù)腘iosⅡ控制
4.1 DMA控制器的操作
Altera公司為DMA控制器提供了硬件抽象層(HAL)接口函數(shù),,使用這些函數(shù)編程需要注意的地方主要有2點:一是要考慮到Cache數(shù)據(jù)的一致性問題,在調用發(fā)送/接收函數(shù)之前需要調用相關函數(shù)清除數(shù)據(jù)Cache中的內容;另外一個需要注意的地方是DMA控制器的alt_dma_txchan _send()函數(shù)以及alt_dma_rxchan_prepare()函數(shù)的第3個參數(shù)表示的是請求DMA控制器發(fā)送/接收的字節(jié)數(shù),,而不是字或者雙字,、四字數(shù)。
4.2 Host-Base File System
Altera公司提供的Host-Base File System組件可以使正在目標板上執(zhí)行的程序讀/寫存儲在主機上的文件,,文件的數(shù)據(jù)是NiosⅡIDE通過Altera下載線纜與目標板進行數(shù)據(jù)交互的,。目標板上的程序可以使用ANSIC標準庫函數(shù)如fopen、fread等函數(shù)來進行文件的操作,,用戶使用Host-Base File System前必須先在NtosII IDE工程中添加這個軟件組件,,而且只能運行在Debug模式下。另外,,對于上傳至PC的測試數(shù)據(jù),,也可以使用設置標準輸入/輸出信息存放于主機上的某個文件(在NiosⅡIDE/Run/Run…/Common下指定)而繞開Host-BaseFile System,但是對于主機文件數(shù)據(jù)下載給目標板的情況,對文件的操作必須添加這個組件,。
4.3 測試數(shù)據(jù)讀,、寫控制
當需要采集測試數(shù)據(jù)時,首先在FPGA內部用硬件語言編寫模塊把測試數(shù)據(jù)存入DMA讀從外設的FIFO,,然后DMA讀從外設產生中斷請求,,NiosⅡ接到中斷請求后,首先查看中斷產生的原因是FIFO寫滿還是數(shù)據(jù)包結束,。若中斷原因是數(shù)據(jù)包結束,,則NiosⅡ讀DMA讀從外設的usedw寄存器獲取FIFO已使用字數(shù),并把這個值作為DMA控制器的傳輸長度發(fā)起DMA傳輸;若是FIFO寫滿,,則發(fā)起固定長度(如FIFO深度)的DMA讀傳輸,,DMA傳輸完畢后用ANSIC標準函數(shù)fwrite()把數(shù)據(jù)寫入PC機的數(shù)據(jù)文件。
對于存儲在PC機上的數(shù)據(jù)激勵文件,,NiosⅡIDE首先通過ANSIC標準函數(shù)fread()讀入NiosⅡ的數(shù)據(jù)存儲器,,在查詢DMA寫從外設中FIFO未滿時,把數(shù)據(jù)寫入外部的FIFO,,完成數(shù)據(jù)激勵文件的傳輸,。
5 系統(tǒng)驗證
5.1 系統(tǒng)測試條件
本次測試中FPGA芯片為Altera公司的CycloneIII EP3C120F484C8,系統(tǒng)時鐘為50 MHz,,使用的JTAG傳輸線纜為USB Blaster,NiosⅡ為經濟模式,,自定義DMA讀,、寫外設內部FIFO均為2 K×16 b,NiosⅡ數(shù)據(jù)存儲器On-Chip RAM大小為60 KB,,使用Host-Base File System組件,,在NiosⅡ工程屬性中選中“Reduced device drivers”,經過NiosⅡIDE編譯后代碼占用程序存儲空間為50 KB,。
5.2 測試數(shù)據(jù)傳輸測試
在FPGlA目標系統(tǒng)測試數(shù)據(jù)上傳至PC的測試中,,在FPGA內部用verilog語言編寫了一個數(shù)據(jù)源模塊,數(shù)據(jù)源輸出為2~8 000的計數(shù)值,,數(shù)據(jù)寬度為16位,,在數(shù)據(jù)8 000輸出時,數(shù)據(jù)包結束信號有效,,這樣既可以驗證FIFO滿中斷的情況又可以驗證數(shù)據(jù)包結束中斷的情況,。測試數(shù)據(jù)源首、尾部的SignalTapⅡ測試波形如圖4所示,。在NiosⅡIDE,,通過把pritnf()函數(shù)輸出的調試信息自動存放到一個文本文件中,刪去首、尾的調試信息即得到有效數(shù)據(jù)文件,。文本文件數(shù)據(jù)結果如圖5所示,,其中數(shù)字后面的小黑塊代表換行符,從結果看,,此方法實現(xiàn)了測試數(shù)據(jù)的正確上傳(注:由于測試數(shù)據(jù)太長,,文中只給出數(shù)據(jù)的首部和尾部的截圖)。
5.3 激勵數(shù)據(jù)傳輸測試
在激勵數(shù)據(jù)傳輸測試時激勵數(shù)據(jù)為存儲于PC機上的計數(shù)值為1~2048二進制流文件,,數(shù)據(jù)寬度為16位,,通過加入Host-Base File System組件調用fopen()與fread()函數(shù)完成數(shù)據(jù)的讀出,當查詢DMA寫從設備未滿時發(fā)起DMA傳輸,,圖6是外部邏輯讀DMA寫從設備中FIFO的Signal Tap II測試波形圖,。從圖中的結果看,數(shù)據(jù)讀出為1~2 048,,實現(xiàn)了激勵數(shù)據(jù)的正確下載,。
6 結語
本文提出了一種基于SoPC的FPGA在線測試方法,這種在線測試方法可以把存儲在FPGA片上FIFO的測試數(shù)據(jù)通過JTAG接口上傳至PC機并寫入文件,,也可以把存儲在PC機上的激勵文件通過JTAG接口下載到FPGA的片上FIFO,。相比Altera已有的在線測試方法,此方法采用DMA操作,,具有較高的數(shù)據(jù)吞吐量;采用NiosⅡ控制測試/激勵數(shù)據(jù)的傳輸,,無需手動操作;采集過程的控制由C語言編寫,簡單易用;使用PC機上的激勵文件或者把測試數(shù)據(jù)存儲為PC機上的文件,,可以使用其它分析工具(如Matlab)產生激勵文件或者對測試數(shù)據(jù)文件進行分析;另外,,此方法對測試數(shù)據(jù)的采樣深度沒有限制。因此,,這種在線測試方法具有廣泛的應用前景,。