Altifigence Academy

29 / 63 · Khái niệm

Số trạng thái, độ rộng bộ đếm và mã không dùng

Tính số bit lưu từ phạm vi đếm và định nghĩa phục hồi trạng thái sai.

Mạch đếm cũng là máy trạng thái

Bộ đếm lặp 0~9 cần mười trạng thái. Độ rộng lưu tối thiểu là ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4 bit. Như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 bốn bit có 16 mẫu, nên chỉ chọn đúng độ rộng chưa hoàn thành chức năng modulo-10.

N=⌈log⁡2M⌉,unused codes=2N−MN=\left\lceil\log_2 M\right\rceil,\qquad \text{unused codes}=2^N-M

M là số trạng thái, không phải giá trị lớn nhất. Đếm 0 đến M-1 khác 0 đến M. Nếu hỗ trợ M=1, giới hạn độ rộng ít nhất một bit và xử lý để luôn giữ 0.

Bộ lưu bốn bit có 16 mã, nhưng modulo-10 chỉ dùng mười mã bình thường. Sau khi chọn độ rộng, phải thêm phép so sánh và chính sách phục hồi.

Độ rộng lưu và điều kiện quay vòng thiết kế riêng
  1. Mười trạng thái: count bình thường là 0~9
  2. Lưu bằng bốn bit: 16 mã; 10~15 là mã dư
  3. Trạng thái kế tiếp: Về 0 nếu en=1 và count≥9

Trạng thái ngoài phạm vi cũng thuộc thiết kế

Nếu bộ đếm modulo-10 bốn bit vì lý do nào đó thành 12, bước sau phải làm gì? Có thể chứng minh điều kiện khởi tạo/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 bảo đảm “không xảy ra”, hoặc đặt chính sách về 0 khi từ 9 trở lên. Phục hồi này không bảo đảm chống mọi hỏng hóc phần cứng.

SystemVerilog
always_ff @(posedge clk) begin
  if (rst) count <= 4'd0;
  else if (en) begin
    if (count >= 4'd9) count <= 4'd0;
    else count <= count + 4'd1;
  end
end

Ví dụ phục hồi cả giá trị sai 10~15 tại cạnh en=1. enable=0 thì vẫn giữ giá trị sai; nếu đặc tả yêu cầu phục hồi ngay, phải đổi ưu tiên điều kiện.

Rà soát độ rộng khác rà soát chức năng

Mười bit đủ cho 0~999 nhưng tăng tự do sẽ tới 1023. Cần mạch so sánh và chọn để quay về 0 tại trạng thái lớn nhất theo đặc tả. Khác biệt này có thể gây truy cập sai hoặc sai độ dài trong bộ đếm địa chỉ, số lần lặp và độ dài gói.

Tự thử

Tính độ rộng tối thiểu và số mã không dùng của bộ đếm lặp 0~99. Nếu chỉ +1 với độ rộng đó, hành vi khác thế nào?

Đọc giải thích

Có 100 trạng thái nên cần bảy bit; số mã không dùng là 128−100=28128-100=28. Chỉ tăng không quay ở 99 mà tới 127, nên thành modulo-128 thay vì modulo-100.

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.