forked from tanchou/Verilog
Add README and project documentation for FPGA and ESP32 integration
This commit is contained in:
169
README.md
169
README.md
@@ -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 l’environnement :
|
|
||||||
|
|
||||||
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 l’environnement 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 d’y inscrire un byte (octet) dans data_in puis de donner une impulsion sur start, pour recevoir on sais que l’on 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 d’un 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 l’uart 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 d’autrui
|
|
||||||
|
|
||||||
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
90
Semaine_1/README.md
Normal 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 l’environnement :
|
||||||
|
- 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 l’environnement 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 d’un `top-module` pour transmettre la distance mesurée par le capteur au PC via UART
|
||||||
|
|
||||||
|
**Après-midi :**
|
||||||
|
- Implémentation d’un 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 d’un 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 d’un ESP32 avec le Tang Nano 20K
|
||||||
|
|
||||||
|
---
|
85
Semaine_2/Projet_esp32/Projet_esp32.md
Normal file
85
Semaine_2/Projet_esp32/Projet_esp32.md
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
# 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 |
|
@@ -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 l’interface UART avec l’ESP32
|
|
||||||
- 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
|
|
||||||
C’est 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 d’une réponse de l’ESP32 → 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 à l’ESP
|
|
||||||
fifo_rx_esp_to_pc Données de l’ESP à 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
15
Semaine_2/README.md
Normal 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 à l’ESP32 (Wi-Fi) → communiquer avec le PC (via USB au FPGA)
|
||||||
|
- L’ESP32 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 :**
|
Reference in New Issue
Block a user