吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SystemVerilog中枚舉類型的使用建議

路科驗證 ? 來源:硅芯思見 ? 作者:nanoty ? 2022-09-01 14:20 ? 次閱讀

SystemVerilog中枚舉類型雖然屬于一種“強類型”,但是枚舉類型還是提供了一些“不正經”的用法可以實現一些很常見的功能,本文將示例一些在枚舉類型使用過程中的一些“不正經”用法,并給出一些使用建議。

1 同一個作用域內定義多個枚舉類型,并且這些枚舉類型的枚舉值列表中存在相同的標簽

【示例】

f4e3f8a2-29af-11ed-ba43-dac502259ad0.png

仿真結果】

f4f59a08-29af-11ed-ba43-dac502259ad0.png

示例中,定義了兩個枚舉變量fsm_s1和fsm_s2,并且其對應的枚舉值列表中都包含了相同的標簽“GO”,編譯后報錯。其實可以想象下,如果在SystemVerilog的同一個作用域中允許這種同名的標簽存在,那么在具體對于某一個枚舉變量使用標簽進行賦值操作時,那么這個標簽到底是來自于哪個枚舉變量中對應的枚舉列表呢?所以,在SystemVerilog中,同一個作用域內定義多個枚舉類型時,這些枚舉類型的枚舉值列表中不能存在同名的標簽。

2 枚舉值列表中的標簽用于運算

【示例】

f50d3fbe-29af-11ed-ba43-dac502259ad0.png

【仿真結果】

f52b7682-29af-11ed-ba43-dac502259ad0.png

示例中,將枚舉變量cal_e的枚舉值列表中的標簽被用于運算操作,并且可以獲得對應的計算結果。這是因為枚舉值列表中的每個標簽都有對應的數值,默認情況下,枚舉值列表中第一個標簽對應的數值為0,其后標簽對應數值按照加1遞增。當枚舉值列表中的標簽用于具體運算表達式時,與這些標簽關聯的數值會自動“替換”掉表達式中的標簽,從而實際完成運算的是標簽對應的數值。但是限于枚舉值列表可以表示的數據范圍有限,建議不要將枚舉列表中的標簽用于具體運算過程中。

3 將數值直接賦給枚舉變量

【示例】

f540960c-29af-11ed-ba43-dac502259ad0.png

【仿真結果】

f5520900-29af-11ed-ba43-dac502259ad0.png

示例中,第6行和第8行分別將數值直接賦予了枚舉變量cal,此時編譯會提示此處的賦值為illegal,但是SystemVerilog對于這個賦值操作還是會進行的。第10行采用$cast進行動態轉換,將數值轉換成枚舉變量cal,間接實現了對cal的賦值操作,此時因為采用了顯式的類型轉換,并且轉換成功,所以并不會產生任何提示信息。第12行使用了靜態轉換,將數值轉換成枚舉變量cal,此時因為采用了顯式的類型轉換,所以也并不會產生任何提示信息。但是在將具體數值賦值枚舉類型變量時,最好采用顯式的動態轉換或者靜態轉換。

4 賦給枚舉變量的數值位寬與枚舉變量位寬不匹配時的結果

【示例】

f5617386-29af-11ed-ba43-dac502259ad0.png

【仿真結果】

f571be8a-29af-11ed-ba43-dac502259ad0.png

示例中,第6行將數值“4”賦給枚舉變量cal,該枚舉變量可以選擇的枚舉值列表中的數值只可能為:0,1,2,3,顯然數值“4”不在該范圍之內,所以通過枚舉變量調用name()函數得到的標簽為“空”。但是“4”的位寬在該枚舉變量所能表示的數值范圍之內(不在枚舉值列表之內),所以該值會被賦給該枚舉變量,其數值可以被顯示出來。

第9行將數值“9”賦給枚舉變量cal,數值“9”為4位寬,枚舉變量cal位寬為3,數值“9”不在該枚舉變量所能表示的數值范圍之內,所以“9”會被截位后賦給枚舉變量,所以此時枚舉變量對應的數值為“3’b001”而不是“4’b1001”,而與數值“3’b001”對應的枚舉值列表中標簽是“ONE”,所以通過枚舉變量調用name()函數得到的標簽為“ONE”,顯示的數值為“1”。為了在仿真過程中避免類似情況出現,在將具體數值賦給枚舉變量時,建議采用動態轉換$cast,不要寄希望于仿真器能夠“揣測明白你的心意悄悄的”靜態的完成類型的轉換賦值,使用動態轉換$cast當遇到類型不匹配時立刻可以報錯提醒。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110388
  • System
    +關注

    關注

    0

    文章

    165

    瀏覽量

    37073
  • 枚舉
    +關注

    關注

    0

    文章

    16

    瀏覽量

    4622

原文標題:SystemVerilog中枚舉類型的一些“不正經”用法

