Ana içeriğe geç

Verilog Sözdizimi Genel Bakış: Dijital Tasarım Temelleri

· loading · loading · ·
Kerim Turak
Donanım Tasarımı Verilog Sözdizimi Verilog Temelleri Veri Tipleri RTL Kodlama Donanım Tanımlama Dili
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 11: This Article

📘 Verilog Sözdizimine Genel Bakış
#

Verilog sözdizimi C diline benzer ve modüller, portlar, veri tipleri, atamalar ve prosedürel bloklardan oluşur.


📑 Temel Verilog Sözdizimi Kuralları ve Kavramları
#

KavramSözdizimi ÖrneğiAçıklama
Modülmodule adder(...); ... endmoduleTemel tasarım birimi
Portlarinput, output, inoutModül arayüz sinyalleri
Veri Tipleriwire, reg, integer, realSinyal ve değişken tanımlamaları
Atamaassign y = a & b;Kombinasyonel mantık için sürekli atama
Prosedürel Blokalways, initialSıralı veya sadece simülasyon amaçlı kod
Gecikme#10Zaman gecikmesi (sadece simülasyonda)
Yazdırma$display, $monitor, $finishTestbench çıktıları için
Yorumlar// tek satır, /* çok satır */C/C++ ile aynı

✅ Başlangıç için Temel Kodlama Kuralları
#

  1. Her tasarım bir module içinde tanımlanmalı ve endmodule ile bitmelidir.
  2. Kombinasyonel çıktılar için wire, always içinde atanacak değerler için reg kullanın.
  3. Sürekli atamalar için assign kullanın, always içinde değil.
  4. always @(*) veya always @(posedge clk) yapıları doğru duyarlılık listeleriyle kullanılmalıdır.
  5. initial, #delay, $display gibi yapılar sentezlenemez, sadece simülasyon içindir.
  6. Kodunuzu girintili yazın ve bolca yorum ekleyin.
  7. Bit genişlikleri önemlidir: reg [3:0] a; 4-bit kayıt anlamına gelir.

✨ Örnek (Kombinasyonel ve Sıralı)
#

Sıralı
#

module example(input clk, input a, b, output reg y);

// Sıralı süreç
always @(posedge clk) begin
  y <= a & b;  // Engellenmeyen atama
end

endmodule

Kombinasyonel
#

module example(input a, b, output reg y);

// Kombinasyonel süreç
always @(*) begin
  y = a & b;  // Engelleyen atama
end

endmodule

🔢 Verilog’da Boyutlandırılmış ve Boyutlandırılmamış Sabitler
#

Verilog’da sayısal sabitler (literaller), boyutlandırılmış veya boyutlandırılmamış olabilir. Bu fark, simülasyon ve sentez davranışlarını etkiler.

📐 Boyutlandırılmış Sabitler
#

Biçim: bit_sayısı'taban_değer

Örnekler:

4'b1010     // 4-bit ikili: 1010
8'hA9       // 8-bit onaltılık: A9
-16'sd5     // 16-bit işaretli ondalık: -5

