Операторы
And
, nand
, or
и nor
в VHDL в некоторых случаях являются операторами короткого замыкания.Поведение зависит от типов операндов.
Вы используете тип std_logic
, которого нет в списке:
9.2 Операторы - Общие
Как правило, операнды в выражении оцениваются до того, как они будут связаны с операторами.Однако для определенных операций правый операнд вычисляется тогда и только тогда, когда левый операнд имеет определенное значение.Эти операции называются операциями короткого замыкания.Бинарные логические операции и, или, nand, и не определенные для операндов типов BIT и BOOLEAN являются операциями короткого замыкания;кроме того, это единственные операции короткого замыкания.
[...]
ПРИМЕЧАНИЕ 2. Пользовательский оператор, который имеет то же обозначение, что и оператор короткого замыкания (т. е.пользовательский оператор, который перегружает оператора короткого замыкания) не вызывается при коротком замыкании.В частности, вызовы определяемого пользователем оператора всегда оценивают оба аргумента перед выполнением функции.
В случае оператора or
, если первый операнд имеет значение true, второй операнд будетне будет оцениваться.
В случае оператора and
, если первый операнд имеет значение false, второй операнд не будет оцениваться.
Я думаю, что std_logic
не указан в списке,ошибка, которая была допущена при включении IEEE Std.1164 в IEEE Std.1076 для VHDL-2008.