當前位置:編程學習大全網 - 編程語言 - SystemVerilog結構體

SystemVerilog結構體

本文所有源碼可通過後臺回復 “結構體”獲得

結構體由關鍵字 struct 聲明,且結構體中的成員可以是任何數據類型

如下定義壹個結構體:

結構體就如同壹個集合,集合中包含各種變量和常量,並且這些變量和常量可以用結構體名進行引用,引用方式為 <結構體名>.<變量名>

如果要用到上面定義的結構體中的變量c,可以這樣引用 Instruction_Word.c

結構體也可以整體顯示聲明為變量整體或者線網整體

結構體整體可以聲明為線網類型,但結構體內部不能使用線網類型

像上面這個例子,我們把結構體名定義的比較長,每次引用結構體內的變量,會顯得冗長,這裏可以利用 typedef 將結構體聲明為用戶自定義類型

這裏有兩點需要說明

可以在實例化結構體時對內部的變量進行初始化,方法是用 '{} ,大括號裏的 數值個數及次序必須與成員個數及次數壹致

看個例子

運行結果如下

註意:大括號前的符號是 英文的單撇號

剛開始以為是Esc鍵下面的那個按鍵,結果就運行失敗了

嘗試壹下在實例化的時候刪除壹個賦值

看看編譯會出現什麽情況

看來賦值時的個數確實要與結構體內部變量的個數壹致

如果我們壹時間只想改變結構體中某個成員的值,可以單獨給這個成員賦值

就像上面這個例子,在初始化後,我們只想改變變量 flag 的值,可以這樣

從運行結果中可以看到,初始化時flag為0,通過單獨給flag賦值後,變為1

結構體表達式賦值與初始化類似

有兩種形式

我們試試兩種方式賦值是否都可行

可見兩種方式都可行!

那麽這兩種方式能不能混合使用呢?

我們在顯示後面再加兩句

運行結果顯示 不能混合使用

結構體表達式的方式是不是類似於Verilog中module的調用,分為按位置調用和按名稱調用,只不過不能有缺省

關鍵字 default 可以將結構體的所有成員指定為默認值,像這樣 '{default:0}

可以看到運行結果均為對應位寬的默認數值

優先級排序:default賦值 < 數據類型賦值 < 成員名稱賦值

優先級高的賦值會覆蓋掉優先級低的賦值

用壹個例子測試壹下

可以看到,最終輸出的結果是 成員名賦值 的結果,因為按成員名稱賦值的優先級最高

壓縮結構體就像壹個向量,所有的成員都是向量中的元素,成員按照在結構體中的順序,依次是向量的高位和低位

比如下面這個壓縮結構體:

按照壓縮變量的說法, title, middle, endle 會組成壹個向量,其順序如下

為了驗證這壹點,同樣做壹個小測試

從結果中可以看到, title 是高四位, middle 是中間位, endle 是低兩位,與上述吻合

有壹點需要註意,這裏是 packed 不是定義包的那個 package ,並且順序不能搞錯,壹定是 struct packed ,而不是 packed struct

像上面例子中定義的結構體,可以改為 struct packed singed 便是有符號的壓縮結構體

本文主要參考《SystemVerilog硬件設計及建模》

  • 上一篇:模具鑄造中的幾種造型方法介紹
  • 下一篇:多普勒原理的簡介
  • copyright 2024編程學習大全網