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

Verilog構文マスター:重要ルールとベストプラクティス

Verilogの字句規則はC言語と似ており、トークンのストリームで構成されます。字句トークンは1文字以上で構成され、コメント、キーワード、数値、文字列、空白があります。すべての行はセミコロン ; で終了する必要があります。

注意:Verilogは大文字小文字を区別するため、var_a と var_A は別物です。

コメント

Verilogには2種類のコメントがあります:

  1. 単一行コメント:// で始まり、行末までをコメントとして扱う
  2. 複数行コメント:/* で始まり */ で終わり、ネスト不可

ただし、単一行コメントを複数行コメント内にネストすることは可能です。

// これは単一行コメント
integer a; // 整数変数aを作成、//以降はコメント

/* これは複数行/ブロックコメント */
/* これは /* 無効なネストされたブロックコメント */ */
/* しかし、// これはOK */
// これもOK
///////////// これもOK

空白文字

空白文字(スペース、タブ、改行、改ページ)は、トークンを区切る場合を除きVerilogでは無視されます。実際、これはコードのインデントを助け、可読性を高めます。

module dut; // 'module'はキーワード、'dut'は識別子
reg [8*6:1] name = "Hello!"; // 行頭の2スペースは無視される

ただし、文字列内ではスペースとタブは無視されません。以下の例では、文字列変数 addr に "Earth " (末尾にスペース)が格納されます。

// 行頭にスペースなしだが、文字列内にスペースあり
reg [8*6:1] addr = "Earth ";
endmodule

演算子

演算子は3種類:単項、二項、三項(条件)。

x = ~y;  // ~は単項演算子、yはオペランド
x = y | z;  // |は二項演算子、yとzがオペランド
x = (y > 5) ? w : z;  // ?:は三項演算子、(y>5)、w、zがオペランド

式 (y > 5) が真なら変数 x は w の値を、偽なら z の値を取ります。

数値形式

数値は通常10進数で表現しますが、2進数、8進数、16進数 でも表現可能です。デフォルトではVerilogシミュレータは数値を10進数として扱います。異なる基数で表現するにはルールに従う必要があります。

16        // 10進数の16
0x10      // 16進数の16
10000     // 2進数の16
20        // 8進数の16

サイズ指定付き数値

サイズ指定付き数値は以下の形式で表現し、size はビット数を10進数で指定します:

[size]'[base_format][number]
3'b010;      // サイズ3、2進数、値2
3'd2;        // サイズ3、10進数、値2
8'h70;       // サイズ8、16進数、0x70(10進数112)
9'h1FA;      // サイズ9、16進数、0x1FA(10進数506)
4'hA = 4'd10 = 4'b1010 = 4'o12  // 10を4形式で表現
8'd234 = 8'D234  // 基数指定は大文字小文字どちらも可
32'hFACE_47B2; // アンダースコアで16ビット区切り可(可読性向上)
16進数指定時、アルファベット大文字も合法です。
16'hcafe;  // 小文字 OK
16'hCAFE;  // 大文字 OK
32'h1D40_CAFE; // アンダースコア区切り OK

サイズ指定なし数値

base_format 指定なしはデフォルトで10進数。size 指定なしは、シミュレータとマシン依存のデフォルトビット数になります。

integer a = 5423;        // 基数指定なし → 10進数5423
integer a = 'h1AD7;      // サイズ指定なし → int(32ビット)なので 32'h0000_1AD7

負の数値

マイナス記号 - をサイズの前に置いて指定。base_format と number の間にマイナスを置くのは違法。

-6'd3;    // 6ビット負数、3の2の補数
-6'sd9;   // 符号付き演算用
8'd-4;    // 違法

文字列

ダブルクォート " " で囲まれた文字列。複数行に分割不可。文字1つにつき1バイト必要。

"Hello World!"           // 12文字 → 12バイト
"x + z"                  // 5文字
"How are you feeling today ?"  // 複数行に分割不可 → 違法

識別子

識別子 は変数名で、後から参照するために使います。英数字 [a-z][A-Z][0-9]、アンダースコア _、ドル記号 $ で構成され、大文字小文字を区別。数字やドル記号で開始不可。

integer var_a;    // 英字とアンダースコア → 合法
integer $var_a;   // $で開始 → 違法
integer v$ar_a;   // 英字と$を含む → 合法
integer 2var;     // 数字で開始 → 違法
integer var23_g;  // 英数字とアンダースコア → 合法
integer 23;       // 数字のみ → 違法

キーワード

キーワードは言語構造を定義するために予約された特殊な識別子で、小文字です。主要なキーワード一覧は以下の通り。

Verilogの改訂履歴

Verilogは数回の改訂を経ており、1995年から2001年にかけて機能追加が行われました。

Verilog

  1. Verilogマスター:デジタル回路設計のための完全チュートリアル
  2. Verilog連結マスター:実践ガイド
  3. Verilog代入文の理解:種類、構文、ベストプラクティス
  4. Verilogブロッキング代入とノンブロッキング代入:違いを徹底解説
  5. Verilog関数のマスター:効率的なRTL設計のために
  6. Verilogタスクの理解:関数との違い、構文、使用法
  7. Verilogクロックジェネレータ:設計と実装ガイド
  8. Verilog数学関数のマスター:効率的なハードウェア設計のために
  9. Verilog $timeformatのマスター:精度と表示制御
  10. 任意のスコープでのVerilog timescale理解と表示
  11. VerilogファイルI/Oの完全ガイド:オープン、読み取り、書き込み、クローズ