⏱️ 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 Şekli | Anlamı |
---|---|
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.