片上系統的出現使得芯片可以實現更加復雜的功能,獲取更高的性能,但同時其內部信號也變得越來越難以觀察和控制,相應的測試和調試工作也遇到了難以克服的時間復雜性困難。國際半導體技術路線圖( Internat io nal Technolo gy Roadmap for Semico nducto rs,IT RS) 指出,調試和定位問題所需要的時間將會隨著工藝的進步呈指數型增長。由于測試和調試工作的復雜性,其費用往往比設計費用還要高,大約要占整個SoC 總設計成本的1/ 3 以上。在整個SoC 的硬件設計過程中,從第一次投片到最后成功的實現所有功能,硬件調試的時間已經接近整個時間的35%,而且這個數字隨著集成度的提高還會增加。
在整個片上系統中,微處理器是核心,也是最復雜的模塊,所以各個處理器內核的提供商也都投入了大量的研發力量,在其內核中集成了豐富的調試功能。當今流行的調試技術大多采用復用JT AG 的調試方案,但是這種方法一般都是在目標系統內部插入掃描鏈,當處理器高速工作的時候,難免會限制處理器性能的提高。
為此,該設計提出一種新的調試結構,它不依賴JTA G接口且需要較少的引腳開銷,通過掛接在片上高速總線上來實時監測片內通信狀況,同時它直接與處理器進行交互,能夠在不影響處理器正常工作的情況下控制處理器以及訪問所有片上存儲單元,用戶可以通過專用的數據輸出鏈路進行遠程調試,發布調試指令以及獲取反饋信息。結合以上特點,該設計將以文獻[ 3]中提出的一個良好調試結構所需具備的三個基本特征作為設計出發點: 調試的可觀察性; 調試的可控制性; 高效的通信效率; 低入侵性。
1 調試系統構成
以硬件調試模塊DSU 為核心,AMBA 2. 0 總線為構架,專用UART 為調試鏈路接口的系統結構如圖1所示。
圖1 調試系統結構圖
調試主機通過總線接口U ART 對調試單元發出調試指令; 調試單元將控制系統的調試狀態,在滿足觸發條件時將通過與處理器的直接通信來掛起處理器,用戶可以利用調試主機通過調試接口訪問片上所有存儲單元,獲取系統狀態信息; 總線追蹤緩存可以工作在兩種模式下,在正常模式下通過DSU 實時記錄總線通信狀態,而在調試模式下,將由調試主機對其進行訪問,尋找問題發生的根源; 指令追蹤緩存處于微處理器內部,用來存儲執行過的指令; 調試接口UART 將為調試主機和總線之間提供協議轉換服務,實現串行數據與并行數據的相互轉化。
1. 1 AHB 總線
在SoC 設計中,芯片內部總線的設計往往決定了芯片的性能、功耗與各模塊的復雜度。通常依據以下兩個方面選取總線: 一是芯片設計流程其內在的需求,二是對交換帶寬、延時和效率靈活性的需求。該設計采用ARM 公司提出的一種片內高速總線協議AHB,它具有以下特點: 支持突發傳輸; 支持分塊傳輸; 單周期總線控制權移交; 單時鐘沿操作; 非三態執行; 寬數據總線架構; 數據和地址流水重疊。此外,該協議還支持靜態時序分析以及友好的測試插入。
該系統設計的AHB 結構如圖2 所示,由主從模塊、仲裁器以及地址譯碼器構成,采用中央多路選擇器的互聯方式。作為核心部件,仲裁器接收最多16 個主設備的總線請求,為實現 可配置!的設計初衷,采用基于分治的仲裁策略,實現了固定與輪詢兩種優先級算法,可以供用戶靈活選用。AHB 采用的集中式地址譯碼機制,有利于提高外圍設備的可移植性,中央譯碼器根據地址總線發來的地址以及各個從機的身份信息進行譯碼以選擇從設備,該設計為減少運算邏輯和降低功耗,僅對地址的高端位進行判別。整個AHB 系統由多路選擇器連接起來,避免了采用三態總線帶來的功耗、速度以及可測性方面的問題,系統所需的控制信號和地址數據將由多路選擇器路由到相應的目的設備,而根據路由的方向可將多路選擇器分為主模塊到從模塊多路選擇器和從模塊到主模塊的多路選擇器。此外,為了解決在沒有主機請求總線時的總線停靠( bus parking ) 問題,此系統還設計了一個缺省主設備( default master) ,其選擇停靠的主機號依賴選取的仲裁算法。split 傳送是AHB 的一個顯著特點,它在防止系統死鎖和充分利用總線方面起到了積極作用,這里為了解決分塊鎖定( split lo cked) 這一矛盾以及地址未命中問題,設計實現了一個虛擬從設備( dummy slave) ,當以上問題出現時,將由虛擬從設備代為發送回應信號。
圖2 AH B 總線系統互聯結構
1. 2 T race Buf fer
為了實現引言中提到的調試的可觀察性,本系統中就必須具備能夠記錄總線通信信息以及指令執行情況的模塊。AHB T race Buf fer 就是一個循環緩沖存儲體,被用來存儲AHB 上通信的所有信息。AHB 總線上的地址、數據和各種控制信號存儲在其中,并且可以在以后的分析中讀出; 同時在需要調試寫入的時候也可以通過AHB 寫總線寫入數據。本模塊因每個周期需記錄的信息位寬為128 b,所以設計的AHB TraceBuf fer 存儲器將采用4 個位寬為32 b 的同步SRAM構成,深度可配置。若整個Buffer 的容量為1 KB,則每一個SRAM 大小為64 × 32 b,若容量為2 KB,則每一個SRAM 大小為128 × 32 b,依次類推。
在正常總線通信中,每一筆AHB 傳輸將被循環存儲到Buffer 中,在處理器進入調試模式后,AHB TraceBuf fer 被暫時掛起,這時可由外部調試設備利用AHB總線訪問Buffer ,通過地址譯碼控制4 塊SRAM 各自的使能信號,進而完成讀/ 寫操作。Buffer 的數據輸入端為128 b,包含的有地址、數據、控制信號和控制寄存器值等,詳細見表1。
同樣在微處理器內部實現一個指令T race Buf fer,用來存儲執行過的指令。該部件同樣循環存儲,位寬128 b,利用4 塊SRAM 構成。該存儲器中將記錄指令執行過程中指令運行狀態,操作碼、操作數和操作結果,以及PC 指針等值,用以方便以后讀出進行診斷定位。
兩塊Buf fer 在系統正常運轉時記錄數據,所以為了保證其內容的正確性,僅允許系統進入調試模式時對其進行讀寫訪問,而正常狀態下將禁止對其訪問。
表1 AHB Trace Buffer 數據分配表
1. 3 DSU 單元
對于嵌入式系統而言,其內部的大部分信號與微處理器的工作狀態對于開發者都是不可見的,本設計就是通過提高在系統開發過程中用戶對系統的可觀察性和可控制性從而幫助開發者更為有效的定位設計中的錯誤,從而加速開發周期。為此,本系統必須在片上集成單獨的調試單元用于監測系統運轉并能接管處于異常狀態時的微處理器。
借鑒CPU中程序狀態字的作用,DSU 中首先需要一些寄存器能夠控制與管理整個調試單元的行為,它應該能接收來自調試主機發布的調試命令,同時也能夠對系統內部斷點等觸發行為做出實時響應以及在任何時刻都能被調試主機所訪問,為此,該調試單元設計了如圖3 所示的部分關鍵寄存器。
圖3 DSU 內部寄存器
圖3( a) 為AHB T race Buf fer 控制寄存器。其中EN 位將控制AHB Trace Buffer 的使能; DM 位表示Buf fer 處于延遲計數模式,設計這種模式是為了方便觀察斷點發生前后定長時間內系統的運轉狀態; BR 位則表示AHB 斷點命中; 高16 位DCNT 表示在延遲計數模式下的延遲計數值。AHB 斷點寄存器有兩路,可寫入30 位的精確斷點地址,當AHB 地址總線上廣播的地址與該斷點地址相吻合時,將會立即凍結AHBTr ace Buf fer,同時清除AHB 控制寄存器的使能位。
如果控制寄存器中的延遲模式被置位,那么在斷點命中的同時,將啟動內置自減計數器,該計數值將由DCN T域控制,當計數器自減至零時才能引起凍結行為。
圖3( b) 為DSU 控制寄存器,它與程序狀態字作用相似,能夠直接控制微處理器的行為模式,決定微處理器如何進入調試狀態。T E 位將控制處理器中指令Buf fer 的使能; 第1~ 5 位將作為處理器能夠被掛起的條件位,BE 表示處理器發生錯誤可進入調試模式,BW表示觸發IU 監測點可進入調試模式,BS 表示執行斷點指令( ta1) 可進入調試模式,BX 表示任何陷阱可進入調試模式,BZ 是在特定陷阱才能進入調試模式; DM 將用來指示處理器進入調試狀態; EE 位和EB 位為只讀,將記錄DSU 外部使能和調試信號; PE 位用來記錄處理器是否進入錯誤狀態; HL 位記錄處理器是否暫停;PW 位記錄處理器是否進入省電模式; 其他位均未定義。
圖3( c) 為DSU 中斷和單步寄存器,由于該系統設計的AHB 總線系統最大可支持16 個主設備,所以這里的中斷和單步控制寄存器以及屏蔽寄存器也將能夠控制16 個主設備。當前面所述的引起系統進入調試模式的條件觸發時,則相應的BNx ( break now ) 位將被置位,而SS( single step) 位則可通過外部寫入而使得處理器執行單步操作,這些位將直接驅動對應每一個微處理器的控制部件,由各處理器負責監測并做出相應的調試反應,如PC 現場保護、凍結流水和定時器、關閉看門狗等。
圖3( d) 為DSU 屏蔽寄存器,考慮在多處理器系統中一個處理器進入調試對其他處理器的影響,特設計此寄存器。EDx 表示一個處理器進入調試模式時,處理器x 是否強制進入調試模式; DMx 表示處理器x 是否屏蔽其他處理器進入調試模式。當某一處理器因觸發斷點或滿足DSU 控制寄存器所設定的條件時,調試單元內部的屏蔽邏輯將會查詢該寄存器,對其中的EDx和DMx 進行相與運算,得出的結果將直接寫入DSU中斷和單步寄存器中對應BNx 位,由此可直接決定其他處于正常狀態的處理器是否連帶進入調試模式。
調試單元的設計初衷,不僅是要能夠控制整個系統接受調試控制,同樣也需要用戶能夠對所有片上存儲單元進行訪問。整個片上存儲單元可分為3 類: 一是兩大T race Buf fer,包括AHB 和指令追蹤緩存; 二是DSU 內部寄存器,除前所述的四大關鍵寄存器,還包括用于記錄時間值的時間索引寄存器,用于控制AHBTrace Buf fer 內部地址的AHB T race Buffer 地址索引寄存器,用于存儲精確斷點地址的AHB 斷點寄存器和與其配套的掩碼寄存器; 三是微處理器內部寄存器,包括cache,IU 寄存器堆,SPR,PSR,FSR,窗口寄存器,PC 和NPC 指針,陷阱寄存器等。為了能對如此多的寄存器和存儲器進行準確定位,必須有一套完整的尋址機制,所以在DSU 設計過程中設計了一套多級譯碼體體系,將片上所有存儲部件地址映射入此體系中。基于以上對DSU 功能的設計考慮,其具體的結構組成如圖4所示。
圖4 DSU 內部結構框圖
當DSU 被AHB 總線譯碼器選中后,DSU 內部的第一級譯碼器將對地址總線訪問地址進行譯碼,它將判斷當前訪問的對象屬于三類存儲單元中的哪一類,如果是第二類即DSU 內部寄存器,那么將繼續進行第二級地址譯碼,譯碼的結果將決定當前調試主機將訪問哪一個功能寄存器; 如果是第一類存儲部件,由于它們容量較大,并需要其128 b 的位寬能與總線位寬相兼容,所以需要在這些循環存儲體內設計一個獨立的譯碼器,能夠對AHB 索引寄存器或一級譯碼送出的地址再譯碼;對于第三類存儲部件,由于此類存儲部件位于DSU 外部,所以除了需要DSU 內部的第一、二級譯碼外,在處理器內部仍然需要更深層次的輔助譯碼,因此在實際工作中,訪問此類存儲單元所需的時鐘周期要多于其他幾類存儲單元。在圖4 中,左邊5 個寄存器將共同決定AHB T race Buf fer 的工作情況,斷點判別邏輯根據控制、斷點和屏蔽寄存器的內容共同決定AHB TraceBuf fer 記錄值來源于總線還是調試主機; 時間索引寄存器值將隨時鐘周期自增加,同時也作為記錄內容的一部分方便以后查詢; 而索引寄存器也將隨時鐘周期自增,為正常通信數據提供地址,而在調試模式下,將由一級譯碼器直接提供訪問地址; 右邊3 個寄存器將共同控制微處理器的工作狀態,在DSU 外部使能信號下處理器進入調試模式后,處理器將程序指針入棧保護,同時輸出信號指示當前調試狀態并將定時器凍結。當DSU 控制寄存器中的BN 位被清零時,則處理器定時器解凍,程序指針恢復,退出調試狀態。
1. 4 調試通信鏈路
在圖1 中就已經提到在本系統設計中需要一個調試接口,該接口將連接調試主機與AHB 總線,它包含一個連接在AHB 總線上的專用UART。該系統為此設計了一個簡單的通信協議,它支持數據在串口和AHB 接口之間的格式轉換。通過這個通信鏈路,一個讀或寫傳輸可以在任意的AHB 地址上產生,其結構如圖5 所示。
圖5 調試通信鏈路
該系統設計的UART 包含一個波特率發生器,它利用一個18 位寬的自減計數器產生所需的波特率,在時鐘的驅動下,每當計數器下溢,則產生一個脈沖信號,同時將一個重載寄存器的預定值重新載入計數器,最終產生的UART 脈沖頻率將是所需波特率的8 倍。
調試機的串口支持的數據幀結構為10 位,包括1 位起始位、8 位數據位和1 位停止位( 高電平) 。當進行的是讀傳輸時,除了將讀地址按照規定的幀格式進行拆分外,在開始階段需另加1 個控制幀,其中包含指明當前傳輸的類型以及連續傳輸的塊數; 若進行的是寫傳輸,那么在地址發送完后,還需要按照幀結構發送調試數據。每次進行連續傳輸時,只需要發出1 個首地址,以后地址將按照控制幀中指定的塊數按字自增。
通過本接口,調試機的串行數據將能被此接口封裝成符合AHB 總線協議的傳輸格式,同樣在讀傳輸時,調試輸出數據也能被此接口分解為單bit 數據返回到調試串口。
2 結 語
本文所提出的一種硬件調試單元完全自主實現,且順利通過Modelsim 的功能仿真,所以它不但能夠有效的完成對片上處理器的診斷與調試,而且其擁有的跟蹤技術也能對程序的運轉以及片內的通信狀況進行實時監控,同時專用的硬件協議轉換模塊在片內就實現了遠程調試連接,能夠方便的與調試機進行通信。
評論
查看更多