UVM的factory机制】的更多相关文章

在UVM中使用工厂模式基本上分为三个步骤: 1. 注册 当定义一个类的时候,它的类型必须要注册,UVM已经提供了专用的宏. `uvm_component_utils(class_type_name) `uvm_component_param_utils(class_type_name #(params)) `uvm_object_utils(class_type_name) `uvm_object_param_utils(class_type_name #(params)) 这四个宏中两个是为参…
UVM中的factory机制一般用在sequence的重载,尤其是virtual sequence.当Test_case变化时,通过virtual sequence的重载,可以很容易构建新的测试. 因为virtual可以控制选择sequence,sequence的启动,执行顺序等. 在build_phase阶段,不需要改变default_sequence,不需要改变别处代码. Transaction的重载,可以在不改变sequence,default_sequence的情况下,改变Transac…
uvm的factory机制,通过实例一个static类型default factory,并且通过宏将所有例化extend出来的object,component register到该factory的内部变量中:所以有了可以override的条件: register通过注册一个proxy,该proxy是一个参数化的class,实现对被代理class的create: uvm_component_registry,是对uvm_component的proxy基类,目标component通过定义一个参数化的…
上一节给出了一个只有driver.使用UVM搭建的验证平台.严格来说这根本就不算是UVM验证平台,因为UVM的特性几乎一点都没有用到.像上节中my_driver的实例化及drv.main_phase的显式调用,即使不使用UVM,只使用简单的SystemVerilog也可以完成.本节将会为读者展示在初学者看来感觉最神奇的一点:自动创建一个类的实例并调用其中的函数(function)和任务(task). 要使用这个功能,需要引入UVM的factory机制: 代码清单 2-7 文件:src/ch2/s…
首先在Systemverilog中便有对于重载的最基本的支持. 1)定义task/function时,使用virtual关键字.那之后在test_case中调用时,便使用句柄指向的对象的类型而不是句柄的类型来调用task/function. 好处:bird为基类,parrot为扩展类.bird类型的句柄可以指向parrot类型的对象,(进而在这种情况下,这个句柄可以直接赋值给parrot句柄) 当这样的一个句柄调用bird和parrot都有的task.function时,带virtual关键字的…
override功能是UVM中一个比较重要的功能,这个功能也是在factory里面实现的,我们会在env或者具体的case中使用override功能. class case_x extends base_test;     function void build_phase(uvm_phase phase);        -        set_type_override_by_type(my_driver::get_type(), new_driver::get_type());    …
factory机制的一大特点就是根据类的名字来创建类的实例. factory 机制中根据类名来创建类的实例所用到的技术:一是参数化的类,二是静态变量和静态函数.这两者是factory机制实现的根本所在. UVM 中有两大关键类,uvm_object 和 uvm_component.一个 uvm_object 在定义时一般要调用 uvm_object_utils 宏,而一个 uvm_component 在定义时要调用uvm_component_utils宏.factory所有的操作都通过这两个宏来…
从名字上面就知道,uvm_factory用来制造uvm_objects和component.在一个仿真过程中,只有一个factory的例化存在. 用户定义的object和component types通过typedef或者宏在factory中注册,factory产生和保存轻量级的代理(proxy):   1.  uvm_object_registry #(T,Tname) for objects    2.  uvm_component_registry #(T,Tname) for compo…
1.UVM提供了print_override_info 帮助debug.以上节new_monitor 为例: 2.调用print_override_info : 结果: 实际调用debug_create_by_name. 3.还提供debug_create_by_type,原型: 1)应用: 输出与上面同样. 4.uvm_factory 还提供print 函数.原型: 1)參数可能为0,1,2.0打印最少,2打印最多. 5.uvm_root 的print_topology 打印UVM 树的拓扑结…
1.create_object_by_name,依据类名字创建object,原型: 一般仅仅用第一个: 2.create_object_by_type.依据类型创建一个object,原型: 一般仅仅用第一个: 3.create_component_by_name,依据类名创建一个component,原型: 1)第一个类名. 2)第二个父节点全名. 3)第三个新的component名字. 4)第四个父节点指针. 4个都要用: 一般在component 的new 或者build_phase 中使用.…
Callback机制,其实是使用OOP来实现的一种程序开发者向程序使用者提供的模块内部的接口.可以在Test_case的高度改变其他component的一些行为. Systemverilog中已经提供的Callback函数pre_randomize,post_randomize.对于UVM和VIP来说,其他的CallBack函数都是自己程序的开发者事先 留下的hook. Callback的实现: 1)首先直接从component扩展出新的类来实现pre_do等function不可取.因为comp…
原文地址:http://bbs.eetop.cn/viewthread.php?tid=452518&extra=&authorid=828160&page=1 在新的项目中再次用到了UVM,距离上次项目自己写UVM代码已经快一年,所以很多UVM的细节东西自己也记不太清楚了,只能记得UVM各个点的主线,这次重拾UVM,又重点看到了factory部分,所以就在此mark一下,做个笔记. 在记录中肯定有不对和偏颇的地方,一个人的看法毕竟有死角,所以看到不会的地方请大家及时拍砖和轻喷.…
在现代IC设计流程中,当设计人员根据设计规格说明书完成RTL代码之后,验证人员开始验证这些代码(通常称其为DUT,Design Under Test).验证工作主要保证从设计规格说明书到RTL转变的正确性,它包括但不限于以下几点: DUT的行为表现是否与设计规格说明书中的要求一致 DUT是否实现了设计规格说明书中的所有功能 DUT对于异常状况的反应是否与设计规格说明书中的一致 DUT是否足够稳健,能够从异常状态恢复到正常的工作模式 图1 验证发现DUT中的bug 随着芯片规模的增大,验证占整个芯…
UVM中的类包括:基类(base)------------uvm_void/uvm_object/uvm_transaction/uvm_root/uvm_phase/uvm_port_base 报告(reporting)--------uvm_report_object/uvm_report_handler/uvm_report_server/uvm_report_catcher Factory---------uvm_*_register/uvm_factory 配置(config)----…
tb_top是整个UVM验证平台的最顶层:tb_top中例化dut,提供时钟和复位信号,定义接口以及设置driver和monitor的virual interface,在intial中调用run_test() UVM入口函数.在基于uvm_test扩展出base_test,根据测试用例再基于base_test扩展出各种各样的test.在扩展后的test中call sequence. 在base_test中实例化env, env_config, 打印验证平台的拓扑结构uvm_top.print_t…
Abstract 本文介绍UVM框架,并以crc7为例进行UVM的验证,最后指出常见的UVM验证开发有哪些坑,以及怎么避免. Introduction 本例使用环境:ModelSim 10.2c,UVM-1.1d,Quartus II 13.1(64 bit),器件库MAX V 1. UVM介绍 对UVM结构熟悉的读者可跳过本节. 叫UVM“框架”可能并不确切(只是便于理解,可类比软件界的“框架”).UVM全称为通用验证方法论.在硬件开发过程中,验证是十分重要的环节.可以说,左手开发,右手验证.…
reference:https://www.cnblogs.com/bettty/p/5285785.html Abstract 本文介绍UVM框架,并以crc7为例进行UVM的验证,最后指出常见的UVM验证开发有哪些坑,以及怎么避免. Introduction 本例使用环境:ModelSim 10.2c,UVM-1.1d,Quartus II 13.1(64 bit),器件库MAX V 1. UVM介绍 对UVM结构熟悉的读者可跳过本节. 叫UVM“框架”可能并不确切(只是便于理解,可类比软件…
原文地址:http://bbs.eetop.cn/viewthread.php?tid=383872&extra=&authorid=828160&page=1 我相信很多朋友都在坛子里下载过一份<UVM1.1应用指南和源代码分析>的资料,我很佩服这位前辈,我也从中收益匪浅,但是可惜在讲解phase的时候对一些初学者来说有些东西跳跃性有点大,更主要的是没有用一个稍微全面而复杂的例子来进行进一步的总结,让读者知道在实际项目中如何构建一个user-defined的phase…
1)如何避免绝对路径的出现:绝对路径一般都是用在信号的连接关系上,这样可以用virtual interface,来通过句柄的赋值来动态的建立连接关系.那么顶层模块怎么 样将interface的句柄赋值给driver/monitor,通过config_db,必须显式的指出路径完成句柄赋值.而且config_db是一个参数化的 类,参数类型是要传输的类型.set和get是两个静态function.一般放在test的initial过程块中或其他build_phase完成参数配置. 2)objectio…
uvm_void The uvm_void class is the base class for all UVM classes. uvm_object: The uvm_object class is the base class for all UVM data and hierarchical classes. uvm_object是一个uvm中data和component共同的基类,里边集成了很多东西如recorder,reporter等,还定义了许多公用的接口.该类继承自uvm_vo…
UVM的Messages机制有些时候很繁琐,很多时候希望能够在UVM messages的基础上做一些个人化的订制,这里给出来一个找到的例子作为参考. my_macros.sv:    `define my_info(MSG, VERBOSITY) \       begin \          if(uvm_report_enabled(VERBOSITY,UVM_INFO,get_full_name())) \             uvm_report_info(get_full_nam…
在验证平台中加入reference model.scoreboard等之前,思考一个问题:假设这些组件已经定义好了,那么在验证平台的什么位置对它们进行实例化呢?在top_tb中使用run_test进行实例化显然是不行的,因为run_test函数虽然强大,但也只能实例化一个实例:如果在top_tb中使用2.2.1节中实例化driver的方式显然也不可行,因为run_test相当于在top_tb结构层次之外建立一个新的结构层次,而2.2.1节的方式则是基于top_tb的层次结构,如果基于此进行实例化…
uvm的report机制,主要涉及uvm_report_object,uvm_report_handle,uvm_report_server这三个类: uvm_report_object主要是提供uvm_report的接口函数, uvm_report_handle主要根据message的configuration,来将message传输到显示模块, uvm_report_server主要实现具体的显示功能,文件读写功能, 一个report的组成部分:id string,severity(四种se…
现在让我们回过头来想想factory 是用来干什么,它做了什么? fantory就是生产uvm_object 和 uvm_component.用factory 生产和用SV直接new有什么区别了? factory机制的的特点就是根据类的名字来创建类的实例. uvm_object 在定义时调用 uvm_object_utils 宏,而 uvm_component 在定义时要调用uvm_component_utils宏. factory所有的操作都通过这两个宏来完成. 上节说到了create_obj…
factory 机制是实现(功能):通过一个字符串来创建此字符串所代表的的类的一个实例. //------------------------------------------------------------------------------ // // Group: Usage // // Using the factory involves three basic operations // // 1 - Registering objects and components type…
代码的书写顺序会影响代码的实现,在不同的时间做不同的事情,这是UVM phase的设计哲学,UVM phase提供了一个通用的TB phase 解决方案.支持显示的隐式的同步方案,运行时刻的线程控制和跳转.只要把代码填入对应的phase,这些代码就会自动执行.phase 的引入在很大程度上解决了代码顺序杂乱可能会引发的问题.它本质上是通过把代码顺序强制固定来实现这个目的的,如 build_phase 的代码一定在connect_phase之前执行 ,而 connect_phase的代码一定在 e…
uvm 中的信息报告机制相对来说比较简单,功能上来说主要分为两部分: 第一通过ID对component的信息报告冗余级别进行控制,针对每个冗余级别进行不同的行为控制.这部分工作主要由uvm_report_hander来实现:      主要涉及到的方法有get_report_verbosity_level(severity, id)/get_report_action(severity,id) == uvm_action'(UVM_NO_ACTION) 第二是对message进行格式化的输出,这…
后面的例子我会继续补充: 1. 因为uvm默认定义的message格式比较长,非常不利于debug过程中的分析使用,一般情况下,开始使用uvm,都要利用uvm_report_server重新定义message输出的格式.下面给出一个例子:用于将name和ID限定在同一个width. class my_report_server extends uvm_report_server;   int name_width = 20;   int id_width   = 20;     function…
1. 类: 面向对象基础传统的面向对象编程与systemverilog类的特点,类的定义,成员与方法,构造函数,对象的复制和深/浅拷贝,父类/子类关系,类的继承,作用域的规则,对象的句柄以及赋值,方法的扩展和重写,local/protected关键字,虚基类,虚方法,虚接口. 2. UVM基础 :UVM的发展历史,可配置的测试组件,类库结构,UVM核心基类的介绍,include/macro,UVM交易(data),基本测试组件 (testbench components),组件的phase结构,…
在2.3.3节中引入my_mointor时,在my_transaction中加入了my_print函数: 在2.3.5节中引入reference model时,加入了my_copy函数: 在2.3.6节引入scoreboard时,加入了my_compare函数. 上述三个函数虽然各自不同,但是对于不同的transaction来说,都是类似的:它们都需要逐字段地对transaction进行某些操作. 那么有没有某种简单的方法,可以通过定义某些规则自动实现这三个函数呢?答案是肯定的.这就是UVM中的…