Altifigence Academy

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.

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.

Cnextwrap=(C+1) mod 2NC_{next}^{wrap}=(C+1)\bmod2^N
Cnextsat=min⁡(C+1,2N−1)C_{next}^{sat}=\min(C+1,2^N-1)

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.

Ba chính sách sau giá trị cực đại
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
edge234523452E0 → E1 → E2 → E3 → E4 → E5 → E6 → E7 → E8
mod10 after2345234529 → 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7
wrap4 after2345234529 → 10 → 11 → 12 → 13 → 14 → 15 → 0 → 1
sat4 after2345234..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”.

SystemVerilog
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
end

Gá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?

Dừng hoặc quay ở cực đại bốn bit

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.

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.