¿Hay una manera de almacenar matrices en un FPGA?

0

Acabo de terminar un curso de Coursera sobre diseño de hardware (nand2tetris) y quiero dar el siguiente paso e implementar el diseño en un FPGA. Al ser bastante nuevo en el aspecto de hardware de la informática en general, necesitaba aclarar algunas preguntas con respecto a la memoria. En particular, quiero implementar un diseño de memoria que esté organizado en matrices cuadradas de registros de 16 bits de ancho. Se podría acceder a los datos especificando una matriz y luego una fila o columna (con el objetivo de acelerar la multiplicación de matrices). Sin embargo, no estoy seguro de que tal diseño se ajuste a un FPGA (creo que puedo permitirme a lo sumo un Cyclone V o algo equivalente). Dado que las GPU se pueden implementar en los FPGA, debe haber una forma más eficiente de hacer esto que no requiera usar los flip flops D en cada elemento lógico para almacenar un bit de un registro individual. Si no lo hay, ¿cómo manejan las personas las matrices de datos en paralelo en los FPGA? Cualquier información sería realmente útil y, dado que se trata de un ejercicio puramente pedagógico, se agradecen los indicadores de los materiales de aprendizaje sobre el tema.

    
pregunta Guacho Perez

1 respuesta

2

Es probable que su 'recurso más limitado' sea el número de multiplicadores en el FPGA.

Su lógica de multiplicación de matrices consistirá en un flujo de números leídos de una fuente, alimentados en un paquete de multiplicadores y el resultado se almacenará de nuevo.

El acceso bidimensional es más fácil de implementar utilizando el registro, aunque también usa mucha lógica para seleccionar las salidas. He implementado una memoria bidimensional usando chips de memoria estándar (unidimensional) pero eso fue patentado. Creo que solo necesitarás pasar un ciclo 'girando' la matriz. O sé listo cómo escribes el resultado. Incluso podrías considerar almacenar cada matriz dos veces.

Estoy más preocupado por la precisión.
No tengo idea de cuáles son sus números, pero sí recuerdo a las universidades de la Universidad de Delft acerca de los problemas con el mantenimiento de la precisión cuando se usan repetidamente números de punto flotante. En su caso, será peor porque el multiplicador en un FPGA tiene solo un número limitado de bits enteros. A menos que quiera implementar una masiva multiplicación paralela de punto flotante.

    
respondido por el Oldfart

Lea otras preguntas en las etiquetas