SystemVerilog中枚举类型注意事项

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

  1. 枚举类型列表中的一个标签
  2. 同类枚举型的其余变量(即便用相同的枚举类型声明变量)
  3. 经过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); //合法操做
相关文章
相关标签/搜索