VHDL 中的数据类型

Data types in VHDL

我正尝试在 VHDL 中实现一个过滤器。所有输入向量和输出向量都是带符号的 16 位(1.15 格式,第一位是符号位)。我计划将所有信号/变量声明为 STD_LOGIC / STD_LOGIC_VECTOR 类型。所有的计算都将基于 2 的补码。

有包(在 IEEE 中),例如 std_logic_1164(std_logic 类型和相关函数),std_logic_arith(算术函数),std_logic_signed(已签名算术函数)和 std_logic_unsigned(无符号算术函数)。

为了在这个基于 STD_LOGIC / STD_LOGIC_VECTOR 类型的过滤器实现中实现所有的 2 的补码操作,我应该使用哪个库?我应该同时使用 std_logic_signed.ALL 和 std_logic_1164.ALL 吗?

std_logic_(un)signed 和 std_logic_arith 不是标准的 VHDL 包。它们是近 30 年前由 synopsys 编写的,从未成为 VHDL 标准的一部分。

此处适用的 VHDL 标准包是来自 VHDL 93 的 numeric_std(对于 unsignedsigned 类型)或 numeric_std_unsigned 用于算术 std_logic_向量(来自 VHDL 2008)。 VHDL2008 中还提供了 fixed_pkg,它允许用户使用定点包定义和执行算术运算。例如:

signal a,b : sfixed(0 downto -15); -- 1.15 signed fixed 
signal c   : sfixed(1 downto -15);

....

a <= to_sfixed(0.12345, a);
b <= to_sfixed(-0.54321, b);

c <= a + b;

这是定点,2s补码,整数运算。