Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЛИС_Ответы_к_экзамену_8110.doc
Скачиваний:
16
Добавлен:
24.04.2019
Размер:
2.35 Mб
Скачать

Вопрос 28 - Условный оператор If Generate. Назначение, синтаксис и применение оператора.

  1. В отличие от операторов If Then, которые могут оценивать лишь значения булевских выражений, операторы If Generate могут оценивать значения наборов арифметических выражений. Основное различие между операторами If Then и If Generate состоит в том, что в первом случае значение булевского выражения оценивается аппаратным способом (в кремнии), а во втором случае значение набора арифметических выражений оценивается на этапе компиляции.

Оператор If Generate содержит список операторов, активизирующийся в случае положительного результата оценки арифметического выражения.

IF DEVICE_FAMILY == "FLEX8000" GENERATE

output_b = input_a;

-- Утверждение активизируется при -- выполнении условия

ASSERT REPORT “Компиляция для семейства FLEX8000” SEVERITY INFO;

ELSE GENERATE

output_b = LCELL(input_a);

-- Утверждение активизируется если -- текущее семейство не FLEX1 -- или FLEX8000. Severity по умолчанию ERROR

ASSERT (DEVICE_FAMILY == "FLEX10K“)

REPORT “Компиляция для семейства %", DEVICE_FAMILY;

END GENERATE;

Оператор If Generate имеет следующие характеристики:

  • Между ключевыми словами If Generate заключается арифметическое выражение, значение которого подвергается оценке. За ключевым словом GENERATE следует список операторов, каждый из которых заканчивается символом (;). Операторы активизируются в том случае, если арифметическое выражение принимает истинное значение.

  • За ключевыми словами ELSE GENERATE следует один или более операторов, которые активизируются в случае, если арифметическое выражение принимает ложное значение.

  • Оператор If Generate заканчивается ключевыми словами END GENERATE, за которыми следует символ (;).

  • Оператор If Generate может использоваться в разделе Logic и в разделе Variable.

  1. Оператор If Generate особенно часто используется с операторами For Generate, что позволяет различным образом обрабатывать особые ситуации, например, младший значащий бит в многокаскадном умножителе. Этот оператор может также использоваться для тестирования значений параметров, как показано в последнем примере.

Вопрос 29 - Оператор выбора Case. Назначение, синтаксис и применение оператора.

Оператор Case определяет список альтернативных вариантов, которые могут быть активизированы в зависимости от значения переменной, группы или выражения, следующего за ключевым словом CASE.

Следующий пример демонстрирует использование оператора Case:

SUBDESIGN decoder

( higt, middle, low : INPUT;

level[1..0] : OUTPUT;

)

BEGIN

CASE (higt, middle, low) IS

WHEN B”1XX” => level[ ] = 3;

WHEN B”01X” => level[ ] = 2;

WHEN B”001” => level[ ] = 1;

WHEN OTHERS => level[ ] = 0;

END CASE;

END;

Оператор Case имеет следующие характеристики:

  • Булевское выражение, группа или конечный автомат располагаются между ключевыми словами CASE и IS (в примере, показанном выше, это f[ ].q).

  • Оператор Case завершается ключевыми словами END CASE за которыми следует символ (;).

  • Телом оператора Case является список из одного или более неповторяющихся альтернативных вариантов, следующих за ключевым словом WHEN. Каждому альтернативному варианту предшествует ключевое слово WHEN.

  • Каждый альтернативный вариант представляет собой одно или более отделенных друг от друга запятыми значений констант, за которыми следует символ (=>).

  • Если значение булевского выражения, стоящего за ключевым словом CASE, соответствует какому - либо альтернативному варианту, то все операторы, следующие за соответствующим символом (=>) активизируются. В примере, приведенном выше, если f[ ].q равно h”01”, то активизируется булевское выражение count[ ].d = count[ ].q + 1.

  • Если значение булевского выражения, стоящего за ключевым словом CASE не равно ни одному из альтернативных вариантов, то активизируется альтернативный вариант, стоящий за ключевыми словами WHEN OTHERS. В примере, показанном выше, если значение f[ ].q не равно H”00”, H’01” или H”CF”, то активизируется выражение f[ ].d = f[].q.

  • Оператор Defaults определяет значение по умолчанию для тех случаев, когда ключевые слова WHEN OTHERS не используются.

  • Если оператор Case используется для определения переходов конечного автомата, то ключевые слова WHEN OTHERS не могут использоваться для выхода из недопустимых состояний. Если состояния конечного автомата определяются n -мерным кодом и при этом автомат имеет 2^n состояний, то использование ключевых слов WHEN OTHERS является допустимым.

  • Каждый альтернативный вариант должен заканчиваться символом (;).