1

我有一个signal dataIn : std_logic_vector ( 15 downto 0);

例如,我想提供一个小于 16 位的输入dataIn <= x"000a",这些位占据最高有效位,其余位为零。在verilog中你可以很容易地做到这一点,但在VHDL中你会得到错误:

“字符串长度与定义的匿名整数子类型不匹配...”。

我知道如果您使用16x"bit_string"可以解决问题,但这仅适用于 VHDL-2008,而 ghdl 尚不支持 VHDL-2008。

IEEE Std 1076-2002 有什么方法吗?

4

1 回答 1

0

对于 VHDL-87/93/2002,您可以使用resizenumeric_std 包中的函数。

library ieee;
use ieee.numeric_std.all;
...
constant FOO : std_logic_vector(2 downto 0) := "010";
signal dataIn : std_logic_vector(15 downto 0) := std_logic_vector(resize(unsigned(FOO), 16));

请注意,该resize函数仅针对类型signedunsigned.
如果您希望将短位字符串放入 MSB,您可能需要使用该'reverse_order属性。

通常你会发现定义一个封装更复杂初始化的专用函数更容易。

constant FOO : std_logic_vector(2 downto 0) := "010";

function init_dataIn (bar : std_logic_vector; len : integer) return std_logic_vector is
begin
  return bar & (len - bar'length - 1 downto 0 => '0');
end function init_dataIn;

signal dataIn : std_logic_vector(15 downto 0) := init_dataIn(FOO, 16);
于 2019-05-19T18:17:23.773 回答