Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> VHDL

Освоение условной логики в VHDL: конструкция If-Then-Elsif-Else

В предыдущем уроке мы использовали условное выражение с оператором Wait Until для запуска процесса только при совпадении двух счетчиков. Но что, если программа должна выполнять разные действия в зависимости от изменяющихся входных данных?

Конструкция If-Then-Elsif-Else позволяет ветвить логику. В зависимости от значения переменной или результата выражения программа может идти по разным путям.

Эта статья входит в серию базовых уроков VHDL.

Базовый синтаксис

Каноническая форма:

if <condition> then elsif <condition> then else end if;

Клаузы elsif и else опциональны, elsif может встречаться многократно. Условие <condition> может быть булевским литералом или выражением, вычисляющимся в true или false.

Пример: MyCounter < 10 истинно, когда MyCounter меньше десяти.

Операторы отношения

=равно
/=не равно
<меньше
<=меньше или равно
>больше
>=больше или равно

Логические операторы

not aистинно, если a ложно
a and bистинно, если a и b истинны
a or bистинно, если a или b истинны
a nand bистинно, если a или b ложно
a nor bистинно, если a и b ложны
a xor bистинно, если ровно одно из a или b истинно
a xnor bистинно, если a и b равны

Упражнение

Ниже приведен полный пример VHDL, демонстрирующий работу конструкции If-Then-Elsif-Else.

Итоговый код:

entity T08_IfTb is end entity; architecture sim of T08_IfTb is signal CountUp : integer := 0; signal CountDown : integer := 10; begin process is begin CountUp <= CountUp + 1; CountDown <= CountDown - 1; wait for 10 ns; end process; process is begin if CountUp > CountDown then report "CountUp is larger"; elsif CountUp < CountDown then report "CountDown is larger"; else report "They are equal"; end if; wait on CountUp, CountDown; end process; end architecture; 

Вывод консоли симулятора ModelSim:

VSIM 2> run # ** Note: CountDown is larger # Time: 0 ns Iteration: 0 Instance: /t08_iftb # ** Note: CountDown is larger # Time: 0 ns Iteration: 1 Instance: /t08_iftb # ** Note: CountDown is larger # Time: 10 ns Iteration: 1 Instance: /t08_iftb # ** Note: CountDown is larger # Time: 20 ns Iteration: 1 Instance: /t08_iftb # ** Note: CountDown is larger # Time: 30 ns Iteration: 1 Instance: /t08_iftb # ** Note: They are equal # Time: 40 ns Iteration: 1 Instance: /t08_iftb # ** Note: Countup is larger # Time: 50 ns Iteration: 1 Instance: /t08_iftb # ** Note: Countup is larger # Time: 60 ns Iteration: 1 Instance: /t08_iftb ...

Анализ

Мы инициализировали CountDown значением 10, а CountUp — 0. Оба счетчика обновляются одновременно каждые 10 нс в первом процессе. Второй процесс ждет изменений этих сигналов, поэтому он срабатывает при каждом их изменении. Блок If-Then-Elsif-Else выбирает одну из трех ветвей: CountUp > CountDown, CountUp < CountDown или CountUp = CountDown. Хотя явный else не обязателен, его включение считается лучшей практикой, гарантирующей обработку всех граничных случаев.

Трассировка консоли подтверждает, что второй процесс оценивает условие после каждого обновления, выводя соответствующее сообщение.

Освоение условной логики в VHDL: конструкция If-Then-Elsif-Else

Вывод

Продолжить к следующему уроку »

VHDL

  1. Как молибден формирует современную промышленность: применение, преимущества и динамика поставок
  2. Создание списков строк в VHDL: лучшие практики и пример
  3. Корректное завершение симуляции VHDL-тестбенча
  4. Реализация PWM-контроллера в VHDL: проектирование, симуляция и FPGA-демо
  5. Генерация случайных чисел в VHDL: от Uniform к OSVVM
  6. Использование внутрипроцессных процедур для более чистого проектирования FSM на VHDL
  7. Использование нечистых функций в VHDL: повышение читаемости и поддерживаемости FSM
  8. Освоение функций VHDL: практическое руководство по эффективному дизайну
  9. Проектирование конечного автомата в VHDL: практический пример светофора
  10. Освоение техник шлифовального станка для режущих инструментов: практическое руководство