數(shù)字硬件建模SystemVerilog(九)-網(wǎng)絡(luò)和變量的未壓縮數(shù)組
SystemVerilog有兩種類型的數(shù)組:壓縮數(shù)組和非壓縮數(shù)組。壓縮數(shù)組是連續(xù)存儲(chǔ)的位的集合,通常稱為向量。非壓縮數(shù)組是網(wǎng)絡(luò)或變量的集合。
集合中的每個(gè)網(wǎng)絡(luò)或變量稱為數(shù)組元素。未壓縮數(shù)組的每個(gè)元素的類型、數(shù)據(jù)類型和向量大小都完全相同。每個(gè)未壓縮的數(shù)組元素可以獨(dú)立于其他元素存儲(chǔ);這些元素不需要連續(xù)存儲(chǔ)。軟件工具,如仿真器和綜合編譯器,可以以工具認(rèn)為最佳的任何形式組織未壓縮數(shù)組的存儲(chǔ)。
未壓縮數(shù)組的基本聲明語(yǔ)法為:
數(shù)組的維度定義了數(shù)組可以存儲(chǔ)的元素總數(shù)。未壓縮的數(shù)組可以用任意數(shù)量的維度聲明,每個(gè)維度存儲(chǔ)指定數(shù)量的元素。聲明數(shù)組維度有兩種編碼樣式:顯式地址和數(shù)組大小。
顯式地址樣式指定方括號(hào)之間數(shù)組維度的起始地址和結(jié)束地址,格式為:
Start_address 和 end_address可以是任何整數(shù)值,數(shù)組可以以地址0、地址512或被建模硬件所需的任何地址開始。起始地址和結(jié)束地址之間的范圍表示數(shù)組維度的大?。ㄔ?cái)?shù))。
數(shù)組大小樣式定義要存儲(chǔ)在方括號(hào)中的元素?cái)?shù)(類似于C語(yǔ)言數(shù)組聲明樣式)。
[size]
使用array_size樣式,起始地址始終為0,結(jié)束地址始終為size-1
以下是一些未壓縮的數(shù)組聲明示例:
前面的mem聲明是16位logic變量的一維數(shù)組。一維陣列有時(shí)被稱為內(nèi)存陣列,因?yàn)樗ǔS糜?a target="_blank">仿真硬件內(nèi)存設(shè)備(如RAM和ROM)的存儲(chǔ)。
訪問數(shù)組元素
可以使用數(shù)組索引引用未壓縮數(shù)組的每個(gè)元素,索引緊跟在數(shù)組名稱之后,并且位于方括號(hào)中,多維數(shù)組需要多組方括號(hào)才能從數(shù)組中選擇單個(gè)元素:
數(shù)組索引也可以是網(wǎng)絡(luò)或變量的值,如下一個(gè)示例所示:
復(fù)制數(shù)組(陣列)
如果兩個(gè)數(shù)組(陣列)具有相同的布局,則可以使用賦值語(yǔ)句將一個(gè)未壓縮的數(shù)組(陣列)復(fù)制到另一個(gè)未壓縮的數(shù)組(陣列)。也就是說,這兩個(gè)數(shù)組(陣列)必須存儲(chǔ)相同向量大小的相同數(shù)據(jù)類型,必須具有相同的維度數(shù),并且每個(gè)維度的大小都相同-
數(shù)組(陣列)復(fù)制會(huì)將源數(shù)組(賦值的右側(cè))的每個(gè)元素復(fù)制到目標(biāo)數(shù)組(陣列)(賦值的左側(cè))中相應(yīng)的元素。兩個(gè)數(shù)組(陣列)的索引編號(hào)不需要相同。數(shù)組(陣列)的布局和類型必須完全匹配。
與復(fù)制數(shù)組(陣列)的方式類似,如果兩個(gè)切片的布局相同,則可以將數(shù)組(陣列)的一部分(稱為數(shù)組(陣列)切片)復(fù)制到另一個(gè)數(shù)組(陣列)的切片。切片是數(shù)組(陣列)一維內(nèi)的一個(gè)或多個(gè)連續(xù)編號(hào)的元素。
在成為SystemVerilog之前,最初的Verilog語(yǔ)言將對(duì)數(shù)組(陣列)的訪問限制為一次只能訪問數(shù)組中的一個(gè)元素。不允許對(duì)數(shù)組(陣列)的多個(gè)元素進(jìn)行數(shù)組(陣列)復(fù)制和讀/寫操作。
數(shù)組列表賦值
可以為未壓縮的數(shù)組或數(shù)組的一個(gè)片段分配一個(gè)值列表,這些值包含在每個(gè)數(shù)組維度的’{and}大括號(hào)之間。
列表語(yǔ)法類似于在C中為數(shù)組指定值列表,但在大括號(hào)前添加了撇號(hào)使用’-“作為開頭分隔符”表明,所包含的值是表達(dá)式列表,而不是SystemVerilog連接運(yùn)算符(后面會(huì)詳細(xì)介紹)。
還可以使用嵌套列表為多維數(shù)組分配值列表。嵌套的列表集必須與數(shù)組的維度完全匹配。
此數(shù)組分配相當(dāng)于以下各項(xiàng)的單獨(dú)分配:
通過指定默認(rèn)值,可以為未壓縮數(shù)組的所有元素指定相同的值。默認(rèn)值是使用’{default:}指定的,如以下代碼段所示:
數(shù)組元素的位選擇和部分選擇
可以從數(shù)組元素向量中選擇一位或一組位。必須首先選擇數(shù)組的單個(gè)元素,然后進(jìn)行位選擇或部分選擇。
通過端口將數(shù)組傳遞給任務(wù)和函數(shù)。任何類型和任意數(shù)量的未壓縮數(shù)組都可以通過模塊端口傳遞,也可以傳遞到任務(wù)和函數(shù)參數(shù)。端口或任務(wù)/函數(shù)形式參數(shù)也必須聲明為數(shù)組,端口或參數(shù)數(shù)組必須與要傳遞的數(shù)組具有相同的布局(與數(shù)組復(fù)制的規(guī)則相同)。
最初的Verilog語(yǔ)言只允許簡(jiǎn)單的向量通過模塊端口,或傳遞到任務(wù)或函數(shù)參數(shù)。要傳遞上述示例中表數(shù)組的值,需要256個(gè)端口,數(shù)組的每個(gè)元素一個(gè)端口。
-
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7441瀏覽量
88438 -
Verilog
+關(guān)注
關(guān)注
28文章
1335瀏覽量
109844 -
System
+關(guān)注
關(guān)注
0文章
164瀏覽量
36801 -
變量
+關(guān)注
關(guān)注
0文章
608瀏覽量
28285
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論