🧪 UVM Test: base_test Örneği#
🚀 Giriş#
UVM’de bir test sınıfı (örneğin base_test), testbench senaryosunu yöneten ve koordine eden en üst düzey bileşendir. Environment’ı oluşturur, sequencer’a varsayılan sequence atar ve simülasyonu başlatır.
📝 base_test Örneği#
Aşağıda bir base_test sınıfı örneği verilmiştir. Bu sınıf environment’ı oluşturur, waveform kayıt parametrelerini ayarlar ve genel test yapısını yönetir.
class adder_test extends uvm_test;
adder_env env;
adder_config cfg;
`uvm_component_utils(adder_test)
function new(string name = "adder_test", uvm_component parent);
super.new(name, parent);
endfunction
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
env = adder_env::type_id::create("env", this);
cfg = adder_config::type_id::create("cfg");
uvm_config_db #(adder_config)::set(this, "env.agent*", "cfg", cfg);
endfunction
virtual task run_phase(uvm_phase phase);
adder_sequence seq;
seq = adder_sequence::type_id::create("seq");
phase.raise_objection(this);
seq.start(env.agent.sequencer);
#100;
phase.drop_objection(this);
endtask
endclass
🔍 Açıklamalar#
env: Agent ve scoreboard’u içeren environment bileşeni.
build_phase():
uvm_config_int::set
kullanılarak waveform kayıt detayları ayarlanabilir.- Factory kullanılarak environment oluşturulur.
uvm_config_wrapper::set
ile sequencer’a varsayılan sequence atanır.
end_of_elaboration_phase(): Testbench topolojisini yazdırarak debug’a yardımcı olur.
start_of_simulation_phase(): Simülasyon başında bilgilendirici bir mesaj yazdırır.
check_phase(): Konfigürasyon kullanımını kontrol eder.
💡 Özet#
🔹 Test sınıfı, UVM testbench’inin en üstünde yer alır ve tüm senaryoyu yönetir. 🔹 build_phase() içinde environment oluşturulur ve varsayılan sequence atanır. 🔹 Testbench topolojisi yazdırılır ve kullanıcı simülasyon başlangıcında bilgilendirilir.