SystemVerilog數(shù)組類型

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

在計算機編程語言中,集合類型(collection)的數(shù)據(jù)結構都是非常重要的恶耽。這里集合的概念指的是能夠將多個數(shù)據(jù)對象整合到一起進行管理和操作的復合數(shù)據(jù)類型舞丛。

數(shù)組(array)构捡,是比較重要的、基礎的、具有代表性的集合類型枚赡。在大部分編程語言中氓癌,數(shù)組具有一致性、有序性和不可變性贫橙。一致性指的是元素類型一致贪婉;有序性指的是元素排列順序確定,可通過下標索引卢肃;不可變性指的是長度不可變疲迂。多說一句,在現(xiàn)代編程語言中莫湘,往往有多樣的集合類型突破了這幾個性質尤蒿,主要是為了提供編程便利和保證硬件安全。

SystemVerilog相比于Verilog提供了功能更加豐富的數(shù)組類型幅垮,包括定長數(shù)組(Fixed-size Array)腰池、動態(tài)數(shù)組(Dynamic Array)、關聯(lián)數(shù)組(Associative Array)忙芒,還有為多維數(shù)組的切片索引提供方便而做區(qū)分的合并數(shù)組(Packed Array)和非合并數(shù)組(Unpacked Array)示弓。

01 定長數(shù)組和動態(tài)數(shù)組

定長數(shù)組在聲明的時候就必須指定數(shù)組的長度(緊湊聲明)或者上下邊界(完整聲明)沥曹。這樣在仿真程序編譯完成之后苟蹈,系統(tǒng)需要為其分配的內存空間大小就是已知的、確定的。

動態(tài)數(shù)組在聲明的時候不需要指定數(shù)組長度甘桑,而是在原來指定長度的中括號中留空。注意不是用$符號歹叮,$符號是用來聲明另一種叫隊列的集合類型用的跑杭。但是在使用動態(tài)數(shù)組之前,需要使用構造函數(shù)(new)對動態(tài)數(shù)組進行定長實例化咆耿。

換句話說德谅,定長數(shù)組和動態(tài)數(shù)組其實都是“定長”的,當系統(tǒng)為其分配空間之后萨螺,該空間大小就固定下來了窄做。它們的區(qū)別只是定長數(shù)組在仿真程序編譯的時候就已經確定,而動態(tài)數(shù)組可以在仿真運行時再根據(jù)上下文確定長度然后實例化慰技。所以椭盏,我個人覺得將它們分別叫數(shù)組的靜態(tài)初始化和動態(tài)初始化會更合適一些。

在有些編程語言中吻商,會存在“不定長”和“變長數(shù)組”的數(shù)組類型掏颊,即內存空間分配之后還可以變化。這種數(shù)組在本質上是這么實現(xiàn)的,當你需要改變長度的時候乌叶,系統(tǒng)會動態(tài)給你創(chuàng)建一個新的數(shù)組盆偿,然后將舊數(shù)組的值賦值過去,最后將舊的數(shù)組空間回收准浴。這種數(shù)據(jù)結構是低效的事扭。說到底,數(shù)組依然具有不可變性乐横。

02 常被用作查找表的關聯(lián)數(shù)組

上面介紹的定長數(shù)組和動態(tài)數(shù)組處理連續(xù)變量集合的時候是很有用的句旱。然而當你要存儲的數(shù)據(jù)量未知,或者是要保存稀疏矩陣的元素時晰奖,就應該選擇關聯(lián)數(shù)組了谈撒。

關聯(lián)數(shù)組有兩大特性。第一匾南,關聯(lián)數(shù)組的元素在被使用之前不會消耗內存資源啃匿;第二,關聯(lián)數(shù)組的索引可以是任何數(shù)據(jù)類型蛆楞。所以說溯乒,關聯(lián)數(shù)組的特性非常適合做查找表,類似于Python中的字典類型豹爹,是一種典型的鍵-值(key-value)模式裆悄。關聯(lián)數(shù)組在內存中的存放自然也是離散的,這一點非常關鍵臂聋。

