26 / 37 · Khái niệm
Gỡ lỗi bộ đếm và phản ví dụ tối thiểu
Thiết kế kiểm tra ngắn phân biệt lỗi reset, enable và biên quay vòng.
Bài học miễn phí. Đăng ký để lưu tiến độ học tập.
Giá trị cuối đúng nhưng thứ tự vẫn có thể sai
Kết thúc ở 0 không chứng minh reset và wraparound đúng; mạch đứng mãi ở 0 cũng vậy. Cần điểm quan sát riêng làm lộ tăng bình thường, giữ, resetReset Điều khiển đưa trạng thái về giá trị đầu đã định. Phải quy định đồng bộ hay bất đồng bộ và ưu tiên so với các điều khiển khác. Tìm hiểu thêm và quay biên.
Cố ý cho hai chức năng xung đột
| Tình huống | Đặc tả cần kiểm tra |
|---|---|
| reset=1, enable=0 | reset có bị enable che không |
| reset=1, enable=1 | reset có ưu tiên tăng không |
| count=M-1, enable=0 | Có quay sai lúc dừng không |
| count=M-1, enable=1 | Có quay chính xác M-1→0 không |
| Đổi reset giữa các cạnh | Reset đồng bộ có tác động ở cạnh sau không |
Chỉ thử điều khiển riêng từng cái rất khó phát hiện lỗi ưu tiên.
Mỗi cột ghi lại quan sát tại một cạnh lênCạnh lên Khoảnh khắc clock chuyển 0 sang 1, khác với mức cao chỉ cả khoảng CLK=1. Tìm hiểu thêm. Đầu vào là giá trị ngay trước cạnh, còn trạng thái có tên chứa after là giá trị ngay sau cập nhật. Cách căn cột thể hiện thứ tự lấy mẫu, không mô tả độ trễ lan truyềnĐộ trễ lan truyền Thời gian từ khi đầu vào đổi đến khi đầu ra ổn định ở giá trị đúng. Tương đương logic và đặc tính thời gian là hai vấn đề riêng. Tìm hiểu thêm vật lý. Ban đầu count=5. Mạch sai chỉ kiểm tra reset bên trong enable nên giữ 5 tại cạnh đầu. Dù cuối giống nhau, bất khớp đầu tiên làm lộ lỗi.
Xem dữ liệu dạng sóng
| Tín hiệu | Dạng sóng | Giá trị bus |
|---|---|---|
| edge | 234 | E0 → E1 → E2 |
| reset | 101 | |
| enable | 01. | |
| correct after | 234 | 0 → 1 → 0 |
| bug after | 234 | 5 → 6 → 0 |
Bắt đầu mạch tham chiếu modulo-8 ở 101. Chọn enable=0, reset=1 rồi tiến clock: đúng phải là 000, RTL đặt reset trong enable sẽ giữ 101. Nhả reset rồi phân biệt giữ khi enable=0 và tăng khi enable=1.
Reset đồng bộ ưu tiên hơn enable. Khi enable=0, giữ giá trị đang lưu. q=101; q_next = (q + 1) mod 8
Tìm bất khớp đầu bằng mô hình tham chiếu
Biểu thức này là mô hình chức năng giả định trạng thái bình thường 0~M-1. Thêm phục hồi ngoài phạm vi bằng chính sách riêng. Tính kỳ vọng từng cạnh và so thực tế; đầu vào, trạng thái ngay trước lần sai đầu là điểm bắt đầu nhỏ nhất để tìm nguyên nhân.
Nếu lỗi sau 1000 chu kỳ, bỏ đoạn kích thích không cần để tái hiện bằng 3~5 cạnh. Sau sửa RTL, giữ phản ví dụ tối thiểu làm hồi quy. Rà đặc tả sửa và mã riêng để tránh sửa thiết kế và kiểm tra thành cùng một điều kiện sai.
Tự thử
Mã sai bọc reset bằng if(en) begin if(rst) ... end. Chọn trạng thái đầu và đầu vào thế nào để lộ lỗi ngắn nhất?
Đọc giải thích
Chọn trạng thái đầu khác 0, đưa một cạnh rst=1, en=0. Đặc tả reset ưu tiên phải cho 0; mạch sai giữ cũ. Bắt đầu ở 0 sẽ che lỗi.