Ana içeriğe geç

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

🧭 Verilog Derleyici Direktifleri & Makrolar
#

Verilog’daki derleyici direktifleri ters kesme karakteriyle başlar ` ve sentez donanımını değil, derleyiciyi/simülatörü yönlendirir. Koşullu derleme, makro tanımlama, dosya dahil etme ve simülasyon kontrolü için önemlidir.


📌 Yaygın Derleyici Direktifleri
#

DirektifAçıklamaÖrnek
`defineSabit veya makro tanımlar`define WIDTH 8
`ifdef / `ifndefKoşullu derleme`ifdef DEBUG ...
`includeBaşka bir dosyayı dahil eder`include "defs.v"
`timescaleZaman birimi ve çözünürlük ayarı`timescale 1ns / 1ps
`undefMakro tanımını siler`undef WIDTH
`else / `elsififdef ile birlikte alternatif yol sağlar
`default_nettypeOtomatik wire tanımlarını kontrol eder`default_nettype none
`resetallTüm direktifleri varsayılana döndürür

🧠 Makro Örneği
#

`define ile sabitler veya yeniden kullanılabilir kod parçaları tanımlanabilir:

`define WIDTH 8

module adder (
  input  [`WIDTH-1:0] a, b,
  output [`WIDTH-1:0] y
);
  assign y = a + b;
endmodule

Makrolar derlemeden önce ön işlemci tarafından yerleştirilir — C dilindeki #define gibidir.


🔀 Koşullu Derleme
#

Hata ayıklama veya platforma özel özellikleri etkinleştirmek için kullanılır:

`define DEBUG

module test;
  initial begin
    `ifdef DEBUG
      $display("Debug modu aktif");
    `endif
  end
endmodule

🔄 Dosya Dahil Etme
#

Kodu birden fazla dosyaya bölmek için:

`include "parameters.vh"

En iyi uygulama: Dahil edilen dosyalar için .vh veya .svh uzantılarını kullanın.


🚫 Otomatik Net Tanımlamaları Devre Dışı Bırakma
#

Varsayılan olarak, tanımsız sinyaller wire kabul edilir. Bu sessiz hatalara neden olabilir. Şöyle engellenir:

`default_nettype none

✅ Inline Kod Bloğu (Makro Gibi):
#

`define PRINT_SIGNAL(signal) \
  $display("Signal %s = %b", `"signal`", signal)

initial begin
  `PRINT_SIGNAL(my_reg);  // expands to: $display("Signal my_reg = %b", my_reg);
end

Dikkat: Makro parametreleri parantez içine alınmalı ve satır sonlarına \ konmalı.


🔐 Include Guard Örneği
#

📁 safe_defs.vh

`ifndef __SAFE_DEFS_VH__
`define __SAFE_DEFS_VH__

`define WIDTH 32
`define RESET_VAL 0

`endif

✅ En İyi Uygulamalar
#

  • Her dosyanın en üstüne `default_nettype none ekleyin
  • Makro kodlarını daima ifdef / endif blokları içinde kullanın
  • Çok karmaşık makrolardan kaçının — hata ayıklaması zordur
  • include direktifini yalnızca sabitler, parametreler veya küçük yardımcı kodlar için kullanın

`timescale 1ns / 1ps
`default_nettype none

`define WIDTH 8
`define RESET_VAL 0
`define PRINT_SIGNAL(sig) \
  $display("Signal %s = %b", `"sig`", sig)

module tb_directives;

    reg [`WIDTH-1:0] my_reg = 8'hA5;

    initial begin
        `ifdef DEBUG
            $display("Debugging Enabled");
        `endif

        `PRINT_SIGNAL(my_reg);
        #10 $finish;
    end

endmodule

`undef WIDTH
`resetall

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

Related

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