我发现中文社区里的文章怎么都那么奇怪呢,都讲uvm_config_db是一种特殊的参数配置“机制”,看得我一头雾水,还以为是sv的一种特有的语法啥的。看了英文社区一下子就明白了:
uvm_config_db是个uvm中带template的类,这个类只有一些静态函数,学过C++的都记得吧,static的,这些静态函数包括:
uvm_config_db::set(
uvm_component | cntxt, | |
string | inst_name, | |
string | field_name, | |
T | value |
uvm_config_db::get(
uvm_component | cntxt, | ||
string | inst_name, | ||
string | field_name, | ||
inout | T | value |
);
这个类里维护一张表,每调用一次set,这个表里增加一行,每调用一次get,就从这个表里找有没有对应的行。每一行都是一个实例.成员变量的设置值,这些成员变量的类型是多种多样的,可以是primitive的,也可以是自定义的,所以在调用set/get的时候需要指定template。
需要注意的是:set/get里的第一个变量是uvm_component,所以如果是在sequencer里调,需要用m_sequencer,因为sequencer本身不是一个component,但m_sequencer是sequencer里固有的一个指向本sequencer的component指针。
至于乱八七糟的set_config_*和get_config_*,都是为了兼容OVM,在外面包了一层。
over~