¿Qué es el reinicio global automático en FPGA?

Recientemente hice una pregunta que terminó involucrando respuestas sobre una capacidad de reinicio global automático que tienen los FPGA, y aunque la pregunta se resolvió, todavía no tengo muy claro esto y me gustaría obtener más información. Traté de buscar en la web, pero no pude encontrar respuestas satisfactorias.

1) ¿Qué es exactamente esta capacidad de reinicio global?

2) ¿Por qué los FPGA tienen esta capacidad?

3) ¿Cómo infieren los FPGA esta capacidad?

4) ¿Podría proporcionar un ejemplo de código en el que la FPGA infiera el reinicio global y un ejemplo que utilice el mismo código en el que la FPGA no infiera el reinicio global?

Nota para los lectores: esta pregunta es una continuación de la pregunta anterior del usuario

Respuestas (2)

¿Qué es exactamente esta capacidad de reinicio global?

Es una función por la cual todos (o un conjunto designado) de los flip-flops en la estructura FPGA se restablecerán al inicio. Por lo general, ocurriría después de cargar la configuración, pero antes de que la lógica comience a funcionar.

¿Por qué los FPGA tienen esta capacidad?

Esto le permite al diseñador predecir (o elegir) en qué estado estará cada flip-flop cuando comience la ejecución de su lógica.

¿Cómo infieren los FPGA esta capacidad?

No tiene que ser inferido. Está diseñado en el hardware para que suceda automáticamente como parte del proceso de carga de la configuración.

El estado al que se restablece la lógica probablemente sea controlable por su código. Los detalles de cómo pueden depender del proveedor y la familia de FPGA que esté utilizando.

¿Podría proporcionar un ejemplo de código en el que la FPGA infiera el reinicio global y un ejemplo que utilice el mismo código en el que la FPGA no infiera el reinicio global?

En un FPGA que tenga esta característica, sucederá para cualquier código, sin necesidad de que aparezca ninguna estructura particular en el código.

Si hay una manera de deshabilitar esta función, la forma de aplicarla dependerá del proveedor de FPGA. Xilinx, Intel (también conocido como Altera), Lattice, Microchip (también conocido como Microsemi también conocido como Actel), etc., cada uno podría ofrecer una forma diferente de hacerlo. Puede requerir instanciar una instancia de controlador de reinicio en el código, o un comentario pragma en el código, o un indicador de línea de comando emitido a uno de los programas en la cadena de herramientas (tal vez tan tarde como la generación de archivos de bits). Puede estar deshabilitado de forma predeterminada o incluso no disponible (consejo para @JonRB). Consulte la documentación de su proveedor para obtener más información.

Nota: en referencia a su pregunta anterior , deshabilitar el reinicio global no resolvería su problema. Puede hacer que la ocurrencia del problema cambie de un día a otro, o cambie cuando vuelva a compilar su código, sin la capacidad de corregirlo. Debe usar un restablecimiento global, pero prográmelo para que se restablezca al valor correcto para su máquina de estado.

Xilinx FPGA tiene BRAM/flipflips iniciados a través de la configuración, Microchip FPGA no
@JonRB, gracias, nunca he usado Microsemi. (Supongo que te refieres a Microsemi, no a Microchip).
Me refiero a microchip como microchip compró microsemi (que compró Actel). Uso casi exclusivamente APA/A3P/Igloo2 y tuve un mes muy doloroso rastreando una corrupción aleatoria justo después del encendido que fue rastreada hasta una entidad que no restableció sus registros locales.
@JonRB, gracias, no me había dado cuenta. Microchip es sin duda una bestia que lo consume todo en los últimos años.

El "reinicio global" es muy específico de la familia FPGA, está más cerca de realizar un reinicio de estructura, es decir, reconfigurar el dispositivo

Para dispositivos Xilinx hay un PROGRAM_B

https://www.xilinx.com/support/documentation/user_guides/ug380.pdf

Restablecimiento asincrónico de chip completo activo-bajo.

Para Microchip Igloo2/SmartFusion hay DEVRST_B

https://www.microsemi.com/document-portal/doc_view/133847-ac406-configuring-igloo2-and-smartfusion2-devices-for-safety-critical-applications-application-note

En los dispositivos SmartFusion2 e IGLOO2, el controlador del sistema administra la inicialización del dispositivo, las operaciones de programación y maneja las solicitudes de servicio del sistema. Después de los eventos de reinicio de encendido o reinicio del dispositivo (DEVRST_N), el controlador del sistema realiza la secuencia de inicialización de los bancos de E/S, la estructura FPGA y MSS o HPMS.

NOTA: es posible que esto no establezca todos los registros/BRAM en cero, algunos dispositivos no garantizarán el estado de reinicio de los registros, por eso se recomienda SI el contenido del registro/BRAM es crítico que se use un estado de reinicio dedicado para predefinir el contenido

NOTA: dichas entradas no deben usarse como restablecimiento de propósito general ya que el chip puede ingresar a un estado de mayor consumo de energía. Esta entrada debe reservarse para si/cuando hay una condición de caída de voltaje en VCORE de modo que no se puede garantizar la configuración

https://www.microsemi.com/document-portal/doc_download/129979-ac393-board-and-layout-design-guidelines-for-smartfusion2-soc-and-igloo2-fpgas-application-note

Después de encender el dispositivo, si la aplicación afirma el pin DEVRST_N y no hay condensadores de desacoplamiento en la placa, se puede observar una sobretensión adicional en VDD durante la afirmación de DEVRST_N o durante una operación de verificación de resumen. Esta sección describe cómo minimizar la sobretensión adicional durante la operación de reinicio del dispositivo SmartFusion2/IGLOO2. Esta sobrecorriente adicional no ocurre durante el encendido del dispositivo; es aplicable solo cuando se afirma DEVRST_N.