題:
Verilog中的陣列和總線之間有什麼區別?
Caleb Reister
2016-03-12 12:19:40 UTC
view on stackexchange narkive permalink

我在學校學習Verilog和Vivado,現在我對總線和陣列的使用感到非常困惑。有人可以澄清以下內容嗎?

  • 數組和總線之間有什麼區別?
    • 在聲明期間,總線的外觀類似於 reg [9:0 ] data ,而數組將是 reg data [9:0] 。語言處理這些情況的方式是否有細微(或不太細微)的差異?
    • 為什麼在變量名前面用and索引聲明總線,而在後面用索引引用?例如,無論是否將 data 聲明為數組或總線, data [3] 都可以工作。
  • 我發現有可能(儘管令人困惑)創建諸如 reg [4:0] busArray [3:0] 之類的聲明,該聲明將創建4個5位寄存器。
    • 這是不好的做法嗎?
    • 這與聲明為 reg arrayArray [4:0] [3:0] 的2d數組有何不同?
  • 什麼時候應該使用總線,什麼時候應該使用數組?

我還有其他一些相關問題...

  • 當您有類似 reg [7:0] data [1023:0] 的聲明時,是否可以訪問各個位和範圍?
    • 我在訪問範圍時遇到問題的位。例如, data [7:0] [4] 似乎有效,但是 data [0] [255:0] data [3:1] [512:64] 導致語法錯誤。是否有關於如何訪問總線和數組中元素的規則?
  • 是否可以聲明多維總線? (類似於 reg [15:0] [8:0] data
  • 是否可以通過類型轉換來轉換數組,使其像總線一樣對待?這對於將數組傳遞到旨在接受總線的模塊中可能很有用。
一 回答:
Willis Blackburn
2016-03-12 12:36:42 UTC
view on stackexchange narkive permalink

總線使您能夠定義大於一位的值。如果要存儲或併行傳輸(0)到15之間的值,則需要4位總線。數組可讓您使用一個名稱存儲多個值。

“ [7:0]數據”和“ data [7:0]”之間的區別在於,第一個是單個8位-寬值,而第二個是八個單位值。

創建總線陣列是完全正常且有用的。它們有時被稱為記憶,因為您可以使用它們來建模ROM或RAM。您的綜合軟件通常可以識別出您定義了類似ROM或RAM的內容(例如,reg [7:0] data [1023:0]基本上是8位RAM的1K)並將其合成為實際的物理ROM或芯片上的RAM。

要了解要使用哪種結構,只需問問自己擁有什麼。您是否有一個多位值?那是公共汽車。您是否有一堆要使用單個名稱引用的單位值?然後使用數組。您有一堆多位值嗎?然後使用內存。

您能回答我添加的其他一些(相關)問題嗎?我最初創建問題時忘了包括他們。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...