UVM复习

Posted by Kion on February 12, 2020
uvm_transaction, uvm_seq_item,uvm_object,uvm_component

3TUsDH.md.png

都是uvm中的类,uvm_object是其中最基本的类,其他根源上来说都是派生于次;uvm_transaction也是一个类,和uvm_object一样是个虚类;uvm_seq_item派生自ufm_transaction,在基础上添加了了一些属性和方法,便于对DUT中传输的数据进行建模;uvm_component是uvm提供的用于构建验证组件的基本类,派生出uvm_driver,agent等等,提供了很多方便的属性和方法,便于搭建验证平台。

3Twga9.png

virtual sequencer / sequencer

virtual sequencer与agent没有关系,不在任何一个agent里,独立处于env中,作用是调度不同sequencer。在多接口的情况下,会用到virtual sequencer。

使用UVM的优点
  1. 利用自带的基类,便于创建各种验证组件,搭建验证平台。
  2. 搭建的验证平台重用性,扩展性很好,便于维护。
  3. 通用的验证方法,便于其他验证平台移植,或相关人员学习。
能否自定义phase

可以。`uvm_user_task_phase。

为什么需要寄存器模型

利用寄存器模型可以模拟DUT中的寄存器,让寄存器读写都交给寄存器模型完成,方便验证平台获取寄存器中的值。uvm中提供的寄存器模型类库,让寄存器读写变得非常方便。否则,验证平台与寄存器直接进行访问,非常繁琐,要生成sequence,让driver驱动,对于寄存器数目众多时,这种直接访问工作量巨大。

new() / create()

前者是普通的构造实例的方式,后者是利用factory机制,便于重载,提高了可重用性。

analysis port

uvm中的一种TLM端口,是一种广播端口,可以一对多,同时不存在阻塞与非阻塞的概念。

TLM FIFO

就是处于不同组件之间的用于事务传输的通道,遵循先进先出原则。比如monitor和scoreboard。

sequence 如何启动

seq.start(sqr);`uvm_do(seq);default_sequence。

寄存器的前门访问和后门访问

前门是模拟CPU通过操作总线读写寄存器的方式;后门访问是直接利用层次化的引用进行操作。前门访问消耗时间,后面访问没有。

objection

objection是一种检测task phase是否运行的机制。进入task phase后,会首先检测是否有objection被提起,没有就直接结束,有则运行phase,知道objection被撤销。

Factory 机制

factory 机制是一种便于重载类的机制。通过将类注册到factory中,方便类的重载,而不需要修改类的代码。

sequencer 的类型

uvm_sequencer:driver发出请求,sqr启动seq发送事务,driver接受。

uvm_push_sequencer:sqr启动seq,发送事务,但是driver可以在未准备好时拒绝接收。

override types

instance by type/name, type, name

为什么build 和 final phase是top-down

build phase用来构造组件,显然要自上而下一层层构造,否则就会带来错误;final phase之所以也要自上而下,是因为需要一个顶层的final phase控制底下各个组件的结束行为。

uvm_rescoure_db / uvm_config_db

后者派生自前者;后者遵循层次优先,前者遵循先后原则。前者通常用于program/module中,后者用于类里。