Ana içeriğe geç

SystemVerilog Clocking Block – Testbench Zamanlama Kontrolü

· loading · loading · ·
Kerim Turak
Doğrulama Donanım Tasarımı SystemVerilog Clocking Block RTL Tasarımı Testbench UVM Zamanlama
Doğrulama Donanım Tasarımı
Yazar
Kerim Turak
Digital IC Design & Verification Engineer
Table of Contents
SystemVerilog Tasarım Serisi - This article is part of a series.
Part 17: This Article

🕒 Clocking Block Nedir?
#

SystemVerilog’taki clocking block yapısı, testbench ile DUT (Design Under Test) arasındaki senkronizasyonu ve zamanlamayı sadeleştirmek için tasarlanmış özel bir yapıdır. İlgili sinyalleri bir grup altında toplar ve bu sinyallere belli bir clock kenarında erişim kurallarını tanımlar.

clocking cb @(posedge clk);
  input  data_out;
  output data_in;
endclocking

🎯 Neden Clocking Block Kullanılır?
#

Clocking Block OlmadanClocking Block ile
Manuel @clk takibi gerekiyorOtomatik clock kenarına hizalanmış erişim
Yarış koşulları oluşabilir❌ Yarış koşulları büyük ölçüde önlenir
#delay kullanımı gerekebilir✅ Temiz ve okunabilir zamanlama modeli
Kodun modülerleştirilmesi zor✅ Zamanlama davranışı kapsüllenebilir

🔧 Clocking block, zamanlama mantığını fonksiyonellikten ayırır — bu da UVM testbench’lerinde yeniden kullanılabilirliği artırır.


🧱 Temel Söz Dizimi ve Anlamı
#

interface bus_if(input logic clk);
  logic [7:0] data;
  logic      valid;

  clocking cb @(posedge clk);
    input  data;
    output valid;
  endclocking
endinterface
  • clocking cb: Clocking block ismiyle tanımlanır
  • @(posedge clk): Bu block’un clock sinyalidir
  • input / output: Testbench’in bakış açısından yön tanımlarıdır

🔁 Clocking Block Sinyallerine Erişim
#

Clocking block içindeki sinyallere nokta (.) notasyonu ile erişilir:

bus_if bus();
bus.cb.data <= 8'hA5;       // doğru zamanda sürülür
value = bus.cb.valid;       // clock kenarıyla hizalı örneklenir
  • Output atamalar aktif clock kenarında gerçekleşir
  • Input okuma işlemleri, clock kenarıyla hizalanarak yarış koşullarını önler

🧪 Testbench’te Kullanım Örneği
#

initial begin
  bus.cb.data <= 8'hF0;   // posedge clk öncesi veriyi sür
  @(bus.cb);              // clocking block olayını bekle
  $display("Gelen veri: %0h", bus.cb.valid);
end

@(cb) ifadesi, @(posedge clk) ifadesine denktir ancak clocking block kurallarına uygun olarak çalışır.


🧰 Gelişmiş Özellikler
#

  • Varsayılan Clocking Block: Interface veya modül içinde bir block varsayılan olarak tanımlanabilir:

    default clocking cb;
    
  • Yön Desteği: input, output, inout yönleri desteklenir.

  • Gecikme Tanımlama (Skew): Clocking block içindeki sinyallere gecikme atanabilir:

    clocking cb @(posedge clk);
      input  #1ns data_out;   // clk'ten 1ns sonra örnekle
      output #2ns data_in;    // clk'ten 2ns sonra sür
    endclocking
    

🚨 Yaygın Hatalar
#

Hatalı KullanımAçıklama
Hem cb.signal hem signal kullanımıZamanlama tutarsızlığına neden olur
@cb yazmayı unutmakİşlemler senkron olmayabilir
input sinyali sürülmeye çalışılırClocking block içindeki input’lar sadece okunur
@posedge tanımlanmamışClocking block tanımsız kalır veya yok sayılır

✅ Özet
#

ÖzellikSağladığı Avantaj
clocking blockZamanlama davranışının net tanımı
SenkronizasyonUyarıların clock kenarıyla hizalanması
Yeniden kullanılabilirlikUVM bileşenleriyle doğrudan uyumlu
Skew desteğiGerçekçi zamanlama modellemesi

Clocking block, SystemVerilog’un testbench yapılarında yarış koşullarını önleyen, okunabilirliği artıran ve zamanlamayı modülerleştiren güçlü bir aracıdır. Testbench’ten DUT’a senkron veri göndermek ya da gözlemlemek istiyorsan, clocking block senin temel aracın olmalı.


SystemVerilog Tasarım Serisi - This article is part of a series.
Part 17: This Article

Related

SystemVerilog Interface – modport ve Clocking Block ile Modüler Bağlantı
· loading · loading
Kerim Turak
Donanım Tasarımı Doğrulama SystemVerilog Interface Modport Testbench RTL Tasarımı Bağlantı
Donanım Tasarımı Doğrulama
SystemVerilog Giriş
· loading · loading
Kerim Turak
Donanım Tasarımı Doğrulama SystemVerilog Verilog RTL Tasarımı UVM Donanım Doğrulama IEEE 1800
Donanım Tasarımı Doğrulama
SystemVerilog Enum Veri Tipi
· loading · loading
Kerim Turak
Donanım Tasarımı Doğrulama SystemVerilog Enum Durum Makinesi RTL Tasarımı Testbench Hata Ayıklama
Donanım Tasarımı Doğrulama
SystemVerilog Logic Veri Türü
· loading · loading
Kerim Turak
Donanım Tasarımı Doğrulama SystemVerilog Logic RTL Tasarımı Verilog Sentezleme Net vs Değişken
Donanım Tasarımı Doğrulama
SystemVerilog Package Kullanımı – Yeniden Kullanılabilir Tipler ve Fonksiyonlar
· loading · loading
Kerim Turak
Donanım Tasarımı Doğrulama SystemVerilog Package Namespace Modüler Tasarım RTL UVM
Donanım Tasarımı Doğrulama
SystemVerilog Task ve Function Yapıları
· loading · loading
Kerim Turak
Donanım Tasarımı Doğrulama SystemVerilog Task Function RTL Tasarımı Testbench Yeniden Kullanılabilirlik
Donanım Tasarımı Doğrulama