SystemVerilog數(shù)據(jù)類型與數(shù)據(jù)對象

本文首發(fā)于微信公眾號“芯片學堂”现斋,作者JKZHAN

跟其他編程語言一樣庄蹋,學習SystemVerilog可以從數(shù)據(jù)類型入手迷雪。相比于Verilog,SystemVerilog引入了很多新的數(shù)據(jù)類型章咧,尤其是復合數(shù)據(jù)類型,比如隊列扰柠、動態(tài)數(shù)組疼约、關聯(lián)數(shù)組、結構體劝枣、枚舉類型、類等等溪胶。然而本文并不直接講這些玩意稳诚,整理學習思路還是得從基礎打起。

01 數(shù)據(jù)類型和數(shù)據(jù)對象

數(shù)據(jù)類型和數(shù)據(jù)對象是兩個不同的概念扳还。

數(shù)據(jù)類型可以理解為數(shù)學上的集合概念,包括了完整的值域和這些值所支持的運算規(guī)格工扎。舉個例子衔蹲,整型類型的值域是整數(shù)集,它支持四則運算橱健,并且滿足一定的代數(shù)性質沙廉,比如封閉性、交換律珊皿、結合律等等巨税。而基本的數(shù)據(jù)類型,是可以用被用來創(chuàng)建更加復雜的數(shù)據(jù)類型的驶兜。

數(shù)據(jù)對象則可以理解為一個實體远寸,操作系統(tǒng)會為其分配實實在在的內存空間并對其進行管理,比如是否可讀可寫驰后。根據(jù)存儲和賦值等方式的不同倡怎,在SV中可以分為參數(shù)(parameter)、變量(variable)和線網(wǎng)(net)三種類別监署。

最后還要厘清數(shù)據(jù)類型和數(shù)據(jù)對象的關系钠乏。那就是數(shù)據(jù)對象這個實體會有一個具體的取值(即使沒有初始化也會有默認值),它屬于某一種數(shù)據(jù)類型晓避,并且支持該類型的運算規(guī)則。按照數(shù)據(jù)對象進行劃分暑塑,可以將數(shù)據(jù)類型做如下分類:

數(shù)據(jù)對象 常見數(shù)據(jù)類型
參數(shù)類 parameter localparam
變量類 int logic reg bit byte integer ...
線網(wǎng)類 wire tri supply0 supply1 wand ...

02 邏輯狀態(tài)

在SV中锅必,除了支持內建字符序列的字符串類型搞隐、一般用來表示時間的實數(shù)類型、用來表示異常的事件類型外劣纲,其余眾多基本數(shù)據(jù)類型的每一比特都擁有一種邏輯狀態(tài)癞季,即0或1或者X或Z。每一種邏輯狀態(tài)的含義如下表绷柒。

邏輯值 描述
0 表示邏輯0或者False布爾值
1 表示邏輯1或者True布爾值
X 表示一個不確定的邏輯值
Z 表示一個高阻態(tài)

SV中有些基本類型是支持四種邏輯狀態(tài)的,有些則只支持0和1兩種邏輯狀態(tài)恨憎。

做這種區(qū)分主要的原因是郊楣,四狀態(tài)的數(shù)據(jù)類型能夠正確地表達硬件特性。一般在工藝庫標準單元的原語中钥组,能夠看到硬件單元對于不同的邏輯狀態(tài)輸入的具體響應今瀑,通常我們需要關注X態(tài)和Z態(tài)在仿真中的傳播点把。

而二狀態(tài)的數(shù)據(jù)類型則更適合在驗證環(huán)境這種軟件領域去表達數(shù)值郎逃,畢竟少了兩個狀態(tài)可是少了一倍的內存開銷挺份,反正軟件視角下,數(shù)值基本都是非0即1的匀泊。

SV支持的基本數(shù)據(jù)類型按照邏輯狀態(tài)可以歸類如下表各聘。我一般是這么記的,原來Verilog當中支持的躲因,還有新來的logic都是四狀態(tài)的毛仪。而跟軟件概念沾邊的,比如比特箱靴、字節(jié)、長短int棍矛,就都是二狀態(tài)的抛杨。

狀態(tài)類型 數(shù)據(jù)類型
四狀態(tài) integer reg wire tri logic
二狀態(tài) bit byte shortint int longint

