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