implementación de hardware del algoritmo de división

3

He intentado mucho, pero no entiendo cómo funciona este algoritmo. Explique el diagrama de flujo.

\ $ DVF \ $ es el flip flop de desbordamiento por división.

\ $ A_s \ $ es el bit de signo de \ $ A \ $

\ $ B_s \ $ es el bit de signo de \ $ B \ $

\ $ E \ $ es el registro que tiene un bit de acarreo

Inicialmente, la operación XOR se lleva a cabo para verificar si los bits de signo de dos números son iguales.

El dividendo es \ $ A \ $ y \ $ Q \ $ y el divisor en \ $ B \ $. El signo del resultado se transfiere a \ $ Q_s \ $ para formar parte del cociente. \ $ SC \ $ es el contador de secuencia.

No puedo entender la secuencia de operaciones. ¿Qué sucede después de que se comprueba el bit de acarreo en 1 o 0?

    
pregunta Suhail Gupta

2 respuestas

2

Los diagramas de flujo a menudo no son una forma muy precisa de indicar qué hardware está haciendo, ya que los diagramas de flujo a menudo implican la existencia de un proceso de ejecución único, mientras que el hardware a menudo realiza muchas operaciones simultáneas y superpuestas.

Las partes del diagrama en un círculo en rojo parecen un poco extrañas. Parece extraño enclavar A con el valor después de restar B, y luego volver a agregar B. Más natural sería simplemente no molestar en enclavar la parte inferior del resultado de la resta. Creo que el diagrama de flujo podría ser más claro si los "valores nombrados" se separaran en "registros" y "valores", y en cada paso se calculen valores o registros. Así, por ejemplo, uno podría tener algo como (suponiendo registros de 16 bits)

C:T[15..0] = (A[14..0]:Q[15]) + ~B-1
if (C or A[15])
  A[15..0] = (A[14..0]:Q[15])
  Q[15..1] = Q[14..0]
  Q[0] = 1
Else
  A[15..0] = T[15..0]
  Q[15..1] = Q[14..0]
  Q[0] = 0
Endif

Cada paso que actualice los registros representaría un reloj del sistema. Los eventos que simplemente calculan valores no requieren un margen de reloj, sino que se procesan de forma asíncrona.

    
respondido por el supercat
2

\ $ EA \ leftarrow A + {\ neg B} + 1 \ $ es la suma de 2 complementos de A y B (absoluta), eso significa que está restando B de A. Luego, si tiene un bit de acarreo significa que el resultado es negativo, y | B | es más grande que | A |. Como probablemente la división es un número entero, no puede dividir un número por uno más grande y devuelve un desbordamiento, lo que probablemente debería significar que el resultado es 0.

De lo contrario, B se suma nuevamente a A (parece extraño, podría guardarlo en un registro en lugar de restar y sumar el mismo valor), y luego ingresa en un bucle:

La división se calcula un bit a la vez, por lo que creo que la operación de cambio debería ser un desplazamiento a la derecha, por lo que a partir del bit más significativo del cociente, verifica si el divisor está contenido en el dividendo.

    
respondido por el clabacchio

Lea otras preguntas en las etiquetas