1 enum logic {a = 1'b0, b = 1'b1, c = 1'bx, d = 1'bz};
在SystemVerilog枚舉類型中當使用logic進行聲明時,注意logic爲四態,因此當使用時若是聲明時須要x、z態須要顯式聲明。函數
若是X或者Z賦值給枚舉列表中的一個標籤,下一個標籤也必須被顯式的賦值。試圖由賦爲X或者Z的標籤的值加1來自動得到值是錯誤的。spa
1 enum logic {a = 1'b0, b, c = 1'bx, d}; //錯誤,聲明不完整
一個枚舉型只能夠進行下列賦值:code
- 枚舉類型列表中的一個標籤
- 同類枚舉型的其餘變量(即便用相同的枚舉類型聲明變量)
- 經過cast轉換成枚舉類型變量的數值 。
示例blog
1 typedef enum {WAIT, LOAD, READY} states_t; 2 states_t state, next_state; 3 int foo; 4 //合法操做 5 state = next_state; //state和next_state是同種類型(states_t) 6 foo = state + 1; //state表示int基類,加上文本整數1,結果是int類型,並賦給一個int類型變量 7 8 //錯誤,非法賦值 9 state = foo +1; //不是同一個枚舉類型的變量賦值給一個枚舉變量錯誤,foo是int型,state是states_t類型 10 11 state = state + 1; //錯誤,state + 1爲int型 12 state ++; /錯誤,同上 13 next_state + = state; // 錯誤,同上
使用強制轉換操做符或者動態$cast系統函數均可以使用ast
1 next_state = states_t '(state + 1); //合法操做 2 $cast(next_state, state + 1); //合法操做