Memoria FPGA vs registros

0

Tengo un problema con un proyecto de FPGA en el que estoy trabajando. No puedo escribir en memorias definidas dentro del FPGA, pero escribir en registros funciona bien. Estaba pensando en solucionar este problema simplemente utilizando registros como memoria. Solo necesito almacenar un máximo de ~ 1024 bits a la vez, y hay un montón de espacio de registro disponible en el FPGA. El FPGA en cuestión es un modelo de Altera Cyclone III si eso marca la diferencia.

¿Hay alguna desventaja en el uso de registros en comparación con la memoria que estoy pasando por alto?

    
pregunta Peyton B

2 respuestas

2

Los elementos de almacenamiento reales para registros y RAM en un FPGA son los mismos. Lo que importa son los recursos de enrutamiento disponibles. La RAM se puede considerar como una matriz dedicada de registros con un número relativamente pequeño de líneas de señal que controlan una gran cantidad de registros. Esto le permite manejar una gran cantidad de datos sin utilizar una gran cantidad de recursos de interconexión, que en realidad son el factor limitante en los FPGA.

Entonces la respuesta es, sí, puedes usar registros en lugar de RAM. Y no, usar 1024 de ellos no es una gran idea, ya que es probable que absorba mucho de su FPGA, tanto en celdas funcionales como en velocidad de operación.

Es mucho mejor averiguar cómo usar tu RAM.

    
respondido por el WhatRoughBeast
0

En términos generales, hay tres formas distintas de instanciar el almacenamiento en un FPGA, aunque también tienen sub-variedades. Sin su intento explícito de salida de HDL o error, es imposible saber qué sucedió, pero puede valer la pena realizar una copia de seguridad y comprender las posibles opciones:

Almacenamiento en la tela : si solo describe en un código HDL algo que actúa como almacenamiento, en el caso de una cadena de herramientas más simple, se implementará en la estructura lógica del FPGA. La mayoría de las implementaciones tienen en su nivel celular básico una combinación de lógica (generalmente a través de una tabla de consulta) con un flipflop en la salida de la celda, y por lo tanto es posible almacenar algunos bits en esos flipflops de salida. Combine la cantidad suficiente de estas unidades y obtendrá un tamaño de almacenamiento de tamaño pequeño a mediano, y la mayoría de los chips pueden admitir mucho más que sus necesidades limitadas. También tiene la mayor flexibilidad de esta manera: puede tener múltiples puertos de lectura y escritura (por ejemplo, 3 puertos en un archivo de registro de CPU clásico) y la mayor flexibilidad en la temporización y la sincronización del reloj, por ejemplo, mientras que generalmente es una mala idea es posible que pueda salirse con la suya utilizando un strobe de escritura en lugar de un reloj y escriba habilitar .

Creación de instancias explícita de bloques de memoria Debido a que el almacenamiento en la estructura es ineficiente, la mayoría de los FPGA también incluyen bloques sustanciales de lo que es básicamente RAM estática sincrónica, sin la lógica que se transmite a través de él. Esto tiende a ser mucho más flexible que las memorias RAM de IC discretas, por ejemplo, a menudo es de doble puerto y tiene varias opciones de ancho y temporización, pero hay restricciones en la forma en que se puede usar . Si observa la documentación de FPGA, encontrará cuáles son los prototipos de funciones efectivas para las diversas configuraciones, y puede elegir uno para incluirlo explícitamente en su código HDL. Algunos FPGA incluso incluyen varios tipos de RAM de bloque en el mismo chip con diferentes tamaños y restricciones, por ejemplo, aquellos que pueden y no pueden tener contenidos inicializados desde el flujo de bits para funcionar como una ROM, tal vez (?) Aquellos que son solo un puerto único, aquellos que tienen varios tiempos, etc.

Almacenamiento inferido Las cadenas de herramientas FPGA modernas intentan ser bastante inteligentes, por lo que si su código describe el comportamiento compatible con uno de los Bloques de Memoria, la herramienta puede implementar lo que usted describió al aprovechar uno. o más de los bloques de memoria del hardware en lugar de implementarlo en el tejido. Sin embargo, cambiar un pequeño detalle podría hacerlo incompatible y forzar una implementación en el tejido. A menudo, habrá configuraciones de síntesis que determinarán si intentará hacer esto, y el informe de síntesis es donde descubrirá lo que realmente ha hecho.

    
respondido por el Chris Stratton

Lea otras preguntas en las etiquetas