📡 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#
Özellik | Açıklama |
---|---|
Generic T | Subscriber, 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.