對(duì)于剛接觸SV的小伙伴來(lái)說(shuō),SV有幾種不怎么能引起關(guān)注,但在實(shí)際工作中又經(jīng)常會(huì)用到的數(shù)據(jù)類(lèi)型。它們就是枚舉(enumeration)、結(jié)構(gòu)體(structures)和自定義類(lèi)型(typedef)。
這三種數(shù)據(jù)類(lèi)型的合理應(yīng)用能夠處理不同邏輯結(jié)構(gòu)的數(shù)據(jù),提高代碼編寫(xiě)效率和可讀性。本文先講枚舉類(lèi)型的使用語(yǔ)法和一些注意的點(diǎn)。
認(rèn)識(shí)枚舉類(lèi)型
枚舉指的是一組有限的被賦予了名字的值的集合。在默認(rèn)情況下,集合中元素的數(shù)據(jù)類(lèi)型是int類(lèi)型,元素值的大小是從0開(kāi)始的遞增關(guān)系。當(dāng)然,元素的數(shù)據(jù)類(lèi)型和值都是可以用戶(hù)自定義的。
枚舉類(lèi)型在日常生活中很常見(jiàn),比如春夏秋冬就是表示季節(jié)的枚舉集合,周一到周天就是表示星期的枚舉集合??梢钥闯?,枚舉的重要作用,就是為了方便區(qū)分和使用。
打個(gè)比方,在正常交流時(shí),我們會(huì)說(shuō)現(xiàn)在在冬天,而不會(huì)故意去說(shuō)現(xiàn)在是第4季。同樣,當(dāng)我們使用代碼來(lái)描述有限集合,比如描述狀態(tài)機(jī)各個(gè)狀態(tài)的時(shí)候,使用名字可以大致表達(dá)不同狀態(tài)的行為,代碼可讀性自然也就提高了。
枚舉在代碼中實(shí)現(xiàn)的功能跟使用宏類(lèi)似,都可以用名字來(lái)代替數(shù)值。宏是在預(yù)處理階段將名字換成了值,而枚舉是在編譯階段將名字換成值。也就是說(shuō),枚舉類(lèi)型的這些名字不是變量,它們不會(huì)占據(jù)任何內(nèi)存。且這些名字的有效范圍是全局的,如果有變量等命名沖突了可能導(dǎo)致編譯不過(guò)。
枚舉類(lèi)型的使用
SV的枚舉類(lèi)型聲明語(yǔ)法跟C語(yǔ)言很像。如果自增的值與已經(jīng)自定義的值產(chǎn)生沖突,會(huì)導(dǎo)致編譯不過(guò);如果枚舉名以數(shù)字開(kāi)頭,也會(huì)導(dǎo)致編譯不過(guò)。另外,SV為枚舉變量還提供了一系列的內(nèi)建方法(first/last/next/prev等),用來(lái)方便對(duì)枚舉變量進(jìn)行索引等操作。
在SV中還明確說(shuō)明了枚舉類(lèi)型是一種強(qiáng)類(lèi)型(strongly typed)的數(shù)據(jù)類(lèi)型。如果給一個(gè)枚舉變量直接賦一個(gè)數(shù)值,這個(gè)數(shù)值不管是不是在枚舉范圍內(nèi),都是不允許的。這種類(lèi)型檢查是為了防止用戶(hù)亂賦值。不過(guò),SV是允許使用顯式類(lèi)型轉(zhuǎn)換(explicit cast)來(lái)完成這種賦值的。
此外,SV允許枚舉變量寫(xiě)到數(shù)值表達(dá)式中進(jìn)行數(shù)值計(jì)算,枚舉名可以當(dāng)常量使用。這個(gè)時(shí)候枚舉變量會(huì)被自動(dòng)轉(zhuǎn)換成對(duì)應(yīng)的整型數(shù)字之后,再繼續(xù)完成數(shù)值計(jì)算。不過(guò)當(dāng)計(jì)算結(jié)果想要重新賦值給枚舉變量的時(shí)候,依然需要進(jìn)行顯式的類(lèi)型轉(zhuǎn)換。
都在代碼里
下面代碼和注釋總結(jié)了以上介紹的枚舉類(lèi)型的使用方法和限制,個(gè)人覺(jué)得掌握例程中的內(nèi)容對(duì)工作來(lái)說(shuō)已經(jīng)完全足夠啦,但例程我還沒(méi)有經(jīng)過(guò)編譯哈。
參考文獻(xiàn)
[1] IEEE Standard Association. "IEEE Standard for SystemVerilog-Unified Hardware Design, Specification, and Verification Language." (2013).
-
數(shù)據(jù)類(lèi)型
+關(guān)注
關(guān)注
0文章
237瀏覽量
13898 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
131瀏覽量
11119 -
枚舉
+關(guān)注
關(guān)注
0文章
16瀏覽量
4725
發(fā)布評(píng)論請(qǐng)先 登錄
為什么DSP對(duì)音頻設(shè)計(jì)至關(guān)重要?
天線(xiàn)系統(tǒng)在NFC設(shè)備中至關(guān)重要
示波器衡量指標(biāo)中至關(guān)重要但常被忽略的兩個(gè)概念是什么?
淺析System Verilog中的整數(shù)數(shù)據(jù)類(lèi)型
SpinalHDL中Bundle與普通數(shù)據(jù)類(lèi)型之間的連接賦值轉(zhuǎn)換
51單片機(jī)中的數(shù)據(jù)類(lèi)型解析

vhdl數(shù)據(jù)類(lèi)型
數(shù)字硬件建模SystemVerilog-枚舉數(shù)據(jù)類(lèi)型
asBits函數(shù)如何轉(zhuǎn)換成Bits數(shù)據(jù)類(lèi)型
SpinalHDL中Bundle數(shù)據(jù)類(lèi)型的轉(zhuǎn)換
SystemVerilog中$cast的應(yīng)用
關(guān)于有符號(hào)數(shù)據(jù)類(lèi)型的示例
SystemVerilog中的struct
SystemVerilog中至關(guān)重要的結(jié)構(gòu)體和自定義類(lèi)型

評(píng)論