【发布时间】:2016-12-11 04:44:49
【问题描述】:
我是一个 VHDL 菜鸟,试图创建一些常量并为它们分配十六进制数字,但是我不断收到错误。
我希望常量 FOO_CONST 等于 0x38
像这样……
constant FOO_CONST : integer := x"38";
错误:
Type integer does not match with a string literal
我尝试了一些变体,但都没有成功。
如果有任何帮助,我将不胜感激。谢谢!
-迈克
【问题讨论】:
-
整数没有位。十六进制值是一个位字符串文字,其字符串值等效于可分配给一维数组。整数需要一个抽象字面量,即
16#38#形式的基于字面量。其中 16 是基数,“#”是分隔符。参见 IEEE Std 1076-2008 15. Lexical elements, 15.5.3 Based literals。您还可以use ieee.std_logic_1164.all; use ieee.numeric_std.all;和constant FOO_CONST : integer := to_integer(unsigned'(x"38"));将位字符串文字转换为整数,并使用所需的限定表达式指定符号扩展。 -
你可能想要的是:常量 FOO_CONST : unsigned(7 downto 0) := x"38";在 VHDL 中,人们倾向于使用 unsigned 或 std_logic_vector 比整数更频繁地进行综合。
-
您也可以使用
#numeric literal。如果你使用 16 作为前缀,那么它将接受一个 16 进制数