проверка следующего условия в операторе if, когда все условие будет истинным - PullRequest
0 голосов
/ 26 октября 2018

Определяет ли стандарт языка VHDL поведение условий проверки в операторе if в следующей ситуации:

constant one: std_logic: = '1'; -- always '1'
signal vector: std_logic_vector (2 downto 0);

(...)
if (one or vector(3) ) begin

(...)

в таком случае должна быть ошибка компиляции / разработки / выполнения (вне диапазона) или если условие должно быть всегда истинным (поэтому нет необходимости проверять значение вектора (3)?

Ответы [ 2 ]

0 голосов
/ 28 октября 2018
Операторы

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.

0 голосов
/ 27 октября 2018

У вас будет ошибка в процессе разработки. Но обычно, когда вы пишете код VHDL, вам не нужно использовать этот вид трюков.

Вы пытаетесь использовать этот код для решения проблемы зачатия? Например, если вы хотите использовать vector (3) только с вектором больше 3, то вы можете использовать оператор if ... generate или if ... then для этого.

...