LRM読解(Chap.10-1)

2008/11/05Verilog::文法import

TITLE: 10. Tasks and functions taskとfunctionは,記述中のあらゆる場所からの共通の手続きを実行するアビリティを提供する.ソースコードの可読性・デバッグ性を容易にするために,大きな手続きを小さな手続きに分解することも提供する(意訳).この節は,taskとfunctionの間の差異について議論し,taskとfunctionの定義の仕方と起動の仕方について記述し,それぞれの例を提供します.

10.1 taskとfunctionとの差異 ~ Distinctions between tasks and functions

以下の規則は,funtionとtaskとを区別します.

  • functionは,1シミュレーション時間ごとに実行される.taskは,時間制御文を含むことができる.
  • functionはtaskを有効にできない.taskは他のtaskおよびfunctionを有効にできる.
  • functionは,最低1つのinput型の引数を持ち,output型やinout型の引数を持たない.taskは0以上の任意の型の引数を持つことができる.
  • functionは1つの値を返す.taskは値を返せない.

functionの目的は,1つの値を返すことによって,入力の値に対する応答をすることです.taskは複数のゴールをサポートすることができ,複数の返り値を計算することができます.しかし,outputまたはinput型の引数のみが,taskの呼び出しから返り値を渡すことができます.*1 functionは,式のオペランドのように使われます.オペランドの値は,関数による返り値です.

Example
taskまたはfunctionは,16bit wordを交換することとして定義することができます.taskは交換後のwordをoutput引数で返します.switch_bytesと呼ぶtaskを有効にするためのソースコードは,下記の例のように見えます.

switch_bytes (old_word, new_word);

task:switch_bytesは,old_wordにbytesをとり,byte orderを入れ替えて,new_wordにおきます.word-switching functionは,functionの返り値として入れ替え後の値を返します.なので,function:switch_bytesの関数呼び出しは,下記の例のように見えます.

new_word = switch_bytes (old_word);

*1 : 訳注:関数のように返り値を持たない.例を参照のこと.