Menu

Verilog Yorumlar: Tek Satır, Çok Satır ve Dokümantasyon Stili

Verilog'da tek satır ve çok satırlı yorumlar nasıl yazılır, artı modüller büyüdükçe onları okunabilir tutmak için dijital tasarımcıların kullandığı dokümantasyon kalıpları.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

İki Form

Verilog tam olarak iki yorum sözdizimini destekler, her ikisi de C'den kopyalanmıştır:

Tüm sözdizimi budur. Python gibi # yok, VHDL gibi -- yok, Lisp tarzı yok. Sadece // ve /* ... */.

Hangisini Ne Zaman Kullanmalı

//, neredeyse her seferinde uzanacağındır. Daha kısadır, yanlışlıkla bitirilemez ve Verilog yazma şeklinle (satır başına bir tanımlama, yorum aynı veya komşu satırda) doğal olarak eşleşir:

output reg [7:0] data,  // tx_serial'de shift ettiğimiz byte
output reg       valid, // data iletilirken yüksek
input  wire      ready  // downstream consumer kabul etmeye hazır

/* ... */ çoğunlukla iki şey içindir: dosyanın üstündeki büyük header blokları ve debug yaparken bir kod parçasını geçici olarak devre dışı bırakmak. Devre dışı bırakma durumu tehlikelidir - devam et.

"Iç İçe Yok" Tuzağı

Blok yorumları iç içe geçmez. Zaten bir blok yorum içeren bir bölgeyi yorum yapmaya çalışırsan, ilk */ dıştaki bloğu değil, içerideki bloğu kapatır:

/* dış
   /* iç */    // <-- bu */ dış yorumu kapatır
   parser açısından kaynakta hala aktif
*/

Sonuç: doğru görünen bir satırda, beklenmedik bir yerde bir sözdizimi hatası.

Bir bölgeyi devre dışı bırakman gerektiğinde, şunlardan birini tercih et:

  1. Her satırı // ile öneklen. Çoğu editör bunu bir tuş vuruşuyla yapar.

  2. Bir preprocessor guard kullan:

    `ifdef DISABLED
        // derlenmemesi gereken kod
    `endif
    

İkinci kalıp aynı zamanda bir dosyada birden çok build konfigürasyonunu nasıl koruyacağındır.

Sentez Pragmaları: Yorum Olmayan Yorumlar

Vendor araçları, özel olarak biçimlendirilmiş yorumları bant dışı talimatlar olarak kullanır. Simülatör onları yine de yok sayar, ama sentez aracı onları okur:

// synthesis translate_off
initial begin
    $display("yalnızca simülatör kurulumu");
end
// synthesis translate_on

İki pragma sentez aracına "bu işaretler arasındaki her şeyi atla" der. Tam yazımlar vendor'a göre değişir (synthesis, synopsys, pragma, xilinx vb.) - aracının doc'larını kontrol et. Bilmen gereken şey: Verilog'daki yorumlar bazen yük taşır.

Header-Blok Gelenekleri

Uzun ömürlü Verilog dosyaları neredeyse her zaman bir header bloğuyla başlar. Tam format takım politikasıdır, ama tipik bir örnek:

// -----------------------------------------------------------------------------
// Module      : uart_tx
// Description : 8-N-1 UART transmitter. `valid` onaylandığında `data` üzerinde
//               bir byte kabul eder ve `serial_out` üzerinden shift eder.
//               `baud_tick` baud periyodu başına bir kez pulse vermeli.
// Ports       : clk        - sistem saati
//               reset_n    - active-low senkron reset
//               baud_tick  - her baud aralığında 1 döngülük pulse
//               data       - iletilecek byte
//               valid      - bir iletim başlatmak için onaylanır
//               serial_out - FPGA'dan çıkan wire
//               busy       - bir frame uçuştayken yüksek
// Author      : example@team
// Revision    : 2026-05-26 - ilk sürüm
// -----------------------------------------------------------------------------

module uart_tx (
    input  wire       clk,
    input  wire       reset_n,
    input  wire       baud_tick,
    input  wire [7:0] data,
    input  wire       valid,
    output reg        serial_out,
    output reg        busy
);
    // ... gövde ...
endmodule

Önemli olan dekorasyon değil. Önemli olan, bu dosyayı bir yıl sonra - muhtemelen sen - açan birinin dört satır okuyup ne yaptığını, neyi beklediğini ve neyi ürettiğini bilebilmesidir. Bu getiri projenin büyüklüğüyle ölçeklenir.

Hak Ettiklerini Kazanan Inline Yorumlar

Yaygın bir hata, kod zaten gösterdiğinde bir satırın ne yaptığını yorumlamaktır:

// kötü - yorum kodu yeniden ifade ediyor
count <= count + 1;   // count'u artır

// daha iyi - yorum bu satırın neden burada olduğunu açıklıyor
count <= count + 1;   // zaman damgalama için serbest çalışan döngü sayacı

Yorumların eşsiz iyi olduğu şey, kodun kendi kendine gösteremeyeceği neden'i açıklamaktır: garip bir encoding'in hangi spec bölümünü takip ettiği, bir register'ın neden göründüğünden bir bit daha geniş olduğu, bir default case'in neden '0 yerine 'x'e ayarlandığı. Buna güven. Bariz olanı koda bırak.

Dene

Aşağıdaki blok her yorum formunu içerir. Çalıştır - çıkış seni şaşırtmayacak, ama dosya yapısı şaşırtmalı:

Artık Verilog'un desteklediği her yorum şeklini gördün. Doc'ların geri kalanı bunları beklediğin gibi kullanır: uzun modüllerin üstünde header blokları, portların yanında tek satır // ve yalnızca yakalanacak bir paragrafın değerinde gerekçe olduğunda blok yorumlar.

Sıkça Sorulan Sorular

Verilog'da bir yorum nasıl yazılır?

Verilog C'den miras alınan iki yorum stilini destekler. //, satırın sonuna kadar süren bir yorum başlatır. /* ... */ çok satırlı bir bloğu sarar. Derleyici işaretler arasındaki her şeyi yok sayar; her iki stil de herhangi bir sentezlenebilir veya yalnızca simülasyon dosyasında eşit derecede geçerlidir.

Verilog yorumları sentezlenebilir mi?

Yorumlar parsing'den sonra var olmazlar - sentez aracı onları tıpkı simülatör gibi atar. Tek istisna, sentez pragmaları'dır: vendor araçlarının direktif olarak tanıdığı // synthesis translate_off gibi özel olarak biçimlendirilmiş yorumlar. Pragma sözdizimi araca özgüdür ve standart Verilog'un parçası değildir.

Verilog yorumları iç içe olabilir mi?

Hayır - ve bu, zaten /* ... */ içeren bir bloğu yorum yapmaya çalışan yeni başlayanları takırdatır. İçerideki ilk */ dıştaki yorumu kapatır ve bloğun geri kalanı canlı kod olarak kalır. Her satırda // kullan veya bir parçayı gerçekten devre dışı bırakman gerekirse, tüm bölgeyi \ifdef SOMETHING_FALSE/`endif` ile sar.

Bir Verilog header yorumu neyi içermelidir?

Çoğu takım her dosyanın üstüne küçük bir header koyar: modül adı, tek cümlelik amaç, port özeti, yazar/tarih ve bir revizyon geçmişi. Tam format değişir; önemli olan, dosyayı açan herkesin gövdeyi okumadan ne yaptığını anlayabilmesidir. Büyük tasarımlar her port tanımlamasının yanına başına sinyal başına yorumlar ekler.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA