📚 UVM RAL Bölümleri: Memory, Address Map ve Daha Fazlası#
UVM Register Abstraction Layer (RAL), tasarımdaki register yapılarının yüksek seviyede modellenmesini ve doğrulanmasını sağlar. Bu yapılar, RAL’in hiyerarşik modelini oluşturan temel yapı taşlarıdır. Şimdi bunları teker teker açıklayalım:
🗂️ 1. Memory#
Memory, tasarımdaki RAM, ROM veya diğer bellek bloklarını temsil eder. Bu bloklar, tek veya çok boyutlu olabilir. RAL’de uvm_mem
sınıfı ile modellenir.
Özellikler:
- Adres aralığı, word genişliği ve erişim tipleri tanımlanabilir.
- Frontdoor (bus üzerinden) veya backdoor (doğrudan HDL erişimi) ile test edilebilir.
Kullanım:
uvm_mem::write()
,uvm_mem::read()
gibi fonksiyonlarla belleğe erişim sağlanır.- Memory alanları genellikle DMA, buffer veya FIFO gibi yapıları doğrulamada kullanılır.
🗺️ 2. Address Map#
Address Map, register ve memory bloklarının tasarımdaki fiziksel adreslerini temsil eder. uvm_reg_map
sınıfı ile modellenir.
Özellikler:
- Her bir register veya memory için base address ve offset bilgisi tutulur.
- Bus protokollerine göre adresleme (byte-addressable veya word-addressable) desteklenir.
Kullanım:
uvm_reg_block
içindeki register veya memory nesneleri, map aracılığıyla testbench’e tanıtılır.- Frontdoor erişimde driver/sequencer ile haberleşmek için map kullanılır.
🧩 3. Register Blocks#
Register Block, bir veya birden fazla register ve/veya memory nesnesinin mantıksal bir grup olarak tutulduğu yapıdır. uvm_reg_block
sınıfı ile modellenir.
Özellikler:
- Genellikle bir IP veya subsystem’in tüm register haritasını temsil eder.
- Hierarchical yapı kurulabilir (block içinde block).
Kullanım:
- Tasarımın farklı modülleri için ayrı register block’lar tanımlanabilir (ör. PCIe_Block, UART_Block).
- Tüm block’lar tek bir top-level block altında birleştirilebilir.
📂 4. Register Files#
Register File, genellikle aynı tipte register’ların tekrarlı kullanıldığı yapılardır. uvm_reg_file
sınıfı ile modellenir.
Özellikler:
- Birden fazla register nesnesini organize eder (ör. bir FIFO pointer register dosyası).
- Indeksli erişim sağlayabilir.
Kullanım:
reg_file[3].write(status, value);
gibi kullanımlarla file içindeki belirli register’a erişim yapılabilir.
📝 5. Registers#
Register, tasarımdaki tekil veya çok bitlik register’ları temsil eder. uvm_reg
sınıfı ile modellenir.
Özellikler:
- Adres, reset değeri, erişim tipi (RO, RW) gibi parametreler tanımlanabilir.
- Randomization ve coverage desteği içerir.
Kullanım:
reg_model.my_reg.write(status, 32'hDEADBEEF);
reg_model.my_reg.read(status, read_value);
🔑 6. Register Fields#
Register Field, register içindeki bit alanlarını temsil eder. uvm_reg_field
sınıfı ile modellenir.
Özellikler:
- Bit pozisyonu, genişliği ve erişim türü belirlenebilir.
- Field-level randomization yapılabilir.
Kullanım:
reg_model.my_reg.my_field.set(3'b101);
reg_model.my_reg.my_field.get(value);
✨ Özet#
Bölüm | Açıklama |
---|---|
Memory | Bellek bloklarını temsil eder (RAM, ROM, FIFO). |
Address Map | Adres haritalaması ve frontdoor/backdoor erişimi sağlar. |
Register Block | Bir IP veya alt sistemdeki register’ları organize eder. |
Register File | Aynı tip register’ları indeksli şekilde tutar. |
Register | Tekil register nesnesini temsil eder. |
Register Field | Register içindeki bit alanlarını temsil eder. |
Bu yapıların hepsi, RAL’in hiyerarşik yapısında bir araya gelerek karmaşık tasarımlar için kolaylıkla kontrol edilebilir, randomize edilebilir ve doğrulanabilir bir model sunar.