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