Ana içeriğe geç

UVM RAL Register Modeli Oluşturma ve UVM Ortamına Entegrasyonu

· loading · loading · ·
Kerim Turak
Eğitim UVM Doğrulama UVM RAL Register Modeling SystemVerilog Adapter Bus Interface Verification Doğrulama
Eğitim UVM Doğrulama
Yazar
Kerim Turak
Digital IC Design & Verification Engineer
Table of Contents
UVM Serisi - This article is part of a series.
Part 34: This Article

📚 UVM Register Model Oluşturma ve UVM Ortamına Entegrasyon
#

UVM RAL (Register Abstraction Layer), tasarımdaki register ve memory yapılarını modellemek ve testbench üzerinden kontrol etmek için kapsamlı bir yapı sunar. Bu sayfa, hem register modelinin oluşturulmasını hem de UVM ortamına entegrasyonunu detaylandırır. Ayrıca, Pre-defined Field Access Policies, map() ve set_offset() methodları, adapter kavramı ve bus interface bağlantısı gibi kritik konuları da açıklar.


1️⃣ Register Model Oluşturma
#

🔨 Manuel Modelleme
#

Register model, manuel olarak uvm_reg, uvm_reg_field, uvm_reg_block, uvm_mem gibi sınıflar kullanılarak SystemVerilog ile yazılabilir:

class my_reg extends uvm_reg;
  rand uvm_reg_field status;

  function new(string name = "my_reg");
    super.new(name, 32, UVM_NO_COVERAGE);
  endfunction

  virtual function void build();
    status = uvm_reg_field::type_id::create("status");
    status.configure(this, 8, 0, "RW", 0, 1, 1, 0);
  endfunction
endclass

2️⃣ Pre-defined Field Access Policies
#

UVM RAL, register veya field erişimi için hazır (pre-defined) erişim politikaları sunar. Bunlar:

  • "RW": Read-Write
  • "RO": Read-Only
  • "WO": Write-Only
  • "RC": Read-Clear
  • "W1C": Write-1-to-Clear

Örneğin:

status.configure(this, 8, 0, "RW", 0, 1, 1, 0);

Burada:

  • 8 → Field genişliği (bit sayısı)
  • 0 → Offset (field’in register içindeki bit pozisyonu)
  • "RW" → Pre-defined field access policy
  • Diğer parametreler reset değeri, volatile özelliği gibi kontrol bilgileri içerir.

3️⃣ Register Block Oluşturma ve Haritalama (map() Method)
#

Bir uvm_reg_block, register’ları veya memory’leri tek bir yapıda toplar. Register block içinde map() methodu ile register’ların fiziksel adresleri tanımlanır:

