🏗️ UVM Environment: adder_env Örneği#
🚀 Giriş#
UVM’de environment (çevre), agent’ları, scoreboard’ları ve diğer doğrulama bileşenlerini bir araya getiren üst düzey bir konteynerdir. Testbench yapısını düzenler, bileşenler arası bağlantıları yönetir ve çoğu zaman tekrar kullanılabilir bir doğrulama ortamını temsil eder.
📝 adder_env Örneği#
Aşağıda, bir agent ve bir scoreboard’un nasıl oluşturulup bağlandığını gösteren basit bir adder_env örneği bulunuyor.
class adder_env extends uvm_env;
adder_agent agent;
adder_subscriber subscriber;
adder_scoreboard scoreboard;
`uvm_component_utils(adder_env)
function new(string name = "adder_env", uvm_component parent);
super.new(name, parent);
endfunction
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
agent = adder_agent::type_id::create("agent", this);
subscriber = adder_subscriber::type_id::create("subscriber", this);
scoreboard = adder_scoreboard::type_id::create("scoreboard", this);
endfunction
virtual function void connect_phase(uvm_phase phase);
super.connect_phase(phase);
agent.monitor.analysis_port.connect(subscriber.analysis_export); // Subscriber bağlantısı
agent.monitor.analysis_port.connect(scoreboard.analysis_export); // Scoreboard bağlantısı
endfunction
endclass
🔍 Açıklama#
- agent: Sequencer, driver ve monitor’ü içeren
adder_agent
örneği. - scoreboard: DUT’un çıktısını beklenen sonuçlarla karşılaştıran
adder_scoreboard
örneği. - build_phase(): Agent ve scoreboard’u örneklendirir.
- connect_phase(): Monitor’ün analysis port’unu scoreboard’un analysis export’una bağlar.
- start_of_simulation_phase(): Simülasyon başında loglama ve hata ayıklama için mesaj yazdırır.
💡 Özet#
🔹 Environment, doğrulama bileşenlerini bir araya getirerek modüler bir testbench yapısı oluşturur. 🔹 build_phase’de agent’lar ve scoreboard’lar örneklendirilir; connect_phase’de bunlar birbirine bağlanır. 🔹 İyi yapılandırılmış bir environment, testbench’in tekrar kullanılabilirliğini, ölçeklenebilirliğini ve bakım kolaylığını artırır.