2014-05-08 2 views
1

Как вы производите нулевое значение фиксированного сигнала?VHDL: Zero-Extend фиксированное значение сигнала

У меня есть следующий сигнал:

signal shamt: std_logic_vector(4 downto 0); 

Перед тем, как назначить его на другую переменную, которая имеет размер 31 Downto 0 У меня к нулю расширить shamt. У меня есть следующий код, но я не уверен, что это правильно.

muxSOut <= conv_std_logic_vector(unsigned(shamt),32) when (muxSSel = '0') else A; 

Я скептически относится к части conv_std_logic_vector (без знака (shamt), 32).

Будет ли распространяться шамт, который имеет размер 5 бит до 32 бит? Так что если shamt был 11011, то это всего лишь 27 0, а затем 11011? Если нет, то каков правильный путь к нулю, простирайте shamt?

ответ

5

Один (стандартный) способ заключается в использовании ieee.numeric_std и resize(). например .:

muxSOut <= std_logic_vector(resize(unsigned(shamt), 32)) ... 

Одним из преимуществ является то, что вы можете заменить 32 с muxSOut'length, а затем ваш код становится немного более гибким.

-1

Я бы, наверное, просто ожидать:

muxSOut <= x"000000" & "000" & shamt when muxSSel = '0' else A; 
Смежные вопросы