🧩 UVM Sequence Item ve Data Modelleme#
🚀 Giriş#
uvm_sequence_item
, UVM’de transaction tabanlı doğrulama ortamlarının temel yapı taşıdır. Genellikle veri modelleme için kullanılır ve testbench ile tasarım arasındaki veri akışını temsil eder.
🔍 Data Modelleme#
UVM testbench’inde data modelleme, testbench’in DUT ile iletişim kurduğu ve belirli bir protokol veya işlem ile ilişkili verilerin organize edildiği kısımdır. Bu, veri değişkenlerinin uvm_sequence_item
içerisinde tanımlanması ile yapılır.
Örneğin, bir adder (toplayıcı) doğrulama ortamında iki adet 8-bit sayının toplama işlemi yapılacaksa, bu sayılar ve sonucunu temsil edecek veri yapısı uvm_sequence_item
ile modellenir.
📦 uvm_sequence_item Sınıfı#
uvm_sequence_item
, uvm_transaction
sınıfından türetilir ve veri akışını modellemek için kullanılır.
En yaygın kullanım şekli; sınıf üyelerinin rand
veya randc
ile tanımlanması ve randomize()
metodu ile stimulus üretimidir.
Temel Özellikler#
✅ Testbench ve driver arasındaki transaction’ları temsil eder
✅ Randomization ve constraint kullanımı destekler
✅ Print, compare, pack/unpack gibi metodlarla debug ve analiz yapılabilir
📝 Adder Örneği#
Aşağıdaki örnek, iki adet 8-bit sayıyı toplayan bir adder_packet sınıfının nasıl modellenebileceğini gösterir.
module adder (
input logic clk,
input logic rst,
input logic [7:0] num1,
input logic [7:0] num2,
output logic [8:0] out
);
always_ff @(posedge clk) begin
if (rst) out <= 0;
else out <= num1 + num2;
end
endmodule
// Sequence Item (Already Defined)
class adder_transaction extends uvm_sequence_item;
rand bit [8:0] num1;
rand bit [8:0] num2;
bit [8:0] result;
bit is_correct; // Flag to indicate correctness
// Constraint for num1 and num2 to be in range 0-512
constraint input_range {
num1 >= 0 && num1 <= 300;
num2 >= 0 && num2 <= 300;
}
`uvm_object_utils(adder_transaction)
function new(string name = "adder_transaction");
super.new(name);
endfunction
endclass
Açıklamalar#
- num1 ve num2: Toplanacak iki adet 8-bitlik sayı (randomizable)
- out: Toplama sonucu (driver tarafından hesaplanır, random değil)
uvm_object_utils_begin
veuvm_object_utils_end
: Bu makrolar sayesinde print, compare ve pack gibi metodlar otomatik olarak üretilir.
💡 Özet#
🔹 uvm_sequence_item
, UVM’de veri modelleme için temel yapı taşıdır.
🔹 Transaction verilerini modellemek için kullanılır ve randomize edilerek stimulus oluşturulur.
🔹 Data modelleme, testbench’in protokole veya işlemlere uygun stimulus üretmesini sağlar.
🔹 Adder örneği, basit bir toplama işlemini modellemek için kullanılabilir ve sequencer-driver yapısına kolayca entegre edilebilir.