Aparentemente estás en el camino correcto. Ahora todo lo que necesita es un contador binario que se restablece cuando llega a 9. Eso es un total de 10 pasos discretos (0..9)
La teoría básica debería haberle dicho que necesita un mínimo de 4 flip-lops. 3 flip-flops contarán hasta un máximo de 7 (2 ^ 3 - > 0..7), por lo que debe agregar la cuarta etapa para pasar de 7.
El problema es que 4 flip-flops contarán hasta 15 antes de revertir a 0.
Hay dos métodos que se utilizan para forzar un traspaso de 9 a 0.
1) Use una puerta AND para detectar el décimo paso y úselo para restablecer todos los flip-flops a cero.
El problema con esta técnica es que se produce una falla muy corta cuando el contador llega a "10" antes de reiniciar. Por lo general, esto no es un problema, pero debe tener en cuenta que ocurre.
Este es un contador simple que consiste en 4 alternar flip-flops y una puerta AND. Los FFs de alternancia se pueden hacer desde flip-slops D o J-K. Las etapas del contador se pueden configurar como asíncronas (contador de ondulación) o síncronas.
2) Use flip-flops J-K y puertas lógicas para construir un contador tal que el siguiente pulso de reloj después del noveno provoque que las entradas J-K obliguen a que el siguiente pulso de reloj vuelva a cero. Estos son casi siempre contadores síncronos: todas las salidas cambian en el borde del reloj activo.
Hay otra clase de contador conocido como "Contador de Johnson". Este es un contador donde hay un solo flip-flop para cada paso en el conteo. En otras palabras, un contador de 10 pasos (0..9) tendría 10 FFs. El beneficio útil que ofrece esta clase de contador es que solo una salida está activa (HI o LO) en cualquier momento.
En otras palabras, un contador Johnson no requiere decodificación para obtener 10 salidas discretas.