Ana içeriğe geç

UVM'de uvm_subscriber Kullanımı

· loading · loading · ·
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Uvm_subscriber Coverage Toplama
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 23: This Article

📡 UVM Subscriber (uvm_subscriber)
#

🔍 Giriş
#

uvm_subscriber, UVM kütüphanesinde analiz portlarından gelen verileri alıp, bu verileri işleyen veya raporlayan bir bileşeni temsil eder. Subscriber bileşenleri, veri akışının toplandığı ve genellikle coverage (örneğin functional coverage) veya istatistiksel analiz gibi görevlerin yürütüldüğü modüllerdir.


🤔 Neden uvm_subscriber Kullanılır?
#

Analiz Portları ile Uyumlu uvm_subscriber, uvm_analysis_port veya uvm_analysis_export bağlantılarından gelen verileri doğrudan alabilir.

Coverage veya Raporlama Genellikle coverage toplamak veya analiz sonuçlarını raporlamak için kullanılır. Örneğin:

  • Toplanan paketleri kaydedip coverage raporlamak.
  • Transaction istatistiklerini tutmak ve raporlamak.

Kolay Bağlantı uvm_analysis_export portu sayesinde, monitor veya scoreboard gibi analiz portlarından veri akışı rahatlıkla sağlanabilir.


🏗️ Basit uvm_subscriber Kullanımı
#

📦 Basit Subscriber Örneği
#

class adder_subscriber extends uvm_subscriber #(adder_packet);
  
  `uvm_component_utils(adder_subscriber)
  
  int unsigned transaction_count;
  
  function new(string name, uvm_component parent);
    super.new(name, parent);
    transaction_count = 0;
  endfunction
  
  virtual function void write(adder_packet t);
    transaction_count++;
    `uvm_info(get_type_name(), $sformatf("Received adder_packet: num1=%0d, num2=%0d, out=%0d",
                      t.num1, t.num2, t.out), UVM_MEDIUM)
  endfunction
  
  virtual function void report_phase(uvm_phase phase);
    `uvm_info(get_type_name(), $sformatf("Total packets received: %0d", transaction_count), UVM_LOW)
  endfunction

endclass

⚙️ Nasıl Çalışır?
#

1️⃣ Veri Alımı write() metoduyla uvm_analysis_port üzerinden gelen verileri alır.

2️⃣ Analiz veya İşlem İçeride bu veriler üzerinde coverage, sayaç veya istatistiksel işlem yapılır.

3️⃣ Raporlama report_phase() gibi metodlarla analiz edilen sonuçlar test sonunda raporlanır.


🔗 Bağlantı Kurulumu
#

Subscriber, genelde bir monitor’un analysis port’una bağlanır:

agent.monitor.adder_send.connect(subscriber.analysis_export);

Bu sayede monitor’dan gelen tüm adder_packet objeleri subscriber’a ulaşır.


🚀 Özellikler
#

ÖzellikAçıklama
Generic TSubscriber, generic type parametreli (uvm_subscriber#(T)) çalışır
write()Analiz portlarından gelen verileri alır ve işler
report_phase()Test bitiminde raporlama yapmak için kullanılır

🎯 Sonuç
#

uvm_subscriber kullanımı:

  • Monitor’dan gelen verileri toplamak ve işlemek için idealdir.
  • Coverage ve istatistik toplamak için vazgeçilmezdir.
  • UVM’nin analiz port altyapısı ile entegre çalışarak testbench’inizi daha esnek ve güçlü hale getirir.

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

Related

UVM'de Konfigürasyon Sınıfları Kullanımı
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Konfigürasyon Sınıfları Randomizasyon
Eğitim UVM Doğrulama
UVM'de Factory Kullanımı
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Factory Pattern
Eğitim UVM Doğrulama
UVM'de Phase'lar: Testbench Yaşam Döngüsü
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Phase Yönetimi
Eğitim UVM Doğrulama
UVM'de Sequence Başlatma Yöntemleri
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Sequence Başlatma Objection Kullanımı
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