Я хочу понять, как различные конструкции в коде VHDL синтезируются в RTL.
- Может ли кто-нибудь сказать мне разницу между конструкциями If-Else и конструкциями Case для процесса в VHDL с точки зрения того, как инструмент выводит код в схему RTL?
- Рассмотрим случай множественного вложенного if-else и смешивания операторов case с конструкцией if-else внутри процесса.
- Также, когда использовать какую конструкцию?
PS: я видел связанный вопрос «Несколько операторов if в процессе в VHDL», но это не отвечает на мой вопрос в любом случае.
vhdl
code-design
rtl
nurabha
источник
источник
dec
/jz
инструкции, что намного эффективнее. Возможно, аналогичная оптимизация применяется здесь.Ответы:
if-elsif-else
Конструкция выводит приоритет сети маршрутизации:смоделировать эту схему - схема, созданная с использованием CircuitLab
Это соответствует
case
Конструкт, с другой стороны, выводит большой старина Мультиплексор:Это соответствует
Очевидно, что это очень упрощенные конструкции с одним выражением значения, что приводит к одному выводу.
Согласно вышесказанному, вы можете видеть, как они будут вкладываться / смешиваться.
Поскольку
if-else
выводит приоритет, его следует использовать, когда может возникнуть более одного условия ввода. Использованиеcase
, с другой стороны, целесообразно, когда входные данные являются взаимоисключающими.источник
if-else
конструкции, однако, там, где возникает эта цепь. Первое условие должно быть не выполнено, чтобы проверить второе условие. Это не относится кcase
конструкции, и именно поэтомуif-else
утверждение не может быть синтезировано как один большой мультиплексор.case
оператор может также генерировать последовательную логику. Я нашел "Real World VHDL" , серию слайдов лекций из Университета Глазго, которые могут быть полезны для вас.В этом старом сообщении в блоге автор написал и синтезировал две функционально эквивалентные версии кода VHDL. Один использует if-else, другой использует case. Результат:
И его вывод:
Есть также десятки постов на эту тему по переполнению стека для всех мыслимых языков. Вывод, как правило, тот же, что нет различий в производительности. Иногда, если есть большое количество случаев, компилятор может быть достаточно умен, чтобы создать справочную таблицу, которая даст немного лучшую производительность.
Синтезатор VHDL может сделать что-то подобное. Но вам все равно понадобится большое количество падежей, и в этом случае (каламбур) вы, возможно, захотите использовать инструкцию case в любом случае, так как она обеспечивает лучшую читаемость при большом количестве опций.
источник