16 / 37 · Khái niệm
Bộ đếm modulo, bão hòa và xung kết thúc
Thiết kế xử lý cực đại và chu kỳ chính xác của tín hiệu terminal-count.
Bài học miễn phí. Đăng ký để lưu tiến độ học tập.
Ba chính sách vượt phạm vi khác nhau
Cùng thanh ghiThanh ghi Mạch lưu trạng thái nhiều bit. Thanh ghi đồng bộ trong khóa học lưu đầu vào đã quy định tại cạnh clock. Tìm hiểu thêm N bit, việc quay vòng, giữ cực đại hay báo lỗi tại cực đại do đặc tả quyết định.
Bộ đếm modulo tám bit đưa 255 về 0; bộ đếm bão hòa giữ 255, là hai chức năng khác nhau. Bộ tích lũy cần âm/dương còn phải xét phạm vi signed và hai biên bão hòa.
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=8, reset=0, enable=1. Cùng đầu vào nhưng modulo-10, wrap bốn bit và bão hòa bốn bit có quỹ đạo khác nhau.
Xem dữ liệu dạng sóng
| Tín hiệu | Dạng sóng | Giá trị bus |
|---|---|---|
| edge | 234523452 | E0 → E1 → E2 → E3 → E4 → E5 → E6 → E7 → E8 |
| mod10 after | 234523452 | 9 → 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 |
| wrap4 after | 234523452 | 9 → 10 → 11 → 12 → 13 → 14 → 15 → 0 → 1 |
| sat4 after | 2345234.. | 9 → 10 → 11 → 12 → 13 → 14 → 15 |
So sánh trạng thái cuối modulo-M
Muốn xung mỗi mười lần, dùng trạng thái 0~9 và chỉ đếm cạnh enable hợp lệ. Có thể đăng ký pulse mang nghĩa “cạnh này đã tiêu thụ 9 và quay về 0”.
always_ff @(posedge clk) begin
if (rst) begin
count <= 4'd0;
pulse <= 1'b0;
end else begin
pulse <= 1'b0;
if (en) begin
if (count == 4'd9) begin
count <= 4'd0;
pulse <= 1'b1;
end else count <= count + 4'd1;
end
end
endGán mặc định pulse đưa nó về 0 tại cạnh sau. Chỉ xuất count==9 có thể giữ 1 nhiều chu kỳ nếu dừng bằng enable=0. Phân biệt trạng thái cuối với sự kiện hoàn tất.
Mốc tính chu kỳ
Sau reset count=0, phải qua mười cạnh enable=1 mới có pulse đầu. Quan trọng hơn gọi cạnh đầu là 0 hay 1 là dùng nhất quán định nghĩa bảng đầu vào, trạng thái, đầu ra.
Thực hành dùng modulo-16. Từ 1110 đi một cạnh thành 1111, cạnh sau 0000. Thử dừng tại 1111 với enable=0. Giữ và bão hòa có thể cùng giá trị nhưng khác khi chạy lại. So với bộ đếm bão hòa, cùng điều kiện thì phải được giá trị nào?
Reset đồng bộ ưu tiên hơn enable. Khi enable=0, giữ giá trị đang lưu. q=1110; q_next = (q + 1) mod 16
Tự thử
Mạch trên đang count=9, pulse=0, đi qua hai cạnh en=0 rồi một cạnh en=1. count và pulse thay đổi thế nào?
Đọc giải thích
Hai cạnh dừng giữ count=9, pulse=0. Cạnh thứ ba count=0, pulse=1. Cạnh sau pulse=0 nhờ mặc định.