一种uvm验证环境中复用c程序测试向量的方法
【技术领域】
[0001]本发明涉及芯片逻辑验证技术领域,具体地说是一种实用性强、UVM验证环境中复用C程序测试向量的方法。
【背景技术】
[0002]UVM是芯片验证业界最新研发的一种验证方法学。工程师用它可创建坚实、可重用、具互操作性的验证组件和验证平台。UVM提供基于SystemVerilog语言开发的一套库函数,工程师通过调用库可以省去自己从零开始开发验证环境的麻烦。
[0003]UVM与SystemVerilog为验证人员开发面向对象的验证环境提供了方便,但是因为此类验证方法使用时间并不太长,很多工程实际问题并没有统一明确的解决方案,比如如何从之前的基于Verilog或者基于C的验证环境无缝过度到新的验证环境。大公司都各自有不同的处理方法,小一些的设计团队,甚至畏惧新技术带来的挑战,仍然固守落后的方法,不愿意尝试效率更高,但是需要承担一些风险的方法。
[0004]很多带有微处理器的SOC设计项目所使用的传统的验证环境,是基于Verilog模型以及类似C驱动程序的测试向量组成的。C程序模拟芯片中微处理器的启动程序,启动后对芯片中个组件的寄存器进行读写操作,将实际得到的寄存器值与期望值进行比较,判断测试是否通过。仿真时,C程序被编译为2进制文件,由Verilog测试平台读入到微处理器的存储器模型中,然后处理器开始执行C代码编译出的程序,模拟芯片的行为。此类验证环境基本是UVM标准环境出现前所有SOC设计项目的通用模型。对于大一些的项目,其中的C测试程序可能会有几千个。如果我们想升级这种验证环境为新的UVM环境,必然希望复用这些C代码编写的测试程序。
[0005]UVM没有此类问题的明确解决方案,但是鉴于实现这一复用有迫切需求,我们可以将基于SystemVerilog编写的UVM验证组件的功能进行扩展,使之能够完成此功能。基于此,现提供一种UVM验证环境中复用C程序测试向量的方法。
【发明内容】
[0006]本发明的技术任务是针对以上不足之处,提供一种实用性强、UVM验证环境中复用C程序测试向量的方法。
[0007]一种UVM验证环境中复用C程序测试向量的方法,其具体实现过程为:
通过对UVM验证组件增加DPI直接程序接口,使SOC测试向量能够驱动SV语言编写的UVM验证组件,并能在UVM验证环境中被复用。
[0008]所述复用C程序测试向量的具体过程为:
对已有的C程序测试向量进行分析;
对UVM验证环境功能进行扩充;
通过DPI接口,将UVM验证环境与C程序测试向量进行集成。
[0009]所述复用C程序测试向量的详细过程为: 对已有的C程序测试向量的底层寄存器操作进行分析;
编写与C程序中寄存器操作相应的SV DPI ;
编写UVM组件中sequence调用所需的辅助函数;
在UVM顶层test中编写调用C程序测试向量的激励;
完成UVM环境与C程序测试向量的集成。
[0010]C程序驱动UVM验证环境,施加激励到被测对象,其具体过程为:
UVM验证环境启动,执行测试用例中的设备驱动测试程序;
设定SV语言验证环境与C驱动中各种变量;
调用C语言驱动程序;
C语言驱动程序对寄存器、存储空间进行读写操作;
C程序到SV语言的映射程序调用DPI ;
DPI设置SV环境中的各种变量;
在发送机构上启动device_driver_sequence,结束程序。
[0011]所述UVM环境与C程序测试向量的集成过程为:
启动 device_driver_sequence 发送 sequence 给被测对象 dut ;
UVM 中的 device_driver_sequence 启动 C 程序中的 c_device_driver ; c_device_driver调用SV DPI中的读写函数; device_driver_sequence中的读写函数发送数据给被测对象dut ;
通过以上在SV语言与C程序间的来回切换,使得C程序c_device_driver控制UVM组件中device_driver_sequence向被测对象发送数据。
[0012]所述C程序在调用SV DPI时,通过序列号记录器找到需要发送数据的sequence,并且让这个sequence发送数据,该序列号记录器为一个构建的列表,存入每个sequence的唯一序列号,当 UVM 中的 device_driver_sequence 启动 C 程序中的 c_device_driver 时,将这个序列号记录下来,而在c_device_driver的读写函数需要回调sequence的读写时,使用这个序列号查找到相应的sequence。
[0013]本发明的一种UVM验证环境中复用C程序测试向量的方法,具有以下优点:
本发明提出的一种UVM验证环境中复用C程序测试向量的方法,使得旧有的基于类似
C驱动程序的传统SOC测试向量,不必做改动,就能被集成到基于UVM验证组件搭建的验证环境中得到继续使用,节省了重新开发测试向量的时间,提高了老旧验证环境的复用效率,安全高效,实用性强,易于推广。
【附图说明】
[0014]附图1为UVM验证环境中复用C程序测试向量的结构图。
[0015]附图2为UVM验证环境中复用C程序测试向量仿真进程图。
[0016]附图3为UVM顶层test的代码图。
[0017]附图4 为 device_driver_sequence 启动 C 程序中的 c_device_driver 代码图。
[0018]附图5为c_device_driver中启动SV DPI读写程序。
[0019]附图6 为 device_driver_sequence 中的读写程序。
[0020]附图7为查找sequence的序列号记录器。
【具体实施方式】
[0021]下面结合附图和具体实施例对本发明作进一步说明。
[0022]本发明提供一种UVM验证环境中复用C程序测试向量的方法,如附图1、图2所示,其具体实现过程为,
通过对UVM验证组件增加DPI直接程序接口,使SOC测试向量能够驱动SystemVerilog编写的UVM验证组件,并能在UVM验证环境中被复用。
[0023]所述复用C程序测试向量的具体过程为:
对已有的C程序测试向量进行分析;
对UVM验证环境功能进行扩充;
通过DPI接口,将UVM验证环境与C程序测试向量进行集成。
[0024]所述复用C程序测试向量的详细过程为:
对已有的C程序测试向量的底层寄存器操作进行分析;
编写与C程序中寄存器操作相应的SV DPI ;
编写UVM组件中sequence调用所需的辅助函数;
在UVM顶层test中编写调用C程序测试向量的激励;
完成UVM环境与C程序测试向量的集成。
[0025]C程序驱动UVM验证环境,施加激励到被测对象,其具体过程为:
UVM验证环境启动,执行测试用例中的设备驱动测试程序;
设定SV语言验证环境与C驱动中各种变量;
调用C语言驱动程序;
C语言驱动程序对寄存器、存储空间进行读写操作;
C程序到SV语言的映射程序调用DPI ;
DPI设置SV环境中的各种变量;
在发送机构上启动 device_driver_sequence,执行 device_driver_test 的 run_phase,结束程序。
[0026]所述UVM环境与C程序测试向量的集成过程为:
启动device_driver_sequence发送sequence给被测对象dut,该步骤可通过编码实现,代码如附图3所示;
UVM中的device_driver_sequence启动C程序中的c_device_driver,该步骤可通过编码实现,代码如附图4所示;
c_device_driver调用SV DPI中的读写函数,该步骤可通过编码实现,代码如附图5所示;
device_driver_sequence中的读写函数发送数据给被测对象dut,该步骤可通过编码实现,代码如附图6所示;
通过以上在SV语言与C程序间的来回切换,使得C程序c_device_driver控制UVM组件中device_driver_sequence向被测对象发送数据。
[0027]之所以有以上多次的频繁切换,是由于UVM验证环境是由SystemVerilog语言实现,而一般SOC驱动程序由C程序实现,这2种程序是无法使用同一编译器进行统一编译的。但是环境中必须使这2种程序配合同步执行。C程序与SystemVerilog间程序最方便的接口就是DPI (直接程序接口),我们必须有效使用这个接口,使2种程序能够配合执行,使已有的C驱动程序能够驱动UVM环境中的序列,实现对之前环境的有效复用。
[0028]当然,这里还有一个问题,就是如何让C程序在调用SV DPI时,能够找到那个需要发送数据的sequence,并且让这个正确的sequence发送数据。这里需要构建一个列表,存入每个sequence的唯一序列号,当UVM中的device_driver_sequence启动C程序中的c_device_driver时,将这个序列号记录下来,而在c_device_driver的读写函数需要回调sequence的读写时,使用这个序列号查找到那个相应的sequence既可。这里为了实现这个功能,编写了一个专门的序列号记录器,该序列号记录器可通过编码实现,代码如附图7所示。其中set功能将pid号码记录在表中,get功能通过这个pid找到相应的sequence。
[0029]通过以上的功能扩展,一个标准的UVM组件就可以被一个标准的C驱动程序所驱动,能够实现遗留的测试向量在新的验证环境中被复用了。
[0030]上述【具体实施方式】仅是本发明的具体个案,本发明的专利保护范围包括但不限于上述【具体实施方式】,任何符合本发明的一种UVM验证环境中复用C程序测试向量的方法的权利要求书的且任何所述技术领域的普通技术人员对其所做的适当变化或替换,皆应落入本发明的专利保护范围。
【主权项】
1.一种UVM验证环境中复用C程序测试向量的方法,其特征在于,其具体实现过程为:通过对UVM验证组件增加DPI直接程序接口,使SOC测试向量能够驱动SV语言编写的UVM验证组件,并能在UVM验证环境中被复用。2.根据权利要求1所述的一种UVM验证环境中复用C程序测试向量的方法,其特征在于,所述复用C程序测试向量的具体过程为: 对已有的C程序测试向量进行分析; 对UVM验证环境功能进行扩充; 通过DPI接口,将UVM验证环境与C程序测试向量进行集成。3.根据权利要求2所述的一种UVM验证环境中复用C程序测试向量的方法,其特征在于,所述复用C程序测试向量的详细过程为: 对已有的C程序测试向量的底层寄存器操作进行分析; 编写与C程序中寄存器操作相应的SV DPI ; 编写UVM组件中sequence调用所需的辅助函数; 在UVM顶层test中编写调用C程序测试向量的激励; 完成UVM环境与C程序测试向量的集成。4.根据权利要求3所述的一种UVM验证环境中复用C程序测试向量的方法,其特征在于,C程序驱动UVM验证环境,施加激励到被测对象,其具体过程为: UVM验证环境启动,执行测试用例中的设备驱动测试程序; 设定SV语言验证环境与C驱动中各种变量; 调用C语言驱动程序; C语言驱动程序对寄存器、存储空间进行读写操作; C程序到SV语言的映射程序调用DPI ; DPI设置SV环境中的各种变量; 在发送机构上启动device_driver_sequence,结束程序。5.根据权利要求3或4所述的一种UVM验证环境中复用C程序测试向量的方法,其特征在于,所述UVM环境与C程序测试向量的集成过程为: 启动 device_driver_sequence 发送 sequence 给被测对象 dut ; UVM 中的 device_driver_sequence 启动 C 程序中的 c_device_driver ; c_device_driver调用SV DPI中的读写函数; device_driver_sequence中的读写函数发送数据给被测对象dut ; 通过以上在SV语言与C程序间的来回切换,使得C程序c_device_driver控制UVM组件中device_driver_sequence向被测对象发送数据。6.根据权利要求5所述的一种UVM验证环境中复用C程序测试向量的方法,其特征在于,所述C程序在调用SV DPI时,通过序列号记录器找到需要发送数据的sequence,并且让这个sequence发送数据,该序列号记录器为一个构建的列表,存入每个sequence的唯一序列号,当UVM中的device_driver_sequence启动C程序中的c_device_driver时,将这个序列号记录下来,而在c_device_driver的读写函数需要回调sequence的读写时,使用这个序列号查找到相应的sequence。
【专利摘要】本发明公开了一种UVM验证环境中复用C程序测试向量的方法,其具体实现过程为:通过对UVM验证组件增加DPI直接程序接口,使SOC测试向量能够驱动SV语言编写的UVM验证组件,并能在UVM验证环境中被复用。该UVM验证环境中复用C程序测试向量的方法与现有技术相比,可使得旧有的基于类似C驱动程序的传统SOC测试向量,不必做改动,就能被集成到基于UVM验证组件搭建的验证环境中得到继续使用,节省了重新开发测试向量的时间,提高了老旧验证环境的复用效率。
【IPC分类】G06F11/36
【公开号】CN104899138
【申请号】CN201510269858
【发明人】耿介, 于治楼, 毕研山
【申请人】浪潮集团有限公司
【公开日】2015年9月9日
【申请日】2015年5月25日