2017-08-11 14 views
1

$ castの呼び出しが機能またはタスクのものであるかどうかをどのように判断できますか?それぞれの呼びかけはどうやって違いますか?私が理解することの1つは、関数呼び出しで、assert()を使用できることです。しかしそれ以外に、電話が$キャストの機能か$キャストタスクの場合はどうなるでしょうか?どちらの場合でも、私たちは$ cast(pkt、pkt1)のようなことをしています。

LRMは

task $cast(singular dest_var, singular source_exp); 

として

function int $cast(singular dest_var, singular source_exp); 

$キャストタスクのよう$キャスト関数の構文を与え、

ことを説明するために行きます

いずれかのタスクとして$ castを使用する無効な代入がどのように処理されるかは関数によって決まります。

タスクとして呼び出されると、$ castはソース式 を宛先変数に割り当てようとします。割り当てが無効な場合、実行時に エラーが発生し、宛先変数は変更されません。

関数として呼び出されると、$ castはソース式 をデスティネーション変数に割り当てようとし、キャストが合法であれば1を返します。 キャストが失敗した場合、関数は代入を行わず0を返します。 関数として呼び出されると、ランタイムエラーは発生せず、 の出力先変数は変更されません。

説明してください。

+0

LRMは、assert()の使用や$ castの周りのブロックが$ cast関数を選択したと言っていると思われますか? –

答えて

1

あなたのコメントは正しいです:$ castが式の一部として使用されている場合、それは関数と呼ばれると見なされます。その言葉は、関数が式でしか使用できず、タスク呼び出しのような簡単な文として存在することができなかった場合、Verilogの用語に由来します。しかし、いったんSystemVerilogがvoid戻り値の型を持つ関数を追加すると、その文言はもはや収まりません。

関連する問題