專利名稱:一種基于虛擬斷點(diǎn)指令的無(wú)縫片上系統(tǒng)調(diào)試方法
技術(shù)領(lǐng)域:
本發(fā)明屬于集成電路領(lǐng)域,具體涉及一種片上系統(tǒng)的調(diào)試方法。
背景技術(shù):
國(guó)際半導(dǎo)體技術(shù)路線圖(ITRS:International Technology Roadmap for Semiconductors)指出,調(diào)試和定位問(wèn)題所需要的時(shí)間,將會(huì)隨著工藝的進(jìn)步呈指數(shù)型 增長(zhǎng)° 據(jù)文獻(xiàn) AReconfigurable Design-for-Debug Infrastructure for SoCs(M. Abramovici,Paul Bradley,Kumar Dwarakanah,et al. ,In Proceedings ACM/IEEE Design Automation Conference (DAC), 2006 :7_12)所述,在整個(gè)片上系統(tǒng)的設(shè)計(jì)過(guò)程中,從第一次 投片到最后成功的實(shí)現(xiàn)所有功能,硬件調(diào)試的時(shí)間已經(jīng)接近整個(gè)時(shí)間的35%,而且這個(gè)數(shù) 字隨著集成度的提高還會(huì)增加。以調(diào)試靈活性和覆蓋面為驅(qū)動(dòng)的片上系統(tǒng)調(diào)試方法的設(shè)計(jì) 中,如何更加合理地設(shè)計(jì)調(diào)試手段,成為了一個(gè)重要的挑戰(zhàn)。插入斷點(diǎn)指令的調(diào)試方法,是片上系統(tǒng)調(diào)試的一種有效且靈活的手段。該方法通 常采用在預(yù)期指令流位置插入斷點(diǎn)指令,當(dāng)調(diào)試目標(biāo)機(jī)運(yùn)行到該指令時(shí),暫停系統(tǒng)的運(yùn)行 狀態(tài),進(jìn)入調(diào)試狀態(tài),調(diào)試用戶可以通過(guò)調(diào)試手段觀測(cè)系統(tǒng)的當(dāng)前狀態(tài)信息。退出調(diào)試模式 前,需要把插入的斷點(diǎn)指令置換為原指令,控制目標(biāo)機(jī)從該指令的位置重新開(kāi)始執(zhí)行,以此 確保原指令運(yùn)行序列的正確性。另外,調(diào)試用戶沒(méi)有刪除斷點(diǎn)指令之前,是希望該斷點(diǎn)指令 一直有效的,這樣,當(dāng)指令流循環(huán)運(yùn)行到此位置時(shí),該斷點(diǎn)指令仍然有效,以此實(shí)現(xiàn)調(diào)試用 戶對(duì)某一特定狀態(tài)的監(jiān)測(cè)。若按照上述方法,進(jìn)行斷點(diǎn)指令插入設(shè)計(jì)時(shí),將出現(xiàn)如附圖1、2所示情況。附圖1 中,在預(yù)期的A位置插入斷點(diǎn)指令,在斷點(diǎn)指令執(zhí)行后,調(diào)試用戶介入,退出調(diào)試之前,恢復(fù) 原A位置的指令。插入的斷點(diǎn)指令被執(zhí)行了一次后,就被置換回原來(lái)指令,那么如果斷點(diǎn)指 令為循環(huán)體內(nèi)的指令,再一次執(zhí)行到該位置時(shí),已沒(méi)有斷點(diǎn)指令。換句話說(shuō),在調(diào)試用戶沒(méi) 有刪除斷點(diǎn)的前提下,斷點(diǎn)指令在執(zhí)行一次后,被自動(dòng)清除。附圖2中,在預(yù)期的A位置插入斷點(diǎn)指令,在斷點(diǎn)指令執(zhí)行后,調(diào)試用戶介入,退出 調(diào)試之前,未恢復(fù)原A位置的指令。退出調(diào)試后,目標(biāo)機(jī)從A位置開(kāi)始運(yùn)行,斷點(diǎn)指令再次 命中,如此無(wú)限循環(huán)執(zhí)行,系統(tǒng)異常。
發(fā)明內(nèi)容
調(diào)試方法的可控制性,要求調(diào)試用戶可以通過(guò)調(diào)試器有效的控制目標(biāo)機(jī)的運(yùn)行狀 態(tài)和待調(diào)程序的執(zhí)行過(guò)程。調(diào)試方法的低入侵性,則要求調(diào)試過(guò)程不改變?cè)谐绦虻膱?zhí)行 行為,不對(duì)原有程序運(yùn)行結(jié)果產(chǎn)生影響?;谏鲜鰞蓚€(gè)要求,本發(fā)明實(shí)現(xiàn)了一種基于虛擬斷 點(diǎn)指令的調(diào)試方法。該方法通過(guò)在停頓指令后插入虛擬斷點(diǎn)指令(該斷點(diǎn)指令執(zhí)行時(shí),調(diào) 試者不可見(jiàn)),利用該斷點(diǎn)指令執(zhí)行的時(shí)間槽即時(shí)間間隙,完成預(yù)期斷點(diǎn)指令的恢復(fù),在沒(méi) 有被調(diào)試刪除之前,預(yù)期斷點(diǎn)指令一直有效。同時(shí),確保每次執(zhí)行到預(yù)期斷點(diǎn)指令時(shí),目標(biāo) 機(jī)的正確運(yùn)行。具體內(nèi)容如下
—種基于虛擬斷點(diǎn)指令的無(wú)縫片上系統(tǒng)調(diào)試方法,包括如下步驟在預(yù)期插入斷 點(diǎn)指令的A位置,插入預(yù)期斷點(diǎn)指令,目標(biāo)機(jī)運(yùn)行到該預(yù)期斷點(diǎn)指令時(shí),進(jìn)入調(diào)試模式,打 開(kāi)調(diào)試窗口,調(diào)試用戶介入調(diào)試;在退出調(diào)試模式前,將A位置的原指令恢復(fù),在目標(biāo)機(jī)指 令流中下一條指令位置,稱之為B位置,插入一個(gè)虛擬斷點(diǎn)指令,利用該虛擬斷點(diǎn)指令執(zhí)行 的時(shí)間槽,完成預(yù)期斷點(diǎn)指令的恢復(fù),關(guān)閉調(diào)試窗口,退出調(diào)試模式;所述虛擬斷點(diǎn)指令在 調(diào)試運(yùn)行過(guò)程中用戶不可見(jiàn)。本發(fā)明的有益效果是所述方法無(wú)需用戶干預(yù),實(shí)現(xiàn)一次插入斷點(diǎn)后,斷點(diǎn)行為持 續(xù)有效,直至用戶將斷點(diǎn)清除,為嵌入式片上系統(tǒng)的調(diào)試提供了靈活且高效的手段。
圖I是預(yù)期插入斷點(diǎn)指令一次有效運(yùn)行示意圖。圖2是預(yù)期插入斷點(diǎn)循環(huán)執(zhí)行運(yùn)行示意圖。圖3是本發(fā)明插入虛擬斷點(diǎn)指令運(yùn)行示意圖。圖4是本發(fā)明的互聯(lián)結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明做詳細(xì)描述。所述方法的實(shí)現(xiàn)結(jié)構(gòu)如附圖3所示,A位置為預(yù)期插入斷點(diǎn)指令的位置,在所述圖 a中的A位置插入斷點(diǎn)指令,目標(biāo)機(jī)運(yùn)行到該斷點(diǎn)指令時(shí),進(jìn)入調(diào)試模式,打開(kāi)調(diào)試窗口,調(diào) 試用戶介入調(diào)試;所述圖b中,實(shí)現(xiàn)在退出調(diào)試模式前,將A位置的原指令恢復(fù),在目標(biāo)機(jī)指 令流中下一條指令位置,稱之為B位置,插入一個(gè)虛擬斷點(diǎn)指令,關(guān)閉調(diào)試窗口,退出調(diào)試 模式。目標(biāo)機(jī)從A位置開(kāi)始運(yùn)行,運(yùn)行到B位置時(shí),虛擬斷點(diǎn)指令被執(zhí)行,進(jìn)入調(diào)試模式,但 不打開(kāi)調(diào)試窗口,調(diào)試用戶不可介入調(diào)試,如所述圖c中,利用該時(shí)間槽,完成兩個(gè)操作,一 是恢復(fù)B位置的原指令,二是恢復(fù)A位置的斷點(diǎn)指令,退出調(diào)試模式,目標(biāo)機(jī)從B位置開(kāi)始 繼續(xù)運(yùn)行。如此,即實(shí)現(xiàn)了目標(biāo)機(jī)指令流的正確運(yùn)行,同時(shí)A位置的預(yù)期插入的斷點(diǎn)指令被 自動(dòng)恢復(fù)。為實(shí)現(xiàn)所述方法,首先定義調(diào)試系統(tǒng)互連模型,如附圖4所示。該系統(tǒng)包括以下3 個(gè)組件目標(biāo)機(jī)目標(biāo)調(diào)試對(duì)象,完成指令流的運(yùn)行,在遇到斷點(diǎn)指令后,暫停目標(biāo)機(jī)運(yùn)行, 控制調(diào)試中間件啟動(dòng)。接收到調(diào)試中間件退出命令后,從斷點(diǎn)指令開(kāi)始繼續(xù)運(yùn)行。調(diào)試中間件調(diào)試用戶與目標(biāo)機(jī)的通信樞紐,對(duì)調(diào)試用戶透明。接收調(diào)試窗口命 令,解析為目標(biāo)機(jī)可識(shí)別控制信息;控制目標(biāo)機(jī)與調(diào)試窗口間通信的開(kāi)啟與關(guān)閉。調(diào)試窗口 調(diào)試用戶可見(jiàn),向目標(biāo)機(jī)發(fā)送調(diào)試命令。在所述調(diào)試系統(tǒng)中,為采用一種歸一化的形式實(shí)現(xiàn)所述調(diào)試方法,本發(fā)明將公開(kāi) 一種R語(yǔ)言,由此來(lái)描述所示方法的實(shí)現(xiàn)過(guò)程。R語(yǔ)言的特點(diǎn)在于第一可觀性,R語(yǔ)言的基本操作為單條原語(yǔ),同時(shí)定義了狀態(tài) 控制語(yǔ)句,由系統(tǒng)組件按照具體實(shí)現(xiàn)規(guī)定其定義,便于方法的描述;第二在時(shí)間上和空間上 的順序性,時(shí)間上順序性是指R語(yǔ)言描述的操作按照原語(yǔ)序列的順序進(jìn)行執(zhí)行,空間上順 序性則是指調(diào)試系統(tǒng)中3個(gè)組件的特定運(yùn)行順序;第三閉合性,R語(yǔ)言規(guī)定了執(zhí)行的起始行為start與終結(jié)行為end,同時(shí),3個(gè)組件的關(guān)閉與開(kāi)啟操作分別閉合。R語(yǔ)言的語(yǔ)法說(shuō)明如下UiXn :布爾量,n取值0 9,其值false和true,分別表示“假”與“真”;2、Read,地址,標(biāo)記讀取“地址”中數(shù)據(jù),在“標(biāo)記“中保存該數(shù)據(jù);3、Write,數(shù)據(jù),地址將“數(shù)據(jù)“寫(xiě)入”地址“中;4、If條件goto標(biāo)識(shí)“條件“為”真“時(shí),跳轉(zhuǎn)至”標(biāo)識(shí)“位置執(zhí)行,否則順序執(zhí)行;5、#An :數(shù)據(jù)標(biāo)記,n取值0 9,該標(biāo)記可以記錄數(shù)據(jù);6、$Yn :元語(yǔ)標(biāo)識(shí),n取值0 9,定義了 R語(yǔ)言單條元語(yǔ);7、#xx :狀態(tài)控制語(yǔ)句,該語(yǔ)句包括若干條單條元語(yǔ);# windows_down :調(diào)試窗口關(guān)閉;# windows_open :調(diào)試窗 口打開(kāi);# debugmod_down :調(diào)試模式關(guān)閉;# debugmod_open :調(diào)試模式啟動(dòng);# run_on 目標(biāo)機(jī)運(yùn)行;# run_down 目標(biāo)機(jī)運(yùn)行結(jié)束;# non_bphit :調(diào)試模式啟動(dòng);8、ta :斷點(diǎn)指令;9、watchpoint_address :預(yù)期設(shè)置的斷點(diǎn)指令位置;10、PC 目標(biāo)機(jī)當(dāng)前運(yùn)行的指令位置;11、NPC :緊鄰PC的下一個(gè)指令位置;其中,調(diào)試用戶在調(diào)試窗口打開(kāi)期間可見(jiàn)目標(biāo)機(jī),其余時(shí)刻,目標(biāo)機(jī)對(duì)調(diào)試用戶透 明。該調(diào)試方法,以調(diào)試用戶啟動(dòng)目標(biāo)機(jī)運(yùn)行為開(kāi)始,以目標(biāo)機(jī)運(yùn)行結(jié)束為最終結(jié)點(diǎn), 以下R語(yǔ)言描述的方法中,初始化為調(diào)試窗口開(kāi)啟狀態(tài)。start # windowns_open;
$Y0 @X0 =false;
Read PC,#A0;
Read watchpoint—address,# A1 ;
If pc=watchpoint—address goto $Y 1 ;
Write ta,watchpoint—address; goto $Y2;
$Y1 @X0=tme;
Read npc,#A2;
Write ta,npc;
Write #A0,PC;
$Y2 # windowns—down ;
# debugmode—down;
#run—on;
If non—bphit goto $Y4;
# debugmode—open;
If @X0= =fault goto start;
Write #A2,NPC; goto $Y0;
end $Y4 #run—down;以下按照?qǐng)?zhí)行順序,描述上述方法初始時(shí),系統(tǒng)調(diào)試窗口打開(kāi),為0X0賦值“假”,讀取目標(biāo)機(jī)暫停時(shí)的PC位置的指 令,存入#A0 ;讀取預(yù)期設(shè)置斷點(diǎn)位置watchpoint_address的指令,存入#A1 ;判斷當(dāng)前 PC值是否等于watchpoint_address值,以此確認(rèn)是否由斷點(diǎn)指令的執(zhí)行導(dǎo)致系統(tǒng)進(jìn)入 調(diào)試模式,若不相等,表明此時(shí)目標(biāo)機(jī)暫停的位置,并不是斷點(diǎn)位置,于是在watchpoint_ address位置插入斷點(diǎn)指令ta,轉(zhuǎn)入$Y2,關(guān)閉調(diào)試窗口,退出調(diào)試模式,目標(biāo)機(jī)從PC位置開(kāi) 始運(yùn)行。當(dāng)目標(biāo)機(jī)運(yùn)行到設(shè)置的斷點(diǎn)位置時(shí),執(zhí)行斷點(diǎn)指令,進(jìn)入調(diào)試模式,此時(shí)判斷0X0 的“真”與“假”。由于前面執(zhí)行過(guò)程中,@X0為“假”,因此,跳轉(zhuǎn)入start開(kāi)始執(zhí)行。為0X0賦值“假”,讀取目標(biāo)機(jī)暫停時(shí)的PC位置的指令,存入#A0 ;讀取預(yù)期設(shè)置 斷點(diǎn)位置watchpoint_address的指令,存入#A1 ;此時(shí),判別條件PC = = watchpoint_ address成立,表明此時(shí)調(diào)試狀態(tài)的進(jìn)入是由斷點(diǎn)指令執(zhí)行導(dǎo)致的。跳轉(zhuǎn)入$Y1,執(zhí)行虛擬斷點(diǎn)的插入置0X0為“真”,讀取NPC位置的指令,保存#A2,在NPC位置插入斷點(diǎn)指令ta,將保存在#A0的指令恢復(fù)到PC位置,轉(zhuǎn)入$Y2,關(guān)閉調(diào)試 窗口,退出調(diào)試模式,目標(biāo)機(jī)開(kāi)始從PC位置運(yùn)行。此時(shí)PC位置的指令被置換為原始指令,而NPC位置的指令為斷點(diǎn)指令,當(dāng)運(yùn)行到 NPC時(shí),斷點(diǎn)指令執(zhí)行,再一次進(jìn)入調(diào)試模式,此時(shí)0X0為“真”,將NPC位置的指令恢復(fù),取 消虛擬斷點(diǎn)指令,轉(zhuǎn)入$Y0。在此次由執(zhí)行虛擬斷點(diǎn)指令帶來(lái)的時(shí)間槽中,由調(diào)試中間件完 成將斷點(diǎn)指令寫(xiě)入PC位置。此時(shí)并沒(méi)有打開(kāi)調(diào)試窗口,即本次斷點(diǎn)指令執(zhí)行對(duì)調(diào)試用戶透 明。在$Y0處,置0X0為“假”,表征此時(shí)虛擬斷點(diǎn)指令已經(jīng)處理完成,判斷當(dāng)前目標(biāo)機(jī) 暫停的PC值與watchpoint_address,由于當(dāng)前的斷點(diǎn)指令是虛擬加入的,因此,兩者顯然 不同。執(zhí)行在watchpoint_address位置插入斷點(diǎn)指令ta,退出調(diào)試模式,目標(biāo)機(jī)開(kāi)始運(yùn)行。當(dāng)目標(biāo)機(jī)的指令運(yùn)行序列沒(méi)有循環(huán)執(zhí)行,那么在執(zhí)行到最后,也沒(méi)有再一次的斷 點(diǎn)命中,此時(shí)目標(biāo)機(jī)運(yùn)行結(jié)束,如果再一次循環(huán)到斷點(diǎn)指令,將按照上述再次重復(fù)執(zhí)行。
權(quán)利要求
1.一種基于虛擬斷點(diǎn)指令的無(wú)縫片上系統(tǒng)調(diào)試方法,包括如下步驟在預(yù)期插入斷點(diǎn)指令的A位置,插入預(yù)期斷點(diǎn)指令,目標(biāo)機(jī)運(yùn)行到該預(yù)期斷點(diǎn)指令時(shí),進(jìn)入調(diào)試模式,打開(kāi)調(diào)試窗口,調(diào)試用戶介入調(diào)試;在退出調(diào)試模式前,將A位置的原指令恢復(fù),在目標(biāo)機(jī)指令流中下一條指令位置,稱之為B位置,插入一個(gè)虛擬斷點(diǎn)指令,利用該虛擬斷點(diǎn)指令執(zhí)行的時(shí)間槽,完成預(yù)期斷點(diǎn)指令的恢復(fù),關(guān)閉調(diào)試窗口,退出調(diào)試模式; 其特征在于所述虛擬斷點(diǎn)指令在調(diào)試運(yùn)行過(guò)程中用戶不可見(jiàn)。
全文摘要
本發(fā)明實(shí)現(xiàn)了一種基于虛擬斷點(diǎn)指令的調(diào)試方法,基于調(diào)試方法的可控制性和低入侵性,該方法通過(guò)在停頓指令后插入虛擬斷點(diǎn)指令(該斷點(diǎn)指令執(zhí)行時(shí),調(diào)試者不可見(jiàn)),利用該斷點(diǎn)指令執(zhí)行的時(shí)間槽,完成預(yù)期斷點(diǎn)指令的恢復(fù),在沒(méi)有被調(diào)試刪除之前,預(yù)期斷點(diǎn)指令一直有效。同時(shí),確保每次執(zhí)行到預(yù)期斷點(diǎn)指令時(shí),目標(biāo)機(jī)的正確運(yùn)行。
文檔編號(hào)G06F11/26GK102662809SQ20121005595
公開(kāi)日2012年9月12日 申請(qǐng)日期2012年3月6日 優(yōu)先權(quán)日2012年3月6日
發(fā)明者張麗娜, 張洵穎, 楊博, 裴茹霞 申請(qǐng)人:中國(guó)航天科技集團(tuán)公司第九研究院第七七一研究所