Как отобразить один бит сигнала на несколько бит вектора?
Я попытался отобразить немного сигнала (здесь addS
типа подписано (от 32 до 0) в структурном описании, например:
add2 : entity work.adderSigned(behavioral)
generic map(N => 64)
port map(a(63 downto 32) => mulssS, --concat
a(31 downto 0) => signed(muluuS), --concat
-- b(63 downto 48) => addS(32 downto 32),
b(63 downto 48) => (others => addS(32)), --the critical line
b(47 downto 16) => addS(31 downto 0),
b(15 downto 0) => (others => '0'),
std_logic_vector(y) => y);
но компилятор жалуется, что это не статическое отображение. Как я могу выполнить это отображение?
1 ответ
В ВХДЛ-2008 линия b(63 downto 48) => (others => addS(32)),
допустимо, поэтому включите VHDL-2008, если позволяет инструмент.
Для VHDL-2002, если выражение используется в качестве фактического (правая сторона в карте портов), то оно должно быть глобально статическим выражением (VHDL-2002 1.1.1.2 Ports), но (others => addS(32))
нет, так как addS(32)
не является статичным Обходной путь может быть:
signal b_63_dt_48 : std_logic_vector(63 downto 48);
...
b(63 downto 48) => b_63_dt_48,
...
b_63_dt_48 <= (others => addS(32));
Btw. Похоже, что-то странное в линии std_logic_vector(y) => y
,