Estoy tratando de entender cómo implementar un contador de ondas binarias arriba/abajo. Básicamente, tengo un montón de D-flipflops y conecto clk del siguiente flipflop a ether Q o Q'.
Entonces, si quiero cambiar la dirección de conteo, simplemente cambio todos los multiplexores clk entre Q y Q', y el contador comienza a contar en la dirección opuesta.
Sin embargo, el problema es que cuando cambio las entradas entre Q y Q, los flip-flops cuentan 1, por lo que mi contador cuenta desde un número diferente.
Es decir, no puedo tener algo como: 0->1->2->3(cambio de dirección)->2->1->0, se vuelve como 0->1->2->3(cambio de dirección)-> c->b->a->9...
¿Qué me estoy perdiendo?
Los puntos clave son:
Asegúrese de que, después de la activación, el nuevo arreglo tenga sentido lógico. es decir, ¿por qué debería contar ABAJO ahora? Si no sigue la lógica de lo que cree que debería hacer, entonces no puede sorprenderse demasiado si no está de acuerdo con usted :-)
Cambie siempre en un estado "neutro". Asegúrese de que las líneas de reloj u otras líneas relevantes para el estado estén en una condición antes y después del cambio que no provoque un cambio de estado transitorio.
Un circuito "funcional" desde aquí
Una herramienta maravillosa (y gratuita)
Logisim: una herramienta educativa para diseñar y simular circuitos lógicos digitales
Ellos dicen:
Si desea un contador de ondulación que cuente bidireccionalmente, es posible implementar un contador de código gris de entrada en cuadratura bidireccional utilizando pestillos totalmente sensibles al nivel. Los dos bits superiores de una etapa pueden alimentar la siguiente etapa. Incluso si una de las entradas se vuelve metaestable por un tiempo, el contador se comportará siempre que la entrada metaestable se estabilice antes de que cambie la otra entrada.
BaresMonster