Как отобразить один бит сигнала на несколько бит вектора?

Я попытался отобразить немного сигнала (здесь 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,

Другие вопросы по тегам