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來自動獲得值是錯誤的。

1 enum logic {a = 1'b0, b, c = 1'bx, d}; //錯誤,聲明不完整

一個枚舉型只可以進行下列賦值:

  1. 枚舉類型列表中的一個標簽
  2. 同類枚舉型的其他變量(即使用相同的枚舉類型聲明變量)
  3. 通過cast轉換成枚舉類型變量的數值 。

示例

 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系統函數都可以使用

1 next_state = states_t '(state + 1); //合法操作
2 $cast(next_state, state + 1); //合法操作

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM