Для VHDL-87/93/2002 вы можете использовать функцию resize
из пакета numeric_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
определена только для типов signed
и unsigned
.
Если вы хотите, чтобы короткая битовая строка помещалась в 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);