config:引入config_object类,在base_test中进行实例化,然后使用config_db将config_object的指针分别传递给通讯组件A,B,这样就可以通过访问config_object进行通信。过程繁琐。 4.1.2 TLM的定义 TLM是Transaction Level Modeling(事务级建模)的缩写,起源于SystemC的一种通信标准。TLM就是在通信组件A,B之间专门建立一个通...
那么,如果对这么多层次中的变量做出类似上面的单一变量设置,一方面需要更多的代码,这就容易出错,不易于阅读,另外一方面也不易于复用,毕竟底层组件的变量有添加或者减少,通过uvm_config_db::set是无法得知是否设置成功的。因此,如果将每个组件中的变量加以整合,首先放置到一个uvm_object中用于传递,那么将会更有利于整体...
在base_test中,实例化这个config_object,并将其指针通过config_db#(config_object)::set传递scoreboard和monitor。当monitor要和scoreboard通信时,只要把此config_object中相应变量的值改变即可。scoreboar中则监测变量值的改变,监测到之后做相应动作。 但是以上这种方式还是存在风险,即不能保证某一个从base_test派生而来...
也就是说,uvm_set_config_int是在new之后,build_phase之前完成的。大家在使用的时候一定要注意这个失效时间,避免多次赋值互相干扰。 图12 uvm_set_config参数生效时间测试结果 3uvm命令行参数的限制 1. uvm命令行参数目前只能给component传递,不能给object传递。不过大家可以换一个思路,比如sequence里面要用参数mydat...
UVM(十)之config机制续1 1. 省略get的config config总是set和get成对出现的。在build_phase中,要写上如下的两句话才能把pre_num_max和pre_num_min的值更新为case的设置值: uvm_config_db#(int)::get(this,””,”pre_num_max”,pre_num_max);...
在uvm中,config机制的出现,彻底改善了以上的弊端,通过uvm_cinfig_db #(T)::set()和uvm_cinfig_db #(T)::get()的配对使用,可以在环境构建前从顶层直接对任意底层进行配置,传递的对象可以是virtual interface,单一变量,对象。 范式: uvm_config_db #(T)::set(uvm_component cntxt,string inst_name,string...
sequencer是一个uvm_component类型,但是sequence是uvm_object类型,这也符合我们的认知,产生transaction为动态创建的,在仿真的任何时刻都可以创建sequence,并且创建使用完后就可以扔掉,所以sequence为object类型。 定义my_sequencer也是三部曲,继承、注册和定义new函数,这是最基本的,然后再在此之上定义更多的内容譬如:接口。
uvm_component 类继承于 uvm_object uvm 组件类,继承于该类的子类,用于构成 UVM 环境( uvm_tree ),如uvm_driver、uvm_montior 、uvm_env 和 uvm_scoreboard,其他几个组件在后续讲述过程中将会全部涉及。 包含一些列方法,如 factory 系列、phase 系列、 report 系列、 hierarchy 系列和全部的 uvm_object 类的方...
Config:所有config一般直接从uvm_object派生。Config的主要功能就是规范验证平台的行为方式。 Uvm_phase:派生自uvm_object,其作用是控制uvm_component的行为方式。 ——— 版权声明:本文为CSDN博主「南国之邱」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn...
config object包含driver和monitor使用的BFM虚接口句柄。config object是在test中构造和配置的,在这个顶层,把从testbench module传入的虚接口赋值给虚接口句柄。 agent config object还可以包含其他数据成员,来控制agent的配置方式或行为。例如,APB agent的config object具有数据成员,用于设置内存映射并确定通过关联地址映射拉...