随机测试程序生成方法及装置与流程

文档序号:11828838阅读:215来源:国知局
随机测试程序生成方法及装置与流程

本发明实施例涉及处理器指令级功能验证,尤其涉及一种随机测试程序生成方法及装置。



背景技术:

随机测试程序生成是一种处理器指令级功能验证方法。一个处理器在功能上为程序员提供了一系列指令以及相关的逻辑寄存器和内存虚地址空间。处理器执行一条指令实现一个特定的功能,例如:读取两个寄存器的数据相加后写入某个寄存器、将内存某个地址的数据拷贝到某个寄存器或将一个寄存器的数据拷贝到内存某个地址等。为了保证处理器设计的正确性,需要对设计的功能进行验证。通过随机测试程序生成方法随机产生一段指令序列,即一个程序,然后在处理器上进行仿真,执行该段指令序列并检查执行结果是否正确。

随机测试程序生成与执行实际程序的不同之处在于,执行实际程序之前,所有指令和初始数据都已经存放在内存中,而随机生成程序时,内存最初为空,指令和数据随着指令的生成不断添加到内存中,因此随机测试程序生成需要考虑如何合理使用内存空间,保证新生成的指令不会覆盖已存在的指令和数据,以及新写入内存的数据不会覆盖已存在的指令。其中,有两类指令需要特别关注:一种是跳转指令,即可能改变下一条指令默认地址的指令;默认情况下,一条指令的下一条指令紧邻其后;一种是访存指令,即可能从内存读数据或向内存写数据的指令。内存空间都是以字节为单位编址,第一个字节的地址为0,第二个字节的地址为1,如此排列。指令和数据的大小都是字节的整数倍,并且一个处理器的所有指令的大小都是一样的,指令地址则是该指令第一个字节的地址。但是一个访存指令所访问的数据的大小可以不定,访存地址则是所访问数据的第一个字节的地址。

现有的随机测试程序生成方法,在生成每条指令之前,如果检查到当前 指令地址已经存放了指令或数据,则终止指令生成,然而此时,在内存中可能仍有剩余的空闲空间,因而,造成现有技术无法充分利用内存空间。



技术实现要素:

本发明实施例提供一种随机测试程序生成方法及装置,以解决现有技术无法充分利用内存空间的问题。

第一方面,本发明实施例提供一种随机测试程序生成方法,其中,所述方法包括:

若确定起始于随机测试程序的当前指令地址的第一空闲块的大小小于阈值,则生成以所述当前指令地址为起始地址的重定向指令段;

通过所述重定向指令段将所述当前指令地址重定向为重定向地址;

以所述重定向地址为起始地址生成所述当前指令。

根据第一方面,在第一方面的第一种可能的实现方式中,所述重定向地址不同于所述当前指令地址且未存放指令和数据,且起始于所述重定向地址的第二空闲块的大小不小于所述阈值;所述重定向指令段包含n条指令,所述阈值为n+1条指令所占用的内存空间的大小;所述第一空闲块和所述第二空闲块分别指未存放指令和数据的最大连续内存空间。

根据第一方面或者第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,若所述随机测试程序中将要生成的指令为跳转指令,则所述生成所述随机测试程序具体包括:

确定所述跳转指令的跳转地址;其中,所述跳转地址不同于所述当前指令地址且未存放指令和数据,且起始于所述跳转地址的第三空闲块的大小不小于所述阈值;所述第三空闲块指未存放指令和数据的最大连续内存空间。

根据第一方面或者第一方面的第一种可能的实现方式,在第一方面的第三种可能的实现方式中,若所述随机测试程序中将要生成的指令为访存指令,则所述生成所述随机测试程序具体包括:

确定所述访存指令的访存地址;其中,所述访存地址不能位于第四空闲块中;所述第四空闲块起始于所述当前指令地址,且所述第四空闲块的大小等于所述阈值;所述第四空闲块指未存放指令和数据的最大连续内存空间。

根据第一方面或者第一方面的第一种可能的实现方式,在第一方面的第 四种可能的实现方式中,所述重定向指令段包括:第一指令和第二指令;其中,所述第一指令用于确定所述重定向指令段的重定向地址;所述第二指令用于跳转至所述重定向地址。

第二方面,本发明实施例提供一种随机测试程序生成装置,其中,所述装置包括:

确定模块,用于确定起始于随机测试程序的当前指令地址的第一空闲块的大小是否小于阈值;

