🧪 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ğer | Anlamı |
---|---|
1ns |
1 zaman birimi = 1 nanosecond |
/1ps |
Zaman çö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ülasyonu, her zaman adımında 4 aşamalı bir döngü içinde ilerler:
Bölge | Amaç | Örnek |
---|---|---|
Active | RTL değerlendirme (always , assign ) |
RTL güncellemeleri |
Inactive | Gecikmeli tetikleyiciler (#0 gibi) |
#0 a = 1; |
Non-blocking Update | Planlanmış <= güncellemeleri |
Register güncellemeleri |
Monitor | $display , $monitor işlemleri |
Değişiklikleri izleme |
Bu sıralama,
<=
,$display
ve sinyal geçişlerinin doğru çalışmasını sağlar.
⏰ 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.
🔄 Tipik Simülasyon Akışı #
initial
blokları zaman 0’da başlarassign
/always
mantığı sinyal değişimlerine tepki verir- Zaman
#
gecikmeleri veya olaylarla ilerler $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