可程式設計邏輯/VHDL 資料型別
本頁將討論一些 VHDL 的基本資料型別。
0 和 1
Boolean 是另一種預定義型別,其值是 FALSE 和 TRUE。
此整數的值範圍為 -2147483648 到 2147483648。
實數範圍為 �1.0E38 到 þ1.0E38。不可綜合。
單個 ASCII 字元或此類字元的字串。不可綜合。
用於告知物理量,如時間、電壓等。在模擬中很有用。不可綜合。
陣列允許建立許多相同的資料型別。這些資料型別使用稱為索引的數字訪問。一個數組宣告示例如下
type tIntegerArray is array ( 7 downto 0 ) of integer;
此宣告將建立一個新的資料型別,該資料型別是一個數組。此陣列將包含 8 個整數,索引為數字 7、6、5、... 1、0。
聲明後,陣列可以像任何資料型別一樣使用
signal sBunchOfInts: tIntegerArray;
陣列的單個元素可以使用 () 訪問
sBunchOfInts(2) <= 4;
許多更新的綜合工具會將陣列擴充套件為許多訊號,並將陣列作為字尾追加到訊號名稱的末尾。這有助於組織重複的 VHDL 程式碼,並允許 std_logic_vectors 在 VHDL 程式碼的 for generate 和 for loop 中使用。這減少了程式碼行數,有助於組織程式碼並使其更易於維護。
記錄允許將相關資料型別組合在一起。它類似於 C 程式設計中的“struct”。雖然記錄不會向模組新增任何其他功能,但它們確實有助於組織程式碼並使其更易於維護。以下是一個記錄宣告示例
type rStatus is record read_failure: std_logic; write_failure: std_logic; failure_count: std_logic_vector( 7 downto 0 ); end record;
宣告記錄後,可以使用記錄作為型別來宣告埠、訊號或變數
decoder_status : in rStatus;
signal sStatus: rStatus; signal sStatus_next: rStatus;
variable vStatus: rStatus;
可以使用“.”訪問記錄型別
sStatus_next.failure_count <= sStatus.failure_count + x"01";
雖然它們以前僅限於測試平臺和其他僅模擬 VHDL 模組,但許多更新的綜合工具會將記錄型別正確擴充套件到其各個部分。這使得記錄型別的組織和可維護性優勢能夠在 RTL 和其他可綜合程式碼中使用。
ieee.std_logic_1164 庫旨在為數位電路邏輯值提供標準表示。它定義了型別 std_logic 以及 std_logic 的各種操作(以及、或、非等)。在為可綜合電路編寫 VHDL 時,這通常是必需的庫。
| 名稱 | 範圍 | 可綜合的值 | 描述 |
|---|---|---|---|
| std_logic | 'U' - 未初始化 'X' - 強制未知 '0' - 強制 0 '1' - 強制 1 'Z' - 高阻抗 'W' - 弱未知 'L' - 弱 0 'H' - 弱 '1' '-' - 不關心 |
'1', '0', 'Z' | std_logic 是一個列舉,它表示邏輯電路中訊號的各種可能狀態。 |
| std_logic_vector | 一個 std_logic 字串,例如“01001XZ” | 包含 '1'、'0' 和/或 'Z' 的字串 | std_logic_vector 是一個 std_logic 值的字串。它允許輕鬆表示匯流排和其他多個訊號值。 |
ieee.numeric_std 定義了帶符號和無符號型別及其算術運算。它基於 std_logic_vector,因此它與整數不同。
這不是一個標準庫,儘管它位於“ieee”庫中。始終使用 numeric_std 代替。