2009-01-25 24 views
23

看一些代碼,我保持系統的Verilog我看到的是這樣定義的一些信號:包裝VS解壓矢量系統的Verilog

node [range_hi:range_lo]x; 

和其他人都是這樣定義的:

node y[range_hi:range_lo]; 

據我所知,x被定義爲打包,而y被定義爲解壓縮。但是,我不知道這意味着什麼。

System Verilog中的壓縮和非壓縮向量有什麼區別?

編輯:迴應@ Empi的回答,爲什麼要寫一個SV的硬件設計師關心數組的內部表示呢?有沒有什麼時候我不應該不能使用打包信號?

回答

13

本文提供有關此問題的更多詳細信息: http://electrosofts.com/systemverilog/arrays.html,特別是第5.2節。

打包數組是一種將矢量細分爲子域的機制,它可以方便地作爲數組元素訪問。因此,打包數組保證被表示爲連續的一組位。解壓後的數組可能會或可能不會被如此表示。打包數組與打包數組的不同之處在於,當打包數組顯示爲主數組時,它被視爲單個向量。

5

在知道包裝和拆包的數組是什麼之前,讓我們看看如何通過聲明知道哪個數組是什麼。 打包數組的對象名稱在大小聲明之前。例如:

bit [3][7] a; 

解包數組的對象名稱在大小聲明後出現。例如:

bit a[3]; 

打包數組使存儲器,而解壓縮dont。 您可以訪問/解壓聲明數組這樣也

reg unpacked_array [7:0] = '{0,0,0,0,0,0,0,1}; 

你可以混合使用這兩種包裝和拆包陣列進行多維的記憶。例如:

bit [3:0][7:0]a[2:0]. 

它使陣列4(即4×8),用深度字節3.

+0

「Packed array make memory,Unpacked dont。」那是什麼意思?有很多FPGA綜合工具會將未打包的陣列轉換成某種內存(FF或RAM)。 – 2017-05-30 19:22:16

1

盒裝陣列主要用於有效內存使用情況時,我們正在編寫一個[3:0 ] [7:0] A [4:0]表示在32位存儲單元中4個8位的每一個都打包形成一個32位。右側值意味着有5個這樣的切片在那裏。

0

解壓後的數組將給您比打包數組更多的編譯時錯誤檢查。

由於這個原因,我在模塊的端口定義上看到了解壓縮數組。如果信號的尺寸與解包陣列的端口不完全相同,那麼編譯器會報錯。對於打包的數組,它通常會繼續,並且儘可能地將事物連接起來,而不是發出錯誤。