我应该何时使用std_logic_vector,何时应该使用其他数据类型?

Emi*_*son 14 port unsigned signed integer vhdl

我是VHDL的新手,我很难搞清楚哪些数据类型适合在哪里使用.如果我理解正确,对于综合,所有顶级实体端口都应该声明为std_logic_vector或std_logic,而不是任何其他类型.

但是std_logic_vector不支持算术,所以我应该如何处理呢?

我的直觉告诉我,我应该在顶层使用std_logic_vector,然后在将其传递给其他实体时将其转换为整数数据类型.它是否正确?

什么积分数据类型(整数,无符号,有符号)应该在哪里使用?我理解有符号和无符号之间的区别,但什么时候应该使用整数?

Jan*_*uwe 17

使用最适合您建模目的的数据类型,包括端口.合成要求您只应将std_logic或std_logic_vector用于端口,这是不正确的.不要相信那些告诉你的人.

如果需要具有算术支持的位向量,请考虑从ieee.numeric_std签名/取消签名.(在VHDL 2008中,有一个标准包可以为std_logic_vector添加算术支持,但我认为这很邪恶.)

当您想要模拟合成网表时,合成最顶层可能只存在问题.该网表的端口类型可能与您的顶级RTL接口不匹配.但是,在实例化门级时,您可以通过在此时进行适当的转换来轻松解决这个问题.这是这种低级别问题的适当时机 - 它们不应该影响您的RTL建模风格.

  • Nitpick(我知道Jan知道这一点,但我会指出它的完整性):整数由标准保证为"不是32位" - 它们从 - ((2**31)-1)到+((2**31)-1).许多供应商提供完整的int32_t范围,但不保证:( (5认同)