Valor inicial o indefinido de flip flop

Estoy modelando circuitos digitales usando circuitos integrados en un software. He trabajado con chanclas y contadores, pero no lo recuerdo bien. ¿Cómo modelo el valor indefinido o inicial del flip flop (SR o JK, etc.)? tengo tres opciones

  1. Estado '0' para todos los nodos no inicializados
  2. asigne un valor aleatorio '0' o '1' al nuevo nodo
  3. generar un mensaje de error y pedirle al usuario que borre o preestablezca el flip flop

Considere también un flip flop JK, si la entrada del usuario es '0' y '0', la salida es 'Q' y 'Q bar'. ¿Qué valor le asigno en este caso? '0' y '1'? Este es el caso inicial, es decir, el circuito se ha realizado y la consola acaba de encenderse.

Por favor comparte tu experiencia.

Respuestas (3)

En algunos tipos de simulación, cuantos más estados, mejor. Si está haciendo solo lógica síncrona de un solo reloj, sugeriría tres estados (alto/bajo/indefinido), pero expanda la lógica del flip flop JK para incluir el cálculo completo del siguiente valor. Por ejemplo, si se tiene un circuito en el que las entradas J y K están ligadas al AND de la salida y una señal de RESET, se debe aplicar output := (J & !output) | (!K & output), de modo que el término anterior se anule, quedando output := !RESET & output, cuyo valor estaría bien definido si el reinicio es alto, incluso si outputno está definido.

Si está tratando de hacer una simulación en tiempo continuo, se necesitarán muchos más estados, incluidos 'ascendente', 'descendente', 'desconocido estable', 'desconocido inestable', etc. con algunas tablas de verdad complicadas que dependen de los estados anteriores de entradas, así como los estados actuales (por ejemplo, 'aumentando: alto y aumentando: alto == ascendente', pero 'aumentando: alto y alto: cayendo' == 'desconocido inestable'), ya que la primera señal podría o no tener se elevó lo suficientemente pronto como para generar un pulso alto en la salida.

Vaya, acabas de dar que pensar. Pretendo el simulador de tiempo continuo, así como el tiempo único (anteriormente en forma de tabla de verdad, luego como una entrada de interruptor de palanca interactiva).
@VinayakGarg: La simulación digital en tiempo continuo plantea algunos problemas complicados. Muchas simulaciones simplemente asumen que la salida de una puerta cambiará en un momento determinado después de que la entrada cambie; de alguna manera, un modelo más útil haría que la salida se volviera "indefinida" después del retraso mínimo de propagación y luego cambiara al valor correcto después del retraso máximo. Aunque dicho modelo tiene la ventaja de que un circuito cuyo comportamiento de simulación coincida con el deseado funcionará casi con seguridad, hay muchos diseños que funcionarían en la práctica...
@VinayakGarg: ... pero en la simulación simplemente haría que todos los nodos aparecieran "indefinidos". Hacer que el modelo sea útil y al mismo tiempo capturar el comportamiento del "peor de los casos" es algo complicado y requiere agregar muchos estados adicionales.

En general, hay dos enfoques que los simuladores pueden usar para algo como esto:

1) Asignar o asistir en la asignación de un estado inicial

2) Simule con 3 (o más) lógica de estado, una de las cuales es "indefinida", y haga que la entrada indefinida se propague a través de toda la lógica dependiente produciendo salidas indefinidas. Este es un enfoque bastante común: construya una máquina de estado en Verilog, ingrese una declaración para que el simulador imprima la variable de estado y vea que muestra "x" hasta que se defina todo lo que influye en ese valor. (En el caso de su Q y /Q, ambos serían indefinidos)

+1 He usado VHDL, así que tal vez pueda responder a mis preguntas.
Como usuario de tales simulaciones, prefiero 2. Tener 'desconocido' como tercer estado, y hacer que se propague (y en algunos casos raros, se genere) de acuerdo con las reglas obvias 0 + u = u + u = u, 1 * tu = tu * tu = tu.

Iría con el aumento de un error y me negaría a simular.

Tener una entrada flotante nunca es una buena idea.

+1 esa es la forma preferida, pero ¿puede haber una situación en la que un usuario no tenga salida?
Por supuesto, debe conectar a tierra todas sus entradas flotantes. Incluso en partes del chip que no se utilizan.
Por favor, aborde mi preocupación más importante, he actualizado mi pregunta.
¿Por qué no averiguarlo experimentalmente? Tome un chip JK, colóquelo en una placa de prueba, conecte a tierra las entradas, enciéndalo y vea cuáles son las salidas.
@Majenko: no está especificado. Incluso si lo descubre experimentalmente, no hay garantía de que siempre lo haga. (Además, ¿de qué "entrada flotante" estamos hablando?)
Las entradas no definidas no estarán definidas si no las define.
las entradas que no se utilizan a veces necesitan ser puestas en alto, no puestas a tierra. pines de interrupción bajos activos no utilizados, por ejemplo.
@Majenko: Desafortunadamente, un IC o una placa de prueba no están disponibles para mí en este momento :( Tal vez por eso estoy creando este software :D
@Majenko ¿Qué sucede si desea inicializar el FF 1 uS después de que comience la simulación? Eso es algo completamente válido para hacer en la vida real (tm). La simulación no debería negarse a ejecutarse. En su lugar, debe tener en cuenta que el FF está en un estado indefinido, pero de lo contrario simula.