關聯(lián)數(shù)組的聲明語法是:data_type array_id [index_type]光稼;其中data_type確定數(shù)組元素的類型,array_id是數(shù)組的名字孩等,index_type是索引的類型艾君。至于數(shù)組的使用,建議使用foreach進行循環(huán)遍歷肄方,它會自動遍歷到已經存在的那些元素冰垄;還可以使用關聯(lián)數(shù)組的delete、first权她、exists等內建方法虹茶。

有一個地方需要注意,當你通過一個不存在的索引去訪問關聯(lián)數(shù)組的時候隅要,是會返回數(shù)組類型的默認值的蝴罪,可能不是你想象中的邊界溢出然后報個錯。

03 合并數(shù)組和非合并數(shù)組

合不合并這個概念跟前面講的幾種數(shù)組類型不是在一個維度上拾徙。合并和非合并實際上是多維向量為了方便不同的訪問場景而衍生出來的切片分段的組織方式洲炊。在存儲方式上是有區(qū)別的:合并的部分原則上是連續(xù)比特存放的,非合并的部分就不一定了。

再說一下聲明方式就可以舉個例子了暂衡。在聲明數(shù)組時询微,如果將數(shù)組的維度寫到數(shù)組名的前面,表示這部分合并狂巢;如果將數(shù)組的維度寫到數(shù)組名后面撑毛,表示這部分非合并。

舉一個經典的例子唧领,memory的聲明:logic [31:0] my_mem [1024]藻雌;這個例子中,數(shù)組名是my_mem斩个,寫在它前面的維度是[31:0]胯杭,這一部分是合并的,即每32bit就連續(xù)存放在一塊受啥;寫在它后面的維度是[1024](這里跟寫成[0:1023]的形式是一樣的哈)做个,這部分是非合并的,即這1024組32bit不一定是連續(xù)存放的滚局。當我們進行訪問my_mem[520]的時候居暖,就可以直接讀出來第520個字。

總結一下藤肢,合并和非合并是數(shù)據(jù)集合的一種組織方式太闺,方便存儲管理,方便使用者訪問嘁圈。所以在聲明多維數(shù)組的時候省骂,建議是根據(jù)應用場景來決定怎么合并。


參考文獻

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

[2] Horstmann, Cay S., and Gary Cornell. Core Java : Volume I Fundamentals. Prentice Hall PTR, 2000.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末丑孩,一起剝皮案震驚了整個濱河市冀宴,隨后出現(xiàn)的幾起案子灭贷,更是在濱河造成了極大的恐慌温学,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甚疟,死亡現(xiàn)場離奇詭異仗岖,居然都是意外死亡,警方通過查閱死者的電腦和手機览妖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門轧拄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人讽膏,你說我怎么就攤上這事檩电。” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵俐末,是天一觀的道長料按。 經常有香客問我,道長卓箫,這世上最難降的妖魔是什么载矿? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮烹卒,結果婚禮上闷盔,老公的妹妹穿的比我還像新娘。我一直安慰自己旅急,他們只是感情好逢勾,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著藐吮,像睡著了一般敏沉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炎码,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天盟迟,我揣著相機與錄音,去河邊找鬼潦闲。 笑死攒菠,一個胖子當著我的面吹牛,可吹牛的內容都是我干的歉闰。 我是一名探鬼主播辖众,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼和敬!你這毒婦竟也來了凹炸?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤昼弟,失蹤者是張志新(化名)和其女友劉穎啤它,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舱痘,經...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡变骡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了芭逝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片塌碌。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖旬盯,靈堂內的尸體忽然破棺而出台妆,到底是詐尸還是另有隱情翎猛,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布接剩,位于F島的核電站办成,受9級特大地震影響,放射性物質發(fā)生泄漏搂漠。R本人自食惡果不足惜迂卢,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望桐汤。 院中可真熱鬧而克,春花似錦、人聲如沸怔毛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拣度。三九已至碎绎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抗果,已是汗流浹背筋帖。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冤馏,地道東北人日麸。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像逮光,于是被迫代替她去往敵國和親代箭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內容