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

Modül Tanımı, Kullanımı ve Yapılar

·473 kelime·3 dk· loading · loading · · ·
HDL Verilog Verilog HDL Modül Yapısı Assign Always Blokları
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 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

🔌 Modül Portları ve Türleri
#

Portlar, bir modülün dış dünya ile nasıl iletişim kurduğunu tanımlar.

Anahtar Kelime Yön Açıklama
input Giriş Modüle veri girer, sadece okunur
output Çıkış Modülden veri çıkar, wire veya reg olabilir
inout Çift yönlü Ortak veriyolu gibi yapılar için

🧱 Modül Kullanımı (Instance)
#

Tanımlanan bir modül, başka modüller içinde kullanılabilir.

🔹 Sıralı Bağlantı (Positional)
#

and_gate u1 (a, b, y);

⚠️ Port sırası tanımla birebir aynı olmalı.


🔹 İsimle Bağlantı ✅ (Tavsiye Edilen)
#

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

🔁 Çoklu Instance
#

Aynı modül, farklı sinyallerle birden fazla kez kullanılabilir:

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

🧪 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:

Operator Meaning Example
& AND y = a & b;
| OR y = a | b;
^ XOR y = a ^ b;
~ NOT (bitwise) y = ~a;
~& NAND y = ~(a & b);
~| NOR y = ~(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

📊 Özet Tablo
#

Yapı Kullanım Tipi Atama Türü Sinyal Tipi
assign Sü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 Veri Tipleri
·635 kelime·3 dk· loading · loading
HDL Verilog Verilog HDL Veri Tipleri Mantık Seviyeleri Verilog Dizi
Derleyici Yönergeleri ve Makrolar
· loading · loading
HDL Verilog HDL
Verilog’ta `generate` Blokları ile Parametrik Donanım
· loading · loading
HDL Verilog Generate Genvar Parametrik Tasarım RTL
Blocking ve Non-Blocking Atamalar
· loading · loading
HDL Verilog HDL
Gecikme Kontrolleri
· loading · loading
HDL Verilog HDL
Görev (Task) ve Fonksiyon (Function)
· loading · loading
HDL Verilog HDL