Altifigence Academy

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.

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=0reset có bị enable che không
reset=1, enable=1reset có ưu tiên tăng không
count=M-1, enable=0Có quay sai lúc dừng không
count=M-1, enable=1Có quay chính xác M-1→0 không
Đổi reset giữa các cạnhReset đồ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.

Phản ví dụ tối thiểu: reset bị enable che
Xem dữ liệu dạng sóng
Dữ liệu dạng sóng: mỗi ký tự là một khoảng; dấu chấm giữ trạng thái trước; p là một chu kỳ đồng hồ.
Tín hiệuDạng sóngGiá trị bus
edge234E0 → E1 → E2
reset101
enable01.
correct after2340 → 1 → 0
bug after2345 → 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.

Cho reset xung đột enable

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

Ck+1=rk?0:(ek?((Ck+1) mod M):Ck)C_{k+1}=r_k?0:(e_k?((C_k+1)\bmod M):C_k)

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.

Lựa chọn áp dụng cho trình duyệt này. Có thể đổi ở chân trang bất cứ lúc nào.