¿Cómo hacer que un sistema basado en FPGA verifique que se haya reiniciado?

0

Tengo un sistema basado en el dispositivo MAX10 de Altera que realiza las siguientes tareas:

  1. recibe los datos y los almacena en una memoria flash en chip solo una vez.
  2. lee todos los datos del flash en chip, los almacena en un registro 2D y los transmite a otro sistema a una cierta frecuencia.

La primera parte (es decir, lee todos los datos de flash en chip, los almacena en un registro 2D) de la segunda tarea se realiza solo una vez, pero si el sistema se restablece, debe leer nuevamente desde el flash. Ahora, ¿cómo puedo verificar si el sistema se ha reiniciado, y después de reiniciarlo, si antes se guardaron o no datos en la memoria? Además, no quiero realizar una operación de lectura flash para verificar si el sistema se ha reiniciado o no y si los datos se han guardado en la memoria o no, debido a su costo de tiempo. Apreciaría cualquier idea.

    
pregunta SMS

1 respuesta

2

Nota importante: esto es imposible de resolver. Como mencioné en un comentario: esperar que el estado interno se corrompa y agregar más estado interno para detectar la corrupción conduce invariablemente al nido de avispas.

Dicho esto, hay un precedente para hacer esto: spaaaaace. Los chips que se envían al espacio requieren que cualquier estado interno pueda corromperse de cualquier forma sin que se bloquee el chip. En general, solo los errores de un solo bit deben ser detectados y reparados por los estándares ESA / NASA, pero el código se escribirá para detectar tantos de ellos como sea posible.

Las soluciones deben tener en cuenta dos corrupciones principales:

Una codificación en caliente para máquinas de estado con un estado seguro Codifique todas sus FSM utilizando una técnica de codificación en caliente y comience desde un estado de restablecimiento seguro que precede a su estado inicial. Cuando detecte una codificación imposible, siempre vuelva a ese estado de reinicio. Tenga en cuenta que esto no significa que no pueda usar tipos autodefinidos para estados en VHDL, el uso correcto de when others => y sus herramientas de síntesis pueden hacerlo por usted.

Verifique sus datos Tenga una condición adicional al escribir los datos en el siguiente sistema: los datos que prepara para enviar cheques. Si no es así, recargas. Dado que esta suma de comprobación se puede realizar sobre la marcha en prácticamente todos los FPGA modernos, no es necesario un estado adicional. Los paquetes CRC se pueden descargar a través de la web (por ejemplo, aquí )

Estas dos soluciones combinadas con un diseño limpio capturan todo el estado que el sistema que usted describe debe contener, si hay más, eso es simplemente un mal diseño. Por supuesto, las fallas eléctricas ni siquiera le darán una garantía de que su flujo de bits sobrevivió con un MAX10.

    
respondido por el DonFusili

Lea otras preguntas en las etiquetas