生成随机指令验证程序的方法、装置及电子设备与流程

文档序号:32311921发布日期:2022-11-23 11:58阅读:77来源:国知局
生成随机指令验证程序的方法、装置及电子设备与流程

1.本发明涉及计算机技术领域,尤其涉及一种生成随机指令验证程序的方法、装置及电子设备。


背景技术:

2.随着超大规模集成电路工艺的发展,微处理器的结构越来越复杂,在单独一个微处理器芯片上集成的功能越来越多,微处理器的指令集被不断扩充,指令的数量、种类大幅增加,导致微处理器的功能验证也变得非常复杂,并且验证周期很长,不可避免的会影响处理器的开发时间。
3.因此,如何生成更加高效的测试程序方法,提高微处理器的验证效率成为了目前急需解决的问题。


技术实现要素:

4.本发明实施例提供一种生成随机指令验证程序方法、装置及电子设备,可以提高微处理器的验证效率和验证准确度。
5.为了解决上述问题,本发明实施例公开了一种生成随机指令验证程序的方法,所述随机指令验证程序用于对微处理器进行随机验证,所述随机指令验证程序包含循环体,所述方法包括:
6.在确定满足循环体开始的约束条件时,确定循环体的开始位置,并记录所述循环体的开始位置对应的第一地址;
7.根据所述循环体的开始位置对应的第一地址,生成所述循环体的内部指令;
8.在确定满足所述循环体结束的约束条件时,确定所述循环体的结束位置,并记录所述循环体的结束位置对应的第二地址;
9.根据所述第一地址与所述第二地址之间的距离,生成所述循环体的结束指令组,其中,所述结束指令组属于所述循环体的内部指令。
10.另一方面,本发明实施例公开了一种生成随机指令验证程序的装置,所述随机指令验证程序用于对微处理器进行随机验证,所述随机指令验证程序包含循环体,所述装置包括:
11.开始位置确定模块,用于在确定满足循环体开始的约束条件时,确定循环体的开始位置,并记录所述循环体的开始位置对应的第一地址;
12.第一指令生成模块,用于根据所述循环体的开始位置对应的第一地址,生成所述循环体的内部指令;
13.结束位置确定模块,用于在确定满足所述循环体结束的约束条件时,确定所述循环体的结束位置,并记录所述循环体的结束位置对应的第二地址;
14.第二指令生成模块,用于根据所述第一地址与所述第二地址之间的距离,生成所述循环体的结束指令组,其中,所述结束指令组属于所述循环体的内部指令。
15.再一方面,本发明实施例还公开了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行前述的生成随机指令验证程序的方法。
16.本发明实施例还公开了一种可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行前述的生成随机指令验证程序的方法。
17.本发明实施例包括以下优点:
18.本发明实施例提供的生成随机指令验证程序的方法、装置及电子设备,在确定满足循环体开始的约束条件时,确定循环体的开始位置,并记录所述循环体的开始位置对应的第一地址;然后,根据所述循环体的开始位置对应的第一地址,生成所述循环体的内部指令;在确定满足所述循环体结束的约束条件时,确定所述循环体的结束位置,并记录所述循环体的结束位置对应的第二地址;根据所述第一地址与所述第二地址之间的距离,生成所述循环体的结束指令组。本发明实施例能够根据循环体开始的约束条件和结束的约束条件,自动确定循环体的开始位置和结束位置,并能够根据循环体的开始位置对应的第一地址,与循环体的结束位置对应的第二地址之间的距离选择相应的结束指令组,以保证循环体能够被正常执行。本发明实施例提高了随机指令验证程序的生成效率,有利于提升微处理器的验证效率,提升了微处理器功能验证的充分性,加快了功能验证覆盖率的收敛速度。
附图说明
19.为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
20.图1是本发明的一种生成随机指令验证程序的方法实施例的步骤流程图;
21.图2是本发明一个示例提供的一种循环体的生成过程示意图;
22.图3是本发明另一个示例提供的一种嵌套循环体的生成过程示意图;
23.图4是本发明的一种生成随机指令验证程序的装置实施例的结构框图;
24.图5是本发明实施例提供的一种用于生成随机指令验证程序的电子设备的结构示意图。
具体实施方式
25.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
26.方法实施例
27.参照图1,示出了本发明的一种生成随机指令验证程序的方法实施例的步骤流程图,所述随机指令验证程序用于对微处理器进行随机验证,所述随机指令验证程序包含循环体,所述实施例的方法具体可以包括如下步骤:
28.步骤101、在确定满足循环体开始的约束条件时,确定循环体的开始位置,并记录所述循环体的开始位置对应的第一地址。
29.步骤102、根据所述循环体的开始位置对应的第一地址,生成所述循环体的内部指令。
30.步骤103、在确定满足所述循环体结束的约束条件时,确定所述循环体的结束位置,并记录所述循环体的结束位置对应的第二地址。
31.步骤104、根据所述第一地址与所述第二地址之间的距离,生成所述循环体的结束指令组。
32.其中,所述结束指令组属于所述循环体的内部指令。
33.本发明实施例提供的生成随机指令验证程序的方法,主要用于生成随机指令验证程序中的循环体,以模拟实际应用中微处理器对同一段程序的循环执行行为。需要说明的是,一个循环体包含一组指令,在满足循环条件的情况下,循环体中的指令组被重复执行,直至满足循环结束条件时,结束循环体中指令组的执行,跳出该循环体。
34.为了实现随机指令验证程序的循环执行特性,本发明实施在随机指令验证程序的生成过程中采用了“start-end”策略,即循环体的开始位置与结束位置皆可控。具体的,可以预先确定循环体开始的约束条件和结束的约束条件,从而在确定满足循环体开始的约束条件时,确定循环体的开始位置,并记录循环体的开始位置对应的第一地址,以第一地址为循环体的首地址,开始生成循环体的内部指令。然后,在确定满足循环体结束的约束条件时,确定该循环体的结束位置,记录该循环体的结束位置对应的第二地址,并根据第一地址和第二地址之间的距离,生成循环体的结束指令组。其中,循环体开始的约束条件可以为当前生成的指令的存储地址为随机指令验证程序中循环体的上一条指令,换言之,当前生成的指令的存储地址与循环体的开始位置对应的第一地址连续相邻,且当前生成的指令的存储地址在所述第一地址之前。循环体结束的约束条件可以为当前生成的指令为循环体的结束位置中存储的指令。
35.需要说明的是,所述循环体包括内部指令和结束指令组,所述结束指令组属于所述循环体的内部指令。在构建循环体时,循环体的内部指令对应的取指地址形成闭环时,循环体才能成型,这就要求循环体中结束位置对应的取指地址为循环体的开始位置对应的第一地址。在本发明实施例中,根据循环体的开始位置对应的第一地址和结束位置对应的第二地址之间的距离,生成相应的结束指令组,从而在生成循环体时,通过比较第一地址与第二地址之间的距离,选择不同的结束指令组。
36.本发明实施例提供的生成随机指令验证程序的方法,可以以软件、硬件、固件或其任意组合的方式实现,例如,由手机、数码相机、平板电脑、笔记本电脑、桌面电脑、网络服务器等设备中的微处理器加载并执行,以简化随即指令验证程序的生成过程,提高微处理器的验证效率。
37.作为一种示例,本发明提供的生成随机指令验证程序的方法,适用于一计算装置,该计算装置是包括具有计算功能的任何电子设备,例如可以为手机、数码相机、平板电脑、笔记本电脑、桌面电脑、网络服务器等,可以加载并执行该生成随机指令验证程序的方法。该计算装置可以包括中央处理单元(central processing unit,cpu)或图形处理单元(graphics processing unit,gpu)、数字信号处理器等具有数据处理和/或指令执行能力
的其它形式的处理单元、存储单元等。该计算装置上还可以安装有操作系统、应用程序编程接口等,通过运行代码或执行的方式实现本发明实施例提供的生成随机指令验证程序的方法。
38.本发明实施例提供的生成随机指令验证程序的方法,能够根据循环体开始的约束条件和结束的约束条件,自动确定循环体的开始位置和结束位置,并能够根据循环体的开始位置对应的第一地址与循环体的结束位置对应的第二地址之间的距离,选择相应的结束指令组,以保证循环体能够被正常执行。本发明实施例提高了随机指令验证程序的生成效率,有利于提升微处理器的验证效率。
39.进一步地,随机指令验证程序的生成过程中,循环体的生成、循环体的执行和某些特殊情况的处理,都需要各自的约束条件,因此本发明实施例将随机指令验证程序的生成过程分为了四种模式来分别进行控制:
40.1)gen_mode,普通随机指令生成模式:涉及普通随机指令的生成和指令模拟执行过程;
41.2)cycle_mode,循环体生成模式:涉及循环体生成和指令模拟执行过程;
42.3)return_mode,特殊处理模式:主要涉及到循环体中的条件取指指令的生成和执行;
43.4)iss_mode,循环体内部执行模式:涉及循环体的内部执行的模拟执行过程,此模式不涉及指令的生成。
44.在生成随机指令验证程序的过程中,可以在gen_mode下生成普通随机指令,如果满足循环体开始的约束条件,则可以进入cycle_mode,生成循环体的各条内部指令。如果在生成循环体的各条内部指令的过程中,涉及到循环体内部的条件取指指令的生成,则从cycle_mode进入到return_mode,升序循环体内部的条件取指指令,并在条件取指指令生成结束之后,恢复到cycle_mode,继续生成循环体中的其他指令。在循环体生成结束之后,从cycle_mode进入到iss_mode,对循环体的各条内部指令进行模拟执行,并在跳出循环体之后,进入gen_mode,继续生成随机指令验证程序中的普通随机指令。
45.可选地,所述随机指令验证程序包括循环体的各条内部指令和/或非循环体指令,根据所述循环体的各条内部指令和/或所述非循环体指令,得到随机指令验证程序。其中,所述非循环体指令可以为普通随机指令、定向指令等等。
46.参照图2,示出了本发明实施例提供的一种循环体的生成过程示意图。如图2所示,在本发明中,用于生成随机指令验证程序的验证程序生成器在gen_mode下正常生成普通随机指令并模拟随机指令的执行。当满足循环体开始的约束条件时,验证程序生成器根据循环体开始的约束条件确定开始位置s0,并记录开始位置s0对应的第一地址,进入到cycle_mode,开始循环体的内部指令的生成过程。当满足循环体结束的约束条件时,验证程序生成器根据循环体结束的约束条件确定循环体的结束位置e0,并记录循环体的结束位置e0对应的第二地址,然后根据第一地址与第二地址之间的距离生成循环体的结束指令组,结束位置e0对应的结束指令组主要是为了实现循环体的“闭环”与“跳出”。需要说明的是,本发明实施例中生成的循环体,可以包括单层循环体和嵌套循环体。下面以单层循环体为例,说明本发明实施例生成循环体的结束指令组的具体过程。
47.作为一种示例,所述循环体包括单层循环体,步骤104所述根据所述第一地址与所
述第二地址之间的距离,生成所述循环体的结束指令组,包括:
48.步骤s11、若所述第一地址和所述第二地址之间的距离小于或等于预设阈值,则生成非零取指指令;所述非零取指指令包含第一操作数,所述第一操作数的初始值大于0,每执行一次所述非零取指指令,所述第一操作数减1;所述非零取指指令满足取指条件时的取指地址为所述第一地址,所述非零取指指令不满足取指条件时的取指地址为所述第二地址;
49.步骤104所述根据所述第一地址与所述第二地址之间的距离,生成所述循环体的结束指令组之后,所述方法还包括:
50.步骤s12、执行所述非零取指指令,以根据所述第一操作数确定所述非零取指指令的取指地址;
51.步骤s13、若所述第一操作数不等于0,则确定所述非零取指指令的目标取指地址为所述第一地址,获取所述第一地址中存储的指令并执行;
52.步骤s14、若所述第一操作数等于0,则确定所述非零取值指令的目标取指地址为所述第二地址,获取所述第二地址中存储的指令并执行。
53.其中,所述非零取指指令属于条件取指指令,取指条件为所述非零取指指令的第一操作数不等于0。具体的,所述第一操作数的初始值大于0,且每执行一次所述非零取指指令,所述第一操作数减1。在执行所述非零取指指令时,如果所述非零取指指令满足取指条件,也即所述第一操作数不等于0,则产生跳转,跳转至目标取指地址中取指;如果所述非零取指指令不满足取指条件,也即所述第一操作数等于0,则不产生跳转,直接顺序执行下一条指令。
54.需要说明的是,非零取指指令的取指范围是固定的,只能在一定的取指范围内进行跳转,也即非零取指指令的存储地址与目标取指地址之间的最大跳转距离小于或等于其取指范围。其中,非零取指指令的取指范围通常比较小,因此,在本发明实施例中,在所生成的循环体的结束指令组时,如果循环体的开始位置对应的第一地址与结束位置对应的第二地址之间的距离小于或等于预设阈值,则可以将非零取指指令作为循环体的结束指令组。其中,所述非零取指指令满足取指条件时的取指地址为所述第一地址,所述非零取指指令不满足取指条件时的取指地址为所述第二地址。
55.如图2所示,假设s0与e0之间的距离小于或等于预设阈值,在生成循环体的结束指令组之后,从循环体生成模式(cycle_mode)进入循环体内部执行模式(iss_mode),开始逐条执行循环体的各条内部指令。当第一次执行非零取指指令时,由于第一操作数的初始值大于0,此时满足非零取指指令的取指条件,跳转至第一地址,也即返回到循环体的开始位置s0,同时非零取指指令的第一操作数随着循环体的执行不断减1。当第一操作数减为0,不满足指令bn的取指条件,取指地址为结束位置e0对应的第二地址。执行结束位置e0处的指令之后,跳出循环体,恢复到普通随机指令生成模式(gen_mode),继续生成并执行普通随机指令。
56.作为另一种示例,步骤104所述根据所述第一地址与所述第二地址之间的距离,生成所述循环体的结束指令组,包括:
57.步骤s21、若所述第一地址和所述第二地址之间的距离大于预设阈值,则生成等零取指指令和直接取指指令;所述等零取指指令包含第二操作数,所述第二操作数的初始值
大于0,每执行一次所述等零取指指令,所述第二操作数减1;所述直接取指指令包含第三操作数,所述第三操作数根据所述第一地址确定;所述等零取指指令的存储地址与所述直接取指指令的存储地址连续相邻,且所述等零取指指令的存储地址在所述直接取指指令的存储地址之前;所述等零取指指令满足取指条件时的取指地址为所述第二地址,所述等零取指指令不满足取指条件时的取指地址为所述直接取指指令的存储地址;
58.步骤104所述根据所述第一地址与所述第二地址之间的距离,生成所述循环体的结束指令组之后,所述方法还包括:
59.步骤s22、执行所述等零取指指令,以根据所述第二操作数确定所述等零取指指令的目标取指地址;
60.步骤s23、若所述第二操作数不等于0,则确定所述等零取指指令的目标取指地址为所述直接取指指令的存储地址,获取所述直接取指指令并执行;
61.步骤s24、若所述第二操作数等于0,则确定所述等零取指指令的目标取指地址为所述第二地址,获取所述第二地址中存储的指令并执行。
62.其中,所述等零取指指令也属于条件取指指令,取指条件为所述等零取指指令的第二操作数等于0。具体的,所述第二操作数的初始值大于0,且每执行一次所述等零取指指令,所述第二操作数减1。在执行所述等零取指指令时,如果所述等零取指指令满足取指条件,也即所述第二操作数等于0,则产生跳转,跳转至目标取指地址中取指;如果所述等零取指指令不满足取指条件,也即所述第二操作数不等于0,则不产生跳转,直接顺序执行下一条指令。
63.所述直接取指指令为非条件取指指令,每执行一次所述直接取指指令就会产生一次跳转,跳转至所述直接取指指令的目标取指地址。可以理解的是,所述直接取指指令的目标取指地址由所述第三操作数确定。
64.需要说明的是,等零取指指令的取指范围是固定的,只能在一定的取指范围内进行跳转,也即等零取指指令的存储地址与目标取指地址之间的最大跳转距离小于或等于其取指范围。在本发明实施例中,如果循环体的开始位置对应的第一地址与结束位置对应的第二地址之间的距离大于预设阈值,则可以将等零取指指令(be)和直接取指指令(j)结合起来,作为本发明中循环体的结束指令组。
65.其中,等零取指指令包含第二操作数,所述第二操作数的初始值大于0,每执行一次所述等零取指指令,所述第二操作数减1。所述等零取指指令的存储地址与所述直接取指指令的存储地址连续相邻,且所述等零取指指令的存储地址在所述直接取指指令的存储地址之前;所述等零取指指令满足取指条件时的取指地址为所述第二地址,所述等零取指指令不满足取指条件时的取指地址为所述直接取指指令的存储地址。直接取指指令的第三操作数根据循环体的开始位置s0对应的第一地址确定,通过执行直接取指指令,可以直接返回循环体的开始位置s0。
66.如图2所示,假设s0与e0之间的距离大于预设阈值,在生成循环体的结束指令组之后,从循环体生成模式(cycle_mode)进入循环体内部执行模式(iss_mode),开始逐条执行循环体的各条内部指令。当第一次执行等零取指指令(be)时,由于第二操作数的初始值大于0,此时等零取指指令不满足取指条件,指令be的目标取指地址为直接取指指令j对应的地址,接下来执行直接取指指令,以返回循环体的开始位置s0,同时等零取指指令的第二操
作数随着循环体的执行不断减1。当第二操作数减为0时,则确定满足指令be的取指条件,此时指令be的取指地址为循环体的结束位置e0对应的第二地址。接下来执行结束位置e0处的指令,并跳出循环体,恢复到普通随机指令生成模式(gen_mode),继续生成并执行普通随机指令。
67.需要说明的是,所述预设阈值可以根据指令bn的可取值范围确定,一般为bn可取值的最大距离。指令bn的第一操作数和指令be的第二操作数的初始值,可以根据想要测试的循环体的循环次数确定,本发明实施例通过控制指令bn或指令be的操作数的大小即可控制循环体的循环次数。本发明实施例可支持对验证程序中循环体的组成以及循环体循环次数的定制需求。
68.本发明实施例中的循环体,还包括嵌套循环体。嵌套循环体中至少包含第一循环体和第二循环体,以嵌套循环体仅包含一个第一循环体和一个第二循环体为例,所述第一循环体包含所述第二循环体,所述第二循环体为单层循环体,所述第一循环体的开始位置对应第一地址,所述第一循环体的结束位置对应第二地址。参照图3,示出了本发明实施例提供的一种嵌套循环体的生成过程示意图。下面将结合图3说明本发明中生成嵌套循环体的具体过程。
69.在本发明的一种可选实施例中,步骤102根据所述循环体的开始位置对应的第一地址,生成所述循环体的内部指令,包括:
70.步骤s31、根据所述第一地址生成所述第一循环体的内部指令;
71.步骤s32、在确定满足第二循环体开始的约束条件时,确定所述第二循环体的开始位置,并记录所述第二循环体的开始位置对应的第三地址;
72.步骤s33、根据所述第三地址生成所述第二循环体的内部指令;
73.步骤s34、在确定满足所述第二循环体结束的约束条件时,确定所述第二循环体的结束位置,并记录所述第二循环体的结束位置对应的第四地址;
74.步骤s35、根据所述第三地址和所述第四地址之间的距离,生成所述第二循环体的结束指令组。
75.其中,所述第二循环体的结束指令组属于所述第二循环体的内部指令。
76.如图3所示,验证程序生成器在gen_mode下正常生成普通随机指令并模拟随机指令的执行。当满足第一循环体(图3中所示的大循环体)开始的约束条件时,确定第一循环体的开始位置s0,并记录第一循环体的开始位置s0对应的第一地址,进入到cycle_mode,开始生成第一循环体的内部指令。
77.在生成嵌套循环体中第一循环体的过程中,如果遇到第二循环体(s1-e1)的生成需求,会先生成并完整执行第二循环体(图3中所示的第二循环体体),进而继续生成第一循环体(s0-e0)。具体的,如果在生成第一循环体的内部指令时,满足第二循环体开始的约束条件,则确定第二循环体的开始位置s1,并记录第二循环体的开始位置s1对应的第三地址,然后根据第三地址生成第二循环体的内部指令。如果满足第二循环体结束的约束条件,则确定第二循环体的结束位置e1,并记录第二循环体的结束位置e1对应的第四地址,根据第二循环体的第三地址与第四地址之间的距离,生成第二循环体的结束指令组。需要说明的是,第二循环体的结束指令组的生成过程,与前述单层循环体的结束指令组的生成过程相同,本发明实施例在此不做进一步赘述。
78.可选地,生成所述循环体的结束指令组之后,进入循环体的内部指令模拟执行模式(iss_mode),在所述循环体的内部指令模拟执行模式下,所述循环体的内部指令不允许被更改。
79.在嵌套循环体中,包含一个第一循环体和至少一个第二循环体,第二循环体为第一循环体的内部指令。当第一循环体中的一个第二循环体构建完成之后,会进入iss_mode,对已经生成的第二循环体进行模拟执行。在iss_mode下,不涉及新指令的生成,第二循环体已被确定,因此不可在第二循环体的内部插入或者删除任何一条指令,也不可以对第二循环体的任意一条内部指令进行修改。第二循环体的被执行次数由第二循环体对应的bn指令的第二操作数或be指令的第三操作数的初始值确定。
80.当第二循环体执行结束之后,恢复到cycle_mode,继续顺序生成第一循环体的内部指令,并等待下一个第二循环体开始的约束条件的满足时刻。因此,在一个第一循环体中,包含至少一个第二循环体,针对每一个第二循环体,均按照单层循环体的生成过程进行循环体构建。
81.如果满足第一循环体结束的约束条件,则确定第一循环体的结束位置e0,并记录第一循环体的结束位置e0对应的第二地址。然后,根据第一循环体的开始位置s0对应的第一地址与结束位置e0对应的第二地址之间的距离,生成第一循环体的结束指令组。同样地,如果第一地址与第二地址之间的距离小于或等于预设阈值,则将非零取指指令bn作为第一循环体的结束指令;如果第一地址与第二地址之间的距离大于预设阈值,则将等零取指指令be和直接取指指令j作为第一循环体的结束指令组。第一循环体的结束指令组的具体生成过程可以参照前述步骤s11至s18所述的单层循环体的结束指令组的生成过程,本发明实施例在此不做进一步赘述。
82.第一循环体构建完成之后,进入iss_mode,对已经生成的第一循环体进行模拟执行。同样地,在iss_mode下,不可在第一循环体的内部插入或者删除任何一条指令,也不可以对第一循环体的任意一条内部指令进行修改。第一循环体的被执行次数由第一循环体对应的bn指令的第二操作数或be指令的第三操作数的初始值确定。
83.当第一循环体执行结束之后,跳出第一循环体,恢复到gen_mode,继续顺序生成随机指令验证程序中的普通随机指令,等待下一个大循环开始的约束条件的满足时刻。可以理解的是,上述嵌套循环体包含两层循环,其中,所述第一循环体为第一层循环,所述第二循环体为第二层循环。同理,本发明实施例提供的生成随机指令验证程序的方法,同样适用于超过两层的嵌套循环体的实现,在此不再赘述。此外,一个随机指令验证程序中可以包含多个嵌套循环体,每一个嵌套循环体均按照上述过程进行循环体构建和模拟执行。
84.需要说明的是,随机指令可以分为store指令和非store指令,其中,store指令用于存数据到内存中;非store指令用于对寄存器进行操作,例如load指令,用于从内存中读取数据写入寄存器中。在循环体执行过程中,store指令的执行结果被更新到内存中,非store指令的执行结果被更新到目标寄存器中,导致寄存器内的值被不断改变。非store指令的执行结果与其对应的源寄存器中的源操作数有关,源操作数不同,其执行结果就可能与之前的结果不同。例如,在一个循环体内部,包含指令add1和指令add2,指令add1和指令add2均为非store指令。其中,指令add1对应的目标寄存器为1号寄存器,源寄存器为2号寄存器。在第一次循环过程中,指令add1先于指令add2被执行,指令add2的执行结果被写入2
号寄存器中,这就导致在第二次循环过程中,指令add1的源寄存器(2号寄存器)内的源操作数与第一次循环时的源操作数不同,导致指令add1的执行结果可能会发生变化,也即指令add1的目标寄存器(1号寄存器)内的数据发生变化。寄存器之间的这种相关性,导致在循环执行过程中,寄存器内部的数据不断被改变,且这种变化无法预测,不可控制。
85.本发明实施例生成的循环体的内部指令中,可能包含访存指令,由于在循环体的执行过程中,寄存器内的数据不断被改变,因此循环体内部的访存指令的目标访存地址很难被控制在有效范围内,容易出现目标访存地址非法的现象,例如,访存指令的目标访存地址超出循环体的地址范围,目标访存地址不满足地址对齐要求,以及/或者目标访存地址对应的访存属性不满足访存指令的访存需求,等等。为了解决循环体执行过程中,访存指令的目标访存地址非法的问题,本发明实施例将上述情况当作例外处理。
86.可选地,所述实施例的方法还包括:执行所述循环体的各条内部指令;在确定满足例外触发条件的情况下,触发例外机制进行例外处理。其中,所述例外触发条件包括以下至少一项:当前执行的指令为访存指令,且所述访存指令的目标访存地址不属于所述循环体的第一地址和第二地址所限定的地址范围;所述访存指令对应的源寄存器和目标寄存器内的数据值之间的大小关系不满足预设要求;所述访存指令的目标访存地址不满足地址对齐要求;所述访存指令的目标访存地址对应的访存属性不满足所述访存指令的访存需求。
87.需要说明的是,程序运行过程中,通常基于例外机制处理发生的异常事件,例如,除0溢出、数组越界、和/或文件找不到等异常事件。在程序运行过程中,如果发生了例外,则可以生成一个代表该例外的对象,该对象包含了该例外的详细信息;然后,把这个对象交给运行时系统,运行时系统寻找相应的代码来处理这一例外。
88.在本发明实施例中,将循环体执行过程中,可能造成访存指令的目标访存地址非法的各种情况作为例外进行处理,以避免在微处理器的验证过程中,因访存指令的目标访存地址非法导致微处理器验证失败,保证了微处理器的验证成功率,有利于提升微处理器的验证效率。
89.其中,访存指令对应的源寄存器和目标寄存器内的数据值之间的大小关系不满足预设要求,该预设要求是根据访存指令的特性要求确定的,如果访存指令对应的源寄存器和目标寄存器内的数据值之间的大小关系不满足预设要求,就会导致访存指令的目标访存地址非法。访存指令的目标访存地址对应的访存属性是否满足所述访存指令的访存需求,需要根据访存指令的指令类型和目标访存地址对应的访存属性确定。按照指令类型划分,访存指令可以分为只读指令、只写指令、以及既读又写指令;目标访存地址对应的访存属性可以分为:可读、可写、以及可读可写。如果访存指令的指令类型与目标访存地址对应的访存属性不匹配,则可以确定访存指令的目标访存地址对应的访存属性不满足该访存指令的访存需求。例如,对于只写指令,如果目标访存地址对应的访存属性为可写或可读可写,则该访存指令的指令类型与目标访存地址对应的访存属性相匹配;如果目标访存地址对应的访存属性为可读,则该访存指令的指令类型与目标访存地址对应的访存属性不匹配。
90.此外,本发明实施例生成的循环体的内部指令中,还可能包含条件取指指令。条件取指指令的条件满足情况与其用到的源操作数有关,源操作数不同,条件取指指令的条件满足情况就可能会发生变化,导致程序走向另外一个分支。例如,条件取指指令的目标取指地址中未写入指令,就会导致程序直接退出循环体的执行过程;或者,条件取指指令的目标
取指地址中已被写入其他指令,程序按照正常的取指流程进行处理,但是取出的指令在循环体中的位置不可控,就有可能导致“死循环”,即循环体无法正常执行和退出。
91.为了保证循环体执行过程中条件取指指令的正常执行,本发明实施例通过特殊处理模式(return_mode)控制循环体中条件取指指令的生成和执行过程。具体地,在循环体的生成过程中,将条件取指指令没有被选择的分支的取指地址空间段保留下来,不被其他指令占用,只作为该条件取指指令的取指地址。示例性地,所述循环体的内部指令包含条件取指指令,步骤102所述生成所述循环体的内部指令,包括:
92.步骤s41、确定所述条件取指指令的预测取指地址,其中,所述预测取指地址包括所述条件取指指令满足取指条件时的取指地址和不满足取指条件时的取指地址;
93.步骤s42、根据条件取指指令的取指条件确定所述条件取指指令的目标取指地址;
94.步骤s43、根据所述预测取指地址和所述目标取指地址确定所述条件取指指令对应的预留地址空间段,所述预留地址空间段为所述条件取指指令的预测取指地址中除所述目标取指地址之外的取指地址所属的地址空间段;
95.步骤s44、将所述预留地址空间段的约束信息设定为不允许被所述循环体中除所述条件取指指令之外的其他指令占用。
96.需要说明的是,对于条件取指指令,可以通过分支预测器猜测其对应的预测取指地址。条件取指指令的预测取指地址包括该条件取指指令满足取指条件时的取指地址,和不满足取指条件时的取指地址。条件取指指令的取指条件可以根据条件取指指令的操作码和/或操作数确定,用于指示条件取指指令产生跳转的条件。在执行条件取指指令时,如果满足取指条件,则产生跳转,前往指令自身携带的地址中取指并执行,如果不满足取指条件,则顺序执行条件取指指令的下一条取指地址。
97.条件取指指令的目标取指地址,为执行条件取指指令时该条件取指指令的实际取指地址。例如,在循环体执行过程中,如果确定该条件取指指令满足取指条件,则该条件取指指令的目标取指地址为预测取指地址中满足取指条件时的取指地址;如果确定该条件取指指令不满足取指条件,则该条件取指指令的目标取指地址为预测取指地址中不满足取指条件时的取指地址,也即条件取指指令的下一条指令的地址。
98.在本发明实施例中,如图2所示,在循环体的生成过程(cycle_mode)中,如果当前待生成的指令为条件取指指令,则进入特殊处理模式(return_mode),将条件取指指令的预测取指地址中,除目标取指地址之外的取指地址所属的地址空间段作为预留地址空间段进行保留,并将该预留地址空间段的约束信息设定为不允许被循环体中的其他指令占用。
99.需要说明的是,如果条件取指指令为单层循环体的内部指令,如图2所示,条件取指指令(b)的预留地址空间段(resrvespace),不允许单层循环体内的其余指令放入,只允许在循环体执行过程中,b指令的取指行为发生改变的时候填充指令。具体的,当循环体生成完成后,接下来执行循环体内部的指令比如b指令,会被重复多次执行,因此,由于如上所述的寄存器内的值被不断改变,有较大概率b指令的取指行为会与之前被执行时不同,此时待执行的下一条指令的地址就会落在“reservespace”内。在此之前,需要保证“reservespace”内部并没有存储指令,如果“reservespace”内部存储有其他指令,则程序执行失控,有极大的可能陷入死循环,无法正常跳出循环体。因此,在本发明实施例中,只允许在b指令被重复执行的过程中,由于b指令的取指行为改变而去占用“reservespace”空
间,不允许“reservespace”被循环体内部的其他指令占用。
100.如果条件取指指令为嵌套循环体的内部指令,则该条件取指指令的预留地址空间段“reservespace”的约束信息为不允许被嵌套循环体的大循环中的其他指令(包括第一循环体中的所有第二循环体的内部指令)占用。
101.可选地,所述方法还包括:
102.步骤s51、执行所述循环体的各条内部指令;
103.步骤s52、若当前执行的指令为条件取指指令,且所述条件取指指令的目标取指地址属于所述条件取指指令的预留地址空间段,则结束所述循环体的执行过程,继续顺序生成所述随机验证程序中的非循环体指令。
104.如图2所示,在执行循环体的各条内部指令的过程中,如果当前执行的指令为条件取指指令时,进入return_mode,若该条件取指指令的目标取指地址属于该条件取指指令的预留地址空间段,则结束该循环体的执行过程,继续顺序生成随机验证程序中的非循环体指令,也即恢复gen_mode,继续生成普通随机指令。
105.作为一种示例,该条件取指指令为单层循环体的内部指令,如图2所示,进入return_mode,如果该条件取指指令的目标取指地址落在“reservespace”内,则按照轨迹n,直接跳出单层循环体,进入gen_mode。
106.作为另一种示例,该条件取指指令为嵌套循环体的内部指令。如图3所示,条件取指指令b1为嵌套循环体中第二循环体(s1-e1)的内部指令,如果b1的目标取指地址落在其预留地址空间段内,则按照轨迹n,直接跳出第一循环体,进入gen_mode。需要说明的是,跳出第一循环体,结束第一循环体的生成,也意味着结束第一循环体中所有第二循环体的生成。如果条件取指指令为嵌套循环体中第一循环体的内部指令,且目标取指地址落在其预留地址空间段内,也可以直接结束该第一循环体的生成过程,进入gen_mode。
107.可选地,所述条件取指指令的预留地址空间段中的末尾地址中存储的指令为直接取指指令,所述直接取指指令的取指地址中未存储指令,所述结束所述循环体的执行过程,继续顺序生成所述随机验证程序中的非循环体指令,包括:执行所述直接取指指令,以进入普通随机指令生成模式,继续顺序生成所述随机验证程序中的非循环体指令。
108.在本发明实施例中,所述预留地址空间段是包含条件取指指令的预测取指地址中除目标取指地址之外的取指地址对应的空间段。假设条件取指指令的预测取指地址包括nextpc和targetpc,其中,targetpc为所述条件取指指令的目标取指地址,则所述条件取指指令的预测地址空间段为nextpc对应的空间段。示例性地,所述预测地址空间段的起始地址为nextpc,所述预测地址空间段的长度可以根据实际需求进行设置。
109.在循环体执行过程中,由于寄存器内的值不断被改变,条件取指指令的条件满足情况可能会发生变化,导致程序走向另外一个未知分支。为了解决这一问题,本发明实施例可以通过条件取指指令的预留地址空间段内存储的指令进行约束,使得条件取指指令的目标取指地址落入所述预留地址空间段内时,直接退出循环,避免程序走向未知的分支。具体地,在所述条件取指指令的预留地址空间段的末尾地址中存储直接取指指令,也即所述预留地址空间段中存储的最后一条指令为直接取指指令,并限定该直接取指指令的取指地址中未存储指令。当待执行的随机指令为循环体内部的条件取指指令,且所述条件取指指令的目标取指地址属于所述条件取指指令的预留地址空间段时,基于上述针对预留地址空间
段的约束信息,程序在预留地址空间段中执行的最后一条指令为所述预留地址空间段的末尾地址中存储的直接取指指令,由于所述直接取指指令的目标取指地址中没有存储指令,因此程序会直接跳出循环体,进入普通随机指令生成模式,继续生成随机指令验证程序中的非循环体指令。
110.在本发明的一种可选实施例中,所述条件取指指令为单层循环体中的指令,所述方法还包括:若所述条件取指指令的目标取指地址属于所述条件取指指令的预留地址空间段,则获取所述单层循环体中所述条件取指指令的下一条指令并执行。
111.如果条件取指指令为单层循环体的内部指令,且目标取指地址落在其预留地址空间段内,除了结束循环体的生成,进入gen_mode,还可以获取单层循环体内该条件取指指令的下一条指令并执行。如图2所示,地址1(pc1)中存储的b指令的目标取指地址落在“reservespace”内,可以按照轨迹m,执行其下一条指令,也即地址2(pc2)中存储的b指令;如果pc2中存储的b指令的目标取指地址也落在其对应的“reservespace”内,可以按照轨迹m,继续执行下一条指令,也即图2中的bn指令或be指令,通过继续执行循环体中的下一条指令,以避免程序走向未知的分支,保证循环体的正常执行,从而保障随机指令验证程序的执行成功率,提升验证效率。
112.可选地,所述条件取指指令的预留地址空间段中的末尾地址中存储的指令为直接取指指令,所述直接取指指令包含第四操作数,所述第四操作数根据所述条件取指指令的预测取指地址中除目标取指地址之外的取指地址确定;所述获取所述单层循环体中所述条件取指指令的下一条指令并执行,包括:执行所述直接取指指令,以根据所述第四操作数获取所述条件取指指令的预测取指地址中除目标取指地址之外的取指地址中存储的指令并执行。
113.在本发明实施例中,可以在循环体生成过程中,约束条件取指指令的预留地址空间段内的最后一条指令,也即限定所述预留地址空间段的末尾地址中存储的指令为直接取指指令,并根据条件取指指令的预测取指地址中除目标取指地址之外的取指地址,确定该直接取指指令的第四操作数,从而在循环体执行过程中,根据所述直接取指指令的第四操作数获取条件取指指令的预测地址中除目标取指地址之外的取指地址中存储的指令并执行。
114.假设条件取指指令的预测取指地址,包括满足取指条件时的取指地址a1,和不满足取指条件时的取指地址a2,在第一次执行循环体的过程中,该条件取指指令的目标取指地址为取指地址a1,则其预留地址空间段为取指地址a2对应的地址空间段。在第二次执行循环体的过程中,该条件取指指令的目标取指地址为取指地址a2,落在其预留地址空间段内,通过执行预留地址空间段内的直接取指指令,执行取指地址a2中存储的指令,使得程序的运行方向回到取指地址a2对应的分支,从而避免了程序执行失控,有利于提升程序的执行成功率,从而提升微处理器的验证效率。
115.在本发明的一种可选实施例中,所述条件取指指令为嵌套循环体中的指令,所述方法还包括:
116.步骤s61、若所述条件取指指令的目标取指地址属于所述条件取指指令的预留地址空间段,则判断所述条件取指指令所属的循环体;
117.步骤s62、若所述条件取指指令为第一循环体中的指令,且不属于所述第一循环体
中的任一第二循环体,则获取所述第一循环体中所述条件取指指令的下一条指令并执行。
118.在本发明实施例中,如果条件取指指令为嵌套循环体的内部指令,且目标取指地址落在其预留地址空间段内,可以根据条件取指指令所属的循环体,选择不同的处理方式。
119.作为一种示例,如果条件取指指令为嵌套循环体的第一循环体中的指令,且不属于第一循环体中的任何一个第二循环体,则可以直接获取该第一循环体中的下一条指令并执行。
120.作为另一种示例,若所述条件取指指令为第二循环体中的指令,则获取所述第二循环体中所述条件取指指令的下一条指令并执行;或者,结束所述第二循环体的执行过程,并继续顺序执行所述第一循环体中的指令。
121.本发明实施例通过在执行第二循环体中的条件取指指令时,控制程序继续执行第一循环体或第二循环体中指令,以避免程序走向未知的分支,保证了循环体的正常执行,有利于提升随机指令验证程序的执行成功率,提升验证效率。
122.如图3所示,条件取指指令b2为第二循环体(s1-e1)的内部指令,且目标取指地址落在其预留地址空间段内,则可以按照轨迹m,获取第二循环体中的下一条指令并执行。或者,也可以如图3中条件取指指令b0所示,按照轨迹p,结束该第二循环体(s1-e1)的执行过程,继续顺序执行第一循环体(s0-e0)中的指令。
123.作为又一种示例,若所述条件取指指令为第二循环体中的指令,则从所述第一循环体中确定一个目标第二循环体,所述目标第二循环体为所述第一循环体内除所述条件取指指令所属的第二循环体之外的其他第二循环体;在所述目标第二循环体中随机确定一个目标位置,并记录所述目标位置对应的目标地址;获取所述目标地址中存储的指令并执行。
124.在本发明实施例中,如果条件取指指令为嵌套循环体中第二循环体的内部指令,且目标取指地址落在其预留地址空间段内,还可以从第一循环体中确定一个目标第二循环体,在目标第二循环体中随机确定一个目标位置,并记录该目标位置对应的目标地址,获取目标地址中存储的指令并执行。如图3所示,条件取指指令b0为第二循环体(s1-e1)的内部指令,且目标取指地址落在其预留地址空间段内,则可以按照轨迹o,跳出第二循环体(s1-e1),执行目标第二循环体(s2-e2)中目标位置对应的目标地址中存储的指令,以避免程序走向未知的分支。
125.可选地,所述条件取指指令的预留地址空间段中的末尾地址中存储的指令为直接取指指令,所述直接取指指令包含第五操作数,所述第五操作数根据所述目标地址确定,所述获取所述目标地址中存储的指令并执行,包括:执行所述直接取指指令,以根据所述第五操作数获取所述目标地址中存储的指令并执行。
126.在本发明实施例中,在循环体生成过程中,确定目标循环体中目标位置之后,可以根据目标位置对应的目标地址确定条件取指指令的预留地址空间段的末尾地址中存储的直接取指指令的第五操作数,从而在执行过程中,通过执行该直接取指指令,根据其第五操作数获取目标地址中存储的指令并执行。
127.需要说明的是,所述目标第二循环体对应的第一位置区间在所述条件取指指令所在的第二循环体对应的第二位置区间之后,所述第一位置区间和所述第二位置区间均属于所述第一循环体的开始位置与结束位置之间的位置区间。
128.示例性地,第一循环体包括多个第二循环体,分别记为:loop1、loop2、loop3、
loop4、loop5。第二循环体生成的先后顺序为loop1-》loop2-》loop3-》loop4-》loop5。假设条件取指指令b为第二循环体loop2的内部指令,则目标第二循环体需要从loop3、loop4和loop5中选择,否则容易出现“死循环”,引起程序执行失控。
129.综上,本发明实施例提供了一种生成随机指令验证程序的方法,该方法能够根据循环体开始的约束条件和结束的约束条件,自动确定循环体的开始位置和结束位置,并能够根据循环体的开始位置对应的第一地址与循环体的结束位置对应的第二地址之间的距离,选择相应的结束指令组,以保证循环体能够被正常执行。本发明实施例提高了随机指令验证程序的生成效率,有利于提升微处理器的验证效率,提升了微处理器功能验证的充分性,加快了功能验证覆盖率的收敛速度。
130.需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
131.装置实施例
132.参照图4,示出了本发明的一种生成随机指令验证程序的装置实施例的结构框图,所述随机指令验证程序用于对微处理器进行随机验证,所述随机指令验证程序包含循环体,所述装置具体可以包括:
133.开始位置确定模块401,用于在确定满足循环体开始的约束条件时,确定循环体的开始位置,并记录所述循环体的开始位置对应的第一地址;
134.第一指令生成模块402,用于根据所述循环体的开始位置对应的第一地址,生成所述循环体的内部指令;
135.结束位置确定模块403,用于在确定满足所述循环体结束的约束条件时,确定所述循环体的结束位置,并记录所述循环体的结束位置对应的第二地址;
136.第二指令生成模块404,用于根据所述第一地址与所述第二地址之间的距离,生成所述循环体的结束指令组,其中,所述结束指令组属于所述循环体的内部指令。
137.可选地,所述循环体的内部指令包含条件取指指令,所述第一指令生成模块,包括:
138.预测取指地址确定子模块,用于确定所述条件取指指令的预测取指地址;所述预测取指地址包括所述条件取指指令满足取指条件时的取指地址和不满足取指条件时的取指地址;
139.目标取指地址确定子模块,用于根据条件取指指令的取指条件确定所述条件取指指令的目标取指地址;
140.预留地址空间段确定子模块,用于根据所述预测取指地址和所述目标取指地址确定所述条件取指指令对应的预留地址空间段,所述预留地址空间段为所述条件取指指令的预测取指地址中除所述目标取指地址之外的取指地址所属的地址空间段;
141.约束信息设定子模块,用于将所述预留地址空间段的约束信息设定为不允许被所述循环体中除所述条件取指指令之外的其他指令占用。
142.可选地,所述循环体包括单层循环体,所述第二指令生成模块,包括:
143.第一指令生成子模块,用于若所述第一地址和所述第二地址之间的距离小于或等于预设阈值,则生成非零取指指令;所述非零取指指令包含第一操作数,所述第一操作数的初始值大于0,每执行一次所述非零取指指令,所述第一操作数减1;所述非零取指指令满足取指条件时的取指地址为所述第一地址,所述非零取指指令不满足取指条件时的取指地址为所述第二地址;
144.所述装置还包括:
145.第一指令执行子模块,用于执行所述非零取指指令,以根据所述第一操作数确定所述非零取指指令的目标取指地址;
146.第一取指地址确定子模块,用于若所述第一操作数不等于0,则确定所述非零取指指令的目标取指地址为所述第一地址,获取所述第一地址中存储的指令并执行;
147.第二取指地址确定子模块,用于若所述第一操作数等于0,则确定所述非零取值指令的目标取指地址为所述第二地址,获取所述第二地址中存储的指令并执行。
148.可选地,所述第二指令生成模块还包括:
149.第二指令生成子模块,用于若所述第一地址和所述第二地址之间的距离大于预设阈值,则生成等零取指指令和直接取指指令;所述等零取指指令包含第二操作数,所述第二操作数的初始值大于0,每执行一次所述等零取指指令,所述第二操作数减1;所述直接取指指令包含第三操作数,所述第三操作数根据所述第一地址确定;所述等零取指指令的存储地址与所述直接取指指令的存储地址连续相邻,且所述等零取指指令的存储地址在所述直接取指指令的存储地址之前;所述等零取指指令满足取指条件时的取指地址为所述第二地址,所述等零取指指令不满足取指条件时的取指地址为所述直接取指指令的存储地址;
150.所述装置还包括:
151.第二指令执行子模块,用于执行所述等零取指指令,以根据所述第二操作数确定所述等零取指指令的目标取指地址;
152.第三取指地址确定子模块,用于若所述第二操作数不等于0,则确定所述等零取指指令的目标取指地址为所述直接取指指令的存储地址,获取所述直接取指指令并执行;
153.第四取指地址确定子模块,用于若所述第二操作数等于0,则确定所述等零取指指令的目标取指地址为所述第二地址,获取所述第二地址中存储的指令并执行。
154.可选地,所述循环体包括嵌套循环体,所述嵌套循环体包括第一循环体和第二循环体,所述第二循环体为单层循环体;
155.所述第一循环体的开始位置对应第一地址,所述第一循环体的结束位置对应第二地址,所述第一指令生成模块,包括:
156.第一内部指令生成子模块,用于根据所述第一地址生成所述第一循环体的内部指令;
157.开始位置确定子模块,用于在确定满足第二循环体开始的约束条件时,确定所述第二循环体的开始位置,并记录所述第二循环体的开始位置对应的第三地址;
158.第二内部指令生成子模块,用于根据所述第三地址生成所述第二循环体的内部指令;
159.结束位置确定子模块,用于在确定满足所述第二循环体结束的约束条件时,确定所述第二循环体的结束位置,并记录所述第二循环体的结束位置对应的第四地址;
160.结束指令组生成子模块,用于根据所述第三地址和所述第五四地址之间的距离,生成所述第二循环体的结束指令组;其中,所述第二循环体的结束指令组属于所述第二循环体的内部指令。
161.可选地,所述装置还包括:
162.循环体执行模块,用于执行所述循环体的各条内部指令;
163.第一条件判断模块,用于若当前执行的指令为条件取指指令,且所述条件取指指令的目标取指地址属于所述条件取指指令的预留地址空间段,则结束所述循环体的执行过程,继续顺序生成所述随机验证程序中的非循环体指令。
164.可选地,所述条件取指指令的预留地址空间段中的末尾地址中存储的指令为直接取指指令,所述直接取指指令的取指地址中未存储指令,所述第一条件判断模块,包括:
165.第一指令执行子模块,用于执行所述直接取指指令,以进入普通随机指令生成模式,继续顺序生成所述随机验证程序中的非循环体指令。
166.可选地,所述装置还包括:
167.验证程序确定模块,用于根据所述循环体的各条内部指令和所述非循环体指令,得到随机指令验证程序。
168.可选地,所述条件取指指令为单层循环体中的指令,所述装置还包括:
169.第二条件判断模块,用于若所述条件取指指令的目标取指地址属于所述条件取指指令的预留地址空间段,则获取所述单层循环体中所述条件取指指令的下一条指令并执行。
170.可选地,所述条件取指指令的预留地址空间段中的末尾地址中存储的指令为直接取指指令,所述直接取指指令包含第四操作数,所述第四操作数根据所述条件取指指令的预测取指地址中除目标取指地址之外的取指地址确定;所述第二条件判断模块,包括:
171.第二指令执行子模块,用于执行所述直接取指指令,以根据所述第四操作数获取所述条件取值指令的预测取指地址中除目标取指地址之外的取指地址中存储的指令并执行。
172.可选地,所述条件取指指令为嵌套循环体中的指令,所述装置还包括:
173.第三条件判断模块,用于若所述条件取指指令的目标取指地址属于所述条件取指指令的预留地址空间段,则判断所述条件取指指令所属的循环体;
174.第四条件判断模块,用于若所述条件取指指令为第一循环体中的指令,且不属于所述第一循环体中的任一第二循环体,则获取所述第一循环体中所述条件取指指令的下一条指令并执行。
175.可选地,所述装置还包括:
176.第五条件判断模块,用于若所述条件取指指令为第二循环体中的指令,则获取所述第二循环体中所述条件取指指令的下一条指令并执行;或者,结束所述第二循环体的执行过程,并继续顺序执行所述第一循环体中的指令。
177.可选地,所述装置还包括:
178.第六条件判断模块,用于若所述条件取指指令为第二循环体中的指令,则从所述第一循环体中确定一个目标第二循环体,所述目标第二循环体为所述第一循环体内除所述条件取指指令所属的第二循环体之外的其他第二循环体;
179.目标位置确定模块,用于在所述目标第二循环体中随机确定一个目标位置,并记录所述目标位置对应的目标地址;
180.目标指令执行模块,用于获取所述目标地址中存储的指令并执行。
181.可选地,所述条件取指指令的预留地址空间段中的末尾地址中存储的指令为直接取指指令,所述直接取指指令包含第五操作数,所述第五操作数根据所述目标地址确定,所述目标指令执行模块,包括:
182.第三指令执行子模块,用于执行所述直接取指指令,以根据所述第五操作数获取所述目标地址中存储的指令并执行。
183.可选地,所述目标第二循环体对应的第一位置区间在所述条件取指指令所述的第二循环体对应的第二位置区间之后,所述第一位置区间和所述第二位置区间均属于所述第一循环体的开始位置与结束位置之间的位置区间。
184.可选地,所述装置还包括:
185.内部指令模拟执行模块,用于生成所述循环体的结束指令组之后,进入循环体的内部指令模拟执行模式;在所述循环体的内部指令模拟执行模式下,所述循环体的内部指令不允许被更改。
186.可选地,所述装置还包括:
187.循环体执行模块,用于执行所述循环体的各条内部指令;
188.例外触发模块,用于在确定满足例外触发条件的情况下,触发例外机制进行例外处理;所述例外触发条件包括以下至少一项:当前执行的指令为访存指令,且所述访存指令的目标访存地址不属于所述循环体的第一地址和第二地址所限定的地址范围;所述访存指令对应的源寄存器和目标寄存器内的数据值之间的大小关系不满足预设要求;所述访存指令的访存地址不满足地址对齐要求;所述访存指令的目标访存地址对应的访存属性不满足所述访存指令的访存需求。
189.综上,本发明实施例提供了一种生成随机指令验证程序的装置,该装置能够根据循环体开始的约束条件、结束的约束条件,自动确定循环体的开始位置、结束位置,并能够根据循环体的开始位置对应的第一地址,与循环体的结束位置对应的第二地址之间的距离选择相应的结束指令组,以保证循环体能够被正常执行。本发明实施例提高了随机指令验证程序的生成效率,有利于提升微处理器的验证效率。
190.对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
191.本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
192.关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
193.参照图5,是本发明实施例提供的电子设备的结构示意图。如图5所示,所述电子设备包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行前述实施例的生成随机指令验证程序方法。
194.本发明实施例提供了一种非临时性计算机可读存储介质,当所述存储介质中的指
令由终端的程序或处理器执行时,使得终端能够执行前述实施例的生成随机指令验证程序方法。
195.本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
196.本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
197.本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
198.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以预测方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
199.这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
200.尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
201.最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
202.以上对本发明所提供的一种生成随机指令验证程序方法和装置、电子设备以及一种存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1