Ana içeriğe geç

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

🔍 Giriş
#

Testbench’ler karmaşıklaştıkça virtual sequence ve virtual sequencer kullanımı, UVM’de farklı arayüzler ve sequencer’lar arasında stimulus’u koordine etmek için çok önemlidir. Sequence library ve sequence arbitration ise sequence yönetimini geliştiren, yeniden kullanım, rastgeleleştirme ve paylaşılan kaynaklara erişimde kontrol sağlayan yapılar sunar.


🚀 Virtual Sequence
#

Virtual sequence, kendisi doğrudan transaction üretmeyen ancak diğer sequence’ları başlatan ve koordine eden bir sequence türüdür. Genellikle SoC doğrulamasında, farklı arayüzlerdeki sequencer’lar üzerinde senkronize testler yapmak için kullanılır (ör. UART, SPI, PCIe).

Örnek:

class top_level_virtual_sequence extends uvm_sequence #(uvm_sequence_item);
  `uvm_object_utils(top_level_virtual_sequence)

  // Alt seviyedeki sequencer handle'ları
  virtual_uart_sequencer uart_seqr;
  virtual_spi_sequencer spi_seqr;

  function new(string name = "top_level_virtual_sequence");
    super.new(name);
  endfunction

  task body();
    uart_seq uart_seq_inst = uart_seq::type_id::create("uart_seq_inst");
    spi_seq spi_seq_inst = spi_seq::type_id::create("spi_seq_inst");

    uart_seq_inst.start(uart_seqr);
    spi_seq_inst.start(spi_seqr);
  endtask
endclass

🧩 Virtual Sequencer
#

Virtual sequencer, driver’a bağlı olmayan ancak alt seviyedeki sequencer handle’larını tutan bir sequencer’dır. Virtual sequence’ların, alt seviyedeki sequencer’lara erişip sequence başlatmasına imkan tanır.

Örnek:

class top_virtual_sequencer extends uvm_sequencer #(uvm_sequence_item);
  `uvm_component_utils(top_virtual_sequencer)

  uart_sequencer uart_seqr;
  spi_sequencer spi_seqr;

  function new(string name, uvm_component parent);
    super.new(name, parent);
  endfunction
endclass

📚 Sequence Library
#

Sequence library, birden fazla sequence’ı rastgele veya senaryoya göre seçerek çalıştırmak için kullanılan bir yapıdır. Şunlar için kullanışlıdır:

  • Farklı test senaryoları üretmek
  • Sequence’ları rastgele veya constraint’li seçmek
  • Layered test yapıları kurmak

Örnek:

uvm_sequence_library #(my_sequence_base_type) seq_lib;

initial begin
  seq_lib = new("seq_lib");
  seq_lib.add_sequence(seq1::get_type());
  seq_lib.add_sequence(seq2::get_type());
  seq_lib.randomize();
  seq_lib.start(my_sequencer);
end

🎯 Sequence Arbitration
#

Birden fazla sequence aynı sequencer’a erişmek istediğinde, sequence arbitration devreye girer ve paylaşılan kaynaklara erişimi kontrol eder. UVM’de built-in arbitration policy’leri vardır:

  • FIFO: Varsayılan, ilk gelen ilk hizmet alır.
  • Random: Bekleyen sequence’lar arasından rastgele seçim yapar.
  • Priority: Sequence priority değerine göre seçim yapar.

Sequencer üzerinde arbitration policy şu şekilde ayarlanabilir:

my_sequencer.set_arbitration(UVM_SEQ_ARB_RANDOM);

📝 Özet
#

KavramAçıklama
Virtual SequenceBirden fazla sequencer’a aynı anda sequence başlatır ve koordine eder.
Virtual SequencerAlt seviyedeki sequencer handle’larını tutar.
Sequence LibrarySequence’ları gruplayarak rastgele veya senaryoya göre çalıştırır.
Sequence ArbitrationPaylaşılan sequencer’a aynı anda ulaşmak isteyen sequence’lar arasında seçim yapar.

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

Related

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 _decl Makrosu Kullanımı
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog _Decl Makrosu Analysis Port
Eğitim UVM Doğrulama
UVM'de do_ Metodları
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Do_ Metodları
Eğitim UVM Doğrulama
UVM'de uvm_agent Kullanımı ve Adder Örneği
· loading · loading
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Uvm_agent Testbench Yapısı
Eğitim UVM Doğrulama