5  Protocole de Validation Itérative (Paliers d’Isolation)

5.1 Capitalisation d’Expertise : Du DVB-T au DAB+

L’expérience acquise sur le développement d’un Channel Decoder pour la télévision numérique (DVB-T) est capitalisable à hauteur de 80% pour ce projet. Les deux normes reposent sur une modulation multi-porteuse robuste OFDM et un codage correcteur de canal similaire (code convolutif entrelacé).

  • Blocs RTL Transposables : Les architectures matérielles des blocs de calcul de la Transformée de Fourier Rapide (FFT), les boucles de tracking de fréquence/temps, ainsi que le cœur matériel du Décodeur Viterbi (structures Add-Compare-Select et mémoires de Traceback) sont conceptuellement identiques.
  • Ajustements Géométriques Requis : Contrairement au DVB-T qui déploie des modes FFT massifs (2K, 4K ou 8K points) sur des bandes larges (\(6\) à \(8\text{ MHz}\)), le DAB+ utilise de façon standardisée le Mode I (géographie fixe pour la bande VHF-III). La taille de la FFT doit être fixée à exactement 2048 points pour une bande passante totale étroite de \(1.536\text{ MHz}\). De plus, le profil d’entrelacement temporel du DAB+ s’étend sur une durée fixe très longue de 16 trames (soit \(384\text{ ms}\)), exigeant un dimensionnement rigoureux des blocs de mémoire vive (SRAM) du FPGA dédiés au désentrelacement.

5.2 Palier I : Infrastructure et Pipeline RF Témoin

5.2.1 Étape 1 : Initialisation de l’OS et de l’IHM Sans Fil

  • Action : Installer la distribution Raspberry Pi OS Lite sur le Pi Zero 2 W. Lancer l’outil welle-cli en tâche de fond :

    welle-cli -w 8080 --as

  • Critère de Succès : La tablette se connecte au serveur web embarqué sur le port 8080. L’IHM s’affiche et diffuse un flux audio DAB+ décodé de façon fluide.

5.2.2 Étape 2 : Dérivation Analogique de la Fréquence Intermédiaire

  • Action : Connecter l’entrée analogique du module AD9226 sur la sortie FI analogique de la puce R820T2.
  • Critère de Succès : Le système continue de décoder la radio sans dégradation du taux d’erreur (SNR).

5.2.3 Étape 3 : Routage Numérique vers la Matrice du FPGA

  • Action : Raccorder le bus 12 bits de l’ADC aux broches de la Tang Nano 20K au format IO_TYPE=LVCMOS33.
  • Critère de Succès : Les signaux logiques de l’ADC commutent correctement sur le FPGA sans perturber le Pi.

5.3 Palier II : Acquisition et Validation du Spectre Réel

5.3.1 Étape 4 : Analyseur Logique Virtuel Hardware-to-SBC

  • Action : Segmenter l’échantillon 12 bits sur deux octets avec bits de marquage (\(1\) pour l’octet Fort, \(0\) pour l’octet Faible). Capturer ce flux avec un script Python via pyserial à 921 600 bauds pour générer le fichier signal_brut.bin.
  • Validation Algorithmique : Calculer la FFT du fichier sous Python (NumPy).
  • Critère de Succès : Observation visuelle d’une “bosse” spectrale de \(1.536\text{ MHz}\) d’envergure, confirmant la bonne numérisation du canal DAB+.

5.4 Palier III : Environnement de Simulation et Modèle de Référence

5.4.1 Étape 5 : Conception du Décodeur de Canal et Tests de Comparaison

  • Action : Développer un “Golden Model” logiciel de référence sous Python ou MATLAB. Ce script traite le fichier signal_brut.bin et génère les fichiers de contrôle attendus à chaque étape (ex: expected_viterbi.txt). Écrire le code VHDL/Verilog de votre décodeur de canal (FFT, désentrelaceur, Viterbi). Dans le Testbench, lire le fichier brut et réaliser une comparaison bit à bit automatisée à chaque coup d’horloge avec les données du fichier expected_X.txt.
  • Critère de Succès : Zéro erreur d’assertion dans le simulateur PC. La description matérielle produit des résultats strictement identiques aux calculs mathématiques du script Python.

5.4.2 Étape 6 : Validation Auditive du Flux de Simulation

  • Action : Configurer le Testbench PC pour exporter le flux d’octets final simulé dans un fichier nommé simulation_output.msc.

  • Outils d’écoute logicielle : Valider le flux sur le PC de développement via :

    dablin -f simulation_output.msc

    (ou via welle-cli -f simulation_output.msc -w 8080)

  • Critère de Succès : Le logiciel de lecture décode les paquets simulés et restitue un signal audio limpide sur la carte son du PC.


