Как использовать условные операторы в 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
- Как использовать шлифовальный станок