王 品,于 瑩,苗政民,賀紅衛
(1.中國兵器科學研究院,北京 100089;2.中國航天科工集團第二研究院706所,北京 100039)
數字信號處理器(digital signal processor,DSP)具有靈活、穩定、重復性好、可大規模集成和易于實時實現等優點,被廣泛應用于語音、通信、圖像處理、聲納、生物醫學儀器等諸多領域,在防空反導、機動突擊、火力打擊、光電偵察、指揮控制等各類武器裝備中也發揮著重要作用[1]。
多核技術是提升處理器計算能力的重要途徑, 隨
著武器裝備嵌入式系統向自主化、智能化、小型化、低功耗方向發展,對高精度、高性能和安全可控計算需求不斷提高,自主多核處理器在裝備研制中得到越來越廣泛的應用。
目前,國內在核心電子器件領域的技術水平有了長足進步,已經研制出多款多核處理器,對相應的軟件開發調試環境提出了迫切需求。提供包括仿真器在內的、與處理器相配套的軟件調試環境,是自主多核處理器能夠推廣應用與深入發展的前提[2]。
相對于通用計算機,嵌入式系統的軟硬件資源有限,通常無法完成本地自主調試,需要借助軟硬件資源豐富的通用計算機,使用遠程調試的方式進行軟件調試[3]。
一個典型的嵌入式軟件遠程調試系統包括三個部分:調試主機、仿真器(調試協議轉換器)和目標平臺。調試主機一般為通用計算機,通過某種接口(如USB接口、網口、并口)與仿真器相連,仿真器通過JTAG接口連接目標平臺,以此達到調試主機與目標平臺進行調試信息交互的目的。調試主機運行調試器(如GDB)和調試代理軟件,并為開發調試人員提供圖形化操作和觀察界面[4]。
遠程調試系統組成如圖1所示。

