这看起来对吗?
Lookup_table(conv_integer(128 - Position));
--位置是std_logic_vector(7 downto 0)
该函数的参考页面conv_integer
没有说明是否可以在上述括号之间操作两个参数。但是,如果参数是整数,它会返回一个整数。有什么想法吗?
这看起来对吗?
Lookup_table(conv_integer(128 - Position));
--位置是std_logic_vector(7 downto 0)
该函数的参考页面conv_integer
没有说明是否可以在上述括号之间操作两个参数。但是,如果参数是整数,它会返回一个整数。有什么想法吗?
你正在寻找to_integer
方法。
您可以通过使用以下代码行之一将其转换为整数来对您的位置进行 int 数学运算:
to_integer(unsigned(Position))
或to_integer(signed(Position))
取决于它是有符号还是无符号 8 位向量。
然后你就可以做到了Lookup_table(128 - to_integer(unsigned(Position)))
。
在从低阶(较少位)逻辑向量转换为整数之前,您应该始终执行特定的signed
/强制转换。unsigned
此外,如果您正在做int
数学,那么在进行算术之前转换为整数是一个好习惯。
否则,VHDL 就像任何常规编程语言一样,它会在将方法的参数放入方法之前对其进行评估,因此在参数内部执行操作非常好。
对于 VHDL,我通常使用 1 of 2 方法在 std_logic_vector 和整数之间进行转换。
据我所知,我们有用于此转换的算术 (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