¿Recurso fácil de aprender para resolver problemas de contador?

2

¿Alguien me podría indicar dónde puedo aprender a resolver problemas simples de contador, como contar en una secuencia dada usando un flip-flop determinado? Por ejemplo:

  

Cree un contador contando en una secuencia 3-1-4-7-2 y otra vez desde el   comenzando a usar los flip-flops tipo D

No estoy pidiendo ayuda para este problema en particular; más bien, sería bueno saber cómo resolver esta clase de problemas. Sé cómo diseñar contadores en una serie para contar de n a n + k o al revés, pero ¿cómo hacer esto?

    
pregunta Straightfw

2 respuestas

2

Piense en su contador especial como una máquina de estado. Luego, asigne al estado el valor codificado de la secuencia de conteo que desee. En este caso, los estados serían los siguientes con el siguiente estado que se muestra.

State    Next State
  3  ->   1
  1  ->   4
  4  ->   7
  7  ->   2
  2  ->   3

Cada estado se puede codificar en tres bits binarios, por lo que su diseño requerirá tres flip-flops tipo D. Debe crear un conjunto de tres mapas de karnough, uno para cada flipflop que muestre el siguiente valor de bit para el flop flop (entrada D) basado en los tres estados actuales (salidas Q).

Utilice los mapas k para simplificar la lógica hasta el mínimo requerido. Finalmente, puede codificar la lógica mínima en una serie de puertas AND que conducen puertas OR en cada entrada D de FF.

Aquí muestro el k-map para el bit ordenado más bajo del "contador" para comenzar con la idea.

    
respondido por el Michael Karas
2

La idea básica en este tipo de problemas es que sus flip-flops D representan su estado y usted necesita crear una lógica combinacional que tome como entrada el estado actual y genere como salida el siguiente estado. .

Así que primero creas la tabla de verdad:

  input      output
D2 D1 D0 | D2' D1' D0'
 0  0  0 |  *   *   *    # actually, don't care is not quite right, see below
 0  0  1 |  1   0   0    # 1 -> 4
 0  1  0 |  0   1   1    # 2 -> 3
 0  1  1 |  0   0   1    # 3 -> 1
 1  0  0 |  1   1   1    # 4 -> 7
 1  0  1 |  *   *   *    # not quite right, see below
 1  1  0 |  *   *   *    # not quite right, see below
 1  1  1 |  0   1   0    # 7 -> 2

Entonces ahora tiene tres funciones ( D2' , D1' y D0' ) para las cuales tiene que crear lógica combinacional. Lo que puedes hacer con un mapa de Karnaugh o cualquier otra cosa que tengas a tu disposición. (Por ejemplo, puede obtener una copia del Minimizador de la lógica del espresso . El código fuente está en github . Hay varias versiones precompiladas disponibles si realiza una búsqueda en Google.

Initialization

En la tabla de verdad de arriba, dije que "no importa" no está del todo bien ". Aquí le explicamos por qué: cuando enciende la alimentación por primera vez en su circuito, los flip-flops D aparecerán en algún estado aleatorio. Por lo tanto, debe asegurarse de que su circuito de alguna manera se encuentre en un estado razonable. Una forma de hacerlo es asegurarse de que alguna otra parte de su circuito establezca las líneas de configuración / reinicio correctas en sus flip-flops poco después del inicio (y tenga en cuenta que 000 no es no un estado válido en este caso.) Otra forma de hacerlo es asegurarse de que los estados de "no importa" en realidad conducen a estados válidos (eventualmente). (Esto también hace que su circuito sea más robusto a los errores transitorios). Así que asegúrese de que el estado 000 no haga la transición al estado 000 (o más perversamente, que no tenga transiciones que alternen entre estados no válidos, como 000- > 101- > 000.) Si la minimización de su lógica utiliza la función No importa para crear ciclos, puede interrumpir estos ciclos reemplazando la opción No importa por estados válidos.

Algunos recursos para ayudarlo a explorar más a fondo:

  • Lo siguiente surgió cuando busqué en Google "diseñando contadores". (Es de un libro de texto de Randy Katz que se utilizó ampliamente en las clases de diseño digital introductorio en la década de 1990. Esperemos que el enlace sea a una copia legal). La sección 7.2.2 en particular es lo que está buscando. enlace

Preguntas anteriores de electronics.stackexchange sobre temas similares:

respondido por el Wandering Logic

Lea otras preguntas en las etiquetas