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の中に閉じられるものは閉じて使うのがいいでしょう。