圖1 遠程調試系統組成
與本地調試相比,遠程調試具有以下特點[5]:
(1)調試環境和被調試程序運行在不同的計算機上,通過某種通信方式將調試主機和目標平臺相連,避開了目標平臺上軟硬件資源不足的限制,為用戶提供強大的調試功能。
(2)目標平臺無需操作系統支持。目標平臺上即使運行操作系統,也主要是用于嵌入式應用的支撐,而不是用于目標平臺的軟件開發調試環境。
(3)本地調試只能調試相同指令集的程序,而遠程調試可以調試與主機不同指令集的程序,這一特點也被稱為交叉調試。
(4)由于調試環境和被調試程序的分離,不可避免地引入通信開銷,對調試效率產生一定影響。
GDB是GNU開源組織發布的源碼級調試器,支持多種處理器架構和編程語言,在調試代理的配合下,實現斷點、單步執行、查看變量、查看寄存器、查看內存、查看堆棧等遠程調試功能[6]。
GDB與調試代理通過遠程串行協議(remote serial protocol,RSP)實現調試信息交互。RSP是一種基于ASCII碼字符的通信協議,包括客戶端(RSP client)和服務器端(RSP server),通常以GDB作為客戶端,以調試代理作為服務器端,兩者可以位于相同或不同的計算機上,通過網絡Socket或RS232串口等方式通信。
RSP以數據包的形式傳輸數據,一個數據包包含數據信息和校驗碼兩個部分。數據信息是一串ASCII碼字符,以“$”字符作為起始標志,以“#”字符作為結束標志;數據信息后面跟隨長度為16位的校驗碼,該校驗碼的值是數據信息中所有字符的ASCII碼數值相加后除以256的余數,用2個十六進制字符表示。
接收方接收到完整的數據包后,使用校驗碼對數據信息進行校驗,如果接收到的數據信息校驗計算無誤,返回“+”字符通知發送方數據包接收完成;如果校驗出錯,則返回“-”字符,通知發送方重新發送。發送方通過接收方返回的響應字符判斷數據包發送是否成功。
如果調試代理暫不支持某個RSP調試指令,可以返回字符串“$#00”通知GDB,GDB會嘗試使用其他RSP調試指令來代替不支持的調試指令完成同樣的功能。然而,要實現GDB的調試功能,調試代理必須支持讀寄存器的值(g)、修改寄存器的值(G)、讀內存的值(m)、修改內存的值(M)、恢復運行(c)、單步執行(s)等RSP調試指令[7]。
IEEE 1149.1標準由聯合測試行動組(joint test action group,JTAG)提出,因此也被稱為JTAG標準。JTAG標準最初用于芯片測試,現在也常用于對芯片上的軟件進行調試。
JTAG標準中提出了邊界掃描(boundary-scan)概念,其基本思想是在芯片的輸入輸出管腳上放置一個移位寄存器,稱為邊界掃描寄存器單元(boundary-scan register cell)。芯片正常運行時,這些邊界掃描寄存器單元對芯片來說是透明的,不產生任何影響;當芯片處于測試狀態時,邊界掃描寄存器單元將芯片和外圍的輸入輸出隔離,芯片的輸入管腳可以通過與之相連的邊界掃描寄存器單元把數據加載到該管腳中去,輸出管腳可以通過與之相連的邊界掃描寄存器單元“捕獲(capture)”該管腳上的輸出信號。
此外,通過邊界掃描寄存器單元的相互連接,在芯片的周圍形成一條邊界掃描鏈(boundary-scan chain),在適當的時鐘信號和控制信號驅動下,測試數據可以在邊界掃描鏈上串行輸入和輸出。通過邊界掃描寄存器單元和邊界掃描鏈,能夠對芯片的輸入輸出信號進行觀察和控制,實現芯片測試和軟件調試功能。一種芯片可以同時提供幾條獨立的邊界掃描鏈,以滿足不同的測試要求。
在JTAG標準中,定義了兩類寄存器:數據寄存器(data register,DR)和指令寄存器(instruction register,IR)。邊界掃描鏈即是一種重要的數據寄存器,用于控制和觀察芯片的輸入輸出;IR用來實現對DR的控制,例如在芯片可供選擇的全部邊界掃描鏈中,通過IR指定一條邊界掃描鏈作為訪問對象[8]。
JTAG設備內部定義了一個狀態機,稱為TAP控制器。TAP控制器的狀態通過TCK和TMS兩個輸入引腳進行控制,通過TAP控制器的狀態變化,完成JTAG指令寄存器的輸入和數據寄存器的輸入輸出,從而對芯片內部的處理器和外設進行控制和狀態獲取,在調試主機和仿真器軟件的配合下,實現調試功能。標準的JTAG接口必須至少具有TCK、TDI、TDO和TMS四個引腳,其中TCK為TAP控制器提供時鐘信號驅動,TMS控制TAP控制器的狀態轉換,TDI為數據輸入引腳,TDO為數據輸出引腳。此外,還有一個可選引腳RST,用于JTAG設備的狀態復位[9]。
調試環境的目標平臺為“核高基”國家科技重大專項支持的自主同構8核DSP。為了節約片上資源,將8個DSP內核中的JTAG控制器用菊花鏈(daisy chain)的方式連接起來,通過一個JTAG接口進行控制,如圖2所示。

