王濤,錢昀瑩,張鉚,田旭
(1.中國電子科技集團公司第五十八研究所,江蘇無錫 214062;2.中國礦業大學(北京)機械與電氣工程學院,北京 100083)
數字信號處理器(Digital Signal Processor,DSP)內部采用程序和數據分開的哈佛結構,具有專門的硬件乘法器,采用流水線操作,可以快速實現各種數字信號處理算法;現場可編程邏輯門陣列(Field Programmable Gate Array,FPGA)由可編程邏輯塊、數字時鐘管理、輸入輸出等模塊組成,具有可編程靈活性高、開發周期短以及并行計算效率高的特點。鑒于DSP 和FPGA 的上述優點,DSP+FPGA 架構的實時信號處理系統已廣泛應用于網絡通信、數據中心、汽車電子、人工智能等領域[1-2]。
在DSP 和FPGA 軟件調試過程中,可以通過JTAG 接口將應用程序燒寫至相應的FLASH 或PROM中。然而,當產品使用出現問題或者產品功能升級時,需要打開產品外殼,通過電路板上JTAG 接口連接仿真器才能對DSP 和FPGA 軟件進行升級。由于一些產品已經交付使用或經過特殊工藝處理,不具備拆卸外殼進行軟件升級的條件。目前,DSP 和FPGA 產品軟件在線升級得到了廣泛的研究[3-16],DSP可以通過固化在內部BOOT ROM 中的引導程序(Bootloader)選擇不同的BOOT 模式,實現DSP 軟件在線升級[3-4]。針對FPGA 軟件在線升級[5-20],文獻[5]利用USB2.0 芯片CY7C68013A 設計了一種FPGA 程序在線升級的方法;文獻[6]通過1553B 總線實現了對FPGA 的在線升級;文獻[7]設計并實現了基于UDP 的FPGA 遠程升級系統。
然而,在DSP+FPGA 架構的嵌入式系統中利用DSP 在線升級FPGA 的方法并未見文獻論述。基于此,該文提出了一種基于TMS320F28335 的FPGA 軟件在線升級方法。該方法通過上位機將FPGA 代碼發送給DSP,DSP 通過GPIO 模擬符合IEEE1194.1 標準的JTAG 時序,完成對配置PROM 芯片的擦除、編程和校驗操作,實現FPGA 軟件的在線升級。實驗結果表明:該方法具有較好的可行性、穩定性和可靠性,可以實現DSP+FPGA 架構下不拆產品就可升級FPGA 軟件的目的。
DSP+FPGA 架構下FPGA 軟件在線升級原理框圖如圖1 所示,主要由上位機和目標產品兩部分組成。上位機主要負責與DSP 通信,實現命令和數據的發送與接收。目標產品中DSP 芯片型號為TI 公司C2000 系列TMS320F28335,FPGA 芯片型號為Xilinx公司Virtex4 系列XC4VLX60-10FFG668,配置PROM芯片型號為XCF32PVOG48C。

圖1 在線升級原理框圖
上位機通過RS422 串口發送FPGA 軟件給DSP,DSP 接收到數據后將其存放在片內SRAM 中。DSP通過GPIO 模擬標準的JTAG 時序,將SRAM 中存放的數據燒寫到32P 芯片中,重復上述操作,直至FPGA 軟件燒寫完成。
FPGA 軟件燒寫完成后,上位機通過RS422 串口發送校驗命令,DSP 讀取32P 芯片中的數據并回傳給上位機,上位機進行數據校驗。若數據校驗全部正確,表明FPGA 軟件在線升級成功,否則重新執行在線升級過程。
DSP+FPGA 嵌入式系統硬件設計原理圖如圖2所示,DSP 與FPGA 通過XINTF 總線完成數據交互傳輸。將FPGA 的M0 和M1 管腳上拉、M2 管腳下拉,配置編程模式為主SelectMAP 模式,通過并行總線進行配置數據傳輸,數據寬度為8 位。JTAG 接口、FPGA和32P 采用菊花鏈的方式進行連接,即TMS、TCK 信號分別連在一起,JTAG 接口的TDI 信號與32P 的TDI 信號相連,32P 輸出的TDO 信號作為FPGA TDI的輸入,FPGA 的TDO 與JTAG 接口的TDO 相連,形成完整的回路。DSP 通過SCIA 串口與上位機進行數據收發,利用GPIO0~3 分別模擬JTAG 接口的TDO、TMS、TCK 和TDI 信號。

