我發現中文社區裏的文章怎麼都那麼奇怪呢,都講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~