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 種類があります:単項 、バイナリ 、および三項または条件付き .
- 単項演算子はオペランドの左側に表示されます
- 二項演算子はオペランドの間に表示されます
- 条件演算子には、3 つのオペランドを区切る 2 つの別個の演算子があります
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]
- base_format 10 進数 ('d または 'D)、16 進数 ('h または 'H)、8 進数 ('o または 'O) のいずれかで、数 の基数を指定します
- 数 は、10 進法では 0、1、2 ... 9、16 進法では 0、1、2 .. 9、A、B、C、D、E、F の連続した数字として指定されます。
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