¿Puede alguien decirme la diferencia entre el constructo If-Else y los constructos de declaración de caso de un proceso en VHDL en términos de cómo el código es inferido en el circuito RTL por la herramienta de síntesis?
La construcción if-elsif-else
infiere una red de enrutamiento de prioridad:
simular este circuito : esquema creado usando CircuitLab
Esto corresponde a
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;
La construcción case
, por otro lado, infiere un gran ol 'mux:
Esto corresponde a
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;
Obviamente, estos son diseños muy simplificados con una sola expresión de valor, lo que da como resultado una salida.
Considere el caso de múltiples declaraciones anidadas if-else y mezcla de casos con if-else dentro de un proceso.
Por lo anterior, puedes ver cómo se anidarían / mezclarían.
¿También cuándo usar qué construcción?
Dado que if-else
infiere prioridad, debe usarse cuando se pueda producir más de una condición de entrada. El uso de case
, por otro lado, es apropiado cuando las entradas se excluyen mutuamente.