您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 利用Systemverilog+UVM搭建SOC及ASIC的RTL验证环境
1基于SV+UVMSV+UVMSV+UVMSV+UVM搭建SOC/ASICSOC/ASICSOC/ASICSOC/ASIC验证平台UVM-1.1中提供了一个UBUS的例子,但是该例子对于刚刚入门的人来说还是需要一定时间去消化的,本文对该例子进行一步一步的简化,可以帮助理解。[1-[1-[1-[1-1111]]]]如何顺序的写UVMUVMUVMUVM平台(1111)-Basic-Basic-Basic-Basic1.平台可以在前期规划好,但是对于搭建平台的人来说,调试永远是最大的问题,如果都将一个个component都写完了,调试起来还是有点痛苦的,所以我更倾向于一步一步的调试平台;先写一个可以pass的基本平台,然后在不断的扩展该平台,最后在各个component中加入所需要的function或者task。当然,当对搭建平台数量以后,现在基本对平台中的component一次性搭建完成,然后调试并添加需要的function或者task即可。2.最简单的UVM平台,一个interface,一个DUT,一个TOP,一个test,一个ENV就可以工作了,然后慢慢的添加各个component;3.写interface4.写topmodule,在top中例化DUT,interface和DUT在top中includeuvm_config_db#(virtualuvm_config_db#(virtualuvm_config_db#(virtualuvm_config_db#(virtualubus_if)::set(uvm_root::get(),ubus_if)::set(uvm_root::get(),ubus_if)::set(uvm_root::get(),ubus_if)::set(uvm_root::get(),*,*,*,*,vif,vif,vif,vif,vif);vif);vif);vif);2run_test();run_test();run_test();run_test();5.写Makefile,此时编译可以通过6.写自定义的package,然后在top中include该packagetypedeftypedeftypedeftypedefuvm_config_db#(virtualuvm_config_db#(virtualuvm_config_db#(virtualuvm_config_db#(virtualubus_if)ubus_if)ubus_if)ubus_if)ubus_vif_config;ubus_vif_config;ubus_vif_config;ubus_vif_config;typedeftypedeftypedeftypedefvirtualvirtualvirtualvirtualubus_ifubus_ifubus_ifubus_ifubus_vif;ubus_vif;ubus_vif;ubus_vif;后来证明,这两句话在ubusubusubusubus的envenvenvenv中根本没有用上;7.定义Environment,并将该文件加入到自定义的package中,这个时候编译不能通过此处的getgetgetget和toptoptoptop中的setsetsetset是一对,如果toptoptoptop中没有setsetsetset则会报告·uvm_fataluvm_fataluvm_fataluvm_fatal中的错误if(!uvm_config_db#(virtualif(!uvm_config_db#(virtualif(!uvm_config_db#(virtualif(!uvm_config_db#(virtualubus_if)::get(this,ubus_if)::get(this,ubus_if)::get(this,ubus_if)::get(this,,,,,vif,vif,vif,vif,vif))vif))vif))vif))`uvm_fatal(NOVIF,{virtual`uvm_fatal(NOVIF,{virtual`uvm_fatal(NOVIF,{virtual`uvm_fatal(NOVIF,{virtualinterfaceinterfaceinterfaceinterfacemustmustmustmustbebebebesetsetsetsetfor:for:for:for:,get_full_name(),.vif});,get_full_name(),.vif});,get_full_name(),.vif});,get_full_name(),.vif});8.定义base_test,需要在top中include该test文件,并在makefile中加入编译该test的命令;此时可以再次编译通过,并运行最basic的testcase3编译第一次通过总结一:在一个芯片的验证平台中,总会给一个最basicbasicbasicbasic的base_testbase_testbase_testbase_test,但是可能每个人负责验证的部分是不一样的,比如说我要验证USBUSBUSBUSB,那我一定会从base_testbase_testbase_testbase_test中派生一个usb_base_testusb_base_testusb_base_testusb_base_test来给自己用,这样我可以在usb_base_testusb_base_testusb_base_testusb_base_test加入任何我想要的函数,而不会影响到其他人。总结二:如何从testtesttesttest中传递参数到top_tb,top_tb,top_tb,top_tb,如果用uvm_config_dbuvm_config_dbuvm_config_dbuvm_config_db在base_testbase_testbase_testbase_test中设置变量的值,那么这些变量在environment/agent/dirverenvironment/agent/dirverenvironment/agent/dirverenvironment/agent/dirver等等中可以getgetgetget到的,但是在top_tbtop_tbtop_tbtop_tb中不能getgetgetget到的?采用下面的方式就可以uvm_config_dbuvm_config_dbuvm_config_dbuvm_config_db#(int)::set(null,uvm_test_top,set_#(int)::set(null,uvm_test_top,set_#(int)::set(null,uvm_test_top,set_#(int)::set(null,uvm_test_top,set_usbusbusbusb_single_test,1);_single_test,1);_single_test,1);_single_test,1);总结三:需要注意的是,不要把定义interfaceinterfaceinterfaceinterface的文件includeincludeincludeinclude在packagepackagepackagepackage中,这会导致编译不过的。4总结四:uvm_report_infouvm_report_infouvm_report_infouvm_report_info和宏`uvm_info`uvm_info`uvm_info`uvm_info在用法是没有区别的,都是用来打印消息的。[1-[1-[1-[1-2222]]]]如何顺序的写UVMUVMUVMUVM平台(2222)-MasterAgent-MasterAgent-MasterAgent-MasterAgent9.定义sequenceitem,注意,一种类型的transaction需要对应一个driver;`uvm_object_utils_begin(ubus_transfer)`uvm_object_utils_begin(ubus_transfer)`uvm_object_utils_begin(ubus_transfer)`uvm_object_utils_begin(ubus_transfer)`uvm_field_int`uvm_field_int`uvm_field_int`uvm_field_int(addr,(addr,(addr,(addr,UVM_DEFAULT)UVM_DEFAULT)UVM_DEFAULT)UVM_DEFAULT)`uvm_field_enum`uvm_field_enum`uvm_field_enum`uvm_field_enum(ubus_read_write_enum,(ubus_read_write_enum,(ubus_read_write_enum,(ubus_read_write_enum,read_write,read_write,read_write,read_write,UVM_DEFAULT)UVM_DEFAULT)UVM_DEFAULT)UVM_DEFAULT)`uvm_field_int`uvm_field_int`uvm_field_int`uvm_field_int(size,(size,(size,(size,UVM_DEFAULT)UVM_DEFAULT)UVM_DEFAULT)UVM_DEFAULT)`uvm_field_array_int(data,`uvm_field_array_int(data,`uvm_field_array_int(data,`uvm_field_array_int(data,UVM_DEFAULT)UVM_DEFAULT)UVM_DEFAULT)UVM_DEFAULT)`uvm_field_array_int(wait_state,`uvm_field_array_int(wait_state,`uvm_field_array_int(wait_state,`uvm_field_array_int(wait_state,UVM_DEFAULT)UVM_DEFAULT)UVM_DEFAULT)UVM_DEFAULT)`uvm_field_int`uvm_field_int`uvm_field_int`uvm_field_int(error_pos,(error_pos,(error_pos,(error_pos,UVM_DEFAULT)UVM_DEFAULT)UVM_DEFAULT)UVM_DEFAULT)`uvm_field_int`uvm_field_int`uvm_field_int`uvm_field_int(transmit_delay,(transmit_delay,(transmit_delay,(transmit_delay,UVM_DEFAULT)UVM_DEFAULT)UVM_DEFAULT)UVM_DEFAULT)`uvm_field_string`uvm_field_string`uvm_field_string`uvm_field_string(master,(master,(master,(master,UVM_DEFAULT|UVM_NOCOMPARE)UVM_DEFAULT|UVM_NOCOMPARE)UVM_DEFAULT|UVM_NOCOMPARE)UVM_DEFAULT|UVM_NOCOMPARE)`uvm_field_string`uvm_field_string`uvm_field_string`uvm_field_string(slave,(slave,(slave,(slave,UVM_DEFAULT|UVM_NOCOMPARE)UVM_DEFAULT|UVM_NOCOMPARE)UV
本文标题:利用Systemverilog+UVM搭建SOC及ASIC的RTL验证环境
链接地址:https://www.777doc.com/doc-4683204 .html