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

Как использовать условные операторы в 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 Пункт распространяется на все преднамеренные и непредвиденные случаи.

Как видно из распечатки, второй процесс берет одну из трех ветвей при каждом изменении счетчиков.

Вывод

Перейти к следующему руководству »


VHDL

  1. Как мы используем молибден?
  2. Как создать список строк в VHDL
  3. Как остановить симуляцию в тестовом стенде VHDL
  4. Как создать ШИМ-контроллер на VHDL
  5. Как генерировать случайные числа в VHDL
  6. Как использовать процедуру в процессе в VHDL
  7. Как использовать нечистую функцию в VHDL
  8. Как использовать функцию в VHDL
  9. Как создать конечный автомат на VHDL
  10. Как использовать шлифовальный станок