Может кто-нибудь сказать мне разницу между конструкциями If-Else и конструкциями Case для процесса в VHDL с точки зрения того, как инструмент выводит код в схему RTL с помощью инструмента синтеза?
if-elsif-else
Конструкция выводит приоритет сети маршрутизации:
смоделировать эту схему - схема, созданная с использованием CircuitLab
Это соответствует
if bool_expr_1 then
sig <= val_expr_1;
elsif bool_expr_2 then
sig <= val_expr_2;
elsif bool_expr_3 then
sig <= val_expr_3;
else
sig <= val_expr_4;
end if;
case
Конструкт, с другой стороны, выводит большой старина Мультиплексор:
Это соответствует
case case_expr is
when c0 =>
sig <= val_expr_0;
when c1 =>
sig <= val_expr_1;
when c2 =>
sig <= val_expr_2;
...
when others =>
sig <= val_expr_N;
end case;
Очевидно, что это очень упрощенные конструкции с одним выражением значения, что приводит к одному выводу.
Рассмотрим случай множественного вложенного if-else и смешивания операторов case с конструкцией if-else внутри процесса.
Согласно вышесказанному, вы можете видеть, как они будут вкладываться / смешиваться.
Также, когда использовать какую конструкцию?
Поскольку if-else
выводит приоритет, его следует использовать, когда может возникнуть более одного условия ввода. Использование case
, с другой стороны, целесообразно, когда входные данные являются взаимоисключающими.
dec
/jz
инструкции, что намного эффективнее. Возможно, аналогичная оптимизация применяется здесь.