用于验证的寄存器随机方法、系统、设备以及存储介质与流程

文档序号:29355029发布日期:2022-03-22 23:40阅读:173来源:国知局
用于验证的寄存器随机方法、系统、设备以及存储介质与流程

1.本公开的实施例涉及一种用于验证的寄存器随机方法、系统、设备以及存储介质。


背景技术:

2.随着集成电路产业的快速发展,芯片的复杂度大大增加,相应寄存器的数量随之日趋庞大,寄存器的属性也越来越复杂,验证寄存器的完备性和高效性,成为验证人员迫切需要解决的问题。寄存器的增加对约束算法和迭代速度也提出更高的要求,使用传统验证方法已无法满足迭代周期和芯片验证难度的要求,与此同时,采用传统的验证方法实现的约束越来越复杂,需要的算法资源也越来越多,但是由于资源有限,容易导致会出现长时间随机解答不出的情况。


技术实现要素:

3.本公开至少一实施例提供了一种用于验证的寄存器随机方法,包括:根据待验证设备建立多个寄存器模块,其中,所述多个寄存器模块中的每个包括一个或多个寄存器;设置所述多个寄存器模块中的每个的配置阶段;获取所述多个寄存器模块中的每个的配置阶段,得到配置阶段集合;串行地对所述配置阶段集合中至少一部分的配置阶段进行选择,分别随机所述至少一部分的配置阶段中的每个当前被选择的配置阶段对应的寄存器模块的寄存器。
4.例如,在本公开至少一实施例提供的一种寄存器随机方法中,设置所述多个寄存器模块中的每个的配置阶段,包括:在所述多个寄存器模块中的每个寄存器模块的每个当前寄存器的建立阶段,通过设置配置阶段变量记录所述当前寄存器的配置阶段,并且分别使同一所述寄存器模块中的每个寄存器具有相同的配置阶段。
5.例如,在本公开至少一实施例提供的一种寄存器随机方法中,获取所述多个寄存器模块中的每个的配置阶段,得到配置阶段集合,包括:通过设置静态关联数组记录所述多个寄存器模块中的每个的配置阶段;获取所述静态关联数组中被设置过的多个配置阶段,得到所述配置阶段集合。
6.例如,在本公开至少一实施例提供的一种寄存器随机方法中,所述至少一部分的配置阶段包括所述配置阶段集合中所有的配置阶段;或者,所述至少一部分的配置阶段包括:所述配置阶段集合中所有的配置阶段除去第一部分的配置阶段后剩余的第二部分的配置阶段,所述第一部分的配置阶段包括被配置为命令行输入模式或性能测试模式的至少一个第一寄存器模块对应的配置阶段。
7.例如,在本公开至少一实施例提供的一种寄存器随机方法中,所述配置阶段集合为根据所述多个配置阶段生成的数组队列。
8.例如,在本公开至少一实施例提供的一种寄存器随机方法中,响应于所述至少一部分的配置阶段包括所述配置阶段集合中所有的配置阶段,串行地对所述配置阶段集合中至少一部分的配置阶段进行选择,分别随机所述至少一部分的配置阶段中的每个当前被选
择的配置阶段对应的寄存器模块的寄存器,包括:根据所述数组队列的长度,依序并串行地选择所述数组队列中的每个配置阶段,并分别随机所述数组队列中的每个当前被选择的配置阶段对应的寄存器模块的每个寄存器。
9.例如,在本公开至少一实施例提供的一种寄存器随机方法中,响应于所述配置阶段集合包括所述第一部分的配置阶段,所述寄存器随机方法还包括:在串行地对所述第二部分的配置阶段进行选择且分别随机所述第二部分的配置阶段中的每个当前被选择的配置阶段对应的寄存器模块的寄存器之前,直接将所述至少一个第一寄存器模块中的每个第一寄存器模块的寄存器分别约束配置为固定值。
10.例如,在本公开至少一实施例提供的一种寄存器随机方法中,串行地对所述配置阶段集合中至少一部分的配置阶段进行选择,分别随机所述至少一部分的配置阶段中的每个当前被选择的配置阶段对应的寄存器模块的寄存器,包括:串行地对所述至少一部分的配置阶段进行选择;对于所述至少一部分的配置阶段中的每个当前被选择的配置阶段:将所述当前被选择的配置阶段通过递归方式传递至所述多个寄存器模块中的每个寄存器模块;比较所述当前被选择的配置阶段与所述多个寄存器模块中的每个寄存器模块对应的配置阶段;对所述多个寄存器模块中的具有与所述当前被选择的配置阶段一致的配置阶段的当前目标寄存器模块执行随机,以随机配置所述当前目标寄存器模块中的每个寄存器。
11.例如,在本公开至少一实施例提供的一种寄存器随机方法中,响应于所述当前目标寄存器模块包括多个寄存器,对所述当前目标寄存器模块执行随机以随机配置所述当前目标寄存器模块中的每个寄存器包括:并行地随机配置所述当前目标寄存器模块中多个寄存器中的每个寄存器。
12.例如,在本公开至少一实施例提供的一种寄存器随机方法中,所述多个寄存器模块中至少一个寄存器模块包括多个子寄存器模块,每个所述子寄存器模块包括多个寄存器。
13.例如,在本公开至少一实施例提供的一种寄存器随机方法中,响应于所述当前目标寄存器模块包括多个子寄存器模块,对所述当前目标寄存器模块执行随机以随机配置所述当前目标寄存器模块中的每个寄存器包括:对所述当前目标寄存器模块中的多个子寄存器模块进行并行地随机,以随机配置所述多个子寄存器模块中的每个子寄存器模块的每个寄存器。
14.例如,在本公开至少一实施例提供的一种寄存器随机方法中,响应于所述当前目标寄存器模块包括具有交叉约束的多个寄存器,对所述当前目标寄存器模块执行随机以随机配置所述当前目标寄存器模块中的每个寄存器包括:通过增加额外约束,控制所述当前目标寄存器模块中的所述具有交叉约束的多个寄存器按照所述额外约束进行随机配置。
15.本公开至少一实施例提供了一种验证方法,包括如上文任一实施例所述的寄存器随机方法。
16.本公开至少一实施例提供了一种用于验证的寄存器随机系统,包括:建立模块,被配置为根据待验证设备建立多个寄存器模块,其中,所述多个寄存器模块中的每个包括一个或多个寄存器;设置模块,被配置为设置所述多个寄存器模块中的每个的配置阶段;获取模块,被配置为获取所述多个寄存器模块中的每个的配置阶段以得到配置阶段集合;串行随机模块,被配置为串行地对所述配置阶段集合中至少一部分的配置阶段进行选择且分别
随机所述至少一部分的配置阶段中的每个当前被选择的配置阶段对应的寄存器模块的寄存器。
17.本公开至少一实施例提供了一种电子设备,包括:处理器和存储器,其中,所述存储器上存储有计算机程序,所述计算机程序被所述处理器执行时,实现如上文任一项所述的寄存器随机方法。
18.本公开至少一实施例提供了一种计算机可读存储介质,其中,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现如上述任一示例中所述的寄存器随机方法。
附图说明
19.为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
20.图1为本公开一些实施例提供的用于验证的寄存器随机方法的流程图;
21.图2为本公开一些实施例提供的图1中步骤s3的流程图;
22.图3为本公开一些实施例提供的图1中关于步骤s4的流程图;
23.图4为本公开另一些实施例提供的寄存器随机方法的流程图;
24.图5为本公开一些实施例提供的一种寄存器随机系统的框图;以及
25.图6为本公开一些实施例提供的一种电子设备的框图。
具体实施方式
26.下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
27.除非另有定义,本公开实施例使用的所有术语(包括技术和科学术语)具有与本公开所属领域的普通技术人员共同理解的相同含义。还应当理解,诸如在通常字典里定义的那些术语应当被解释为具有与它们在相关技术的上下文中的含义相一致的含义,而不应用理想化或极度形式化的意义来解释,除非本公开实施例明确地这样定义。
28.本公开实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。同样,“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。本公开实施例中使用了流程图用来说明根据本公开实施例的方法的步骤。应当理解的是,前面或后面的步骤不一定按照顺序来精确的进行。相反,可以按照倒序或同时处理各种步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步。
29.systemverilog简称为sv语言,建立在verilog语言的基础上,成为下一代硬件设计和验证的语言。systemverilog结合了来自verilog、vhdl、c++的概念,还有验证平台语言和断言语言,也就是说,它将硬件描述语言(hdl)与现代的高层级验证语言(hvl)结合了起来。目前,systemverilog主要定位在芯片的实现和验证流程上。systemverilog拥有芯片设计及验证工程师所需的全部结构,它集成了面向对象编程、动态线程和线程间通信等特性,作为一种工业标准语言,sv全面综合了rtl设计、测试平台、断言和覆盖率,为系统级的设计及验证提供强大的支持作用。
30.systemverilog除了作为一种高层次,能进行抽象建模的语言被应用外,它的另一个显著特点是能够和芯片验证方法学结合在一起,即作为实现方法学的一种语言工具。使用验证方法学可以大大增强模块复用性、提高芯片开发效率,缩短开发周期。可见,systemverilog语言包含了设计、验证、断言和其他方面的很多特性。
31.本公开的发明人发现,根据硬件设计中的寄存器定义情况,可以先根据实际硬件设计情况和寄存器的属性添加寄存器约束,然后在配置寄存器前调用随机函数(例如systemverilog的randomize函数),使得所有的约束随机配置(也可称随机求解)在仿真的同一时刻和同一阶段进行,从而实现寄存器的并行随机。但是该方法存在以下问题:(1)在寄存器的数量过大的情况下,求解效率会降低,不适用大量寄存器的随机和较复杂的项目;(2)采用并行随机会消耗大量的硬件资源和高配置的服务器来运行;(3)采用并行随机会对工具的算法提出更高的要求,而且随着寄存器的线性增加,随机配置的难度会指数倍复杂,很容易导致随机失败;(4)并行随机的可读性差,将所有的相关性和不相关的寄存器混合在一起;(5)由于大量寄存器的同时随机,若一旦随机失败,增加了排错的难度,而且由于大量寄存器的同时随机,无法快速定位到导致发生错误的寄存器;(6)可移植性差。
32.对此,本公开至少一实施例提供了一种用于验证的寄存器随机方法,包括:根据待验证设备建立多个寄存器模块,其中,多个寄存器模块中的每个包括一个或多个寄存器;设置多个寄存器模块中的每个的配置阶段;获取多个寄存器模块中的每个的配置阶段,得到配置阶段集合;串行地对配置阶段集合中至少一部分的配置阶段进行选择,分别随机该至少一部分的配置阶段中的每个当前被选择的配置阶段对应的寄存器模块的寄存器。
33.本公开上述实施例的寄存器随机方法通过引入有关寄存器的配置阶段的机制,从而实现串行随机,随机效率提升,可以节约硬件资源,解决了随机困难的问题,能够避免在随机过程中因硬件的限制而死机的问题。该寄存器随机方法能够更方便地区分寄存器的区别,调试更加容易,可移植性好,可适用所有的寄存器随机的应用场景,可实现性和可操作性强。
34.图1为本公开一些实施例提供的用于验证的寄存器随机方法的流程图。
35.例如,如图1所示,本公开至少一实施例提供的用于验证的寄存器随机方法包括步骤s1至步骤s4。
36.步骤s1、根据待验证设备建立多个寄存器模块,其中,多个寄存器模块中的每个寄存器模块包括一个或多个寄存器。
37.步骤s2、设置多个寄存器模块中的每个寄存器模块的配置阶段。
38.步骤s3、获取多个寄存器模块中的每个寄存器模块的配置阶段,得到配置阶段集合。
39.步骤s4、串行地对配置阶段集合中至少一部分的配置阶段进行选择,分别随机该至少一部分的配置阶段中的每个当前被选择的配置阶段对应的寄存器模块的寄存器。
40.本公开的实施例通过引入有关寄存器的配置阶段的机制,实现串行随机的寄存器随机方法,随机效率大大提升,节约了硬件资源,解决了随机困难的问题,能够避免在随机过程中因硬件的限制而死机的问题,适用于大量寄存器的随机。该寄存器随机方法能更方便地区分寄存器的区别,调试更容易,可移植性好,可适用所有的寄存器随机的应用场景,可实现性和可操作性强。
41.例如,在步骤s1中,待验证设备(dut,device undertest)也可称待测试设计或待测硬件设计,本公开的寄存器随机方法可以是待验证设备在开始验证之前的步骤,由于验证方法的其他内容并不为本公开的实施例需要描述的重点,这里不再赘述。
42.在一些示例中,在步骤s1中,对于多个寄存器模块(block),例如多个寄存器模块中的一部分的寄存器模块分别包括一个寄存器以及另外一部分的寄存器模块分别包括多个寄存器;又例如多个寄存器模块的每个寄存器模块都包括一个寄存器;再例如多个寄存器模块中的每个寄存器模块都包括多个寄存器。本公开的实施例对此不作限制,可以根据实际的待验证设备的寄存器的数量和约束等情况进行合理地划分,此处不再赘述,如此,增加了寄存器随机方法的灵活性。
43.在一些示例中,寄存器具有很多属性,例如映射关系、偏移、存取方式、位宽、是否可随机和上电复位值等,本公开的实施例还对寄存器还新增配置阶段(solve_phase)的属性。在一些示例中,在步骤s2中,配置阶段是指在约束范围内随机一个数值作为产品的配置。例如,寄存器可以随机所有的数值,寄存器也可以是需要通过寄存器约束进行限制以进行约束随机,由此,本公开的实施例的配置阶段可规定寄存器或约束所在的阶段。
44.在一些示例中,待验证设备的所有寄存器都具有配置阶段属性。例如,对于一个寄存器模块且该寄存器模块包括多个寄存器,该寄存器模块中所有的寄存器的配置阶段都相同且寄存器模块具有的配置阶段与该寄存器模块中的寄存器的配置阶段一致,也即该寄存器模块中所有的寄存器都会在该寄存器模块的当前随机执行所在的阶段(active_phase,见下文)执行随机以完成随机配置。
45.例如,对于步骤s2,在一些示例中,设置多个寄存器模块中的每个寄存器模块的配置阶段包括以下的步骤s21:在多个寄存器模块中的每个寄存器模块的每个当前寄存器的建立阶段,通过设置配置阶段变量记录当前寄存器的配置阶段,并且分别使同一个寄存器模块中的每个寄存器具有相同的配置阶段。
46.由此,本公开的实施例通过对寄存器添加配置阶段的属性来完成多个寄存器模块的配置阶段的设置,这样能够更方便地区分寄存器,而且使用较为常规的工具的算法即可实现,简单且效率高。
47.例如,对于步骤s21,在一些示例中,在寄存器的建立阶段会记录寄存器的所有属性,例如可通过设置solve_phase变量(例如可称之为配置阶段变量)来实时记录当前寄存器的配置阶段。
48.例如,在一些示例中,若每个寄存器模块都包括一个寄存器,即本公开的实施例的步骤s2主要是按照寄存器为单位来设置配置阶段。为了表述方便,将此种情况记为情况一。如此,情况一下的寄存器随机方法操作更加简单,非常方便区分寄存器,可避免发生将不相
关的寄存器混合在一起的问题,能快速准确地定位到导致发生错误的寄存器,但是此种情况下串行进行单独随机的次数偏多。
49.在一些示例中,对于情况一,在步骤s21中,通过在每个寄存器的建立阶段,设置配置阶段变量来实时地记录当前寄存器的配置阶段,也即实时地记录当前寄存器模块的配置阶段,从而完成用于待验证设备的所有寄存器的配置阶段的设置。
50.又例如,在另一些示例中,当多个寄存器模块中的每个寄存器模块都包括多个寄存器,即本公开的实施例的步骤s2主要是按照寄存器组合为单位来设置配置阶段,其可以根据寄存器的数量和约束的实际情况进行模块的合理地划分。为了表述方便,将此种情况记为情况二。如此,情况二下的寄存器随机方法的效率较高,操作较为简单,还可以节约硬件资源。
51.在一些示例中,对于情况二,在步骤s21中,通过在每个寄存器的建立阶段,设置配置阶段变量来实时地记录当前寄存器的配置阶段,并且将设置有相同的配置阶段的多个寄存器划分为一个寄存器模块,从而完成多个寄存器模块中每个寄存器模块的配置阶段的设置,也即完成用于待验证设备的所有寄存器的配置阶段的设置。当然,此仅仅为示例性的,并不为本公开的限制,例如,在其他实施例中还可在合理划分成多个寄存器模块之后,直接通过设置的配置阶段变量来实时地记录当前寄存器模块的配置阶段,以使得当前寄存器模块中的每个寄存器都具有一个相同的配置阶段。本公开对此不作限制,只要能够实现让每个寄存器模块和/每个寄存器打上配置阶段的标签以使得在一个阶段按串行随机配置即可,这里不再赘述。
52.又例如,在其他一些示例中,当多个寄存器模块中一些寄存器模块分别包括一个寄存器,另外一些寄存器模块中的每个分别包括多个寄存器,即本公开的实施例的步骤s2是按照情况一和情况二进行组合的方式进行配置阶段的属性的设置,此种情况可以参照上述的情况一和情况二,此处不再赘述。
53.图2为本公开一些实施例提供的图1中步骤s3的流程图。
54.例如,如图2所示,步骤s3包括步骤s31和步骤s32。
55.步骤s31、通过设置静态关联数组记录多个寄存器模块中的每个寄存器模块的配置阶段。
56.步骤s32、获取静态关联数组中被设置过的多个配置阶段,得到配置阶段集合。
57.由此,本公开实施例通过静态关联数组记录所有寄存器模块的配置阶段的属性以得到配置阶段的集合,这样调用速度更快,可靠性和可维护性较佳。
58.例如,对于步骤s31,在一些示例中,静态关联数组在配置阶段变量记录每个当前寄存器模块的配置阶段之后实时地获取该当前寄存器模块的配置阶段并记录,从而可以完成所有的寄存器模块的配置阶段的记录。
59.例如,本公开的实施例通过set_solve_phase来设置上述变量solve_phase和上述静态关联数组solve_phase[int],用以完成配置阶段的设置。此仅仅为示例性的,并不为本公开的限制。
[0060]
例如,对于步骤s32,在一些示例中,配置阶段集合为根据多个配置阶段生成的数组队列。如此,有利于后续配置阶段的索引和选择,提高了效率。此仅仅为示例性,并不为本公开的限制,这里不再赘述。
[0061]
例如,一个cpu模块的待随机的寄存器的总数目为p,这p个寄存器可以划分成q组,即划分成p个寄存器模块,p个寄存器模块中的每个寄存器模块都包括多个寄存器,由此数组队列共计记录有p个配置阶段。
[0062]
在一些示例中,上述的至少一部分的配置阶段包括配置阶段集合中所有的配置阶段。在另一些示例中,上述的至少一部分的配置阶段包括:配置阶段集合中所有的配置阶段除去第一部分的配置阶段后剩余的第二部分的配置阶段,且该第一部分的配置阶段包括被配置为命令行输入模式或性能测试模式的至少一个寄存器模块对应的配置阶段,也即上述的至少一部分的配置阶段未包括配置阶段集合中所有的配置阶段,而是仅包括配置阶段集合中的一部分的配置阶段。为了表述方便,本公开的实施例将被配置为命令行输入模式或性能测试模式的寄存器记为第一寄存器。如此,本公开的实施例的可移植性好,可适用任意的寄存器随机的应用场景。
[0063]
例如,对于步骤s4,在一些示例中,在配置阶段集合中至少一部分的配置阶段包括配置阶段集合中所有的配置阶段的情况下,步骤s4中的串行地对配置阶段集合中至少一部分的配置阶段进行选择且分别随机至少一部分的配置阶段中的每个当前被选择的配置阶段对应的寄存器模块的寄存器包括以下步骤或过程:根据数组队列的长度,依序并串行地选择数组队列中的每个配置阶段,并分别随机数组队列中的每个当前被选择的配置阶段对应的寄存器模块的每个寄存器。如此,本公开的实施例可以有序地按一个配置阶段接一个配置阶段地串行进行寄存器的随机,极大地缩短了大量寄存器的随机时间,加快了产品的迭代速度。
[0064]
又例如,对于步骤s4,在另一些示例中,在配置阶段集合中至少一部分的配置阶段未包括配置阶段集合中所有的配置阶段的情况下,也即在配置阶段集合包括上述第一部分的配置阶段的情况下,本公开的实施例的寄存器随机方法还包括以下步骤或过程:在串行地对第二部分的配置阶段进行选择且分别随机第二部分的配置阶段中的每个当前被选择的配置阶段对应的寄存器模块的寄存器之前,直接将至少一个第一寄存器模块中的每个第一寄存器模块的寄存器分别约束配置为固定值。如此,本公开的实施例可以适用于较为复杂的寄存器随机情况,可移植性好,可适用任意的寄存器随机的应用场景。
[0065]
在一些示例中,第一寄存器可以是被配置为命令行输入模式或性能测试模式的寄存器。在命令行输入模式或性能测试模式下,第一寄存器不需要复杂的随机(例如无需调用randomize函数),可以直接生成,即可以直接约束为一个固定值,而且第一寄存器的直接生成只在第一次循环中调用,也即该过程在第二部分的配置阶段对应的寄存器开始执行串行随机之前完成。
[0066]
图3为本公开一些实施例提供的图1中关于步骤s4的流程图。
[0067]
例如,对于步骤s4,在一些示例中,串行地对配置阶段集合中至少一部分的配置阶段进行选择且分别随机至少一部分的配置阶段中的每个当前被选择的配置阶段对应的寄存器模块的寄存器包括以下步骤或过程:串行地对配置阶段集合中至少一部分的配置阶段进行选择以及依序地对被选择的配置阶段对应的寄存器模块分别执行随机。例如,对于配置阶段集合中至少一部分的配置阶段中的每个当前被选择的配置阶段,步骤s4包括步骤s41至步骤s43,如图3所示。
[0068]
步骤s41、将当前被选择的配置阶段通过递归方式传递至多个寄存器模块中的每
个寄存器模块。
[0069]
步骤s42、比较当前被选择的配置阶段与多个寄存器模块中的每个寄存器模块对应的配置阶段。
[0070]
步骤s43、对多个寄存器模块中的具有与当前被选择的配置阶段一致的配置阶段的当前目标寄存器模块执行随机,以随机配置当前目标寄存器模块中的每个寄存器。
[0071]
本公开的实施例通过递归方式在一个阶段爬到所有寄存器模块的寄存器来寻找当前配置阶段对应的目标寄存器模块的寄存器,用以完成当前目标寄存器模块的寄存器的随机配置,算法更简洁清晰,可读性更好。
[0072]
例如,在步骤s41中,将当前被选择的配置阶段通过递归方式传递至多个寄存器模块中的每个寄存器模块是指通过自上而下进行传播来将当前被选择的配置阶段传递至多个寄存器模块分别对应的寄存器,当前被选择的配置阶段可以记为active_phase,即当前随机执行所在的阶段。例如,此处的自上而下进行传播的层次与待验证设备的结构层次一致,由于此不为本公开描述的重点,这里不再赘述。
[0073]
例如,在步骤s42中,比较当前被选择的配置阶段与多个寄存器模块中的每个寄存器模块对应的配置阶段也即将当前被选择的配置阶段与多个寄存器模块中每个寄存器模块的寄存器的配置阶段进行比较,用以决定各寄存器的随机的打开(即寄存器当前执行随机配置以完成随机化)或关闭(即寄存器当前不随机化)。
[0074]
例如,在步骤s42中,由于同一个寄存器模块中的每个寄存器的配置阶段相同,也即寄存器模块的配置阶段与该寄存器模块中的任一寄存器的配置阶段一致,由此,比较当前被选择的配置阶段与多个寄存器模块中的每个寄存器模块对应的配置阶段可以通过比较当前被选择的配置阶段与每个寄存器模块中的至少一个寄存器(例如一个或两个或者所有的寄存器)对应的配置阶段来实现。例如,若比较判断出某一个寄存器模块的至少一个寄存器的配置阶段与当前被选择的配置阶段一致,则判断得出该寄存器模块是当前需要执行随机配置的当前目标寄存器模块,即当前目标寄存器模块中所有寄存器都在当前被选择阶段执行随机配置以完成随机化。当然,此仅仅为示例性的,并不为本公开的限制,只要能够比较得出哪些寄存器模块和/或寄存器的随机要打开以及哪些寄存器模块和/或寄存器的随机要关闭即可,例如其以根据上文所述的步骤s21中配置阶段的设置的情况进行自由调整,这里不再赘述。
[0075]
例如,在步骤s43中,对多个寄存器模块中的具有与当前被选择的配置阶段一致的配置阶段的当前目标寄存器模块执行随机也即若某个寄存器模块的配置阶段与当前被选择的配置阶段一致则对该寄存器模块的寄存器执行随机配置以完成随机化,即打开该寄存器模块的寄存器的随机。又例如,若某个存器模块的配置阶段与当前被选择的配置阶段不一致,则该寄存器模块的寄存器当前不随机化,即关闭该寄存器模块的寄存器的随机。
[0076]
在一些示例中,在当前目标寄存器模块包括多个寄存器的情况下,步骤s43中的对当前目标寄存器模块执行随机以随机配置当前目标寄存器模块中的每个寄存器包括以下步骤或过程:并行地随机配置该当前目标寄存器模块中多个寄存器中的每个寄存器。如此,本公开的实施例可以实现串行与并行结合的寄存器随机方法,不仅能够降低随机难度,节约硬件资源,还能提升随机效率,适用于大量寄存器的随机。
[0077]
图4为本公开另一些实施例提供的寄存器随机方法的流程图。为了表述方便,图4
主要是以配置阶段集合中至少一部分的配置阶段包括配置阶段集合中所有的配置阶段的情况为例进行说明,但是本公开的实施例的寄存器随机方法的流程并不仅限于此,即对于其他情况的流程和流程图,在此也不做穷举和赘述。
[0078]
例如,如图4所示,本公开一些实施例提供的寄存器随机方法包括步骤t1至步骤t5。
[0079]
步骤t1、根据待验证设备建立n个寄存器模块,其中,n个寄存器模块中的每个寄存器模块包括一个或多个寄存器,n为大于1的整数。
[0080]
步骤t2、设置n个寄存器模块中的每个寄存器模块的配置阶段。
[0081]
步骤t3、获取n个寄存器模块中的每个寄存器模块的配置阶段,得到配置阶段集合。
[0082]
步骤t41、串行地对配置阶段集合中的n个配置阶段进行选择。
[0083]
步骤t42、将当前被选择的配置阶段通过递归方式传递至n个寄存器模块中的每个寄存器模块的寄存器,以传递至所有的寄存器。
[0084]
步骤t43、将当前被选择的配置阶段与n个寄存器模块中的每个寄存器模块对应的配置阶段进行比较。
[0085]
步骤t44、判断当前被选择的配置阶段与寄存器模块对应的配置阶段是否一致:若是,则打开该寄存器模块的寄存器的随机;若否,则关闭该寄存器模块的寄存器的随机。
[0086]
步骤t45、判断配置阶段集合中的n个配置阶段是否被选择完:若否,则跳转至步骤t41,循环执行步骤t41至t45,直至n个配置阶段都被选择完,转至步骤t5;若是,则转至步骤t5。
[0087]
步骤t5、寄存器随机结束并获取寄存器随机的结果。
[0088]
由此,本公开的实施例可以根据寄存器的数量和约束的情况合理分组,引入配置阶段的机制,让寄存器都打上配置阶段的标签,使得至少部分并行随机变成串行随机,提高了随机效率,节约了资源,解决了随机困难的问题,本公开的实施例可以实现传统方案无法完成的验证维度,增强了产品可靠性,而且具有良好的可移植性,例如可以通过修改对应设计的寄存器代码即可完成平台的移植。
[0089]
在一些示例中,寄存器模块(block)可以包括一个或多个子寄存器模块,每个子寄存器模块包括多个寄存器。如此,本公开的实施例根据寄存器相关模块的复杂程度进行合并和拆分,增加了灵活性。
[0090]
在一些示例中,在当前目标寄存器模块包括多个子寄存器模块的情况下,步骤s43中的对当前目标寄存器模块执行随机以随机配置当前目标寄存器模块中的每个寄存器包括以下步骤或过程:对当前目标寄存器模块中的多个子寄存器模块进行并行地随机,以随机配置多个子寄存器模块中的每个子寄存器模块的每个寄存器。由此,本公开的实施例可根据寄存器相关模块的复杂程度进行合并,可以增加灵活性,这也取决于寄存器的数量和随机的难易程度等,例如上述寄存器模块可以是由两组以上的寄存器组构成。此仅仅为示例性的,并不为本公开的限制,例如本公开的实施例还可根据寄存器相关模块的复杂程度进行拆分,也可增加灵活性,这也取决于寄存器的数量和随机的难易程度等。例如本公开的实施例可以将较为复杂或寄存器数量较多的寄存器组拆分成多个上述寄存器模块并分别按照配置阶段进行串行随机,具体可以按照上文描述,这里不再赘述。需要说明的是,此处
描述的寄存器组是指根据设计划分而成的具有多个寄存器的任意的寄存器组合,并不局限于某个或某些特定的模块构成。
[0091]
例如,一个寄存器组包括50个寄存器,另一个寄存器组包括50个寄存器,即这两个寄存器组共计包括100个寄存器。如果在一个阶段可以满足这100个寄存器的随机的情况下,可将这两个寄存器组合并成一个寄存器模块,即这两个寄存器组的配置阶段被设置为一样。如此,在该寄存器模块为当前目前寄存器模块时,可以并行随机配置这两个寄存器组的100个寄存器。如此,本公开的实施例可实现串行与并行结合的寄存器随机方法,不仅能降低随机难度,节约硬件资源,还能提升随机效率,适用于大量寄存器的随机。
[0092]
在一些示例中,在当前目标寄存器模块包括具有交叉约束的多个寄存器的情况下,步骤s43中的对当前目标寄存器模块执行随机以随机配置当前目标寄存器模块中的每个寄存器包括以下步骤或过程:通过增加额外约束,控制当前目标寄存器模块中的具有交叉约束的多个寄存器按照额外约束进行随机配置,由此,当前目标寄存器模块中的具有交叉约束的多个寄存器的随机,既要满足寄存器本身的约束,也要满足该增加的额外约束。如此,本公开的实施例可以适用于具有相关性寄存器的随机以及其他一些更加复杂的随机,普适性更强,适用于大量寄存器的随机。
[0093]
在一些示例中,具有交叉约束的多个寄存器是指寄存器有交叉的关系,例如寄存器a=5的时候寄存器b=6,寄存器a=3的时候寄存器b=4。此仅仅为示例性的,并不为本公开的限制。
[0094]
在一些示例中,本公开的实施例可以调用systemverilog的randomize函数来执行随机,例如依次执行systemverilog的pre_randomize、randomize和post_randomize函数。此仅仅为示例性的,并不为本公开的限制。在一些示例中,利用systemverilog可以实现增加额外的约束,例如systemverilog允许使用randomize()with{}来增加额外的约束。当然,此仅仅为示例性的,并不为本公开的限制。
[0095]
在一些示例中,在寄存器模块包括具有交叉约束的多个寄存器的情况下,本公开的实施例通过调用systemverilog的回调函数pre_randomize函数,使得在pre_randomize阶段可以改变各个寄存器相关约束的constraint_mode,其中,constraint_mode函数打开或关闭约束,其是systemverilog内建的类,非激活状态下的约束在调用randomize函数时将失效。
[0096]
在一些示例中,本公开的实施例根据当前被选择的配置阶段和约束所在配置阶段来实现对constraint_mode进行打开和关闭。例如,若约束所在配置阶段与当前被选择的配置阶段不一致,则通过constraint_mode函数关闭约束;若约束所在配置阶段与当前被选择的配置阶段一致,则通过constraint_mode函数打开约束,并随机化返回函数值,完成随机配置。
[0097]
例如,当具有交叉约束的多个寄存器的约束与当前被选择的配置阶段一致,则通过constraint_mode函数打开约束,并随机化返回函数值,完成随机配置。
[0098]
在一些示例中,在步骤t5中的获取寄存器随机的结果包括以下步骤或过程:打印出有关寄存器的文本文件,例如,打印出所有的寄存器模块的对应的寄存器的名字和数值。在一些示例中,打印出有关寄存器的文本文件可以在验证过程中使用,也即本公开的实施例的寄存器随机方法可以适用于验证过程。
[0099]
本公开至少一实施例还提供了一种验证方法,该验证方法包括上述任一实施例所述的寄存器随机方法。需要说明的是,本公开的实施例中,验证方法的具体功能和技术效果可以参考上文中关于用于验证的寄存器随机方法的描述,由于验证方法的其他相关内容不是本公开描述的重点,此处不再赘述。
[0100]
图5为本公开一些实施例提供的一种寄存器随机系统的框图。
[0101]
例如,如图5所示,本公开至少一实施例提供的用于验证的寄存器随机系统100包括建立模块101、设置模块102、获取模块103和串行随机模块104。建立模块101被配置为根据待验证设备建立多个寄存器模块,其中,多个寄存器模块中的每个包括一个或多个寄存器。设置模块102被配置为设置多个寄存器模块中的每个的配置阶段。获取模块103被配置为获取多个寄存器模块中的每个的配置阶段以得到配置阶段集合。串行随机模块104被配置为串行地对配置阶段集合中至少一部分的配置阶段进行选择且分别随机该至少一部分的配置阶段中的每个当前被选择的配置阶段对应的寄存器模块的寄存器。
[0102]
需要注意的是,在本公开的实施例中,该用于验证的寄存器随机系统100可以包括更多或更少的模块,并且各个模块之间的连接关系不受限制,可以根据实际需求而定。各个模块的具体构成方式不受限制。关于用于验证的寄存器随机系统100的具体实施方式和技术效果可以参考本公开上述实施例中提供的用于验证的寄存器随机方法的技术效果,这里不再赘述。
[0103]
以上实施例中的各个模块可被分别配置为执行特定功能的软件、硬件、固件或上述项的任意组合。例如,这些模块可对应于专用的集成电路,也可对应于纯粹的软件代码,还可对应于软件与硬件相结合的模块。
[0104]
需要说明的是,尽管以上在描述用于验证的寄存器随机系统时将其划分为用于分别执行相应处理的模块,然而,本领域技术人员清楚的是,各模块执行的处理也可以在随机系统不进行任何具体模块划分或者各模块之间并无明确划界的情况下执行。
[0105]
图6为本公开至少一实施例提供的一种电子设备的结构示意图。本公开实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、pda(个人数字助理)、pad(平板电脑)、pmp(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字tv、台式计算机等等的固定终端。图6示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
[0106]
例如,如图6所示,在一些示例中,电子设备200包括处理装置(例如中央处理器、图形处理器等)201,其可以根据存储在只读存储器(rom)202中的程序或者从存储装置208加载到随机访问存储器(ram)203中的程序而执行如上所述的寄存器随机方法。在ram 203中,还存储有计算机系统操作所需的各种程序和数据。处理装置201、rom202以及ram203通过总线204被此相连。输入/输出(i/o)接口205也连接至总线204。
[0107]
例如,以下部件可以连接至i/o接口205:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置206;包括诸如液晶显示器(lcd)、扬声器、振动器等的输出装置207;包括例如磁带、硬盘等的存储装置208;以及包括诸如lan卡、调制解调器等的网络接口卡的通信装置209。通信装置209可以允许电子设备200与其他设备进行无线或有线通信以交换数据,经由诸如因特网的网络执行通信处理。驱动器310也根据需要连接至i/o接口205。可拆卸介质311,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要
安装在驱动器310上,以便于从其上读出的计算机程序根据需要被安装入存储装置209。虽然图6示出了包括各种装置的电子设备200,但是应理解的是,并不要求实施或包括所有示出的装置。可以替代地实施或包括更多或更少的装置。
[0108]
例如,该电子设备200还可以进一步包括外设接口(图中未示出)等。该外设接口可以为各种类型的接口,例如为usb接口、闪电(lighting)接口等。该通信装置209可以通过无线通信来与网络和其他设备进行通信,该网络例如为因特网、内部网和/或诸如蜂窝电话网络之类的无线网络、无线局域网(lan)和/或城域网(man)。无线通信可以使用多种通信标准、协议和技术中的任何一种,包括但不局限于全球移动通信系统(gsm)、增强型数据gsm环境(edge)、宽带码分多址(w-cdma)、码分多址(cdma)、时分多址(tdma)、蓝牙、wi-fi(例如基于ieee 802.11a、ieee 802.11b、ieee 802.11g和/或ieee 802.11n标准)、基于因特网协议的语音传输(voip)、wi-max,用于电子邮件、即时消息传递和/或短消息服务(sms)的协议,或任何其他合适的通信协议。
[0109]
例如,电子设备可以为手机、平板电脑、笔记本电脑、电子书、游戏机、电视机、数码相框、导航仪等任何设备,也可以为任意的电子设备及硬件的组合,本公开的实施例对此不作限制。
[0110]
例如,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置209从网络上被下载和安装,或者从存储装置208被安装,或者从rom 202被安装。在该计算机程序被处理装置201执行时,执行本公开实施例的方法中限定的上述用于衍生的寄存器随机功能。
[0111]
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开的实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开的实施例中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、rf(射频)等等,或者上述的任意合适的组合。
[0112]
在一些实施方式中,客户端、服务器可以利用诸如http(hypertext transfer protocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网
(“lan”),广域网(“wan”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
[0113]
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
[0114]
需要说明的是,本公开的实施例中,电子设备200的具体功能和技术效果可以参考上文中关于用于验证的寄存器随机方法的描述,此处不再赘述。
[0115]
有以下几点需要说明:
[0116]
(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。
[0117]
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
[0118]
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1