圖2 硬件原理圖
在線升級軟件包括上位機軟件和DSP 升級軟件,在線升級軟件總體工作流程如圖3 所示。

圖3 升級流程圖
首先,打開上位機軟件,設置串口號和串口波特率并打開串口,加載FPGA 待燒寫的BIN 格式軟件。上位機通過RS422 串口給DSP 發送升級命令,DSP讀取32P 芯片的IDCODE,若IDCODE 不匹配,則退出在線升級;若讀取的IDCODE 值為0xF5059093,表示匹配成功,繼續執行32P 芯片的編程使能操作,包括使能PROGRAM 操作以及UNLOCK、ERASE 用戶寄存器和數據寄存器等。然后,上位機給DSP 發送BIN 文件數據,DSP 接收到數據后將其存放在片內SRAM 中,通過GPIO0~3 模擬標準的JTAG 時序,將SRAM 中存放的數據燒寫到32P 芯片中,并回傳軟件燒寫進度給上位機。重復上述操作,直到FPGA 軟件全部燒寫完成。燒寫完成后,執行32P 芯片的編程禁止操作,結束在線升級。
上位機軟件使用C#語言完成界面開發,界面如圖4 所示,包含串口設置、升級命令、BIN 文件選擇以及升級進度等部分。用戶通過操作上位機進行FPGA 軟件在線升級,上位機對FPGA 軟件進行數據預處理,并通過RS422 串口與DSP 建立連接和數據交互,部分握手協議如表1 所示。

表1 部分握手協議

圖4 上位機界面
3.3.1 SVF文件解析
串行矢量格式(Serial Vector Format,SVF)是一種標準文件格式,用來記錄JTAG 操作,包括JTAG 指令代碼、指令寄存器(Instruction Register,IR)和數據寄存器(Data Register,DR)的長度及內容等,其中IR的長度通常大于2 個比特。SVF 文件可以利用Xilinx iMPACT 軟件直接生成,文件內容為ASCII 文本。
所有JTAG 操作都通過32P 的測試訪問端口(Test Access Port,TAP)進行控制,其中TAP 控制器是一個16 狀態的有限狀態機,如圖5 所示。TAP 控制器包含了TMS、TDI、TDO 和TCK 四種信號,這些信號通過TAP 控制器與32P 進行數據交互。所有JTAG 操作是將數據移入或者移出IR 和DR 寄存器,通過SHIFT-IR 狀態訪問IR 寄存器,通過SHIFT-DR狀態訪問DR 寄存器。在SHIFT-IR 和SHIFT-DR 狀態期間,在TCK 的上升沿采樣TDI 輸入信號,在TCK的下降沿更新TDO 輸出值。

圖5 有限狀態機
利用Xilinx iMPACT 軟件對圖2 硬件原理圖中的32P 芯片進行編程操作,生成了完整的SVF 文件。當執行SHIFT-IR 命令時,需要將TIR、SIR 和HIR 的數值和長度按照TIR+SIR+HIR 的順序合并為新的數值和長度;當執行SHIFT-DR 命令時,需要將TDR、SDR和HDR 的數值和長度按照TDR+SDR+HDR 的順序合并為新的數值和長度,SVF 文件解析后的部分指令代碼和長度如表2 所示。

