Ana içeriğe geç
  1. Eğitimler/
  2. Verilog/

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

🧩 Verilog’ta Modül Nedir?
#

Modül, Verilog’taki en temel yapı taşıdır. Bir mantık kapısı, sayaç, ALU ya da tüm bir işlemci gibi belirli bir donanım bloğunu tanımlar.


📦 Modül Yapısı
#

Modüller, hiyerarşik tasarım, yeniden kullanılabilirlik ve test edilebilirlik sağlar.

🧱 Örnek Modül
#

module and_gate (
  input  wire a,
  input  wire b,
  output wire y
);
assign y = a & b;
endmodule

🧱 Module Instantiation Styles (Modül Örnekleme Biçimleri)
#

Verilog’da bir modülü kullanmak için, onu başka bir modül içinde instantiate (örnekleme) etmemiz gerekir. Aşağıda iki yaygın yöntemi ve çoklu örnekleme örneğini inceleyelim.

module_adi ornek_adi (a, b, y);

🔹 Positional Mapping (Konumsal Eşleme)
#

Bağlantılar sıra ile yapılır. Bu yöntem kısa ama hataya açıktır.

and_gate u1 (a, b, y);

⚠️ Tehlikeli olabilir! Portların sırası modül tanımıyla birebir uyuşmalı. Sıra değişirse hatalı bağlanır ama sentez hatası vermez.

⛔ Riskli Senaryo:
#

// Tanım: module and_gate (input a, input b, output y);
and_gate u1 (b, a, y);  // Port sırası yanlış! a ve b karıştı!

🔹 Named Mapping ✅ (Tavsiye Edilen)
#

Her porta isimle bağlantı yapılır. Daha güvenlidir ve okunabilirliği artırır.

and_gate u1 (
  .a(in1),
  .b(in2),
  .y(out)
);

✅ Güvenlidir. Port sırası değişse bile bağlantı doğru yapılır.

💡 Avantajları:
#

  • Daha okunaklı
  • Uzun port listelerinde hata riski daha düşüktür
  • Otomatik kod üretimi ve IP çekirdeklerinde standarttır

🔁 Multiple Instances (Çoklu Örnekleme)
#

Aynı modülün birden fazla kopyasını farklı sinyallerle kullanabilirsiniz:

and_gate u1 (.a(a1), .b(b1), .y(y1));
and_gate u2 (.a(a2), .b(b2), .y(y2));

Bu yapı genelde bit-paralel mantık, bus işlemleri, veya array of modules gibi durumlarda kullanılır.


🧪 assign ile Sürekli Atama
#

assign anahtar kelimesi, kombinasyonel mantık için sürekli (continuous) atama yapmakta kullanılır.

assign y = a & b;
  • Yalnızca wire türü sinyallerle kullanılabilir
  • Girişlerdeki değişiklik anında çıkış güncellenir

🔁 always Bloğu (İşlemsel Mantık)
#

always bloğu, olaylara (ör. clock kenarı, sinyal değişimi) tepki veren işlemsel mantığı tanımlar.

✅ Genel Yapı
#

always @(sensitivity_list) begin
  // işlemler
end

⚙️ always @(*) → Kombinasyonel Mantık
#

always @(*) begin
  case (sel)
    2'b00: y = a;
    2'b01: y = b;
    default: y = 0;
  endcase
end
  • Blocking assignment kullanılır: =
  • Bellek tutmayan mantık tanımlar

⏱️ always @(posedge clk) → Sıralı Mantık
#

always @(posedge clk or posedge rst) begin
  if (rst)
    q <= 0;
  else
    q <= d;
end
  • Non-blocking assignment (<=) kullanılır
  • Flip-flop, register gibi saatle çalışan yapılar için

🧬 Bit Seviyesinde Operatörler
#

Bu operatörler vektörler üzerinde bit bit işlem yapar:

OperatorMeaningExample
&ANDy = a & b;
|ORy = a | b;
^XORy = a ^ b;
~NOT (bitwise)y = ~a;
~&NANDy = ~(a & b);
~|NORy = ~(a | b);\

&&, || gibi mantıksal operatörlerden farklıdır — bunlar yalnızca tek bitlik sonuç verir.


🔗 Birleştirme (Concatenation) ve Tekrarlama
#

🔹 Birleştirme
#

assign bus = {addr, data};  // İki 8-bit veriyi 16-bit yap

🔹 Tekrarlama
#

assign all_ones = {8{1'b1}};  // 8-bit boyunca 1 üret

🔹 İkisi Beraber
#

assign all_in_one = {addr, data, 8{1'b1}};

📊 Özet Tablo
#

YapıKullanım TipiAtama TürüSinyal Tipi
assignSürekli mantık=wire
always @(*)Kombinasyonel mantık= (blocking)reg
always @(posedge clk)Sıralı mantık<= (non-blocking)reg

🧠 En İyi Uygulamalar
#

  • ✅ Gerçek tasarımlarda isimli port bağlantısı kullan
  • 📛 Anlamlı instance isimleri ver: stage0, AND1, alu_unit
  • 📏 Giriş/çıkış yönlerini tutarlı kullan
  • ⚠️ Aynı always bloğu içinde = ve <= kullanmaktan kaçın

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

Related

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