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

Как использовать оператор Case-When в VHDL

Оператор Case-When заставит программу выбрать один из нескольких различных путей, в зависимости от значения сигнала, переменной или выражения. Это более элегантная альтернатива оператору If-Then-Elsif-Else с несколькими операторами Elsif.

В других языках программирования есть похожие конструкции, использующие такие ключевые слова, как switch. , регистр или выбрать . Среди прочего операторы Case-When обычно используются для реализации мультиплексоров в VHDL. Продолжайте читать или посмотрите видео, чтобы узнать, как это сделать!

Эта запись в блоге является частью серии учебных пособий по основам VHDL.

Основной синтаксис оператора Case-When:
case <expression> is
    when <choice> =>
        code for this branch
    when <choice> =>
        code for this branch
    ...
end case;

<expression> обычно является переменной или сигналом. Оператор Case может содержать несколько when вариантов, но будет выбран только один вариант.

<choice> может быть уникальным значением, например "11" :
when "11" =>

Или это может быть диапазон, например 5 to 10. :
when 5 to 10 =>

Он может содержать несколько значений, например 1|3|5. :
when 1|3|5 =>

И самое главное, others выбор. Он выбирается всякий раз, когда не совпал ни один другой вариант:
when others =>

others выбор эквивалентен Else ветвь в операторе If-Then-Elsif-Else.

Упражнение

В этом видеоуроке мы узнаем, как создать мультиплексор, используя оператор Case-When в VHDL:

Окончательный код, который мы создали в этом руководстве:

05

Окно сигнала в ModelSim после того, как мы нажали кнопку «Выполнить» и увеличили временную шкалу:

Вывод в консоль симулятора, когда мы нажали кнопку запуска в ModelSim:

15 

Анализ

Во-первых, мы создали процесс, используя If-Then-Elsif-Else, который будет пересылать один из сигналов Sig1 , Sig2 , Sig3 или Sig4 , на основе значения сигнала выбора Sel .

Затем мы создали процесс, который делал то же самое, используя оператор Case-When. Из формы волны видно, что выходные сигналы двух процессов, Output1 и Output2 , вести себя точно так же.

В нашем примере Sel signal имеет только четыре допустимых значения. Но если бы было больше возможностей, мы легко могли бы увидеть, что оператор Case-When может помочь сделать код более читабельным. Это предпочтительный способ создания такого компонента для большинства разработчиков VHDL.

Понимание мультиплексора было бонусом этого упражнения. Мультиплексоры, или сокращенно MUX, являются центральными компонентами цифрового дизайна. Это просто переключатель, который выбирает один из нескольких входов и перенаправляет его на выход.

Это иллюстрация того, как наш мультиплексор перенаправляет выбранный входной сигнал:

Мы использовали others предложение для перехвата всех значений Sel которые не были единицами или нулями. Как мы узнали из руководства по std_logic, эти сигналы могут иметь ряд значений, отличных от '0'. или '1' . Хорошей практикой проектирования является обработка этих значений путем вывода 'X'. . Это указывает на неизвестное значение этого сигнала, и оно также будет отображаться в нижестоящей логике.

Из формы сигнала видно, что когда Sel сигнал стал красным, Output1 и Output2 также изменен на "XX" . Это when others => в действии.

Кроме того, вывод консоли в ModelSim показывает предупреждение из-за Sel сигнал установлен на "UU" . Сообщения «** Предупреждение:NUMERIC_STD.»=»:обнаружено метазначение, возвращается FALSE» во время моделирования 50 нс, когда сигналы становятся красными.

Вывод

  • Case-When можно использовать вместо нескольких операторов If-Then-Elsif
  • when others => можно использовать для реализации выбора по умолчанию
  • Мультиплексоры желательно создавать с помощью операторов Case-When

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


VHDL

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