码迷,mamicode.com
首页 > 其他好文 > 详细

uvm学习杂记

时间:2018-01-22 00:07:20      阅读:537      评论:0      收藏:0      [点我收藏+]

标签:interface   this   参数化   成员   平台   moni   get   连接   静态类   

  1. 一个类,只定义了而没有实例化,是没有任何意义的,但也有特殊情况,对于一个静态类,即其成员变量都是静态的,不实例化也可以正常使用;
  2. 类要想和DUT通信,不能在类里定义接口,会报错,只能在类里定义虚拟接口;若直接基于sv的测试平台中是在new函数中调用接口,在UVM中则通过uvm_config_db::get来得到从top module传递而来的interface;
  3. UVM中,各个component(driver,monitor等功能部件)通信使用TLM事务级模型方式,其中要发送信息的一方,使用uvm_analysis_port#(my_transaction),是UVM库中的一个参数化的类;
  4. driver是最底层的,这里不必进行实例化,只需在build_phase中,也要完成类的实例化工作,只需调用super.build_phase(phase);In_agent实现driver,monitor,sequencer的实例化,而In_agent的实例化则在env的build_phase中完成;
  5. build_phase中除了完成实例化之外,还要完成config_db机制的get行为,即把其它component设置给此component的一些参数接收过来;
  6. 任何一个派生自uvm_component类的主要的动作都是在main_phase中完成的,main_phase的第一句话是super.main_phase,即调用父类的main_phase;seq_item_port是用于连接driver和sequencer的一个端口,driver如果想要发送数据就要从这个端口获得;sequence如果有数据要给driver,也要通过这个端口给driver;seq_item_port中my_driver的父类中,即uvm_driver类中,它的实例化也是在uvm_driver的build_phase中完成的;
  7. agent有两种形式,UVM_PASSIVE和UVM_ACTIVE,以前者方式运转的agent只监测总线而不驱动总线;以后者方式运行的agent驱动总线,也可以监测总线;
  8. uvm_blocking_get_port也是一个TLM事务级端口,用来接收一个uvm_analysis_port发送的信息,而uvm_analysis_port是发送信息的;uvm验证平台的各个组件之间通过这两个端口来实现事务级别通信;
  9. scoreboard中一般使用一个队列来暂存从reference model得到的期望数据;
  10. uvm验证平台可以使用uvm_tlm_analysis_fifo把uvm_blocking_get_port和uvm_analysis_port连接;
  11. 在uvm中,即使driver,monitor,reference model和scoreboard的main_phase都是无限循环的,但是也不需要显式的调用$finish,只需要使用objection机制即可。在发包之前,通过调用starting_phase.raise_objection(this)告诉UVM可以开始发包了,当包发送完后,调用starting_phase.drop_objection(this)来告诉UVM可以使用$finish了;当调用drop_objection时,UVM会检查其它的component的objection是否已经被drop了,直到被drop后,才会调用$finish.

uvm学习杂记

标签:interface   this   参数化   成员   平台   moni   get   连接   静态类   

原文地址:https://www.cnblogs.com/zeushuang/p/8325929.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!