生成检测指令序列的方法和装置的制造方法
【技术领域】
[0001]本发明涉及指令随机验证领域,尤其涉及一种生成检测指令序列的方法和装置。
【背景技术】
[0002]指令集架构(Instruct1n Set Architecture,简称ISA)是处理器与软件之间的接口,描述了处理器对程序员提供的各种功能。指令随机验证是一种自动化的处理器验证方法,针对待验证的处理器,随机生成各种指令序列,然后将这些指令序列放入处理器执行,并检查执行结果是否正确。指令随机验证的关键在于指令序列的生成,一般来说,指令序列生成包含两个部分,一是决定序列中使用哪些指令,二是确定每条指令的指令码。虽然在处理器的指令集架构中,每条指令被描述为实现独立的功能,但在处理器的实际运行中,每条指令都会改变处理器的状态,进而影响后续指令的运行,因此每条指令的运行都存在一个上下文,通常包含先行指令、当前寄存器的值、当前内存的值等。
[0003]但是,在采用现有技术生成指令的过程中,需要选择处理器执行的指令,当产生大量指令时,需要分析全部的指令来选择相应的指令,从而降低了效率。
【发明内容】
[0004]本发明提供一种用于生成检测指令序列的方法和装置,用于提高选择指令的过程。
[0005]本发明的第一个方面是提供一种生成检测指令序列的方法,包括:
[0006]生成至少两个源指令组,并将所述指令划分到对应的源指令组中;
[0007]根据第一提取信息为每条指令生成对应的至少一个指令簇,每个所述指令簇包含至少一个指令槽以及每个指令槽的指令选择范围;其中,所述第一提取信息为处理器配置文件包含的信息;
[0008]从所述至少两个源指令组中选择出至少一个目标指令组放入指令组候选队列中,所述目标指令组为所述至少两个源指令组中可生成的源指令组;
[0009]从指令组候选队列中随机选择一个目标指令组移出所述指令组候选队列;
[0010]根据上下文从移出的目标指令组中选取可生成的指令簇,并将所述可生成的指令簇放入指令簇候选队列;其中,所述上下文包括寄存器的内容、内存的内容和已生成的历史指令;
[0011]从所述指令簇候选队列中随机选择一个所述可生成的指令簇移出所述指令簇候选队列;
[0012]根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列。
[0013]本发明的第二个方面是提供一种生成检测指令序列的装置,包括:
[0014]生成模块,用于生成至少两个源指令组,并将所述指令划分到对应的源指令组中;还用于根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列;
[0015]提取模块,用于根据第一提取信息为每条指令生成对应的至少一个指令簇,每个所述指令簇包含至少一个指令槽以及每个指令槽的指令选择范围;其中,所述第一提取信息为处理器配置文件包含的信息;
[0016]处理模块,用于从所述至少两个源指令组中选择出至少一个目标指令组放入指令组候选队列中,所述目标指令组为所述至少两个源指令组中可生成的源指令组;还用于从指令组候选队列中随机选择一个目标指令组移出所述指令组候选队列;还用于根据上下文从移出的目标指令组中选取可生成的指令簇,并将所述可生成的指令簇放入指令簇候选队列;其中,所述上下文包括寄存器的内容、内存的内容和已生成的历史指令;还用于从所述指令簇候选队列中随机选择一个所述可生成的指令簇移出所述指令簇候选队列。
[0017]本实施例提供的生成检测指令序列的方法和装置,通过生成至少两个源指令组,并将所述指令划分到对应的源指令组中;根据第一提取信息为每条指令生成对应的至少一个指令簇,每个所述指令簇包含至少一个指令槽以及每个指令槽的指令选择范围;从所述至少两个源指令组中选择出至少一个目标指令组放入指令组候选队列中,所述目标指令组为所述至少两个源指令组中可生成的源指令组;从指令组候选队列中随机选择一个目标指令组移出所述指令组候选队列;根据上下文从移出的目标指令组中选取可生成的指令簇,并将所述可生成的指令簇放入指令簇候选队列;其中,所述上下文包括寄存器的内容、内存的内容和已生成的历史指令;从所述指令簇候选队列中随机选择一个所述可生成的指令簇移出所述指令簇候选队列;根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列。由于通过指令组选择和指令簇选择两个步骤挑选出一条检测指令,可以提高挑选检测指令的效率。假设指令集中共有10000条指令,如果采用现有技术直接挑选一条检测指令,那么需要分析10000条指令,然后挑选一条,共做10000次分析。而指令分组后,假设分100组,每组100条指令簇,那么机器先分析100个组,挑选一个组,再分析该组内100条指令簇,挑选一段检测指令,共做200次分析。明显提高了选择检测指令的过程,进一步的加快了通过随机指令检测指令集架构的效率。
【附图说明】
[0018]图1为本发明实施例提供的一种生成检测指令序列的方法的流程示意图;
[0019]图2为本发明实施例提供的另一种生成检测指令序列的方法的流程示意图;
[0020]图3为本发明实施例提供的另一种生成检测指令序列的方法的流程示意图;
[0021]图4为本发明实施例提供的另一种生成检测指令序列的方法的流程示意图;
[0022]图5为本实施例提供一种生成检测指令序列的装置的结构示意图。
【具体实施方式】
[0023]图1为本发明实施例提供的一种生成检测指令序列的方法的流程示意图,本方法的执行主体为模拟器或仿真器,参照图1,该方法包括如下步骤:
[0024]步骤100、生成至少两个源指令组,并将所述指令划分到对应的源指令组中;
[0025]具体的,根据每个指令的类型将属于同一类型的所述指令划分到与所述类型对应的所述源指令组中。
[0026]步骤101、根据第一提取信息为每条指令生成对应的至少一个指令簇,每个所述指令簇包含至少一个指令槽以及每个指令槽的指令选择范围;
[0027]具体的,第一提取信息为处理器配置文件包含的信息。每个指令簇包含至少一个指令槽以及每个指令槽的指令选择范围。需要说明的是,指令簇是针对某条指令制定的一个短指令序列,也就是说,该条指令为指令簇的主指令,占用指令簇的一个指令槽,而指令簇中包含的其它指令槽存放该主指令的辅助指令。一个指令簇包含至少一个指令槽,并且该指令簇隶属于该指令簇的主指令,当某些主指令不需要辅助指令时,其对应的指令簇只包含一个指令槽,该指令槽只存放该主指令。因此,每个指令簇中指令槽的数目、每个指令槽存放何种指令可以不同,但指令簇一定包含一个指令槽用以存放主指令。
[0028]步骤102、从所述至少两个源指令组中选择出至少一个目标指令组放入指令组候选队列中,所述目标指令组为所述至少两个源指令组中可生成的源指令组。
[0029]步骤103、从指令组候选队列中随机选择一个目标指令组移出所述指令组候选队列;
[0030]步骤104、根据上下文从移出的目标指令组中选取可生成的指令簇,并将所述可生成的指令簇放入指令簇候选队列;
[0031]其中,所述上下文包括寄存器的内容、内存的内容和已生成的历史指令;
[0032]步骤105、从所述指令簇候选队列中随机选择一个所述可生成的指令簇移出所述指令簇候选队列;
[0033]步骤106、根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列。
[0034]具体的,选择指令簇后,根据该指令簇的指令槽生成所述指令。
[0035]优选的,在生成检验指令序列之后,可以将生成的检验指令序列数目与数目阈值进行比较,若检验指令序列数目的超过或等于阈值则运行所述检验指令序列以检测处理器的指令集架构是否正常,若检验指令序列数目小于数目阈值,则返回步骤102,继续生成检验指令序列。需要说明的是,该数目阈值根据不同的处理器的指令集架构有所不同,本实施例对于数目阈值的具体数值不做限定。
[0036]本实施例提供的生成检测指令序列的方法,通过生成至少两个源指令组,并将所述指令划分到对应的源指令组中;根据第一提取信息为每条指令生成对应的至少一个指令簇,每个所述指令簇包含至少一个指令槽以及每个指令槽的指令选择范围;从所述至少两个源指令组中选择出至少一个目标指令组放入指令组候选队列中,所述目标指令组为所述至少两个源指令组中可生成的源指令组;从指令组候选队列中随机选择一个目标指令组移出所述指令组候选队列;根据上下文从移出的目标指令组中选取可生成的指令簇,并将所述可生成的指令簇放入指令簇候选队列;其中,所述上下文包括寄存器的内容、内存的内容和已生成的历史指令;从所述指令簇候选队列中随机选择一个所述可生成的指令簇移出所述指令簇候选队列;根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列。由于通过指令组选择和指令簇选择两个步骤挑选出一条检测指令,可以提高挑选检测指令的效率。假设指令集中共有10000条指令,如果采用现有技术直接挑选一条检测指令,那么需要分析10000条指令,然后挑选一条,共做10000次分析。而指令分组后,假设分100组,每组100条指令簇,那么机器先分析100个组,挑选一个组,再分析该组内100条指令簇,挑选一段检测指令,共做200次分析。明显提高了选择检测指令的过程,进一步的加快了通过随机指令检测指令集架构的效率。
[0037]进一步的,在图1的基础上,图2为本发明实施例提供的另一种生成检测指令序列的方法的流