Ai đó có thể cho tôi biết sự khác biệt giữa cấu trúc câu lệnh If-Else và câu lệnh Case của một quy trình trong VHDL về cách mã được suy ra trong mạch RTL bằng công cụ tổng hợp không?
Cấu if-elsif-elsetrúc này tạo ra một mạng định tuyến ưu tiên:

mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab
Điều này tương ứng với
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;
Mặt khác case, cấu trúc này tạo ra một mux lớn:

Điều này tương ứng với
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;
Rõ ràng đây là những thiết kế rất đơn giản chỉ có một biểu thức giá trị, dẫn đến một đầu ra.
Hãy xem xét trường hợp nhiều câu lệnh if-other lồng nhau và trộn các câu lệnh case với if-other xây dựng bên trong một tiến trình.
Theo những điều trên, bạn có thể thấy chúng sẽ lồng / trộn như thế nào.
Ngoài ra khi nào nên sử dụng cấu trúc nào?
Vì if-elsemức độ ưu tiên của nó, nên được sử dụng khi có nhiều điều kiện đầu vào có thể xảy ra. Sử dụng case, mặt khác, là thích hợp khi các đầu vào loại trừ lẫn nhau.
dec/jzhướng dẫn, hiệu quả hơn nhiều. Có lẽ một tối ưu hóa tương tự được áp dụng ở đây.