Verilog HDLにおいて、オブジェクトを参照するために割り当てられる名前を識別子と呼びます。識別子には、基本的な文字列で構成される「基本識別子」と、特殊な記法を用いる「エスケープ識別子」の2種類が存在します。
基本識別子の構文規則
基本識別子は、英字、数字、アンダースコア(_)、およびドル記号($)を組み合わせて構成されます。大文字と小文字は区別されます。定義には以下の制約が適用されます。
- 先頭文字に数字またはドル記号を使用することはできません
- Verilogの予約語(キーワード)と同一の名前は使用できません
- 識別子の最大長は実装依存ですが、最低1024文字が保証されます
以下に、有効な基本識別子と無効な例を示します。
// 有効な例
clk_gen // 英字で開始
addr_bus // 英字で開始
price$ // 末尾に$記号
_enbl // アンダースコアで開始
// 無効な例
2phase // 数字で開始(不可)
$wire // $で開始(不可)
my sig // 空白を含む(不可)
data&in // 無効な文字&を含む(不可)
always // 予約語と競合(不可)
エスケープ識別子の構文規則
エスケープ識別子は、バックスラッシュ(\)で開始し、空白文字(スペース、タブ、改行)で終了するシーケンスです。開始のバックスラッシュと終了の空白文字の間には、ASCIIコードの33〜126(スペース以外の印刷可能文字)を自由に含めることができます。
バックスラッシュと終端の空白は識別子自体の一部ではなく、エスケープ識別子であることを示すマーカーとして機能します。例えば、\resetと基本識別子のresetは同一の識別子として扱われます。
使用例を以下に示します。
// [TAB]はタブ文字を表す
\7segment[TAB] // 数字で開始可能
\clk&data[TAB] // 特殊文字を含む可能
\module[TAB] // 予約語も使用可能
\bus[3][TAB] // 角括弧を含む可能
// 注意: \bus[3]とbus[3]は異なる
// bus[3] → busの3ビット目を参照
// \bus[3] → "bus[3]"という名前の識別子
合成ツール(Design Compiler等)を使用する際、ベクタ信号が展開されてビット単位の信号に変換される場合があります。この際、角括弧を含むエスケープ識別子が自動生成されることがあります。この命名規則はchange_namesコマンド等で変更可能です。