Estoy trabajando en un proyecto FPGA donde una CPU host escribe una tabla de consulta de 10,240 x 16 bits en la lógica FPGA. Para implementar esto, he utilizado memoria en chip para almacenar los valores y leerlos cuando esté listo.
Un pulso de activación / activación externo inicia un ciclo de procesamiento que dura varios cientos de miles de ciclos de reloj. Una vez que obtengamos este desencadenante, el estado de la LUT de 10,240x16 debe ser congelado o enganchado, para que pueda utilizarse durante el ciclo de procesamiento. Desafortunadamente, los datos deben estar disponibles bastante pronto después de este pulso "IR", por lo que no hay tiempo suficiente para hacer una copia completa del búfer.
El host también debe poder actualizar continuamente algunos valores de la tabla de consulta mientras se ejecuta el ciclo actual, para poder configurar el siguiente ciclo de procesamiento. Para permitir ambos casos (enclavar el estado de la tabla de búsqueda, pero también dejar que el host lo actualice cada vez), creo que el estilo de ping / pong de doble búfer es el camino a seguir: el host escribe en un búfer hasta que lleguemos a "GO" comando, entonces el host escribe al otro. La lógica FPGA siempre lee el búfer que no se está escribiendo.
Sin embargo, dado que el host no está reescribiendo todos los valores 10,240x16 cuando realiza sus actualizaciones esporádicas, el búfer que no se está escribiendo está esencialmente "eliminando" las actualizaciones mientras está congelado.
¿Hay una forma novedosa de manejar este escenario? Estoy pensando que debe haber algún tipo de proceso de resincronización del búfer una vez que el búfer está descongelado.