UVM学习记录

1、Soc/ASIC/FPGA验证有什么区别

2、验证策略:白盒验证、灰盒验证、黑盒验证

白盒验证:设计细节对验证者是完全可见的

灰盒验证:设计细节对验证者部分可见

黑盒验证:设计细节对验证者不可见

3、factory机制

factory机制的目的是在不改变代码的情况下实现不同对象的替换。它主要通过两张表来实现,第一张表是注册表,记录了所有注册的类;第二张表是替换表,记录了哪些类替换了哪些类。当初始化某个类的实例时,factory机制会检查该类是否被替换了,如果被替换的话,则调用替换类的new函数实例化对象。使用factory机制的前提有以下几点:

-无论是重载的类还是被重载的类,都需要在类定义时注册到factory机制中。

-被重载的类在实例化时,要使用factory机制式的实例化方式,而不能使用传统的new方式

-重载的类必须派生自被重载的类

4、信息服务机制

uvm内置打印语句有四种严重性,`uvm_info,`uvm_warning,`uvm_error和`uvm_fatal,这四种严重性之间可以互相重载。

uvm_info的冗余度有UVM_NONE,UVM_LOW,UVM_MEDIUM,UVM_HIGH等

5、configuration机制

可以用来传递值、对象和interface,增加了平台的可重用性。它支持通配符和正则表达式,可对多个变量进行配置;支持用户自定义的数据类型;可以在仿真运行的过程中进行配置。

configuration的机制由两部分组成,设置配置资源和获取配置资源。设置的配置资源被存放在uvm资源池中(通过set函数实现),然后在适当的地方获取配置资源(通过get函数实现),先设置后获取。

6、sequence机制:sequence、sequencer和driver是如何协作的?

①sequence产生的事务发送给相应的sequencer,然后等待driver返回完成标志才开始下一个事务的产生

②sequencer将收到的事务存在fifo中,当收到driver发来的事务请求时,将fifo中的事务发送给driver

③driver处理收到的事务,处理完成后向sequencer发送一个完成标识

④sequencer将收到的完成标识转发给sequence,于是sequence开始下一轮的事务产生周期

7、advanced sequence

sequence library:本质是sequence类,包含了一组在其内部注册了的sequence类。在定义sequence时,使用`uvm_add_to_lib()宏将其注册到sequence_library中。sequence library和普通的sequence有以下的区别:

-其他sequence可以向sequence library注册

-可根据配置产生并且执行已经在其内部注册过的sequence

-具有多种内嵌的选择sequence的方法

-支持用户自定义的sequence算法

-注册方式的多样化

8、常用的uvm_do系列宏

-`uvm_do(SEQ_OR_ITEM):实例化一个事务,并将其随机化,最终将其送给seqr

-`uvm_do_pri(SEQ_OR_ITEM,PRIORITY):额外配置事务的优先级

-`uvm_do_with(SEQ_OR_ITEM,CONSTRAINTS):额外对事务进行约束

-`uvm_do_pri_with(SEQ_OR_ITEM,PRIORITY,CONSTRAINTS)

-`uvm_do_on(SEQ_OR_ITEM,SEQR):显示地指定使用哪个seqr发送此事务,在不指定的情况下默认使用启动seq时指定的seqr

-`uvm_do_on_pri(SEQ_OR_ITEM,SEQR,PRIORITY)

-`uvm_do_on_with(SEQ_OR_ITEM,SEQR,CONSTRAINTS)

