工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Verilog

Verilog 構文

Verilog の語彙規則は、トークンのストリームを含むという意味で C に似ています。レキシカル トークンは 1 つ以上の文字で構成され、トークンはコメント、キーワード、数字、文字列、または空白になります。すべての行はセミコロン ; で終了する必要があります .

Verilog では大文字と小文字が区別されます であるため、var_a と var_A は異なります。

コメント

Verilog でコメントを記述する方法は 2 つあります。 <オール>

  • 一行 コメントは // で始まります Verilog コンパイラに、この時点から行末までのすべてをコメントとして扱うように指示します。
  • 複数行 コメントは /* で始まります */ で終わる 入れ子にすることはできません。
  • ただし、1 行のコメントを複数行のコメントにネストすることはできます。

      
      
    // This is a single line comment
    
    integer a;   // Creates an int variable called a, and treats everything to the right of // as a comment
    
    /*
    This is a 
    multiple-line or
    block comment
    */
    
    /* This is /*
    an invalid nested 
    block comment */
    */
    
    /* However,
    // this one is okay
    */
    
    // This is also okay
    ///////////// Still okay
    
      
    

    空白

    空白は、スペース、タブ、改行、およびフォームフィードの文字を表すために使用される用語であり、通常、トークンを区切る場合を除き、Verilog では無視されます。実際、これはコードをインデントして読みやすくするのに役立ちます。

    module dut;              // 'module' is a keyword, 
                             // 'dut' is an identifier
      reg [8*6:1] name = "Hello!";   // The 2 spaces in the beginning are ignored
    

    ただし、空白 (スペース) とタブ (TAB キーから) は文字列では無視されません。以下の例では、文字列 addr という変数は、文字列内のスペースが保持されているため、値 "Earth" を取得します。

       // There is no space in the beginning of this line, 
       // but there's a space in the string
       reg [8*6:1] addr = "Earth ";     
    endmodule 
    

    オペレーター

    演算子には次の 3 種類があります:単項バイナリ 、および三項または条件付き .

      
      
    x = ~y;                // ~ is a unary operator, and y is the operand
    x = y | z;             // | is a binary operator, where y and z are its operands
    x = (y > 5) ? w : z;   // ?: is a ternary operator, and the expression (y>5), w and z are its operands
    
      
    

    式 (y> 5) が真の場合、変数 x w で値を取得します 、そうでなければ z の値 .

    数値形式

    私たちは、数値が小数として表されることに最も慣れています。ただし、数値は バイナリ で表すこともできます 、8 進数 および16進数 .デフォルトでは、Verilog シミュレータは数値を 10 進数として扱います。それらを異なる基数で表現するために 、特定の規則に従う必要があります。

    16          // Number 16 in decimal
    0x10        // Number 16 in hexadecimal
    10000       // Number 16 in binary
    20          // Number 16 in octal
    

    サイズ

    サイズの数値は以下のように表されます。サイズ 数値のビット数を指定するために 10 進数のみで記述されます。

      
      
    [size]'[base_format][number]
    
      
    

    3'b010;     // size is 3, base format is binary ('b), and the number is 010 (indicates value 2 in binary)
    3'd2;       // size is 3, base format is decimal ('d) and the number is 2 (specified in decimals)
    8'h70;      // size is 8, base format is hexadecimal ('h) and the number is 0x70 (in hex) to represent decimal 112
    9'h1FA;     // size is 9, base format is hexadecimal ('h) and the number is 0x1FA (in hex) to represent decimal 506
    
    4'hA = 4'd10 = 4'b1010 = 4'o12	// Decimal 10 can be represented in any of the four formats
    8'd234 = 8'D234                 // Legal to use either lower case or upper case for base format
    32'hFACE_47B2;                  // Underscore (_) can be used to separate 16 bit numbers for readability
    

    基本形式が 16 進数の場合、数値の指定には大文字を使用できます。

    16'hcafe;         // lowercase letters Valid
    16'hCAFE;         // uppercase letters Valid
    32'h1D40_CAFE;    // underscore can be used as separator between 4 letters Valid
    

    未サイズ

    base_format のない数値 仕様は デフォルト で 10 進数です . サイズのない数字 仕様には、シミュレータとマシンのタイプに応じたデフォルトのビット数があります。

      
      
    integer a = 5423;       // base format is not specified, a gets a decimal value of 5423
    integer a = 'h1AD7;     // size is not specified, because a is int (32 bits) value stored in a = 32'h0000_1AD7
    
      
    

    ネガティブ

    負の数は、マイナス - を配置して指定します 数字のサイズの前に署名します。 base_format の間にマイナス記号を入れるのは違法です そして .

    -6'd3;            // 8-bit negative number stored as two's complement of 3
    -6'sd9;           // For signed maths
    8'd-4;            // Illegal
    

    文字列

    二重引用符で囲まれた一連の文字 " " 文字列と呼ばれます。複数の行に分割することはできず、文字列内のすべての文字が格納されるのに 1 バイトかかります。

    "Hello World!"        // String with 12 characters -> require 12 bytes
    "x + z"               // String with 5 characters
    
    "How are you
    feeling today ?"      // Illegal for a string to be split into multiple lines
    

    識別子

    識別子 後で参照できるようにするための変数の名前です。英数字 [a-z][A-Z][0-9] で構成されています 、アンダースコア _ またはドル記号 $ 大文字と小文字が区別されます。数字またはドル記号で始めることはできません。

    integer var_a;        // Identifier contains alphabets and underscore -> Valid
    integer $var_a;       // Identifier starts with $ -> Invalid
    integer v$ar_a;       // Identifier contains alphabets and $ -> Valid
    integer 2var;         // Identifier starts with a digit -> Invalid
    integer var23_g;      // Identifier contains alphanumeric characters and underscore -> Valid
    integer 23;           // Identifier contains only numbers -> Invalid
    

    キーワード

    キーワードは、言語構造を定義するために予約された特別な識別子で、小文字です。重要なキーワードのリストを以下に示します。

    Verilog リビジョン

    Verilog は何年にもわたっていくつかの改訂を受けており、以下に示すように、1995 年から 2001 年にかけてさらに追加が行われました。


    Verilog

    1. Verilog チュートリアル
    2. Verilog 連結
    3. Verilog 割り当て
    4. Verilog ブロッキング &ノンブロッキング
    5. Verilog 関数
    6. Verilog タスク
    7. Verilog クロック ジェネレーター
    8. Verilog 数学関数
    9. Verilog タイムフォーマット
    10. Verilog タイムスケール スコープ
    11. Verilog ファイルの IO 操作