# 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

---