Implementación de FPGA de Matrix Inverse en el tablero Basys 3 [cerrado]

0

Por lo tanto, estamos implementando el cálculo inverso de 8 * 8 matrices utilizando la descomposición de LU en un FPGA Basys 3 Artix 7:

enlace

1) Tras la síntesis y la implementación, encontramos que el consumo de LUT y los inconvenientes de E / S son extremadamente altos y superan en gran medida. Los valores se tabulan a continuación:

Consumption       Number Available in the Basys3 board
LUT    173897     20800
IO        931     106
DSP        90     90
FlipFlop 3743     41600

¿Cómo puedo optimizar la cantidad de LUT e IO consumidos?

MÁS INFORMACIÓN:

Usamos una representación de 8 bits para cada elemento de la matriz y el código usa muchas variables temporales dentro de las declaraciones para obtener los resultados intermedios.

Los módulos son los siguientes: En el módulo superior, calculamos la descomposición de LU de la matriz de entrada y luego pasamos las matrices L y U al módulo que calcula lo inverso. Luego pasamos los valores resultantes al puerto de salida.

2) Nos preguntamos cómo pasar la matriz como entrada al FPGA.

Consideramos dos opciones:

a) Serialización completa de la entrada (transmitir los bits a través de una conexión UART desde la computadora) y desarrollar un circuito de decodificación apropiado para asignar las entradas en consecuencia en el tiempo de ejecución. Estamos preocupados por el consumo de hardware, ya que ya hemos excedido los límites de consumo.

b) Ingresando los valores en la computadora y almacenando la entrada en la memoria RAM, leyendo los valores de la memoria RAM y enviándolos a nuestro programa. Nos referimos al siguiente enlace: enlace , pero la respuesta no fue muy clara sobre cómo abordar cada uno de los métodos paso a paso. (Por ejemplo, cómo crear una GUI (si es necesario) para pasar los valores de entrada y luego pasarlos a la placa y almacenarlos en una memoria RAM y leer de la RAM) y cómo incorporar el código (para leer o escribir en la RAM) en un código fuente (si es necesario). También me referí un poco a este manual: enlace , pero como soy un completo novato, no estoy seguro de cómo proceder.

Proporcione un procedimiento paso a paso sobre cómo pasamos y almacenamos la matriz como una entrada y leemos y almacenamos los resultados en una salida, cualquier enlace a las IP relevantes que se pueden incluir en el código y cualquier referencia adicional que podemos aprender de

Gracias.

    
pregunta thegreatcoder

1 respuesta

2

Sospecho que tienes varios problemas, pero mi bola de cristal está en servicio en este momento, por lo que ver el código es un poco complicado. ¿Cómo se ve el tipo data_mat?

Creo que probablemente tenga entradas y salidas definidas como 8 bits por 64 elementos de matriz = 512 pines más o menos, claramente no va a funcionar.

Lo que probablemente funcionaría sería declarar un ram de bloque de 64 * 8 y luego cargarlo utilizando un bus de datos de 8 bits y un bus de selección de direcciones de 6 bits más un strobe, de esa manera puede obtener los datos en varios relojes uno valor a la vez utilizando solo 15 pines.

Ahora en la lógica: La compensación habitual en un FPGA es el espacio para la latencia, y sospecho que, debido a ese enorme lío de lógica, está intentando obtener un resultado en un ciclo de reloj extremadamente lento. También veo operaciones de división allí que se convierten en un lío de lógica. .

Parece que estás escribiendo VHDL como si fuera un software, esto siempre es un error, deberías estar describiendo un circuito lógico que no intenta escribir un programa, una forma de pensar fundamentalmente diferente.

Me gustaría que una máquina de estados hiciera un paso de cada uno de los dos bucles externos por reloj con un par de señales 'disparador' y 'hecho' para controlar la cosa, de manera similar, la división podría ser una mezcla de tablas de búsqueda y cambio las operaciones que pueden completarse o no en un solo ciclo, dependiendo de cómo se negocie esto, tal vez podría canalizarlo.

¿Cuáles son tus objetivos para thruput y latencia?

    
respondido por el Dan Mills

Lea otras preguntas en las etiquetas