0

这看起来对吗?

Lookup_table(conv_integer(128 - Position));--位置是std_logic_vector(7 downto 0)

该函数的参考页面conv_integer没有说明是否可以在上述括号之间操作两个参数。但是,如果参数是整数,它会返回一个整数。有什么想法吗?

4

2 回答 2

2

你正在寻找to_integer方法。

您可以通过使用以下代码行之一将其转换为整数来对您的位置进行 int 数学运算:

to_integer(unsigned(Position))to_integer(signed(Position))取决于它是有符号还是无符号 8 位向量。

然后你就可以做到了Lookup_table(128 - to_integer(unsigned(Position)))

在从低阶(较少位)逻辑向量转换为整数之前,您应该始终执行特定的signed/强制转换。unsigned此外,如果您正在做int数学,那么在进行算术之前转换为整数是一个好习惯。

否则,VHDL 就像任何常规编程语言一样,它会在将方法的参数放入方法之前对其进行评估,因此在参数内部执行操作非常好。

于 2012-07-03T12:58:06.887 回答
0

对于 VHDL,我通常使用 1 of 2 方法在 std_logic_vector 和整数之间进行转换。

  1. 使用 std_logic_unsigned/std_logic_signed 库:对于这种方法,模拟器/综合工具会自动推断您的 std_logic_vector 为有符号或无符号。
  2. 使用 numeric_std 库:对于这个,我使用 unsigned/signed 将 std_logic_vector 转换为有符号或无符号。它允许更多的权力在 1 个模块内混合有符号和无符号操作。(尽管据我所知,如果您关心补偿位,则已签名和未签名几乎与操作没有区别)。

据我所知,我们有用于此转换的算术 (std_logic_arith) 库,但有人说它不是标准的并且与 numeric_std 冲突。您应该使用(例如,bit_length 位转换)切换到 numeric_std:

result<=std_logic_vector(to_unsigned(128-x,bit_length); -- For unsigned          
result<=std_logic_vector(to_signed(128-x,bit_length); -- For signed
于 2012-07-04T03:09:37.447 回答