我有一个关于将十六进制数转换为std_logic_vector的问题。我需要十六进制数字的位表示,因为它们是模拟键盘发送到我的电路板的数据(稍后)。现在我正处于开发阶段: 以下是在ISE中不起作用的代码示例:
Subtype ScanCode is std_logic_vector(39 downto 0);
variable binaryRep : ScanCode;
binaryRep := std_logic_vector(16#70F070#);
最后一行的转换是问题出现的地方编译器告诉我无法将类型universal_integer转换为类型std_logic_vector
我也尝试过该代码,但又出现了另一个错误,我不明白
binayRep <= to_stdlogicvector(x"FC");
这是我收到的错误消息:
靠近to_stdlogicvector; 2个可见标识符符合此处
我还在网上搜索了其他解决方案,但我无法解决问题。 有谁有想法如何修复代码?
答案 0 :(得分:2)
16#70F070#
是一个数字文字并且不是直接适用的,它需要一个转换例程。您没有与签名匹配的适当转换例程[整数返回std_logic_vector]。
此
binaryRep <= to_stdlogicvector(x"FC");
无论如何都不会工作,因为x"FC"
的等效位字符串的长度为8,而binaryRep的长度为40,并且您没有指定要生成的长度std_logic_vector。 (并且x&#34; FC&#34;已经被转换为等效的位图)。
我发现的唯一to_stdlogicvector函数声明在包fixed_generic_pkg中并且不合适。
你可以:binaryRep <= x"00000000FC";
匹配位串长度。
或者通过在use子句中包含numeric_std包:
binaryRep <= std_logic_vector(to_unsigned(16#70F070#,binaryRep'length));
将自然(整数子类型)转换为unsigned,然后将其转换为std_logic_vector,其长度为binaryRep。
或使用Mentor的std_logic_arith包
binaryRep <= to_std_logicvector(16#70F070#,binaryRep'length);
它采用整数参数和自然长度,并将结果转换为std_logic_vector。
或使用Synopsys的std_logic_arith包
binaryRep <= conv_std_logic_vector(16#70F070#,binaryRep'length);
其中两个参数都是整数类型。
(还有更多方法,取决于VHDL-2008支持)。
答案 1 :(得分:1)
根据: https://www.altera.com/support/support-resources/design-examples/design-software/vhdl/v_hex.html
spigot.jar
工作对我来说:)