我建议,除非您尝试三态信号模式,不使用STD_LOGIC和std_logic_vector - 我认为是一种邪恶的。而是使用未解析的std_ulogic和std_ulogic_vector。这有利于在编译期间检测对未解析信号的多个分配。通过解析信号,您可以在模拟或合成后期检测到错误。
缺点:这个建议是不是很常见,并使用与STD_LOGIC第三方逻辑可能需要一些类型转换。
对于std_ulogic_vector的算术使用std_numeric。然后需要在操作之前将其转换为signed或unsigned并将结果转换回std_ulogic_vector。对于未解决的信号,没有标准的ieee.std_ulogic_unsigned库。
adder_result <= std_ulogic_vector(unsigned(operant1) + unsigned(operant2)) ;
increment <= std_ulogic_vector(unsigned(operant) + 1) ;
整数,自然,正一方和无符号和正负号之间的区别是表示法。 有符号和无符号是std_logic_vector的子类型,更像是std_logic线束(或更精确的数组)。
整数类型是一个数字的数学表示。它们通常更多地用于泛型,生成循环和数组索引。但有时合成也可以为算术单元处理它们。
那么只要使用整数也没有问题呢? – 2011-05-29 09:49:04
@Emil。这是正确的(当然受到限制的整数子类型)。但是,整数在实践中有一个(令人烦恼的)32位限制,这意味着您可能更喜欢无符号/有符号的例如如果你担心参数化或一致性。 – 2011-05-29 10:05:40
Nitpick(我知道扬知道这一点,但我会指出它的完整性):整数由标准保证是“不完全32位” - 他们从 - ((2 ** 31)-1)到+((2 ** 31)-1)。许多供应商确实提供了完整的int32_t范围,但不能保证:( – 2011-05-30 16:15:12