Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🛰️ Space-Grade UART Controller in VHDL

VHDL Python Simulator Status Standard

📌 Resumen del Proyecto

Este repositorio contiene el diseño, desarrollo y verificación de un Controlador UART (Universal Asynchronous Receiver-Transmitter) diseñado específicamente para aplicaciones espaciales.

El objetivo principal es implementar técnicas de mitigación de radiación en RTL (Register Transfer Level) para proteger la lógica secuencial contra Single Event Upsets (SEUs) y Single Event Transients (SETs), cumpliendo con las directrices de diseño de la Agencia Espacial Europea (ECSS-E-HB-20-40A y ECSS-E-ST-20-40C).

🚀 Hoja de Ruta (Roadmap) y Progreso

El diseño se está construyendo de forma modular. Actualmente se encuentra en la Fase 1:

  • Fase 1: Baud Rate Generator (Endurecido)
    • Implementación de TMR Local (LTMR).
    • Votador Mayoritario con Auto-corrección (Self-Scrubbing).
    • Verificación mediante Inyección de Fallos en simulación.
  • Fase 2: UART Transmitter (TX)
    • FSM Segura (Safe State Machine).
    • TMR Espacial con votador de salida.
  • Fase 3: UART Receiver (RX)
    • Sobremuestreo temporal ($16\times$) para mitigación de SETs (ruido).
    • TMR Espacial en registros internos.
  • Fase 4: Top-Level y Síntesis
    • Integración de módulos y preservación de jerarquía (dont_touch, syn_keep).

🔬 Enfoque Técnico actual: Módulo baud_rate_gen

El generador de baudios actual no es un divisor de reloj tradicional. Un solo bit-flip causado por radiación en el temporizador descalibraría toda la comunicación. Para evitarlo, se ha implementado:

  1. Triple Modular Redundancy (TMR): El contador base está triplicado (r_cnt_a, r_cnt_b, r_cnt_c).
  2. Votador Mayoritario & Self-Scrubbing: En cada ciclo de reloj, un circuito combinacional evalúa la mayoría de los 3 registros y reescribe el valor correcto en las 3 ramas, eliminando cualquier error introducido por radiación antes de que se acumule.
  3. Out-of-Bounds Recovery: Lógica defensiva para reiniciar la FSM si un Multiple Bit Upset (MBU) fuerza un estado inalcanzable.

Verificación por Inyección de Fallos (Fault Injection)

El testbench fue desarrollado en Python usando CocoTB. En lugar de solo probar el funcionamiento nominal, el testbench fuerza errores en tiempo de ejecución (utilizando comandos VPI Force y Release) simulando el impacto de partículas cósmicas sobre Flip-Flops específicos para validar que el sistema se auto-repara en el siguiente ciclo de reloj.


⚙️ Cómo ejecutar las simulaciones

Para correr los tests en tu máquina local, necesitas tener instalado GHDL, Python 3+ y CocoTB.

  1. Clona el repositorio:
      git clone https://github.com/Cenciarini/UART_Controller_VHDL.git
      cd UART_Controller_Space
    
  2. Ejecuta el entorno de simulación:
      make
    
  3. Verifica los resultados: El simulador forzará inversiones de bits (SEUs) y desbordamientos en tiempo real. Al finalizar, deberías ver en tu terminal el reporte de CocoTB indicando que la tolerancia a fallos funciona correctamente:
     ******************************************************************************************************
     ** TESTS=5 PASS=5 FAIL=0 SKIP=0                                                                     **
     ******************************************************************************************************
    

Desarrollado por Ing. Angel Gabriel Cenciarini

Conecta conmigo en LinkedIn para hablar sobre diseño digital, FPGAs y sistemas aeroespaciales.

About

Space-grade UART controller designed in VHDL. Implements radiation mitigation techniques (TMR, Self-Scrubbing) compliant with ECSS standards, verified through SEU fault injection using CocoTB.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages