Операторы and
и or
возвращают std_logi c, когда им передается операнд std_logic
, а не логическое значение (как я думал в моем удаленном ответе). when
- else
требует, чтобы условия были логическими.
Итак, как указано в комментарии, вы можете сделать Y <= '1' when ((A AND B) OR (A AND C) OR (B AND C)) = '1' else '0';
, чтобы преобразовать выражение, возвращающее std_logic
, в логическое значение, чтобы оно могло использоваться в структуре «когда-либо».
Однако эта структура является избыточной. Вы можете просто go с: Y <= (A AND B) OR (A AND C) OR (B AND C);
. Условие возвращает std_logic
, так что вы можете назначить его напрямую.
Или дополнительно с VHDL 2008 "??" operator :
VHDL-2008 вводит новый оператор ??. Он называется оператором условия и преобразует выражение STD_LOGI C в БУЛЕВОЕ: «1» и «H» считаются ИСТИНА, а все остальное ЛОЖЬ. (Он также преобразует бит в BOOLEAN.)
?? оператор применяется автоматически в структуре when-else, поэтому при использовании VHDL 2008 ваш код должен работать.