2015-04-05 2 views
1

Я учащийся, изучающий VHDL, и пример кода из моего учебника показывает строки, похожие на следующие в нескольких местах;Линия «когда другие» в заявлении дела VHDL?

when "000" => tmp_result <= a and b; 
when "001" => tmp_result <= a or b; 
... 
when others => tmp_result <= (others => '0'); 

Я считаю, синтаксис VHDL очень неинтуитивными в целом, но я действительно не «получить» эту линию на всех.

Я очень смущен, почему выше линии не просто:

when others => tmp_result <= '0' 

Почему это так?

Я пробовал Google, но не смог найти объяснения.

ответ

2

STD_LOGIC_VECTOR имеет фиксированный размер. Итак, когда вы присваиваете значение к нему, вместо определения каждого бита в явном виде, вы можете просто использовать

(others => '0') 

для обозначения вы хотите оставшиеся биты быть установлены в 0. Поскольку переменная имеет фиксированный размер, ваш компилятор будет знать, сколько бит нужно установить. Вы можете смешать это с кучей других утверждений, например.

tmp_result <= (1=>'1', OTHERS => '0'); 

Обстоятельством, где она может пригодиться это:

ENTITY test IS 
    GENERIC (n : INTEGER := 7); 
    PORT (a : OUT STD_LOGIC_VECTOR (n DOWNTO 0) 
     ); 
END test; 

Вы видите, мы, возможно, придется изменить размер каждый раз, и именно поэтому мы определяем generic переменную. Использование (others => '0'), чтобы установить его на 0, избавит нас от необходимости менять всю программу заново.

2

Это потому, что tmp_result определяется как std_logic_vector (вместо того, чтобы просто std_logic).

tmp_result <= '0';    -- tmp_result is std_logic (single-quotes) 
tmp_result <= "0000000";  -- tmp_result is std_logic_vector (double quotes) 
tmp_result <= (others => '0'); -- same as previous line, but does not need to know length of tmp_result 

При назначении всех бит std_logic_vector к тому же значению ('0', в данном случае), это обычная практика, чтобы использовать синтаксис (others => '0'), который в основном перевод «дать мне STD_LOGIC_VECTOR то же самое длиной tmp_result, заполненной «0». Это лучше, потому что строка остается в силе, когда изменяется длина tmp_result, например, если ее длина зависит от общего.

Смежные вопросы