Ana içeriğe geç

Verilog Sözdizimi

· loading · loading · · ·
HDL Verilog HDL
Axolot Logic
Yazar
Axolot Logic
Sayısal Tasarım Mühendisi
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ı
#

Kavram Sözdizimi Örneği Açıklama
Modül module adder(...); ... endmodule Temel tasarım birimi
Portlar input, output, inout Modül arayüz sinyalleri
Veri Tipleri wire, reg, integer, real Sinyal ve değişken tanımlamaları
Atama assign y = a & b; Kombinasyonel mantık için sürekli atama
Prosedürel Blok always, initial Sıralı veya sadece simülasyon amaçlı kod
Gecikme #10 Zaman gecikmesi (sadece simülasyonda)
Yazdırma $display, $monitor, $finish Testbench çı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
#

Sembol Anlamı Örnek
x Bilinmeyen değer 4'b10x1
z Üç durum (float) 8'bzzzzzzzz
? z için takma ad 4'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 Örnek Açı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)
Conditional durum ? doğru_değer : yanlış_değer Ternary (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

Blocking ve Non-Blocking Atamalar
· loading · loading
HDL Verilog HDL
Derleyici Yönergeleri ve Makrolar
· loading · loading
HDL Verilog HDL
Gecikme Kontrolleri
· loading · loading
HDL Verilog HDL
Görev (Task) ve Fonksiyon (Function)
· loading · loading
HDL Verilog HDL
Hiyerarşik Referans
· loading · loading
HDL Verilog HDL
Komut Satırı Girdisi
· loading · loading
HDL Verilog HDL