Determine el orden en que las 3 entradas son altas

1

Especificaciones

Tres señales de entrada: A, B, C que son todas bajas cuando se reinicia

Solo una señal va alta a la vez. Una vez que la señal es alta, permanece alta hasta que se reinicie

Muestra el orden en que llegaron las tres señales. Puedes codificar esta salida como prefieras

Tipo de comparador de fase, pero con 3 entradas

Mi intento

Cree un FSM de Moore con 10 estados: inactivo, a, b, c, ab, ac, ba, bc, ca, cb. Los 6 estados de terminación corresponden a una de las 6 salidas posibles.

Siento que esto es una exageración para algo tan simple. ¿Alguien tiene un enfoque más elegante para abordar este problema? ¿Tal vez un fsm más pequeño? Tu sugerencia podría ser completamente ortogonal a la mía, siempre y cuando sea más simple.

    
pregunta frank_010

4 respuestas

2

Dave sugiere utilizar seis pestillos D (cuatro compuertas cada uno), pero solo necesitas un total de seis compuertas, o siete si deseas detectar cuándo todas las entradas son altas.

Un NAND SR-latch recordará su estado cuando ambas entradas estén altas. Cuando ambas entradas son bajas, ambas salidas son altas. Esto nos permite detectar que la salida no es estable.

Si no necesita detectar si ya se conoce el orden de las entradas, también es suficiente tomar una salida de cada par. Si desea saber cuándo todas las entradas son altas, agregue una puerta adicional de tres entradas en paralelo a los pestillos.

    
respondido por el John Dvorak
2

Un FSM asíncrono es una forma lógica de abordar esto, pero creo que sería más fácil (en términos de esfuerzo de diseño) simplemente emplear seis pestillos.

Los pestillos están dispuestos en tres pares, en los que cada señal de entrada atrapa los estados de las otras dos señales en el momento en que pasa a nivel alto. A partir de estas seis variables, es un simple problema combinatorio para decodificar los seis resultados posibles. Comience por descodificar las salidas de retención en cada par para determinar si el sginal de habilitación fue primero primero (ambos cierres bajos), segundo (un cierre o el otro es bajo) o tercero (ambos cierres altos).

simular este circuito : esquema creado usando CircuitLab

    
respondido por el Dave Tweed
2

Su respuesta es un poco más compleja de lo necesario

solo se necesitan tres bits de estado, dos para codificar el primer máximo, y otro bit para codificar cuál de los otros dos fue el segundo alto.

en otras palabras, los estados a, b, c pueden fusionarse con uno de los estados terminales.

state.  INPUT  result state

  0      010     1
  0      100     2
  0      011     3
  1      110     4
  2      101     5
 any     000     0

todas las demás entradas, mantener el estado actual.

    
respondido por el Jasen
1

Lo haría de esta manera ...

Simulator

    
respondido por el Trevor_G

Lea otras preguntas en las etiquetas