數字硬件建模SystemVerilog(九)-網絡和變量的未壓縮數組
SystemVerilog有兩種類型的數組:壓縮數組和非壓縮數組。壓縮數組是連續存儲的位的集合,通常稱為向量。非壓縮數組是網絡或變量的集合。
集合中的每個網絡或變量稱為數組元素。未壓縮數組的每個元素的類型、數據類型和向量大小都完全相同。每個未壓縮的數組元素可以獨立于其他元素存儲;這些元素不需要連續存儲。軟件工具,如仿真器和綜合編譯器,可以以工具認為最佳的任何形式組織未壓縮數組的存儲。
未壓縮數組的基本聲明語法為:
數組的維度定義了數組可以存儲的元素總數。未壓縮的數組可以用任意數量的維度聲明,每個維度存儲指定數量的元素。聲明數組維度有兩種編碼樣式:顯式地址和數組大小。
顯式地址樣式指定方括號之間數組維度的起始地址和結束地址,格式為:
Start_address 和 end_address可以是任何整數值,數組可以以地址0、地址512或被建模硬件所需的任何地址開始。起始地址和結束地址之間的范圍表示數組維度的大?。ㄔ財担?。
數組大小樣式定義要存儲在方括號中的元素數(類似于C語言數組聲明樣式)。
[size]
使用array_size樣式,起始地址始終為0,結束地址始終為size-1
以下是一些未壓縮的數組聲明示例:
前面的mem聲明是16位logic變量的一維數組。一維陣列有時被稱為內存陣列,因為它通常用于仿真硬件內存設備(如RAM和ROM)的存儲。
訪問數組元素
可以使用數組索引引用未壓縮數組的每個元素,索引緊跟在數組名稱之后,并且位于方括號中,多維數組需要多組方括號才能從數組中選擇單個元素:
數組索引也可以是網絡或變量的值,如下一個示例所示:
復制數組(陣列)
如果兩個數組(陣列)具有相同的布局,則可以使用賦值語句將一個未壓縮的數組(陣列)復制到另一個未壓縮的數組(陣列)。也就是說,這兩個數組(陣列)必須存儲相同向量大小的相同數據類型,必須具有相同的維度數,并且每個維度的大小都相同-
數組(陣列)復制會將源數組(賦值的右側)的每個元素復制到目標數組(陣列)(賦值的左側)中相應的元素。兩個數組(陣列)的索引編號不需要相同。數組(陣列)的布局和類型必須完全匹配。
與復制數組(陣列)的方式類似,如果兩個切片的布局相同,則可以將數組(陣列)的一部分(稱為數組(陣列)切片)復制到另一個數組(陣列)的切片。切片是數組(陣列)一維內的一個或多個連續編號的元素。
在成為SystemVerilog之前,最初的Verilog語言將對數組(陣列)的訪問限制為一次只能訪問數組中的一個元素。不允許對數組(陣列)的多個元素進行數組(陣列)復制和讀/寫操作。
數組列表賦值
可以為未壓縮的數組或數組的一個片段分配一個值列表,這些值包含在每個數組維度的’{and}大括號之間。
列表語法類似于在C中為數組指定值列表,但在大括號前添加了撇號使用’-“作為開頭分隔符”表明,所包含的值是表達式列表,而不是SystemVerilog連接運算符(后面會詳細介紹)。
還可以使用嵌套列表為多維數組分配值列表。嵌套的列表集必須與數組的維度完全匹配。
此數組分配相當于以下各項的單獨分配:
通過指定默認值,可以為未壓縮數組的所有元素指定相同的值。默認值是使用’{default:}指定的,如以下代碼段所示:
數組元素的位選擇和部分選擇
可以從數組元素向量中選擇一位或一組位。必須首先選擇數組的單個元素,然后進行位選擇或部分選擇。
通過端口將數組傳遞給任務和函數。任何類型和任意數量的未壓縮數組都可以通過模塊端口傳遞,也可以傳遞到任務和函數參數。端口或任務/函數形式參數也必須聲明為數組,端口或參數數組必須與要傳遞的數組具有相同的布局(與數組復制的規則相同)。
最初的Verilog語言只允許簡單的向量通過模塊端口,或傳遞到任務或函數參數。要傳遞上述示例中表數組的值,需要256個端口,數組的每個元素一個端口。
審核編輯 :李倩
-
編譯器
+關注
關注
1文章
1624瀏覽量
49108 -
變量
+關注
關注
0文章
613瀏覽量
28361 -
數組
+關注
關注
1文章
417瀏覽量
25939
原文標題:SystemVerilog(九)-網絡和變量的未壓縮數組
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論