将十六进制数转换为std_logic_vector

时间:2014-11-16 23:19:37

标签: vhdl

我有一个关于将十六进制数转换为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个可见标识符符合此处

我还在网上搜索了其他解决方案,但我无法解决问题。 有谁有想法如何修复代码?

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)