摘要:同步輻射光源硅像素探測器是面向北京先進光源對X 射線探測的重大技術需求所研發的新型儀器。該探測器處于輻射環境中,且多個前端電子學讀出板被放置在密封的冷卻容器中。為在不打開冷卻容器的情況下,脫離專用的USB-JTAG (Universal serial bus - joint test action group)下載電纜對現場可編程門陣列(Field programmable gate array, FPGA)進行遠端升級,本文提出了一種基于XVC (Xilinx visual cable)協議,通過以太網,利用ARM 微控制器控制FPGA 的JTAG 接口對其進行遠程更新與調試的方法。該方案附加電路少,易于拓展,同時也提高了更新可靠性。
前端探測器包含6 個前端模塊,每個模塊對應一個傳感器以及8 個讀出ASIC 芯片,芯片輸出信號通過電平轉換送到前端數據處理現場可編程門陣列(Field programmable gate array, FPGA)。FPGA 對信號進行緩沖驗證,匯總處理后通過光纖傳輸到后端DAQ (Data acquisition)系統。圖1 為前端數據處理框圖。
?
圖1 前端數據處理框圖
由于整個前端探測器模塊放置在密封的冷卻容器中,而且整個探測器處在輻射環境中,方便可靠的FPGA 遠程更新與調試方案成為電子學系統設計的重要方面。顯然傳統的基于USB-JTAG (Universalserial bus - joint test action group)更新FPGA 的方式已不再適用。
目前國內外出現的FPGA 遠程更新的方案基本分為兩大類[2]:一類是針對早期的內部沒有專用遠程升級電路的FPGA 器件,采用單片機CPLD(Complex Programmable Logic Device)、DSP (Digital Signal Processor)、ARM (Acorn RISC Machine)等作為輔助配置器件[3],配合外部Flash 和以太網芯片來實現,這些方案靈活性高但設計復雜且提高了成本;另一類是針對最新推出的FPGA 器件,其自帶了遠程升級內核或邏輯塊,只要結合外部數據配置通道,即可實現遠程更新,該方案附加電路少,節省硬件資源,但卻占用了FPGA 的內部邏輯資源,而且只適用特定型號的FPGA。另外,上述兩類方案均無法實現對FPGA 的遠程調試,還需要在PC 端開發用于遠程更新的TCP/IP 軟件,增加了設計復雜度。考慮到基于JTAG 的下載方式在FPGA 配置、Flash PROM 配置、軟/硬件調試以及硬件測試方面的重要用途,本文設計了一種基于XVC (Xilinx visual cable)協議,通過以太網,使用單芯片ARM微控制器控制FPGA 的JTAG 接口進行遠程更新調試的方案。該方案操作簡單,無需額外開發TCP/IP軟件,基于網絡的通信能夠保證足夠遠距離的靈活的可靠數據傳輸。還能對FPGA 進行遠程ChipScope調試。同時,通過簡單的JTAG 鏈路連接,可以同時完成多片FPGA 的升級與調試[4]。
1 硬件系統實現
在本設計中,ARM 微控制器通過模擬JTAG 接口的時序對FPGA 進行配置。針對多片FPGA 進行遠程更新的系統框圖如圖2。
?
圖2 系統模塊框圖
系統硬件電路主要由ARM 微控制器、JTAG 鏈路模塊、LVDS (Low-voltage differential signaling)模塊組成。ARM 選擇Wiznet 公司的W7200 開發板作為配置控制器,一端通過網絡與PC 建立連接,另一端通過外設的GPIO (General purpose input output)傳輸JTAG 配置時序。LVDS 模塊負責將JTAG 單端信號轉換為低壓差分對信號,一對一發送給待更新的FPGA。多片待更新FPGA 的JTAG 鏈通過另外一塊FPGA 開發板上的主控FPGA 芯片XC6SLX45的內部邏輯來實現,板上用9 個接插件引出FPGA的9 組I/O,分別連接W7200 和8 個LVDS 模塊。其中, LVDS 模塊和主控FPGA 開發板以子母板的形式連接。
遠程更新時,PC 端使用iMPACT 將包含配置的指令通過網絡發送給W7200,W7200 根據XVC 協議接收指令并模擬產生JTAG 時序,主控FPGA 接收該時序并通過JTAG 鏈路送入待配置FPGA,完成最終配置。
W7200 是Wiznet 公司推出的一款單芯片集成了硬件TCP/IP 協議棧的ARM Cortex-M3 微處理器[5]。內有20 KB 的SRAM 和128 KB 的Flash 以及32 KB 的以太網RX/TX 緩存,具有最高72 MHz的工作頻率,有足夠的能力進行數據處理。硬件TCP/IP 協議支持 TCP、UDP、IPv4、ICMP、ARP、IGMP、PPPoE 和以太網,這些協議在各種應用領域已經得到多年的驗證。其結構如圖3 所示。
?
圖3 W7200 結構框圖
W7200 的內核采用32 位的STM32F103CB,通過SPI 與W5200 連接,外部拓展40 個引腳,負責提供該系統的GPIO、I2C、SPI、USB 以及USART接口,集成度高卻具有很低的功耗。W5200 為該公司推出的全硬件TCP/IP 芯片,負責為該系統提供各類硬件TCP/IP 協議、MAC 以及PHY,支持8 個獨立的socket 同時工作。使用該芯片的優勢是通過簡單的socket 編程,用戶便可以輕松實現所需的以太網通信,而不必要處理復雜TCP/IP 協議棧控制。
2 軟件設計
2.1 JTAG 工作方式
JTAG是符合IEEE 1149.1 標準的國際標準測試協議[6],主要用于各類芯片的內部測試和配置。現在大多數高級器件(包括FPGA、MCU、DSP 以及CPU 等)都支持JTAG 協議。標準的JTAG 接口是4 線接口:模式選擇(TMS)、時鐘(TCK)、數據輸入(TDI)以及數據輸出(TDO)信號線。
JTAG 工作原理是在器件內部定義一個TAP(Test Access Port)測試訪問端口,外部控制器通過TAP 可以訪問芯片提供的所有數據寄存器和指令寄存器。使用JTAG 方式配置FPGA 時,通過TCK 和TMS 的值,選定一個需要訪問的數據/指令寄存器,將其連接到TDI 和TDO 之間。然后由TCK 驅動,通過TDI,把需要的數據/指令輸入到選定的數據/指令寄存器中,同時把對應的寄存器中的值通過TDO 讀出來。JTAG 接口在線編程和調試的特征改變了傳統生產流程,配置效率高,是項目研發階段必不可少的配置模式。
2.2 XVC 協議
XVC 協議是Xilinx 公司推出的一款基于TCP/IP 的虛擬線纜協議[7],它可發揮類似于 JTAG線纜的作用,允許用戶無需使用USB 線纜而是通過網絡訪問Xilinx FPGA 的JTAG 接口并對其進行高效率的遠程更新與調試。該協議還具有擴展性,可進行安全連接,允許用戶通過編程將其實現于不同的平臺。
XVC 協議內容簡單,使用方便,其基本內容可總結為如下三條指令:
1) getinfo:
該指令用于獲取XVC 服務的版本。當接收到“getinfo:”指令時,該服務將會返回如下的字符串:“ xvcServer_v1.0;
”, 其中,代表了該協議一次能移位發送的字節向量的最大長度。
2) shift:[num bits][tms vector][tdi vector]
該指令表示分別以字節向量TMS vector 和TDI vector 的形式發送num_bits 個二進制數據。其中,num_bits 是一個小端格式的整數,TMS vector和 TDI vector 代表所要發送的TMS 和TDI 的二進制數據。發送過程中,0 字節的0 比特位首先被發送出去,字節向量的長度會根據num_bits 的值向上補齊成最接近的字節數。該指令最終應該返回與TMS vector 向量同樣長度的字節向量TDO vector,代表從JTAG 接口返回的所有的TDO。同樣也是0字節的0 比特位首先被接收回來。
3) settck:[period in ns]
該指令表示將該協議通信的時鐘周期設置為period 納秒。period 同樣是一個小端格式的整數值。使用該指令最終應該返回實際的周期值。
iMPACT 和ChipScope 通過網絡訪問FPGA 的JTAG 接口的基本原理就是基于XVC 協議發送shift指令,實現JTAG-Client 的功能[8]。因此只要ARM微控制器根據shift 指令格式分析數據,便能成功模擬JTAG 時序,實現類似于JTAG-Server 的功能。JTAG-Server 與JTAG-Client 的結構如圖4。
?
圖4 JTAG 服務器與客戶端
2.3 FPGA 軟件設計
在本設計中,主控FPGA 負責實現8 片待更新FPGA 的JTAG 鏈路。一組I/O 口用于接收W7200的配置時序,另外8 組I/O 口分別連接8 個LVDS模塊的輸入。一個4 位的撥碼開關用來控制接入JTAG 鏈的FPGA 的個數。
2.4 ARM 軟件設計
本方案使用基于JTAG 的配置方式,W7200 作為配置控制器,其通用I/O 引腳PB12、PB13、PB14、PB15 分別作為JTAG 接口的TMS、TCK、TDO 和TDI。W7200 的工作流程如圖5 所示。其應用程序用C 語言開發生成,Keil MDK 進行編譯調試。主要包括W7200 初始化和指令處理兩部分。
首先,W720 初始化的內容包括:設置系統工作時鐘、中斷、GPIO/SPI、接收與發送緩存大小以及網絡設置。由于iMPACT 軟件每次發送shift 指令的最大長度為2 256 byte,故設置接收緩存區RX_BUF 大小為2 256,而發送緩存區TX_BUF 大小為1178。網絡設置包括選擇打開socket0 進行網絡通信,并設置其通信協議為TCP,端口號為5000,并為其分配IP 地址和MAC 地址。初始化完成后,W7200 會作為TCP server 打開socket0 監聽網絡上的連接請求。
?
圖5 更新流程
W7200 處理指令的過程為:從 socket0 的接收數據緩沖區接收6 個字節,若與字符串shift:對比相同,則繼續讀取4 字節的內容作為num_bits,通過計算將其轉換為字節數nr_bytes。接著按該字節數分別讀取TMS vector 和 TDI vector 到接收緩存區RX_BUF,然后通過for 循環分別將TMS vector 和TDI vector 的每一位賦值給TMS 和TDI 引腳,同時產生周期性的TCK 信號。該for 循環同時將TDO引腳上檢測到的輸入信號寫入發送緩沖區TX_BUF,循環結束后以TDO vector 發送給PC。PC 驗證收到的TDO 數據無誤,繼續通過shift 指令發送下一個數據包。由此便實現了一個完整的JTAG數據鏈路,從而實現了通過網絡將配置數據經由JTAG 接口配置給FPGA 的過程。
3 遠程更新
利用iMPACT 進行遠程更新時的軟件設置如圖6 所示。首先打開iMPACT 軟件,在邊界掃描模式下選擇菜單欄的output、Cable Setup,選擇打開Xilinx_XVC 插件,更改連接對象的IP 地址與端口號,發送連接請求給W7200。
待成功建立socket 連接后,初始化JTAG 鏈,選擇待配置FPGA 和配置文件并雙擊Program,PC端便按照shift 指令的格式發送配置指令和數據給W7200。配置結果如圖7 所示。經過驗證,為一片FPGA 成功配置大小為630 KB 的.bit 文件所需時間為21 s,配置1.41MB 的.bit 文件所需時間為48 s,配置速率均為240 KB·s?1。在相同環境下,配置不同大小的文件速率基本一致。該方案使電子學系統的遠程更新和調試變得簡單靈活。
?
圖6 iMPACT 下載線設置
?
?
圖7 成功更新FPGA
4 結語
本方案中,基于Xilinx 的XVC 協議,利用PC機與ARM 通過以太網通信,成功實現了基于JTAG接口的FPGA 的遠程更新與調試。該方案實際只需要一個ARM 單芯片,無需其它額外的附加電路。在其他系統中應用時,可直接將W7200 芯片固化在電路板上,方便可靠。隨著互聯網的發展推進,通過網絡進行硬件程序的更新將變得更加普遍。
評論
查看更多