圖2 目標平臺JTAG連接
為了對這一設計進行支持,每個DSP內核的JTAG控制器都支持bypass指令。當某個DSP內核不是要調試的目標內核時,通過bypass指令,將位數為1的bypass寄存器連接在數據移入接口TDI和數據移出接口TDO之間,為數據移入移出提供一條長度最短的通過路徑,以便調試數據快速地通過該DSP內核,到達目標DSP內核或調試主機[10]。
目標平臺設計了自主的調試協議,無法使用現有的任何一種軟件開發環境進行軟件調試。該文針對目標平臺的特點和調試協議,提出了一種調試環境設計方案。調試環境交互界面選擇安裝CDT插件的ECLIPSE平臺,主要功能是提供友好的開發調試界面,接收用戶調試命令輸入,并顯示調試結果,如目標機寄存器內容、內存內容、堆棧內容及斷點信息等;采用GDB作為調試器,ECLIPSE平臺集成針對DSP編譯形成的GDB,ECLIPSE平臺與GDB通過標準的Machine Interface(MI)協議通訊[11];調試主機駐留唯一的調試代理軟件,調試代理通過8個線程使用8個端口分別與8個調試器建立連接,利用信號量解決通過單一JTAG接口訪問8核DSP的互斥問題;調試代理利用調試主機的USB接口和仿真器進行通信。仿真器駐留8核DSP調試協議解析程序,該程序作為宿主機調試代理和被調試程序之間的媒介存在[12]。
用戶通過ECLIPSE平臺輸入調試命令,ECLIPSE平臺根據當前處于活動狀態的工程,區分輸入命令的目標平臺,將命令轉換為若干MI協議指令,發送給相應GDB,GDB將MI協議指令轉換為若干RSP指令,通過Socket連接發送給調試代理,調試代理根據接收到指令的線程區分指令的目標內核,將目標內核信息添加到指令中,封裝成為多核調試協議指令,通過USB接口發送給仿真器軟件;仿真器軟件接收多核調試指令,根據指令中的目標內核信息,區分指令對應的內核,將指令解析為指定DSP內核的調試指令+其余7個DSP內核的bypass指令,按照JTAG狀態機的時序要求,通過GPIO端口將解析后的指令數據掃描到目標平臺中,同時以移位方式獲取返回結果;最后仿真器將調試結果通過USB接口發送給調試主機,經ECLIPSE解析后以圖形化方式呈現給用戶[13]。整個遠程調試系統結構如圖3所示。

圖3 多核DSP遠程調試系統結構
根據多核DSP調試環境設計方案,調試代理創建并啟動8個線程,使用8個端口分別與面向每個DSP內核的GDB建立Socket連接。其中一個連接接收到完整的RSP調試指令后,將其轉換為相應的多核調試協議指令。為避免與其余內核的調試相沖突,需申請全局信號量,獲取到全局信號量后,通過USB接口向仿真器發送多核調試協議指令,等待仿真器軟件返回執行結果;接收到執行結果后,將結果封裝為RSP數據包,通過Socket連接返回給相應的GDB;最后釋放全局信號量,一條RSP指令執行完畢,等待接收下一條GDB發送的RSP指令。
DSP內核可能由于斷點、異常等原因,由運行狀態轉變為掛起狀態。調試代理軟件通過內部變量記錄每個內核的狀態,如果一個連接沒有接收到RSP指令,還應判斷相應內核是否處于運行狀態,如果內核處于運行狀態,則需獲取全局信號量,通過USB接口向仿真器發送內核狀態查詢指令,如果該內核已經轉變為掛起狀態,調試代理主動向GDB發送內核已掛起信號,最后釋放全局信號量。
其執行流程如圖4所示。

圖4 調試代理執行流程
選用ARM架構AT91SAM7X512處理器作為仿真器的主控芯片,利用其內部集成的USB 2.0全速設備端口作為與調試主機連接的USB接口。主控芯片引出5個GPIO引腳,與IEEE1149.1標準中的TDI、TDO、TMS、TCK、RST五個接口信號相對應,通過緩沖處理芯片HC244SJ與目標平臺對外引出的標準JTAG接口連接。控制芯片外接3個LED指示燈,分別與TDI、TDO及RST接口對應的GPIO引腳串聯,當JTAG接口有信號傳輸時,相應的LED燈就會閃爍,起到指示作用,以便實時觀察調試過程中仿真器與目標平臺之間的通信過程。仿真器硬件設計如圖5所示。

