跳轉到內容

可程式設計邏輯/VHDL 資料型別

來自華夏公益教科書,開放的書籍,開放的世界

本頁將討論一些 VHDL 的基本資料型別。

std.standard

[編輯 | 編輯原始碼]

0 和 1

Boolean 是另一種預定義型別,其值是 FALSE 和 TRUE。

此整數的值範圍為 -2147483648 到 2147483648。

實數範圍為 �1.0E38 到 þ1.0E38。不可綜合。

Character

[編輯 | 編輯原始碼]

單個 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

[編輯 | 編輯原始碼]

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

[編輯 | 編輯原始碼]

ieee.numeric_std 定義了帶符號和無符號型別及其算術運算。它基於 std_logic_vector,因此它與整數不同。

ieee.std_logic_arith

[編輯 | 編輯原始碼]

這不是一個標準庫,儘管它位於“ieee”庫中。始終使用 numeric_std 代替。

更多詳細資訊請參見此處

華夏公益教科書