Bộ đếm bất đồng bộ: Đánh đổi giữa làm việc, kiểu và thời gian

Đã xuất bản tháng 11 04, 2026

Bộ đếm bất đồng bộ đếm xung nhịp bằng các flip-flop nối tiếp, trong đó chỉ tầng một nhận xung nhịp bên ngoài và mỗi tầng tiếp theo kích hoạt từ đầu ra trước đó. Sự lan truyền ripple này giữ cho thiết kế đơn giản nhưng tạo ra độ trễ tích lũy - thường từ 5-15 ns mỗi giai đoạn với logic dòng 74HC tiêu chuẩn - phù hợp cho việc chia tần số và đếm sự kiện tốc độ thấp nhưng gây khó khăn khi tất cả các bit đầu ra phải cập nhật đồng thời. Dưới đây tôi sẽ trình bày cơ chế gợn sóng, các giới hạn thời gian thực tế, và nơi kiến trúc này vẫn còn hợp lý.

Những điểm nổi bật:

  • Độ trễ gợn sóng tăng tuyến tính theo số giai đoạn; Bộ đếm bất đồng bộ 4-bit được xây dựng từ flip-flop 74HC73 tích lũy khoảng 40 Ns trong trường hợp xấu nhất, giới hạn hoạt động đáng tin cậy dưới ~10 MHz.
  • Bộ đếm bất đồng bộ rất tốt trong việc chia tần số (mỗi giai đoạn làm giảm một nửa tần số đầu vào) và không cần định tuyến cây đồng hồ tốc độ cao đến mọi flip-flop.
  • Trạng thái lỗi tạm thời trong quá trình chuyển đổi đa bit (ví dụ: 0111→1000) có thể gây ra kích hoạt sai trong logic phía sau trừ khi đầu ra được nhấp nháy sau khi ổn định.
  • Bộ đếm đồng bộ loại bỏ độ trễ sóng và lỗi nhưng đòi hỏi tài nguyên định tuyến cao hơn và tiêu thụ nhiều điện hơn để phân phối xung nhịp đến tất cả các giai đoạn.

Cách hoạt động của Ripple Propagation

Flip-flop đầu tiên sẽ chuyển đổi ở mọi cạnh xung nhịp đầu vào. Đầu ra của nó sau đó đồng hồ nhịp flip-flop thứ hai, tần suất chuyển đổi chỉ bằng một nửa. Đầu ra đó sẽ kích hoạt tầng ba, và cứ thế tiếp tục. Vì mỗi giai đoạn chờ giai đoạn trước ổn định, bit đầu ra cuối cùng sẽ cập nhật cuối cùng - độ trễ nối tiếp này chính là hiệu ứng ripple đặc trưng.

Về mặt thực tế, bạn sẽ thấy rõ điều này trên máy hiện sóng: dò bit ít quan trọng nhất (LSB) và nó theo dõi xung nhịp đầu vào; thăm dò bit quan trọng nhất (MSB) của bộ đếm 4-bit và bạn sẽ thấy nó chuyển tiếp khoảng bốn độ trễ lan truyền sau đó. Thời gian xen kẽ này phù hợp với các ứng dụng như tạo bộ chia xung /16, nhưng nó phá vỡ các mạch lấy mẫu tất cả các bit song song - như vi điều khiển đọc giá trị đếm hoặc bộ so sánh kiểm tra đếm đầu cuối.

Loại và Hướng đếm

Bộ đếm lên: Mỗi flip-flop được clock bởi đầu ra không đảo ngược của giai đoạn trước, nên số đếm tăng dần theo chuỗi nhị phân tiêu chuẩn (0000, 0001, 0010, ..., 1111, sau đó quấn đến 0000).

Bộ đếm xuống: Mỗi flip-flop được đồng hồ bởi đầu ra bổ sung (Q̄) của giai đoạn trước, đảo ngược chuỗi (1111, 1110, 1101, ..., 0000).

Việc lựa chọn phụ thuộc vào đầu ra flip-flop nào bạn nối đến đầu vào xung nhịp tiếp theo. Flip-flop J-K và T phổ biến vì chế độ chuyển đổi của chúng yêu cầu logic bên ngoài tối thiểu - chỉ cần buộc J và K cao hoặc giữ T cao. Flip-flop D hoạt động nhưng cần đầu ra đảo ngược được đưa trở lại đầu vào D, thêm một gate.

Hạn chế thời gian bạn không thể bỏ qua

Độ trễ lan truyền tích lũy: Mỗi flip-flop sẽ thêm độ trễ từ đồng hồ đến đầu ra (tp) của nó. Đối với bộ đếm n bit, thời gian gợn sóng trong trường hợp xấu nhất là n × tp. Với flip-flop 74HC73 (tp ≈ 10 ns ở 5 V), bộ đếm 4-bit ổn định trong ~40 ns; Bộ đếm 8-bit đẩy 80 N. Nếu ứng dụng của bạn lấy mẫu số lượng trước khi nó ổn định, bạn sẽ đọc được những thứ vô nghĩa.

