2014-11-06 52 views
0

我读了许多VHDL文件头文件:使用ieee.std_logic_arith.all和ieee.std_logic_signed.all,我看不到任何好处,因为后者包(签名)使在实施中自动使用前者(Arith)。任何澄清为什么他们一起使用?需要使用std_logic_Arith和std_logic_signed/unsigned

我有同样的评论重新。 ieee.std_logic_unsigned.all 谢谢

+1

除了@ fru1tbat的建议,您还可以使用'ieee.numeric_std_ [un] signed'在VHDL-2008中获得与非标准'std_logic_ [un] signed'相同的行为。 – 2014-11-06 22:46:34

回答

2

首先,当你使用一个包,你不会自动导入所有的包使用的包,所以你需要,如果你想两者的功能明确同时使用。

std_logic_signed/unsigned重载数学和关系运算符分别将std_logic_vector作为有符号/无符号数处理。 std_logic_arith重载相同的操作员,但仅限于它定义的signedunsigned类型。如果您要使用特定的数字类型,请使用std_logic_arith。如果您想将所有通用std_logic_vector s视为有符号或无符号数字,则使用其他符号。

或实际,不要既可以使用,并且使用标准ieee.numeric_std代替,这将完成同样的事情std_logic_arith(你将需要强制转换,而不是在std_logic_vector直接操作,但这一般是越多越好反正)。

+0

谢谢你的回答。你说过:如果你想使用特定的数字类型,你可以使用std_logic_arith;你能举个例子,其他数字类型在std_logic_arith中定义,而不是有符号和无符号数据类型 – user2005893 2014-11-07 00:27:39

+0

我不是故意暗示还有其他类型。我将显式数字类型与函数重载区分开来,将泛型'std_logic_vector'隐式地视为数值类型。 – fru1tbat 2014-11-07 00:58:17