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-else
trú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-else
mứ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
/jz
hướ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.