Implementando la gravedad en VHDL y VGA.

1

Estoy trabajando en un proyecto vhdl / fpga usando el módulo vga. Estoy tratando de hacer que un objeto caiga con una aceleración (gravedad). Encontré una respuesta a otro problema, y sugiere implementar algo similar a estas ecuaciones:

  

Position_next < = Position_reg + timestep * Velocity_reg;

     

Velocity_next < = Velocity_reg + timestep * Aceleración;

Donde la configuración de tiempo en mi caso es el tiempo de fotograma, que es 1 / 60fps. La aceleración (gravedad) va a ser un número constante. El resultado de las dos ecuaciones es un punto flotante. Lo que es un problema, ya que el paso mínimo que puede tomar mi objeto es de 1 píxel por fotograma. Cualquier idea de cómo resolver este problema.

    
pregunta atarief

2 respuestas

2

Entre flotantes (difíciles de implementar, hambrientos de recursos) y enteros (sin suficiente precisión), hay un intermedio: se llama punto fijo matemáticas. El punto fijo no es mucho más difícil que trabajar con los enteros. Y es suficiente en tu caso.

La idea básica es que representes cada valor con un número entero. La correspondencia entre ambos se realiza simplemente multiplicando o dividiendo por un valor fijo (generalmente una potencia de dos, para facilitarlo). Por ejemplo, si establece la relación en 256, eso significa que el valor 1.5 se representará con el número 16 # 180 # . Debido a que 180 en hexadecimal (= 384 en dec) dividido por 256, hace 1.5 . Otra forma de verlo es que el número almacenado representa un número integral de unidades 1 / 256th.

Esto significa que la implementación de la suma y la resta no cambia en comparación con la implementación de enteros habitual. La multiplicación es muy similar a la multiplicación de enteros clásica, solo tienes que dividir por tu relación después (o simplemente desplazar el número correcto de bits si es una potencia de dos).

La única opción que se puede hacer, entonces, es elegir la proporción de manera adecuada para que pueda representar con precisión los valores que necesita en su caso específico.

    
respondido por el dim
1

Los distribuidores de FPGA a menudo proporcionan núcleos IP que pueden realizar operaciones de punto flotante. Por ejemplo, Intel / Altera proporciona un grupo de núcleos IP de punto flotante:

enlace

Puedo decir que funcionan como he hecho una calculadora de fractales en tiempo real con esos.

    
respondido por el lucas92

Lea otras preguntas en las etiquetas