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

nig*_*ong 7 initialization vhdl stdvector

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

signal v : std_logic_vector (9 downto 0)    := x"11A";
Run Code Online (Sandbox Code Playgroud)

非常感谢!泥工

EML*_*EML 10

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

  • 我需要阅读有关VHDL 2008的更多信息.似乎充满了有用的功能:) (2认同)
  • 在Doulos网站上有一个很好的快速摘要 - http://www.doulos.com/knowhow/vhdl_designers_guide/vhdl_2008/ (2认同)

bal*_*HDL 8

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

signal v: std_logic_vector(9 downto 0) := "01" & X"1A";
Run Code Online (Sandbox Code Playgroud)


sim*_*mon 5

据我所知,没有“直接”的方法来实现你所寻求的。您可以使用以下有效的 VHDL。

constant init : std_logic_vector (11 downto 0) := X"11A";
signal v : std_logic_vector (9 downto 0) := init(9 downto 0);
Run Code Online (Sandbox Code Playgroud)

  • 或者更方便地,`:= init(v'range);` (2认同)