在vhdl中,假设我有一个无符号向量定义如下:
signal s_col_rd_check : unsigned(7 downto 0);
现在,我是否使用以下库,
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
或以下
use ieee.numeric_std.all;
我可以使用无符号向量和整数值进行比较,如下所示吗?
some_assignment <= '1' when (s_col_rd_check < 190) else '0';
其中190只是一个整数。 如果我使用其中一个库,上述比较是否相同?
谢谢, - 鲁迪
答案 0 :(得分:8)
ieee.std_logic_arith
和ieee.std_logic_unsigned
是Synopsys专有软件包,不定义为IEEE VHDL标准的一部分。因此,这些软件包使用ieee
库名称会产生误导,因为它们不定义为IEEE标准的一部分。
快速Google search for "std_logic_arith.vhd"产生了至少三个不同版本的软件包,因此您的问题的答案可能取决于您使用的专有软件包的版本...这是一个强烈的指示,使用这些如果您希望在不同工具中具有明确定义且相同的设计行为,则专有包不是正确的方法。
因此,可靠的方法是仅使用ieee.numeric_std
,它是IEEE VHDL标准的一部分,因此具有明确定义的行为。
使用use ieee.numeric_std.all;
,您可以在以下位置进行比较:
some_assignment <= '1' when (s_col_rd_check < 190) else '0';
因为ieee.numeric_std
定义了函数:
function "<" (L: UNSIGNED; R: NATURAL) return BOOLEAN;