Ana içeriğe geç

Verilog Kontrol Akışı: if, case, Döngüler ve RTL Kuralları

· loading · loading · ·
Kerim Turak
Donanım Tasarımı Verilog Kontrol Akışı Verilog If-Else Verilog Case Verilog Döngüler RTL Tasarımı
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 7: This Article

🔄 Verilog’ta Kontrol Akışı Yapıları
#

Kontrol akışı yapıları, always, initial veya generate blokları içinde koşullu ve döngüsel davranışları tanımlar. RTL yazımı veya testbench geliştirme için temel bileşenlerdir.


✅ Koşullu Dallanma: if / else
#

Basit iki durumlu kararlar için kullanılır.

always @(posedge clk) begin
  if (reset)
    count <= 0;
  else if (enable)
    count <= count + 1;
  else
    count <= count;
end

📌 RTL’de güvenli yapı: Her clock kenarında belirli bir çıkış üretir.


🔄 Çoklu Seçim: case
#

Çok sayıda olası durum için if zincirinden daha okunabilir bir yapıdır.

always @(*) begin
  case (opcode)
    4'b0001: alu_out = a + b;
    4'b0010: alu_out = a - b;
    4'b0011: alu_out = a & b;
    4'b0100: alu_out = a | b;
    default: alu_out = 0;
  endcase
end

✅ Kombinasyonel bloklarda latch oluşumunu engellemek için default kullanın.


🔸 Özel Varyantlar: casez ve casex
#

TürJoker KarakterKullanım Senaryosu
casezzBelirsiz bitlerle (örneğin adres) eşleşme
casexx, zDon’t-care durumlarıyla eşleşme (sentezde riskli)
casez (instr[7:0])
  8'b1??_?????: result = R_type;
  8'b0000_0001: result = NOP;
  default:      result = ILLEGAL;
endcase

⚠️ casex, sentezde belirsizlik yaratabilir — mümkünse casez ya da normal case tercih edin.


🔁 Döngü Yapıları
#

Verilog’ta döngüler genelde testbench, generate block ya da başlangıç (initial) kodları için kullanılır.


🔁 for Döngüsü
#

Başlatma ve bellek erişimi gibi işlemlerde kullanılır.

integer i;
initial begin
  for (i = 0; i < 8; i = i + 1)
    mem[i] = 8'hFF;
end

✅ Sentezlenebilir, sınırları sabit olmak kaydıyla.


🔁 while Döngüsü
#

Koşul sağlandıkça çalışır. Testbenchlerde yaygındır.

initial begin
  while (!done)
    @(posedge clk);
  $display("İşlem tamamlandı!");
end

⚠️ RTL’de kullanırken dikkatli olun, döngü uzunluğu sabit değilse sentezlenemez.


🔁 repeat Döngüsü
#

Belirli sayıda tekrarlanan işlemler için uygundur.

initial begin
  repeat (10) @(posedge clk);
  $finish;
end

✅ Simülasyonda clock gecikmesi oluşturmak için idealdir.


forever Döngüsü
#

Sonsuz döngü. Genelde testbenchlerde veya clock üretiminde kullanılır.

initial begin
  forever #5 clk = ~clk;
end

⚠️ RTL’de kesinlikle kullanılmamalıdır!


🧠 Özet Tablosu
#

YapıRTL UygunluğuTestbench KullanımıSentez Notları
if/elseTamamen sentezlenebilir
casedefault olmadan latch oluşabilir
for✅**Sınırlar sabit olmalı
while⚠️Sentez için sınır sabit olmalı
repeatSadece simülasyon
foreverAsla RTL’de kullanılmamalı

💡 İpucu: SystemVerilog kullanıyorsan always_comb, always_ff, always_latch gibi daha anlamlı blok türlerini kullanmayı tercih et.


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

Related

Verilog Atamaları: Prosedürel ve Sürekli Atama Farkları
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Atamaları Sürekli Atama Prosedürel Atama RTL Tasarımı Donanım Tanımlama Dili
Donanım Tasarımı
Verilog Sentezi: RTL'den Kapı Seviyesi Netlist'e
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Sentez RTL Tasarımı Kapı Seviyesi Netlist FPGA Tasarım ASIC Tasarım
Donanım Tasarımı
Donanım Tasarımında Soyutlama Seviyeleri
·208 kelime·1 dk· loading · loading
Kerim Turak
Donanım Tasarımı Donanım Soyutlama RTL Tasarımı Kapı Seviyesi Transistör Seviyesi Dijital Tasarım
Donanım Tasarımı
Verilog Ad Alanları: Kapsam ve Modülerliği Anlamak
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Ad Alanı Verilog Kapsam Modülerlik RTL Tasarımı Donanım Tanımlama Dili
Donanım Tasarımı
Verilog Blocking vs. Non-Blocking Atamalar
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Atamaları Blocking Atama NonBlocking Atama RTL Tasarımı Sıralı Mantık
Donanım Tasarımı
Verilog Parametreleri: Modülleri Yeniden Kullanılabilir ve Yapılandırılabilir Kılmak
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Parametreleri Yeniden Kullanılabilir Tasarım Yapılandırılabilir Modüller RTL Tasarımı Donanım Tanımlama Dili
Donanım Tasarımı