🧭 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 #
Direktif | Açıklama | Örnek |
---|---|---|
`define |
Sabit veya makro tanımlar | `define WIDTH 8 |
`ifdef / `ifndef |
Koşullu derleme | `ifdef DEBUG ... |
`include |
Başka bir dosyayı dahil eder | `include "defs.v" |
`timescale |
Zaman birimi ve çözünürlük ayarı | `timescale 1ns / 1ps |
`undef |
Makro tanımını siler | `undef WIDTH |
`else / `elsif |
ifdef ile birlikte alternatif yol sağlar |
— |
`default_nettype |
Otomatik wire tanımlarını kontrol eder |
`default_nettype none |
`resetall |
Tü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
✅ 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