一種基于SoPC的FPGA在線(xiàn)測試方法
2 SoPC平臺架構
SoPC系統部件組成見(jiàn)圖2,系統包括Nios II處理器、On-Chip RAM、JTAG UART、EPCS控制器,SYSID、定時(shí)器、DMA讀控制器dma_0、DMA寫(xiě)控制器dam_1,以及自定義DMA讀從外設fifo_control與自定義DMA寫(xiě)從外設ext_rdfifo_controller。NiosⅡ的復位地址為EPCS控制器,異常地址為On_ChipRAM。DMA讀控制器的讀主端口連接至自定義DMA讀從外設,寫(xiě)主端口連接至On-Chip RAM,DMA寫(xiě)控制器的讀主端口連接至On-Chip RAM,寫(xiě)主端口連接至自定義DMA寫(xiě)從外設。系統的JTAG UART主要實(shí)現JTAG接口的控制,使FPGA能夠通過(guò)JTAG接口與PC機進(jìn)行通信。
3 DMA讀、寫(xiě)從外設的設計
測試數據在DMA控制器讀數據之前是存儲在片上FIFO的,而激勵數據是通過(guò)DMA控制器寫(xiě)入片上FIFO的。然而DMA控制器數據讀、寫(xiě)主端口采用的是Avalon存儲器映射接口(Avalon Memory Mapped Interface,Avalon-MM接口),不能直接對FIFO進(jìn)行操作,Altera公司也沒(méi)有提供相應的控制器核,需要用戶(hù)自己開(kāi)發(fā)DMA讀從外設用于控制FIFO把測試數據傳送給DMA控制器,以及DMA寫(xiě)從外設用于控制FIFO接收DMA控制器的激勵數據。本文開(kāi)發(fā)的DMA讀從外設模塊結構框圖如圖3所示。本文引用地址:http://dyxdggzs.com/article/191263.htm
DMA讀從外設包括了3個(gè)端口,即控制從端口、DMA從端口以及FIFO寫(xiě)端口。DMA讀從外設的控制從端口包括3個(gè)寄存器,分別是狀態(tài)寄存器status、控制寄存器control、FIFO已使用字數寄存器usedw。NiosⅡ通過(guò)讀/寫(xiě)這些寄存器獲取此外設的狀態(tài)以及實(shí)現對此外設的控制。另外,控制端口還包含了中斷接口用于此外設向NiosⅡ發(fā)起中斷請求。DMA讀從外設產(chǎn)生中斷請求有2種情況:一是內部FIFO寫(xiě)滿(mǎn);二是收到外部測試數據的包結束信號。此時(shí),即使FIFO未寫(xiě)滿(mǎn),DMA讀從外設也會(huì )發(fā)起中斷請求,從而實(shí)現采集的測試數據的立即傳輸。DMA從端口采用帶流控制信號的AvalonMM總線(xiàn),用于實(shí)現DMA控制器的測試數據讀操作;管道接口是測試數據寫(xiě)入此外設的FIFO接口,包括數據總線(xiàn)、寫(xiě)有效信號和一些狀態(tài)信號(如FIFO寫(xiě)滿(mǎn)信號等)。DMA寫(xiě)從外設的結構與DMA讀從外設類(lèi)似,只是沒(méi)有中斷請求信號,這里不再詳述。
4 數據傳輸的NiosⅡ控制
4.1 DMA控制器的操作
Altera公司為DMA控制器提供了硬件抽象層(HAL)接口函數,使用這些函數編程需要注意的地方主要有2點(diǎn):一是要考慮到Cache數據的一致性問(wèn)題,在調用發(fā)送/接收函數之前需要調用相關(guān)函數清除數據Cache中的內容;另外一個(gè)需要注意的地方是DMA控制器的alt_dma_txchan _send()函數以及alt_dma_rxchan_prepare()函數的第3個(gè)參數表示的是請求DMA控制器發(fā)送/接收的字節數,而不是字或者雙字、四字數。
4.2 Host-Base File System
Altera公司提供的Host-Base File System組件可以使正在目標板上執行的程序讀/寫(xiě)存儲在主機上的文件,文件的數據是NiosⅡIDE通過(guò)Altera下載線(xiàn)纜與目標板進(jìn)行數據交互的。目標板上的程序可以使用ANSIC標準庫函數如fopen、fread等函數來(lái)進(jìn)行文件的操作,用戶(hù)使用Host-Base File System前必須先在NtosII IDE工程中添加這個(gè)軟件組件,而且只能運行在Debug模式下。另外,對于上傳至PC的測試數據,也可以使用設置標準輸入/輸出信息存放于主機上的某個(gè)文件(在NiosⅡIDE/Run/Run…/Common下指定)而繞開(kāi)Host-BaseFile System,但是對于主機文件數據下載給目標板的情況,對文件的操作必須添加這個(gè)組件。
4.3 測試數據讀、寫(xiě)控制
當需要采集測試數據時(shí),首先在FPGA內部用硬件語(yǔ)言編寫(xiě)模塊把測試數據存入DMA讀從外設的FIFO,然后DMA讀從外設產(chǎn)生中斷請求,NiosⅡ接到中斷請求后,首先查看中斷產(chǎn)生的原因是FIFO寫(xiě)滿(mǎn)還是數據包結束。若中斷原因是數據包結束,則NiosⅡ讀DMA讀從外設的usedw寄存器獲取FIFO已使用字數,并把這個(gè)值作為DMA控制器的傳輸長(cháng)度發(fā)起DMA傳輸;若是FIFO寫(xiě)滿(mǎn),則發(fā)起固定長(cháng)度(如FIFO深度)的DMA讀傳輸,DMA傳輸完畢后用ANSIC標準函數fwrite()把數據寫(xiě)入PC機的數據文件。
對于存儲在PC機上的數據激勵文件,NiosⅡIDE首先通過(guò)ANSIC標準函數fread()讀入NiosⅡ的數據存儲器,在查詢(xún)DMA寫(xiě)從外設中FIFO未滿(mǎn)時(shí),把數據寫(xiě)入外部的FIFO,完成數據激勵文件的傳輸。
評論