1. Latch Inference

Trong thiết kế mạch số bằng Verilog, một vấn đề thường gặp là latch inference – hiện tượng công cụ mô phỏng hoặc tổng hợp tự động suy diễn ra một phần tử lưu trữ (latch) mà designer có thể không hề mong muốn.
Khi nào latch inference xảy ra?
Khi trình mô phỏng hoặc công cụ tổng hợp đọc mã Verilog, chúng sẽ diễn giải nội dung như sau:
- Nếu trong một khối lệnh
case
hoặc khối điều kiệnif-else
, một số trường hợp xử lý giá trị đầu vào bị thiếu (không được mô tả rõ ràng), thì: - Ví dụ, nếu trong
case
ta xử lý giá trị 0, 1 nhưng bỏ sót giá trị 2, thì:
+ Công cụ sẽ hiểu rằng, nếu trạng thái hiện tại là 2, giá trị của biếny
sẽ giữ nguyên, bởi vì chúng ta không nói phải thay đổi nó thế nào.
+ Điều này đồng nghĩa với việc cần một phần tử lưu trữ để ghi nhớ giá trị cũ củay
– tức là, một latch sẽ được tạo ra.
Vậy nên, khi không mô tả đầy đủ các trường hợp, công cụ sẽ ngầm hiểu rằng designer muốn tạo một latch để lưu trữ giá trị trước đó.
Cách khắc phục latch inference
Để tránh latch inference ngoài ý muốn, chúng ta nên:
- Mô tả đầy đủ tất cả các trường hợp đầu vào trong
case
,if-else
… - Hoặc, nếu không muốn liệt kê hết, cần sử dụng một câu lệnh
default
để xử lý các trường hợp chưa được nêu.
Một ví dụ đơn giản nhất:
case(state)
2'b00: y = 1'b0;
2'b01: y = 1'b1;
default: y = 1'b0; // tránh latch inference
endcase
Nếu để latch inference tồn tại trong thiết kế, ta có thể gặp những rủi ro sau:
- Chuyển từ logic tổ hợp thành logic tuần tự
Latch khiến thiết kế không còn là thuần túy combinational logic, mà trở thành sequential logic. Điều này làm thay đổi bản chất thiết kế. - Khó kiểm soát thời gian và timing
Latch không được đồng bộ bởi clock như flip-flop, nên khó dự đoán thời gian lan truyền (propagation delay), dễ gây lỗi timing, hazard, và glitch. - Độ tin cậy thiết kế giảm
Hành vi giữ giá trị cũ có thể gây ra những lỗi rất khó phát hiện trong mô phỏng, đặc biệt là trong các corner case. - Khó bảo trì và debug
Khi phát hiện lỗi trong các giai đoạn muộn như kiểm thử hệ thống hoặc sau khi tape-out, việc sửa lỗi liên quan đến latch có thể cực kỳ tốn kém và rắc rối. - Có thể ảnh hưởng tới việc tổng hợp (synthesis)
Một số công cụ tổng hợp sẽ tự động thêm latch vật lý, làm tăng diện tích chip, tiêu thụ điện năng lớn hơn, và ảnh hưởng tới hiệu suất tổng thể.