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

基于UVM的存储建模优化方法与流程

2022-08-13 20:39:38 来源:中国专利 TAG:

基于uvm的存储建模优化方法
技术领域
1.本发明涉及芯片技术领域,特别涉及一种基于uvm的存储建模优化方法。


背景技术:

2.对于数字芯片来说,其内部几乎不可能少得了寄存器,寄存器的作用非常重要,它是实现数字时序逻辑电路的基础,比如可以用来存储数据,用于高速计算和缓存,或者用于指示工作模式和状态。因此对于一个dut(device under test)来说,通常我们需要配置其工作模式或需要通过寄存器中存储的数据来告知我们其内部的工作状态。uvm(universal verification methodology)提供了寄存器模型用来对上述数字芯片内部的寄存器进行建模,如图1所示,图1中寄存器模型(register model)中例化包含了有寄存器(register),地址映射表(map),存储器(mem),覆盖率收集组件(reg coverage)以及数据库(database)。这里的数据库(database)包含了验证平台中会使用到的三种对dut中寄存器值的模拟,包括寄存器的实际值、镜像值和期望值,我们可以根据实际项目的情况综合使用上述对寄存器建模的三种不同值的类型,以对dut中的寄存器的值进行复杂的读写操作的建模和最终的比较,从而查找出dut中可能存在的问题,从而帮助确认dut寄存器功能设计的正确性。
3.采用上述现有方案,给验证开发人员的开发工作增加了代码工作量,使用起来较为麻烦,因为需要验证开发人员自行完成如下操作:(1) uvm没有对存储建立相应的存储实体,即uvm并没有提供类似寄存器的镜像值和期望值给存储,因此需要自行创建并维护存储实体。
4.(2)仿真结束阶段,自行对存储实体和dut中实际存储的值进行比较。
5.除此之外,验证开发人员不能像uvm中寄存器那样使用三种不同值的类型的接口方法,从而方便的对存储进行复杂的读写操作的建模并作最终的比较,从而查找出dut中可能存在的问题,从而帮助确认dut 存储功能设计的正确性。
6.

技术实现要素:

