生成檢測(cè)指令序列的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及指令隨機(jī)驗(yàn)證領(lǐng)域,尤其涉及一種生成檢測(cè)指令序列的方法和裝置。
【背景技術(shù)】
[0002]指令集架構(gòu)(Instruct1n Set Architecture,簡(jiǎn)稱(chēng)ISA)是處理器與軟件之間的接口,描述了處理器對(duì)程序員提供的各種功能。指令隨機(jī)驗(yàn)證是一種自動(dòng)化的處理器驗(yàn)證方法,針對(duì)待驗(yàn)證的處理器,隨機(jī)生成各種指令序列,然后將這些指令序列放入處理器執(zhí)行,并檢查執(zhí)行結(jié)果是否正確。指令隨機(jī)驗(yàn)證的關(guān)鍵在于指令序列的生成,一般來(lái)說(shuō),指令序列生成包含兩個(gè)部分,一是決定序列中使用哪些指令,二是確定每條指令的指令碼。雖然在處理器的指令集架構(gòu)中,每條指令被描述為實(shí)現(xiàn)獨(dú)立的功能,但在處理器的實(shí)際運(yùn)行中,每條指令都會(huì)改變處理器的狀態(tài),進(jìn)而影響后續(xù)指令的運(yùn)行,因此每條指令的運(yùn)行都存在一個(gè)上下文,通常包含先行指令、當(dāng)前寄存器的值、當(dāng)前內(nèi)存的值等。
[0003]但是,在采用現(xiàn)有技術(shù)生成指令的過(guò)程中,需要選擇處理器執(zhí)行的指令,當(dāng)產(chǎn)生大量指令時(shí),需要分析全部的指令來(lái)選擇相應(yīng)的指令,從而降低了效率。
【發(fā)明內(nèi)容】
[0004]本發(fā)明提供一種用于生成檢測(cè)指令序列的方法和裝置,用于提高選擇指令的過(guò)程。
[0005]本發(fā)明的第一個(gè)方面是提供一種生成檢測(cè)指令序列的方法,包括:
[0006]生成至少兩個(gè)源指令組,并將所述指令劃分到對(duì)應(yīng)的源指令組中;
[0007]根據(jù)第一提取信息為每條指令生成對(duì)應(yīng)的至少一個(gè)指令簇,每個(gè)所述指令簇包含至少一個(gè)指令槽以及每個(gè)指令槽的指令選擇范圍;其中,所述第一提取信息為處理器配置文件包含的信息;
[0008]從所述至少兩個(gè)源指令組中選擇出至少一個(gè)目標(biāo)指令組放入指令組候選隊(duì)列中,所述目標(biāo)指令組為所述至少兩個(gè)源指令組中可生成的源指令組;
[0009]從指令組候選隊(duì)列中隨機(jī)選擇一個(gè)目標(biāo)指令組移出所述指令組候選隊(duì)列;
[0010]根據(jù)上下文從移出的目標(biāo)指令組中選取可生成的指令簇,并將所述可生成的指令簇放入指令簇候選隊(duì)列;其中,所述上下文包括寄存器的內(nèi)容、內(nèi)存的內(nèi)容和已生成的歷史指令;
[0011]從所述指令簇候選隊(duì)列中隨機(jī)選擇一個(gè)所述可生成的指令簇移出所述指令簇候選隊(duì)列;
[0012]根據(jù)移出的指令簇中包含的指令槽個(gè)數(shù)以及指令槽的指令選擇范圍生成檢驗(yàn)指令序列。
[0013]本發(fā)明的第二個(gè)方面是提供一種生成檢測(cè)指令序列的裝置,包括:
[0014]生成模塊,用于生成至少兩個(gè)源指令組,并將所述指令劃分到對(duì)應(yīng)的源指令組中;還用于根據(jù)移出的指令簇中包含的指令槽個(gè)數(shù)以及指令槽的指令選擇范圍生成檢驗(yàn)指令序列;
[0015]提取模塊,用于根據(jù)第一提取信息為每條指令生成對(duì)應(yīng)的至少一個(gè)指令簇,每個(gè)所述指令簇包含至少一個(gè)指令槽以及每個(gè)指令槽的指令選擇范圍;其中,所述第一提取信息為處理器配置文件包含的信息;
[0016]處理模塊,用于從所述至少兩個(gè)源指令組中選擇出至少一個(gè)目標(biāo)指令組放入指令組候選隊(duì)列中,所述目標(biāo)指令組為所述至少兩個(gè)源指令組中可生成的源指令組;還用于從指令組候選隊(duì)列中隨機(jī)選擇一個(gè)目標(biāo)指令組移出所述指令組候選隊(duì)列;還用于根據(jù)上下文從移出的目標(biāo)指令組中選取可生成的指令簇,并將所述可生成的指令簇放入指令簇候選隊(duì)列;其中,所述上下文包括寄存器的內(nèi)容、內(nèi)存的內(nèi)容和已生成的歷史指令;還用于從所述指令簇候選隊(duì)列中隨機(jī)選擇一個(gè)所述可生成的指令簇移出所述指令簇候選隊(duì)列。
[0017]本實(shí)施例提供的生成檢測(cè)指令序列的方法和裝置,通過(guò)生成至少兩個(gè)源指令組,并將所述指令劃分到對(duì)應(yīng)的源指令組中;根據(jù)第一提取信息為每條指令生成對(duì)應(yīng)的至少一個(gè)指令簇,每個(gè)所述指令簇包含至少一個(gè)指令槽以及每個(gè)指令槽的指令選擇范圍;從所述至少兩個(gè)源指令組中選擇出至少一個(gè)目標(biāo)指令組放入指令組候選隊(duì)列中,所述目標(biāo)指令組為所述至少兩個(gè)源指令組中可生成的源指令組;從指令組候選隊(duì)列中隨機(jī)選擇一個(gè)目標(biāo)指令組移出所述指令組候選隊(duì)列;根據(jù)上下文從移出的目標(biāo)指令組中選取可生成的指令簇,并將所述可生成的指令簇放入指令簇候選隊(duì)列;其中,所述上下文包括寄存器的內(nèi)容、內(nèi)存的內(nèi)容和已生成的歷史指令;從所述指令簇候選隊(duì)列中隨機(jī)選擇一個(gè)所述可生成的指令簇移出所述指令簇候選隊(duì)列;根據(jù)移出的指令簇中包含的指令槽個(gè)數(shù)以及指令槽的指令選擇范圍生成檢驗(yàn)指令序列。由于通過(guò)指令組選擇和指令簇選擇兩個(gè)步驟挑選出一條檢測(cè)指令,可以提高挑選檢測(cè)指令的效率。假設(shè)指令集中共有10000條指令,如果采用現(xiàn)有技術(shù)直接挑選一條檢測(cè)指令,那么需要分析10000條指令,然后挑選一條,共做10000次分析。而指令分組后,假設(shè)分100組,每組100條指令簇,那么機(jī)器先分析100個(gè)組,挑選一個(gè)組,再分析該組內(nèi)100條指令簇,挑選一段檢測(cè)指令,共做200次分析。明顯提高了選擇檢測(cè)指令的過(guò)程,進(jìn)一步的加快了通過(guò)隨機(jī)指令檢測(cè)指令集架構(gòu)的效率。
【附圖說(shuō)明】
[0018]圖1為本發(fā)明實(shí)施例提供的一種生成檢測(cè)指令序列的方法的流程示意圖;
[0019]圖2為本發(fā)明實(shí)施例提供的另一種生成檢測(cè)指令序列的方法的流程示意圖;
[0020]圖3為本發(fā)明實(shí)施例提供的另一種生成檢測(cè)指令序列的方法的流程示意圖;
[0021]圖4為本發(fā)明實(shí)施例提供的另一種生成檢測(cè)指令序列的方法的流程示意圖;
[0022]圖5為本實(shí)施例提供一種生成檢測(cè)指令序列的裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0023]圖1為本發(fā)明實(shí)施例提供的一種生成檢測(cè)指令序列的方法的流程示意圖,本方法的執(zhí)行主體為模擬器或仿真器,參照?qǐng)D1,該方法包括如下步驟:
[0024]步驟100、生成至少兩個(gè)源指令組,并將所述指令劃分到對(duì)應(yīng)的源指令組中;
[0025]具體的,根據(jù)每個(gè)指令的類(lèi)型將屬于同一類(lèi)型的所述指令劃分到與所述類(lèi)型對(duì)應(yīng)的所述源指令組中。
[0026]步驟101、根據(jù)第一提取信息為每條指令生成對(duì)應(yīng)的至少一個(gè)指令簇,每個(gè)所述指令簇包含至少一個(gè)指令槽以及每個(gè)指令槽的指令選擇范圍;
[0027]具體的,第一提取信息為處理器配置文件包含的信息。每個(gè)指令簇包含至少一個(gè)指令槽以及每個(gè)指令槽的指令選擇范圍。需要說(shuō)明的是,指令簇是針對(duì)某條指令制定的一個(gè)短指令序列,也就是說(shuō),該條指令為指令簇的主指令,占用指令簇的一個(gè)指令槽,而指令簇中包含的其它指令槽存放該主指令的輔助指令。一個(gè)指令簇包含至少一個(gè)指令槽,并且該指令簇隸屬于該指令簇的主指令,當(dāng)某些主指令不需要輔助指令時(shí),其對(duì)應(yīng)的指令簇只包含一個(gè)指令槽,該指令槽只存放該主指令。因此,每個(gè)指令簇中指令槽的數(shù)目、每個(gè)指令槽存放何種指令可以不同,但指令簇一定包含一個(gè)指令槽用以存放主指令。
[0028]步驟102、從所述至少兩個(gè)源指令組中選擇出至少一個(gè)目標(biāo)指令組放入指令組候選隊(duì)列中,所述目標(biāo)指令組為所述至少兩個(gè)源指令組中可生成的源指令組。
[0029]步驟103、從指令組候選隊(duì)列中隨機(jī)選擇一個(gè)目標(biāo)指令組移出所述指令組候選隊(duì)列;
[0030]步驟104、根據(jù)上下文從移出的目標(biāo)指令組中選取可生成的指令簇,并將所述可生成的指令簇放入指令簇候選隊(duì)列;
[0031]其中,所述上下文包括寄存器的內(nèi)容、內(nèi)存的內(nèi)容和已生成的歷史指令;
[0032]步驟105、從所述指令簇候選隊(duì)列中隨機(jī)選擇一個(gè)所述可生成的指令簇移出所述指令簇候選隊(duì)列;
[0033]步驟106、根據(jù)移出的指令簇中包含的指令槽個(gè)數(shù)以及指令槽的指令選擇范圍生成檢驗(yàn)指令序列。
[0034]具體的,選擇指令簇后,根據(jù)該指令簇的指令槽生成所述指令。
[0035]優(yōu)選的,在生成檢驗(yàn)指令序列之后,可以將生成的檢驗(yàn)指令序列數(shù)目與數(shù)目閾值進(jìn)行比較,若檢驗(yàn)指令序列數(shù)目的超過(guò)或等于閾值則運(yùn)行所述檢驗(yàn)指令序列以檢測(cè)處理器的指令集架構(gòu)是否正常,若檢驗(yàn)指令序列數(shù)目小于數(shù)目閾值,則返回步驟102,繼續(xù)生成檢驗(yàn)指令序列。需要說(shuō)明的是,該數(shù)目閾值根據(jù)不同的處理器的指令集架構(gòu)有所不同,本實(shí)施例對(duì)于數(shù)目閾值的具體數(shù)值不做限定。
[0036]本實(shí)施例提供的生成檢測(cè)指令序列的方法,通過(guò)生成至少兩個(gè)源指令組,并將所述指令劃分到對(duì)應(yīng)的源指令組中;根據(jù)第一提取信息為每條指令生成對(duì)應(yīng)的至少一個(gè)指令簇,每個(gè)所述指令簇包含至少一個(gè)指令槽以及每個(gè)指令槽的指令選擇范圍;從所述至少兩個(gè)源指令組中選擇出至少一個(gè)目標(biāo)指令組放入指令組候選隊(duì)列中,所述目標(biāo)指令組為所述至少兩個(gè)源指令組中可生成的源指令組;從指令組候選隊(duì)列中隨機(jī)選擇一個(gè)目標(biāo)指令組移出所述指令組候選隊(duì)列;根據(jù)上下文從移出的目標(biāo)指令組中選取可生成的指令簇,并將所述可生成的指令簇放入指令簇候選隊(duì)列;其中,所述上下文包括寄存器的內(nèi)容、內(nèi)存的內(nèi)容和已生成的歷史指令;從所述指令簇候選隊(duì)列中隨機(jī)選擇一個(gè)所述可生成的指令簇移出所述指令簇候選隊(duì)列;根據(jù)移出的指令簇中包含的指令槽個(gè)數(shù)以及指令槽的指令選擇范圍生成檢驗(yàn)指令序列。由于通過(guò)指令組選擇和指令簇選擇兩個(gè)步驟挑選出一條檢測(cè)指令,可以提高挑選檢測(cè)指令的效率。假設(shè)指令集中共有10000條指令,如果采用現(xiàn)有技術(shù)直接挑選一條檢測(cè)指令,那么需要分析10000條指令,然后挑選一條,共做10000次分析。而指令分組后,假設(shè)分100組,每組100條指令簇,那么機(jī)器先分析100個(gè)組,挑選一個(gè)組,再分析該組內(nèi)100條指令簇,挑選一段檢測(cè)指令,共做200次分析。明顯提高了選擇檢測(cè)指令的過(guò)程,進(jìn)一步的加快了通過(guò)隨機(jī)指令檢測(cè)指令集架構(gòu)的效率。
[0037]進(jìn)一步的,在圖1的基礎(chǔ)上,圖2為本發(fā)明實(shí)施例提供的另一種生成檢測(cè)指令序列的方法的流