文章出處:【微信號:Rocker-IC,微信公眾號:路科驗證】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用枚舉類型表示狀態機進入死循環

    在定義狀態機的狀態時,除了可以使用宏(define)或者參數(parameter)聲明定義外,還可以使用枚舉類型
    的頭像 發表于 11-07 17:46 ?1051次閱讀
    使用<b class='flag-5'>枚舉</b><b class='flag-5'>類型</b>表示狀態機進入死循環

    如何在Go給GORM模型添加枚舉類型

    GORM是一個流行的Go ORM,它允許我們定義結構體來表示數據庫表,并提供一個接口來執行CRUD操作。枚舉在編程是一個有用的特性,它允許我們定義一個變量可以取的固定值集。在這篇文章,我們將探索如何向GORM模型添加
    的頭像 發表于 11-28 15:36 ?1430次閱讀

    詳細講解c語言enum枚舉類型

    詳細講解C語言enum枚舉類型在實際應用,有的變量只有幾種可能取值。如人的性別只有兩種可能取值,星期只有七種可能取值。在 C 語言中對這樣取值比較特殊的變量可以定義為枚舉
    發表于 12-21 23:22

    深入理解java枚舉類型enum用法

    ; StringFRI = Fri; StringSAT = Sat; StringSUN = Sun; } 語法(定義) 創建枚舉類型要使用 enum 關鍵字,隱含了所創建的類型都是 java.lang.Enum 類
    發表于 09-27 11:49 ?0次下載

    枚舉是C語言中的一種基本數據類型

    在C語言中,枚舉類型是被當做 int 或者 unsigned int 類型來處理的,所以按照 C 語言規范是沒有辦法遍歷枚舉類型的。不過在一
    的頭像 發表于 09-25 15:45 ?8701次閱讀
    <b class='flag-5'>枚舉</b>是C語言中的一種基本數據<b class='flag-5'>類型</b>

    go語言枚舉類型怎么用

    、 java 等,都有原生支持。在 go ,大家卻找不到 enum 或者其它直接用來聲明枚舉類型的關鍵字。從熟悉其它編程語言的開發者轉用 go 編程,剛開始會比較難接受這種情況。其實,如果你看到如何在 go 中表示
    的頭像 發表于 09-02 09:43 ?5233次閱讀

    數字硬件建模SystemVerilog-枚舉數據類型

    上一節介紹了已經被淘汰的$unit聲明空間,今天我們來看看一種重要的數據類型-枚舉數據類型
    的頭像 發表于 07-01 17:44 ?1814次閱讀

    淺析SystemVerilog枚舉類型

    枚舉類型定義了一組具有名稱的值,在沒有指定值時默認是int型數值。
    的頭像 發表于 10-13 09:44 ?1718次閱讀

    SystemVerilog$cast的應用

    SystemVerilog casting意味著將一種數據類型轉換為另一種數據類型。在將一個變量賦值給另一個變量時,SystemVerilog要求這兩個變量具有相同的數據
    的頭像 發表于 10-17 14:35 ?2926次閱讀

    SystemVerilog的struct

    SystemVerilog“struct”表示相同或不同數據類型的集合。
    的頭像 發表于 11-07 10:18 ?2544次閱讀

    SystemVerilog至關重要的的數據類型

    對于剛接觸SV的小伙伴來說,SV有幾種不怎么能引起關注,但在實際工作又經常會用到的數據類型。它們就是枚舉(enumeration)、結構體(structures)和自定義類型(typ
    的頭像 發表于 01-21 17:14 ?849次閱讀
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>至關重要的的數據<b class='flag-5'>類型</b>

    SystemVerilog至關重要的結構體和自定義類型

    在上一篇文章《SystemVerilog至關重要的的數據類型,介紹了枚舉類型的本質和使用語
    的頭像 發表于 01-21 17:18 ?2362次閱讀
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>至關重要的結構體和自定義<b class='flag-5'>類型</b>

    枚舉類型的簡單擴展學習

    定義枚舉類型的值只能是整型常量,正數、負數和零都可以,但不可以是浮點數
    的頭像 發表于 05-25 15:45 ?693次閱讀

    Java枚舉的特點及用法

    在 Java 枚舉出現之前,通常會使用常量類來表示一組固定的常量值,直到Java 1.5之后推出了枚舉,那么枚舉類型有哪些特點,它比常量類又好在哪里呢。 本文將分析一下
    的頭像 發表于 09-30 10:02 ?1560次閱讀

    枚舉有多大?c語言枚舉end的作用是什么?

    枚舉有多大?c語言枚舉end的作用是什么? 枚舉在C語言中是一種常見的數據類型,用于定義一組相互關聯的常量或者變量。它通常用于表示一系列可能的取值,使得程序更加易讀和易維護。在C語言中
    的頭像 發表于 01-19 14:19 ?670次閱讀
    赌场少女| 扑克王百家乐的玩法技巧和规则| 百家乐官网筹码片| 娱乐城百家乐官网的玩法技巧和规则 | 澳门百家乐奥秘| 最新百家乐网评测排名| 试用的百家乐软件| 威尼斯人娱乐成| 大发888真人游戏| 大发888xp缺少casino| 六合彩印刷图库| 通化市| 百家乐官网六手变化混合赢家打法| 百家乐官网存1000送| 风水中的24山图| 澳门百家乐路单怎么看| 博彩百家乐五2013124预测| 百家乐设备电子路| 大发888游戏平台hgx2dafa888gw| 利都百家乐官网国际娱乐场开户注册 | 澳门百家乐765118118| 大发888被查封| 左云县| 蓝盾百家乐官网娱乐场开户注册| 百家乐视频游戏账号| 巴黎人百家乐的玩法技巧和规则| 大发888娱乐城破解软件| 贡觉县| 巴西百家乐官网的玩法技巧和规则 | 百家乐玩法和技巧| 免费百家乐分析工具| 皇冠网888799| 怎样看百家乐官网路纸| 做生意挂什么画招财| 大上海百家乐娱乐城| 新星娱乐城| 百家乐官网赌博现金网| 百家乐开户百家乐技巧| 顶级赌场真假的微博| 百家乐官网单机版游戏下载| 百家乐专打单跳投注法|