uvm_config_db的全稱是configuration database,它是建立在 uvm_resource_db 之上的便利層,resource database儲存的是與scope字串相關聯的name-value對(如下圖所示) 。
uvm_config_db可以將scope字串與元件層次結構中的完整層次結構名稱相關聯,這樣就可以通過元件層次來更加方便地存取資料庫的條目(儲存的資訊)。
config_db 是引數化的,它的型別可以是標量、類控制程式碼、佇列、列表,甚至是虛擬介面。通過uvm_config_db::set 和 uvm_config_db::get 函數進行全域性儲存和檢索資料庫中的資訊。
set函數的原型為
static function void set(uvm_component cntxt,
string inst_name,
string field_name,
T value);
簡單來說,前兩個引數可以組成一個層次化路徑,這個路徑指定了我們只能從哪個城市出發,走哪條公路達到我們想去的目的地。
field_name就像是一個做過特殊標記的盒子,裡面放的東西就是value,這個特殊標記只有兩個「人」知道,因此才能保證盒子的傳送不會出錯。
get函數的原型為:
static function bit get(uvm_component cntxt,
string inst_name,
string field_name,
inout T value);
它的四個引數的定義與set大致一樣,不同的是
在test中set:
class my_test extends uvm_test;
my_config cfg;
...
function void bulid_phase(uvm_phase phase);
...
uvm_config_db#(my_config)::set(this,"env","cfg",cfg);
...
endfunction
endclass
在test.env中get:
class my_env extends uvm_env;
my_config cfg;
...
function void bulid_phase(uvm_phase phase);
...
if(!uvm_config_db#(my_config)::get(this,"","cfg",cfg))
begin
`uvm_fatal(" get config object failed")
end
...
endfunction
endclass