两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種支持覆蓋率統(tǒng)計功能的仿真器及方法

文檔序號:10697570閱讀:434來源:國知局
一種支持覆蓋率統(tǒng)計功能的仿真器及方法
【專利摘要】本發(fā)明公開了一種支持覆蓋率統(tǒng)計功能的仿真器及方法,涉及到芯片仿真技術(shù)領(lǐng)域。仿真器包括調(diào)試控制模塊、芯片功能模塊和覆蓋率統(tǒng)計模塊,芯片功能模塊包括CPU_DBG、AHB總線、芯片程序存儲器、外設(shè);覆蓋率統(tǒng)計模塊包括統(tǒng)計模塊、寄存器、接口轉(zhuǎn)換模塊、選擇模塊、統(tǒng)計數(shù)據(jù)存儲器。統(tǒng)計模塊使用CPU_DBG和AHB總線的信號,將程序執(zhí)行的地址信息實時記錄到統(tǒng)計數(shù)據(jù)存儲器。覆蓋率統(tǒng)計的方法是:進(jìn)入調(diào)試模式后設(shè)置統(tǒng)計起始地址、開啟統(tǒng)計功能,并初始化統(tǒng)計數(shù)據(jù)存儲器,然后進(jìn)入運(yùn)行模式執(zhí)行程序,完成測試后導(dǎo)出統(tǒng)計數(shù)據(jù)并計算出測試覆蓋率。本發(fā)明的仿真器支持代碼覆蓋率、分支覆蓋率、數(shù)據(jù)覆蓋率統(tǒng)計功能,可以很快定位測試程序及被測程序的問題,提高程序開發(fā)測試效率。
【專利說明】
一種支持覆蓋率統(tǒng)計功能的仿真器及方法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及一種芯片仿真器,特別涉及一種支持覆蓋率統(tǒng)計功能的仿真器及方法。
【背景技術(shù)】
[0002]在智能卡芯片的程序開發(fā)和測試中,測試是否全面(即測試覆蓋率)一直是開發(fā)和測試人員都比較關(guān)注的問題。在芯片仿真器中實現(xiàn)測試覆蓋率統(tǒng)計功能,目前常用的有2種實現(xiàn)方法:程序插粧方法和仿真器TRACE功能。
[0003]程序插粧方法是指,通過軟件對已設(shè)計好的程序,或者是對編譯出來的程序代碼指令分析,在特殊位置插入功能程序,程序在測試運(yùn)行過程中輸出執(zhí)行的信息,再通過軟件分析得到測試覆蓋率。此方法插入程序代碼設(shè)計比較復(fù)雜,由于修改了被測程序結(jié)構(gòu),嚴(yán)重影響被測軟件的代碼量和執(zhí)行速度,對于存儲器容量使用比較緊張的智能卡芯片的程序測試并不適用。
[0004]仿真器TRACE功能是指,仿真器硬件將程序運(yùn)行過程中關(guān)鍵數(shù)據(jù)進(jìn)行壓縮緩存,實時的將數(shù)據(jù)傳送給上位機(jī)軟件,進(jìn)行PC端的大數(shù)據(jù)存儲,程序測試完成后,再通過軟件分析得到測試覆蓋率。此方法可以記錄程序所有軌跡,對問題分析定位很有幫助,但是對仿真器硬件存儲器容量、存儲器讀寫速度、數(shù)據(jù)傳輸速度要求都比較高,關(guān)鍵數(shù)據(jù)壓縮設(shè)計比較復(fù)雜,對大數(shù)據(jù)的分析比較困難,實現(xiàn)TRACE功能的仿真器成本較高,開發(fā)周期長,也不適合大量的應(yīng)用于程序的開發(fā)和測試。
[0005]如何設(shè)計適用于智能卡芯片程序測試,對仿真器硬件要求不高,軟硬件設(shè)計簡單,成本低,支持測試覆蓋率統(tǒng)計功能的仿真器?為解決此問題,本發(fā)明提出一種支持覆蓋率統(tǒng)計功能的仿真器及方法。

【發(fā)明內(nèi)容】

