Ana içeriğe geç

UVM'de uvm_sequence_item ve Veri Modelleme

· loading · loading · ·
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Veri Modelleme Uvm_sequence_item
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 11: This Article

🧩 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 ve uvm_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.


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

Related

UVM'de uvm_sequence Kullanımı ve Adder Örneği
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Uvm_sequence Stimulus Generation
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
UVM'de Package Kullanımı ve Önemi
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Package Kullanımı Testbench Organizasyonu
Eğitim UVM Doğrulama
UVM'de Virtual Sequence, Virtual Sequencer, Sequence Library ve Sequence Arbitration
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Virtual Sequence Sequence Arbitration
Eğitim UVM Doğrulama
UVM'de _decl Makrosu Kullanımı
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog _Decl Makrosu Analysis Port
Eğitim UVM Doğrulama