Ch1 - Verilog 基本簡介

1.1 Verilog 基本架構

module 模組名稱( 輸出入埠名稱 );
    輸出入埠 敘述
    資料型態 敘述
    內部電路 敘述
endmodule

1.2 module

  • Verilog 主要的架構就是模組(module)
  • 每一個 Verilog 檔案,必須包含一個 Module
  • Module 就像是積木,而一個大型的數位系統就是由一些特定功能的積木組成

表示法:

module 模組名稱( 輸出入埠名稱 );
    … … … …
endmodule

1.3 模組名稱

  • 通常具有描述模組功能的責任
  • 盡量避免無意義的命名

1.4 輸出入埠名稱

  • 這個 module 的輸出輸入敘述
  • 不須按照順序排列
  • 兩個或兩個以上的輸出入埠必須使用逗號分開

表示法:

module 模組名稱( In1, In2, Out1, Out2, InOut1 );
    … … … …
endmodule

1.5 輸出入埠敘述

表示法:

module 模組名稱( In1, In2, Out1, Out2, InOut1 );

    input in1, in2;     // 敘述輸出入型態
    output Out1, Out2;
    inout InOut1;

    … … … …

endmodule

1.5.1 Intput(輸出埠)敘述

  • 模組內可接 net
  • 模組外可接 net、register

1.5.2 Output(輸出埠)敘述

  • 模組內可接 net、register
  • 模組外可接 net

1.5.3 InOut(雙向埠)敘述

  • 模組內可接 net
  • 模組外可接 net

1.6 資料型態敘述(詳細Ch2會講解)

  • 較常使用 wire(連接線net)與 reg(暫存器register與實體記憶體不同)

表示法:

module 模組名稱( In1, In2, Out1, Out2, InOut1 );

    input in1, in2;
    output Out1, Out2;
    inout InOut1;

    wire In1, In2, Out1;
    wire InOut1;
    reg Out2;

    … … … …

endmodule
  • Verilog 最重要的部分,負責描述模組的電路架構與功能
  • 主要有四種層次的描述:(高階→低階 )
    • 行為層次(Behavior Level)
    • 資料流層次(Dataflow Level)
    • 邏輯閘層次(Gate Level)
    • 電晶體層次(Switch Level)
  • 行為層次與資料流層次合稱"暫存器轉換層次 RTL(Register Transfer Level )"
  • 通常在撰 寫Verilog 時,只會接觸行為、資料流、邏輯閘層次而已

範例:

module 模組名稱( In1, In2, Out1, Out2, InOut1 );

    input in1, in2;
    output Out1, Out2;
    inout InOut1;

    wire In1, In2, Out1;
    wire InOut1;
    reg Out2;

    // 以下為三種層級分別描述 In1 與 In2 and 做 and 運算的方法
    // 邏輯閘層次( Gate Level )
    and and1( Out1, In1, In2 );

    // 資料流層次( Dataflow Level )
    assign Out1 = In1 & In2;

    // 行為層次( Behavior Level )
    allways @(*) begin
        Out2 = In1 & In2;
    end

endmodule

1.7 補充

  • 與 C 語言相同,有 // 及 /**/ 兩種註解方式
  • module 後面要記得加上分號;