Присвоение вектора переменной длины вектору размера * stati c в VHDL - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть 32-битный выход (rd_data), который должен объединять '0 с w-битовым сигналом (mux_out), но я не уверен, как объединить их.

signal mux_out : std_logic_vector(w-1 downto 0);
signal rd_data : std_logic_vector(31 downto 0);
signal rd : std_logic;

with rd select

       rd_data <= (OTHERS => '0') when '0',
                 **32-BIT CONCATENATION OF ZEROES AND MUX_OUT** when '1';

Как бы я это сделал ???? ш никогда не будет больше 32

1 Ответ

0 голосов
/ 23 апреля 2020

Без VHDL-2008:

   rd_data <= (OTHERS => '0') when '0',
             (rd_data'length-1 downto MUX_OUT'length => '0') &  MUX_OUT when '1',
             (others => 'X') when others ;  -- since rd is std_logic

Обратите внимание, что если MUX_OUT'length = rd_data'length, то "(rd_data'length-1 downto MUX_OUT'length => '0')" по-прежнему допустимо так как он возвращает массив NULL (значение = "").

С VHDL-2008:

use ieee.numeric_std_unsigned.all; -- in context clause
. . . 
   rd_data <= (OTHERS => '0') when '0',
            resize(MUX_OUT, rd_data'length) when '1',
             (others => 'X') when others ;  -- since rd is std_logic
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...