例如,我有一个长度为 10 的向量。如何以十六进制初始化它。(合成工具抱怨大小不匹配,因为它认为十六进制值是 4 的倍数)
signal v : std_logic_vector (9 downto 0) := x"11A";
非常感谢!泥工
例如,我有一个长度为 10 的向量。如何以十六进制初始化它。(合成工具抱怨大小不匹配,因为它认为十六进制值是 4 的倍数)
signal v : std_logic_vector (9 downto 0) := x"11A";
非常感谢!泥工
x"11A"
是“十六进制位字符串文字”。在 VHDL-2008 之前,这些必须是 4 位的倍数,因此您会看到问题。VHDL-2008 移除了这个限制,所以你现在可以编写10x"11A"
. 不过,我不知道 2008 年有多少工具支持。
一种可能的解决方法是将 4 位的倍数写入十六进制值,并将其余部分添加为二进制,例如:
signal v: std_logic_vector(9 downto 0) := "01" & X"1A";
据我所知,没有“直接”的方式来实现你正在寻找的东西。您可以使用以下有效的 VHDL。
constant init : std_logic_vector (11 downto 0) := X"11A";
signal v : std_logic_vector (9 downto 0) := init(9 downto 0);
Another variety of ugly hack:
constant init : natural := 16#11A#;
signal v : std_logic_vector(9 downto 0) := std_logic_vector(to_unsigned(init, 10));
Having written that, I think it's the worst of the options offered, but I leave it here as a possibility!