可编程逻辑/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 代替。