Ana içeriğe geç

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ı
Yazar
Kerim Turak
Digital IC Design & Verification Engineer
Table of Contents
Verilog HDL Serisi - This article is part of a series.
Part 15: This Article

⏱️ Gecikme Kontrolleri (Delay Controls)
#

Gecikme kontrolleri, zamana bağlı veya olaya bağlı davranışları simüle etmek için kullanılır. Bu yapılar genellikle sadece testbench’lerde veya sentezlenemez kodlar içinde kullanılır.

🔹 #delay — Zaman Gecikmesi (sadece simülasyon için)
#

#10 a = 1;  // 10 zaman birimi bekle, sonra ata

RTL tasarımlarda # gecikmesi kullanmayın — sentez sırasında hata verir.


🔹 @event — Olay Tabanlı Kontrol
#

@(posedge clk) q = d;   // clk yükselen kenarına kadar bekle
@(a or b) out = a & b;  // 'a' veya 'b' değişene kadar bekle

🔹 wait — Bloklayıcı Bekleme Komutu
#

wait komutu, belirtilen koşul doğru olana kadar yürütmeyi duraklatır.

wait (ready == 1);   // 'ready' sinyali 1 olana kadar bekle
a = data_in;         // Daha sonra ata

🔹 Birleşik Kullanım Örneği
#

always @(posedge clk) begin
  wait (ready);       // 'ready' sinyali 1 olana kadar bekle
  a = temp;           // Ardından 'temp' değerini 'a'ya ata
end

repeat ile intra-assignment ve normal delay farkı
#

Yazım ŞekliAnlamı
a = repeat(3) @(posedge clk) b;b değeri hemen alınır, sonra 3 pozitif kenar beklenir, a‘ya atanır.
repeat(3) @(posedge clk); a = b;3 pozitif kenar beklenir, sonra o andaki b değeri a‘ya atanır.

🎯 Fark: İlki b‘yi başta alır, ikincisi gecikmeden sonra alır.


module tb_delay_control;

    reg clk = 0;
    reg ready = 0;
    reg [7:0] data_in = 8'hA5, temp = 8'h3C, a, b;

    // Clock generation
    always #5 clk = ~clk;

    // Time delay example
    initial begin
        #10 b = 8'hF0;
    end

    // Event and wait example
    always @(posedge clk) begin
        wait (ready == 1);
        a = temp;
    end

    // Trigger ready after 3 cycles
    initial begin
        #30 ready = 1;
      #50;
      $stop;
    end

    // repeat vs delay assignment
    initial begin
        b = 0;
        repeat(3) @(posedge clk); // delay for 3 cycles
        b = data_in;
    end

endmodule

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

Related

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 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 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ı
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ı