Quiero implementar una ecuación matemática en FPGA, ¿debo describir una CPU o puedo hacerlo solo por código?

6

Para un proyecto escolar, estoy tratando de implementar una ecuación, por ejemplo: ( EDIT )

B = ((A + 2) * |A - 10|) / (c * c)

todo es valores binarios sin signo, valores absolutos siempre. La ecuación debe evaluarse 57600 veces por segundo para una imagen de 240x240 píxeles.

No sé cómo iniciarlo. ¿Sería mejor implementarlo haciendo un procesador MIPS y cargando una lista de instrucciones del programa en ensamblaje, y así?

¿O debería hacer un acercamiento directo por código? Si es así, ¿qué metodología debo seguir, debo hacer FSM? ¿Debo usar relojes?

Intenté programarlo mediante una combinación fácil (asignar ... etc) y funciona, pero usa casi el 80% de los ALM disponibles. No creo que esta sea la mejor manera, estoy buscando que sea el menor uso posible de hardware, el tiempo no es una restricción. Estoy usando Quartus II y Verilog.

    
pregunta sujeto1

1 respuesta

4

Dependiendo de lo que quieras aprender, hay muchos enfoques posibles.

Dice que el diseño combinatorio completamente paralelo funciona y encaja en su FPGA. ¡Resultado! Muchos estudiantes se detenían allí y lo escribían. Sin embargo, parece que sientes que esto no está en el espíritu del proyecto.

Crear tu propio diseño de procesador desde cero sería un proyecto 100 veces el tamaño de lo que estás intentando, al menos para un núcleo de propósito general. ¿Usar un núcleo de procesador VHDL existente quizás sería demasiado fácil? Diseñar una ALU con solo las instrucciones necesarias para estos cálculos sigue siendo un gran desvío.

El primer lugar que buscaría para comenzar a serializar el diseño es dividir por c al cuadrado. La división es una operación que es muy costosa o imposible de realizar como las tablas de consulta de ancho completo. De poco a poco el desplazamiento-resta es quizás la forma principal. Busque COORDIC como una forma alternativa de mecanizarlo. También es posible que desee considerar el desplazamiento y la resta de bytes o nybble, como un método alternativo de implementación, con un uso de recursos y latencia en algún lugar entre los dos métodos anteriores.

Tal vez podría considerar la implementación de la aritmética en serie como un ejercicio, con el fin de ahorrar espacio. Mantenga las variables en los registros de desplazamiento y cíclelos a través de un bit ALU + carry, LSB primero. Todo tipo de problemas interesantes de la máquina de estado para resolver.

    
respondido por el Neil_UK

Lea otras preguntas en las etiquetas