Construyendo un complementador de 2 (necesita ayuda para visualizar cómo hacer un diagrama de estado y una tabla)

2

Para ser justos, esta es una pregunta del examen anterior y fue una pregunta de asignación. Ya entregué la tarea y ahora estoy tratando de ver por qué me equivoqué: estudiar para mi final.

Entiendo completamente cómo encontrar el complemento a 2 de un número binario, sin embargo, implementar un circuito para encontrar el complemento me está volviendo loco. Me dieron un registro de turno (que almacena mi número binario) y un flip flop (usando D para simplificar). El proceso que sigo para construir circuitos secuenciales es el siguiente:

  • Miro la pregunta y obtengo un diagrama de estado.
  • Del diagrama de estado, dibujo una tabla de estado y encuentro la entrada de mis chanclas
  • Utilizo mapas y cosas para finalmente construir el circuito.

Estoy intentando visualizar cómo dibujar realmente el diagrama de estado para este complementador. Sé que depende del valor y las cosas anteriores, pero si alguien pudiera tomarse el tiempo de explicarle en inglés sencillo cómo construiría el diagrama de estado, estaría muy agradecido.     

pregunta n0pe

3 respuestas

9

El enlace que diste lo dice todo:

  

Sugerencia: - el complemento de 2 de un número puede   ser obtenido por mantener la menor   bits significativos como tales hasta que el   Primero 1, y luego complementando todo   bits

"ejemplo 001010 → 110110" es decir

   001010 -> flip bits -> 110101 -> add 1 -> 110110
msb     lsb             msb    lsb         msb    lsb


      msb    lsb
input   001010
output  110110
         <--- time

Así que hay dos estados: "No he visto uno todavía" y "He visto uno anteriormente". Dado mi estado y mi entrada actual, mi salida y el siguiente estado están completamente determinados.

Si mi estado actual es "No he visto uno todavía" y mi entrada es un 0, mi salida es un 0 y mi próximo estado es (todavía) "No he visto uno todavía"

Si mi estado actual es "No he visto uno todavía" y mi entrada es 1, mi salida es 1 y mi estado siguiente es (cambia a) "He visto uno anteriormente"

Si mi estado actual es "He visto un uno anteriormente" y mi entrada es un 0, mi salida es un 1 y mi siguiente estado es (aún) "He visto uno anteriormente"

Si mi estado actual es "He visto un uno anteriormente" y mi entrada es un 1, mi salida es un 0 y mi siguiente estado es (aún) "He visto uno anteriormente"

Escriba eso como una tabla de verdad que codifique "No he visto uno todavía" como 0 y "He visto uno anteriormente" como 1, y debería estar en casa.

Para "cablearlo", el bit de entrada de datos actual y el estado actual entran en la lógica que alimenta la entrada al D-flip flop y la lógica separada que alimenta la entrada al registro de desplazamiento, el D-flip-flop se mantiene la "variable de estado", y ambas están sincronizadas por el reloj de datos. Y para completar, necesita algún tipo de lógica de reinicio, que se deja como ejercicio para el lector. El "estado actual" es la salida del flip-flop D, y el siguiente estado es su entrada ...

       +----------------------------+
       |                            |
       |  +---------+     +-----+   |
       +--+ Logic A +-----+ DFF +---+
Data-+-|--+         |     |     |
     | |  +---------+     | CLK |
     | |                  +--+--+
     | |                     |
     | |                     +--------Clock 
     | |                  +--+--+
     | |  +---------+     | CLK |
     | +--+ Logic B +-----+     |
     +----+         |     | S R |
          +---------+     +-----+
    
respondido por el vicatcu
1

Ya sabes el complemento de 2 de cada uno de los valores binarios 0000, 0001, 0010, 0011, ... 1111, ¿verdad?

Hay al menos 2 formas de obtener el complemento de 2 de un número en un registro de desplazamiento SIPO:

  • lógica combinatoria directa. Tome los 4 bits del valor, (simultáneamente) invierta todos los bits y (simultáneamente) agregue uno. (Creo que un montón de circuitos de media sumadora son adecuados aquí, puede copiarlos de su libro de texto, ¿verdad?) No hay un flip-flop u otro estado interno con este enfoque.

  • Incrementador serial. Comenzando con el bit menos significativo, cambie un bit a la vez a un incrementador en serie (un solo medio sumador y un solo flip flop en D). El incrementador en serie genera (un bit a la vez), a partir del bit actual del registro de desplazamiento y un bit Carry_in, el bit Carry_out y el bit Sum. Cada ciclo de reloj, el bit Carry_out antiguo se engancha en su flip flop D y se convierte en el bit Carry_in nuevo, y el bit siguiente sale del registro de desplazamiento. Luego, la lógica combinacional de media sumadora los combina para producir otro bit de Carry_out y un bit de Suma. (El flip-flop también necesita alguna forma de restablecer el bit de acarreo que mantiene a "1" cuando se comienza de nuevo con el bit menos significativo de un nuevo número).

Al agregar 2 bits, Carry_out es 1 solo cuando ambos bits son 1; de lo contrario, el Carry_out es cero.

    
respondido por el davidcary
-3

El diagrama de estado es solo el resultado al siguiente

para un contador de conteo mod 3, el diagrama de estado sería

000 - > 001 - > 010 - > de nuevo a 000

ya que cuenta de 0 a 2 y se reinicia en 3

    
respondido por el ricedragon

Lea otras preguntas en las etiquetas