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