Verilog
システムタスクは、シミュレーション中に単純なI/Oや設計測定関数を操作するために利用できる。すべてのシステムタスクは、$が接頭辞になっており、ユーザー定義のタスクや関数と区別される。このセクションでは、最もよく使用されるタスクの一覧を紹介する。完全なリストではないことに注意。
$display — 1行を画面に表示する。自動で改行文字を付加する。
$write — 1行を画面に表示する。改行文字は加えない。
$swrite — 改行文字無しで変数を1行で出力する。
$sscanf — 変数から書式指定で文字列を読み込む。 (*Verilog-2001)
$fopen — ファイルハンドルを開く。読み込みまたは書き込みのために使用する。
$fdisplay — ファイルに1行を書き込む。自動で改行文字を付加する。
$fwrite — ファイルに1行を書き込む。
Verilogのいくつかの文は、たとえば$display文など、現実のハードウェアでは物理的に実装できないものもある。そのため、言語の多くの機能はハードウェアを記述するためには使用できない。以下に示す例では、直接物理的なゲートに対応する、合成可能な言語の典型的なサブセットを使用している。
次の非常によく使われる例は、フリップフロップである。Verilogでは、D-フリップフロップが最も簡単に記述でき、以下のようにモデリングできる。
例の中で注目すべき重要な点は、ノンブロッキング代入を使用していることである。基本的な経験則(rule of thumb(英語版))として、always節の中でposedgeまたはnegedge文を使用する場合には、<=を使用するとよい。 Dフリップフロップの変種として、非同期リセット機能を付加したものがある。慣習として、以下のようにリセット状態をチェックするコードを文内の最初のif節とすることが多い。
Verilogにおける定数の定義では、追加のビット幅パラメータがサポートされている。基本的な構文は次のとおりである。
<ビット幅>'<基数を表す文字><数字>
例:
12'h123 — 16進数(hexadecimal)の123(12ビットを使用)
20'd44 — 10進数(decimal)44 (20ビットを使用。未使用桁への0の付加は自動で行われる)
4'b1010 — 2進数(Binary)1010(4ビットを使用)
6'o77 — 8進数(octal)の77(6ビットを使用)