s öneki (16'sd gibi) değerin işaretli olduğunu belirtir.

🧩 Boyutlandırılmamış Sabitler
#

  • Bit genişliği belirtilmez.
  • Varsayılan olarak en az 32 bit işaretli kabul edilir.

Örnekler:

12        // 32-bit işaretli olarak değerlendirilir
'd7       // Taban belirtilmiş ama boyut belirtilmemiş

⚠️ Özel Değerler
#

SembolAnlamıÖrnek
xBilinmeyen değer4'b10x1
zÜç durum (float)8'bzzzzzzzz
?z için takma ad4'b??0?

🔧 Dolgu (Padding) Davranışı
#

Bit sayısından azsa, soldan 0, x veya z ile doldurulur:

4'b1     // 4'b0001 olarak yorumlanır
8'hx     // 8'hxx (xxxxxxxx)

❌ Geçersiz Sözdizimi Uyarısı
#

8'd -6    // ❌ Hata verir

Doğru kullanımlar:

-8'd6     // ✅ İşaretli sabit
-(8'd6)   // ✅ Parantezli hali

🧠 Tavsiye
#

RTL tasarımlarda her zaman boyutlandırılmış sabitler kullanın. Böylece bit genişlikleri ve işaret genişlemeleri öngörülebilir olur.


⚙️ Verilog’ta Operatörler
#

Verilog birçok kategoriye ayrılmış operatör içerir:

TürÖrnekAçıklama
Aritmetik+, -, *, /, %Temel matematik işlemleri
Mantıksal&&, || , !Doğru/yanlış kontrolü
Bit düzeyinde&, |, ^, ~Tek tek bitler üzerinde işlem yapar
Kaydırma<<, >>Bitleri sola/sağa mantıksal kaydırma
Karşılaştırma==, !=, <, >=Karşılaştırma (1-bit sonuç döner)
Azaltma (Reduction)~&, |, ~|, ^, ~^Bir vektörün tüm bitleri üzerinde işlem
Birleştirme{a, b}Sinyalleri yan yana birleştirir
Tekrarlama{3{a}}Bir sinyali tekrar eder
Equality===, !==Case equality (X/Z sensitive)
Conditionaldurum ? doğru_değer : yanlış_değerTernary (if-else tek satır)

🧵 String Veri Tipi
#

  • Verilog, string tipini doğrudan desteklemez; sadece sistem görevleri ($display, $write, vs.) için string kullanımı mümkündür.

  • C dilindeki gibi yerel bir string veri tipi yoktur.

  • Kullanım örneği:

    $display("Hello = %s", "World");
    
  • Karakter saklamak için genellikle şöyle yapılır:

    reg [8*UZUNLUK-1:0] my_string;
    

🔍 Örnek:

reg [79:0] message; // 10 karakter
initial message = "Verilog!";

🆔 Verilog’ta Tanımlayıcılar (Identifiers)
#

Tanımlayıcılar; modül adları, değişkenler, portlar vb. isimlendirmek için kullanılır.

  • Bir harf (a–z, A–Z) ya da alt çizgi (_) ile başlamalıdır.
  • Harf, rakam, alt çizgi ve $ sembolü içerebilir.
  • Verilog anahtar kelimeleriyle aynı olamaz.
  • Büyük/küçük harf duyarlıdır (dataData)

✅ Geçerli Örnekler:

wire data_1;
reg _temp;
reg $value;

❌ Geçersiz Örnekler:

reg 2data;    // ❌ Rakamla başlıyor
reg module;   // ❌ Anahtar kelime

🗂 Verilog Rezerve Edilmiş Anahtar Kelimeleri
#

İşte Verilog-2005’teki rezerve edilmiş kelimelerin kısa bir listesi:

always, and, assign, automatic, begin, buf, bufif0, bufif1,
case, casex, casez, cell, cmos, config, deassign, default,
defparam, design, disable, edge, else, end, endcase, endconfig,
endfunction, endgenerate, endif, endmodule, endprimitive,
endspecify, endtable, endtask, event, for, force, forever,
fork, function, generate, genvar, if, ifnone, incdir, include,
initial, inout, input, instance, integer, join, large, liblist,
library, localparam, macromodule, medium, module, nand, negedge,
nmos, nor, not, notif0, notif1, or, output, parameter, pmos,
posedge, primitive, pull0, pull1, pulldown, pullup, rcmos,
real, realtime, reg, release, repeat, rnmos, rpmos, rtran,
rtranif0, rtranif1, scalared, small, specify, specparam,
strong0, strong1, supply0, supply1, table, task, time, tran,
tranif0, tranif1, tri, tri0, tri1, triand, trior, trireg,
unsigned, use, vectored, wait, wand, weak0, weak1, while, wire,
wor, xnor, xor

✅ Bu kelimeleri kendi değişken veya modül ismin olarak kullanamazsın.


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

Related

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 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 Derleyici Direktifleri ve Makrolar: Koşullu Derleme ve Kod Tekrarı
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Direktifleri Verilog Makrolar Koşullu Derleme Kod Tekrarı Donanım Tanımlama Dili
Donanım Tasarımı
Verilog Modülleri, Portları, Atamaları ve En İyi Uygulamaları
·565 kelime·3 dk· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Modül Verilog Portları Verilog Assign Verilog Always Donanım Tanımlama Dili
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ı
Verilog'a Giriş: Dijital Tasarım Temelleri
·699 kelime·4 dk· loading · loading
Kerim Turak
Donanım Tasarımı Verilog FPGA ASIC RTL Tasarımı Donanım Tanımlama Dili
Donanım Tasarımı