在SV應用中,除非有必要區(qū)分描述reg變量或者支持連續(xù)賦值的線網(wǎng)類型茁帽,一般建議使用logic類型來表示狀態(tài)變量屈嗤。在實際應用中,使用logic可以更加省心铁追,因為該新成員不僅擁有reg變量的性質茫船,同時又能被門單元驅動扭屁,支持連續(xù)賦值涩禀。唯一需要注意的是,logic不支持雙向驅動幔欧,也就是作為inout端口時丽声,還是老老實實用wire觉义。

03 賦值方式

上面在介紹數(shù)據(jù)對象的時候晒骇,提到了不同的存儲和賦值方式,將數(shù)據(jù)對象可以分為參數(shù)洪囤、變量和線網(wǎng)三種瘤缩。其中參數(shù)類型要求在聲明或者編譯的時候就賦上一個定值,在仿真的過程中是不允許修改的剥啤。而剩下的變量和線網(wǎng)兩大類才是數(shù)據(jù)對象的主角。

線網(wǎng)類數(shù)據(jù)對象可以被邏輯表達式刻诊、原語(primitive)輸出或者模塊端口進行連續(xù)賦值(continuous assignment)牺丙。如果有多驅的話,最終的值由其解析函數(shù)計算得到是整,即解析值民假。也可以理解為,線網(wǎng)類數(shù)據(jù)對象就是兩個硬件結構之間的物理連接事秀,它不能被用來像寄存器一樣保存值,它的取值一直都依賴于它的解析函數(shù)宰衙,這也是它之所以叫連續(xù)賦值的原因睹欲。另外,線網(wǎng)類數(shù)據(jù)對象可以被force語句強行置成某一個值袋哼,只有當release語句進行釋放的時候闸衫,它才會回彈到解析值。force和release語句在驗證環(huán)境中應該盡量少用弟翘。

變量類數(shù)據(jù)對象就比較厲害了骄酗,可以被一個或者多個過程語句(procedural statement)賦值,最終取值以最后一個寫賦值為準睛琳。變量類數(shù)據(jù)對象就跟C/C++中變量的玩法比較接近嘿歌,可以用來保存中間值。同時丧凤,它也可以被寫在一個always語句塊里步脓,并實現(xiàn)跟線網(wǎng)類型一樣效果的連續(xù)賦值。

對于變量來說仍侥,通常需要考慮默認值鸳君,即如果你聲明了它,但沒有給它賦值砸紊,那么在內存里面它到底是一個什么狀態(tài)呢?簡單的說沼溜,四狀態(tài)類型的默認值為X游添,二狀態(tài)類型的默認值為0,實數(shù)類型的為0.0找都,字符類型的為“”石抡,句柄類型的為null助泽,事件類型的為New event。

參考文獻

[1] IEEE Standard Association. "IEEE Standard for SystemVerilog-Unified Hardware Design, Specification, and Verification Language." (2013).

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末隐解,一起剝皮案震驚了整個濱河市煞茫,隨后出現(xiàn)的幾起案子摄凡,更是在濱河造成了極大的恐慌,老刑警劉巖钦扭,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件床绪,死亡現(xiàn)場離奇詭異,居然都是意外死亡癞己,警方通過查閱死者的電腦和手機膀斋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痹雅,“玉大人仰担,你說我怎么就攤上這事〖ㄉ纾” “怎么了摔蓝?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵技掏,是天一觀的道長。 經(jīng)常有香客問我项鬼,道長哑梳,這世上最難降的妖魔是什么绘盟? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任鸠真,我火速辦了婚禮,結果婚禮上龄毡,老公的妹妹穿的比我還像新娘吠卷。我一直安慰自己,他們只是感情好沦零,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布祭隔。 她就那樣靜靜地躺著,像睡著了一般路操。 火紅的嫁衣襯著肌膚如雪疾渴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天屯仗,我揣著相機與錄音搞坝,去河邊找鬼。 笑死魁袜,一個胖子當著我的面吹牛桩撮,可吹牛的內容都是我干的。 我是一名探鬼主播峰弹,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼店量,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鞠呈?” 一聲冷哼從身側響起融师,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粟按,沒想到半個月后诬滩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡灭将,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年疼鸟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庙曙。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡空镜,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情吴攒,我是刑警寧澤张抄,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站洼怔,受9級特大地震影響署惯,放射性物質發(fā)生泄漏。R本人自食惡果不足惜镣隶,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一极谊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧安岂,春花似錦轻猖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至次员,卻和暖如春败许,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翠肘。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工檐束, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辫秧,地道東北人束倍。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像盟戏,于是被迫代替她去往敵國和親绪妹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內容