I'm designing a mod-19 counter in Logisim using two 3-bit (mod-8) counters:
- Counter A – low-order bits (0…7)
- Counter B – high-order bits (0…2)
1 Asynchronous version (works)
- Clock drives A directly.
- B’s clock is A’s carry-out.
- An asynchronous clear forces both counters to
000when(B,A) = (2,2).
Expected / observed sequence
00 01 … 07 10 11 … 17 20 21 22 → 00 01 … Everything behaves as intended: at (2,2) the async clear fires and both counters jump to (0,0).
2 Synchronous version (misbehaves)
I wanted a synchronous reset, so I:
- Enabled the LOAD pin on both counters.
Observed sequence
… 17 20 21 22 → (2,3) → (0,2) → … → 22 → (2,3) → (0,2) → … 3 What I expected
- Expected:
(2,2)asserted ⇒ LOAD = 1 ⇒ on the next clock both counters load000.
4 Question
What is the proper way to implement a synchronous reset in this two-stage counter so that the sequence ends cleanly at (2,2) and restarts at (0,0)?
Edit (delete if not relevant soon):
Quick follow-up on the ripple (fully asynchronous) version:
I tried using the CLR pins instead of LOAD.
I AND’ed the two comparators (B = 2, A = 2) and fed that straight to both CLR inputs.
But the counter still clears one count early: the sequence goes … (2,0) → (2,1) → CLR → (0,0).
I never see (2,2).
Here’s a concise EE.SE comment you can post—and the full state table you asked for. Just drop the comment under their answer, and update your question with the table.
State table for my asynchronous-reset version
| counter-8¹ | counter-8⁰ | CLR₈¹ | CLR₈⁰ |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 2 | 0 | 0 |
| 0 | 3 | 0 | 0 |
| 0 | 4 | 0 | 0 |
| 0 | 5 | 0 | 0 |
| 0 | 6 | 0 | 0 |
| 0 | 7 | 0 | 0 |
| 1 | 0 | 0 | 0 |
| 1 | 1 | 0 | 0 |
| 1 | 2 | 0 | 0 |
| 1 | 3 | 0 | 0 |
| 1 | 4 | 0 | 0 |
| 1 | 5 | 0 | 0 |
| 1 | 6 | 0 | 0 |
| 1 | 7 | 0 | 0 |
| 2 | 0 | 0 | 0 |
| 2 | 1 | 0 | 0 |
| 2 | 2 | 1 | 1 |







