專利名稱:一種微處理器調(diào)試方法及所用的微處理器調(diào)試模塊的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及微處理器及計(jì)算機(jī)系統(tǒng),更具體地說,本發(fā)明涉及一種能夠完成對微處理 器內(nèi)核調(diào)試的技術(shù)。
背景技術(shù):
隨著半導(dǎo)體工藝與集成電路技術(shù)的快速發(fā)展,允許將整個(gè)系統(tǒng)集成到單個(gè)硅片上,即 片上系統(tǒng)(System on Chip, SoC)。它的設(shè)計(jì)通常會(huì)采用IP (Intellectual Property) 核以加速產(chǎn)品開發(fā)。在SoC設(shè)計(jì)中難免產(chǎn)生一些Bug,這些Bug會(huì)對最終系統(tǒng)的功能和性 能產(chǎn)生影響,為了保證SoC功能的正確性,減少設(shè)計(jì)風(fēng)險(xiǎn),在開發(fā)過程中對其進(jìn)行調(diào)試是 必不可少的。有效的調(diào)試機(jī)制可以準(zhǔn)確快速的定位設(shè)計(jì)中的Bug,從而加速微處理器的開 發(fā)周期,保證微處理器的正確功能。SoC的高集成度給可調(diào)試性帶來兩方面的變化 一方 面,隨著集成度的提高和I/0設(shè)計(jì)技術(shù)的革新,芯片管腳資源越來越緊張,傳統(tǒng)的基于示 波器、邏輯筆、邏輯分析儀等工具的硬件調(diào)試方法不能滿足調(diào)試的需求。另一方面,芯片 中可集成的門數(shù)迅速增加,由于這種集成度的提高,在芯片內(nèi)部增加專門用于調(diào)試的模塊 是完全可行的。這給調(diào)試帶來了新的挑戰(zhàn)?,F(xiàn)有的調(diào)試方法可分為軟件和硬件兩類。軟件方法典型的軟件方法如GDB (GNU Debugger),它的特點(diǎn)是在目標(biāo)機(jī)上裝入一段 監(jiān)控程序,當(dāng)有調(diào)試異常(如軟件斷點(diǎn)、單步)產(chǎn)生時(shí),PC主機(jī)通過串口或網(wǎng)口給目標(biāo)機(jī) 發(fā)送調(diào)試命令同時(shí)接收調(diào)試反饋。軟件方法的缺點(diǎn)在于它不能用軟件斷點(diǎn)調(diào)試ROM (Read Only Memory)中的程序,因?yàn)檐浖帱c(diǎn)的實(shí)現(xiàn)一般都是采用替換策略實(shí)現(xiàn)的。此外它還 會(huì)占用系統(tǒng)異常入口和部分中斷資源,不適用于底層開發(fā)和操作系統(tǒng)的調(diào)試。硬件方法典型的硬件調(diào)試方法如JTAG (Joint Test Action Group)仿真器。它是 對IEEE1149. l協(xié)議進(jìn)行了擴(kuò)展,將原本用于測試的JTAG接口擴(kuò)展成一個(gè)調(diào)試接口。這種 方法應(yīng)用十分普遍,包括ARM、 MIPS和國內(nèi)的龍芯處理器都開發(fā)了基于JTAG的調(diào)試接口。 硬件方法的缺點(diǎn)在于JTAG是一個(gè)串行的接口 ,這使得JTAG的有效地傳輸速率不是很高, 而調(diào)試往往需要大量的數(shù)據(jù)通信。此外, 一般來說微處理器在執(zhí)行程序的時(shí)候會(huì)按指令順序執(zhí)行,需要調(diào)試時(shí),插入調(diào) 試異常(如指令斷點(diǎn)), 一旦調(diào)試異常觸發(fā),微處理就會(huì)放棄原有指令的執(zhí)行順序,在觸 發(fā)調(diào)試異常的相關(guān)指令處停頓,然后跳向一個(gè)固定地址(一般稱為調(diào)試異常入口)取指執(zhí) 行異常處理程序,然后接收上位機(jī)的調(diào)試命令并反饋調(diào)試信息。調(diào)試結(jié)束后,微處理器要 準(zhǔn)確回到停頓時(shí)的狀態(tài)繼續(xù)執(zhí)行,這就要求調(diào)試具有一個(gè)精確的調(diào)試異常觸發(fā)和處理機(jī) 制。保證調(diào)試過程不改變原程序執(zhí)行的行為,不對原程序的執(zhí)行結(jié)果產(chǎn)生影響。發(fā)明內(nèi)容本發(fā)明要解決的技術(shù)問題是提供一種微處理器調(diào)試方法。以解決JTAG調(diào)試傳輸速率 問題和精確調(diào)試異常的觸發(fā)和處理問題。為了解決上述技術(shù)問題,本發(fā)明提供一種微處理器調(diào)試方法,包括 一個(gè)調(diào)試通信接口,作為調(diào)試主機(jī)與微處理器內(nèi)核的通信通道;一種同步機(jī)制,保證不同時(shí)鐘域的內(nèi)核與調(diào)試主機(jī)分時(shí)訪問地址寄存器、數(shù)據(jù)寄存器 和控制寄存器;一種快速傳送機(jī)制,實(shí)現(xiàn)大量數(shù)據(jù)在片外調(diào)試存儲空間與微處理器內(nèi)核之間快速上載 和下載;七類產(chǎn)生于微處理器不同流水級的調(diào)試異常; 一種調(diào)試異常精確處理機(jī)制。作為本發(fā)明的微處理器調(diào)試方法的改進(jìn)快速傳送機(jī)制將大量地址連續(xù)的數(shù)據(jù)從調(diào)試 主機(jī)下載到內(nèi)核存儲器或從內(nèi)核存儲器上載到調(diào)試主機(jī)時(shí),只需在上載或下載之初訪問一 次地址寄存器和一次控制寄存器即可。作為本發(fā)明的微處理器調(diào)試方法的進(jìn)一步改進(jìn)調(diào)試異常精確處理機(jī)制是將調(diào)試異常集中在微處理器流水線的TC級處理;如果有多個(gè)異常同時(shí)發(fā)生,遵循一定的優(yōu)先級處理; 調(diào)試態(tài)下發(fā)生的普通異常時(shí),采用重進(jìn)入調(diào)試態(tài)策略。本發(fā)明還同時(shí)提供了用于嵌入到被調(diào)試的微處理器上的專用的微處理器調(diào)試模塊,包 括標(biāo)準(zhǔn)JTAG接口、調(diào)試通信接口、快速傳送單元、片外調(diào)試存儲空間、流水線相關(guān)的精 確調(diào)試異常觸發(fā)單元和流水線相關(guān)的精確異常處理單元;標(biāo)準(zhǔn)JTAG接口的一端與片外調(diào) 試存儲空間相連,標(biāo)準(zhǔn)JTAG接口的另一端分別與調(diào)試通信接口和快速傳送單元相連,調(diào) 試通信接口分別與流水線相關(guān)的精確調(diào)試異常觸發(fā)單元和流水線相關(guān)的精確異常處理單 元相連,快速傳送單元也分別與流水線相關(guān)的精確調(diào)試異常觸發(fā)單元和流水線相關(guān)的精確異常處理單元相連,流水線相關(guān)的精確調(diào)試異常觸發(fā)單元與流水線相關(guān)的精確異常處理單 元相連。作為本發(fā)明的微處理器調(diào)試模塊的改進(jìn)流水線相關(guān)的精確異常處理單元包括調(diào)試異常插入單元,流水線控制單元(Pipeline Control Unit, PCU)、異常PC暫存寄存器和調(diào) 試寄存器分別與調(diào)試異常插入單元相連。作為本發(fā)明的微處理器調(diào)試模塊的進(jìn)一步改進(jìn)流水線相關(guān)的精確調(diào)試異常觸發(fā)單元包括分別與調(diào)試異常插入單元相連的軟件斷點(diǎn)、指令斷點(diǎn)、寫數(shù)據(jù)斷點(diǎn)、讀數(shù)據(jù)斷點(diǎn)、單 布異常、調(diào)試中斷和調(diào)試自動(dòng)異常。作為本發(fā)明的微處理器調(diào)試模塊的進(jìn)一歩改進(jìn)調(diào)試通信接口包括同步單元,該同步單元分別與地址寄存器、數(shù)據(jù)寄存器和控制寄存器相連,調(diào)試通信接口還包括訪問標(biāo)志。 該訪問標(biāo)志位于控制寄存器上。作為本發(fā)明的微處理器調(diào)試模塊的進(jìn)一歩改進(jìn)標(biāo)準(zhǔn)JTAG接口包括TAP (Test Access Port)控制器,地址移位寄存器、數(shù)據(jù)移位寄存器和控制移位寄存器分別與TAP控制器相 連。作為本發(fā)明的微處理器調(diào)試模塊的進(jìn)一步改進(jìn)快速傳送單元包括相連的快速指令寄存器組和循環(huán)判斷器,還包括內(nèi)含快速訪問標(biāo)志寄存器的快速移位寄存器鏈。作為本發(fā)明的微處理器調(diào)試模塊的進(jìn)一歩改進(jìn)片外調(diào)試存儲空間包括調(diào)試程序存儲空間、調(diào)試數(shù)據(jù)存儲空間和調(diào)試反饋存儲空間。本發(fā)明是將專用的調(diào)試模塊嵌入到被調(diào)試的微處理器上進(jìn)行使用的,與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果1) 、通過標(biāo)準(zhǔn)JTAG接口和調(diào)試通信接口,調(diào)試主機(jī)可以有效控制片外調(diào)試存儲空間 和微處理器內(nèi)核的通信,很好地實(shí)現(xiàn)了微處理器調(diào)試的可控制性(Controllability)和 可觀察性(0bservability)。2) 、快速傳送單元提供了一種機(jī)制,實(shí)現(xiàn)大數(shù)據(jù)量在片外調(diào)試存儲空間與微處理器內(nèi) 核之間快速上載和下載,很好地解決了 JTAG的有效傳輸速率低的問題,提高了調(diào)試效率。3) 、七類流水線相關(guān)的調(diào)試異??梢造`活滿足不同的調(diào)試需求。4) 、流水線相關(guān)的精確調(diào)試異常處理單元一方面保證了調(diào)試可以準(zhǔn)確地跟蹤程序的執(zhí) 行流程,另一方面保證調(diào)試過程不會(huì)破壞原有程序的執(zhí)行流程和執(zhí)行結(jié)果,即調(diào)試的低入 侵性。
下面結(jié)合附圖對本發(fā)明的具體實(shí)施方式
作進(jìn)一步詳細(xì)說明。 圖l是調(diào)試模塊結(jié)構(gòu)圖;圖2是圖1中的片外調(diào)試存儲空間40與核的通信結(jié)構(gòu)圖;圖3是圖1中的片外調(diào)試存儲空間40與內(nèi)核的通信接口示意圖;圖4是圖3中的同步單元207的電路原理圖;圖5是圖1中的片外調(diào)試存儲空間40與內(nèi)核的通信流程圖;圖6是圖1中的快速傳送單元30的結(jié)構(gòu)圖;圖7是是圖1中的快速傳送單元30的實(shí)現(xiàn)流程圖;圖8是異常優(yōu)先級示意圖;圖9是調(diào)試流程圖。
具體實(shí)施方式
下面結(jié)合圖1 圖9以說明本發(fā)明的具體實(shí)現(xiàn)方式微處理器內(nèi)核一般具有系統(tǒng)態(tài)和用戶態(tài),本發(fā)明給微處理器內(nèi)核增加了調(diào)試態(tài)。如圖2所示,在調(diào)試態(tài),內(nèi)核既可以訪問系統(tǒng)中的所有資源又可以訪問片外調(diào)試存儲空間40, 40根據(jù)功能可劃為三塊區(qū)域調(diào)試程序存儲空間401,調(diào)試數(shù)據(jù)存儲空間402和調(diào)試反饋 存儲空間403。在本發(fā)明中,內(nèi)核和調(diào)試主機(jī)都可以訪問40,從而實(shí)現(xiàn)調(diào)試主機(jī)與內(nèi)核的 通信。此外,在調(diào)試態(tài)下,調(diào)試主機(jī)對內(nèi)核擁有完全的控制權(quán),它可以根據(jù)調(diào)試的需要將 調(diào)試程序和數(shù)據(jù)寫入調(diào)試程序存儲空間401和調(diào)試數(shù)據(jù)存儲空間402,并且接收調(diào)試程序 的執(zhí)行反饋寫入調(diào)試反饋存儲空間403。因此,調(diào)試主機(jī)與就可以在調(diào)試態(tài)下觀察到內(nèi)核 的運(yùn)行狀態(tài)、寄存器、存儲器等,從而滿足調(diào)試的可觀察性。調(diào)試通信接口 20是內(nèi)核與片外調(diào)試存儲空間40實(shí)現(xiàn)互相訪問的通道。圖3為內(nèi)核與 片外調(diào)試存儲空間40的通信接口示意圖,它們之間的通信通過地址移位寄存器102、數(shù)據(jù) 移位寄存器103、控制移位寄存器104、地址寄存器204、數(shù)據(jù)寄存器205和控制寄存器 206完成。地址移位寄存器102、數(shù)據(jù)移位寄存器103、控制移位寄存器104處于JTAG時(shí) 鐘域,地址寄存器204、數(shù)據(jù)寄存器205、控制寄存器206處于內(nèi)核時(shí)鐘域中,兩邊的寄 存器形成鏡像。TAP控制器lOl定義了一個(gè)狀態(tài)機(jī),包括狀態(tài)調(diào)試空閑801、數(shù)據(jù)更新802,數(shù)據(jù)捕獲817。它們在JTAG時(shí)鐘域產(chǎn)生,要在內(nèi)核時(shí)鐘域(內(nèi)核時(shí)鐘818)作為控制信號使用必 須經(jīng)過同步單元207的同步,同步單元207的同步機(jī)制如圖4所示。調(diào)試空閑801和數(shù)據(jù) 更新802經(jīng)過或門813產(chǎn)生訪問使能808,訪問使能808經(jīng)過D觸發(fā)器809、 D觸發(fā)器810 產(chǎn)生同步訪問使能803,數(shù)據(jù)更新802經(jīng)過D觸發(fā)器811、 D觸發(fā)器812產(chǎn)生同步數(shù)據(jù)更新 804。同步訪問使能803和同步數(shù)據(jù)更新804經(jīng)過與門814產(chǎn)生JTAG訪問使能805。同步 數(shù)據(jù)更新804經(jīng)過反門815產(chǎn)生JTAG訪問拒絕806。 JTAG訪問拒絕806和同步訪問使能 803經(jīng)過與門816產(chǎn)生內(nèi)核訪問使能807。本發(fā)明中JTAG訪問使能805、內(nèi)核訪問使能807作為內(nèi)核與片外調(diào)試存儲空間40的 通信控制信號。通信可分為以下三個(gè)過程首先在TAP控制器lOl的控制下,片外調(diào)試存 儲空間40與地址移位寄存器102、數(shù)據(jù)移位寄存器103、控制移位寄存器104串行通信。 其次當(dāng)數(shù)據(jù)捕獲817為高電平時(shí)將地址寄存器204、數(shù)據(jù)寄存器205、控制寄存器206中 的數(shù)據(jù)寫入地址移位寄存器102、數(shù)據(jù)移位寄存器103、控制移位寄存器104?;蛘弋?dāng)JTAG 訪問使能805為高電平時(shí)將地址移位寄存器102、數(shù)據(jù)移位寄存器103、控制移位寄存器 104中的數(shù)據(jù)寫入地址寄存器204、數(shù)據(jù)寄存器205、控制寄存器206。最后,當(dāng)內(nèi)核訪問 使能807為高電平時(shí)內(nèi)核與地址寄存器204、數(shù)據(jù)寄存器205、控制寄存器206通信。從 而完成內(nèi)核與片外調(diào)試存儲空間40的通信。圖5為片外調(diào)試存儲空間40與內(nèi)核的通信流程圖。步驟720,內(nèi)核請求通信,將讀寫控制、訪問類型和寬度等訪問信息寫入控制寄存器206。步驟721,內(nèi)核置訪問標(biāo)志208為1,表示新的訪問開始。 步驟722,內(nèi)核將訪問地址信息寫入地址寄存器204。步驟723,本次訪問是否為寫數(shù)據(jù)訪問,如果是,執(zhí)行步驟725,如果不是,執(zhí)行步 驟724。步驟724,調(diào)試主機(jī)循環(huán)訪問控制移位寄存器104。 步驟725,內(nèi)核寫數(shù)據(jù)到數(shù)據(jù)寄存器205。步驟726,調(diào)試主機(jī)根據(jù)串行移出的控制移位寄存器104的值判斷訪問標(biāo)志208是否 為l,如果是,執(zhí)行步驟727,如果不是,執(zhí)行步驟724。步驟727,調(diào)試主機(jī)根據(jù)解析控制移位寄存器104的控制信息做出通信反饋。 步驟728,調(diào)試主機(jī)將訪問標(biāo)志208清零,表示己做出通信反饋。步驟729,內(nèi)核循環(huán)查詢和控制寄存器206。步驟730,內(nèi)核根據(jù)和控制寄存器206的值判斷訪問標(biāo)志208是否為0,如果是,執(zhí) 行步驟731,如果不是,執(zhí)行步驟729。步驟731, 一次通信結(jié)束,內(nèi)核處理通信反饋信號。步驟732,是否需要繼續(xù)通信,如果是,返回歩驟720執(zhí)行,開始一次新的通信,如 果不是,結(jié)束通信。通過上述流程,在調(diào)試態(tài)調(diào)試主機(jī)可以將調(diào)試信息加載在內(nèi)核上,并接收內(nèi)核的調(diào)試 反饋,從而實(shí)現(xiàn)調(diào)試主機(jī)對內(nèi)核的調(diào)試。快送傳送單元30是為大量調(diào)試程序或調(diào)試數(shù)據(jù)的上載或下載設(shè)計(jì)的,在調(diào)試中往往 需要傳送較大的文件,如下載調(diào)試程序或上載存儲數(shù)據(jù)等。將大文件從調(diào)試主機(jī)下載到內(nèi) 核存儲器或從內(nèi)核存儲器上載文件到調(diào)試主機(jī)通常都是一個(gè)連續(xù)地址的搬運(yùn)過程,所以只 需要在傳輸之初確定起始地址即可。圖6是快速傳送單元30的結(jié)構(gòu)圖,在傳輸中數(shù)據(jù)移位寄存器103和一個(gè)lbit的快速 訪問標(biāo)志寄存器305構(gòu)成一個(gè)新的33bit的快速移位寄存器鏈306??焖僦噶罴拇嫫鹘M301 由四個(gè)32bit的寄存器組成,用于存放快速搬運(yùn)程序。傳送時(shí),核循環(huán)執(zhí)行快速指令寄存 器組301中的指令。循環(huán)判斷器302根據(jù)判斷結(jié)果決定是否繼續(xù)快速傳送。從而實(shí)現(xiàn)在片 外調(diào)試存儲空間40和內(nèi)核存儲器之間快速通信??焖賯魉瓦^程中的讀寫的握手都通過更 新快速訪問標(biāo)志寄存器305來完成,快速訪問標(biāo)志寄存器305與訪問標(biāo)志208構(gòu)成鏡像。在數(shù)據(jù)量大的快速傳送過程中,調(diào)試主機(jī)只需要在傳送之初訪問一次地址寄存器204 和控制寄存器206,而不是在傳輸過程中不斷訪問,這樣傳輸中對地址寄存器204和控制 寄存器206訪問的開銷相對較小??焖僖莆患拇嫫麈?06中除了 1比特位的快速訪問標(biāo)志 寄存器305外,都是在傳送數(shù)據(jù)。這大大提高了 JTAG的有效的傳輸速率。圖7為片外調(diào)試存儲空間40與內(nèi)核的快速傳送流程圖。步驟740,內(nèi)核請求快速傳送,將讀寫控制、訪問類型和寬度等訪問信息寫入控制寄 存器206。步驟741,內(nèi)核將快速傳送起始地址信息寫入地址寄存器204。 步驟742,內(nèi)核置訪問標(biāo)志208為1,請求開始快速傳送。步驟743,是否快速傳送第一個(gè)數(shù)據(jù),如果是,執(zhí)行步驟744,如果不是執(zhí)行步驟745。 步驟744, 調(diào)試主機(jī)讀控制移位寄存器104。由于是快速傳送啟動(dòng)后第一次通信,所以調(diào)試主機(jī)序?qū)刂埔莆患拇嫫?04進(jìn)行訪問,確定快速傳送地讀寫、訪問類型和寬度4{曰息o步驟745,調(diào)試主機(jī)讀快速移位寄存器鏈306。步驟746,調(diào)試主機(jī)根據(jù)串行移出快速移位寄存器鏈306的值判斷快速訪問標(biāo)志寄存 器305是否為1,如果是,執(zhí)行步驟747,如果不是,執(zhí)行步驟745。 步驟747,調(diào)試主機(jī)啟動(dòng)一次快速傳送。步驟748,該次快速傳送是對片外調(diào)試存儲空間40的讀還是寫,如果是寫,執(zhí)行步驟 749,如果是讀,執(zhí)行步驟750。步驟749,內(nèi)核執(zhí)行快速指令寄存器組301中指令,更新數(shù)據(jù)寄存器205中的數(shù)據(jù), 數(shù)據(jù)移位寄存器103下載數(shù)據(jù)寄存器205中的數(shù)據(jù),將第一個(gè)數(shù)據(jù)寫入快速傳送起始地址, 以后每寫一個(gè)數(shù)據(jù)地址加4。步驟750,內(nèi)核從快速傳送的起始地址取數(shù)據(jù),以后每取一個(gè)數(shù)據(jù)地址加4,取出來 的數(shù)據(jù)寫入數(shù)據(jù)移位寄存器103,數(shù)據(jù)移位寄存器103將新數(shù)據(jù)上載到數(shù)據(jù)寄存器205, 內(nèi)核執(zhí)行快速指令寄存器組301中指令,讀取數(shù)據(jù)寄存器205中的新數(shù)據(jù)。步驟751,調(diào)試主機(jī)將快速訪問標(biāo)志寄存器305清零,表示結(jié)束本次快速傳送。步驟752,內(nèi)核循環(huán)查詢控制寄存器206。步驟753,內(nèi)核根據(jù)控制寄存器206的值判斷訪問標(biāo)志208是否為0,如果是,執(zhí)行 步驟754,如果不是執(zhí)行步驟752。 步驟754,結(jié)束一次快速傳送。步驟755,是否繼續(xù)快送傳送,如果是,執(zhí)行步驟742,如果不是,中止執(zhí)行快速指 令寄存器組301中的指令,結(jié)束快速傳送。通過上述流程,片外調(diào)試存儲空間40可與內(nèi)核處理器快速通信,在通信過程中,TAP 不需要不斷訪問地址移位寄存器102、控制移位寄存器104,有效地減少了通信的額外開 銷,從而提高了 JTAG接口的有效傳輸速度。調(diào)試異常的觸發(fā)會(huì)使微處理器進(jìn)入調(diào)試態(tài),本發(fā)明提供七類與微處理器流水級相關(guān)的 調(diào)試異常,分別為軟件斷點(diǎn)501、指令斷點(diǎn)502、寫數(shù)據(jù)斷點(diǎn)503、讀數(shù)據(jù)斷點(diǎn)504、單步 異常505、調(diào)試中斷506和調(diào)試啟動(dòng)異常507。它們在微處理器的不同流水級產(chǎn)生。如圖1 所示,軟件斷點(diǎn)501在ID (Instruction Decode)級譯碼后產(chǎn)生。指令斷點(diǎn)502在ID級 指令比較后產(chǎn)生。寫數(shù)據(jù)斷點(diǎn)503在DM (Data Memory access)級通過比較指令和存儲數(shù)據(jù)產(chǎn)生。讀數(shù)據(jù)斷點(diǎn)504在TC (Tag Co即are)級通過比較指令和讀取數(shù)據(jù)產(chǎn)生。單步異 常505在ID級通過比較發(fā)現(xiàn)一個(gè)執(zhí)行步流過了 ID級時(shí)產(chǎn)生。 一個(gè)執(zhí)行步的概念在本發(fā)明 中是這樣定義的,對于普通的指令, 一條指令就是一個(gè)執(zhí)行步,對于跳轉(zhuǎn)指令, 一個(gè)執(zhí)行 步為一條跳轉(zhuǎn)指令加一個(gè)延時(shí)槽。對于JUMP/BRANCH指令而言,后面有兩個(gè)延時(shí)槽,這時(shí) JUMP/BRANCH指令加2個(gè)延時(shí)槽組成一個(gè)執(zhí)行歩。調(diào)試中斷506通過調(diào)試主機(jī)發(fā)送中斷信 號在TC級產(chǎn)生。調(diào)試啟動(dòng)異常507可以通過調(diào)試主機(jī)設(shè)置,在微處理器啟動(dòng)后立即產(chǎn)生 調(diào)試異常轉(zhuǎn)入調(diào)試態(tài)。它也在TC級產(chǎn)生。在本發(fā)明中軟件斷點(diǎn)501、指令斷點(diǎn)502、寫數(shù) 據(jù)斷點(diǎn)503、讀數(shù)據(jù)斷點(diǎn)504和單步異常505都是在調(diào)試態(tài)下設(shè)置觸發(fā)條件,所以微處理 器第一次進(jìn)入調(diào)試態(tài)只能通過調(diào)試中斷506或調(diào)試啟動(dòng)異常507。調(diào)試中斷506在微處理 器運(yùn)行時(shí)可以通過調(diào)試主機(jī)在任何時(shí)候發(fā)送調(diào)試異常。在微處理器啟動(dòng)后調(diào)試啟動(dòng)異常 507可以使處理器立即進(jìn)入調(diào)試態(tài)并根據(jù)需要設(shè)置軟件斷點(diǎn)501、指令斷點(diǎn)502、寫數(shù)據(jù)斷 點(diǎn)503、讀數(shù)據(jù)斷點(diǎn)504、單步異常505這五類調(diào)試異常的觸發(fā)條件,可用于調(diào)試微處理 器的啟動(dòng)過程。精確的調(diào)試異常處理方法對調(diào)試起著至關(guān)重要的作用,它一方面可以保證調(diào)試準(zhǔn)確地 跟蹤到程序的執(zhí)行流程,另一方面可以保證調(diào)試異常的加入不會(huì)破壞原有程序的執(zhí)行流程 和結(jié)果。本發(fā)明中通過以下四種技術(shù)保證微處理對調(diào)試異常的精確處理。調(diào)試異常觸發(fā)后,異常PC暫存寄存器603保存調(diào)試異常觸發(fā)時(shí)第一條未完成指令的 PC值,也就是微處理器從調(diào)試態(tài)跳出后執(zhí)行的第一條指令的PC值,在本發(fā)明中每次調(diào) 試異常觸發(fā)時(shí)都會(huì)更新異常PC暫存寄存器603的值。這樣就可以保證微處理器跳出調(diào)試 態(tài)以后從進(jìn)入調(diào)試態(tài)之前的第一條未完成的指令開始執(zhí)行。從而保證原有程序的正常順序 執(zhí)行。此外,在調(diào)試態(tài)下,可以通過修改異常PC暫存寄存器603中的值,實(shí)現(xiàn)微處理器 跳出調(diào)試態(tài)后從程序的任意一條指令開始執(zhí)行程序。異常集中在流水線的TC級處理,如圖1所示,本發(fā)明中七種不同的調(diào)試異常在不同的 流水級產(chǎn)生,異常產(chǎn)生后不會(huì)立刻被處理,而是隨流水線流至TC級后,進(jìn)入調(diào)試異常插 入單元601,如果有多個(gè)調(diào)試異常同時(shí)產(chǎn)生,調(diào)試異常插入單元601根據(jù)調(diào)試異常的優(yōu)先 級處理調(diào)試異常,然后向PCU602發(fā)出告警信號,PCU602接收到告警信號立刻清除流水線 中未完成的指令和異常等信號,重啟整個(gè)流水線,跳到片外的調(diào)試異常入口取指,同時(shí)將 異常相關(guān)的信號給到調(diào)試寄存器604,保存異常標(biāo)志信息和進(jìn)入調(diào)試態(tài)的狀態(tài)信息。將異 常統(tǒng)一在TC級處理一方面確保了觸發(fā)異常指令的前續(xù)指令全部被執(zhí)行完畢,另一方面保證指令序列中先發(fā)生的異常先被處理,而不會(huì)因?yàn)榱魉€的存在導(dǎo)致異常處理的混亂。在微處理器中既有調(diào)試異常也有普通異常,在同一個(gè)時(shí)鐘周期可能有多個(gè)異常產(chǎn)生。 正確安排各種異常的優(yōu)先級可以保證異常被有序處理。在本發(fā)明中復(fù)位優(yōu)先級最高,除復(fù) 位外,異常優(yōu)先級的安排遵循以下原則如果沒有依賴性,調(diào)試異常優(yōu)先,如果有依賴性, 被依賴的異常優(yōu)先級高。如某些調(diào)試異常(軟件斷點(diǎn)501、讀數(shù)據(jù)斷點(diǎn)504),分別對一些 取指令相關(guān)的操作和讀數(shù)據(jù)相關(guān)的操作具有依賴性,所以這些異常的優(yōu)先級也低于對應(yīng)這 些操作產(chǎn)生的異常的優(yōu)先級。在同一流水級中,可以根據(jù)這個(gè)原則劃分異常的優(yōu)先級。本 發(fā)明中各類異常的優(yōu)先級如圖8所示。有效處理調(diào)試態(tài)下發(fā)生的普通異常。在調(diào)試態(tài)下,仍然有可能發(fā)生普通異常,這些異 常的處理不會(huì)使微處理器跳出調(diào)試態(tài),而是采取重進(jìn)入的策略,即重新進(jìn)入調(diào)試態(tài),從片 外調(diào)試存儲空間40取指。另外,調(diào)試態(tài)下屏蔽所有調(diào)試異常。這樣,調(diào)試態(tài)下發(fā)生的所 有異常對于被調(diào)試程序而言,都是不可見的,從而不會(huì)對被調(diào)試程序產(chǎn)生影響。 圖9為本發(fā)明所述的調(diào)試流程圖。步驟701,微處理器在啟動(dòng)時(shí)檢測調(diào)試主機(jī)是否已設(shè)置調(diào)試啟動(dòng)異常,如果是,執(zhí)行 步驟707,如果不是,執(zhí)行步驟702。步驟702,微處理器啟動(dòng)并執(zhí)行相關(guān)程序。 步驟703,用戶根據(jù)需要啟動(dòng)調(diào)試。步驟704,微處理器檢測當(dāng)前是否有調(diào)試異常觸發(fā)條件設(shè)置。如果有,執(zhí)行步驟706, 如果沒有,執(zhí)行步驟705。步驟705,微處理器處于運(yùn)行狀態(tài),且當(dāng)前沒有已設(shè)置的調(diào)試異常,所以只能通過調(diào) 試主機(jī)發(fā)送調(diào)試中斷506觸發(fā)調(diào)試異常。步驟706,當(dāng)前有設(shè)置好的調(diào)試異常,微處理器檢測調(diào)試異常是否觸發(fā),如果是,執(zhí) 行步驟707,如果不是,循環(huán)執(zhí)行步驟706,等待調(diào)試異常觸發(fā)。步驟707,調(diào)試異常觸發(fā),微處理器對調(diào)試異常進(jìn)行精確處理。步驟708,微處理器進(jìn)入調(diào)試態(tài)。步驟709,微處理器通過JTAG接口從片外調(diào)試存儲空間40取指執(zhí)行調(diào)試異常處理程序。步驟710,執(zhí)行完調(diào)試異常處理程序后,等待并執(zhí)行調(diào)試主機(jī)的調(diào)試命令,同時(shí)反饋 調(diào)試信息。12步驟711,是否繼續(xù)調(diào)試,如果是,執(zhí)行步驟710,如果不是,執(zhí)行步驟712。步驟712,根據(jù)用戶需求決定是否設(shè)定下一次調(diào)試異常的觸發(fā)條件,如果是,執(zhí)行步 驟713,如果不是執(zhí)行步驟714。步驟713,調(diào)試主機(jī)將設(shè)置下一次調(diào)試異常觸發(fā)條件的命令寫入片外調(diào)試存儲空間40, 內(nèi)核讀取這些命令并設(shè)置相關(guān)調(diào)試異常的觸發(fā)條件。步驟714,內(nèi)核從片外調(diào)試存儲空間40取指執(zhí)行現(xiàn)場還原程序。步驟715,微處理器跳出調(diào)試態(tài)。步驟716,微處理器從進(jìn)入調(diào)試態(tài)前的第一條未執(zhí)行完的指令開始繼續(xù)執(zhí)行。 需要注意的是,以上列舉的僅是本發(fā)明的具體實(shí)施例子。顯然,本發(fā)明不限于以上實(shí)施例子,還可以有許多變形。本領(lǐng)域的普通技術(shù)人員能從本發(fā)明公開的內(nèi)容直接導(dǎo)出或聯(lián)想到的所有變形,均應(yīng)認(rèn)為是本發(fā)明的保護(hù)范圍。
權(quán)利要求
1. 一種微處理器調(diào)試方法,其特征在于包括一個(gè)調(diào)試通信接口,作為調(diào)試主機(jī)與微處理器內(nèi)核的通信通道;一種同步機(jī)制,保證不同時(shí)鐘域的內(nèi)核與調(diào)試主機(jī)分時(shí)訪問地址寄存器、數(shù)據(jù)寄存器和控制寄存器;一種快速傳送機(jī)制,實(shí)現(xiàn)大量數(shù)據(jù)在片外調(diào)試存儲空間與微處理器內(nèi)核之間快速上載和下載;七類產(chǎn)生于微處理器不同流水級的調(diào)試異常;一種調(diào)試異常精確處理機(jī)制。
2、 根據(jù)權(quán)利要求1所述的微處理器調(diào)試方法,其特征在于所述快速傳送機(jī)制將大量 地址連續(xù)的數(shù)據(jù)從調(diào)試主機(jī)下載到內(nèi)核存儲器或從內(nèi)核存儲器上載到調(diào)試主機(jī)時(shí),只需在上 載或下載之初訪問一次地址寄存器和一次控制寄存器即可。
3、根據(jù)權(quán)利要求1或2所述的微處理器調(diào)試方法,其特征在于所述調(diào)試異常精確處理 機(jī)制是將調(diào)試異常集中在微處理器流水線的TC級處理;如果有多個(gè)異常同時(shí)發(fā)生,遵循一定 的優(yōu)先級處理;調(diào)試態(tài)下發(fā)生的普通異常時(shí),采用重進(jìn)入調(diào)試態(tài)策略。
4、 一種微處理器調(diào)試模塊,其特征是包括標(biāo)準(zhǔn)JTAG接口 (10)、調(diào)試通信接口 (20)、 快速傳送單元(30)、片外調(diào)試存儲空間(40)、流水線相關(guān)的精確調(diào)試異常觸發(fā)單元(50) 和流水線相關(guān)的精確異常處理單元(60);所述標(biāo)準(zhǔn)JTAG接口 (10)的一端與片外調(diào)試存儲空 間(40)相連,標(biāo)準(zhǔn)JTAG接口 (10)的另一端分別與調(diào)試通信接口 (20)和快速傳送單元(30) 相連,調(diào)試通信接口 (20)分別與流水線相關(guān)的精確調(diào)試異常觸發(fā)單元(50)和流水線相關(guān) 的精確異常處理單元(60)相連,快速傳送單元(30)也分別與流水線相關(guān)的精確調(diào)試異常 觸發(fā)單元(50)和流水線相關(guān)的精確異常處理單元(60)相連,流水線相關(guān)的精確調(diào)試異常 觸發(fā)單元(50)與流水線相關(guān)的精確異常處理單元(60)相連。
5、 根據(jù)權(quán)利要求4所述的微處理器調(diào)試模塊,其特征是所述流水線相關(guān)的精確異常處 理單元(60)包括調(diào)試異常插入單元(601),流水線控制單元(602)、異常PC暫存寄存器(603) 和調(diào)試寄存器(604)分別與調(diào)試異常插入單元(601)相連。
6、 根據(jù)權(quán)利要求5所述的微處理器調(diào)試模塊,其特征是所述流水線相關(guān)的精確調(diào)試異 常觸發(fā)單元(50)包括分別與調(diào)試異常插入單元(601)相連的軟件斷點(diǎn)(501)、指令斷點(diǎn)(502)、寫數(shù)據(jù)斷點(diǎn)(503)、讀數(shù)據(jù)斷點(diǎn)(504)、單布異常(505)、調(diào)試中斷(506)和調(diào)試自動(dòng)異常 (507)。
7、 根據(jù)權(quán)利要求6所述的微處理器調(diào)試模塊,其特征是所述調(diào)試通信接口 (20)包括 同步單元(207),所述同步單元(207)分別與地址寄存器(204)、數(shù)據(jù)寄存器(205)和控 制寄存器(206)相連;調(diào)試通信接口 (20)還包括訪問標(biāo)志(208)。
8、 根據(jù)權(quán)利要求7所述的微處理器調(diào)試模塊,其特征是所述標(biāo)準(zhǔn)JTAG接口 (10)包括 TAP控制器(101),地址移位寄存器(102)、數(shù)據(jù)移位寄存器(103)和控制移位寄存器(104) 分別與TAP控制器(101)相連。
9、 根據(jù)權(quán)利要求8所述的微處理器調(diào)試模塊,其特征是所述快速傳送單元(30)包括 相連的快速指令寄存器組(301)和循環(huán)判斷器(302),還包括內(nèi)含快速訪問標(biāo)志寄存器(305) 的快速移位寄存器鏈(306)。
10、 根據(jù)權(quán)利要求9所述的微處理器調(diào)試模塊,其特征是所述片外調(diào)試存儲空間(40) 包括調(diào)試程序存儲空間(401)、調(diào)試數(shù)據(jù)存儲空間(402)和調(diào)試反饋存儲空間(403)。
全文摘要
本發(fā)明公開了一種微處理器調(diào)試方法,包括一個(gè)調(diào)試通信接口,作為調(diào)試主機(jī)與微處理器內(nèi)核的通信通道;一種同步機(jī)制,保證不同時(shí)鐘域的內(nèi)核與調(diào)試主機(jī)分時(shí)訪問地址寄存器、數(shù)據(jù)寄存器和控制寄存器;一種快速傳送機(jī)制,實(shí)現(xiàn)大量數(shù)據(jù)在片外調(diào)試存儲空間與微處理器內(nèi)核之間快速上載和下載;七類產(chǎn)生于微處理器不同流水級的調(diào)試異常;一種調(diào)試異常精確處理機(jī)制。本發(fā)明還同時(shí)提供了用于嵌入到被調(diào)試的微處理器上的專用的微處理器調(diào)試模塊。采用本發(fā)明的方法能解決JTAG調(diào)試傳輸速率問題以及精確調(diào)試異常的觸發(fā)和處理問題。
文檔編號G06F11/36GK101261601SQ20081006071
公開日2008年9月10日 申請日期2008年4月25日 優(yōu)先權(quán)日2008年4月25日
發(fā)明者鵬 劉, 姚慶棟, 宋衛(wèi)權(quán), 徐國柱, 玥 王, 嶺 秦, 耿 鐘 申請人:浙江大學(xué)