1
0
forked from tanchou/Verilog

Add README and project documentation for FPGA and ESP32 integration

This commit is contained in:
Gamenight77
2025-04-22 16:46:03 +02:00
parent 11b14ced36
commit 73cc201b6d
5 changed files with 203 additions and 234 deletions

169
README.md
View File

@@ -1,160 +1,8 @@
# Verilog # Verilog
## Semaine 1 ## [Semaine 1](/Semaine_1/)
Jour 1:
Matin:
Exercices HDLbits:
- Vectors
- Modules: hierarchy
- Procedures (commencer)
Aprèm:
Exercices HDLbits:
- Procedures
- More Verilog features
- Circuits
Début de la mise en place de lenvironnement:
Téléchargement de oss-cad (tools chain) pour simuler et synthétiser le verilog HDL
Essaie sur des modules verilog
Jour 2:
Matin:
Exercices HDLbits:
Latches & flip flop
Lecture de doc
Aprèm:
Exercices HDLbits:
Counters
Galère sur la mise en place de lenvironnement avec de outils open source:
Telechargement et instalation du driver opensource pour le tang nano avec Z-Diag,
Jour 3:
Matin:
Lecture documentation sur le capteur ultrasonic
Implémentation du fonctionnement du capteur afin de tester du code en simulation
Aprèm:
Implementation du module qui permet de mesurer la distance en communiquant avec le capteur
Implémentation du module qui permet de transformer la distance en affichage sur les 6 leds pour faire comme un capteur de recul
Implémentation du module top qui met en corrélation les deux module précédent afin de faire le system de radar de recul
Installation de logiciel propriétaire gowin fpga en attendant
Prise en main du logiciel avec des programme simple
Premier montage du capteur sur la breadboard
Refonte du module de mesure car finalement le capteur fonctionne sur un seul fil bi directionnel + implémentation de la mesure continue
Programmation sur fpga fonctionnel
Lecture de doc sur la led ws2812
Implémentation des modules et du test bench
Fail
Jour 4:
Matin:
Lecture documentation sur le protocole UART (serial)
Implémentation du module uart_tx transmision encoding ainsi que sa tb
Implémentation du module uart_rx reception decoding ainsi que sa tb
Implémentation du module uart_tx_rx qui permet de communiquer facilement en uart ainsi que sa tb
Il suffit de lier le fils TX au RX du deuxième dispositif et lier son TX a notre RX, quand on souhaite envoyer des données il suffit dy inscrire un byte (octet) dans data_in puis de donner une impulsion sur start, pour recevoir on sais que lon a des données a lire quand valid est a 1
Preparation pour cree un top-module qui permet de transmettre la distance mesurer par le capeur au pc en uart
Aprèm:
Implémentation dun nouveau module qui regroupe celui de la transmission et du capteur ultrason afin d'essayer d'envoyer la distance mesurée par le capteur à l'ordinateur
Essaie reussi, valeur envoyer par le tx depuis le fpga et recupéré par un script python
Création nouveau modules pour utiliser luart dans les deux sens, depuis le pc on envoie un chiffre entre 0 & 5 et sa toggle la led correspondante sur le fpga et celui-ci nous renvoie son état actuel.
Plein de soucis et de bug
Lecture de code exemple trouver sur un git, résolution de certain problème
Jour 5:
Lecture de code dautrui
Essaie de différent code
Réflexion sur la conception du projet qui consiste a utiliser un esp32 avec le tang nano 20k
## Semaine 2
Jour 6 :
Matin :
Remise dans le bain
Réflexion sur projet à faire avec un FPGA (tang nano 20k) et un esp32 :
Le but global est de pouvoir se connecter à l'esp32 et ensuite de pouvoir communiquer avec le pc (ou autre appareil connecté en USB au FPGA)
l'esp 32 agis comme esclave pour le FPGA et sert uniquement de portail wifi, le FPGA quand à lui, fera le lien entre les appareils en wifi et le périphérique USB
[ PC via USB-C ] ←→ [ FPGA (Tang Nano 20K) ] ←→ [ ESP32 ] ←→ [ Clients en Wi-Fi ]
## [Semaine 2](/Semaine_2/)
## Cheat sheet ## Cheat sheet
@@ -164,5 +12,14 @@ iverilog -o Nom_de_sortie.vvp .\source1.v .\tb_1.v
#### Upload on fpga #### Upload on fpga
yosys -p "synth_ecp5 -json design.json" counter.v rem https://github.com/YosysHQ/apicula
nextpnr-gowin --chip GW2AR-LV18QN88C8/I7 --json design.json --asc design.asc yosys -p "read_verilog blink_led.v; synth_gowin -json blink_led_c.json"
set DEVICE=GW2AR-LV18QN88C8/I7
set BOARD=tangnano20k
nextpnr-himbaechel --json blink_led_c.json --write pnr_blink_led.json --device %DEVICE% --vopt cst=blink_led.cst --vopt family=GW2A-18C
gowin_pack -d %DEVICE% -o blink_led_c.fs pnr_blink_led.json
openfpgaloader -b %BOARD% blink_led_c.fs

