¿Puede hacer un recuento de contador asíncrono en Gray Code?

0

Primero explicaré mi situación y luego haré algunas preguntas de la manera más clara posible. Soy un principiante total y gracias por lidiar conmigo.

La tarea:

Me dieron la tarea de diseñar un contador de décadas utilizando J-K Flip-Flops. Lo que pensé de inmediato fue si debería hacerlo sincrónico o asíncrono. Y aquí es donde empecé a confundirme.

Lo que sé:

Ahora, la principal ventaja (que conozco) de los contadores síncronos sobre los asíncronos es que son más confiables , ya que no tienen retrasos de propagación, lo que puede hacer que una salida pase de
  0111 (7) - > 1111 (15) - > 1011 (11) - > 1001 (9) - > 1000 (8) (transitoriamente)
de lo contrario, son más complejos de diseñar y generalmente requieren más circuitos.

Mis preguntas:

Entonces, ¿puede un contador asíncrono contar en código gris? ¿Y resolvería este problema de retraso de propagación? Pensé que esto haría que cualquier retardo de propagación fuera irrelevante, porque, por ejemplo, un número cambiaría de 0100 (7) a 1100 (8) sin pasar por estados transitorios, sin importar qué retrasos estén presentes en el circuito. Esto, a su vez, haría del contador asíncrono la mejor opción.

Además, ¿cuáles son las ventajas de usar FF de tipo T sobre FF de tipo D?
(ambas se realizan en JK FF)

También debo decir que la frecuencia del reloj es realmente baja (1Hz). ¿Algo de esto importa en este caso?

GRACIAS POR AYUDAR

    
pregunta karim ahmed

2 respuestas

0

Es posible, y no demasiado difícil, diseñar un contador asíncrono que tome una entrada de código gris de dos bits y produzca un código gris de tres bits como salida. Dichas etapas se pueden conectar en cascada a una profundidad arbitraria para obtener un contador de código gris de longitud arbitraria. Una característica interesante de dicho contador es que, a diferencia de los contadores de ondulación binarios normales, puede contar en ambas direcciones igualmente bien y tolerará la inestabilidad momentánea o la metástrabilidad en cualquiera de las entradas, siempre que no haya ninguna entrada a menos que la otra entrada sea estable.

simular este circuito : esquema creado usando CircuitLab

Cuando In0 es 0, la salida 2 cambiará si es necesario para que (In1 xo Out1 xo Out2) sea 0. Cuando In0 es 1, la salida 1 cambiará si es necesario para que (In1 xor Out1 xo Out2) sea cero. Si In0 es estable, el correo no deseado en In1 hará que aparezca como basura en Out1 o Out2, pero la otra salida permanecerá estable. Una vez que In1 se estabilice, su salida correspondiente también se estabilizará. Si In1 es estable, nada más que Out0 cambiará en respuesta a In0, por lo que el ruido en In0 no tendrá efecto siempre que se estabilice antes de que cambie In1.

Tenga en cuenta que el diseño que se muestra puede tener algunas consideraciones prácticas, como peligros lógicos con muxes o la falta de una señal de reinicio; Estos son tratados como ejercicios para el lector.

    
respondido por el supercat
1

En un contador de ondulación, el reloj de entrada va directamente a un solo flipflop, el LSB, y se conecta en cascada a los otros. Esto explica por qué el LSB siempre tiene que cambiar de estado, y cambia en un momento ligeramente diferente a resultados de mayor peso.

En el código gris, cualquier salida puede cambiar de estado. Por lo tanto, es obvio que no puede tener una implementación de rizado (asíncrona) de un contador gris que sea tan simple como un contador de rizado binario.

Un contador síncrono, en el que todas las salidas cambian de estado en el mismo borde de entrada, no es necesariamente más confiable, es igual de confiable cuando se tienen en cuenta sus características al diseñar el sistema que lo utiliza.

Si una ondulación y un contador síncrono se hacen de la misma tecnología, las salidas del contador síncrono dejarán de cambiar en un tiempo más corto desde el borde del reloj. Sin embargo, el contador de ondulación contará correctamente hasta una frecuencia de entrada más alta. Se garantiza que el contador de ondulación tiene un sesgo significativo entre las salidas, el contador síncrono podría tener un sesgo dependiendo de la simetría con la que se diseñó y de la carga equitativa de las salidas. En ambos casos, lea la hoja de datos y diseñe para acomodar el comportamiento de la parte.

En un contador síncrono, el reloj se desplaza a todos los flipflops, y la selección interna se usa para decidir cuáles cambian de estado. Mire el diagrama interno en la hoja de datos de un HC163 para ver esto, por ejemplo. Visto así, el HC163 es solo una máquina de 16 estados, con la secuencia a través de los estados de salida controlados por la activación interna. Para modificar la secuencia de salida, al código Gray, por ejemplo, solo se trata de alterar la decodificación del estado.

Obviamente, necesita un objetivo adecuado para implementar dicho circuito de decodificación y control. Podrías hacerlo desde discretos, HC74s y HC86s por ejemplo. O con VHDL en un objetivo CPLD o FPGA. Tenga en cuenta que, en el caso discreto, si opta por una solución de compuerta mínima, lo que significará que se caigan en cascada los XOR, será un poco más lento que la versión binaria.

Una forma alternativa de obtener un conteo ponderado en gris es usar un contador binario y recodificar las salidas. Esto puede parecer un poco engañoso, pero con la decodificación ya hecha para que hagas que un HC163 funcione, es probablemente la forma más fácil de hacerlo en discreto. Probablemente sea también el más rápido, ya que las salidas de HC163 están registradas. Codifique las salidas binarias a Gris con una cascada XOR, luego regístrelas nuevamente en el mismo reloj. Me temo que este último no está en el espíritu de lo que estás tratando de hacer.

Tal vez se sugiera una ruta más cercana a un 'contador de ondulación' o un contador gris asíncrono por la observación de que el 'LSB' cambia de estado cada otra entrada de reloj. Si el LSB es un tipo T (un cierre de 'alternancia', también construible como un JK con J y K unidos, o un XOR envuelto alrededor de un cierre D), entonces una sola división asíncrona entre 2 puede controlarlo para cambiar el estado cada vez otra entrada. Un bit más alto cambia de estado cuando el LSB no lo hace, y de acuerdo con otras condiciones. Vea si puede calcular la compuerta para un bit de 2 bits, y luego cómo cambia a un contador de gris de 3 bits, entonces tendrá el patrón para construir la cascada para el contador de grises de n bits.

    
respondido por el Neil_UK

Lea otras preguntas en las etiquetas