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.