Без 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