# Projet FPGA (Tang Nano 20K) + ESP32

## Objectif global

Le but est de pouvoir se connecter à l’ESP32 via Wi-Fi, et de communiquer avec un PC (ou autre appareil USB connecté au FPGA).  
L’ESP32 agit comme **esclave** pour le FPGA et sert uniquement de **portail Wi-Fi**.  
Le FPGA fait le lien entre les appareils Wi-Fi et le périphérique USB.


---

## Rôles des composants

### FPGA (Tang Nano 20K)
- Gère l’interface UART avec l’ESP32
- Gère la communication USB avec le PC
- Fait le routage bidirectionnel des données (mux / buffer intelligent)

### ESP32
- Crée un réseau Wi-Fi local
- Écoute via une connexion UART avec le FPGA
- Reçoit les commandes du FPGA et envoie les données des clients Wi-Fi

### PC (ou autre appareil USB)
- Envoie et reçoit des données (via terminal série ou logiciel personnalisé)

---

## Architecture

```
                      [ PC via USB ]
                           │
                   ┌───────▼────────┐
                   │    uart_usb    │  <— UART avec le PC
                   └──────┬─────────┘
                          │
                          ▼
                   ┌──────────────┐
                   │   uart_core  │  <— Routeur/contrôleur central
                   └────┬────┬────┘
                        │    │
          ┌─────────────┘    └────────────┐
          ▼                               ▼
 [uart_wifi]                         [user_logic] (LEDs)
 <— UART avec ESP32              (comporte les modules fonctionnels)
```

---

## Détails des modules

### `uart_usb`
- Interface UART vers le PC (via USB-UART)
- Peut utiliser un convertisseur USB-UART via `uart_rx_pc` / `uart_tx_pc`
- Fournit :
  - `rx_data`, `rx_valid`, `rx_ready`
  - `tx_data`, `tx_valid`, `tx_ready`

### `uart_wifi`
- Interface UART avec l’ESP32
- Même interface que `uart_usb`, mais avec `uart_rx_esp` / `uart_tx_esp`
- Sert à la communication Wi-Fi

### `uart_core`
- Module central de routage UART
- Gère la logique de communication :
  - Lecture des commandes depuis le PC → envoie à l’ESP32
  - Réception de réponse de l’ESP32 → envoie au PC
- Peut être codé comme une FSM maître ou un router simple

---

## Signaux principaux

| Signal                  | Description                                          |
|------------------------|------------------------------------------------------|
| `uart_rx_pc`           | UART RX depuis le PC                                 |
| `uart_tx_pc`           | UART TX vers le PC                                   |
| `uart_rx_esp`          | UART RX depuis l’ESP32                               |
| `uart_tx_esp`          | UART TX vers l’ESP32                                 |
| `fifo_rx_pc_to_esp`    | Données du PC à transférer à l’ESP32                 |
| `fifo_rx_esp_to_pc`    | Données de l’ESP32 à transférer au PC                |
| `link_manager`         | Logique de contrôle des transferts entre buffers/UART|
| `status_led`           | Gestion des LEDs de statut                           |
