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