default_map = create_map("default_map", 'h0, 4, UVM_LITTLE_ENDIAN);
default_map.add_reg(ctrl_reg, 'h00, "RW");

Burada:

  • 'h0 → Base address
  • 4 → Address stride
  • UVM_LITTLE_ENDIAN → Endian formatı

map() methodu register block seviyesinde mapping oluşturmayı sağlar. create_map() methodu ile yeni bir map yaratılır, add_reg() ile register’lar bu haritaya eklenir.


4️⃣ set_offset() Method
#

Bazen register veya register field’ların offset adresini dinamik olarak ayarlamak gerekebilir. Bunun için set_offset() kullanılır:

ctrl_reg.set_offset('h10);  // Register offset adresini 'h10 yap

Bu yöntem register modelini dinamikleştirerek farklı adres haritalarını desteklemenizi kolaylaştırır.


5️⃣ Adapter Kavramı ve Detayları
#

🔌 Adapter Nedir?
#

uvm_reg_adapter, register model ile bus protokolü arasında köprü kurar. Yani register read/write çağrıları ile sequencer-driver arası bus işlemlerini birbirine bağlar.

Örnek adapter:

class my_adapter extends uvm_reg_adapter;
  function new(string name = "my_adapter");
    super.new(name);
    supports_byte_enable = 0;
    provides_responses = 1;
  endfunction

  virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw);
    // RAL isteğini bus protokolüne dönüştürür
  endfunction

  virtual function void bus2reg(uvm_sequence_item bus_item, ref uvm_reg_bus_op rw);
    // Bus'tan gelen cevabı RAL modeline aktarır
  endfunction
endclass
  • reg2bus(): RAL modelden bus seviyesine dönüşüm.
  • bus2reg(): Bus’tan gelen veriyi RAL modele dönüştürme.

Adapter, UVM environment’da register model ile bus interface arasındaki katmandır.


6️⃣ Map ve Bus Interface’i Bağlama
#

Register modelini frontdoor erişimi ile testbench’e bağlamak için:

  1. Register block’un default map’i ile sequencer eşleştirilir.
  2. Adapter atanır.
regmodel.default_map.set_sequencer(my_sequencer, my_adapter);
  • my_sequencer: Bus protokolünü kontrol eden sequencer.
  • my_adapter: RAL erişimini bus erişimine dönüştürür.

Bu adım sayesinde:

  • RAL üzerinden yapılan register read/write çağrıları, adapter aracılığıyla bus üzerinden driver’a yönlendirilir.
  • Bus protokolü ile register modeli entegre edilmiş olur.

7️⃣ Entegre Kullanım Akışı
#

🔎 Özetle: 1️⃣ Register Model: Register’lar, field’lar, block’lar tanımlanır ve offsetler set edilir. 2️⃣ Adapter: RAL ile bus protokolü arasında dönüştürücü yazılır. 3️⃣ Sequencer Bağlantısı: set_sequencer() ile frontdoor erişimi kurulur. 4️⃣ Testbench Entegrasyonu: Environment içinde register model instantiate edilir ve testler yazılır.


✨ Özet Tablosu
#

KonuAçıklama
Pre-defined PoliciesField erişim tipleri (RW, RO, WO, RC, W1C)
map() MethodRegister’ları adres haritasına ekler
set_offset() MethodRegister veya field adres offsetini dinamik ayarlar
AdapterRAL ile bus protokolü arasında köprü kurar
Bus Interface BağlantısıRAL model ile sequencer/driver bağlantısı

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

Related

UVM RAL (Register Abstraction Layer) Kullanımı ve Özellikleri
· loading · loading
Kerim Turak
Eğitim UVM Doğrulama UVM RAL Register Abstraction Layer Doğrulama SystemVerilog Register Modeling
Eğitim UVM Doğrulama
UVM RAL Modeli ile Sequencer ve Monitor Bağlantısı
· loading · loading
Kerim Turak
Eğitim UVM Doğrulama UVM RAL Sequencer Monitor Predictor Register Verification SystemVerilog Testbench Doğrulama
Eğitim UVM Doğrulama
UVM RAL Predictor Kullanımı: Register Modelini Senkronize Tutma
· loading · loading
Kerim Turak
Eğitim UVM Doğrulama UVM RAL Predictor Register Verification Bus Monitor SystemVerilog Testbench Doğrulama
Eğitim UVM Doğrulama
UVM RAL Register API Kullanımı: Frontdoor ve Backdoor Erişim
· loading · loading
Kerim Turak
Eğitim UVM Doğrulama UVM RAL Register Access Frontdoor Backdoor SystemVerilog Testbench Doğrulama
Eğitim UVM Doğrulama
UVM RAL: Bellek, Adres Haritası ve Daha Fazlası
· loading · loading
Kerim Turak
Eğitim UVM Doğrulama UVM RAL Register Abstraction Layer SystemVerilog Memory Adres Haritası Register Doğrulama
Eğitim UVM Doğrulama
UVM Temel Sınıfları
· loading · loading
Kerim Turak
Eğitim UVM Doğrulama UVM Doğrulama SystemVerilog Sınıf Hiyerarşisi
Eğitim UVM Doğrulama