División de punto fijo en verilog para Spartan 6

1

Estoy desarrollando un núcleo en Spartan 6 que necesita hacer divisiones como 1 / 6,2 / 4 etc ... así que los valores siempre están entre 0 y 1. Como no necesito la precisión del punto flotante, quiero usar un divisor de punto fijo, ya que la división es costosa. Encontré algunos divisores en opencores.org pero todos ellos pueden computar problemas de división normal como 4 / 2,8 / 4, etc ... pero no pueden hacer 1/6 de tipo de operaciones. ¿Alguien puede apuntar a un divisor adecuado para mi aplicación?

Gracias

    
pregunta 8A52

1 respuesta

3

Usted dice que ha encontrado divisores que hacen una división "normal". La división de punto fijo es división normal, excepto que el dividendo debe ampliarse (desplazarse a la izquierda). Cambie el dividendo a los 8 lugares a la izquierda (multiplique por 256), luego haga una división normal. El resultado fraccional de punto fijo es igual al resultado entero de la división, dividido por 256. Entonces, si desea calcular 1/6, realmente dividirá (1 * 256) / 6, que es 42. El resultado real es por lo tanto, 42/256 = 0.1640625, que está razonablemente cerca del valor verdadero de 0.1666 ... Normalmente diríamos que este resultado es un número de punto fijo con 8 bits a la derecha del punto decimal. Si desea una mayor precisión, utilice un factor de escala mayor.

    
respondido por el Joe Hass

Lea otras preguntas en las etiquetas