90
Semaine_1/README.md Normal file
View File

@@ -0,0 +1,90 @@
# Verilog
## Semaine 1
### Jour 1
**Matin :**
- Exercices HDLbits :
- Vectors
- Modules : hierarchy
- Procedures (commencé)
**Après-midi :**
- Exercices HDLbits :
- Procedures
- More Verilog features
- Circuits
- Début de la mise en place de lenvironnement :
- Téléchargement de oss-cad (toolchain) pour simuler et synthétiser le Verilog HDL
- Essais sur des modules Verilog
---
### Jour 2
**Matin :**
- Exercices HDLbits :
- Latches & Flip-flops
- Lecture de documentation
**Après-midi :**
- Exercices HDLbits :
- Counters
- Difficultés sur la mise en place de lenvironnement avec des outils open source :
- Téléchargement et installation du driver open source pour le Tang Nano avec Z-Diag
---
### Jour 3
**Matin :**
- Lecture de documentation sur le capteur ultrasonique
- Implémentation du fonctionnement du capteur pour tester du code en simulation
**Après-midi :**
- Implémentation du module de mesure de distance via le capteur
- Implémentation du module de conversion distance → affichage sur 6 LEDs (type capteur de recul)
- Implémentation du module top combinant les deux modules précédents (système de radar de recul)
- Installation du logiciel propriétaire Gowin FPGA
- Prise en main du logiciel avec des programmes simples
- Premier montage du capteur sur breadboard
- Refonte du module de mesure (capteur avec un seul fil bidirectionnel) + mesure continue
- Programmation sur FPGA fonctionnelle
- Lecture de documentation sur les LEDs WS2812
- Implémentation des modules + testbench
- Échec
---
### Jour 4
**Matin :**
- Lecture de documentation sur le protocole UART (série)
- Implémentation :
- `uart_tx` (transmission + encodage) + testbench
- `uart_rx` (réception + décodage) + testbench
- `uart_tx_rx` (communication complète) + testbench
- Explication : relier TX du module A au RX du module B et inversement. Pour envoyer des données, inscrire un byte dans `data_in` et donner une impulsion sur `start`. Pour recevoir, attendre que `valid` passe à 1.
- Préparation dun `top-module` pour transmettre la distance mesurée par le capteur au PC via UART
**Après-midi :**
- Implémentation dun module combinant capteur + transmission UART pour envoyer la distance au PC
- Essai réussi : données envoyées via TX depuis le FPGA, reçues par un script Python
- Création dun module UART bidirectionnel :
- Depuis le PC, on envoie un chiffre entre 0 et 5 → la LED correspondante toggle sur le FPGA
- Le FPGA renvoie létat actuel
- De nombreux bugs
- Lecture de code exemple trouvé sur GitHub, résolution partielle des problèmes
---
### Jour 5
- Lecture de code tiers
- Essais de différents codes
- Réflexion sur la conception du projet final :
- Utilisation dun ESP32 avec le Tang Nano 20K
---

View File

