Herkes bana VHDL'de bir işlemin If-Else yapı ve Case deyimi yapıları arasındaki kodun sentez aracıyla RTL devresine nasıl çıkarıldığı açısından farkını söyleyebilir mi?
if-elsif-else
Yapı, ağ yönlendirme öncelik ulaşır:
bu devreyi simüle et - CircuitLab kullanılarak oluşturulan şematik
Bu karşılık gelir
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
Yapı, diğer taraftan büyük bir infers ol' mux:
Bu karşılık gelir
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;
Açıkçası, bunlar sadece bir değer ifadesi ile çok basitleştirilmiş tasarımlardır ve bir çıktı ile sonuçlanır.
Birden fazla iç içe if-else ve case-deyimlerini bir işlem içinde if-else yapısı ile karıştırmayı düşünün.
Yukarıdakilere göre, nasıl iç içe / karışacaklarını görebilirsiniz.
Ayrıca hangi yapı ne zaman kullanılır?
Dan beri if-else
infers öncelik, birden fazla giriş koşulu oluşabilir zaman kullanılmalıdır. Kullanılması case
girişler birbirini dışlayan olduğunda, diğeri elini, uygundur.
dec
/jz
talimatlar uygular , bu da çok daha verimlidir. Belki de benzer bir optimizasyon burada uygulanır.