Ana içeriğe geç

UVM'de uvm_monitor Kullanımı ve Adder Örneği

· loading · loading · ·
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Uvm_monitor Coverage
Eğitim UVM Doğrulama
Axolot Logic
Yazar
Axolot Logic
Sayısal Tasarım Mühendisi
Table of Contents
UVM Serisi - This article is part of a series.
Part 15: This Article

🔎 UVM Monitor Kullanımı ve Toplayıcı (Adder) Örneği
#

🚀 Giriş
#

uvm_monitor, bir UVM testbench’inde kritik bir bileşendir ve DUT (Test Edilen Tasarım) üzerinden akan sinyalleri ve verileri gözlemlemekten sorumludur. Sürücülerden farklı olarak, monitor’lar stimulus üretmez; bunun yerine, DUT’tan verileri pasif olarak yakalar ve bu verileri analysis port kullanarak diğer bileşenlere (örneğin coverage collector veya scoreboard) iletir.


🗂️ uvm_monitor Nedir?
#

  • uvm_monitor, DUT sinyallerini okur ve bunları transaction nesnelerine dönüştürür.
  • Yakalanan verileri bir analysis port ile diğer testbench bileşenlerine gönderir.
  • DUT sinyallerine bağlanmak için virtual interface kullanır.
  • Coverage ve testbench davranışının debug edilmesinde önemli rol oynar.

📝 Toplayıcı Monitor Örneği
#

Aşağıda bir adder_monitor örneği bulunuyor. Bu monitor, adder_if virtual interface kullanarak DUT girişlerini ve çıkışını okur, ve yakalanan verileri adder_transaction nesnesi olarak analysis port üzerinden iletir.

class adder_monitor extends uvm_monitor;
  `uvm_component_utils(adder_monitor)

  virtual adder_if vif;
  uvm_analysis_port #(adder_transaction) analysis_port;

  function new(string name = "adder_monitor", uvm_component parent);
    super.new(name, parent);
    analysis_port = new("analysis_port", this);
  endfunction

  virtual function void build_phase(uvm_phase phase);
    super.build_phase(phase);
    if (!uvm_config_db#(virtual adder_if)::get(this, "", "vif", vif))
      `uvm_fatal("NO_VIF", "adder_monitor için virtual interface ayarlanmamış!")
  endfunction

  virtual task run_phase(uvm_phase phase);
    adder_transaction tr;
    forever begin
      tr = adder_transaction::type_id::create("tr");

      @(posedge vif.clk);
      tr.num1 = vif.num1;
      tr.num2 = vif.num2;

      @(posedge vif.clk);
      tr.result = vif.out;

      // Transaction’ı analysis_port üzerinden ilet
      analysis_port.write(tr);

      // Transaction’ı yazdır
      `uvm_info(get_type_name(), $sformatf("Transaction: num1=%0d, num2=%0d, result=%0d", tr.num1, tr.num2, tr.result), UVM_MEDIUM);
    end
  endtask

endclass

🔍 Açıklamalar
#

  • Virtual Interface (vif): Monitor’u DUT clock ve veri portlarına bağlar.

  • analysis_port: Yakalanan verileri scoreboard veya coverage collector gibi bileşenlere iletir.

  • build_phase(): uvm_config_db kullanarak virtual interface’i alır ve bağlar.

  • run_phase():

    • DUT girişlerini (num1, num2) ve çıkışını (out) okur.
    • analysis_port.write() ile verileri gönderir.
    • uvm_info() ile transaction bilgilerini yazdırır.

💡 Özet
#

🔹 uvm_monitor, DUT’tan gelen verileri pasif olarak yakalar ve testbench’te diğer bileşenlerin kullanımına sunar. 🔹 Analysis port kullanarak bu verileri scoreboard veya coverage collector’a iletir. 🔹 Bu adder örneğinde, DUT’un toplama girişleri ve çıkışı yakalanır ve testbench’e iletilir. 🔹 Monitörler, sağlam ve izlenebilir bir testbench ortamı oluşturmak için çok önemlidir.


UVM Serisi - This article is part of a series.
Part 15: This Article

Related

UVM'de uvm_agent Kullanımı ve Adder Örneği
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Uvm_agent Testbench Yapısı
Eğitim UVM Doğrulama
UVM'de uvm_scoreboard Kullanımı ve Adder Örneği
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Uvm_scoreboard Test Sonuçları
Eğitim UVM Doğrulama
UVM'de uvm_sequence Kullanımı ve Adder Örneği
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Uvm_sequence Stimulus Generation
Eğitim UVM Doğrulama
UVM'de uvm_test Kullanımı ve base_test Örneği
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Uvm_test Test Senaryosu
Eğitim UVM Doğrulama
UVM Temel Sınıfları
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Sınıf Hiyerarşisi
Eğitim UVM Doğrulama
UVM Utility Field Makroları
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Utility Makroları
Eğitim UVM Doğrulama