7.根据本发明实施例,提供了一种基于uvm的存储建模优化方法,包含如下步骤:搭建uvm验证环境;在uvm验证环境中将存储实体的存储单元建模为mem_entry_shadow类;对uvm验证环境的存储模型类uvm_mem进行扩展升级;对uvm验证环境的预测器进行扩展升级;在仿真结束阶段检查存储镜像值与dut实际存储值。
8.进一步,在uvm验证环境中将存储实体的存储单元建模为mem_entry_shadow类,包含如下子步骤:在mem_entry_shadow类被构造实例化时根据传递的存储位宽计算得到占用的字节单元数;
使用动态数组,根据实际存储的存储数据位宽将动态数组切分成字节数组,并对字节数组大小空间进行声明;在mem_entry_shadow类中创建读写方法接口。
9.进一步,对uvm验证环境的存储模型类uvm_mem进行扩展升级,包含如下子步骤:对mem_entry_shadow类声明为关联数组,从而创建存储的镜像值与期望值实体;创建与uvm验证环境提供的存储模型相关的读写方法。
10.进一步,对uvm验证环境的预测器进行扩展升级包含如下子步骤:获取存储实体的寄存器存储总线操作的事务数据信息;将事务数据信息转换为通用的寄存器存储访问uvm_reg_bus_op的事务数据类型变量;调用uvm验证环境的寄存器模型的地址映射表的get_mem_by_offset方法,获取uvm验证环境提供的存储模型的句柄;获取存储模型的句柄,调用存储模型的predict_mirrored_value方法同步更新存储单元的镜像值。
11.进一步,获取存储模型的句柄,调用存储模型的predict_mirrored_value方法同步更新存储单元的镜像值,包含如下子步骤:调用存储模型的get_offset方法获取存储模型的基地址;获取存储单元的真实地址,使用存储单元的真实地址减去存储模型的基地址,获得存储单元的偏移地址;使用偏移地址更新同步镜像值。
12.进一步,在仿真结束阶段检查存储镜像值与dut实际存储值,包含如下子步骤:在uvm验证环境的寄存器模型的类uvm_reg_block中创建check_mem_value方法;在check_mem_value方法中调用get_memories,获取uvm验证环境提供的存储模型;调用存储模型的check_mem_value方法对存储镜像值与dut实际存储值进行检查。
13.根据本发明实施例的基于uvm的存储建模优化方法,提升了验证开发人员对存储建模的开发效率的同时避免了创建存储实体所带来的内存损耗较大的仿真性能问题,减轻了开发人员的代码工作量。
14.要理解的是,前面的一般描述和下面的详细描述两者都是示例性的,并 且意图在于提供要求保护的技术的进一步说明。
15.附图说明
16.图1为现有技术的原理图图2为根据本发明实施例基于uvm的存储建模优化方法的原理图;图3为根据本发明实施例基于uvm的存储建模优化方法的步骤流程图;图4为图3中的步骤s2的子步骤的流程图;图5为图3中的步骤s3的子步骤的流程图;图6为图3中的步骤s4的子步骤的流程图;
图7为图6中的步骤s44的子步骤的流程图;图8为图3中的步骤s5的子步骤的流程图。
17.具体实施方式
18.以下将结合附图,详细描述本发明的优选实施例,对本发明做进一步阐述。
19.首先,将结合图2~7描述根据本发明实施例的基于uvm的存储建模优化方法,用于存储数据,其应用场景广阔。
20.本发明实施例的基于uvm的存储建模优化方法,包含如下步骤:在s1中,如图3所示,搭建uvm验证环境。
21.在s2中,如图3所示,在uvm验证环境中将存储实体的存储单元建模为mem_entry_shadow类。
22.在s3中,如图3所示,对uvm验证环境的存储模型类uvm_mem进行扩展升级。
23.在s4中,如图3所示,为了实现对镜像值与实际值的更新同步,对uvm验证环境的预测器进行扩展升级,主要在其接收广播端口过来的write方法里增加对存储访问显示预测的支持功能,因为一般来说更推荐采用显示预测的方式来对镜像值进行更新,因此这里为示例,设定增加的默认预测方式为显示预测。这里预测器,派生于uvm_reg_predictor类,它与寄存器存储总线上的监测器进行连接以获取来自总线上的数据,然后匹配与寄存器有关的地址,并自动调用寄存器模型的预测方法从而完成与dut中寄存器及存储的同步。通过外部的预测器用来对总线进行监听,该预测器里的适配器将总线事务转换为寄存器事务类型,然后使用对应的地址通过地址映射表来访问目标寄存器或存储,最后调用寄存器或存储的自动预测方法来更新寄存器模型中寄存器和存储的镜像值,使得与dut中实际的值进行同步。该预测器由于获取的事务请求信息是直接监测总线上对dut寄存器及存储的操作,因此不会出现uvm提供的寄存器自动预测机制中的遗漏的问题,确保镜像值与实际值的更新同步。
24.在s5中,如图3所示,在仿真结束阶段检查存储镜像值与dut实际存储值。
25.进一步,在uvm验证环境中对存储实体的存储单元进行建模,包含如下子步骤:在s21中,如图4所示,在mem_entry_shadow类被构造实例化时根据传递的存储位宽计算得到占用的字节单元数。
26.在s22中,如图4所示,使用动态数组,根据实际存储的存储数据位宽将所述动态数组切分成字节数组,并对所述字节数组大小空间进行声明,从而避免使用统一的较大的位宽来作为存储单元来存储数据,相当于按需使用来避免内存空间的无效占用以进一步提升仿真性能。
27.在s23中,如图4所示,在mem_entry_shadow类中创建读写方法接口,用来完成对该存储单元值的写入和读取,其中包括字节类型动态数组和uvm_reg_data_t比特类型输出的类型转换。
28.进一步,对uvm验证环境的存储模型类uvm_mem进行扩展升级,包含如下子步骤:在s31中,如图5所示,对存储单元的mem_entry_shadow类声明为关联数组,从而创建镜像值与期望值实体,这里使用关联数组类型来减少对内存的占用,从而尽可能避免创
建存储实体所带来的内存损耗较大的仿真性能问题。
29.在s32中,如图5所示,创建与uvm验证环境提供的存储模型相关的读写方法,寄存器模型相关的读写方法包括:write:对存储单元的实际dut值进行写操作,并且如果写成功的话,对其相应的镜像值和期望值 进行更新同步。注意因为这里我们对存储单元采用的是关联数组类型进行建模,因此我们在对镜像 值和期望值进行更新前会先判断其存储单元元素在关联数组中是否存在,如果不存在则调用new构造函数声明构造后再进行同步,也就是说在对该存储的单元的第一次读写访问操作时创建其存储实体。
30.read:对存储单元的实际dut值进行读操作,并且如果读成功的话,对其相应的镜像值和期望值进行更新同步。同样注意因为这里我们对存储单元采用的是关联数组类型进行建模,因此我们在对镜像值和期望值进行更新前会先判断其存储单元元素在关联数组中是否存在,如果不存在则调用new构造函数声明构造后再进行同步,也就是说在对该存储的单元的第一次读写访问操作时创建其存储实体。
31.get_mirrored_value:用来获取存储单元的镜像值。
32.predict_mirrored_value:用来对存储单元的镜像值与dut中实际存储单元值进行更新同步。
33.check_mem_value:用来在仿真结束阶段,对当前存储中所有存在的存储单元的镜像值和相应的 dut中的实际存储单元值进行检查比较,其中会先遍历当前存储模型的镜像值关联数组中已经被声明构造的存储单元,然后对其镜像值进行读取,接着发起对相应存储单元的后门读操作,最后对两者的值进行比较并输出结果。
34.除此之外,还有很多类似uvm为寄存器提供的对镜像值、期望值和dut实际值的读写访问方法,这些方法都可以很容易的通过类似思路对存储来建模实现,比如:get和set:用来设置和获取期望值。
35.update:该方法会先检查期望值和镜像值是否一致,如果不一致,会将镜像值和实际硬件dut中实际值更新为期望值。这里的期望值可以由之前的set()或randomize()方法进行设置。
36.predict:用于更新寄存器模型的期望值和镜像值,而不影响dut中实际的值。
37.mirror:将期望值和镜像值更新为dut中实际的值。
38.进一步,对uvm验证环境的预测器进行扩展升级,包含如下子步骤:在s41中,如图6所示,获取存储实体的寄存器存储总线操作的事务数据信息。
39.在s42中,如图6所示,将事务数据信息转换为通用的寄存器存储访问uvm_reg_bus_op的事务数据类型变量,使用者从总线监测器(monitor)那里通过tlm通信端口获取到的寄存器存储总线操作的事务数据信息通过适配器(adapter)的bus2reg方法转换为通用的寄存器存储访问uvm_reg_bus_op的事务数据类型变量,此类型变量中存储着一般寄存器存储访问所需要的访问类型、访问的地址和数据等信息。也就是说,总线对寄存器存储的读写需要通过目标总线协议的事务数据类型来完成,因此需要适配 器来将这些寄存器存储读写访问操作转换为符合目标总线协议的事务数据类型。
40.在s43中,如图6所示,调用地址映射表(map)的get_mem_by_offset方法,通过访问的存储单元地址来查询获取其所属的存储模型的句柄。
41.在s44中,如图6所示,获取存储模型的句柄,调用存储模型的predict_mirrored_value方法同步更新存储单元的镜像值,判断如果查询获取到了该被访问的存储单元所属的存储模型的句柄,即不为空,则判断如果当前对存储单元的访问操作是写操作,则调用存储模型中创建好的predict_mirrored_value方法来对目标存储单元的镜像值进行同步更新。
42.进一步,获取存储模型的句柄,调用存储模型的predict_mirrored_value方法同步更新存储单元的镜像值,包含如下子步骤:在s441中,如图7所示,调用存储模型的get_offset方法获取存储模型的基地址。
43.在s442中,如图7所示,获取存储单元的真实地址,使用存储单元的真实地址减去存储模型的基地址,获得存储单元的偏移地址。
44.在s443中,如图7所示,使用偏移地址更新同步镜像值。
45.进一步,在仿真结束阶段检查存储镜像值与dut实际存储值,包含如下子步骤:在s51中,如图8所示,在uvm验证环境的寄存器模型的类uvm_reg_block中创建check_mem_value方法;在s52中,如图8所示,在check_mem_value方法中调用 get_memories,获取存储模型 ;在s53中,如图8所示,递归调用其层次之下的存储模型的check_mem_value方法对存储镜像值与dut实际存储值进行检查,最终简化了验证开发人员的代码工作量,使得其不再需要自行编写相关检查的代码来逐一对存储值进行检查,进一步提升了其工作效率。
46.本实施例避免创建存储实体所带来的内存损耗较大的仿真性能问题,我们可以使用关联数组类型来减少对仿真内存的占用,即我们可以对存储的镜像值和期望值使用关联数组类型来建模,只对测试用例中实际读写访问到的存储单元进行建模,即使用稀疏矩阵,做到可以支持很大的存储空间的同时按使用进行内存空间的占用分配,从而提升仿真性能;对具体的存储单元进行建模,使用动态数组,根据实际存储的存储数据位宽切分成字节数组,从而避免使用统一的较大的位宽来作为存储单元来存储数据,相当于按需使用来避免内存空间的无效占用以进一步提升仿真性能。采用类似uvm寄存器显示预测的方式自动完成存储的镜像值与dut实际存储值的更新同步,避免验证开发人员手动去更新同步存储的镜像值,同时也避免了由于内部寄存器存储总线的操作导致遗漏, 降低了验证开发人员的代码工作量,提升了工作效率;提供在仿真结束阶段使用的存储镜像值与dut实际存储值的递归检查方法,从而进一步简化验证开发人员的代码工作量,使得其不再需要自行编写相关检查的代码来逐一对存储值进行检查,进一步提升了其工作效率;不改变原先基于uvm的使用语法方式和使用习惯,使得验证开发人员可以轻松的使用来对dut中的存储进行建模,降低学习成本,提升工作效率。
47.以上,参照图2~7描述了根据本发明实施例的基于uvm的存储建模优化方法,提升了验证开发人员对存储建模的开发效率的同时避免了创建存储实体所带来的内存损耗较大的仿真性能问题,减轻了开发人员的代码工作量。
48.需要说明的是,在本说明书中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备
所固有的要素。在没有更多限制的情况下,由语句“包含
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
49.尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。
再多了解一些

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

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

相关文献