Circuito secuencial que se divide por 5

-2

¿Cómo se podría hacer para construir un circuito secuencial que produzca una salida de 1 si la secuencia de entrada de bits binarios es divisible entre 5? He estado atormentando mi cerebro en esto por un tiempo pero no puedo entenderlo. Durante mucho tiempo pensé en mirar los últimos 4 bits y ver si equivalen al decimal 5 o 0, pero luego me di cuenta de que no funcionaría en absoluto. Algo así como: 001110000000 es 896 en decimal, así que no vayas allí. Mi circuito también debe poder manejar cualquier número de bits de entrada. ¿Alguien puede darme algunos consejos sobre cómo abordar esto?

    
pregunta samz_manu

3 respuestas

4

Algunos consejos para señalarle en la dirección correcta (ya que esto es claramente un curso):

  • Agregar un 0 al final de un número binario tiene el efecto de multiplicarlo por 2. Agregar un 1 lo multiplica por 2, luego agrega 1.

  • Para que un número x sea divisible por 5, x % 5 = 0 (donde % es el operador de módulo).

  • Considere cómo se verían (x * 2) % 5 y (x * 2 + 1) % 5 para los cinco casos x % 5 = 0 , x % 5 = 1 ... x % 5 = 4 . Dibújalos como un diagrama de estado. Ahora implementalo en hardware.

respondido por el duskwuff
0

Lo que estás viendo es una operación de módulo , que es el resto después de la división. Hay algoritmos de hardware para esto, pero los rápidos no son tan simples.

Si calcula x% 10 obtendrá un número del 0 al 9 para el módulo. Si el módulo es 0, sabes que es divisible por 5 o 10, si es 5, sabes que es divisible solo por 5

La forma más simple (y la menos eficiente para hacer grandes números) de hacer división es mediante la resta repetida. Si restas 10 (0x0A) de tu número desconocido hasta que el resultado sea menor que 0x0A, tienes el módulo. Para la división, mantendrías un registro de la cantidad de veces que restaste 0x0A, pero en este caso no necesitas hacer un seguimiento, ya que solo estás interesado en el resto, no en el cociente.

Puedes usar la calculadora de Google para jugar con esto, simplemente escribiéndolo en la ventana de búsqueda:

  

896% 10

para su ejemplo ... dando un resultado de 6.

    
respondido por el Spehro Pefhany
0

Esto es solo para expandir la respuesta de duskwuf, para hacerlo un poco más claro, sin revelarlo todo.

La idea es que puedes cambiar el número bit a bit, comenzando con el bit más significativo, y cada vez que cambies, puedes estar en uno de los cinco estados (uno para cada módulo posible 0 ~ 4), y después de cambiar en todos los bits, el estado en el que se encuentra determina si es divisible entre 5.

Las sugerencias se tratan de averiguar qué es el diagrama de estado, cada vez que se desplaza en un bit nuevo.

Por ejemplo, empiezas en el estado 0, y comenzarás a cambiar en tu número de ejemplo 001110000000 .

Sus estados irían de la siguiente manera:

Number: 001110000000
State : 001324312431

Después de cambiar en el último bit, el estado se convierte en 1 (como en el módulo 5 siendo 1), por lo que el número no es divisible entre 5.

Las reglas para determinar el diagrama de estado se basan en el hecho de que cada vez que ingresa un bit, se multiplica por 2 y se agrega 0 o 1, dependiendo del nuevo bit que se esté cambiando. El siguiente estado solo depende en el estado anterior y el nuevo bit, por lo que el hardware es muy simple. La desventaja es que necesita tantos ciclos de reloj como bits de entrada. Pero como no se han especificado restricciones, no hay problema.

Es posible que deba agregar un contador de bits y / o algún tipo de señal de sincronización.

    
respondido por el apalopohapa

Lea otras preguntas en las etiquetas