3 min read

Verilog HDL 訊號命名參考

Verilog HDL 訊號命名參考
Photo by Florian Olivo / Unsplash

Verilog HDL 訊號命名參考

前言

在數位電路設計中,良好的訊號命名原則與 coding style 同等重要。特別是在大型設計專案中,清晰的命名方式不僅能讓代碼更容易維護,也能幫助團隊成員快速理解訊號特性並進行除錯。本文將介紹常用的 Verilog HDL 訊號命名規則。

專案架構

1. FPGA 外部輸入輸出命名

FPGA 的外部接口(top module)使用全大寫字母,並用底線區分單字:

input  CLOCK_50      // 50MHz 系統時脈
output LED_STATUS    // LED 狀態輸出
input  KEY_N        // 按鍵輸入(低態動作)

2. 模組內部訊號命名

2.1 子模組輸入輸出命名

  • 輸入訊號:前綴 i(除系統時脈及重置輸入外)

    input        clk       // 系統時脈輸入
    input        nRst      // 重置輸入(低態動作)
    input  [7:0] iData     // 資料輸入
    
  • 輸出訊號:前綴 o

    output        oValid    // 有效訊號輸出
    output [15:0] oResult   // 結果輸出
    

2.2 訊號類型標示

  • 暫存器類型:前綴 r

    reg        rState      // 狀態暫存器
    reg [7:0]  rCounter    // 計數器暫存器
    
  • 線網類型:前綴 w

    wire        wReady     // 就緒訊號
    wire [15:0] wSum       // 總和訊號
    

2.3 向量類型訊號

  • 輸入向量:前綴 iv

    input [7:0] ivData     // 8位元資料輸入
    
  • 輸出向量:前綴 ov

    output [15:0] ovResult // 16位元結果輸出
    
  • 暫存器向量:前綴 rv

    reg [31:0] rvBuffer   // 32位元緩衝暫存器
    
  • 線網向量:前綴 wv

    wire [7:0] wvSum      // 8位元總和線網
    

2.4 特殊訊號標示

  • D 觸發器相關:
    reg rData_d          // D 觸發器輸入端
    reg rData_q          // D 觸發器輸出端
    

實際應用範例

訊號邊緣檢測器

module tick_gen (
    input clk,          // 系統時脈
    input nRst,         // 重置訊號(低態動作)

    input iSignal,      // 輸入訊號
    output oSignalTick  // 訊號上升邊緣脈衝
);

reg [1:0] rvSignal_d, rvSignal_q;  // 訊號延遲鏈

// 同步時序邏輯
always @(posedge clk or negedge nRst) begin
    if(!nRst)
        rvSignal_q <= 2'h0;
    else
        rvSignal_q <= rvSignal_d;
end

// 組合邏輯
always @(*) begin
    rvSignal_d = {rvSignal_q[0], iSignal};
end

// 檢測上升邊緣(01序列)
assign oSignalTick = (rvSignal_q == 2'b01) ? 1'b1 : 1'b0;

endmodule

這個範例展示了:

  1. 系統訊號(clk, nRst)不加前綴
  2. 一般輸入加 i 前綴
  3. 一般輸出加 o 前綴
  4. 向量型暫存器加 rv 前綴
  5. D 觸發器相關訊號加 _d_q 後綴

命名規範建議

1. 一致性原則

  • 在同一專案中保持命名風格一致
  • 遵循團隊既定的命名規範

2. 清晰性原則

  • 選擇具描述性的名稱
  • 避免過於簡略或難以理解的縮寫

結語

良好的訊號命名規範不僅能提高代碼的可讀性,也能減少開發過程中的錯誤。在實際專案中,建議團隊成員共同制定並遵循統一的命名規範,以提高開發效率和代碼品質。