Чи може хто-небудь сказати мені різницю між конструкцією 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
іншого боку, ця конструкція створює великий ol 'mux:
Це відповідає
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
інструкції, що набагато ефективніше. Можливо, тут застосовується аналогічна оптимізація.