@@ -0,0 +1,85 @@
# Projet FPGA (Tang Nano 20K) + ESP32
## Objectif global
Le but est de pouvoir se connecter à lESP32 via Wi-Fi, et de communiquer avec un PC (ou autre appareil USB connecté au FPGA).
LESP32 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 linterface UART avec lESP32
- 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 lESP32
- 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 à lESP32
- Réception de réponse de lESP32 → 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 lESP32 |
| `uart_tx_esp` | UART TX vers lESP32 |
| `fifo_rx_pc_to_esp` | Données du PC à transférer à lESP32 |
| `fifo_rx_esp_to_pc` | Données de lESP32 à transférer au PC |
| `link_manager` | Logique de contrôle des transferts entre buffers/UART|
| `status_led` | Gestion des LEDs de statut |

View File

@@ -1,78 +0,0 @@
Projet à faire avec un FPGA (tang nano 20k) et un esp32 :
Le but global est de pouvoir se connecter à l'esp32 et ensuite de pouvoir communiquer avec le pc (ou autre appareil connecté en USB au FPGA)
l'esp 32 agis comme esclave pour le FPGA et sert uniquement de portail wifi, le FPGA quand à lui, fera le lien entre les appareils en wifi et le périphérique USB
[ PC via USB-C ] ←→ [ FPGA (Tang Nano 20K) ] ←→ [ ESP32 ] ←→ [ Clients en Wi-Fi ]
Rôles des composants
FPGA (Tang Nano 20K) :
- Gère linterface UART avec lESP32
- Gère la communication USB avec le PC
- Fait le routage bidirectionnel des données (une sorte de mux / buffer intelligent)
ESP32 :
- Crée un réseau Wi-Fi local
- Écoute via une connexion série (UART) avec le FPGA
- Reçoit des commandes du FPGA et envoie les données des clients Wi-Fi
PC (ou autre appareil USB) :
- Peut recevoir/envoyer des données (par exemple, un terminal série ou un logiciel personnalisé)
Architecture
[ PC via USB ]
┌───────▼────────┐
│ uart_usb │ <— UART avec le PC
└──────┬─────────┘
┌──────────────┐
│ uart_core │ <— Routeur/contrôleur central
└────┬────┬────┘
│ │
┌─────────────┘ └────────────┐
▼ ▼
[uart_wifi] [user_logic] (capteur, LEDs, etc.)
<— UART avec ESP32 (comporte les modules fonctionnels)
uart_usb
Interface UART vers le PC (via USB-UART)
Peut utiliser un convertisseur USB-UART sur uart_rx_pc / uart_tx_pc
Fournit :
rx_data, rx_valid, rx_ready
tx_data, tx_valid, tx_ready
uart_wifi
UART avec l'ESP32
Même interface que uart_usb, mais sur uart_rx_esp / uart_tx_esp
Sert à communiquer avec le monde Wi-Fi
uart_core
Module central de routage UART
Cest lui qui gère la logique :
Tu peux le coder comme un FSM maître ou un router
Il fait par exemple :
Lecture des commandes depuis le PC → envoie à ESP32
Réception dune réponse de lESP32 → envoie au PC
uart_rx_pc UART RX depuis le PC
uart_tx_pc UART TX vers le PC
uart_rx_esp UART RX depuis ESP32
uart_tx_esp UART TX vers ESP32
fifo_rx_pc_to_esp Données du PC à transférer à lESP
fifo_rx_esp_to_pc Données de lESP à transférer au PC
link_manager Logique de contrôle des transferts entre buffers et UART
status_led Gère les LEDs de statut

15
Semaine_2/README.md Normal file
View File

@@ -0,0 +1,15 @@
## Semaine 2
### Jour 6
**Matin :**
- Remise en contexte
- Réflexion sur un projet combinant FPGA (Tang Nano 20K) + ESP32 :
- Objectif : se connecter à lESP32 (Wi-Fi) → communiquer avec le PC (via USB au FPGA)
- LESP32 agit comme un esclave, servant uniquement de portail Wi-Fi
- Le FPGA fait le lien entre Wi-Fi et périphériques USB
**Architecture prévue :**
[ PC via USB-C ] ←→ [ FPGA (Tang Nano 20K) ] ←→ [ ESP32 ] ←→ [ Clients en Wi-Fi ]
**Après-midi :**