SystemVerilogでは、何故か?、semaphore と mailbox がクラスとして実装されています。
この2つのクラスは、stdパッケージに含まれていますが、何もしないでも直ぐに使えます。
この2つのクラスは、stdパッケージに含まれていますが、何もしないでも直ぐに使えます。
semaphoreはクラスなので、newにてオブジェクトを生成します。
また、semaphoreクラスには、次の2つのタスクと1つの関数が定義されています。
また、semaphoreクラスには、次の2つのタスクと1つの関数が定義されています。
function new( int KeyCount = 0 ); task put( int keyCount = 1 ); task get( int keyCount = 1 ); function int try_get( int keyCount = 1 );それぞれデフォルト引数がありますので、引数を指定していない場合のデフォルト引数が使われます。
mailboxもクラスなので、newにてオブジェクトを生成します。
また、mailbox暮らすには、次の3つのタスクと4つの関数が定義されています。
また、mailbox暮らすには、次の3つのタスクと4つの関数が定義されています。
function new( int bound = 0 ); function int num(); task put( singular message ); function int try_put( singular message ); task get( singular message ); function int try_get( singular message ); task peek( ref singular message ); function int try_peek( ref singular message );
mailboxクラスは、いろいろな型を引数が取れるのですが、引数の型を固定したい場合は、
型をパラメータとして指定することができます。
下記の例は、パラメータとしてstringを指定しています。
型をパラメータとして指定することができます。
下記の例は、パラメータとしてstringを指定しています。
サンプルコード(SystemVerilog 3.1aのReferenceから) typedef mailbox #(string) s_mbox; s_mbox sm = new; string s; sm.put( "hello" ); .... sm.get( s ); // s <= "hello"
検証、Verification、SystemVerilog