Как использовать условные операторы в VHDL:If-Then-Elsif-Else
В предыдущем уроке мы использовали условное выражение с оператором «Ждать до». Выражение гарантировало, что процесс будет запускаться только тогда, когда два сигнала счетчика равны. Но что, если мы хотим, чтобы программа в процессе выполняла разные действия на основе разных входных данных?
Операторы If-Then-Elsif-Else можно использовать для создания ветвей в нашей программе. В зависимости от значения переменной или результата выражения программа может идти разными путями.
Эта запись в блоге является частью серии учебных пособий по основам VHDL.
Основной синтаксис:
if <condition> then
elsif <condition> then
else
end if;
elsif
и else
являются необязательными, а elsif
может использоваться несколько раз. <condition>
может быть логическим true
или false
, или это может быть выражение, которое оценивается как true
или false
.
Пример выражения true
если MyCounter
меньше 10:
MyCounter < 10
Реляционные операторы:
= | равно |
/= | не равно |
< | меньше |
<= | меньше или равно |
> | больше, чем |
>= | больше или равно |
Логические операторы:
нет а | true, если а неверно |
а и б | true, если а и б верны |
а или б | true, если а или б верны |
а нанд б | true, если а или б неверно |
а ни б | true, если а и б являются ложными |
а исключающее или б | true, если ровно один из a или б верны |
а xnor б | true, если а и б равны |
Упражнение
В этом видеоуроке мы узнаем, как использовать операторы If-Then-Elsif-Else в VHDL:
Окончательный код, который мы создали в этом руководстве:
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 нс. Когда это происходит, запускается второй процесс, потому что программа всегда будет ожидать в точке wait on CountUp, CountDown;
. линия. Программа всегда будет ждать там, потому что операторы If-Then-Elsif-Else и отчеты не требуют времени моделирования.
Оператор If-Then-Elsif-Else заставит программу выбрать одну из трех созданных нами ветвей. Две первые ветви охватывают случаи, когда два счетчика имеют разные значения. Мы могли бы убрать единственный else
, и использовал elsif CountUp = CountDown then
что имело бы такой же результат. Но хорошей практикой проектирования является охват всех ветвей, и else
Пункт распространяется на все преднамеренные и непредвиденные случаи.
Как видно из распечатки, второй процесс берет одну из трех ветвей при каждом изменении счетчиков.
Вывод
- If-Then можно использовать отдельно или в сочетании с Elsif и Else.
- Выражения могут содержать реляционные и логические сравнения и математические вычисления.
Перейти к следующему руководству »
VHDL
- Как мы используем молибден?
- Как создать список строк в VHDL
- Как остановить симуляцию в тестовом стенде VHDL
- Как создать ШИМ-контроллер на VHDL
- Как генерировать случайные числа в VHDL
- Как использовать процедуру в процессе в VHDL
- Как использовать нечистую функцию в VHDL
- Как использовать функцию в VHDL
- Как создать конечный автомат на VHDL
- Как использовать шлифовальный станок