推荐答案
测试一下
题目
When using uvm_config_db to pass some configuration in testbench, which of the following is the correct method?
A. uvm_config_db#(uvm_object_wrapper)::set(this, "path", this)
B. uvm_config_db#(uvm_object_wrapper)::set(null, "*", this)
C. uvm_config_db#(uvm_object_wrapper)::set(this, "path", value)
D. uvm_config_db#(uvm_object_wrapper)::set("inst_name", "path", value)
参考答案与知识点
参考答案
正确答案为C。uvm_config_db#(T)::set方法的正确调用格式为:uvm_config_db#(T)::set(uvm_component cntxt, string inst_name, T value)。其中第一个参数cntxt必须是uvm_component类型或null,不能是字符串;第二个参数inst_name是路径字符串,支持通配符;第三个参数value的类型必须与模板参数T一致。选项C中,第一个参数this(通常在组件中调用时是uvm_component子类)符合要求,第二个参数"path"是合法路径,第三个参数value类型必须为uvm_object_wrapper。选项A和B的错误在于第三个参数使用了this,而this通常不是uvm_object_wrapper类型(除非当前类直接继承自uvm_object_wrapper,但这在测试平台中很少见),会导致类型不匹配或编译错误。选项D的第一个参数是字符串"inst_name",不符合cntxt应为uvm_component或null的要求。因此只有C正确。
涉及知识点
- uvm_config_db::set参数顺序及类型
- uvm_object_wrapper与factory机制
- cntxt参数的作用:null表示全局,this表示局部
- inst_name支持通配符*和具体路径
- 类型匹配:value必须与模板参数T一致