表2 JTAG指令
3.3.2 DSP軟件開發
DSP 系統工作頻率設置為150 MHz,GPIO0 配置為輸入,GPIO1~3 配置為輸出,GPIO28 和29 配置為串口SCIA,并進行相應的初始化操作。根據圖5 所示TAP 控制器有限狀態機的操作順序,編寫了TAP復位、SIR 數據發送、SDR 數據發送等底層驅動接口函數。根據SVF 文件及解析后的指令代碼和長度,編寫了32P 擦除、編程打開、編程禁止等驅動函數,其中32P 擦除驅動代碼如下:
DSP 通過SCIA 串口與上位機進行數據收發,并利 用GPIO0~3 分別模擬JTAG 接口的TDO、TMS、TCK 和TDI 信號,實現對32P 的擦除、編程和校驗操作,其中對32P 編程操作的軟件流程如圖6 所示。

圖6 32P編程軟件流程
執行32P 編程操作時,上位機首先給DSP 發送0x32 和0xCD 兩個字節的數據,若DSP 接收到正確數據,則執行32P 編程使能操作并回復ACK 數據,否則回復NACK 數據。回復ACK 數據后,DSP 等待接收0x31 和0xCE 兩個字節的數據,若接收正確,則回復ACK 數據并繼續接收4 個字節的起始地址和一個字節的校驗值。如果接收到的地址有效且異或校驗結果正確,則DSP 回復ACK 數據并重復執行如下操作:
1)獲取待接收數據的字節數N;
2)接收N個字節的數據以及校驗值;
3)將接收的數據寫入32P 中。
上位機發送完FPGA 軟件所有數據后,發送0x33 和0xCC 兩個字節數據,若DSP 接收正確,則執行32P 編程禁止操作并回復ACK 數據,結束32P 編程操作。
為了驗證基于TMS320F28335 的FPGA 軟件在線升級方法的可行性,參照圖2 所示硬件原理圖搭建了系統實物。將DSP 在線升級程序固化至TMS320F28335 芯片的片內FLASH 中,上電后自動執行升級程序。設計了一個調試成功的FPGA 軟件,其功能為LED 指示燈以1 Hz 的頻率閃爍。通過在線升級的方式更新配置芯片32P 中的軟件,若系統重新上電后FPGA 運行狀態與測試程序功能一致,則表明軟件在線升級成功。
在圖4 所示上位機軟件中設置串口號為COM1、串口波特率為115 200 bps 并打開串口,加載LED 測試軟件,將所選LED 軟件通過TMS320F28335 芯片燒寫至配置芯片32P 中,燒寫32P 的同時利用邏輯分析儀軟件采集TMS、TCK、TDI、TDO 四種信號的數據。
通過對比LED 測試軟件BIN 文件和采集結果的數據,可以看出LED 測試軟件傳輸無誤。升級結束后,斷電重啟FPGA,FPGA 自動加載32P 中更新后的程序,可以看到電路板上LED 指示燈以1 Hz 的頻率閃爍,說明LED 測試軟件已成功燒寫至配置芯片32P 中。
為進一步驗證所提升級方法的穩定性和可靠性,多次修改LED 測試軟件,改變LED 指示燈閃爍的頻率,執行上述升級流程。大量實驗結果顯示,FPGA 重新上電后從32P 加載新程序,每次的運行狀態均與測試軟件功能一致,表明基于TMS320F28335的FPGA 軟件在線升級方法具有較好的可行性、穩定性和可靠性。
由于在DSP+FPGA 架構的嵌入式系統中利用DSP 在線升級FPGA 的方法未見文獻論述,提出了一種基于TMS320F28335 的FPGA 軟件在線升級方法。在理論分析的基礎上,給出了所提方法的硬件原理圖和軟件實現流程。大量的實驗結果表明,該方法具有較好的可行性、穩定性和可靠性,可以實現DSP+FPGA 架構下不拆產品就可升級FPGA 軟件的目的。