一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种CPU验证中随机向量的生成方法、装置以及电子设备与流程

2022-07-16 13:57:47 来源:中国专利 TAG:

一种cpu验证中随机向量的生成方法、装置以及电子设备
技术领域
1.本发明涉及功能验证技术领域,特别涉及一种cpu验证中随机向量的生成方法及装置以及电子设备。


背景技术:

2.随着集成电路的工艺变得更加先进,设计规模和复杂度的提升,使得功能验证成为数字芯片设计中的巨大瓶颈。
3.目前的验证手段主要分为定向验证和随机验证。
4.定向验证是验证人员根据特定的测试场景来开发测试向量,然后测试场景毕竟有限,难以覆盖各种复杂场景。随机验证可以很大程度上解决这个问题。
5.随机验证的特点在于:一方面可以快速生成大量的随机测试向量,减少时间成本和人力成本;另一方面由于激励是随机产生的,其组合方式更为多样,会产生很多意想不到的结果,很有可能会发现到无法预料的bug(问题点)。
6.cpu作为设计最为复杂度的芯片,对于验证工作更是一个巨大的挑战,因此,随机验证在cpu验证中具有不可或缺的重要地位和作用。基于此,有必要提供一种简单、通用并且高效的随机向量生成方法。
7.现有技术的技术方案:
8.验证case(测试用例)分为定向case和随机case,定向case为验证人员手写完成,用于验证特定功能点,随机case目前验证中均用到了system verilog(一种语言)中的约束语法完成。
9.现有技术的缺点:
10.随机case目前验证中均用到了system verilog中的约束语法完成,随着约束的增加,很难辨别出变量可能的存在值,从而不利于验证过程的规模扩大化,逻辑复杂化且通用性不好。


技术实现要素:

11.发明所要解决的问题
12.本发明的主要目的是提供一种cpu验证中随机向量的生成方法及装置,以解决现有技术中所存在的不利于验证过程的规模扩大化,逻辑复杂化且通用性不好等问题。
13.用于解决问题的方案
14.为了达到上述目的,本发明提供一种cpu验证中随机向量的生成方法,包括如下步骤:
15.步骤s1:书写随机指令序列文件,其中,具有书写格式和语义格式;
16.步骤s2:进行测试用例生成器处理,此工具由计算机汇编语言打造,用于根据既定语义进行解析,产生具体随机指令;
17.步骤s3:进行汇编文件,输出的随机指令序列文件为汇编文件,一旦生成汇编文
件,便根据需要进行仿真验证。
18.优选地,所述步骤s1具体包括如下步骤:
19.步骤s11:创建并打开空白文件;
20.步骤s12:完成预定义类型的定义;
21.步骤s13:使用已定义的变量以及直接应用型编写代码;
22.步骤s14:进行文件保存。
23.优选地,所述步骤s2具体包括如下步骤:
24.步骤s21:测试用例生成器工具处理所述文件;
25.步骤s22:指定输出汇编文件的个数。
26.优选地,所述步骤s3具体包括如下步骤:
27.步骤s31:处理完毕后便产生所要求数量的已随机完毕的汇编文件;
28.步骤s32:具体的文件尾缀从0开始,一直增加到所需数字减去1为止。
29.优选地,所述步骤s1中的语义格式分为两种类型:预定义型和直接应用型。
30.优选地,所述预定义型包括若干子类型。
31.优选地,所述直接应用型包括若干子类型。
32.为了达到上述目的,本发明提供一种cpu验证中随机向量的生成装置,包括:
33.书写随机指令序列文件模块,其用于书写随机指令序列,具有书写格式和语义格式;
34.测试用例生成器处理模块,其用于进行测试用例生成器处理,此工具由计算机汇编语言打造,用于根据既定语义进行解析,产生具体随机指令;
35.汇编文件模块,其进行汇编文件,其中,输出的随机指令序列文件为汇编文件,一旦生成汇编文件,便可根据需要进行仿真验证。
36.为了达到上述目的,本发明提供一种电子设备,所述电子设备存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述方法的步骤。
37.为了达到上述目的,本发明提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述方法的步骤。
38.发明的效果
39.与现有技术相比,本发明具有如下有益效果:
40.本发明专门针对于随机测试,特对现有的随机验证方法的缺陷提出来一种简单、直观、能用于大规模、高复杂度、同时对架构等没有特定要求的高效验证方法。
41.本发明可以针对任意架构的指令进行随机,具备通用性,约束条件直观,仅需提供特定格式的随机指令文件,由generator(生成器)进行解析便可生成任意场景的随机指令。
附图说明
42.图1是本发明的一种cpu验证中随机向量的生成方法的流程图;
43.图2是本发明的一种cpu验证中随机向量的生成装置的框图;
44.图3是本技术实施例提供的一种电子设备的结构示意图;
45.图4是本技术实施例提供的一种用于实现随机向量的生成方法的程序产品的结构
示意图。
具体实施方式
46.下面将结合本发明实施例中的图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。并且,在此处需要进一步强调的是,以下的具体实施例提供的优选的技术方案,各方案(实施例)之间是可以相互配合或结合使用的。
47.如图1所示,为一种cpu验证中随机向量的生成方法流程图,本发明的cpu验证中随机向量的生成方法包括如下步骤:
48.步骤s1:书写随机指令序列ris(ris为随机指令序列的简称)文件(file),其中,具有书写格式和语义格式,其书写格式在后述进行描述,同时该语义格式也是最为核心的约束表现方法。
49.该步骤s1具体包括如下步骤:
50.步骤s11:创建并打开空白文件;
51.步骤s12:完成预定义类型的定义,具体的预定义类型在后述进行说明;
52.步骤s13:使用已定义的变量以及直接应用型编写代码;
53.步骤s14:进行文件保存。
54.步骤s2:进行generator(测试用例生成器)处理,此工具由计算机汇编语言(python)打造,用于根据既定语义进行解析,产生具体随机指令;
55.该步骤s2具体包括如下步骤:
56.步骤s21:测试用例生成器工具处理上述步骤s1编写的文件;
57.步骤s22:指定输出汇编文件的个数,如10,100,1000,10000等任意数字。
58.步骤s3:进行汇编文件(asm文件):输出的随机指令序列文件,为汇编文件,一旦生成汇编文件,便可根据需要进行仿真验证。
59.该步骤s3具体包括如下步骤:
60.步骤s31:处理完毕后便产生所要求数量的已随机完毕的汇编文件;
61.步骤s32:具体的文件尾缀从0开始,一直增加到所需数字减去1为止。
62.以下,就上述步骤中随机指令序列文件(ris file)的语义格式和语义解析工具generator对其的特定处理相结合予以详细描述。
63.步骤s1中的语义格式分为两种类型:预定义型和直接应用型,每种类型下面又分了若干子类型。
64.首先对预定义型进行详细描述,预定义型的特点:先定义后应用
65.1.1`预定义set(集合)
66.1.1.1define rdm_set xxx(xxx表示任何名字,使用者自定):在xxx中预先定义所有可能存在的备选项,随机时会选出任意一个结果
67.实现方法为:
68.通过python编写的generator进行解析,每次遇到$xxx时,从备选项中用random(随机)函数随机出来的结果作为index(索引值)选出对应的数值。
69.定义示例:
70.`define rdm_set odd_reg
71.item:[x1,x3,x5,x7,x9,x11,x13,x15,x17,x19,x21,x23,x25,x27,x29,x31]
[0072]
`enddef
[0073]
应用示例:
[0074]
li$odd_reg,0x10
[0075]
则$odd_reg随机出的结果有可能为集合内的任意值,比如最终结果为li x9,0x10
[0076]
`define rdmc_set xxx:rdmc的含义为random cycle by cycle(一圈又一圈),强调的是出现的顺序。在同一圈未随机完之前不可能出现重复值;
[0077]
实现方法:
[0078]
通过python编写的generator进行解析,每次遇到$xxx时,从备选项中用random函数随机出来一个数值,且确认是否在本轮中还未出现过,如果满足要求则返回;否则继续随机,直到满足要求。
[0079]
定义示例:
[0080]
`define rdmc_set odd_reg
[0081]
item:[x1,x3,x5,x7,x9,x11,x13,x15,x17,x19,x21,x23,x25,x27,x29,x31]
[0082]
`enddef
[0083]
应用示例:
[0084]
li$odd_reg,0x10
[0085]
li$odd_reg,0x18
[0086]
则表示在$odd_reg集合内的数值未随机完之前,上述两指令在同一圈内的$odd_reg不可能相同,比如在同一圈有可能为li x9,0x10和li x11,0x18,但是不可能为li x9,0x10和li x9,0x18。
[0087]
1.2.预定义unique set(排他、只有一次的集合):unique的含义为在每次进入宏内数字一旦随机出来,就不再变化,强调的是随机数字在根部macro(宏)所控制的范围内的稳定性,需要用在宏(显示宏和隐式宏{})中。
[0088]
1.2.1.`define rdm_unique xxx:
[0089]
实现方法:
[0090]
通过python编写的generator进行解析,每次遇到$xxx时,会直接标记为根部macro(宏)(根部macro含义为程序中首次进入的macro,其可以继续嵌套各级macro,像树形结构,所以称为根部macro)中存在unique变量,然后随机出来任意备选项,当在所属的根部macro层级及其之下的所以层级再次遇到$xxx时,就把刚才随机出来的值进行直接替换,直到跳出此根部macro。
[0091]
定义示例:
[0092]
`define rdm_unique odd_reg_unique
[0093]
item:[x1,x3,x5,x7,x9,x11,x13,x15,x17,x19,x21,x23,x25,x27,x29,x31]
[0094]
`enddef
[0095]
`define macro macro_ld_sd
[0096]
ld$odd_reg_unique,0x0(0x10)
[0097]
sd$odd_reg_unique,0x8(0x10)
[0098]
`enddef
[0099]
应用示例:
[0100]
$macro_ld_sd
[0101]
$macro_ld_sd
[0102]
则$macro_ld_sd首次随机出来的值可能是ld x9,0x0(0x10)及sd x9,0x8(0x10),但是不可能为ld x9,0x0(0x10)及sd x11,0x8(0x10),
[0103]
同样$macro_ld_sd第二次随机出来的值可能是ld x11,0x0(0x10)及sd x11,0x8(0x10),但是不可能为ld x9,0x0(0x10)及sd x11,0x8(0x10),
[0104]
1.2.2.`define rdmc_unique xxx:rdmc含义前文已表述,unique的含义也已表述,是两者的结合体
[0105]
实现方法:
[0106]
同1.2.1相似,只不过在随机数值时,要确认是否在本轮中还未出现过,如果满足要求则返回,否则继续随机,直到满足要求。
[0107]
定义示例:
[0108]
`define rdmc_unique odd_reg_unique
[0109]
item:[x1,x3,x5,x7,x9,x11,x13,x15,x17,x19,x21,x23,x25,x27,x29,x31]
[0110]
`enddef
[0111]
`define macro macro_ld_sd
[0112]
ld$odd_reg_unique,0x0(0x10)
[0113]
sd$odd_reg_unique,0x8(0x10)
[0114]
`enddef
[0115]
应用示例:
[0116]
$macro_ld_sd
[0117]
$macro_ld_sd
[0118]
则$macro_ld_sd首次随机出来的值可能是ld x9,0x0(0x10)及sd x9,0x8(0x10)
[0119]
同样$macro_ld_sd第二次随机出来的值不再可能是ld x9,0x0(0x10)及sd x9,0x8(0x10)
[0120]
1.3.预定义macro:预先定义指令顺序,可包含本文提及的任何语义,当然macro中也可以添加任意随机并可嵌套macro。
[0121]
1.3.1.`define macro(宏)xxx:
[0122]
实现方法:
[0123]
通过python编写的generator进行解析,每次遇到$xxx时,便去解析里面的语句,如果为set类型的就按照刚才提及的方法进行替换,如果也是macro,则进入macro,然后再去解析里面的语句,最后一级级的进入然后返回,则解析完毕。因此支持任意层级的宏嵌套。
[0124]
定义示例:
[0125]
`define macro macro_ld_sd
[0126]
ld x10,0x0(0x10)
[0127]
sd x10,0x8(0x10)
[0128]
`enddef
[0129]
应用示例:
[0130]
$macro_ld_sd
[0131]
则经generator处理,会得到ld x10,0x0(0x10)及sd x10,0x8(0x10),
[0132]
2.直接应用型:
[0133]
2.1.直接应用随机重复次数
[0134]
2.1.1.$rdm_repeat_x_y(repeat为重复的意思):用于对某一条指令或者某指令序列随机[x,y]闭区间的任意数值,包含x,y次
[0135]
实现方法:
[0136]
通过python编写的generator进行解析,每次遇到$xxx时,便在[x,y]中进行random操作即可,因此x,y即使数值范围巨大也能轻松获取数值,而不影响解析效率。后面的[x,y]中随机也是同一个方法,不再做特殊说明。
[0137]
示例:$rdm_repeat_1_3,经generator处理后,每次随机的结果均可能是1,2,3中的任意数值,
[0138]
2.1.2.$rdmc_repeat_x_y::同2.1.1的区别在于,在[x,y]区间随机的数字在未全部包含之前,不可能出现重复,即先随机第一圈,再随机第二圈,依次进行,同样强调了出现的顺序性。
[0139]
实现方法:
[0140]
同2.1.1相似,只不过在随机数值时,要确认是否在本轮中还未出现过,如果满足要求则返回,否则继续随机,直到满足要求。
[0141]
示例:$rdmc_repeat_1_3,经generator处理后,多次随机的结果均可能是1,3,2,3,而不可能是2,1,2,3
[0142]
2.2.直接应用随机十进制立即数
[0143]
2.2.1.$rdm_imm_dec_x_y(imm为立即数的意思,dec为十进制的意思)相关
[0144]
2.2.1.1.$rdm_imm_dec_x_y:随机[x,y]闭区间内的任意一个数,x,y为十进制格式
[0145]
实现方法:
[0146]
通过python编写的generator进行解析,每次遇到$xxx时,便在[x,y]中按照十进制进行random操作即可。
[0147]
示例:$rdm_imm_dec_1_3,经generator处理后,每次随机的结果均可能是1,2,3中的任意数值
[0148]
2.2.1.2.$rdm_imm_dec_x_y_not_a[_b[

]](not不是的意思):随机除了a,[b[

]]之外的[x,y]闭区间内的任意一个数。x,y,a为十进制格式,如果有_b,则也不可能出现b
[0149]
实现方法:
[0150]
同2.2.1.1相似,只不过在随机数值时,要确认非排除项,如果满足要求则返回,否则继续随机,直到满足要求。
[0151]
示例:$rdm_imm_dec_1_3_not_2,经generator处理后,每次随机的结果均可能是
1,3中的任意数值,但是肯定不可能是2;$rdm_imm_dec_1_3_not_2_3,经generator处理后,每次随机的结果则只可能是1
[0152]
2.2.1.3.$rdm_imm_dec_x_y_tail_z:(tail:尾巴的意思)随机[x,y]闭区间内的任意一个数,x,y为十进制格式,然后再在后面加z尾缀
[0153]
实现方法:
[0154]
同2.2.1.1相似,只不过在随机数值时,要在尾部加上尾缀即可。
[0155]
示例:$rdm_imm_dec_1_3_tail_00,经generator处理后,每次随机的结果均可能是100,200,300中的任意数值
[0156]
2.2.1.4.$rdm_imm_dec_x_y_not_a[_b[

]]_tail_z:随机除了a,[b[

]]之外的[x,y]闭区间内的任意一个数,x,y,a为十进制格式,如果有_b,则也不可能出现b,然后再对随机出来的数加尾缀z
[0157]
实现方法:
[0158]
同2.2.1.2,2.2.1.3相似,综合了两者的特点,既要确认为非排除项,又要添加尾缀。
[0159]
示例:$rdm_imm_dec_1_3_not_2_tail_00,经generator处理后,每次随机的结果均可能是100,300中的任意数值,但是不可能是200
[0160]
2.2.2.$rdmc_imm_dec_x_y相关
[0161]
2.2.2.1.$rdmc_imm_dec_x_y:按圈循环[x,y]闭区间内的十进制数字
[0162]
实现方法:
[0163]
同2.2.1.1相似,只不过在随机数值时,要确认是否在本轮中还未出现过,如果满足要求则返回,否则继续随机,直到满足要求。
[0164]
示例:$rdmc_imm_dec_1_3,经generator处理后,多次随机的结果均可能是1,3,2,3,而不可能是2,1,2,3
[0165]
2.2.2.2.$rdmc_imm_dec_x_y_not_a[_b[

]]:按圈循环除了a[,b[

]]等外的[x,y]闭区间内的十进制数字
[0166]
实现方法:
[0167]
同2.2.1.2相似,只不过在随机数值时,要确认是否在本轮中还未出现过,如果满足要求则返回,否则继续随机,直到满足要求。
[0168]
实现方法:
[0169]
同2.2.2.1.3.1.2,2.2.2.1.3.1.3相似,
[0170]
示例:$rdmc_imm_dec_1_3_not_2,经generator处理后,随机结果可能是1,3,3,但是不可能是1,1,3
[0171]
2.2.2.3.$rdmc_imm_dec_x_y_tail_z:按圈循环[x,y]闭区间内的十进制数字,然后再在后面加z尾缀
[0172]
实现方法:
[0173]
同2.2.1.3相似,只不过在随机数值时,要确认是否在本轮中还未出现过,如果满足要求则返回,否则继续随机,直到满足要求。
[0174]
示例:$rdmc_imm_dec_1_3_tail_00,经generator处理后,随机结果可能是100,300,200,但是不可能是100,100,200
[0175]
2.2.2.4.$rdmc_imm_dec_x_y_not_a[_b[

]]_tail_z:按圈循环除了a[,b[

]]等外的[x,y]闭区间内的十进制数字然后再对随机出来的数加尾缀z
[0176]
实现方法:
[0177]
同2.2.1.4相似,只不过在随机数值时,要确认是否在本轮中还未出现过,如果满足要求则返回,否则继续随机,直到满足要求。
[0178]
示例:$rdmc_imm_dec_1_3_not_2_tail_00,经generator处理后,随机结果可能是100,300,300,但是不可能是100,100,300
[0179]
2.3.直接应用unique十进制立即数,unique的描述同1.2.1中一致
[0180]
2.3.1.$rdm_unique_imm_dec_x_y相关
[0181]
2.3.1.1.$rdm_unique_imm_dec_x_y:除2.3对于unique的说明外,其它与2.2.1.1一致
[0182]
2.3.1.2.$rdm_unique_imm_dec_x_y_not_a[_b[

]]:除2.3对于unique的说明外,其它与2.2.1.2一致
[0183]
2.3.1.3.$rdm_unique_imm_dec_x_y_tail_z:除2.3对于unique的说明外,其它与2.2.1.3一致
[0184]
2.3.1.4.$rdm_unique_imm_dec_x_y_not_a[_b[

]]_tail_z:除2.3对于unique的说明外,其它与2.2.1.4一致
[0185]
2.3.2.$rdmc_unique_imm_dec_x_y相关
[0186]
2.3.2.1.$rdmc_unique_imm_dec_x_y:除2.3对于unique的说明外,其它与2.2.2.1一致
[0187]
2.3.2.2.$rdmc_unique_imm_dec_x_y_not_a[_b[

]]:除2.3对于unique的说明外,其它与2.2.2.2一致
[0188]
2.3.2.3.$rdmc_unique_imm_dec_x_y_tail_z:除2.3对于unique的说明外,其它与2.2.2.3一致
[0189]
2.3.2.4.$rdmc_unique_imm_dec_x_y_not_a[_b[

]]_tail_z:除2.3对于unique的说明外,其它与2.2.2.4一致
[0190]
2.4.直接应用随机十六进制立即数,同2.2相比,更换为十六进制,
[0191]
2.4.1.$rdm_imm_hex_x_y(hex:十六进制)相关
[0192]
2.4.1.1.$rdm_imm_hex_x_y:随机[x,y]闭区间内的任意一个数,x,y为十六进制格式
[0193]
实现方法:
[0194]
除了按照16进制进行解析外,同2.2.1.1一致。
[0195]
示例:$rdm_imm_hex_19_1b,经generator处理后,每次随机的结果均可能是19,1a,1b中的任意数值
[0196]
2.4.1.2.$rdm_imm_hex_x_y_not_a[_b[

]]:随机除了a之外的[x,y]闭区间内的任意一个数。x,y,a为十六进制格式,如果有_b,则也不可能出现b
[0197]
实现方法:
[0198]
除了按照16进制进行解析外,同2.2.1.2一致。
[0199]
示例:$rdm_imm_hex_19_1b_not_1a,经generator处理后,每次随机的结果均可能
是19,1b中的任意数值,但是肯定不可能是1a;$rdm_imm_hex_19_1b_not_1a_1b,经generator处理后,每次随机的结果则只可能是19
[0200]
2.4.1.3.$rdm_imm_hex_x_y_tail_z:随机[x,y]闭区间内的任意一个数,x,y为十六进制格式,然后再在后面加z尾缀
[0201]
实现方法:
[0202]
除了按照16进制进行解析外,同2.2.1.3一致。
[0203]
示例:$rdm_imm_hex_19_1b_tail_00,经generator处理后,每次随机的结果均可能是1900,1a00,1b00中的任意数值
[0204]
2.4.1.4.$rdm_imm_hex_x_y_not_a[_b[

]]_tail_z:随机除了a之外的[x,y]闭区间内的任意一个数,x,y,a为十六进制格式,如果有_b,则也不可能出现b,然后再对随机出来的数加尾缀z
[0205]
实现方法:
[0206]
除了按照16进制进行解析外,同2.2.1.4一致。
[0207]
示例:$rdm_imm_hex_19_1b_not_1a_tail_00,经generator处理后,每次随机的结果均可能是1900,1b00中的任意数值
[0208]
2.4.2.$rdmc_imm_hex_x_y相关
[0209]
2.4.2.1.$rdmc_imm_hex_x_y:按圈循环[x,y]闭区间内的十六进制数字实现方法:
[0210]
除了按照16进制进行解析外,同2.2.2.1一致。
[0211]
示例:$rdmc_imm_hex_19_1b,经generator处理后,多次随机的结果均可能是19,1b,1a,1b,而不可能是1a,19,1a,1b
[0212]
2.4.2.2.$rdmc_imm_hex_x_y_not_a[_b[

]]:按圈循环除了a[,b[

]]等外的[x,y]闭区间内的十六进制数字
[0213]
实现方法:
[0214]
除了按照16进制进行解析外,同2.2.2.2一致。
[0215]
示例:$rdmc_imm_hex_19_1b_not_1a,经generator处理后,随机结果可能是19,1b,1b,但是不可能是19,19,1b
[0216]
2.4.2.3.$rdmc_imm_hex_x_y_tail_z:按圈循环[x,y]闭区间内的十六进制数字,然后再在后面加z尾缀
[0217]
实现方法:
[0218]
除了按照16进制进行解析外,同2.2.2.3一致。
[0219]
示例:$rdmc_imm_hex_19_1b_tail_00,经generator处理后,随机结果可能是1900,1b00,1a00,但是不可能是1900,1900,1a00
[0220]
2.4.2.4.$rdmc_imm_hex_x_y_not_a[_b[

]]_tail_z:按圈循环除了a[,b[

]]等外的[x,y]闭区间内的十六进制数字然后再对随机出来的数加尾缀z
[0221]
实现方法:
[0222]
除了按照16进制进行解析外,同2.2.2.4一致。
[0223]
示例:$rdmc_imm_hex_19_1b_not_1a_tail_00,经generator处理后,随机结果可能是1900,1b00,1b00,但是不可能是1900,1900,1b00
[0224]
2.5.直接应用随机unique十六进制立即数,与2.3类似,只不过是十进制变为了十六进制。
[0225]
2.5.1.$rdm_unique_imm_hex_x_y相关
[0226]
2.5.1.1.$rdm_unique_imm_hex_x_y:除2.5十六进制的说明外,其它与2.4.1.1一致
[0227]
2.5.1.2.$rdm_unique_imm_hex_x_y_not_a[_b[

]]:除2.5对于十六进制的说明外,其它与2.4.1.2一致
[0228]
2.5.1.3.$rdm_unique_imm_hex_x_y_tail_z:除2.5对于十六进制的说明外,其它与2.4.1.3一致
[0229]
2.5.1.4.$rdm_unique_imm_hex_x_y_not_a[_b[

]]_tail_z:除2.5对于十六进制的说明外,其它与2.4.1.4一致
[0230]
2.5.2.$rdmc_unique_imm_hex_x_y相关
[0231]
2.5.2.1.$rdmc_unique_imm_hex_x_y:除2.5对于十六进制的说明外,其它与2.4.2.1一致
[0232]
2.5.2.2.$rdmc_unique_imm_hex_x_y_not_a[_b[

]]:除2.5对于十六进制的说明外,其它与2.4.2.2一致
[0233]
2.5.2.3.$rdmc_unique_imm_hex_x_y_tail_z:除2.5对于十六进制的说明外,其它与2.4.2.3一致
[0234]
2.5.2.4.$rdmc_unique_imm_hex_x_y_not_a[_b[

]]_tail_z:除2.5对于十六进制的说明外,其它与2.4.2.4一致
[0235]
2.6.隐式宏{}:同显示宏的使用方法相比,隐式宏可以直接使用,而无需预定义
[0236]
实现方法:
[0237]
通过python编写的generator进行解析,每次遇到隐式宏时,等值的根据所在的行号实例化一个显示宏,然后按照显示宏的方法处理即可。
[0238]
示例:
[0239][0240]
2.7.$label_$range_num_x_y:用于建立lable(标签)
[0241]
实现方法:
[0242]
通过python编写的generator进行解析,每次遇到label_$range_num_x_y时,则按照从x到y的顺序一次设置数值即可。
[0243]
示例:
[0244]
$rdm_repeat_3_3label_$range_num_1_3
[0245]
则会得到结果label_1;label_2and label_3
[0246]
如图2所示,本发明还提供一种cpu验证中随机向量的生成装置,该cpu验证中随机向量的生成装置1包括:
[0247]
书写随机指令序列文件模块11,其用于书写随机指令序列,具有书写格式和语义格式,其书写格式在后述进行描述,同时该语义格式也是最为核心的约束表现方法。
[0248]
书写随机指令序列文件模块11包括:创建并打开空白文件;完成预定义类型的定义,具体的预定义类型在后述进行说明;使用已定义的变量以及直接应用型编写代码;进行文件保存。
[0249]
测试用例生成器处理模块12,其用于进行generator(测试用例生成器)处理,此工具由计算机汇编语言(python)打造,用于根据既定语义进行解析,产生具体随机指令;
[0250]
测试用例生成器处理模块12具体包括:测试用例生成器工具处理上述步骤s1编写的文件;指定输出汇编文件的个数,如10,100,1000,10000等任意数字。
[0251]
汇编文件模块13,其进行汇编文件(asm文件):输出的随机指令序列文件,为汇编文件,一旦生成汇编文件,便可根据需要进行仿真验证。
[0252]
汇编文件模块13具体包括:处理完毕后便产生所要求数量的已随机完毕的汇编文件;具体的文件尾缀从0开始,一直增加到所需数字减去1为止。
[0253]
与现有技术相比,本发明技术方案带来的有益效果:
[0254]
通过定义的语法,可以看出,
[0255]
1.本方法不依赖于任何特定架构,即本方法适用包括riscv,x86,arm等任意架构。
[0256]
2.本方法语义明了,能够直接辨别出所有可能结果,相对于system verilog种的约束更加直观。
[0257]
3.本方法操作简单,高效实用,通过各种rdm(随机的)的组合,可以打造任意复杂指令(如异常处理,模式切换等)的指令流组合。
[0258]
4.对于同一个ris文件,通过多次调用generator,可生成多个case文件,用于验证工作
[0259]
参见图3,本技术实施例还提供了一种电子设备200,电子设备200包括至少一个存储器210、至少一个处理器220以及连接不同平台系统的总线230。
[0260]
存储器210可以包括易失性存储器形式的可读介质,例如随机存取存储器(ram)211和/或高速缓存存储器212,还可以进一步包括只读存储器(rom)213。
[0261]
其中,存储器210还存储有计算机程序,计算机程序可以被处理器220执行,使得处理器220执行本技术实施例中随机向量的生成方法的步骤,其具体实现方式与上述随机向量的生成方法的实施例中记载的实施方式、所达到的技术效果一致,部分内容不再赘述。
[0262]
存储器210还可以包括具有至少一个程序模块215的实用工具214,这样的程序模块215包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
[0263]
相应的,处理器220可以执行上述计算机程序,以及可以执行实用工具214。
[0264]
总线230可以为表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、图形加速端口、处理器或者使用多种总线结构中的任意总线结构的局域总线。
[0265]
电子设备200也可以与一个或多个外部设备240例如键盘、指向设备、蓝牙设备等通信,还可与一个或者多个能够与该电子设备200交互的设备通信,和/或与使得该电子设备200能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等)通
信。这种通信可以通过输入输出接口250进行。并且,电子设备200还可以通过网络适配器260与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。网络适配器260可以通过总线230与电子设备200的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备200使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储平台等。
[0266]
本技术实施例还提供了一种计算机可读存储介质,该计算机可读存储介质用于存储计算机程序,所述计算机程序被执行时实现本技术实施例中随机向量的生成方法的步骤,其具体实现方式与上述随机向量的生成方法的实施例中记载的实施方式、所达到的技术效果一致,部分内容不再赘述。
[0267]
图4示出了本实施例提供的用于实现上述随机向量的生成方法的程序产品300,其可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品300不限于此,在本技术中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。程序产品300可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
[0268]
计算机可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、rf等,或者上述的任意合适的组合。可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,程序设计语言包括面向对象的程序设计语言诸如java、c 等,还包括常规的过程式程序设计语言诸如c语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
[0269]
本技术从使用目的上,效能上,进步及新颖性等观点进行阐述,已符合专利法所强调的功能增进及使用要件,本技术以上的说明书及说明书附图,仅为本技术的较佳实施例而已,并非以此局限本技术,因此,凡一切与本技术构造,装置,特征等近似、雷同的,即凡依本技术专利申请范围所作的等同替换或修饰等,皆应属本技术的专利申请保护的范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献