¿Alguien puede decirme la diferencia entre la construcción If-Else y las construcciones de declaración de caso de un proceso en VHDL en términos de cómo la herramienta de síntesis inferencia el código en el circuito RTL?
La if-elsif-else
construcción infiere una red de enrutamiento prioritario:
simular este circuito : esquema creado con 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 case
construcción, por otro lado, infiere un gran cambio:
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 resulta en una salida.
Considere el caso de múltiples if-else anidados y la combinación de declaraciones de casos con la construcción if-else dentro de un proceso.
Según lo anterior, puede 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 puede ocurrir más de una condición de entrada. Usar case
, por otro lado, es apropiado cuando las entradas son mutuamente excluyentes.
dec
/jz
instrucciones, lo cual es mucho más eficiente. Quizás se aplique una optimización similar aquí.