Verilog-Aは、アナログ回路の業界標準モデリング言語です。Verilog -AMSの連続時間サブセットにあたります。一部の商用アプリケーションでは、MEMS設計をVerilog-A形式でエクスポートする場合があります。
Verilog-Aは、他の言語(例えばMAST)からアナログ機能を吸収しつつあったVHDL (IEEE標準)との競争に直面し、 Spectreビヘイビア言語を標準化するために作成されました。Verilogを最初に標準化した団体であるOpen Verilog International(OVI)は、アナログとデジタルの両方の設計を網羅する単一言語であるVerilog-AMSを作成する計画の一部であることを条件に、標準化を支持することに同意しました。Verilog-Aは、Verilog-AMSの完全アナログ版であり、プロジェクトの第一段階でした。
最初のVerilog-A言語リファレンスマニュアルと完全なVerilog-AMSの間にはかなりの遅延があり、その間にVerilogはIEEEに移り、Verilog-AMSはAccelleraに残されました。
Verilog-A 標準は単独では存在せず、完全な Verilog-AMS 標準の一部です。その LRM はAccellera のWeb サイトから入手できます。[ 1 ] [ 2 ] [ 3 ]今後の作業では、 SystemVerilogの新しいネット型機能が活用されるでしょう。Verilog-AMS の「wreal」などの組み込み型は、SystemVerilog ではVHDL の方法論により近いユーザー定義型になります。
Verilog-A のサブセットは、自動デバイスモデル合成器 (ADMS)を使用してC プログラミング言語に自動的に変換できます。この機能は、たとえば、 C 言語ではリリースされなくなったBSIM Verilog-A トランジスタモデルをngspiceなどのシミュレータで使用するために変換するために使用されます。[ 4 ]
この最初の例は、Verilog-A でのモデリングの最初のデモンストレーションです。
`include "constants.vams" `include "disciplines.vams"module example ( a , b , c , d , e , f ); parameter real R = 1 m ; parameter real C = 1 u ; parameter real L = 1 u ; parameter integer gain = 2 ; input a ; output b ; inout c , d , e , f ; electrical a , b , c , d , e , f ; analog begin // 集中定数素子のモデリング//抵抗V ( c , d ) <+ R * I ( c , d );//インダクタ// 複数の電流または電圧の割り当てが累積されますV ( c , d ) <+ L * ddt ( I ( c , d )); //コンデンサI ( e , f ) <+ C * ddt ( V ( e , f )); // シンプルな増幅器// 2 番目のノードが指定されていない場合、電圧はグランドを基準としますV ( b ) <+ gain * V ( a ); end endmoduleこの Verilog-AMS の例では、分岐端子 (a)、(c) の電圧とシミュレーション回路の周囲温度に応じて分岐 (a,c) を流れる電流を定義することで、理想的なダイオードを実装しています。
// 理想ダイオードモジュールdiode ( a , c ); inout a , c ; electrical a , c ; parameter real IS = 1.0e-14 ; // ユーザー設定可能な飽和電流real idio ; /* * 熱電圧 $vt (シミュレーション回路の周囲温度) と * - 端子間の電圧 に応じて、ダイオードを流れる非線形電流を計算します */ analog begin idio = IS * ( limexp ( V ( a , c ) / $vt ) - 1 ); I ( a , c ) <+ idio ; end endmodule単純な直流電圧源の場合、分岐電圧は一定の(直流)値に設定されます。
// DCソースモジュールvsrc ( p , n );パラメータreal dc = 1.0 ; inout p , n ; electrical p , n ;analog begin // 各タイムステップで一定のDC電圧を割り当てる: V ( p , n ) <+ dc ; end endmodule正弦波電圧発生器は、組み込みのsin()関数を使用できます。
// 正弦波電圧源`include "constants.vams"module vsin ( p , n ); parameter real amplitude = 1.0 ; parameter real freq = 50.0 ; parameter real phase = 0.0 ; inout p , n ; electrical p , n ;analog begin V ( p , n ) <+ amplitude * sin ( `M_TWO_PI * freq * $abstime + phase ); $bound_step ( 0.1 / freq ); // エイリアシングの問題を避けるため、1サイクルあたり少なくとも10ポイントを要求するend endmodule