圖5 仿真器的硬件設計
仿真器軟件經燒寫后存儲在FLASH中。為了提高仿真器的調試速度,將仿真器軟件搬移到SRAM中運行,設計了單獨的啟動引導程序(BootLoader)。BootLoader同樣燒寫在FLASH中,是仿真器加電后執行的第一段代碼,在完成CPU和相關硬件的初始化之后,再將仿真器軟件所在的FLASH地址的內容,復制到SRAM中,然后跳轉到仿真器軟件程序的入口點地址,將仿真器控制權交給仿真器軟件[14]。
仿真器軟件主要包括USB端點中斷處理和調試協議解析處理兩個功能模塊。
USB端點中斷處理模塊通過對端點中斷的處理,將發送緩沖區的數據發送到調試主機,將從調試主機收到的數據寫入接收緩沖區;調試協議解析處理模塊完成多核調試指令的接收、解析和處理,JTAG狀態機的驅動,以及DSP調試協議的實現等仿真器的核心功能。
5.2.1 USB端點中斷處理
仿真器作為USB設備端,與調試主機通過USB接口連接,遵循USB主從通信協議。每一個USB設備在正常工作前必須完成主機對它的配置過程,即總線枚舉。USB設備在總線上共有六種狀態:接入態、加電態、默認態、地址態、配置態和掛起態。當調試主機與仿真器連接后,開始通過端點中斷進行設備的總線枚舉過程,仿真器完成總線枚舉后,從配置態進入掛起態,等待來自調試主機的多核調試協議指令。
在USB設備端存在以下幾類中斷:幀起始中斷、設備恢復中斷、設備掛起中斷和端點中斷,來自調試主機的指令引起的中斷是端點中斷。端點是USB主機和設備的數據流終點,每個端點僅支持單一方向的數據流,按照數據流方向分為輸入端點和輸出端點,來自主機的數據流止于設備上的輸出端點,發往主機的數據流則始于設備上的輸入端點[15-16]。
圖6為端點中斷處理流程。

圖6 仿真器端點中斷處理流程
根據引起中斷的原因,端點中斷又分為數據包接收中斷、數據包發送完成中斷和SETUP命令包接收中斷,通過USB設備控制器的控制狀態寄存器來區分中斷類型。如果中斷類型為數據包接收中斷,說明從調試主機收到了一個數據包,此時應將數據包放入接收緩沖區,判斷是否還有要接收的數據,如果已接收數據的數量不小于預期接收數據數量,說明本次數據接收任務已完成,將輸出端點中斷禁用,設置數據接收完成標識變量,通知主程序數據接收完成。如果中斷類型為數據包發送中斷,說明上一個數據包發送已完成,此時應判斷發送緩沖區中是否還有數據需要發送,如果有,則將數據加入到發送隊列;如果沒有數據要發送,說明本次數據發送任務已完成,將輸入端點中斷禁用,設置數據發送完成標識變量,通知主程序數據發送完成。如果中斷類型為SETUP命令包接收中斷,說明接收到主機的SETUP命令,SETUP命令主要用于USB主機對設備進行配置和控制,例如總線枚舉等,不涉及仿真器核心功能的實現。
5.2.2 調試協議解析處理
調試協議解析處理模塊是仿真器軟件的主程序,其處理流程如圖7所示。在完成USB和GPIO等設備初始化與總線枚舉后,仿真器與調試代理進行通信,等待接收并執行多核調試協議指令。調試代理先發送2個字節的指令長度,然后發送指令的內容。仿真器通過端點中斷接收到指令長度后開始等待接收此長度的指令內容。接收完畢后對指令進行解析,識別指令的目標內核,將多核調試協議指令轉化為目標DSP內核調試指令,與其余內核的bypass指令進行組合,通過TDI引腳按照TAP狀態機的時序要求移入內核執行。DSP內核調試指令執行完成后,仿真器將從TDO引腳移出的處理結果返回給調試代理,一條多核調試協議指令執行完畢,等待接收下一條調試代理發送的指令。

圖7 仿真器軟件流程
該文提出的面向自主8核DSP調試環境的設計方案,解決了目標平臺缺乏配套軟件調試手段的實際問題。方案采用自主研發的軟硬件和開源軟件,具有功能完備、性能良好、安全可控、靈活易擴展等優點。該方案能夠集成GCC等編譯鏈接工具,結合ECLIPSE平臺自身的功能,即可構成一個圖形化的軟件集成開發環境,實現一體化的工程管理、編譯鏈接和遠程調試功能,對其他自主同構或異構多核處理器軟件開發環境的設計具有一定的參考價值。