Trạng thái lỗi: Trong các chuyển đổi lật nhiều bit - như 0111→1000 - các đầu ra trung gian sẽ hiển thị trạng thái không hợp lệ trong thời gian ngắn (0110, 0100, 0000, 1000 theo thứ tự). Tôi đã thấy những lỗi này trong logic ngắt giả kích hoạt trong các dự án vi điều khiển. Cách khắc phục là hoặc nhấp nháy các đầu ra với tín hiệu kích hoạt trễ chờ đến khi hoàn thành ripple, hoặc chuyển sang bộ đếm đồng bộ, nơi tất cả các bit thay đổi cùng lúc.

Tần số xung nhịp tối đa: Chu kỳ xung nhịp đầu vào phải vượt quá tổng độ trễ ripple cộng với thời gian thiết lập cho bất kỳ logic phía sau nào. Đối với bộ đếm 4-bit 74HC, tần số đầu vào tối đa thực tế khoảng 10-12 MHz; Đẩy vượt quá mức đó thì bạn sẽ thấy metastability hoặc số lần bỏ sót.

Figure 1. Ripple delay accumulation in a 4-bit asynchronous counter

Khi các bộ đếm bất đồng bộ vẫn còn hợp lý

Phân chia tần số: Nếu bạn chỉ quan tâm đến đầu ra MSB và bỏ qua các bit trung gian, độ trễ ripple không quan trọng. Bộ đếm 4-bit được cấp xung nhịp 1 MHz cung cấp sóng vuông sạch 62,5 kHz tại MSB - không có lỗi, không cần đồng bộ hóa. Tôi thường xuyên sử dụng điều này trong các mạch prescaler của đồng hồ.

Đếm sự kiện với đầu vào chậm: Đếm các nút công tắc cơ học, xung cảm biến hoặc bất kỳ tín hiệu nào dưới 100 kHz hiếm khi đạt giới hạn thời gian. Bộ đếm kép 4-bit 74HC393 có giá chỉ bằng một phần nhỏ so với bộ đếm đồng bộ và không cần diện tích PCB để phân phối xung nhịp.

Số lượng cổng thấp trong ASIC/FPGA: Mặc dù FPGA ưu tiên thiết kế đồng bộ, bộ đếm bất đồng bộ có thể lưu các flip-flop trong các khối siêu tiết kiệm điện hoặc khu vực hạn chế, nơi bạn sẵn sàng tự quản lý thời gian.

Điểm kém của chúng: Bất kỳ ứng dụng nào đọc toàn bộ số lượng tín hiệu song song (tạo địa chỉ, ghép kênh hiển thị, phát hiện số lượng đầu cuối) hoặc hoạt động trên vài megahertz. Trong những trường hợp đó, độ trễ ripple gây ra lỗi chức năng hoặc buộc bạn phải thêm quá nhiều logic bên ngoài (chốt đầu ra, tạo đèn strobe) khiến bộ đếm đồng bộ trở nên đơn giản hơn.

Danh sách kiểm tra thiết kế

→ Tính toán độ trễ ripple trong trường hợp xấu nhất: n × tp, trong đó n là số giai đoạn và tp là từ bảng dữ liệu flip-flop.
→ Xác minh chu kỳ xung nhịp đầu vào ≥ độ trễ ripple + thời gian thiết lập phía sau + biên độ (tôi dùng biên 20%).
→ Nếu có logic nào lấy mẫu số đếm, hãy thêm một strobe đầu ra bị trễ ít nhất thời gian ripple, hoặc sử dụng bộ đếm đồng bộ.
→ Đối với ứng dụng chia cho 2ⁿ, chạm vào giai đoạn cuối và bỏ qua các đầu ra trung gian - gợn sóng không quan trọng.
→ Xác nhận rằng dòng dép xỏ ngón (HC, AC, LV) đáp ứng yêu cầu tốc độ và điện áp của bạn; Các linh kiện 74LS đời cũ có tốc độ ≈ 20 ns và không đạt 10 MHz trong cấu hình 4-bit.
→ Kiểm tra toàn bộ chuỗi đếm bằng bộ phân tích logic, không chỉ bằng ống ngắm; Lỗi rất dễ bị bỏ qua trên ống ngắm đặt chậm thời gian.

Bất đồng bộ vs. Đồng bộ: Sự đánh đổi thực sự

Khía cạnh Không đồng bộ Đồng bộ
Phân bố đồng hồ Chỉ đến giai đoạn đầu tiên Dành cho tất cả dép xỏ ngón
Thời điểm xuất khẩu Độ trễ ripple, bit cập nhật tuần tự Tất cả các bit đều cập nhật trên cùng một cạnh (trong độ lệch xung nhịp)
Tốc độ tối đa Giới hạn bởi n × tp (thường <20 MHz cho 4 bit) Giới hạn bởi một tp + logic tổ hợp (có thể vượt quá 100 MHz)
Trạng thái lỗi Có mặt trong quá trình chuyển đổi đa bit Vắng mặt nếu thiết kế đồng bộ toàn bộ
Số lượng cổng N dép xỏ ngón N flip-flop + logic tổ hợp cho trạng thái tiếp theo
Sức mạnh (động) Thấp hơn - chỉ chuyển đổi các giai đoạn mới tiêu thụ dòng điện Cao hơn - cây đồng hồ và tất cả flip-flop sẽ chuyển đổi mỗi chu kỳ
Trường hợp sử dụng tốt nhất Bộ chia tần số, bộ đếm sự kiện chậm, không gian bo mạch tối thiểu Bus bộ xử lý, đường truyền dữ liệu tốc độ cao, bất kỳ bản đọc song song nào

Bảng cho thấy lý do tại sao bộ đếm bất đồng bộ vẫn tồn tại trong các vai trò ngách dù chậm hơn. Nếu bạn chia xung nhịp hệ thống 10 MHz xuống 1 MHz cho UART, bộ đếm bất đồng bộ sẽ làm được với ba flip-flop và không bị tắc nghẽn định tuyến. Nhưng nếu bạn đang xây dựng bộ đếm địa chỉ để làm mới DRAM hoặc một thiết bị hẹn giờ mà CPU đọc trực tiếp, thì đồng bộ là lựa chọn thực tế duy nhất.

Figure 2. Comparison of output timing between asynchronous and synchronous 4-bit counters

Ghi chú mạch thực tiễn

Cài đặt sẵn và Clear: Hầu hết các IC counter (74HC393, 74HC4040) đều bao gồm đầu vào clear không đồng bộ; Một số thêm tải đồng bộ. Tôi nhận thấy dùng clear không đồng bộ để đặt modulus không lũy thừa hai (ví dụ, bộ đếm thập kỷ) thì hiệu quả nhưng cần một cổng để giải mã số lượng terminal và pulse clear - hãy chú ý điều kiện race khi clear xuất hiện trước khi tất cả các giai đoạn chuyển đến trạng thái terminal.

Nối tiếp vượt quá 4 bit: Bạn có thể nối chuỗi IC đếm 4-bit bằng cách đưa đầu ra MSB carry đến đầu vào xung nhịp của gói tiếp theo. Mỗi giai đoạn 4-bit bổ sung thêm sẽ thêm 40 ns độ trễ, vì vậy bộ đếm 8-bit được xây dựng từ hai 74HC393 có khoảng ~80 ns ripple và thực tế đạt đỉnh khoảng tần số đầu vào 5 MHz.

Giao tiếp với vi điều khiển: Nếu bạn phải đọc bộ đếm bất đồng bộ với vi điều khiển, hãy sử dụng bộ đếm bắt đầu vào được kích hoạt bởi MSB (để bạn chỉ quan tâm đến một bit) hoặc khóa đầu ra bằng chốt trong suốt 74HC373, giữ chốt mở ở mức thấp cho đến khi gợn sóng kết thúc. Tôi đã dành hàng giờ để gỡ lỗi đếm "ngẫu nhiên" mà hóa ra là do MCU lấy mẫu giữa lúc bị ripple.

Ngành công nghiệp đang hướng tới đâu

Bộ đếm bất đồng bộ vẫn xuất hiện trong các thiết kế nhạy cảm về chi phí - đặc biệt là các bộ điều khiển LED, bộ hẹn giờ thiết bị và mạch dasboard ô tô - nhưng kiến trúc đồng bộ chiếm ưu thế trong bất kỳ thiết bị nào có vi xử lý hoặc FPGA. 74HC590 (bộ đếm nhị phân 8-bit với thanh ghi đầu ra) và 74HC4040 (bộ đếm ripple 12-bit) vẫn đang được sản xuất, điều này cho thấy vẫn còn nhu cầu, nhưng các dòng IC mới (như dòng SN74AUP của TI) tập trung vào các cấu trúc đồng bộ vì các ứng dụng di động và IoT ưu tiên độ trễ thấp hơn số lượng cổng.

Nếu bạn dạy thiết kế số, bộ đếm bất đồng bộ rất đáng để hiểu vì chúng làm lộ rõ độ trễ truyền và sự ổn định meta - những khái niệm quan trọng ngay cả trong các hệ thống đồng bộ hoàn toàn. Nếu bạn đang thiết kế sản phẩm, chỉ sử dụng chúng ở những nơi giới hạn không quan trọng: phân chia tần số, đếm sự kiện riêng lẻ, hoặc bất cứ nơi nào bạn có thể chịu đựng (hoặc không bao giờ quan sát) độ trễ ripple. Với mọi thứ khác, thời gian sạch của bộ đếm đồng bộ xứng đáng với tải xung nhịp flip-flop bổ sung.