-`uvm_do_on_pri_with(SEQ_OR_ITEM,SEQR,PRIORITY,CONSTRAINTS)

*uvm_create宏与uvm_send宏也可以共同使用用来产生事务。uvm_create宏的作用是实例化事务,然后可以对事务做自定义的处理,之后再通过uvm_send宏发送出去。

*uvm_do宏主要封装了哪些内容?

tr = new("tr");//初始化事务
start_item(tr);
assert(tr.randomize()with{...});//随机化事务
finish_item(tr);

9、TLM:Transaction Level Model,事务级建模,为某种事务项建立专门的通信通道,避免多种通信之间出现混乱。

上图中介绍了6种常用的port端口,其中括号中的T代表transaction,即传输的数据对象类型。箭头表示端口包含了哪些方法。
-put()是一个task,可能会阻塞当前进程直到transaction传输成功;
-try_put()是一个function,不会阻塞当前进程,不管transaction传输是否完成都会立刻返回;
-can_put()是一个function,不会阻塞当前进程,不会发生transaction传输,只是检查对方是否准备好了接收;

-get()是一个task,会阻塞当前进程直到成功获取了一个transaction之后返回;
-try_get()是一个function,不会阻塞当前进程而立即返回,获取transaction可能会失败;
-can_get()是一个function,不会阻塞当前进程,不会发生transaction传输,只是检查对方是否准备好发送transaction。

上图列出了6种常用的imp端口,与6种port端口一一对应。其中括号中的参数T表示transaction,参数IMP表示实现这个接口的component。imp中的put方法原型如下,get方法与其类似:

//put方法原型
virtual task put(input T t);
    uvm_report_error("put",`UVM_TASK_ERROR,UVM_NONE)
endtask

//try_put方法原型
virtual function bit try_put(input T t);
    uvm_report_error("try_put",`UVM_TASK_ERROR,UVM_NONE)
    return 0;
endfunction

//can_put方法原型
virtual function bit can_put();
    uvm_report_error("can_put",`UVM_TASK_ERROR,UVM_NONE)
    return 0;
endfunction

在PORT,EXPORT和IMP三种端口类型中,IMP的优先级最低,PORT的优先级最高,通信操作只能由高优先级的端口向低优先级端口发起,且链接的终点必须是IMP。IMP所在的类中需要重载名为put或get的函数,具体的函数由IMP的类型决定。

*还存在analysis_port和analysis_export端口,它们与上述port和export端口的区别是:
第一:这两种端口可以与多个IMP(analysis_imp)连接,类似于广播,是一对多的通信,而port和get是一对一的通信(除非在实例化时制定可以连接的数量)。
第二:put和get系列端口都有阻塞和非阻塞的区分,但是对于analysis_port和analysis_export端口来说没有阻塞和非阻塞的概念。

analysis_imp所在的组件中必须要定义名为write的函数。

*平台中经常使用fifo通信(uvm_analysis_fifo),它的本质是一块缓存加上两个IMP。

10、callback机制

callback机制的作用是提高验证平台的可重用性,使得某个组件在不同的用例中能执行不同的操作,post_randomize(),pre_body(),post_body()等都属于广义的callback函数。 

原理:在某个组件中调用了callback类的pre()函数,我们希望在不同的用例中该函数实现的内容也不一样。 解决方法是定义一个基类,在基类中定义虚的pre()函数,同时定义一个以该类为元素的数组(该数组需是全局的) 。  在用例中自定义继承自基类的callback类,对pre()函数进行重载,并将实例化的callback对象添加到全局变量数组中。在组件中会遍历数组,将所有实例化的对象的pre()函数都调用一遍。

11、寄存器模型RAL

UVM的寄存器模型是一组高级抽象的类,用来对DUT中具有地址映射的寄存器和存储器进行建模。它非常贴切的反映DUT中寄存器的各种特性,可以产生激励作用于DUT并进行寄存器功能检查。通过UVM的寄存器模型,可以简单高效的实现对DUT的寄存器进行前门或后门操作。它本身也提供了一些寄存器测试的sequence,方便用户直接使用。
————————————————
版权声明:本文为CSDN博主「wonder_coole」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wonder_coole/article/details/91879378

①frontdoor模式:寄存器模型产生事务,通过driver将事务驱动到总线上来对寄存器进行操作,需要消耗仿真时间

②backdoor模式:寄存器模型通过dut的层次结构直接对寄存器进行操作,不消耗仿真时间

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值