一、config机制
在验证环境得创建过程build phase 中,除了组件的实例化,配置也是必不可少的。
为了验证环境的复用性,通过外部的参数设置,使得环境在创建时可以根据不同参数来选择创建得组件类型、组件实例数目、组件之间得连接以及组件得运行模式等。
在更细致得环境调节中有更多的变量需要配置,例如for-loop的阈值、字符串名称、随机变量的生成比重等。
比起重新编译来调节变量,如果在仿真中可以通过变量设置来修改环境,那么就更灵活了,而UVM config 机制正提供了这样的便捷。
1.1 interface 传递
接口传递需要发生在run_test()之前
传递过程中是传递的指针,即virtual interface
uvm_config_db#(virtual intf1)::get(this,“”,“vif”,vif);
this 指的是root.test.c1.vif
前3个参数指的就是上面的
1.2 变量设置
1.3 object传递
- 在test配置中,需要配置的参数不只是数量多,而且可能还分属不同的组件。
- 那么如果对这么多层次中的变量做出类似上面的变量设置,那会需要更多的代码,容易出错还不易于复用,甚至底层组件的变量被删除后,也无法通过uvm_config_db::set()得知配置是否成功。
- 然后如果每个组件中的变量加以整合,首先放置到一个uvm_object中,再对中心化的配置对象进行传递,那么将会更有利于整体环境的修改维护。
set 传递的是父类的句柄,get得到也是父类句柄
要将父类句柄转换成子类句柄,才能访问vall、str1(子类里面的变量)
也可以将uvm_object 改成config1,传递子类句柄
1.4
- set/get必须成对出现,先set后get
- 传递的参数类型必须一致
- 传递的路径必须一致