Verilog
PLI(Program Language Interface)は、プログラマーに対して、VerilogからC言語で書かれたプログラムに制御を移すことを可能にするメカニズムを提供する。IEEE Std 1364-2005において、PLIは新しいVerilog Procedural Interface(英語版)に完全に置き換えられて公式に非推奨となった。
PLI(現在はVPI)を利用することで、Verilogは、たとえば、テストハーネス、マイクロプロセッサの命令セットシミュレータ、デバッガなど、C言語で書かれた他のプログラムと連携することができる。たとえば、PLIはC言語の関数tf_putlongp()およびtf_getlongp()を提供しており、この関数を利用すると、現在のVerilogタスクや関数の引数の値を読み書きすることができる。具体的には、tf_putlongp(pin, lower_32, higher_32)は、C言語側の higher_32 と lower_32 を、Verilog側の64幅のpin信号にセットすることができ, lower_32 = tf_getlongp(higher_32, pin)は、Verilog側の64幅のpin信号を読み出し、その上位と下位をC言語側の変数 higher_32 と lower_32 にそれぞれセットする。
Verilog(ヴェリログ)は、IEEE 1364として標準化されているハードウェア記述言語(Hardware Description Language; HDL)である。最も重要な用途は、デジタル回路をレジスタ転送レベルで設計・検証することである。また、アナログ回路や混合信号回路(英語版)の検証や、遺伝子回路(英語版)の設計にも使用されている。
もともとVerilogは電子回路シミュレーションを行うシミュレータであり、それに使用する言語であった。文法は、プログラミング言語のC言語やPascalに似ている。
後継言語はSystemVerilogで、Verilogの機能的な上位互換である。System Verilogの規格と統合して、「IEEE/IEC 62530:2011 SystemVerilog - Unified Hardware Design, Specification, and Verification Language」と呼ばれる標準になっている。
Verilogでは、実行の順序は常に保証されるわけではない。これは、典型的な例で最もよく示すことができる。次のコードスニペットについて考えてみる。
aおよびbの値として出力されるのはどんな値だろうか?initialブロックの実行順序によって、それぞれ0と0になる場合と、0と何らかの初期化されていない値となる場合の2パターンがありえる。ただし、$display文は#1ディレイを挟んでいるため、2つの代入ブロックより後に実行されることが常に保証されている。
Design Compiler シノプシス社
Encounter RTL Compiler ケイデンス社
同種のハードウェア記述言語であるVHDLの台頭に対し、ケイデンスはVerilogの規格を公開し標準化する道をとり、OVI(Open Verilog International)と呼ばれる組織へ版権の一部を移譲した。OVI LRM2.0に準拠したVerilogシミュレータとしてSimucad社が開発したSILOS IIIは、1993年には日本で発売されていた。それと前後した1993年6月には、IEEE1364として標準化が開始された。その後、Verilogの規格がIEEEに提出され、IEEE 1364-1995として標準化された。この標準は、Verilog-1995と呼ばれる。なお、OVIはその後Accelleraという組織になっている。
標準化にともない、ケイデンス社以外の会社やフリーソフトのVerilogシミュレータが登場するようになった。