Multiplicación y división de FPGA

1

Background

Estoy tratando de estimar la velocidad de un codificador de cuadratura con la siguiente ecuación

v = Δx/Δt

Δx es un entero con signo de 16 bits y Δt es un entero sin signo de 16 bits. | Δx | se garantiza que sea < = Δt para que | v | < = 1.0. Ambos se muestrean a una velocidad de 16MHz.

Deseo que la salida esté en un formato de punto fijo Q8.9 (18 bits) firmado en unidades que difieran de las que ocurren naturalmente. Para lograr esto, planeo implementar alguna forma de la siguiente aritmética.

final_v = ((current_x - old_x) / (current_t - old_t)) * (2^9 * 160)

donde 2 ^ 9 promueve la parte fraccionaria de la división al formato Q8.9 y 160 es el factor que necesito para obtener las unidades deseadas.

Estoy implementando esto con verilog y Vivado 2016.2 en un ArtGA-35T FPGA y planeo usar el IP del Divider Gererator y el Multiplicador de Xilinx para hacer la multiplicación y división por mí y me gustaría minimizar la latencia tanto como sea posible (el rendimiento es no es tan importante).

La pregunta

¿Se preferiría multiplicar por la constante (2 ^ 9 * 160) primero y luego dividir o al revés o hay un algoritmo mejor que debería estar usando? ¿Hay errores comunes que debería tener en cuenta?

    
pregunta Nicholas

0 respuestas

Lea otras preguntas en las etiquetas