diff --git a/README.md b/README.md index ed15009..419cebf 100644 --- a/README.md +++ b/README.md @@ -1,160 +1,8 @@ # Verilog -## 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 1](/Semaine_1/) +## [Semaine 2](/Semaine_2/) ## Cheat sheet @@ -164,5 +12,14 @@ iverilog -o Nom_de_sortie.vvp .\source1.v .\tb_1.v #### Upload on fpga -yosys -p "synth_ecp5 -json design.json" counter.v -nextpnr-gowin --chip GW2AR-LV18QN88C8/I7 --json design.json --asc design.asc +rem https://github.com/YosysHQ/apicula +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 \ No newline at end of file diff --git a/Semaine_1/README.md b/Semaine_1/README.md new file mode 100644 index 0000000..dfe8291 --- /dev/null +++ b/Semaine_1/README.md @@ -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 + +--- \ No newline at end of file diff --git a/Semaine_2/Projet_esp32/Projet_esp32.md b/Semaine_2/Projet_esp32/Projet_esp32.md new file mode 100644 index 0000000..b1042fd --- /dev/null +++ b/Semaine_2/Projet_esp32/Projet_esp32.md @@ -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 | diff --git a/Semaine_2/Projet_esp32/Projet_esp32.txt b/Semaine_2/Projet_esp32/Projet_esp32.txt deleted file mode 100644 index 021cfbc..0000000 --- a/Semaine_2/Projet_esp32/Projet_esp32.txt +++ /dev/null @@ -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 \ No newline at end of file diff --git a/Semaine_2/README.md b/Semaine_2/README.md new file mode 100644 index 0000000..08f908c --- /dev/null +++ b/Semaine_2/README.md @@ -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 :**