生成模块,用于若所述确定模块确定起始于随机测试程序的当前指令地址的第一空闲块的大小小于阈值,则生成以所述当前指令地址为起始地址的重定向指令段;

重定向模块,用于通过所述重定向指令段将所述当前指令地址重定向为重定向地址;

所述生成模块,还用于以所述重定向地址为起始地址生成所述当前指令。

根据第二方面,在第二方面的第一种可能的实现方式中,所述重定向地址不同于所述当前指令地址且未存放指令和数据,且起始于所述重定向地址的第二空闲块的大小不小于所述阈值;所述重定向指令段包含n条指令,所述阈值为n+1条指令所占用的内存空间的大小;所述第一空闲块和所述第二空闲块分别指未存放指令和数据的最大连续内存空间。

根据第二方面或者第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述生成模块具体用于;

若所述随机测试程序中将要生成的指令为跳转指令,则确定所述跳转指令的跳转地址;其中,所述跳转地址不同于所述当前指令地址且未存放指令和数据,且起始于所述跳转地址的第三空闲块的大小不小于所述阈值;所述第三空闲块指未存放指令和数据的最大连续内存空间。

根据第二方面或者第二方面的第一种可能的实现方式,在第二方面的第三种可能的实现方式中,所述生成模块具体用于;

若所述随机测试程序中将要生成的指令为访存指令,则确定所述访存指令的访存地址;其中,所述访存地址不能位于第四空闲块中;所述第四空闲块起始于所述当前指令地址,且所述第四空闲块的大小等于所述阈值;所述第四空闲块指未存放指令和数据的最大连续内存空间。

根据第二方面或者第二方面的第一种可能的实现方式,在第二方面的第四种可能的实现方式中,所述重定向指令段包括:第一指令和第二指令;其中,所述第一指令用于确定所述重定向指令段的重定向地址;所述第二指令用于跳转至所述重定向地址。

本发明实施例提供的随机测试程序生成方法及装置,在生成随机测试程序之前,首先检查起始于当前指令地址的第一空闲块的大小,若确定所述第一空闲块的大小小于阈值,则生成以当前指令地址为起始地址的重定向指令段;通过重定向指令段将随机测试程序的当前指令地址重定向为重定向地址,起始于重定向地址的第二空闲块的大小不小于所述阈值;由于第二空闲块能够容纳更多的指令,既可以保证生成的指令序列的长度,又充分利用了内存空间,解决了现有技术无法充分利用内存空间的问题。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的随机测试程序生成方法的流程图;

图2为现有技术中随机测试程序生成方法的示例图;

图3为本发明实施例中随机测试程序生成方法的示例图;

图4为现有技术中随机测试程序生成方法的另一示例图;

图5为本发明实施例中随机测试程序生成方法的另一示例图;

图6为本发明实施例提供的随机测试程序生成装置的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例提供的随机测试程序生成方法的流程图。所述方法的执行主体为随机测试程序生成装置,所述随机测试程序生成装置例如可以是处理器。如图1所示,本发明实施例提供的随机测试程序生成方法,包括:

101、若确定起始于随机测试程序的当前指令地址的第一空闲块的大小小于阈值,则生成以所述当前指令地址为起始地址的重定向指令段。

本发明实施例中提及的随机测试程序,可以是现有技术中处理器在功能上为程序员提供的任意指令,例如可以为跳转指令、访存指令等。所述当前指令地址为随机测试程序中将要生成的指令的地址;所述第一空闲块指内存中未存放指令和数据的最大连续内存空间。所述重定向指令段包含n条指令,所述阈值为n+1条指令所占用的内存空间的大小。

102、通过所述重定向指令段将所述当前指令地址重定向为重定向地址。

所述重定向地址不同于所述当前指令地址且未存放指令和数据,且起始于所述重定向地址的第二空闲块的大小不小于所述阈值。所述第二空闲块指未存放指令和数据的最大连续内存空间。一旦执行重定向指令段就能跳转到重定向地址,将随机测试程序的当前指令地址重定向为该重定向地址。需要说明的是,在执行本发明实施例的技术方案过程中,若无法找到满足条件的重定向地址时,则无法生成重定向指令段,终止指令生成。

103、以所述重定向地址为起始地址生成所述当前指令。

本发明实施例在生成随机测试程序时,首先检查起始于当前指令地址的第一空闲块的大小,若确定所述第一空闲块的大小小于阈值,则认为所述第一空闲块的大小有限,其所能存储的指令和数据也有限;此时,选择一个重定向地址,其中,重定向地址要求满足:1)未存放指令和数据;2)不同于当前指令地址;3)起始于重定向地址的第二空闲块的大小不小于所述阈值;生成以当前指令地址为起始地址的重定向指令段;通过重定向指令段将随机测试程序的当前指令地址重定向为重定向地址;生成当前指令。需要说明的是,生成当前指令的过程可以包括:确定存放指令的地址、生成指令、存放指令;其中,确定存放指令的地址是很关键的一个环节,在本发明实施例中,起始于重定向地址的第二空闲块的大小不小于所述阈值,与第一空闲块相比,可以认为第二空闲块为较大的空闲块,显然,第二空闲块能够容纳更多的指令,既可以保证生成的指令序列的长度,又充分利用了内存空间,解决了现 有技术无法充分利用内存空间的问题。

下面结合具体的示例对本发明实施例提供的技术方案进行示例说明:

示例一,

图2为现有技术中随机测试程序生成方法的示例图。图3为本发明实施例中随机测试程序生成方法的示例图。图2示出了现有技术中随机测试程序生成的一个示例,数字表示指令序号,如图2所示,在该示例中,指令3为一个跳转指令,用于跳转至指令1前部;然后从跳转地址起继续生成指令4、指令5、指令6、指令7、指令8、指令9,在生成指令9之后,检查到当前指令地址没有空闲空间可继续用于指令生成,因而终止指令生成,然而此时,至少在图2中指令3之后仍有剩余的空闲空间,从而图2示出的现有技术存在无法充分利用内存空间的问题。

针对图2示出的现有技术的问题,图3示出了本发明实施例中随机测试程序生成的一个示例,数字表示指令序号,如图3所示,在该示例中,指令3同样为一个跳转指令,指令3同样跳转至指令1前部;然后从跳转地址起继续生成指令4、指令5、指令6,与图2不同的是,图3示出的方案在生成指令6之后,在生成指令7之前,若确定紧邻指令6之后的空闲块的大小小于阈值(也即仅能容纳一个重定向指令段),则生成重定向指令段,重定向地址为紧邻指令3的下一地址,通过重定向指令段将指令7的起始地址重定向为重定向地址(即紧邻指令3的地址),并跳转至指令3后部,紧邻指令3生成指令7,并依次继续生成指令8、指令9;在指令9之后,可以继续进行指令生成,相比于图2,图3示出的方案能够生成的指令序列的长度更长,同时也充分利用了内存空间,克服了图2中存在的无法充分利用内存空间的问题。

示例二,

图4为现有技术中随机测试程序生成方法的另一示例图。图5为本发明实施例中随机测试程序生成方法的另一示例图。图4示出了现有技术中随机测试程序生成的另一个示例,数字表示指令序号,如图4所示,在该示例中,指令3为一个访存指令,在其后部写入了一个数据;紧邻指令3生成了指令4、指令5、指令6,在生成指令6之后,检查到当前指令地址没有空闲的内存空间可继续用于指令生成,因而终止指令生成,然而此时,至少在图4中 数据之后仍有剩余的空闲空间,从而图4示出的现有技术存在无法充分利用内存空间的问题。

针对图4示出的现有技术的问题,图5示出了本发明实施例中随机测试程序生成的另一个示例,数字表示指令序号,如图5所示,在该示例中,指令3同样为一个访存指令,并在其后部写入了一个数据;与图4不同的是,图5示出的方案在生成指令3之后,在生成指令4之前,若确定紧邻指令3之后的空闲块的大小小于阈值(也即仅能容纳一个重定向指令段),则生成重定向指令段,重定向地址为紧邻指令3写入数据的存放地址的下一地址,通过重定向指令段将指令4的起始地址重定向为重定向地址(即紧邻指令3写入数据的存放地址的下一地址),并跳转至指令3写入的数据的后部,紧邻指令3写入数据的存放地址生成指令4,并依次生成指令5、指令6;在指令6之后,可以继续进行指令生成,相比于图4,图5示出的方案能够生成的指令序列的长度更长,同时也充分利用了内存空间,克服了图4中存在的无法充分利用内存空间的问题。

在本发明的一实施例中,重定向指令段可以是一个指令序列,至少包括:第一指令和第二指令;其中,第一指令用于确定重定向指令段的重定向地址;第二指令为跳转指令,用于跳转至重定向地址。

具体地,第一指令用于确定重定向指令段的重定向地址,保证在第二指令的跳转地址的可选择范围中可以找到满足条件的重定向地址,即所述重定向地址不同于所述当前指令地址且未存放指令和数据,且起始于所述重定向地址的第二空闲块的大小不小于所述阈值。需要说明的是,在一个重定向指令段中,跳转指令一般位于指令序列的尾部。例如,在MIPS64处理器中的一个实际的重定向指令段为:

LUI $X,A

ORI $X,$X,B

DSLL $X,$X,16

ORI $X,$X,C

DSLL $X,$X,16

ORI $X,$X,D

JR $X

NOP

执行该重定向指令段可以跳转至64位地址ABCD,其中A、B、C和D均为16位任意二进制数。前6条指令用于将ABCD存入通用寄存器堆中寄存器号为X的寄存器,后两条指令用于跳转至该寄存器所存放的地址。

在本发明的一实施例中,若所述随机测试程序中将要生成的指令为跳转指令,则在确定该跳转指令的跳转地址时,要求跳转地址满足:1)跳转地址不同于当前指令地址且未存放指令和数据;2)起始于跳转地址的第三空闲块的大小不小于所述阈值。所述第三空闲块指内存中未存放指令和数据的最大连续内存空间。

具体地,在当前将要生成的随机测试程序的指令类型为跳转指令的场景中,现有技术对于跳转指令的跳转地址的要求是:不同于当前指令地址且未存放任何的指令和数据。不同于现有技术,本发明实施例对跳转指令的跳转地址做了简单的控制,除了要求跳转地址不同于当前指令地址且未存放任何的指令和数据,还要求起始于跳转地址的第三空闲块的大小不小于所述阈值;这样要求的目的在于,保证跳转指令改变当前指令地址后,起始于新的当前指令地址的空闲块足够大,可容纳一个重定向指令段,随着指令的逐个生成,可用的空闲块随之变小,当空闲块的剩余部分仅能容纳一个重定向指令段时,及时生成重定向指令段,并跳转到较大的空闲块,该较大的空闲块能够容纳更多的指令,既可以保证生成的指令序列的长度,又充分利用了内存中的空闲空间,解决了现有技术无法充分利用内存空间的问题。

在本发明的一实施例中,若所述随机测试程序中将要生成的指令为访存指令,则在确定该访存指令的访存地址时,要求访存地址满足;所述访存地址不能位于第四空闲块中;所述第四空闲块起始于所述当前指令地址,且所述第四空闲块的大小等于所述阈值。所述第四空闲块指内存中未存放指令和数据的最大连续内存空间。

具体地,在当前将要生成的随机测试程序的指令类型为访存指令的场景中,现有技术对于访存指令的访存地址并无特别要求。不同于现有技术,本发明实施例对访存指令的访存地址做了简单的控制,要求:访存地址不能位于紧邻当前随机测试程序之后且容纳一个重定向指令段的第四空闲块中。这样要求的目的在于:如果该随机测试程序的当前指令地址与访存地址之间的 空闲块太小而无法容纳一个重定向指令段,那么由于该空闲块所能容纳的指令和数据有限,随着指令的继续生成,该空闲块中很快就会没有空闲的内存空间可继续用于指令生成,也没有空闲空间可生成重定向指令段,然而同时,在内存中可能仍有剩余的空闲空间,因而,造成未能充分利用内存中的空闲空间,也限制了生成的指令序列的长度;鉴于此,本发明实施例中要求访存地址不能位于紧邻当前随机测试程序之后且容纳一个重定向指令段的第四空闲块中;随着指令的逐个生成,可用的空闲块也随之变小,当空闲块的剩余部分仅能容纳一个重定向指令段时,可及时生成重定向指令段,并跳转到内存中其他较大的空闲块,该较大的空闲块能够容纳更多的指令,既可以保证生成的指令序列的长度,又充分利用了内存空间,解决了现有技术无法充分利用内存空间的问题。

图6为本发明实施例提供的随机测试程序生成装置的结构示意图。如图6所示,本发明实施例提供的随机测试程序生成装置600,包括:

确定模块601,用于确定起始于随机测试程序的当前指令地址的第一空闲块的大小是否小于阈值;

生成模块602,用于若所述确定模块601确定起始于随机测试程序的当前指令地址的第一空闲块的大小小于阈值,则生成以所述当前指令地址为起始地址的重定向指令段;

重定向模块603,用于通过所述重定向指令段将所述当前指令地址重定向为重定向地址;

所述生成模块602,还用于以所述重定向地址为起始地址生成所述当前指令。

可选的,所述重定向地址不同于所述当前指令地址且未存放指令和数据,且起始于所述重定向地址的第二空闲块的大小不小于所述阈值;所述重定向指令段包含n条指令,所述阈值为n+1条指令所占用的内存空间的大小;所述第一空闲块和所述第二空闲块分别指未存放指令和数据的最大连续内存空间。

本发明实施例在生成随机测试程序之前,首先检查起始于当前指令地址的第一空闲块的大小,若确定所述第一空闲块的大小小于阈值,则生成以当前指令地址为起始地址的重定向指令段;通过重定向指令段将随机测试程序 的当前指令地址重定向为重定向地址,起始于重定向地址的第二空闲块的大小不小于所述阈值;由于第二空闲块能够容纳更多的指令,既可以保证生成的指令序列的长度,又充分利用了内存空间,解决了现有技术无法充分利用内存空间的问题。

在上述实施例的基础上,在本发明的一实施例中,所述生成模块602具体用于若所述随机测试程序中将要生成的指令为跳转指令,则确定所述跳转指令的跳转地址;其中,所述跳转地址不同于所述当前指令地址且未存放指令和数据,且起始于所述跳转地址的第三空闲块的大小不小于所述阈值;所述第三空闲块指未存放指令和数据的最大连续内存空间。

在当前将要生成的随机测试程序的指令类型为跳转指令的场景中,现有技术对于跳转指令的跳转地址的要求是:不同于当前指令地址且未存放任何的指令和数据。不同于现有技术,本发明实施例对跳转指令的跳转地址做了简单的控制,除了要求跳转地址不同于当前指令地址且未存放任何的指令和数据,还要求起始于跳转地址的第三空闲块的大小不小于所述阈值;这样要求的目的在于,保证跳转指令改变当前指令地址后,起始于新的当前指令地址的空闲块足够大,可容纳一个重定向指令段,随着指令的逐个生成,可用的空闲块随之变小,当空闲块的剩余部分仅能容纳一个重定向指令段时,及时生成重定向指令段,并跳转到较大的空闲块,该较大的空闲块能够容纳更多的指令,既可以保证生成的指令序列的长度,又充分利用了内存中的空闲空间,解决了现有技术无法充分利用内存空间的问题。

在本发明的一实施例中,所述生成模块602具体用于若所述随机测试程序中将要生成的指令为访存指令,则确定所述访存指令的访存地址;其中,所述访存地址不能位于第四空闲块中;所述第四空闲块起始于所述当前指令地址,且所述第四空闲块的大小等于所述阈值;所述第四空闲块指未存放指令和数据的最大连续内存空间。

在当前将要生成的随机测试程序的指令类型为访存指令的场景中,现有技术对于访存指令的访存地址并无特别要求。不同于现有技术,本发明实施例对访存指令的访存地址做了简单的控制,要求:访存地址不能位于紧邻当前随机测试程序之后且容纳一个重定向指令段的第四空闲块中。这样要求的目的在于:如果该随机测试程序的当前指令地址与访存地址之间的空闲块太 小而无法容纳一个重定向指令段,那么由于该空闲块所能容纳的指令和数据有限,随着指令的继续生成,该空闲块中很快就会没有空闲的内存空间可继续用于指令生成,也没有空闲空间可生成重定向指令段,然而同时,在内存中可能仍有剩余的空闲空间,因而,造成未能充分利用内存中的空闲空间,也限制了生成的指令序列的长度;鉴于此,本发明实施例中要求访存地址不能位于紧邻当前随机测试程序之后且容纳一个重定向指令段的第四空闲块中;随着指令的逐个生成,可用的空闲块也随之变小,当空闲块的剩余部分仅能容纳一个重定向指令段时,可及时生成重定向指令段,并跳转到内存中其他较大的空闲块,该较大的空闲块能够容纳更多的指令,既可以保证生成的指令序列的长度,又充分利用了内存空间,解决了现有技术无法充分利用内存空间的问题。

在本发明的一实施例中,所述重定向指令段包括:第一指令和第二指令;其中,所述第一指令用于确定所述重定向指令段的重定向地址;所述第二指令用于跳转至所述重定向地址。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1