VHDL以十六进制初始化向量(长度不是4的倍数)

时间:2013-04-25 21:42:38

标签: initialization vhdl stdvector

例如,我有一个长度为10的向量。 如何以十六进制初始化它。 (合成工具抱怨大小不匹配,因为它认为十六进制值是4的倍数)

signal v : std_logic_vector (9 downto 0)    := x"11A";

非常感谢! 泥工

4 个答案:

答案 0 :(得分:10)

x"11A"是“十六进制位字符串文字”。在VHDL-2008之前,这些必须是4位的倍数,因此您遇到了问题。 VHDL-2008删除了此限制,因此您现在可以编写10x"11A"。不过,我不知道2008年有多少工具支持。

答案 1 :(得分:7)

一种可能的解决方法是将4位的倍数写为十六进制值,并将其余部分加到二进制中,例如:

signal v: std_logic_vector(9 downto 0) := "01" & X"1A";

答案 2 :(得分:4)

据我所知,没有“直接”方式来实现您的目标。您可以使用以下有效的VHDL。

constant init : std_logic_vector (11 downto 0) := X"11A";
signal v : std_logic_vector (9 downto 0) := init(9 downto 0);

答案 3 :(得分:1)

另一种丑陋的黑客:

constant init : natural := 16#11A#;
signal v : std_logic_vector(9 downto 0) := std_logic_vector(to_unsigned(init, 10));

写完之后,我认为这是最糟糕的选择,但我把它留在这里作为一种可能性!