Как использовать оператор 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
- Оператор процедуры — пример VHDL
- Как мы используем молибден?
- Как создать список строк в VHDL
- Как остановить симуляцию в тестовом стенде VHDL
- Как создать ШИМ-контроллер на VHDL
- Как генерировать случайные числа в VHDL
- Как использовать процедуру в процессе в VHDL
- Как использовать нечистую функцию в VHDL
- Как использовать функцию в VHDL
- Как использовать шлифовальный станок