Ana içeriğe geç

Verilog Simülasyon Temelleri ve Testbench Tasarımı

· loading · loading · ·
Kerim Turak
Donanım Tasarımı Verilog Simülasyon Testbench Timescale Simülasyon Bölgeleri Donanım Doğrulama
Donanım Tasarımı
Yazar
Kerim Turak
Digital IC Design & Verification Engineer
Table of Contents
Verilog HDL Serisi - This article is part of a series.
Part 14: This Article

🧪 Verilog Simülasyonu Temelleri
#

Verilog simülasyonu, tasarımınızın zaman içinde çalıştırılması, davranışının gözlemlenmesi ve doğrulanması sürecidir.

💡 Temel Kavramlar:
#

  • Simülasyon zamanı adım adım ilerler (örn. #10)
  • Testbench girişleri uygular ve çıkışları gözlemler
  • Sentez yapılmaz — tamamen sanal bir çalışmadır

🧰 Testbench Nedir?
#

Testbench, Verilog modülü olup DUT’u (test edilen tasarım) örnekler, giriş sinyalleri üretir, ve opsiyonel olarak çıkışları izler.

✅ Örnek:
#

module tb;
  reg clk, rst;
  wire out;

  my_design dut (.clk(clk), .rst(rst), .out(out));

  initial begin
    rst = 1; #5; rst = 0;
    #100 $finish;
  end
endmodule

Testbench’ler sentezlenemez ve genellikle $display, $monitor, $dumpvars kullanır.


⏱️ timescale Direktifi
#

timescale direktifi, simülasyon zaman birimi ve zaman hassasiyetini tanımlar.

✅ Söz Dizimi:
#

`timescale 1ns / 1ps
DeğerAnlamı
1ns1 zaman birimi = 1 nanosecond
/1psZaman çözünürlüğü = 1 pikosaniye

timescale direktifini her .v dosyasının başına eklemeyi unutmayın, özellikle testbench’lerde.


🧭 Verilog Simülasyon Zamanlama Bölgeleri
#

Verilog simülasyonunda her zaman adımı, farklı zamanlama bölgelerine (simulation region) ayrılır. Bu bölgeler, kodun hangi sırayla çalıştığını belirler.


  1. Preponed Region (Ön Bölge)
    • posedge veya negedge gibi olay duyarlılıkları burada yakalanır
    • @(posedge clk) gibi tetiklemeler bu bölgede değerlendirilir
    • Testbench’teki zamanlamaya bağlı trigger mekanizmaları burada işler

  1. Active Region (Aktif Bölge)
    • Blocking (=) atamalar burada gerçekleşir
    • Continuous (assign) atamalar ve gate/primitive değerlendirmeleri yapılır
    • $display, $write, $finish gibi işlemler burada gerçekleştirilir
    • Bu bölge en öncelikli işlem bölgesidir (preponed’dan sonra)

  1. Inactive Region (Pasif Bölge)
    • Aynı zaman adımında planlanan #0 gecikmeli atamalar bu bölgede yürütülür
    • Diğer aktif işlemlerden daha sonra gerçekleşir

  1. Nonblocking Assign Update Region
    • <= kullanılarak yapılan nonblocking atamaların sağ tarafı (RHS), aktif bölgede değerlendirilir
    • Ama sol taraf (LHS) güncellemeleri, bu bölgede planlanır
    • Yani <= atamaları gecikmeli olarak burada gerçekleşir
    • Bu bölge, blocking assignment’tan sonra çalışır

  1. Postponed Region (Ertelenmiş Bölge)
    • $monitor, $strobe gibi komutlar burada yürütülür
    • Waveform kayıtları (VCD) bu bölgede yapılır
    • Tüm nonblocking atamalar uygulandıktan sonra çalışır
    • Her şey güncellendikten sonra gözlem yapmak içindir

⏰ Testbench’te Clock Üretimi
#

Bir clock sinyali, initial + forever ya da always ile üretilebilir.

✅ Örnek 1: always ile
#

reg clk = 0;
always #5 clk = ~clk;  // 10ns clock periyodu

✅ Örnek 2: initial ile
#

initial begin
  clk = 0;
  forever #5 clk = ~clk;
end

forever yapısı yalnızca testbench içindir — sentezlenebilir kodlarda kullanmayın.

  • Başlangıç değeri: clk = 0 (veya 1) şeklinde saat sinyalini başlatmak her zaman iyi bir pratiktir. Aksi halde simülasyonun başlangıcında tanımsız (x) bir değer oluşabilir.
  • Periyot tanımı: #5 ifadesi yarım periyodu belirtir. Yani #5 gecikmesiyle üretilen saat sinyali toplamda 10ns periyoda sahip olur.
  • Çalışma oranı (Duty cycle): %50 duty cycle elde etmek için yüksek ve düşük sürelerin eşit olması gerekir (#5#5). Örneğin, %30–%70 gibi farklı oranlar için #3 ve #7 gibi asimetrik değerler kullanılabilir.
  • Çoklu saat sinyalleri: Eğer tasarımda birden fazla saat alanı (clock domain) varsa, her biri için farklı periyoda sahip ayrı saat üretim blokları tanımlanmalıdır.

🔄 Tipik Simülasyon Akışı
#

  1. initial blokları zaman 0’da başlar
  2. assign / always mantığı sinyal değişimlerine tepki verir
  3. Zaman # gecikmeleri veya olaylarla ilerler
  4. $monitor, $dumpvars gibi komutlar çıkışları kaydeder

İşte bu kapsamlı bölümün Türkçe çevirisi:


🧪 Verilog’da Davranışsal ve Kapı Seviyesi Simülasyon
#

🔹 Davranışsal (Behavioral) Simülasyon
#

  • RTL (Register Transfer Level) seviyesinde çalışır
  • always, assign, initial gibi yapılarla amaçlanan fonksiyonelliği tanımlar
  • Hızlıdır ve erken işlevsel testler için idealdir
  • Gerçek kapı yapısı veya gecikmeler içermez

🔹 Kapı Seviyesi (Gate-Level) Simülasyon
#

  • Sentezlenmiş netlist üzerinden simülasyon yapar — lojik kapılar, flip-floplar, mux’lar vb.
  • Gerçek donanım davranışını yansıtır; zaman gecikmeleri ve fan-out etkileri dahil
  • Yavaştır, ancak son doğrulama için gereklidir
  • ASIC akışlarında SDF (Standard Delay Format) dosyaları kullanılır

Verilog HDL Serisi - This article is part of a series.
Part 14: This Article

Related

Verilog Hiyerarşik Referans: Dahili Sinyallere Erişim
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Hiyerarşik Referans Force Release Testbench Simülasyon Hata Ayıklama Donanım Doğrulama
Donanım Tasarımı
Verilog Komut Satırı Girişi: Testbench Kontrolü İçin $plusargs
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Komut Satırı Plusargs Testbench Simülasyon Kontrolü Donanım Doğrulama
Donanım Tasarımı
Verilog Gecikme Kontrolleri: #Gecikme, @Olay, Bekleme
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Gecikme Olay Kontrolü Bekleme İfadesi Simülasyon Testbench
Donanım Tasarımı
Verilog Sistem Fonksiyonları ve Görevleri: Simülasyon İçin
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Sistem Fonksiyonları Verilog Görevler Simülasyon Testbench Rastgeleleştirme
Donanım Tasarımı
Verilog VCD: Simülasyon Analizi İçin Dalga Formu Kaydı
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog VCD Dalga Formu Görüntüleme Simülasyon Analizi Testbench GTKWave
Donanım Tasarımı
Verilog initial Bloğu: Testbench ve Simülasyon Temelleri
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Initial Verilog Testbench Simülasyon Donanım Doğrulama Dijital Tasarım
Donanım Tasarımı