UVM(五):config机制的使用方法详解

1.config机制的作用

        在验证环境的创建过程build_phase中,除了组件的实例化,配置(config)也必不可少。为了验证环境的复用性,通过外部的参数配置,使得环境在创建时,可以根据不同参数选择创建的组件类型、组件实例数目、组件之间的连接以及组件的运行模式等

        config_db机制用于UVM验证平台间传递参数,它们通常都是成对出现的:set用于在上层设置参数,get则用于在底层拿到这个参数。相比于重新编译来修改变量,UVM的config机制可以实现在仿真中通过变量设置来修改环境。

2.config机制常见的使用方式

        在UVM中,提供了uvm_config_db配置类以及几种方便的变量设置方法来实现仿真时的环境控制。常见的使用方式包括:

(1)传递虚接口(virtual interface)到环境中;

(2)设置单一变量值,如int、string、enum等;

(3)传递配置对象(object)到环境中(即传递句柄)。

3.config机制的具体使用方法

        主要有set方法和get方法,分别做设置参数和拿到参数。两者应该同时存在,即上层有set,下层就要有相应的get,并且set在前,gei在后。

set方法的定义:

uvm_config_db #(Type)::set(uvm_component cntxt, string inst_name, string field_name, Type value);

其中,第一个和第二个参数联合起来组成目标路径,与此路径符合的目标才能接收此参数第一个参数必须是一个uvm_component实例的指针(一般是this);第二个参数是相对此实例的路径,即要传入的实例名;第三个参数表示实例中的某个变量,第四个参数是要设置的值。

get方法的定义:

uvm_config_db #(Type)::get(uvm_component cntxt, string inst_name, string field_name, inout Type value);

其中,第一个参数和第二个参数联合起来组成路径。第一个参数也必须是一个uvm_component实例的指针,第二个参数是相对此实例的路径,即实例名。一般的,如果第一个参数被设置为this,那么第二个参数可以是一个空的字符串。第三个参数就是set函数中的第三个参数,这两个参数必须严格匹配;第四个参数则是要设置的变量,一般是第三个参数去掉其双引号。

4.接口(interface)的传递

        config机制使得接口的传递和获取彻底分离开来。在传递接口类型参数时,需注意的是:

(1)接口传递应发生在run_test()之前。这样才能保证在进入build_phase之前,要进行传递的virtual interface已经被传递到uvm_config_db中。

(2)注意把interface与virtual interface的声明区分开。在传递过程中的类型应为virtual interface,即实际接口的句柄。

5.变量设置

        在各个test组件中,可以在build_phase中对底层组件需要的变量进行配置,进而在环境例化之前完成配置,使得环境能按预期运行。

        注意在顶层做set时,必须先做set,在用create()方法来创建实例,否则底层的组件将无法得到需要的参数。

6.object传递

        有时需要传递的参数不仅数量多,而且还分属于环境中的不同组件。在这种情况下,可以将每个组件中的变量加以整合:首先将它们放置到同一个uvm_object类中,即将这些来自不同组件的变量封装在一个类中,然后在将该类例化之后,利用config机制传递该类的实例化对象的句柄,以完成参数传递。

7.config机制对通配符的支持

        在config_db::set操作时,其第二个参数提供了完整的路径,但实际上也可以不提供完整的路径:config_db机制提供对通配符的支持,如使用“ * ”号可以代替任何字符。然而,虽然这样能极大程度上简化代码,但是在实际验证环境的构建中并不推荐使用通配符:除非是对整个验证平台的结构有非常明确的了解,否则根本不清楚最终是设置给哪个目标的。

8.总结

        在使用config机制的过程中,应注意的点有:

(1)set()和get()应成对出现;

(2)传递的参数类型必须保持一致;

(3)get()方法和set()方法的路径应能够匹配;

(4)应先在上层做set(),然后再在下层用get()。上层的set()要发生在create()之前。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值