本發(fā)明涉及處理器設(shè)計(jì)領(lǐng)域,尤其涉及一種隨機(jī)測試程序生成方法及裝置。
背景技術(shù):
現(xiàn)有技術(shù)中,在進(jìn)行處理器設(shè)計(jì)時(shí),對處理器的功能驗(yàn)證是一個(gè)重點(diǎn)和難點(diǎn),如何能夠完整的覆蓋處理器的功能及保證處理器驗(yàn)證的質(zhì)量成為處理器設(shè)計(jì)的關(guān)鍵。目前,純粹靠驗(yàn)證人員手動(dòng)編寫處理器驗(yàn)證所需要的程序和數(shù)據(jù)容易漏掉對某些處理器功能點(diǎn)的驗(yàn)證。因此,如果采用高效生成隨機(jī)匯編測試程序或者隨機(jī)機(jī)器測試程序的方式可以改善或解決上述技術(shù)問題。
現(xiàn)有技術(shù)中,隨機(jī)測試程序生成方法需要采用不受控的全隨機(jī),導(dǎo)致生成的隨機(jī)測試程序合法性存在問題,同時(shí)隨機(jī)測試程序的目的性差且難以保證處理器的功能覆蓋率;此外,現(xiàn)有技術(shù)中的隨機(jī)測試程序生成方法需要編寫程序段或者編寫復(fù)雜的隨機(jī)程序約束模版,導(dǎo)致生成的隨機(jī)測試程序隨機(jī)性差,并難以做到對人工設(shè)計(jì)程序的有效補(bǔ)充?,F(xiàn)有技術(shù)中其它的隨機(jī)測試程序生成方法對隨機(jī)測試程序中某點(diǎn)或某方面進(jìn)行了改善,例如,改善浮點(diǎn)隨機(jī)數(shù)的合法性,改善權(quán)重對隨機(jī)指令的控制,改善對分支跳轉(zhuǎn)指令的控制,及改善流水線干擾。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例期望提供一種隨機(jī)測試程序生成方法及裝置,不僅能全自動(dòng)的生成處理器驗(yàn)證所需的隨機(jī)測試程序,而且能有效的控制隨機(jī)測試程序的合法性和功能覆蓋率,從而能提升處理器驗(yàn)證的效率。
為達(dá)到上述目的,本發(fā)明實(shí)施例的技術(shù)方案是這樣實(shí)現(xiàn)的:
本發(fā)明實(shí)施例提供了一種隨機(jī)測試程序生成方法,包括:
在合法指令集中隨機(jī)選擇指令包并生成所述指令包,判斷所述指令包是否包括分支跳轉(zhuǎn)指令;
當(dāng)所述指令包包括所述分支跳轉(zhuǎn)指令時(shí),判斷所述隨機(jī)測試程序是否存在第一死循環(huán)風(fēng)險(xiǎn);
當(dāng)所述隨機(jī)測試程序存在所述第一死循環(huán)風(fēng)險(xiǎn)時(shí),修改所述隨機(jī)測試程序,判斷所述隨機(jī)測試程序是否存在第二循環(huán)風(fēng)險(xiǎn);
當(dāng)所述隨機(jī)測試程序不存在第二循環(huán)風(fēng)險(xiǎn)時(shí),修改全自動(dòng)隨機(jī)測試程序生成器ARTPG狀態(tài)、處理器狀態(tài)和所述合法指令集。
上述方案中,所述修改所述隨機(jī)測試程序包括:
當(dāng)分支跳轉(zhuǎn)地址超過程序空間界限時(shí),修改所述分支跳轉(zhuǎn)地址使其不超過所述程序空間界限;
當(dāng)分支跳轉(zhuǎn)判定條件在聲明到使用之間沒有修改操作時(shí),增加修改指令;
當(dāng)所述修改操作的收斂方向與所述分支跳轉(zhuǎn)判定條件不一致時(shí),修改所述修改操作的收斂方向使其與所述分支跳轉(zhuǎn)判定條件一致;
當(dāng)所述指令包包括函數(shù)調(diào)用指令或軟件中斷指令時(shí),添加現(xiàn)場保存及恢復(fù)的指令。
上述方案中,所述修改所述ARTPG狀態(tài)包括:
根據(jù)功能覆蓋率反饋信息調(diào)整隨機(jī)權(quán)重。
上述方案中,所述修改所述合法指令集包括:
將修改后的輸出寄存器添加到對應(yīng)的合法輸入操作數(shù);
將所述合法輸入操作數(shù)對應(yīng)的指令添加到所述合法指令集;
當(dāng)所述指令包包括所述函數(shù)調(diào)用指令或所述軟件中斷指令時(shí),將當(dāng)前返回地址壓至堆棧,在所述函數(shù)調(diào)用指令或所述軟件中斷指令前添加所述現(xiàn)場保存的指令。
上述方案中,在所述修改所述隨機(jī)測試程序之后及在所述判斷所述隨機(jī)測試程序是否存在第二循環(huán)風(fēng)險(xiǎn)之前,還包括:執(zhí)行指令局部仿真或者執(zhí)行指令全局仿真。
上述方案中,所述修改ARTPG狀態(tài)、處理器狀態(tài)和所述合法指令集之后,還包括:
當(dāng)所述隨機(jī)測試程序生成的第一發(fā)射指令數(shù)等于隨機(jī)選擇的第二發(fā)射指令數(shù)且所述隨機(jī)測試程序滿足終止條件時(shí),輸出所述隨機(jī)測試程序、隨機(jī)測試程序執(zhí)行結(jié)果和覆蓋率分析報(bào)告。
本發(fā)明實(shí)施例還提供了一種隨機(jī)測試程序生成裝置,包括:
第一判斷模塊,用于在合法指令集中隨機(jī)選擇指令包并生成所述指令包,判斷所述指令包是否包括分支跳轉(zhuǎn)指令;
第二判斷模塊,用于當(dāng)所述指令包包括所述分支跳轉(zhuǎn)指令時(shí),判斷所述隨機(jī)測試程序是否存在第一死循環(huán)風(fēng)險(xiǎn);
第三判斷模塊,用于當(dāng)所述隨機(jī)測試程序存在所述第一死循環(huán)風(fēng)險(xiǎn)時(shí),修改所述隨機(jī)測試程序,判斷所述隨機(jī)測試程序是否存在第二循環(huán)風(fēng)險(xiǎn)。
修改模塊,用于當(dāng)所述隨機(jī)測試程序不存在第二循環(huán)風(fēng)險(xiǎn)時(shí),修改全自動(dòng)隨機(jī)測試程序生成器ARTPG狀態(tài)、處理器狀態(tài)和所述合法指令集。
上述方案中,所述第三判斷模塊,用于修改所述隨機(jī)測試程序包括:
當(dāng)分支跳轉(zhuǎn)地址超過程序空間界限時(shí),修改所述分支跳轉(zhuǎn)地址使其不超過所述程序空間界限;
當(dāng)分支跳轉(zhuǎn)判定條件在聲明到使用之間沒有修改操作時(shí),增加修改指令;
當(dāng)所述修改操作的收斂方向與所述分支跳轉(zhuǎn)判定條件不一致時(shí),修改所述修改操作的收斂方向使其與所述分支跳轉(zhuǎn)判定條件一致;
當(dāng)所述指令包包括函數(shù)調(diào)用指令或軟件中斷指令時(shí),添加現(xiàn)場保存及恢復(fù)的指令。
上述方案中,所述修改模塊,用于修改所述ARTPG狀態(tài)包括:
根據(jù)功能覆蓋率反饋信息調(diào)整隨機(jī)權(quán)重。
上述方案中,所述修改模塊,用于修改所述合法指令集包括:
將修改后的輸出寄存器添加到對應(yīng)的合法輸入操作數(shù);
將所述合法輸入操作數(shù)對應(yīng)的指令添加到所述合法指令集;
當(dāng)所述指令包包括所述函數(shù)調(diào)用指令或所述軟件中斷指令時(shí),將當(dāng)前返回地址壓至堆棧,在所述函數(shù)調(diào)用指令或所述軟件中斷指令前添加所述現(xiàn)場保存的指令。
上述方案中,所述第三判斷模塊,還用于在所述修改所述隨機(jī)測試程序之后及在所述判斷所述隨機(jī)測試程序是否存在第二循環(huán)風(fēng)險(xiǎn)之前,執(zhí)行指令局部仿真或者執(zhí)行指令全局仿真。
上述方案中,還包括:
輸出模塊,用于當(dāng)所述隨機(jī)測試程序生成的第一發(fā)射指令數(shù)等于隨機(jī)選擇的第二發(fā)射指令數(shù)且所述隨機(jī)測試程序滿足終止條件時(shí),輸出所述隨機(jī)測試程序、隨機(jī)測試程序執(zhí)行結(jié)果和覆蓋率分析報(bào)告。
本發(fā)明實(shí)施例所提供的隨機(jī)測試程序生成方法及裝置,由隨機(jī)測試程序生成裝置在合法指令集中隨機(jī)選擇指令包并生成所述指令包,判斷所述指令包是否包括分支跳轉(zhuǎn)指令;當(dāng)所述指令包包括所述分支跳轉(zhuǎn)指令時(shí),所述隨機(jī)測試程序生成裝置判斷所述隨機(jī)測試程序是否存在第一死循環(huán)風(fēng)險(xiǎn);當(dāng)所述隨機(jī)測試程序存在所述第一死循環(huán)風(fēng)險(xiǎn)時(shí),所述隨機(jī)測試程序生成裝置修改所述隨機(jī)測試程序,判斷所述隨機(jī)測試程序是否存在第二循環(huán)風(fēng)險(xiǎn);當(dāng)所述隨機(jī)測試程序不存在第二循環(huán)風(fēng)險(xiǎn)時(shí),所述隨機(jī)測試程序生成裝置修改全自動(dòng)隨機(jī)測試程序生成器(ARTPG,Automatic Random Test Program Generator)狀態(tài)、處理器狀態(tài)和所述合法指令集。由于本發(fā)明實(shí)施例可以動(dòng)態(tài)更新合法指令集和處理器狀態(tài),也使得隨機(jī)測試程序的生成與合法性檢測所述隨機(jī)測試程序能夠同時(shí)進(jìn)行;這樣,不但能全自動(dòng)的生成處理器驗(yàn)證所需的隨機(jī)測試程序,而且能有效的控制隨機(jī)測試程序的合法性和功能覆蓋率,進(jìn)而能提升處理器驗(yàn)證的效率。
附圖說明
圖1為本發(fā)明實(shí)施例1提供的隨機(jī)測試程序生成方法的實(shí)現(xiàn)流程示意圖;
圖2為本發(fā)明實(shí)施例1提供的寄存器文件數(shù)據(jù)結(jié)構(gòu)示意圖;
圖3為本發(fā)明實(shí)施例1提供的指令生成器數(shù)據(jù)結(jié)構(gòu)示意圖;
圖4為本發(fā)明實(shí)施例1提供的功能單元列表數(shù)據(jù)結(jié)構(gòu)示意圖;
圖5為本發(fā)明實(shí)施例1提供的指令列表數(shù)據(jù)結(jié)構(gòu)示意圖;
圖6為本發(fā)明實(shí)施例1提供的操作數(shù)鏈表數(shù)據(jù)結(jié)構(gòu)示意圖;
圖7為本發(fā)明實(shí)施例1提供的合法指令集樹狀鏈表數(shù)據(jù)結(jié)構(gòu)示意圖;
圖8為本發(fā)明實(shí)施例2至6提供的隨機(jī)測試程序生成方法的實(shí)現(xiàn)流程示意圖;
圖9為本發(fā)明實(shí)施例7提供的隨機(jī)測試程序生成裝置的組成結(jié)構(gòu)示意圖。
具體實(shí)施方式
本發(fā)明實(shí)施例中,由隨機(jī)測試程序生成裝置在合法指令集中隨機(jī)選擇指令包并生成指令包,判斷所述指令包是否包括分支跳轉(zhuǎn)指令;當(dāng)所述指令包包括所述分支跳轉(zhuǎn)指令時(shí),所述隨機(jī)測試程序生成裝置判斷所述隨機(jī)測試程序是否存在第一死循環(huán)風(fēng)險(xiǎn);當(dāng)所述隨機(jī)測試程序存在所述第一死循環(huán)風(fēng)險(xiǎn)時(shí),所述隨機(jī)測試程序生成裝置修改所述隨機(jī)測試程序,判斷所述隨機(jī)測試程序是否存在第二循環(huán)風(fēng)險(xiǎn);當(dāng)所述隨機(jī)測試程序不存在第二循環(huán)風(fēng)險(xiǎn)時(shí),所述隨機(jī)測試程序生成裝置修改ARTPG狀態(tài)、處理器狀態(tài)和所述合法指令集。
下面結(jié)合附圖及具體實(shí)施例對本發(fā)明再做進(jìn)一步詳細(xì)的說明。
實(shí)施例1
圖1為本發(fā)明實(shí)施例1提供的隨機(jī)測試程序生成方法的實(shí)現(xiàn)流程示意圖,如圖1所示,所述方法包括:步驟110:在合法指令集中隨機(jī)選擇指令包并生成指令包,判斷指令包是否包括分支跳轉(zhuǎn)指令。
這里,所述在合法指令集中隨機(jī)選擇包并生成指令包的過程包括:隨機(jī)測試程序生成裝置生成不大于預(yù)設(shè)的處理器最大指令數(shù)的隨機(jī)數(shù);根據(jù)隨機(jī)數(shù)從合法指令集樹狀鏈表中選擇隨機(jī)的指令,并隨機(jī)選擇指令所需的隨機(jī)操作數(shù)。
步驟120:當(dāng)指令包包括分支跳轉(zhuǎn)指令時(shí),判斷隨機(jī)測試程序是否存在第一死循環(huán)風(fēng)險(xiǎn)。
步驟120中,當(dāng)指令包中包括分支跳轉(zhuǎn)指令時(shí),首先追朔到分支跳轉(zhuǎn)指令 條件變量的聲明,這里,寄存器被加載(Load)。之后,隨機(jī)測試程序生成裝置結(jié)合分支跳轉(zhuǎn)指令,判斷隨機(jī)測試程序是否存在第一死循環(huán)風(fēng)險(xiǎn)。判斷準(zhǔn)則包括:
前向跳轉(zhuǎn)不存在風(fēng)險(xiǎn),這里,所述前向跳轉(zhuǎn)為跳轉(zhuǎn)到程序未執(zhí)行的部分;后向跳轉(zhuǎn)存在風(fēng)險(xiǎn),這里,所述后向跳轉(zhuǎn)為跳轉(zhuǎn)到程序已執(zhí)行的部分;
后向跳轉(zhuǎn)時(shí),從條件變量聲明到分支跳轉(zhuǎn)指令間,條件變量被修改,修改操作的收斂方向與所述分支跳轉(zhuǎn)的判定條件一致。
這里,所述死循環(huán)風(fēng)險(xiǎn)為程序無限次的后向跳轉(zhuǎn)。
步驟130:當(dāng)隨機(jī)測試程序存在第一死循環(huán)風(fēng)險(xiǎn)時(shí),修改隨機(jī)測試程序,判斷隨機(jī)測試程序是否存在第二循環(huán)風(fēng)險(xiǎn)。
在步驟130中,所述修改所述隨機(jī)測試程序包括:
當(dāng)分支跳轉(zhuǎn)地址超過程序空間界限時(shí),修改所述分支跳轉(zhuǎn)地址使其不超過所述程序空間界限;
當(dāng)分支跳轉(zhuǎn)判定條件在聲明到使用之間沒有修改操作時(shí),增加修改指令;
當(dāng)所述修改操作的收斂方向與所述分支跳轉(zhuǎn)判定條件不一致時(shí),修改所述修改操作的收斂方向,使其與所述分支跳轉(zhuǎn)判定條件一致;
當(dāng)所述指令包包括函數(shù)調(diào)用指令或軟件中斷指令時(shí),添加現(xiàn)場保存及恢復(fù)的指令。
這里,所述當(dāng)所述指令包包括函數(shù)調(diào)用指令或軟件中斷指令時(shí),添加現(xiàn)場保存及恢復(fù)的指令包括:
當(dāng)所述指令包包括函數(shù)調(diào)用指令或軟件中斷指令時(shí),直接在該指令前面添加現(xiàn)場保存的指令或指令包。
在步驟130中,所述修改所述隨機(jī)測試程序還包括:
當(dāng)所述指令包包括函數(shù)返回指令或中斷返回指令時(shí),直接在該指令后面添加現(xiàn)場恢復(fù)的指令或指令包。
在步驟130中,在所述修改所述隨機(jī)測試程序之后及在所述判斷所述隨機(jī)測試程序是否存在第二循環(huán)風(fēng)險(xiǎn)之前,所述方法還包括:執(zhí)行指令局部仿真或 者執(zhí)行指令全局仿真。
這里,指令仿真分為指令局部仿真和指令全局仿真,指令局部仿真為從變量聲明到分支跳轉(zhuǎn)之間的指令進(jìn)行仿真,對所遇未定操作數(shù)賦予隨機(jī)值后,仿真到分支跳轉(zhuǎn)指令,跟蹤跳轉(zhuǎn)方向,指定次數(shù)內(nèi)可以前向跳轉(zhuǎn)則風(fēng)險(xiǎn)解決。指令全局仿真為從頭開始仿真,主要用于當(dāng)生成隨機(jī)測試程序時(shí)開放直接跳轉(zhuǎn)指令時(shí)使用。
這里,所述第二死循環(huán)風(fēng)險(xiǎn)為程序地址跳轉(zhuǎn)回同一地址的死循環(huán)風(fēng)險(xiǎn)。
步驟140:當(dāng)隨機(jī)測試程序不存在第二循環(huán)風(fēng)險(xiǎn)時(shí),修改ARTPG狀態(tài)、處理器狀態(tài)和合法指令集。
在步驟140中,所述修改ARTPG狀態(tài)包括:根據(jù)生成的指令或指令包的大小,修改已生成程序的代碼大??;根據(jù)生成的指令或指令包需要執(zhí)行的周期數(shù),修改已生成程序需要執(zhí)行的周期數(shù),所述周期數(shù)為預(yù)估,循環(huán)時(shí)根據(jù)前面的檢測和仿真結(jié)果修改;根據(jù)指令生成器和處理器狀態(tài)的各個(gè)項(xiàng)被使用次數(shù)計(jì)算和修改覆蓋率;根據(jù)功能覆蓋率反饋信息調(diào)整隨機(jī)權(quán)重。
在步驟140中,所述修改處理器狀態(tài)包括:根據(jù)所選的隨機(jī)指令所指向的函數(shù)計(jì)算指令執(zhí)行結(jié)果;根據(jù)執(zhí)行結(jié)果修改處理器狀態(tài)。
在步驟140中,所述修改所述合法指令集包括:
將修改后的輸出寄存器添加到對應(yīng)的合法輸入操作數(shù);
將所述合法輸入操作數(shù)對應(yīng)的指令添加到所述合法指令集;
當(dāng)所述指令包包括所述函數(shù)調(diào)用指令或所述軟件中斷指令時(shí),將當(dāng)前返回地址壓至堆棧,在所述函數(shù)調(diào)用指令或所述軟件中斷指令前添加所述現(xiàn)場保存的指令。
在步驟140之后,即在所述修改ARTPG狀態(tài)、處理器狀態(tài)和所述合法指令集之后,所述方法還包括:
當(dāng)所述隨機(jī)測試程序生成的第一發(fā)射指令數(shù)等于隨機(jī)選擇的第二發(fā)射指令數(shù)且所述隨機(jī)測試程序滿足終止條件時(shí),輸出所述隨機(jī)測試程序、隨機(jī)測試程序執(zhí)行結(jié)果和覆蓋率分析報(bào)告。
在步驟110之前,所述方法還包括:
步驟101:初始化處理器初始狀態(tài)。
在步驟101中,隨機(jī)測試程序生成裝置根據(jù)驗(yàn)證人員提供的處理器狀態(tài)描述初始化ARTPG中指令仿真器對應(yīng)的處理器初始狀態(tài)。
這里,所述處理器初始狀態(tài)是隨機(jī)測試程序中的一種數(shù)據(jù)結(jié)構(gòu),與另一種數(shù)據(jù)結(jié)構(gòu),即處理器狀態(tài)類似,但是二者主要有兩個(gè)區(qū)別:第一,所述處理器初始狀態(tài)并沒有當(dāng)前值和當(dāng)前周期指令或指令包執(zhí)行結(jié)束后的值這兩種狀態(tài);第二,所述處理器初始狀態(tài)不需要初始化所有的寄存器文件和狀態(tài)寄存器,其中,未指定的內(nèi)容可默認(rèn)為處理器的復(fù)位值。
具體地,指令級精準(zhǔn)的指令仿真器是一種處理器狀態(tài)。處理器狀態(tài)包括處理器對應(yīng)的所有寄存器文件、狀態(tài)寄存器的當(dāng)前值、當(dāng)前周期指令或指令包執(zhí)行結(jié)束后的值,指令級精準(zhǔn)的指令仿真器添加部分流水線寄存器的值。圖2為寄存器文件數(shù)據(jù)結(jié)構(gòu),狀態(tài)寄存器和寄存器文件基本相同,不同的是狀態(tài)寄存器的進(jìn)入列表(Entry List)為結(jié)構(gòu)體數(shù)組,而寄存器文件中的Entry List為結(jié)構(gòu)體。
步驟102:初始化合法指令集。
這里,隨機(jī)測試程序生成裝置根據(jù)ARTPG中指令仿真器對應(yīng)的處理器狀態(tài),初始化合法指令集;初始化合法指令集與后面的修改合法指令集的標(biāo)準(zhǔn)一致。如圖7所示,合法指令集為一個(gè)動(dòng)態(tài)樹狀鏈表,在每一次選擇和生成隨機(jī)指令后可以動(dòng)態(tài)修改合法指令集樹狀鏈表。需要說明的是,采用其它的數(shù)據(jù)結(jié)構(gòu)類型同樣適用。
步驟103:初始化ARTPG狀態(tài)。
在步驟103中,隨機(jī)測試程序生成裝置使用隨機(jī)程序約束初始化ARTPG狀態(tài)。
這里,所述隨機(jī)程序約束包括兩個(gè)約束條件:
第一個(gè)約束條件為終止條件,終止條件包括描述隨機(jī)測試程序生成的終止條件;隨機(jī)測試程序生成的終止條件設(shè)置為:程序大小達(dá)到一定標(biāo)準(zhǔn);程序執(zhí) 行周期數(shù)達(dá)到一定數(shù)值;及測試程序的功能覆蓋率達(dá)到一定標(biāo)準(zhǔn)。其中,功能覆蓋率可以分級描述,所有級別的功能覆蓋率滿足標(biāo)準(zhǔn)時(shí)終止,程序大小和程序執(zhí)行周期數(shù)比覆蓋率的設(shè)置具有更高優(yōu)先級。當(dāng)功能覆蓋率作為終止條件時(shí),程序大小和程序執(zhí)行周期數(shù)被設(shè)置為0。
第二個(gè)約束條件為合法性檢測條件,合法性檢測條件為描述死循環(huán)的判定標(biāo)準(zhǔn)。
步驟104:判斷生成的隨機(jī)測試程序是否滿足終止條件。
這里,所述判定標(biāo)準(zhǔn)包括:程序執(zhí)行周期數(shù)是否滿足終止條件;程序大小是否滿足終止條件;及功能覆蓋率是否滿足終止條件。
步驟105:當(dāng)所述隨機(jī)測試程序不滿足終止條件時(shí),隨機(jī)選擇所述隨機(jī)測試程序的第二發(fā)射指令數(shù)。隨機(jī)測試程序生成裝置隨機(jī)選擇當(dāng)前周期需要并行發(fā)射的第二發(fā)射指令數(shù)。
步驟106:判斷所述隨機(jī)測試程序生成的第一發(fā)射指令數(shù)是否等于隨機(jī)選擇的第二發(fā)射指令數(shù)。
步驟107:當(dāng)所述隨機(jī)測試程序生成的第一發(fā)射指令數(shù)等于隨機(jī)選擇的第二發(fā)射指令數(shù)時(shí),選擇功能單元。
這里,如圖4所示,功能單元屬于覆蓋率收集,即反饋控制隨機(jī)權(quán)重的數(shù)據(jù)結(jié)構(gòu),覆蓋率收集的數(shù)據(jù)結(jié)構(gòu)屬于指令生成器狀態(tài)。如圖3所示,指令生成器狀態(tài)包含當(dāng)前的代碼大小(Code Size)、周期數(shù)(Cycle Count)、覆蓋率狀態(tài)(Coverage State)。指令生成器狀態(tài)還包括與覆蓋率狀態(tài)相關(guān)的對于處理器硬件結(jié)構(gòu)和指令集架構(gòu)(ISA,Instruction Set Architecture)覆蓋率收集的數(shù)據(jù)結(jié)構(gòu)。其中,如圖5和6所示,覆蓋率收集的數(shù)據(jù)結(jié)構(gòu)包括功能單元列表、指令列表和操作數(shù)鏈表。指令列表中的函數(shù)指針指向指令功能對應(yīng)的處理函數(shù),用來支持指令仿真。
需要說明的是,步驟110至步驟140中需要步驟101-107中選擇的第一發(fā)射指令數(shù)和功能單元,以便根據(jù)第一發(fā)射指令數(shù)和功能單元選擇指令包。至此,隨機(jī)測試程序生成的過程就完成了。
實(shí)施例2
圖8為本發(fā)明實(shí)施例2提供的隨機(jī)測試程序生成方法的實(shí)現(xiàn)流程示意圖,如圖8所示,所述方法包括:
步驟201:初始化處理器初始狀態(tài)。
步驟202:初始化合法指令集。
步驟203:初始化ARTPG狀態(tài)。
步驟204:判斷隨機(jī)測試程序是否滿足終止條件。
步驟204判斷為是后,執(zhí)行步驟218。
步驟218:輸出隨機(jī)測試程序、隨機(jī)測試程序執(zhí)行結(jié)果和覆蓋率分析報(bào)告。
步驟219:釋放空間并退出。
實(shí)施例3
圖8為本發(fā)明實(shí)施例3提供的隨機(jī)測試程序生成方法的實(shí)現(xiàn)流程示意圖,如圖8所示,所述方法包括:
步驟201:初始化處理器初始狀態(tài)。
步驟202:初始化合法指令集。
步驟203:初始化ARTPG狀態(tài)。
步驟204:判斷隨機(jī)測試程序是否滿足終止條件。
步驟205:隨機(jī)選擇所述隨機(jī)測試程序的第二發(fā)射指令數(shù)。
步驟206:判斷隨機(jī)測試程序生成的第一發(fā)射指令數(shù)是否等于隨機(jī)選擇的第二發(fā)射指令數(shù)。
步驟206判斷為是后,執(zhí)行步驟204。
步驟204:判斷隨機(jī)測試程序是否滿足終止條件。
步驟218:輸出隨機(jī)測試程序、隨機(jī)測試程序執(zhí)行結(jié)果和覆蓋率分析報(bào)告。
步驟219:釋放空間并退出。
本實(shí)施例是當(dāng)隨機(jī)測試程序生成的第一發(fā)射指令數(shù)等于隨機(jī)選擇的第二發(fā)射指令數(shù)且滿足終止條件時(shí)提供的隨機(jī)測試程序生成方法。
實(shí)施例4
圖8為本發(fā)明實(shí)施例4提供的隨機(jī)測試程序生成方法的實(shí)現(xiàn)流程示意圖,如圖8所示,所述方法包括:
步驟201:初始化處理器初始狀態(tài)。
步驟202:初始化合法指令集。
步驟203:初始化ARTPG狀態(tài)。
步驟204:判斷隨機(jī)測試程序是否滿足終止條件。
步驟205:隨機(jī)選擇所述隨機(jī)測試程序的第二發(fā)射指令數(shù)。
步驟206:判斷隨機(jī)測試程序生成的第一發(fā)射指令數(shù)是否等于隨機(jī)選擇的第二發(fā)射指令數(shù)。
步驟207:選擇功能單元。
步驟208:在合法指令集中選擇指令包。
步驟209:判斷指令包是否包括分支跳轉(zhuǎn)指令。
步驟209判斷為否后,執(zhí)行步驟214。
步驟214:選擇普通指令操作數(shù)。
步驟215:修改ARTPG狀態(tài)。
步驟216:修改處理器狀態(tài)。
步驟217:修改合法指令集。
步驟206:判斷隨機(jī)測試程序生成的第一發(fā)射指令數(shù)是否等于隨機(jī)選擇的第二發(fā)射指令數(shù)。
步驟206判斷為是后,執(zhí)行步驟204。
步驟204:判斷隨機(jī)測試程序是否滿足終止條件。
步驟204判斷為是后,執(zhí)行步驟218。
步驟218:輸出隨機(jī)測試程序、隨機(jī)測試程序執(zhí)行結(jié)果和覆蓋率分析報(bào)告。
步驟219:釋放空間并退出。
本實(shí)施例是當(dāng)隨機(jī)測試程序的指令包不包括分支跳轉(zhuǎn)指令時(shí)提供的隨機(jī)測試程序生成方法。
實(shí)施例5
圖8為本發(fā)明實(shí)施例5提供的隨機(jī)測試程序生成方法的實(shí)現(xiàn)流程示意圖,如圖8所示,所述方法包括:
步驟201:初始化處理器初始狀態(tài)。
步驟202:初始化合法指令集。
步驟203:初始化ARTPG狀態(tài)。
步驟204:判斷隨機(jī)測試程序是否滿足終止條件。
步驟205:隨機(jī)選擇所述隨機(jī)測試程序的第二發(fā)射指令數(shù)。
步驟206:判斷隨機(jī)測試程序生成的第一發(fā)射指令數(shù)是否等于隨機(jī)選擇的第二發(fā)射指令數(shù)。
步驟207:選擇功能單元。
步驟208:在合法指令集中選擇指令包。
步驟209:判斷指令包是否包括分支跳轉(zhuǎn)指令。
步驟210:選擇分支跳轉(zhuǎn)指令操作數(shù)。
步驟211:判斷隨機(jī)測試程序是否存在第一死循環(huán)風(fēng)險(xiǎn)。
步驟212:修改隨機(jī)測試程序。
步驟213:判斷隨機(jī)測試程序是否存在第二循環(huán)風(fēng)險(xiǎn)。
步驟213判斷為是后,執(zhí)行步驟208。
步驟208:在合法指令集中選擇指令包。
步驟209:判斷指令包是否包括分支跳轉(zhuǎn)指令。
步驟209判斷為否后,執(zhí)行步驟214。
步驟214:選擇普通指令操作數(shù)。
步驟215:修改ARTPG狀態(tài)。
步驟216:修改處理器狀態(tài)。
步驟217:修改合法指令集。
步驟206:判斷隨機(jī)測試程序生成的第一發(fā)射指令數(shù)是否等于隨機(jī)選擇的第二發(fā)射指令數(shù)。
步驟206判斷為是后,執(zhí)行步驟204。
步驟204:判斷隨機(jī)測試程序是否滿足終止條件。
步驟204判斷為是后,執(zhí)行步驟218。
步驟218:輸出隨機(jī)測試程序、隨機(jī)測試程序執(zhí)行結(jié)果和覆蓋率分析報(bào)告。
步驟219:釋放空間并退出。
本實(shí)施例是當(dāng)隨機(jī)測試程序存在第一死循環(huán)風(fēng)險(xiǎn)和第二循環(huán)風(fēng)險(xiǎn)時(shí)提供的隨機(jī)測試程序生成方法。
實(shí)施例6
圖8為本發(fā)明實(shí)施例6提供的隨機(jī)測試程序生成方法的實(shí)現(xiàn)流程示意圖,如圖8所示,所述方法包括:
步驟201:初始化處理器初始狀態(tài)。
步驟202:初始化合法指令集。
步驟203:初始化ARTPG狀態(tài)。
步驟204:判斷隨機(jī)測試程序是否滿足終止條件。
步驟205:隨機(jī)選擇所述隨機(jī)測試程序的第二發(fā)射指令數(shù)。
步驟206:判斷隨機(jī)測試程序生成的第一發(fā)射指令數(shù)是否等于隨機(jī)選擇的第二發(fā)射指令數(shù)。
步驟207:選擇功能單元。
步驟208:在合法指令集中選擇指令包。
步驟209:判斷指令包是否包括分支跳轉(zhuǎn)指令。
步驟210:選擇分支跳轉(zhuǎn)指令操作數(shù)。
步驟211:判斷隨機(jī)測試程序是否存在第一死循環(huán)風(fēng)險(xiǎn)。
步驟211判斷為否后,執(zhí)行步驟215。
步驟215:修改ARTPG狀態(tài)。
步驟216:修改處理器狀態(tài)。
步驟217:修改合法指令集。
步驟206:判斷隨機(jī)測試程序生成的第一發(fā)射指令數(shù)是否等于隨機(jī)選擇的第二發(fā)射指令數(shù)。
步驟206判斷為是后,執(zhí)行步驟204。
步驟204:判斷隨機(jī)測試程序是否滿足終止條件。
步驟204判斷為是后,執(zhí)行步驟218。
步驟218:輸出隨機(jī)測試程序、隨機(jī)測試程序執(zhí)行結(jié)果和覆蓋率分析報(bào)告。
步驟219:釋放空間并退出。
本實(shí)施例是當(dāng)隨機(jī)測試程序存在第一死循環(huán)風(fēng)險(xiǎn)時(shí)提供的隨機(jī)測試程序生成方法。
實(shí)施例7
圖9為本發(fā)明實(shí)施例7提供的隨機(jī)測試程序生成裝置的組成結(jié)構(gòu)示意圖,如圖9所示,所述裝置包括:
第一判斷模塊310,用于在合法指令集中隨機(jī)選擇指令包并生成所述指令包,判斷所述指令包是否包括分支跳轉(zhuǎn)指令;
第二判斷模塊320,用于當(dāng)所述指令包包括所述分支跳轉(zhuǎn)指令時(shí),判斷所述隨機(jī)測試程序是否存在第一死循環(huán)風(fēng)險(xiǎn);
第三判斷模塊330,用于當(dāng)所述隨機(jī)測試程序存在所述第一死循環(huán)風(fēng)險(xiǎn)時(shí),修改所述隨機(jī)測試程序,判斷所述隨機(jī)測試程序是否存在第二循環(huán)風(fēng)險(xiǎn)。
修改模塊340,用于當(dāng)所述隨機(jī)測試程序不存在第二循環(huán)風(fēng)險(xiǎn)時(shí),修改ARTPG狀態(tài)、處理器狀態(tài)和所述合法指令集。
具體地,所述第三判斷模塊330,用于修改所述隨機(jī)測試程序包括:
當(dāng)分支跳轉(zhuǎn)地址超過程序空間界限時(shí),修改所述分支跳轉(zhuǎn)地址使其不超過所述程序空間界限;
當(dāng)分支跳轉(zhuǎn)判定條件在聲明到使用之間沒有修改操作時(shí),增加修改指令;
當(dāng)所述修改操作的收斂方向與所述分支跳轉(zhuǎn)判定條件不一致時(shí),修改所述修改操作的收斂方向使其與所述分支跳轉(zhuǎn)判定條件一致;
當(dāng)所述指令包包括函數(shù)調(diào)用指令或軟件中斷指令時(shí),添加現(xiàn)場保存及恢復(fù)的指令。
具體地,所述修改模塊340,用于修改所述ARTPG狀態(tài)包括:
根據(jù)功能覆蓋率反饋信息調(diào)整隨機(jī)權(quán)重。具體地,所述修改模塊340,用于修改所述合法指令集包括:
將修改后的輸出寄存器添加到對應(yīng)的合法輸入操作數(shù);
將所述合法輸入操作數(shù)對應(yīng)的指令添加到所述合法指令集;
當(dāng)所述指令包包括所述函數(shù)調(diào)用指令或所述軟件中斷指令時(shí),將當(dāng)前返回地址壓至堆棧,在所述函數(shù)調(diào)用指令或所述軟件中斷指令前添加所述現(xiàn)場保存的指令。
進(jìn)一步地,所述第三判斷模塊330,還用于在所述修改所述隨機(jī)測試程序之后及在所述判斷所述隨機(jī)測試程序是否存在第二循環(huán)風(fēng)險(xiǎn)之前,執(zhí)行指令局部仿真或者執(zhí)行指令全局仿真。
進(jìn)一步地,所述裝置還包括:
輸出模塊350,用于當(dāng)所述隨機(jī)測試程序生成的第一發(fā)射指令數(shù)等于隨機(jī)選擇的第二發(fā)射指令數(shù)且所述隨機(jī)測試程序滿足終止條件時(shí),輸出所述隨機(jī)測試程序、隨機(jī)測試程序執(zhí)行結(jié)果和覆蓋率分析報(bào)告。
在實(shí)際應(yīng)用中,所述第一判斷模塊310、第二判斷模塊320、第三判斷模塊330、修改模塊340和輸出模塊350均可由任何編程語言基于任何軟件或硬件平臺編程實(shí)現(xiàn)。同時(shí),所述隨機(jī)測試程序生成方法可以直接或者經(jīng)簡單修改后生成針對任何目標(biāo)處理器的隨機(jī)測試程序。
在實(shí)際應(yīng)用中,所述第一判斷模塊310、第二判斷模塊320、第三判斷模塊330、修改模塊340和輸出模塊350均可由位于任意計(jì)算機(jī)設(shè)備中的中央處理器(CPU,Central Processing Unit)、數(shù)字信號處理器(DSP,Digital Signal Processor)、微處理器(MPU)、或可編程邏輯陣列(FPGA,F(xiàn)ield Programmable Gate Array)實(shí)現(xiàn)。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。