enum

enumは、信号の状態を文字列で表現したい時に使います。2通りの定義方法があります。

enum { bronze=3, silver, gold } medal;

bronzeに値を設定しなくてもいいです(設計で使うときは値をセットしたほうがいいでしょう)。SystemVerilogの仕様では、上記定義方法だと、silver=4, gold=5とインクリメント値が定義されることになっています。また、この場合silver, goldには2値の値が当てられます。

→ enum integer { bronze, silver, gold } medal; のような定義の場合、integerは4値(0,1,x,z)持てるので、{}の中の各名前に割り当てられる数値は、4値の値で当てられます。(この場合どうでもいいですが)

→ enum { bronze=2'bxx, ... } のような定義はErrorです。

→ enum integer { bronze=2'bxx, ... } はOKです。

typedef enum { bronze, silver, gold } medal_type;

medal_type medal_t;

case (medal_t)

bronze : xxx;

silver : xxx;

gold : xxx;

default : xxx;

endcase

みたいに使います。

enumの定義は、moduleの下や、classの中に定義できます。OVMやUVMでenumを使うときは、classの中に閉じられるものは閉じて使うのがいいでしょう。