Ana içeriğe geç

UVM'de Factory Kullanımı

· loading · loading · ·
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Factory Pattern
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 10: This Article

🔍 Giriş
#

UVM Factory, UVM testbench mimarisinde sınıfların esnek ve dinamik şekilde oluşturulmasına olanak tanıyan güçlü bir mekanizmadır. Factory sayesinde komponentlerin veya obje sınıflarının hangi versiyonlarının kullanılacağı simülasyon sırasında kolayca değiştirilebilir. Bu, testbench’in yeniden kullanılabilirliğini ve esnekliğini büyük ölçüde artırır.


🏭 UVM Factory Nedir?
#

UVM Factory, aslında bir fabrika tasarım kalıbı (factory design pattern) uygulamasıdır. Bu sayede:

  • Bir base sınıf için birden fazla türetilmiş sınıf olabilir.
  • Factory, hangi türetilmiş sınıfın üretileceğine runtime’da karar verir.
  • Konfigürasyon veya test aşamasında farklı implementasyonlar yüklenebilir.

🔨 Factory Kayıtları
#

Bir sınıfı Factory ile kullanılabilir hale getirmek için uvm_component_utils veya uvm_object_utils makroları kullanılır:

class my_driver extends uvm_driver #(my_transaction);
  `uvm_component_utils(my_driver)
  // ...
endclass

Bu makro, my_driver sınıfını factory’ye kaydeder.


🔄 Factory Override Kullanımı
#

UVM Factory’nin en büyük avantajlarından biri, testbench sırasında override yapabilme yeteneğidir:

uvm_factory::get().set_type_override_by_type(base_type::get_type(), derived_type::get_type());

Ya da isim bazlı override:

uvm_factory::get().set_type_override_by_name("base_type", "derived_type");

Bu şekilde, testbench’te base_type istense bile derived_type kullanılır.


📦 Factory Kullanımı Örneği
#

Aşağıdaki örnekte bir monitor sınıfının farklı versiyonunu test sırasında nasıl override edebileceğimizi görebilirsin:

initial begin
  uvm_factory::get().set_type_override_by_name("my_monitor", "my_coverage_monitor");
end

Bu satır, "my_monitor" talep edildiğinde "my_coverage_monitor" sınıfının üretilmesini sağlar.


🎯 Neden UVM Factory Kullanılır?
#

Esneklik: Testbench davranışını konfigürasyon değiştirerek runtime’da değiştirebilirsin.
Yeniden Kullanılabilirlik: Aynı base sınıfı kullanarak farklı alt sınıfları denemek mümkün olur.
Bakım Kolaylığı: Kodda değişiklik yapmadan farklı varyantları deneyebilirsin.


🚀 Factory ile Tüketim
#

Factory kullanımı sırasında komponentler veya objeler factory aracılığıyla create() fonksiyonları ile üretilir:

my_driver drv;
drv = my_driver::type_id::create("drv", this);

Bu çağrı, factory’ye kaydedilmiş override’ları da dikkate alarak doğru sınıfın örneğini döndürür.


📌 Sonuç
#

UVM Factory, doğrulama ortamına esneklik ve konfigürasyon kolaylığı katar. Testbench’in bileşenlerini dinamik olarak değiştirmek veya genişletmek istediğinde bu mekanizmayı kullanabilirsin.


UVM Serisi - This article is part of a series.
Part 10: 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 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'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
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