5.5 Palier IV : Intégration et Déploiement Matériel Hybride

5.5.1 Étape 7 : Implémentation Physique et Contrôle des Registres USB

  • Action : Synthétiser et flasher le code sur la Tang Nano 20K. Lancer le script Python de contrôle réseau rtl_tcp.
  • Critère de Succès : Les changements de station depuis l’IHM se traduisent par l’envoi de trames de configuration binaires série du Pi vers les registres internes du FPGA sans latence ni gel de ligne.

5.5.2 Étape 8 : Bouclage Système Matériel et Sortie Haute Fidélité Local

  • Action : Router le flux audio décodé par welle-cli non plus vers le serveur web de la tablette, mais vers le bus I2S matériel du Raspberry Pi câblé physiquement sur le module MAX98357A.
  • Critère de Succès Global (Mode Hybride) : Le système est pleinement autonome sur batterie. L’IHM de la tablette pilote la radio en Wi-Fi. Le son haute-fidélité sort directement sur le haut-parleur physique relié au module MAX98357A, améliorant grandement la dynamique acoustique par rapport aux haut-parleurs natifs de la tablette.

5.6 Palier V : Autonomie Totale par Soft-Core RISC-V Intégré (Mode SoC)

Ce palier supérieur décrit la transition vers une architecture “Zéro Raspberry Pi”, où l’intégralité du traitement logiciel (décapsulage des trames et décodage audio HE-AAC v2) est migré à l’intérieur du FPGA.

5.6.1 Étape 9 : Instanciation du Soft-Core RISC-V et Allocation Mémoire

  • Action : À l’aide de l’outil Gowin IP Core Generator, instancier un cœur de processeur RISC-V virtuel (ex : PicoRV32 ou Gowin Nestor CPU) au sein de la matrice logique de la Tang Nano 20K. Configurer le processeur avec un bus de périphériques matériels. Câbler l’adresse d’exécution d’amorçage sur l’adresse de la mémoire Flash SPI externe de la carte. Connecter le bus de données à haute vitesse vers le contrôleur PSRAM/SDRAM intégré dans le boîtier Gowin (fournissant de 8 à 64 Mo de RAM système indispensable pour les tampons de calcul de l’algorithme de décompression audio).
  • Critère de Succès : Le FPGA compile sans violation de timing. Le simulateur montre que le microprocesseur virtuel exécute ses premières instructions de test lues depuis la mémoire de boot.

5.6.2 Étape 10 : Compilation et Intégration du Décodeur HE-AAC v2

  • Action : Configurer une chaîne de compilation croisée riscv32-unknown-elf-gcc sur le PC. Importer le code source C d’un décodeur AAC bas niveau optimisé pour les calculs en virgule fixe, tel que la bibliothèque Helix AAC Decoder. Compiler ce code source avec les optimisations maximales (-O3). Le programme C doit lire les octets issus du bloc matériel Channel Decoder câblé en mémoire interne (Memory-mapped IO), appliquer les algorithmes SBR (Spectral Band Replication) et PS (Parametric Stereo) propres au profil HE-AAC v2 du DAB+, et pousser les échantillons audio PCM décodés vers un registre de sortie asynchrone.
  • Critère de Succès : Le compilateur génère un fichier binaire compact (app.bin) compatible avec la taille de la Flash de la carte.

5.6.3 Étape 11 : Écriture du Contrôleur Matériel I2S et Bouclage Acoustique

  • Action : Développer un sous-module RTL en Verilog/VHDL chargé de lire le registre de sortie PCM du RISC-V et de cadencer ces bits au format série synchrone standard I2S (BCLK, LRCLK, SDATA). Connecter les broches physiques de ce module I2S directement sur l’amplificateur MAX98357A. Concaténer le bitstream du FPGA et le binaire app.bin du RISC-V au sein d’un fichier image unique (.fs) et flasher de manière permanente la Tang Nano 20K.
  • Critère de Succès Global (Mode SoC Autonome) : Dès la mise sous tension de la carte (en 1 milliseconde), le FPGA se configure, le RISC-V démarre, récupère le signal numérisé de l’AD9226, le démodule, le décode matériellement et logicielllement en interne, et l’amplificateur MAX98357A fait chanter le haut-parleur. Le Raspberry Pi est supprimé du système final.