hdlでは、基本のビルディングブロックは、moduleで、それは、SVになっても変わりません。moduleとmoduleをつなぐのは、ポートです。ポートによる接続は、物理的なピン間接続と殆ど同じ意味を持ちますが、設計階層が大きくなってくると、このポートの接続とポートのメンテナンスが面倒になってきます。ポートをちょっと変更しただけで、デザイン全体の記述に波及し、全体を変更するのは面倒です。-開発中の仕様変更で、ポートのつらい変更作業を余儀なくされた人も多いと思います。そこで、共通な部分は、一箇所に集めて、メンテナンス性をよくしようという発想が出てきたのが、インターフェースです。インターフェースは、配線のバンドル、あるいは、配線の構造体化という側面もありますが、もうひとつの重要なことは、テストベンチとの接続に関するものです。従来、テストベンチをハードウェアと一体化した固定的な考え方で捉えることが多かったと思いますが、SVでは、オブジェクト指向で構成する再利用を前提としたプログラミング言語的な体裁になります。その結果、このパラダイム下では、テストベンチとハードウェアの接続がportではなくこのinterfaceを中心に行わることになります。簡単なインターフェースは、次です。シミュレーションを終了します。time=0nsparameterを渡して、インスタンス化できるのも同じです。シミュレーションを終了します。programのように、always系プロセスの制限もありません。インターフェースの下にモジュールインスタンスを配置することはできません。interface自体を階層トップとしてinstance化することはできないので、module下で、インスタンスする必要があります。ネストinterfaceにおいては、暗黙インスタンス化はありません。シミュレーションを終了します。time=0nsまとめると、次のようになります。自由にmodule内を覗くことができる。可能(ただし、暗黙インスタンスンス化は、不可)program/interfaceは、moduleと似ていることが分かります。-実際、VeritakSVにおいては、programとinterfaceは、moduleから派生させたC++クラスで実装しています。あるハードウェアの記述は、moduleとinterfaceになります。今までのmoduleだけの記述から、interface部分とmoduleに分割されることになります。これらは、基本的にスタティックなオブジェクトです。テストベンチの記述は、programになることは、前に述べた通りですが、これらは、新しいSVパラダイム化では、テストベンチは、クラスを基本部品とするダイナミックオブジェクトになります。このダイナミックなテストベンチとスタティックなハードウェアとの橋になるのもinterfaceの役割です。設計段階の抽象度にもよりますが、デザインの最終段階においては、interfaceは、論理合成可能でなければなりません。.階層参照まず思いつく手ですが、原理的には可能でも殆ど使われません。階層を飛び越えての参照は、論理合成ができないという致命的欠点を抱えています。合成を意識しないテストベンチ側からは、なにも問題ありませんが、合成を前提にする場合、階層参照はNGです。ポートで渡す方法で、記述します。この方法は、論理合成可能です。17行目でインスタンス化されたインターフェースは、19行目で、DUTという名前で渡されます。aという名前で、interface全体を参照することができます。a);//インスタンス化したインターフェースを参照する。$finishコマンドを実行します。ポートにinterfaceのインスタンスを渡す方法で、そのインターフェースの内部信号に自由にアクセスできるようになります。階層参照に変えた記述と等価です。機能的には、違いはありませんが、論理合成をサポートしていることが、大きな利点になります。スコープのインポート化と言うと、しっくりする人もいるかもしれません。従来のピン毎のポート接続に慣れた人からすると、ちょっとしたバリアかもしれません。書いていましたが、これを省略化することもできます。こちらの方法も論理合成可能です。記法は、26行目だけの違いになります。interface本体を指定するところがないのですが、これだけを取って、単独コンパイルや、単独合成可能ということではありません。インスタンス化したinterfaceを接続することによって、内部的なsemantics処理が完了しますので、インスタンス化接続なしには、シミュレーションあるいは合成時はできないことにご注意ください。本体は、使用モジュールより先に定義してある必要はありません。どこにあってもよいですが、どこかにはないといけません。interfaceの性質上、ヌルポートにしておくことはできません。インスタンス化したinterfaceを渡してください。-この構文の存在意義ですが、後に出てくるmodport構文による接続をgenerate構文で行うときに必要になってきます。インスタンス化したインターフェースを参照する。endendmodule:subSVは、input/output/inoutの他に、新しく2つのポート形式を追加しました。ここで、ポート接続についてまとめておきましょう。task/functionで使える形式が別にある。