[0006]本發(fā)明所解決的技術(shù)問題是,如何設(shè)計一種支持測試覆蓋率統(tǒng)計功能的仿真器。
[0007]本發(fā)明的仿真器包括調(diào)試控制模塊、芯片功能模塊、覆蓋率統(tǒng)計模塊3部分:調(diào)試控制模塊,用于將統(tǒng)計數(shù)據(jù)存儲器中的數(shù)據(jù)導(dǎo)入和導(dǎo)出,對芯片功能模塊進(jìn)行調(diào)試;芯片功能模塊,用于仿真芯片功能,包括CPU_DBG、AHB總線、芯片程序存儲器、外設(shè);覆蓋率統(tǒng)計模塊,用于對程序執(zhí)行的地址信息進(jìn)行實時記錄,包括統(tǒng)計模塊、寄存器、接口轉(zhuǎn)換模塊、選擇模塊、統(tǒng)計數(shù)據(jù)存儲器。
[0008]各組件功能說明如下:
[0009]CPU_DBG,是指芯片的CPU及調(diào)試模塊,在調(diào)試控制模塊控制下執(zhí)行程序;
[0010]AHB總線,是指AHB接口的AHB總線控制器模塊,是CPU_DBG與AHB外設(shè)的接口 ;
[0011]芯片程序存儲器,用于存儲芯片執(zhí)行的程序;
[0012]外設(shè),是指除芯片程序存儲器外,芯片的其它AHB外設(shè);
[0013]統(tǒng)計模塊,使用CPU_DBGPC接口信號和AHB總線AHB接口信號,將程序執(zhí)行的地址信息記錄到統(tǒng)計數(shù)據(jù)存儲器中,上述的地址信息就是統(tǒng)計數(shù)據(jù);
[0014]寄存器,產(chǎn)生統(tǒng)計程序的起始地址、統(tǒng)計使能控制信號,輸出給統(tǒng)計模塊,控制統(tǒng)計模塊實現(xiàn)的具體功能;
[0015]接口轉(zhuǎn)換模塊,將AHB總線的AHB接口信號,轉(zhuǎn)換為寄存器接口信號和RAM接口信號,CPU_DBG通過AHB總線、接口轉(zhuǎn)換模塊完成對寄存器和統(tǒng)計數(shù)據(jù)存儲器的讀寫訪問;
[0016]選擇模塊,CPILDBG輸出調(diào)試模式信號,選擇統(tǒng)計模塊或者接口轉(zhuǎn)換模塊連接到統(tǒng)計數(shù)據(jù)存儲器;
[0017]統(tǒng)計數(shù)據(jù)存儲器,用于存儲統(tǒng)計模塊記錄程序執(zhí)行的地址信息數(shù)據(jù)。
[0018]各組件連接關(guān)系如下:
[0019]CPU_DBG與調(diào)試控制模塊、AHB總線、統(tǒng)計模塊、選擇模塊相連,AHB總線與CPU_DBG、芯片程序存儲器、外設(shè)、統(tǒng)計模塊、接口轉(zhuǎn)換模塊相連,統(tǒng)計模塊與CPU_DBG、AHB總線、寄存器、選擇模塊相連,接口轉(zhuǎn)換模塊與AHB總線、寄存器、選擇模塊相連,選擇模塊還與統(tǒng)計數(shù)據(jù)存儲器相連。
[0020]本發(fā)明的仿真器針對AHB總線的CPU芯片進(jìn)行設(shè)計,在原有仿真器硬件上增加覆蓋率統(tǒng)計模塊,使用AHB總線、CPU及調(diào)試模塊的信號,采用將程序執(zhí)行的地址在統(tǒng)計數(shù)據(jù)存儲器中對應(yīng)的地址位置進(jìn)行打標(biāo)的方式,實現(xiàn)程序執(zhí)行地址信息的記錄;將統(tǒng)計數(shù)據(jù)存儲器中的統(tǒng)計數(shù)據(jù)導(dǎo)出,使用程序軟件可以計算得到程序執(zhí)行過的地址,再與程序全部執(zhí)行的地址數(shù)據(jù)相比,計算出當(dāng)前測試達(dá)到的程序覆蓋率。
[0021]在完成測試后,統(tǒng)計數(shù)據(jù)存儲器中所有的數(shù)據(jù)都為有效數(shù)據(jù),統(tǒng)計數(shù)據(jù)存儲器每一 bit與芯片程序存儲器地址對應(yīng),在第一次統(tǒng)計前,統(tǒng)計數(shù)據(jù)存儲器全部bit清除為0,完成測試統(tǒng)計后,程序執(zhí)行過的地址對應(yīng)的bit標(biāo)識為I,根據(jù)標(biāo)識I的bit地址,以及統(tǒng)計數(shù)據(jù)存儲器數(shù)據(jù)與芯片程序存儲器地址對應(yīng)關(guān)系,計算出當(dāng)前程序執(zhí)行過的實際地址。仿真器支持統(tǒng)計數(shù)據(jù)存儲器中統(tǒng)計數(shù)據(jù)的導(dǎo)入和導(dǎo)出,支持程序測試停止后再次繼續(xù)測試,將當(dāng)前測試統(tǒng)計數(shù)據(jù)存儲器的統(tǒng)計數(shù)據(jù)導(dǎo)出,再次測試時將上述的統(tǒng)計數(shù)據(jù)導(dǎo)入統(tǒng)計數(shù)據(jù)存儲器后,基于前一次的測試覆蓋率結(jié)果繼續(xù)進(jìn)行測試。由于統(tǒng)計數(shù)據(jù)存儲器中所有的數(shù)據(jù)都為有效數(shù)據(jù),第一次統(tǒng)計測試前,必需將統(tǒng)計數(shù)據(jù)存儲器全部bit清除為O;如果是基于以前的統(tǒng)計數(shù)據(jù)繼續(xù)進(jìn)行測試,要先導(dǎo)入已有的統(tǒng)計數(shù)據(jù),對統(tǒng)計數(shù)據(jù)存儲器全區(qū)初始化之后再繼續(xù)測試。統(tǒng)計數(shù)據(jù)存儲器每一 bit與芯片程序存儲器地址對應(yīng),是指統(tǒng)計數(shù)據(jù)存儲器每一 bit的地址與芯片程序存儲器中數(shù)據(jù)的字節(jié)地址,或是半字地址,或是字地址相對應(yīng),與統(tǒng)計的內(nèi)容有關(guān),例:ARM中指令是半字或字長度,就按最小長度半字來統(tǒng)計,Ibit表示的程序存儲器中I個半字的地址,例:AHB總線對常量數(shù)據(jù)支持字節(jié)操作,Ibit表示的程序存儲器中I個字節(jié)的地址。因此統(tǒng)計數(shù)據(jù)存儲器容量大小是芯片程序存儲器容量的1/8,或是1/16,或是1/32。程序?qū)ν坏刂范啻卧L問只用Ibit表示,當(dāng)程序長時間測試,統(tǒng)計數(shù)據(jù)大小不會增加,一直為統(tǒng)計數(shù)據(jù)存儲器的容量大小。
[0022]通過配置仿真器覆蓋率統(tǒng)計模塊中的寄存器,實現(xiàn)統(tǒng)計功能開關(guān)控制,更改統(tǒng)計程序的起始地址的功能。對統(tǒng)計功能開關(guān)控制,使仿真器使用更方便,只需要統(tǒng)計覆蓋率時打開統(tǒng)計功能。當(dāng)仿真器設(shè)計時對統(tǒng)計數(shù)據(jù)存儲器容量有限制,不能與芯片程序存儲器全部地址對應(yīng)時,通過更改起始地址,實現(xiàn)對指定的一段程序進(jìn)行統(tǒng)計分析,采用更新起始地址多次測試的方式,實現(xiàn)對芯片程序存儲器所有程序的測試覆蓋率統(tǒng)計分析。此方法解決了統(tǒng)計數(shù)據(jù)存儲器容量較大的問題,用小容量的存儲器也可實現(xiàn)所有程序的測試覆蓋率分析;由于統(tǒng)計數(shù)據(jù)只在測試完成后導(dǎo)出,對數(shù)據(jù)導(dǎo)出的速度沒有嚴(yán)格要求,仿真器設(shè)計實現(xiàn)更容易。
[0023]本發(fā)明的仿真器支持代碼覆蓋率、分支覆蓋率、數(shù)據(jù)覆蓋率統(tǒng)計功能,在統(tǒng)計數(shù)據(jù)存儲器中分別用CodeMark區(qū)、SwitchMarkE、DataMark區(qū)3塊獨立區(qū)域進(jìn)行數(shù)據(jù)存儲,代碼覆蓋率統(tǒng)計數(shù)據(jù)存儲在CodeMark區(qū),分支覆蓋率統(tǒng)計數(shù)據(jù)存儲在SwitchMark區(qū),數(shù)據(jù)覆蓋率統(tǒng)計數(shù)據(jù)存儲在DataMark區(qū)。代碼覆蓋率用于分析當(dāng)前測試是否對程序中所有函數(shù)進(jìn)行測試,分支覆蓋率用于分析當(dāng)前測試是否測試程序中所有功能分支,數(shù)據(jù)覆蓋率用于分析程序中設(shè)計的常量是否全部使用,上述三種覆蓋率用于分析測試點的全面性,被測程序的正確性,減少程序中多余代碼,優(yōu)化程序性能,根據(jù)未測試到的地址信息,能夠定位被測程序中具體的功能函數(shù),進(jìn)一步分析是測試點不全還是被測程序設(shè)計問題。
[0024]代碼覆蓋率是指測試的指令取指執(zhí)行過的地址個數(shù),與指令取指全部執(zhí)行的地址個數(shù)相比,得到的百分比數(shù)值,上述地址個數(shù)是指不同地址的個數(shù),相同地址執(zhí)行多次按I個計算。分支覆蓋率是指,測試的程序執(zhí)行過的跳轉(zhuǎn)指令地址個數(shù)除以2,與程序全部跳轉(zhuǎn)指令的地址個數(shù)相比,得到的百分比數(shù)值,上述跳轉(zhuǎn)指令地址個數(shù)是指相同地址的跳轉(zhuǎn)指令,執(zhí)行跳轉(zhuǎn)和不跳轉(zhuǎn)兩個分支按2個計算,相同地址同一分支執(zhí)行多次按I個計算;一條跳轉(zhuǎn)指令用2bit數(shù)據(jù)存儲,未執(zhí)行過數(shù)據(jù)為00,執(zhí)行后進(jìn)行過跳轉(zhuǎn)用01表示,未進(jìn)行跳轉(zhuǎn)用10表示,如果兩個分支都執(zhí)行過用11表示。數(shù)據(jù)覆蓋率是指測試的程序讀取程序區(qū)的常量地址個數(shù),與程序區(qū)所有常量地址個數(shù)相比,得到的百分比數(shù)值,上述常量地址個數(shù)是指不同地址常量的個數(shù),相同地址常量程序讀取多次按I個計算。
【附圖說明】
[0025]圖1是支持覆蓋率統(tǒng)計功能的仿真器結(jié)構(gòu)圖。
[0026]圖2是存儲格式對比示意圖。
[0027]圖3是存儲器地址映射示意圖。
[0028]圖4是覆蓋率統(tǒng)計功能使用流程圖。
【具體實施方式】
[0029]下面結(jié)合附圖對本發(fā)明仿真器進(jìn)行詳細(xì)說明。
[0030]如圖1所示,仿真器包括調(diào)試控制模塊1、芯片功能模塊2和覆蓋率統(tǒng)計模塊3,芯片功能模塊2包括CPU_DBG4、AHB總線、芯片程序存儲器5、外設(shè)6,覆蓋率統(tǒng)計模塊3包括統(tǒng)計模塊7、寄存器8、接口轉(zhuǎn)換模塊9、選擇模塊10、統(tǒng)計數(shù)據(jù)存儲器11。
[0031]調(diào)試控制模塊I與CPU_DBG4相連,CPU_DBG4經(jīng)過AHB總線訪問芯片程序存儲器5和外設(shè)6<XPU_DBG4在調(diào)試控制模塊I控制下將程序下載到芯片程序存儲器5,并執(zhí)行單步、停止、運(yùn)行等操作。AHB總線上連接接口轉(zhuǎn)換模塊9,接口轉(zhuǎn)換模塊9與寄存器8、選擇模塊10相連。統(tǒng)計模塊7和CPU_DBG4的PC接口、AHB總線的AHB接口、寄存器8、選擇模塊10相連,選擇模塊10還與統(tǒng)計數(shù)據(jù)存儲器11相連。
[0032]CPU_DBG4的PC接口包括以下主要信號:程序當(dāng)前指令PC值、當(dāng)前指令執(zhí)行完成信號,當(dāng)前指令是否為跳轉(zhuǎn)指令信號,當(dāng)前指令是否執(zhí)行跳轉(zhuǎn)的信號,通過上述4個信號,能夠得到程序執(zhí)行的地址,跳轉(zhuǎn)指令地址,以及CPU是否執(zhí)行跳轉(zhuǎn)指令;AHB總線的AHB接口為標(biāo)準(zhǔn)的AMBA總線接口,通過此接口信號,能夠得到程序執(zhí)行時讀取了芯片程序存儲器中哪些地址的常量。
[0033]CPU_DBG^t出調(diào)試模式信號為I時,表示CPU_DBG4進(jìn)入調(diào)試模式,接口轉(zhuǎn)換模塊9經(jīng)選擇模塊10與統(tǒng)計數(shù)據(jù)存儲器11連接進(jìn)行通訊;CPU_DBG4輸出調(diào)試模式信號為O時,表示CPU_DBG4進(jìn)入運(yùn)行模式,統(tǒng)計模塊7經(jīng)選擇模塊10與統(tǒng)計數(shù)據(jù)存儲器11連接進(jìn)行通訊。
[0034]仿真器支持3種操作:寄存器讀寫操作、統(tǒng)計模塊記錄數(shù)據(jù)操作、統(tǒng)計數(shù)據(jù)存儲器讀寫操作。
[0035]寄存器讀寫操作:調(diào)試控制模塊I控制CPU_DBG4進(jìn)入調(diào)試模式,經(jīng)過AHB總線AHB接、接口轉(zhuǎn)換模塊9,對寄存器8進(jìn)行讀寫操作。通過對寄存器8設(shè)置,產(chǎn)生程序統(tǒng)計的起始地址、開啟或關(guān)閉統(tǒng)計功能的控制信號,并輸出給統(tǒng)計模塊,改變統(tǒng)計模塊實現(xiàn)的具體功能。
[0036]統(tǒng)計模塊記錄數(shù)據(jù)操作:調(diào)試控制模塊I控制CPU_DBG4進(jìn)入運(yùn)行模式,輸出調(diào)試模式信號為0,寄存器8輸出的起始地址、控制信號的到統(tǒng)計模塊7,當(dāng)統(tǒng)計功能開啟時,使用CPU_DBG PC接口信號和AHB總線AHB接口信號,生成程序執(zhí)行的地址信息,經(jīng)過選擇模塊10將地址信息數(shù)據(jù)實時寫入統(tǒng)計數(shù)據(jù)存儲器11。
[0037]統(tǒng)計數(shù)據(jù)存儲器讀寫操作:調(diào)試控制模塊I控制CPU_DBG4進(jìn)入調(diào)試模式,輸出調(diào)試模式信號為1,經(jīng)過CPU_DBG4、AHB總線AHB接、接口轉(zhuǎn)換模塊9、選擇模塊10,對統(tǒng)計數(shù)據(jù)存儲器11進(jìn)行讀寫操作。此操作用于將統(tǒng)計數(shù)據(jù)存儲器11中的統(tǒng)計數(shù)據(jù)導(dǎo)出進(jìn)行分析,或?qū)⒁郧吧傻慕y(tǒng)計數(shù)據(jù)下載到統(tǒng)計數(shù)據(jù)存儲器11中,繼續(xù)測試進(jìn)行覆蓋率統(tǒng)計。
[0038]如圖2所示,左側(cè)存儲器A表示統(tǒng)計功能常用的存儲格式,統(tǒng)計數(shù)據(jù)采用壓縮數(shù)據(jù)包的形式從存儲器低端0x00地址順序存儲,隨著統(tǒng)計時間加長,數(shù)據(jù)也會越來越多,長時間的測試統(tǒng)計,要求存儲器容量足夠大,或是能夠?qū)?shù)據(jù)實時導(dǎo)出;右側(cè)存儲器B表示本發(fā)明的統(tǒng)計數(shù)據(jù)存儲格式,全區(qū)的數(shù)據(jù)初始化為0,執(zhí)行過的地址標(biāo)記為I,由于此存儲器與芯片程序存儲器實現(xiàn)地址對應(yīng)映射關(guān)系,程序長時間測試只是在相同地址上重復(fù)寫I操作,存儲器容量不需增加。當(dāng)程序經(jīng)測試后,仍有程序代碼對應(yīng)的位值標(biāo)識為O,說明測試程序的測試點不全,或設(shè)計的程序中有多余代碼不會執(zhí)行,根據(jù)測試覆蓋率結(jié)果優(yōu)化測試程序或是被測程序。
[0039]如圖3所示,給出芯片程序存儲器和統(tǒng)計數(shù)據(jù)存儲器地址映射關(guān)系,統(tǒng)計數(shù)據(jù)存儲器分為CodeMark區(qū)、SwitchMark區(qū)、DataMark區(qū)3塊,統(tǒng)計數(shù)據(jù)存儲器每一bit的地址與芯片程序存儲器中數(shù)據(jù)的字節(jié)地址,或是半字地址,或是字地址相對應(yīng),因此每塊的容量可能不同,但映射到芯片程序存儲器的統(tǒng)計起始地址和結(jié)束的地址相同。當(dāng)芯片程序存儲器容量較小時,統(tǒng)計數(shù)據(jù)存儲器可以對芯片程序存儲器全片進(jìn)行地址映射,使用時不需修改統(tǒng)計起始地址;當(dāng)芯片程序存儲器容量較大時,只能對芯片程序存儲器部分地址進(jìn)行映射,此時通過修改統(tǒng)計起始地址,對芯片程序存儲器中任一段程序進(jìn)行測試和覆蓋率統(tǒng)計。
[0040]如圖4所示,給出覆蓋率統(tǒng)計功能使用流程圖,流程圖中介紹第一次使用統(tǒng)計功能如何操作,已有統(tǒng)計數(shù)據(jù)或修改程序統(tǒng)計起始地址時如何繼續(xù)測試,按以下步驟操作,進(jìn)行程序測試及覆蓋率分析,改進(jìn)測試程序及被測程序:
[0041 ]步驟I,調(diào)試控制模塊控制CPU_DBG進(jìn)入調(diào)試模式,調(diào)試模式信號變?yōu)镮表示有效,此時調(diào)試控制模塊能夠讀寫寄存器和統(tǒng)計數(shù)據(jù)存儲器;
[0042]步驟2,如果已有統(tǒng)計數(shù)據(jù)繼續(xù)統(tǒng)計,先從統(tǒng)計數(shù)據(jù)中獲取統(tǒng)計起始地址,并執(zhí)行步驟3,否則第一次使用時先配置寄存器,設(shè)置統(tǒng)計起始地址、開啟統(tǒng)計功能,并清除統(tǒng)計數(shù)據(jù)存儲器,將全片數(shù)據(jù)寫為O,接著執(zhí)行步驟4;
[0043]步驟3,配置寄存器,設(shè)置統(tǒng)計起始地址、開啟統(tǒng)計功能,并向統(tǒng)計數(shù)據(jù)存儲器下載已有統(tǒng)計數(shù)據(jù);
[0044]步驟4,調(diào)試控制模塊控制CPU_DBG進(jìn)入運(yùn)行模式,調(diào)試模式信號變?yōu)镺表示無效,此時統(tǒng)計模塊能夠?qū)懡y(tǒng)計數(shù)據(jù)存儲器;
[0045]步驟5,運(yùn)行程序進(jìn)行測試,統(tǒng)計模塊將生成的統(tǒng)計數(shù)據(jù)寫入統(tǒng)計數(shù)據(jù)存儲器;
[0046]步驟6,調(diào)試控制模塊設(shè)置CPU_DBG進(jìn)入調(diào)試模式,此時程序停止運(yùn)行;
[0047]步驟7,調(diào)試控制模塊將統(tǒng)計數(shù)據(jù)存儲器中的統(tǒng)計數(shù)據(jù)導(dǎo)出;
[0048]步驟8,如果需要更新統(tǒng)計起始地址繼續(xù)測試執(zhí)行步驟2,否則配置寄存器關(guān)閉統(tǒng)計功能;
[0049]步驟9,分析合并導(dǎo)出的統(tǒng)計數(shù)據(jù),計算出程序測試覆蓋率,包括代碼覆蓋率、分支覆蓋率、數(shù)據(jù)覆蓋率;
[0050]步驟10,根據(jù)測試覆蓋率結(jié)果分析測試點全面性、程序正確性,對測試程序及被測程序進(jìn)行改進(jìn)優(yōu)化。
【主權(quán)項】
1.一種支持覆蓋率統(tǒng)計功能的仿真器及方法,其特征在于,所述仿真器針對AHB總線的CPU芯片,增加覆蓋率統(tǒng)計模塊,使用AHB總線、CPU及調(diào)試模塊的信號,采用將程序執(zhí)行的地址在統(tǒng)計數(shù)據(jù)存儲器中對應(yīng)的地址位置進(jìn)行打標(biāo)的方式,實現(xiàn)程序執(zhí)行地址信息的記錄,將統(tǒng)計數(shù)據(jù)存儲器中的統(tǒng)計數(shù)據(jù)導(dǎo)出,使用程序軟件可以計算得到程序執(zhí)行過的地址,再與程序全部執(zhí)行的地址數(shù)據(jù)相比,計算出當(dāng)前測試達(dá)到的程序覆蓋率; 所述仿真器包括:調(diào)試控制模塊、芯片功能模塊、覆蓋率統(tǒng)計模塊3部分; 調(diào)試控制模塊,用于將統(tǒng)計數(shù)據(jù)存儲器中的數(shù)據(jù)導(dǎo)入和導(dǎo)出,對芯片功能模塊進(jìn)行調(diào)試; 芯片功能模塊,用于仿真芯片功能,包括CPU_DBG、AHB總線、芯片程序存儲器、外設(shè); 覆蓋率統(tǒng)計模塊,用于對程序執(zhí)行的地址信息進(jìn)行實時記錄,包括統(tǒng)計模塊、寄存器、接口轉(zhuǎn)換模塊、選擇模塊、統(tǒng)計數(shù)據(jù)存儲器; 各組件功能說明如下: CPU_DBG,是指芯片的CRJ及調(diào)試模塊,在調(diào)試控制模塊控制下執(zhí)行程序; AHB總線,是指AHB接口的AHB總線控制器模塊,是CPU_DBG與AHB外設(shè)的接口 ; 芯片程序存儲器,用于存儲芯片執(zhí)行的程序; 外設(shè),是指除芯片程序存儲器外,芯片的其它AHB外設(shè); 統(tǒng)計模塊,使用CPU_DBG PC接口信號和AHB總線AHB接口信號,將程序執(zhí)行的地址信息記錄到統(tǒng)計數(shù)據(jù)存儲器中,上述的地址信息就是統(tǒng)計數(shù)據(jù); 寄存器,產(chǎn)生統(tǒng)計程序的起始地址、統(tǒng)計使能控制信號,輸出給統(tǒng)計模塊,控制統(tǒng)計模塊實現(xiàn)的具體功能; 接口轉(zhuǎn)換模塊,將AHB總線的AHB接口信號,轉(zhuǎn)換為寄存器接口信號和RAM接口信號,CPU_DBG通過AHB總線、接口轉(zhuǎn)換模塊完成對寄存器和統(tǒng)計數(shù)據(jù)存儲器的讀寫訪問; 選擇模塊,CPILDBG輸出調(diào)試模式信號,選擇統(tǒng)計模塊或者接口轉(zhuǎn)換模塊連接到統(tǒng)計數(shù)據(jù)存儲器; 統(tǒng)計數(shù)據(jù)存儲器,用于存儲統(tǒng)計模塊記錄程序執(zhí)行的地址信息數(shù)據(jù); 各組件連接關(guān)系如下: CPU_DBG與調(diào)試控制模塊、AHB總線、統(tǒng)計模塊、選擇模塊相連,AHB總線還連接芯片程序存儲器、外設(shè)、統(tǒng)計模塊、接口轉(zhuǎn)換模塊,統(tǒng)計模塊和接口轉(zhuǎn)換模塊還分別連接到寄存器、選擇模塊,選擇模塊還與統(tǒng)計數(shù)據(jù)存儲器相連。2.根據(jù)權(quán)利要求1所述的一種支持覆蓋率統(tǒng)計功能的仿真器及方法,其特征在于,所述統(tǒng)計數(shù)據(jù)存儲器中所有的數(shù)據(jù)都為有效數(shù)據(jù),統(tǒng)計數(shù)據(jù)存儲器每一 bit與芯片程序存儲器地址對應(yīng),在第一次統(tǒng)計前,統(tǒng)計數(shù)據(jù)存儲器全部bi t清除為O,完成測試統(tǒng)計后,程序執(zhí)行過的地址對應(yīng)的bit標(biāo)識為I,根據(jù)標(biāo)識I的bit地址,以及統(tǒng)計數(shù)據(jù)存儲器數(shù)據(jù)與芯片程序存儲器地址對應(yīng)關(guān)系,計算出當(dāng)前程序執(zhí)行過的實際地址。3.根據(jù)權(quán)利要求1所述的一種支持覆蓋率統(tǒng)計功能的仿真器及方法,其特征在于,所述仿真器支持程序測試停止后再次繼續(xù)測試,將當(dāng)前測試統(tǒng)計數(shù)據(jù)存儲器的統(tǒng)計數(shù)據(jù)導(dǎo)出,再次測試時將上述的統(tǒng)計數(shù)據(jù)導(dǎo)入后繼續(xù)進(jìn)行測試。4.根據(jù)權(quán)利要求1所述的一種支持覆蓋率統(tǒng)計功能的仿真器及方法,其特征在于,所述仿真器通過配置覆蓋率統(tǒng)計模塊中的寄存器,實現(xiàn)統(tǒng)計功能開關(guān)控制,更改統(tǒng)計程序的起始地址的功能;當(dāng)仿真器的統(tǒng)計數(shù)據(jù)存儲器容量有限制,不能與芯片程序存儲器全部地址對應(yīng)時,通過更改起始地址,實現(xiàn)對指定的一段程序進(jìn)行測試統(tǒng)計分析,采用更新起始地址多次測試的方式,實現(xiàn)對芯片程序存儲器所有程序的測試覆蓋率統(tǒng)計分析。5.根據(jù)權(quán)利要求1所述的一種支持覆蓋率統(tǒng)計功能的仿真器及方法,其特征在于,所述仿真器支持代碼覆蓋率、分支覆蓋率、數(shù)據(jù)覆蓋率統(tǒng)計功能,在統(tǒng)計數(shù)據(jù)存儲器中分別用CodeMark區(qū)、SwitchMark區(qū)、DataMark區(qū)3塊獨立的區(qū)域進(jìn)行數(shù)據(jù)存儲,代碼覆蓋率統(tǒng)計數(shù)據(jù)存儲在CodeMark區(qū),分支覆蓋率統(tǒng)計數(shù)據(jù)存儲在SwitchMark區(qū),數(shù)據(jù)覆蓋率統(tǒng)計數(shù)據(jù)存儲在DataMark區(qū)。6.根據(jù)權(quán)利要求5所述的一種支持覆蓋率統(tǒng)計功能的仿真器及方法,其特征在于代碼覆蓋率用于分析當(dāng)前測試是否對程序中所有函數(shù)進(jìn)行測試,分支覆蓋率用于分析當(dāng)前測試是否測試程序中所有功能分支,數(shù)據(jù)覆蓋率用于分析程序中設(shè)計的常量是否全部使用,上述三種覆蓋率用于分析測試點的全面性,被測程序的正確性,根據(jù)未測試到的地址信息能夠定位被測程序中具體的功能函數(shù),進(jìn)一步分析是測試點不全還是被測程序設(shè)計問題。7.根據(jù)權(quán)利要求1所述的一種支持覆蓋率統(tǒng)計功能的仿真器及方法,其特征在于,所述方法按以下步驟操作,進(jìn)行程序測試及覆蓋率分析,改進(jìn)測試程序及被測程序: 步驟I,調(diào)試控制模塊控制CPU_DBG進(jìn)入調(diào)試模式,調(diào)試模式信號變?yōu)镮表示有效,此時調(diào)試控制模塊能夠讀寫寄存器和統(tǒng)計數(shù)據(jù)存儲器; 步驟2,如果已有統(tǒng)計數(shù)據(jù)繼續(xù)統(tǒng)計,先從統(tǒng)計數(shù)據(jù)中獲取統(tǒng)計起始地址,并執(zhí)行步驟.3,否則第一次使用時先配置寄存器,設(shè)置統(tǒng)計起始地址、開啟統(tǒng)計功能,并清除統(tǒng)計數(shù)據(jù)存儲器,將全片數(shù)據(jù)寫為O,接著執(zhí)行步驟4; 步驟3,配置寄存器,設(shè)置統(tǒng)計起始地址、開啟統(tǒng)計功能,并向統(tǒng)計數(shù)據(jù)存儲器下載已有統(tǒng)計數(shù)據(jù); 步驟4,調(diào)試控制模塊控制CPILDBG進(jìn)入運(yùn)行模式,調(diào)試模式信號變?yōu)镺表示無效,此時統(tǒng)計模塊能夠?qū)懡y(tǒng)計數(shù)據(jù)存儲器; 步驟5,運(yùn)行程序進(jìn)行測試,統(tǒng)計模塊將生成的統(tǒng)計數(shù)據(jù)寫入統(tǒng)計數(shù)據(jù)存儲器; 步驟6,調(diào)試控制模塊設(shè)置CPILDBG進(jìn)入調(diào)試模式,此時程序停止運(yùn)行; 步驟7,調(diào)試控制模塊將統(tǒng)計數(shù)據(jù)存儲器中的統(tǒng)計數(shù)據(jù)導(dǎo)出; 步驟8,如果需要更新統(tǒng)計起始地址繼續(xù)測試執(zhí)行步驟2,否則配置寄存器關(guān)閉統(tǒng)計功會K; 步驟9,分析合并導(dǎo)出的統(tǒng)計數(shù)據(jù),計算出程序測試覆蓋率,包括代碼覆蓋率、分支覆蓋率、數(shù)據(jù)覆蓋率; 步驟10,根據(jù)測試覆蓋率結(jié)果分析測試點全面性、程序正確性,對測試程序及被測程序進(jìn)行改進(jìn)優(yōu)化。
【文檔編號】G06F11/36GK106066822SQ201610352697
【公開日】2016年11月2日
【申請日】2016年5月26日 公開號201610352697.8, CN 106066822 A, CN 106066822A, CN 201610352697, CN-A-106066822, CN106066822 A, CN106066822A, CN201610352697, CN201610352697.8
【發(fā)明人】張洪波
【申請人】北京中電華大電子設(shè)計有限責(zé)任公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
全南县| 象州县| 漳平市| 庄浪县| 彭水| 乌兰察布市| 平谷区| 旌德县| 孝感市| 瑞金市| 即墨市| 漯河市| 通江县| 昭平县| 平邑县| 黄浦区| 福建省| 宁夏| 东乌| 舒城县| 黄龙县| 集安市| 孝昌县| 华容县| 康马县| 双城市| 本溪市| 社旗县| 泉州市| 嘉义市| 淮北市| 瓦房店市| 高雄市| 赫章县| 枞阳县| 格尔木市| 海安县| 漾濞| 芮城县| 林州市| 华蓥市|