🎯 UVM Sequence Kullanımı ve Adder Örneği#
🚀 Giriş#
uvm_sequence
, UVM doğrulama ortamlarında stimulus (test verisi) üretmek için kullanılan en temel sınıflardan biridir. Testbench’in sequencer ve driver bileşenleriyle birlikte çalışarak transaction’ları oluşturur ve gönderir.
UVM testbenchi genellikle bir sequence, sequencer ve driver üçgeni üzerine kuruludur. Bu yapı, test senaryolarının modüler, tekrarlanabilir ve esnek bir şekilde geliştirilmesine olanak sağlar.
🗂️ uvm_sequence Nedir?#
uvm_sequence
, uvm_sequence_item
sınıfından türetilen transaction’ları üretir ve bunları sequencer üzerinden driver‘a gönderir.
Bu yapı; test senaryolarının, veri akışlarının ve test stimulus’larının organize edilmesinde büyük kolaylık sağlar.
Temel Özellikler#
✅ uvm_sequence_item
nesnelerini randomize ederek stimulus üretir
✅ body()
metodu ile ana test akışını tanımlar
✅ pre_body()
ve post_body()
metodları ile kullanıcı özelleştirmesi yapılabilir
✅ Sequencer ve driver ile uyumlu çalışır
📝 Adder Sequence Örneği#
Aşağıda, basit bir adder_base_seq örneği verilmiştir. Bu örnek, adder_packet
nesnelerini rastgele üreterek bir adder tasarımını test etmeyi hedefler.
class adder_sequence extends uvm_sequence #(adder_transaction);
int num_transactions = 20;
`uvm_object_utils(adder_sequence)
function new(string name = "adder_sequence");
super.new(name);
endfunction
virtual task body();
adder_transaction tr;
repeat(num_transactions) begin
tr = adder_transaction::type_id::create("tr");
`uvm_do(tr);
end
endtask
/*
task pre_body();
`uvm_info(get_type_name(), "Pre Body", UVM_MEDIUM) // Print info message
endtask : pre_body
task post_body();
`uvm_info(get_type_name(), "Post Body", UVM_MEDIUM) // Print info message
endtask : post_body
*/
endclass
🔍 Açıklamalar#
- pre_body(): Sequence başlamadan önce bilgi mesajı basar.
- body(): Sequence’in ana çalışma kısmıdır.
repeat (5)
ile 5 adet rastgeleadder_packet
üretilir ve sequencer-driver yapısına gönderilir. - post_body(): Sequence tamamlandıktan sonra bilgi mesajı basar.
Elbette! İşte kısa ve net bir açıklama:
🔹 uvm_do
makrosu, UVM’de bir sequence item veya sequence nesnesi yaratıp randomize()
edip bir sequencer üzerinden driver’a gönderilmesini sağlayan kullanışlı bir kısayol makrosudur.
✅ Görevleri:
create()
ile nesneyi oluşturur.randomize()
ile nesneyi rastgeleleştirir (randomization).start_item()
vefinish_item()
çağrıları ile item’ı sequencer’a gönderir.
💡 Özet#
🔹 uvm_sequence
, UVM’in stimulus üretim mekanizmasının temelini oluşturur.
🔹 Test senaryolarını modüler ve tekrarlanabilir hale getirir.
🔹 Adder örneği, adder_packet
sequence item’ları üreterek basit bir toplama test ortamı kurulmasını sağlar.
🔹 pre_body()
ve post_body()
metodları kullanıcıya ek bilgi ve özelleştirme imkanı sunar.