📚 UVM RAL Modelinin Sequencer ve Monitor ile Bağlantısı#
UVM Register Abstraction Layer (RAL) kullanarak register modelini doğrularken, modelin hem yazma/okuma isteklerini doğru şekilde bus üzerinden yönlendirebilmesi hem de tasarımdan gelen register değişimlerini yakalayabilmesi çok önemlidir. Bunun için RAL modelini sequencer ve monitor ile entegre ederek hem frontdoor hem de backdoor erişimi kontrol altına alabiliriz.
Bu sayfada, RAL modelini sequencer ve monitor ile nasıl bağlayacağımızı ve bu bağlantının nasıl çalıştığını açıklıyoruz.
🔗 1️⃣ Sequencer ile Bağlantı#
🛠️ Neden Gerekli?#
Frontdoor erişimi (bus üzerinden register okuma/yazma) için RAL modelinin bir sequencer’a bağlanması gerekir. Böylece:
regmodel.reg.write()
veyaregmodel.reg.read()
gibi çağrılar yapıldığında, RAL modeli adapter aracılığıyla bir sequence item oluşturur.- Bu item, sequencer üzerinden driver’a gönderilir ve bus protokolü ile fiziksel tasarıma ulaşır.
📌 Nasıl Yapılır?#
Örnek:
// Adapter ve sequencer daha önce instantiate edilmiş olmalı
regmodel.default_map.set_sequencer(my_sequencer, my_adapter);
default_map
: Register blok içindeki default adres haritasını temsil eder.my_sequencer
: Testbench’te bus işlemlerini yöneten sequencer.my_adapter
: RAL çağrılarını bus protokolüne dönüştüren adapter sınıfı.
Bu bağlantı sayesinde RAL, frontdoor işlemlerini bus driver’a yönlendirebilir.
🔎 2️⃣ Monitor ile Bağlantı#
🛠️ Neden Gerekli?#
Tasarım tarafından (ya da başka bir master tarafından) yapılan register işlemleri testbench tarafından da yakalanmalıdır. Böylece RAL modeli ile tasarımın senkronizasyonu sağlanır. Bu işlemler genellikle monitor tarafından yakalanır ve predictor bileşeni ile RAL modeline aktarılır.
📌 Nasıl Yapılır?#
Monitor genelde bir analysis port üzerinden predictor’a bağlanır:
// Monitor'un analysis port'unu predictor'un bus_in port'una bağla
my_monitor.ap.connect(my_predictor.bus_in);
my_monitor
: Bus üzerindeki işlemleri dinler ve analysis port’a gönderir.my_predictor
: Bus işlemlerini alır ve RAL modelinde predict yapar.
Bu yapı sayesinde: 1️⃣ Driver’dan gelen frontdoor işlemleri RAL modeli üzerinden sequencer’a gönderilir. 2️⃣ Monitor bus’ı dinler, analysis port üzerinden predictor’a bilgi verir. 3️⃣ Predictor, RAL modelini günceller.
🔌 3️⃣ Adapter’in Rolü#
Adapter, register model ile bus protokolü arasındaki köprüyü kurar:
reg2bus()
: RAL modeli tarafından oluşturulan işlemi (read/write) bus protokolüne dönüştürür.bus2reg()
: Bus’tan gelen cevabı RAL modeline geri dönüştürür.
Bu, sequencer bağlantısında hayati bir rol oynar çünkü RAL modelinin register işlemleri ile bus protokolü arasındaki çeviriyi gerçekleştirir.
📝 4️⃣ Bağlantı Akışı#
Adım | Açıklama |
---|---|
1️⃣ | RAL modeli register işlemi başlatır (read() , write() ). |
2️⃣ | Adapter, RAL işlemini bus item’ına dönüştürür (reg2bus() ). |
3️⃣ | Sequencer üzerinden driver’a gönderilir. |
4️⃣ | Driver, tasarıma erişir ve işlemi uygular. |
5️⃣ | Monitor, bus’ı dinler ve analysis port’a veri gönderir. |
6️⃣ | Predictor, analysis port’tan bus item’ını alır. |
7️⃣ | Predictor, RAL modelinde predict işlemi yapar. |
8️⃣ | RAL modeli ile tasarım verisi senkronize edilir. |
📦 5️⃣ Kod Örnekleri#
🔹 Sequencer bağlantısı:
regmodel.default_map.set_sequencer(my_sequencer, my_adapter);
🔹 Monitor ve predictor bağlantısı:
my_monitor.ap.connect(my_predictor.bus_in);
my_predictor.map = regmodel.default_map;
✨ Özet#
✅ Sequencer Bağlantısı: Frontdoor erişimi için RAL modeli ile bus sequencer ve adapter’i bağlar. ✅ Monitor ve Predictor Bağlantısı: Tasarımdan gelen register değişikliklerini dinler ve RAL modelini günceller. ✅ Adapter: RAL ile bus protokolü arasında köprü görevi görür. ✅ Predictor: Monitor’dan gelen işlemleri register modeline yansıtarak model ile tasarımı senkronize tutar.