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).
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.
- Sobremuestreo temporal (
- Fase 4: Top-Level y Síntesis
- Integración de módulos y preservación de jerarquía (
dont_touch,syn_keep).
- Integración de módulos y preservación de jerarquía (
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:
- Triple Modular Redundancy (TMR): El contador base está triplicado (
r_cnt_a,r_cnt_b,r_cnt_c). - 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.
- Out-of-Bounds Recovery: Lógica defensiva para reiniciar la FSM si un Multiple Bit Upset (MBU) fuerza un estado inalcanzable.
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.
Para correr los tests en tu máquina local, necesitas tener instalado GHDL, Python 3+ y CocoTB.
- Clona el repositorio:
git clone https://github.com/Cenciarini/UART_Controller_VHDL.git cd UART_Controller_Space - Ejecuta el entorno de simulación:
make
- 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.