Ana içeriğe geç

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
Axolot Logic
Yazar
Axolot Logic
Sayısal Tasarım Mühendisi
Table of Contents
UVM Serisi - This article is part of a series.
Part 24: This Article

🔍 Giriş
#

UVM Sequence, testbench’te stimulus üretmek için kullanılan temel yapılardan biridir. Sequence başlatma, stimulus akışını kontrol etmek için kritik öneme sahiptir. Bu yazıda uvm_do makrosu ve alternatif yöntemlerle Sequence nasıl başlatılır, hangi fazlarda objection kullanılır ve hangi durumlarda hangi yöntemi tercih etmeliyiz sorularını ele alacağız.


🚀 Sequence Başlatma Yöntemleri
#

1️⃣ uvm_do Makrosu
#

UVM’de en yaygın kullanılan makro:

`uvm_do(seq_item)

Bu makro aslında şunları yapar:

  1. create() çağırarak seq_item nesnesini oluşturur.
  2. randomize() metodunu çağırarak seq_item’i rastgeleleştirir (eğer varsa).
  3. start_item() ile item’i başlatır.
  4. finish_item() ile item’in işlenmesini tamamlar.

👉 Yani uvm_do, tek satırda hem item’i yaratır hem de gönderir.


2️⃣ Adım Adım Sequence Başlatma (uvm_do’nun yaptığı adımlar)
#

Eğer uvm_do kullanmak istemiyorsak veya adımları kontrol etmek istersek şu şekilde elle adım adım yazabiliriz:

my_item item;
item = my_item::type_id::create("item");

// Rastgeleleştirme (varsa constraint ekleyebilirsin)
if (!item.randomize()) 
  `uvm_error("MY_SEQ", "Randomization failed")

// Item’i başlat
start_item(item);

// (Varsa) field’ları doldur
item.data = 8'hFF;

// Item’i tamamla
finish_item(item);

Bu yöntem özellikle bazı alanları elle set etmek veya özel constraint uygulamak istediğimizde kullanışlıdır.


3️⃣ Sequencer Üzerinden Sequence Başlatma
#

Bir sequence’ı doğrudan sequencer’a start ederek de başlatabiliriz:

my_sequence seq;
seq = my_sequence::type_id::create("seq");
seq.start(my_sequencer);

Bu yöntem, genellikle nested sequence veya daha kompleks akışlar için tercih edilir.


🛠️ uvm_send Kullanımı
#

uvm_send makrosu, sequence içindeki tek item’leri göndermek için kullanılır:

`uvm_send(item)

Arka planda:

  • start_item(item)
  • (randomize veya manual değer ataması)
  • finish_item(item)

adımlarını tek seferde çalıştırır.


📌 Objection Kullanımı
#

UVM’de sequence çalıştırırken simülasyonun bitmesini önlemek için genellikle raise_objection kullanılır. Bunun yeri:

  • start_of_simulation_phase
  • run_phase
  • main_phase

örnek:

phase.raise_objection(this, "My sequence started");
...
phase.drop_objection(this, "My sequence completed");

💡 Not: Objection’ı sequence içinde ya da test içinde kullanabilirsin. Bu, simülasyonun ne zaman bitmesi gerektiğini kontrol etmeni sağlar.


🎯 Ne Zaman Hangi Yöntemi Kullanmalı?
#

YöntemKullanım Durumu
uvm_doBasit stimulus akışları, hızlı geliştirme
Adım Adım BaşlatmaAlanları elle doldurmak veya özel constraint uygulamak gerektiğinde
Sequencer ile startNested sequence veya akış kontrolü gerektiğinde
uvm_sendTek item’ler için hızlı gönderim

📝 Sonuç
#

UVM Sequence başlatma yöntemleri doğrulama ortamına esneklik ve kontrol katar. uvm_do gibi makrolar hızlı geliştirme sağlarken, adım adım başlatma yöntemleri özel ihtiyaçlar için tercih edilir. Hangi yöntemi seçersen seç, testbench’in yapısına ve akış kontrolüne dikkat etmeyi unutma!


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

Related

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 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 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