Adakah yang bisa memberi tahu saya perbedaan antara konstruksi If-Else dan konstruksi Case statement dari suatu proses dalam VHDL dalam hal bagaimana kode tersebut disimpulkan ke dalam rangkaian RTL oleh alat sintesis?
The if-elsif-else
membangun menyimpulkan prioritas routing jaringan:
mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab
Ini sesuai dengan
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;
The case
membangun, di sisi lain, menyimpulkan besar ol' mux:
Ini sesuai dengan
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;
Jelas ini adalah desain yang sangat sederhana dengan hanya satu ekspresi nilai, menghasilkan satu output.
Pertimbangkan kasus multi-if bersarang dan campur aduk-case dengan konstruksi if-else di dalam proses.
Per di atas, Anda dapat melihat bagaimana mereka akan bersarang / bercampur.
Juga kapan harus menggunakan konstruksi mana?
Karena if-else
diprioritaskan, itu harus digunakan ketika lebih dari satu kondisi input dapat terjadi. Menggunakan case
, satu sisi lain, adalah tepat ketika input saling eksklusif.
dec
/jz
instruksi, yang jauh lebih efisien. Mungkin optimasi serupa diterapkan di sini.