1.本发明涉及芯片验证技术领域,特别涉及一种模拟真实环境下的寄存器重置方法。
背景技术:2.我们在搭建验证平台来对dut进行验证的过程包含:1、上电,2、复位,3、配置寄存器以设定其工作模式,4、运行测试用例以完成目标测试内容,5、等待仿真结束并检查结果等五部分,在对dut(device under test)进行复位后,要对其中的寄存器进行配置,从而设定其工作模式,然而有些时候一种工作模式测试完毕之后,需要重新配置其寄存器,使其工作在另一种工作模式下,然后再对另一种模式下运行相应的测试用例来对dut进行验证测试。这个时候,一般的做法是先复位然后再重新配置其目标模式寄存器,并对其他寄存器进行随机,简单说,就是不断地重复上面的过程,配置dut寄存器,使其工作在不同的模式下,来验证不同模式下其功能是否正确,如果正确则继续配置寄存器验证下一种工作模式,如果不正确,则对问题进行调试,判断是dut的问题或者是验证平台的问题,然后修复该问题。
3.现有技术中,因为芯片在实际使用环境中一般并不会自我重新复位然后再配置工作模式,而是在正常工作的过程中直接对工作模式进行的修改,也就是说,我们不能对dut先进行复位,然后再配置其工作模式。因为这使得dut总是以一种已知的状态来开启另一种工作模式,而实际环境中芯片是从一个未知的随机状态切换到另一种工作模式。因此先复位再重新配置工作模式的方法会导致验证结果不准确,因为并没有模拟最真实的使用环境,容易带来意想不到的问题,从而最终导致芯片流片后无法正常工作。
4.
技术实现要素:5.根据本发明实施例,提供了一种模拟真实环境下的寄存器重置方法,包含如下步骤:搭建验证平台;对验证平台的dut进行上电并复位;在验证平台中创建sequence激励,用于重新配置验证平台的第一寄存器;发送执行random_sequence,用于进行随机指令的执行测试。
6.进一步,在验证平台中创建sequence激励,用于重新配置验证平台的寄存器,包含如下子步骤:使用验证平台的寄存器模型的句柄调用寄存器模型内置的get_registers方法收集寄存器模型中的若干个第一寄存器于一个队列中,获得队列model_regs;调用systemverilog语言的randomize()方法对若干个第一寄存器的field值进行随机设置;调用队列model_regs的shuffle()方法打乱若干个第一寄存器的顺序;
调用第一寄存器的update()方法更新dut中的第二寄存器的值。
7.进一步,调用randomize()方法对若干个第一寄存器的field值进行随机设置时可以同时设置随机约束将若干个第一寄存器的部分field值进行固定。
8.进一步,在发送执行random_sequence之前在一个测试用例中多次对第一寄存器进行重新配置。
9.根据本发明实施例的模拟真实环境下的寄存器重置方法,模拟芯片真实的使用环境来对dut进行验证,解决了现有技术中因为验证方法的不准确而导致的后期芯片流片失败的问题。
10.要理解的是,前面的一般描述和下面的详细描述两者都是示例性的,并且意图在于提供要求保护的技术的进一步说明。
11.附图说明
12.图1为现有技术的验证过程原理图;图2为根据本发明实施例模拟真实环境下的寄存器重置方法的验证过程原理图;图3为根据本发明实施例模拟真实环境下的寄存器重置方法的流程图;图4为图3中步骤s3的子步骤流程图。
13.具体实施方式
14.以下将结合附图,详细描述本发明的优选实施例,对本发明做进一步阐述。
15.首先,将结合图2~4描述根据本发明实施例的模拟真实环境下的寄存器重置方法,用于芯片验证,其应用场景广阔。
16.如图2~4所示,本发明实施例的模拟真实环境下的寄存器重置方法,包含如下步骤:在s1中,如图2~3所示,搭建验证平台,优选搭建uvm(universal verification methodology)验证平台;在s2中,如图2~3所示,对验证平台的dut进行上电并复位;在s3中,如图2~3所示,在验证平台中创建sequence激励,用于重新配置验证平台的第一寄存器;在s4中,如图2~3所示,发送执行random_sequence,用于进行随机指令的执行测试。
17.进一步,在发送执行random_sequence之前对一个测试用例中多次对第一寄存器进行重新配置,且每次配置的寄存器值不同。
18.进一步,在验证平台中创建sequence激励,用于重新配置验证平台的寄存器,包含如下子步骤:在s31中,如图2~4所示,使用验证平台的寄存器模型的句柄调用寄存器模型内置的get_registers方法收集寄存器模型中的若干个第一寄存器于一个队列中,获得队列model_regs,get_registers方法为uvm验证方法学中为寄存器模型提供的内置方法,用于
获取寄存器模型其内部包含的所有的寄存器;在s32中,如图2~4所示,调用systemverilog语言的randomize()方法对若干个第一寄存器的field值进行随机设置,randomize()方法是systemverilog的内置方法,用于对寄存器的域段,即field的值进行随机。补充一下,systemverilog通常用于数字芯片设计和验证的开发编程语言;在s33中,如图2~4所示,调用队列model_regs的shuffle()方法打乱若干个第一寄存器的顺序,shuffle()方法是由systemverilog内置于队列model_regs中,用于打乱队列中元素的位置排序;在s34中,如图2~4所示,调用第一寄存器的update()方法更新dut中的第二寄存器的值。
19.进一步,调用randomize()方法对若干个第一寄存器的field值进行随机设置时可以同时设置随机约束将若干个第一寄存器的部分field值进行固定,方便验证人员对dut设计文档中有明确配置顺序或数值要求,或者其他特殊要求的寄存器进行手工配置,其余寄存器的配置顺序和数值则随机设置,验证人员通过重复多次上述验证过程以碰撞出可能导致dut不能正常工作的情况,从而尽可能对dut进行全面的验证。
20.如图1所示,由于复位后dut会恢复到一种已知的状态,然后再进行寄存器配置并施加激励来进行仿真验证,因此不能模拟最真实的环境,容易给最终芯片的流片埋下隐患。故如图2所示,我们可以考虑不进行复位,直接对其寄存器进行配置,从而使其工作在一种随机的状态,达到模拟真实的环境的效果,那么实现这一点,需要综合利用uvm和systemverilog给我们提供的接口方法来实现,首先,将寄存器收集到队列,我们可以通过寄存器模型句柄调用get_registers()方法来实现;其次,对寄存器field值进行随机设置,我们可以调用randomize()方法并结合随机约束来实现;然后打乱寄存器队列中寄存器的排列顺序,我们可以通过调用数组的shuffle()方法来实现;接下来,以打乱后的顺序来随机更新dut中寄存器的值,我们可以通过调用寄存器的update()方法来实现;最后,重复配置寄存器和施加随机激励来全面的对dut进行仿真验证。
21.以上,参照图2~4描述了根据本发明实施例的模拟真实环境下的寄存器重置方法,模拟芯片真实的使用环境来对dut进行验证,避免了现有技术中因为验证方法的不准确而导致的后期芯片流片失败的问题。
22.需要说明的是,在本说明书中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包含
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
23.尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。
技术特征:1.一种模拟真实环境下的寄存器重置方法,其特征在于,包含如下步骤:搭建验证平台;对所述验证平台的dut进行上电并复位;在所述验证平台中创建sequence激励,用于重新配置所述验证平台的第一寄存器;发送执行random_sequence,用于进行随机指令的执行测试。2.如权利要求1所述模拟真实环境下的寄存器重置方法,其特征在于,在所述验证平台中创建sequence激励,用于重新配置所述验证平台的寄存器,包含如下子步骤:使用所述验证平台的寄存器模型的句柄调用所述寄存器模型内置的get_registers方法收集所述寄存器模型中的若干个第一寄存器于一个队列中,获得队列model_regs;调用systemverilog语言的randomize()方法对所述若干个第一寄存器的field值进行随机设置;调用所述队列model_regs的shuffle()方法打乱所述若干个第一寄存器的顺序;调用所述第一寄存器的update()方法更新所述dut中的第二寄存器的值。3.如权利要求2所述模拟真实环境下的寄存器重置方法,其特征在于,调用randomize()方法对所述若干个第一寄存器的field值进行随机设置时可以同时设置随机约束将所述若干个第一寄存器的部分field值进行固定。4.如权利要求1所述模拟真实环境下的寄存器重置方法,其特征在于,在发送执行random_sequence之前在一个测试用例中多次对所述第一寄存器进行重新配置。
技术总结本发明公开了一种模拟真实环境下的寄存器重置方法,包含如下步骤:搭建验证平台;对验证平台的DUT进行上电并复位;在验证平台中创建sequence激励,用于重新配置验证平台的第一寄存器;发送执行random_sequence,用于进行随机指令的执行测试。本发明模拟芯片真实的使用环境来对DUT进行验证,解决了现有技术中因为验证方法的不准确而导致的后期芯片流片失败的问题。的问题。的问题。
技术研发人员:马骁
受保护的技术使用者:杭州云合智网技术有限公司
技术研发日:2022.04.21
技术公布日:2022/7/5