Aller au contenu

SIT 212, TP4

Mme Charlotte LANGLAIS - Dépt. Mathematical and Electrical Engineering

Simulation de signaux et briques de transmission - TP4 : Synthèse et implantation matérielle d’une chaîne de transmission numérique sur circuit reconfigurable

Introduction

Cette séance de Travaux Pratiques est une initiation à la conception de circuits intégrés numériques. Elle permet de découvrir les différentes étapes de la description d’une architecture en VHDL (langage dédié à l’électronique) jusqu’au test sur circuit reconfigurable FPGA (Field-Programmable Gate Array), le tout avec un outil professionnel, Vivado du fondeur de circuits Xilinx. Le second objectif de ce TP est d’illustrer certaines notions de communications numériques, telles que le choix d’un mapping efficace, ou l’influence du bruit sur la transmission, tout en concevant un émetteur et un récepteur à partir d’une description matérielle. Cette séance de TP est donc complémentaire des séances de SIT213 dédiées à l’implémentation d’une chaîne de transmission en logiciel avec un processeur généraliste.

Les grandes étapes de la conception d’un circuit sur FPGA sont les suivantes :

  • conception de l’architecture du circuit sous forme de blocs/modules organisés hiérarchiquement,
  • description des modules qui peut se faire par l’intermédiaire de langages de description matérielle (VHDL ou Verilog entre autres) ou d’outils de CAO proposant des modules déjà conçus paramétrables,
  • simulation fonctionnelle de chaque module,
  • intégration des modules pour réaliser le circuit complet,
  • simulation du circuit complet,
  • synthèse du circuit transformant la description hiérarchique en liste de composants logiques (portes élémentaires connectées),
  • simulation post-synthèse pour vérifier que le modèle synthétisé est conforme au modèle initial,
  • implantation physique qui consiste à traduire la liste précédente en liste de composants de la technologie cible (un FPGA donné par exemple), puis à les placer sur la cible matérielle et à les router,
  • simulation post-placement-routage pour vérifier la conformité des performances,
  • configuration(programmation) du circuit puis test du circuit sur carte.

Chacune des étapes de simulation et de test peut déclencher un retour en arrière plus ou moins important en cas d’échec.

En pratique, vous suivrez un flot simplifié, en bénéficiant du travail préparatoire des enseignants :

Phase 1 Description et simulation de modules combinatoires simples

  • une description « à trous » en VHDL est fournie et doit être complétée sur la base de la description qui en est donnée ;
  • chaque module VHDL est ensuite simulé et corrigé si nécessaire.

Phase 2 Simulation du circuit complet

Le circuit complet est simulé et le résultat analysé. Les résultats de simulation sont comparés aux résultats théoriques.

Phase 3 Synthèse, placement, routage et test du circuit complet

  • le flot de « compilation » matérielle doit être paramétré puis lancé ;
  • le résultat de ce flot est analysé puis testé sur carte.

Présentation de la chaîne de transmission

Afin d’illustrer le flot de conception de circuit numérique, nous choisissons de concevoir un émetteur et un récepteur d’une chaîne de transmission numérique en bande de base. La chaîne de transmission générique est représentée sur la figure ci-dessous. Elle contient l’ensemble des traitements numériques et analogiques nécessaires à la transmission de l’information sur un milieu de transmission.

TP4 - Chaîne de transmission. Les boites grisées contiennent les paramètres/caractéristiques des fonctions associées

TP4 - Chaîne de transmission. Les boites grisées contiennent les paramètres/caractéristiques des fonctions associées

Dans ce TP, nous souhaitons émuler une transmission numérique en bande de base sur un circuit numérique reconfigurable de type FPGA. Le schéma simplifié de la transmission, telle qu’elle sera émulée sur le circuit FPGA, est donné figure ci-dessous. Contrairement à une transmission réaliste, toutes les fonctions émission, canal et réception sont placées sur la même carte. Dans la « vraie vie », l’émetteur et le récepteur ne sont pas co-localisés. Ce type de prototype matériel permet, par exemple, de vérifier les performances d’une modulation pour des taux d’erreurs binaires extrêmement bas du fait de la rapidité des opérations réalisées par le FPGA.

TP4 - Chaîne de transmission simplifiée.

TP4 - Chaîne de transmission simplifiée.

La source génère une séquence pseudo-aléaoire de bits en série. Le bloc mapping convertit la séquence binaire en deux signaux qui représentent la voie I et la voie Q du symbole complexe de modulation de type MAQ16 (Modulation d'Amplitude en Quadrature à 16 états). Le canal à bruit blanc additif gaussien (\emph{Additive White Gaussian Noise}, AWGN) permet de modéliser une source de bruit thermique ainsi que la perte en espace libre. Il est paramétré à partir du rapport signal-sur-bruit (\emph{signal to noise ratio}, SNR). Dans notre contexte, comme la puissance du signal en entrée du canal ne varie pas, c'est la variance du bruit généré par le canal \(\sigma_b^2\) qui est modifiée, telle que \(SNR = 10 \textrm{log}_{10} \frac{1}{2 \sigma_b^2}\). En sortie, les deux voies I et Q sont donc bruitées. Le demapping a pour rôle d'appliquer la règle du maximum de vraisemblance afin de décider des bits qui ont été émis. En sortie, on obtient une séquence de données binaires décidées, qui va pouvoir être comparée à la séquence qui a été émise grâce au bloc de calcul du taux d'erreurs binaires (TEB).

Présentation du circuit à concevoir : MAQ16

Fonctions principales

Le circuit à concevoir permet d'émuler une chaîne de transmission simplifiée en bande de base qui comprend un émetteur intégrant une modulation MAQ16, un canal à bruit blanc additif gaussien et un récepteur qui réalise la détection binaire puis calcule le taux d'erreurs binaires correspondant. Le choix du rapport signal-à-bruit se fait grâce aux interrupteurs selon la table de correspondance donnée en annexe A. En utilisant un interrupteur on peut arrêter et relancer la détection d'erreurs à tout moment. Le résultat du calcul de taux d'erreurs binaires est indiqué sur les afficheurs 7 segments. De plus, deux signaux représentant respectivement le nombre d'erreurs et le nombre total de bits sont générés pour permettre le debug par simulation.

Cible matérielle

Le matériel utilisé est composé d’un PC et d’une carte électronique intégrant,

  • le circuit intégré programmable FPGA (Field Programmable Gate Array) de type Artix-7 de Xilinx, sur une carte Nexys4 de Digilent
  • les afficheurs 7 segments,
  • les interrupteurs,
  • les boutons poussoirs,
  • un oscillateur à 100 MHz, pour fournir un signal d'horloge.

La figure suivante présente les différents éléments présents sur la carte. L’outil de conception de circuit, installé sur le PC (ou disponible à distance), est Vivado de Xilinx.

TP4 - La carte électronique composée, notamment,  d’un FPGA, d’afficheurs 7 segments, de switchs  et de boutons poussoirs

TP4 - La carte électronique composée, notamment, d’un FPGA, d’afficheurs 7 segments, de switchs et de boutons poussoirs

En supplément, on utilise une carte de conversion numérique-analogique (CNA) pour visualiser les signaux I et Q en sortie du canal à l'oscilloscope.

Circuit complet de MAQ16

L'architecture du circuit complet est décrite figure suivante. Les blocs saumon sont fournis complet, ils n'ont pas à être modifiés. Les blocs bleu doivent être modifiés. Les ports d'entrée et sortie du circuit FPGA sont représentés en jaune. Toutes les flèches représentent des signaux internes au circuit FPGA.

TP4 - L'architecture du circuit complet

TP4 - L'architecture du circuit complet

Principe de fonctionnement

Avant de lancer l'émulation de la transmission de données, il faut initialiser le circuit en positionnant RAZ à 1, puis en le remettant en 0. Le passage à 0 de RAZ lance la génération des données binaires par le module source. Après conversion série parallèle, les quatre bits du symbole de modulation MAQ16 entrent dans le module emetteur, qui les convertit en signaux I et Q. Les 6 interrupteurs SNR permettent de programmer l'écart-type du bruit ajouté par le module generation_addition_bruit. Les signaux I et Q sont alors bruités à l'aide de ce module. Les signaux bruités I_B et Q_B sont ensuite détectés par le module recepteur pour obtenir le symbole de modulation décidé. Après conversion parallèle série, la séquence de données binaires décidées est comparée à la séquence de données émises à l'aide du module detect_err. Le module compt_err compte les erreurs et fournit deux signaux de sortie qui correspondent au nombre d'erreurs et au nombre de bits total émis. Il fournit également deux signaux permettant d'afficher le résultat sur les afficheurs 7 segments. L'interrupteur Caff permet d'arrêter et de relancer la détection des erreurs.

Description des modules existants

Module synchro_vhd

Ce bloc fournit à partir de l'oscillateur CLK100MHz les différents signaux d'horloges du FPGA. Ces signaux sont nécessaires au fonctionnement du circuit global.

Entrées :

  • CLK100MHz : signal en provenance de l’oscillateur de la carte Digilent.
  • RAZ : signal de remise à zéro actionné par un bouton sur la carte Digilent.

Sortie :

  • H_int : obtenue par division de 256 de CLK100MHz. C'est l'horloge débit des données.
  • H_sseg : obtenue par division de fréquence de CLK100MHz. C'est l'horloge permettant l'affichage du résultat.
  • H_const : obtenue par division de fréquence de CLK100MHz. Horloge non utilisée.
Module div4_vhd

Le bloc div4_vhd fournit un signal de contrôle EN utilisé par le bloc emetteur et le bloc recepteur. Ce module est un compteur modulo 4 dont un des 4 états est décodé : EN est à 1 pendant une période d'horloge et à 0 pendant les 3 autres. Ce signal est nécessaire au séquencement de la conversion série-parallèle et parallèle-série. Il doit être utilisé en ENABLE et non en signal d'horloge.

Entrée : \begin{itemize}

  • H_int : signal en provenance du bloc synchro
  • RAZ : signal de remise à zéro actionné par un bouton sur la carte FPGA.

Sortie :

  • EN: signal de type Enable égal à 1 pendant une période de H_int sur 4.
Module source_vhd

La source fournit sur data_in une séquence pseudo-aléatoire de période \(2^{31}-1\), au rythme de H_int.

Entrées : \begin{itemize}

  • H_int : signal en provenance du bloc synchro
  • RAZ : signal d'initialisation au démarrage du circuit

Sortie

  • Data_in : signal de données binaires pseudo-aléatoires en série,
Module compteur_err_vhd

Le bloc compt_err_vhd réalise le comptage des erreurs et gère l’affichage du taux d’erreurs binaires. Le comptage des erreurs est effectué sur des séquences de 1 Mbits. Le bloc gère ensuite l’affichage de ce nombre sur les 4 afficheurs 7 segments de la carte. La lecture se fait comme suit : le nombre d'erreurs est égal au nombre affiché par les 3 afficheurs de gauche multiplié par une puissance de 10 négative fournie par le 4ème afficheur. Exemple : sur la figure ci-dessous on lit le taux d'erreurs binaires \(606.10^{-4}\), c'est à dire \(6,06.10^{-2}\). Le signal nb_err comptabilise le nombre d'erreurs. Le signal nb_bits compte le nombre de bits depuis le début de la détection d'erreurs. Le démarrage de la détection d'erreurs est piloté par le signal Caff.

TP4 - Exemple d'affichage d'un taux d'erreurs binaires.

TP4 - Exemple d'affichage d'un taux d'erreurs binaires.

Entrée

  • H_int : signal en provenance du bloc synchro
  • RAZ : signal d'initialisation au démarrage du circuit
  • Caff : signal d'arrêt et de relance de la détection d'erreurs
  • H_sseg : obtenue par division de fréquence de CLK100MHz. C'est l'horloge permettant l'affichage du résultat.
  • err : égal à 1 lorsqu’une erreur est détectée à la réception

Sorties

  • s_aff[7:0] : permet l'affichage du taux d’erreurs binaires sur les afficheurs 7 segments
  • an[4:0] : permet le choix de l'afficheur
  • Nb_err : donne le nombre d'erreurs depuis le début du comptage
  • Nb_bit : donne le nombre de bits passés dans le canal depuis le début du comptage
Module generation_addition_bruit_bhd

Ce bloc génère des échantillons de bruit blanc de distribution gaussienne et les ajoute aux symboles représentés par les voies I et Q. L'écart-type des échantillons de bruit est programmable à l’aide des interrupteurs présents sur la carte d’interface. La table de correspondance entre les interrupteurs SNR[5:0], l'écart-type et le rapport signal-à-bruit est donnée en annexe A (cf. section \ref{sec:TP4_annexeA}). Ce module suppose que les symboles non bruités fournis sur les voies I et Q sont codés en complément à 2. Les symboles bruités sont fournis sur 8 bits : 4 bits pour la partie entière et 4 bits pour la partie fractionnaire. La partie fractionnaire ne sert que pour la visualisation de la constellation.

Entrées :

  • I[3:0] : signal représentant la voie en phase de la MAQ16 codée en complément à 2 sur 4 bits
  • Q[3:0] : signal représentant la voie en quadrature de la MAQ16 codée en complément à 2 sur 4 bits

Sorties :

  • I_B[7:0] : signal représentant la voie en phase bruitée en complément à 2 sur 8 bits
  • Q_B[7:0] : signal représentant la voie en quadrature bruitée en complément à 2 sur 8 bits
Module conv_serie_par

Ce module réalise la conversion série parallèle du flux de données data_in vers une séquence de mots de 4 bits, constituant le 4-uplet du symbole de modulation MAQ16. Il utilise le signal EN, actif tous les 4 cycles d'horloge, généré par diviseur_freq.

Entrées :

  • data_in : signal de données binaires en série,
  • H_int : signal en provenance du module synchro,
  • EN : signal de type Enable égal à 1 pendant une période de H_int sur 4.

Sortie :

  • symb_bin[3:0] : séquence de mots de 4 bits, constituant le 4-uplet du symbole de modulation MAQ16.
Module conv_par_serie

Ce module réalise la conversion parallèle série des données décidées issues du module recepteur. Il utilise le signal EN, actif tous les 4 cycles d'horloge, généré par div4_vhd.

Entrées :

  • symb_dec[3:0] : séquence de mots de 4 bits, constituant le 4-uplet du symbole de modulation MAQ16 après décision.
  • H_int : signal en provenance du module \verb+synchro+,
  • EN : signal de type Enable égal à 1 pendant une période de \verb+H_int+ sur 4.

Sortie :

  • Data_out : signal de données binaires décidées en série

Cahier des charges des modules à concevoir

Les fonctionnalités des trois modules à concevoir sont décrites ci-dessous.

Module emetteur_vhd

Ce module combinatoire fournit les valeurs numériques de type réel signé en codage en complément à 2 sur 4 bits (pour chaque voie) des symboles modulés en MAQ16. La voie I donne la voie en phase et la voie Q donne la voie en quadrature. Le mapping qui répond aux deux contraintes suivantes est donné en annexe :

  • Minimisation de la probabilité d’erreur
  • Simplification de la détection des symboles au niveau du récepteur

Entrée :

  • symb_bin[3:0] : séquence de mots de 4 bits, constituant le 4-uplet du symbole de modulation MAQ16.

Sorties :

  • I[3:0] : séquence représentant la voie en phase de la MAQ16 codée en complément à 2 sur 4 bits (uniquement partie entière, car nombre entier signé)
  • Q[3:0] : séquence représentant la voie en quadrature de la MAQ16 codée en complément à 2 sur 4 bits (uniquement partie entière, car nombre entier signé)

Module recepteur_vhd

Ce module réalise la détection des symboles bruités reçus. Pour cela, il reçoit les valeurs numériques codées en complément à 2 sur 8 bits de la voie en phase et la voie en quadrature représentant les symboles bruités. Seule la partie entière de ces valeurs numériques en complément à 2 sur 4 bits des symboles bruités sera utilisée pour réaliser la détection. Ce module fournit sur symb_dec[3:0] le 4-uplet du symbole de modulation décidé. Les règles de décision pour les voies I et Q sont données dans le TD de préparation en annexe

Entrées :

  • I_B[7:0] : séquence représentant la voie en phase de la MAQ16 codée et bruitée en complément à 2 sur 8 bits, dont 4 bits de partie entière
  • Q_B[7:0] : séquence représentant la voie en quadrature de la MAQ16 codée et bruitée en complément à 2 sur 8 bits, dont 4 bits de partie entière

Sortie :

  • symb_dec[3:0] : séquence de mots de 4 bits, constituant le 4-uplet du symbole de modulation MAQ16 qui a été détecté.

Module detect_err_vhd

Ce module réalise la détection d’erreur. Pour cela, les signaux Data_in_dec et Data_out sont comparés. Si les signaux sont différents, la sortie err est égale à 1 et égale à 0 dans le cas contraire. Pour que la comparaison se fasse correctement, Data_in a été retardé d'un nombre de périodes égal à la latence de la chaîne de transmission. Ce retard est appliqué dans le module reg_decal_9. Remarque : le générateur de bruit n'introduit aucune latence.

Enfin, le signal Caff permet de relancer la détection d’erreurs à tout moment en interrompant la détection d’erreurs. Ce signal est directement relié à un bouton poussoir sur la carte. Le signal Caff peut être considéré comme un signal de validation du signal err.

Entrées :

  • H_int : signal en provenance du bloc synchro
  • RAZ : signal d'initialisation au démarrage du circuit
  • Caff : signal d'arrêt et de relance de la détection d'erreurs
  • Data_out : signal de données binaires décidées en série
  • Data_in_dec : signal de données binaires pseudo-aléatoires en série, retardé d'un nombre de périodes égal à la latence de la chaîne de transmission.

Sortie :

  • err : signal d'erreur égal à 0 si le bit détecté n'est pas erroné et 1 s'il y a une erreur.

Travaux pratiques en séance

Phase 1 - Description et simulation des modules combinatoires

Création du projet

Téléchargement de l'archive source

Une archive de fichiers sources vous est proposée sur https://moodle.imt-atlantique.fr/course/view.php?id=578#section-1. Cette archive, appelée SIT212_TP4_Source_files_vivado.tar.gz, vous permet de récupérer les fichiers sources VHDL de description et de simulation.

Une fois téléchargée, elle doit être décompressée dans un répertoire de travail que vous aurez judicieusement créé dans votre arborescence de fichiers, comme ~/SIT212/TP4/Fichiers_sources par exemple.

Warning

Ne mettez jamais d'espaces, d'accents ou des caractères spéciaux dans les noms de répertoires ou de fichiers

Ouverture de Vivado

Sous Linux, ouvrez un Terminal (Ctrl+Alt+T) et lancez la commande suivante

1
SETUP MEE_VIVADO_CLASSROOM && vivado&
L'interface graphique de Vivado démarre alors (peut prendre un certain temps) et se présente telle qu'illustrée en figure~\ref{fig:vivado_183_accueil}.

Interface graphique de Vivado au démarrage.

Interface graphique de Vivado au démarrage.
Création d'un nouveau projet

Cliquez sur Create Project pour lancer l'assistant (wizard) de création de projet, puis cliquez sur Next sur la fenêtre qui apparaît alors.

Dans la fenêtre suivante (figure suivante), renseignez le nom de votre projet (MAQ16) et votre répertoire de travail ~/SIT212/TP4. Create project directory doit être coché.

Fenêtre de validation du nom et de la position du projet.

Fenêtre de validation du nom et de la position du projet.

A la fenêtre suivante (figure suivante), sélectionnez RTL Project pour créer un projet qui acceptera des sources VHDL.

Fenêtre de sélection du type du projet.

Fenêtre de sélection du type du projet.
Ajout des fichiers sources et des contraintes

Validez encore avec Next pour passer à la fenêtre suivante qui vous demande vos fichiers sources (figure suivante).

Fenêtre de sélection des fichiers sources pour le projet.

Fenêtre de sélection des fichiers sources pour le projet.

Sélectionnez alors tous les fichiers VHDL (en extension .vhd) de votre archive décompressée disponible dans les dossiers sources et sim. Puis modifiez le mode des fichiers de test, qui commencent par TB ou tb, en mode Simulation uniquement comme en figure suivante.

Modification du mode d'utilisation du fichier de testbench.

Modification du mode d'utilisation du fichier de testbench.
  • Sélectionnez Copy sources into project.
  • Sélectionnez Target langage VHDL.
  • Cliquez sur Next pour valider.

Ne renseignez rien dans la fenêtre suivante (aucun module autre que décrit en VHDL ne sera utilisé) et continuez.

Sélection du FPGA utilisé

Apparaît alors la fenêtre Add Constraints. Sélectionnez le fichier MAQ16_Top.xdc dans le répertoire constrs.

Après validation apparaît la fenêtre de sélection de la cible matérielle FPGA que vous renseignez tel qu'indiqué sur la figure suivante. Cela vous permet de choisir le FPGA de la carte (xc7a100tcsg324-1 de son petit nom).

Fenêtre de sélection du FPGA cible.

Fenêtre de sélection du FPGA cible.

La fenêtre suivante résume votre projet et doit être identique à celle présentée en figure suivante.

Fenêtre de validation pour la création du projet Vivado.

Fenêtre de validation pour la création du projet Vivado.

Le projet est ensuite créé et l'interface projet de Vivado se lance comme en figure suivante.

Interface projet Vivado.

Interface projet Vivado.

Description partielle du module combinatoire emetteur_vhd en VHDL

  • Dans la fenêtre PROJECT MANAGER / Sources développez l'onglet Design Sources. Puis MAQ16_Top.
  • Ouvrez le fichier emetteur_vhd.vhd, dont certaines parties ont été remplacées par _BLANK_.
  • À partir de votre travail préparatoire sous la forme d'une table de vérité, et de la description VHDL de la structure case décrite dans l'Aide-mémoire VHDL,
  • remplacez les sections _BLANK_ par du code approprié.

Question 1

  • À quoi servent les signaux intermédiaires I_int et Q_int ? En quoi est-ce lié au choix du mapping MAQ16 ?
  • Consultez la section Examples-of-synthesizable-vhdl de l'Aide-mémoire VHDL pour comprendre la notion de process et de liste de sensibilité (sensitivity list) des processus asynchrones (c.a.d. combinatoires). Dans le cadre de ce module emetteur_vhd, quels sont les signaux à renseigner dans la liste de sensibilité de chacun des 2 processus ? Pourquoi ?
  • Expliquez la notion de processus concurrents.

Simulation VHDL du module emetteur_vhd

Pour valider ensuite votre module emetteur_vhd, vous le simulez avec l'outil XSIM de Vivado. Pour cela un fichier de test vous est proposé: TB_emetteur.vhd, aussi disponible par la fenêtre Sources, onglet Simulation Sources / sim_1. Sélectionnez ce module.

Puis, cliquez sur le bouton droit de la souris pour faire apparaître le menu contextuel et cliquez sur Set as Top. Ainsi, ce module pourra être simulé en cliquant dans le panneau de gauche Flow Navigator / Project Manager sous l'onglet Simulation ➡ Run Simulation ➡ Run Behavioural Simulation.

La fenêtre illustrée en figure suivante apparaît alors.

Interface de simulation de Vivado.

Interface de simulation de Vivado.

Choix du Zoom

Cliquez sur Zoom Fit puis ajustez le zoom jusqu'à pouvoir analyser le chronogramme de la simulation et ainsi vérifier que votre description VHDL fournit le comportement attendu.

Format de représentation des nombres dans la simulation

Dans le chronogramme résultat de la simulation, chaque signal binaire affiché peut être représenté sous différents formats : binaire naturel, réel signé, réel non signé, hexadécimal, etc. Cette représentation (ou radix d'affichage) est au choix du concepteur et peut être choisi afin de faciliter la lecture des résultats de simulation. Par exemple, pour modifier le radix d'affichage d'un signal en décimal non signé cliquez sur le nom d'un signal, avec le bouton DROIT de la souris, puis sur radix > unsigned decimal.

Tip

Choisissez astucieusement les représentations de vos signaux d'entrée et sortie pour vous faciliter la tâche d'analyse de la simulation.

Question 2

Toutes les réponses aux questions doivent être illustrées par des copies écrans des simulations.

  • Justifiez vos choix de format de représentation des nombres pour les signaux d'entrée et de sortie.
  • Observez le résultat de simulation et analysez-le. Observez également le fichier de testbench. Pourquoi cette simulation ne permet-elle pas de valider le module de manière complète et exhaustive ?
  • En lien avec la question précédente, modifiez le ficher de testbench, et relancez la simulation.
  • Analysez le résultat de cette 2ieme simulation et justifiez la validation du module.

Description partielle du module combinatoire recepteur_vhd en VHDL

  • Quittez la simulation en fermant la sous-fenêtre de simulation.
  • Dans la fenêtre PROJECT MANAGER / Sources développez l'onglet Design Sources.
  • Ouvrez le fichier recepteur_vhd.vhd, dont certaines parties ont été remplacées par _BLANK_.

À partir de votre travail préparatoire sous la forme de fonctions logiques, et de la description VHDL des fonctions logiques combinatoires décrites dans l'Aide mémoire VHDL, remplacez les sections _BLANK_ par du code approprié.

Question 3

  • Quels sont les bits de I et Q qui correspondent à la partie entière des nombres qu'ils représentent ?
  • Expliquez pourquoi seule la partie entière est utilisée dans l'obtention du symbole décidé b_int (ou Symb_dec) et le rôle de la troncature par défaut dans la règle de décision du bit Symb_dec[2]} et Symb_dec[0].
  • Expliquez pourquoi cela réduit la complexité du circuit qui sera généré.

Simulation VHDL du module recepteur_vhd

Pour valider de nouveau votre description VHDL, vous devez simuler le module avec le fichier de test proposé: TB_recepteur.vhd. Pour cela, cliquez sur ce fichier puis clic bouton droit de la souris et choisissez Set As Top. Puis effectuez la simulation comme précédemment.

Dans le chronogramme, les signaux I et Q sont représentés sur 8 bits. Pour faciliter la lecture, nous souhaitons récupérer uniquement les 4 bits de poids forts. Pour cela, dans la fenêtre Objects, développez I_B[7:0] et Q_B[7:0]. Glissez-déposez les signaux correspondants aux bits de poids forts dans la fenêtre qui liste les signaux du chronogramme (sous Name). Toujours en gardant les 4 signaux correspondant aux bits de poids fort sélectionnés, cliquez DROIT et choisissez New virtual bus. Donnez lui un nom explicite. }

Pour faciliter la lecture, vous pouvez changer le radix d'affichage. En particulier, pour les signaux d'entrée, vous pouvez utiliser Real settings puis choisir fixed point, signed, binary point 4. Pour les bits de poids fort (la partie entière après troncature), choisissez signed decimal.

Question 4

Toutes les réponses aux questions doivent être illustrées par des copies écrans.

  • Observez et analysez le résultat de la simulation. À quoi comparez-vous le résultat de votre simulation ? En quoi cette simulation valide-t-elle fonctionnellement le module ?
  • À partir de la simulation, donnez des exemples de troncatures pour des signaux reçus I_B et Q_B positifs et négatifs. Expliquez les décisions prises au niveau binaire Symb_dec[3:0] au regard des règles de décision de la MAQ16.

Description partielle du module combinatoire detect_err en VHDL

  • Quittez la simulation en fermant la sous-fenêtre de simulation.
  • Dans la fenêtre PROJECT MANAGER / Sources développez l'onglet Design Sources.
  • Ouvrez le fichier detect_err_vhd.vhd, dont certaines parties ont été remplacées par _BLANK_.

À partir de votre travail préparatoire sous la forme de fonctions logiques, et de la description VHDL des fonctions logiques combinatoires décrites dans l'Aide mémoire VHDL, remplacez les sections _BLANK_ par du code approprié.

Simulation VHDL du module detect_err

Pour valider de nouveau votre description VHDL, vous devez simuler le module avec le fichier de test proposé: TB_detect_err.vhd. N'oubliez pas Set As Top.

Phase 2 - Simulation et test du circuit complet

Pour valider par simulation l'intégration des 3 modules, vous devez simuler l'intégralité du circuit de MAQ16.

Passez donc le module tb_MAQ16_Top.vhd en TOP et simulez le circuit comme illustré en figure suivante.

Lancement de la simulation complète du circuit MAQ16.

Lancement de la simulation complète du circuit MAQ16.

Cependant, les signaux Nb_err et Nb_bits, qui ne font pas partie des ports d'entrée/sortie du circuit, n'apparaissent pas. Pour les ajouter à la simulation, dans la fenêtre SIMULATION / Scope développez inst_MAQ16_Top puis cliquez sur inst_compteur_erreur_vhd. Dans la fenêtre SIMULATION / Objects glissez-déposez les signaux Nb_err et Nb_bits dans la fenêtre de simulation pour les faire apparaître dans la liste de signaux à simuler :

Ajout des signaux Nb_err et Nb_bits  à la simulation.

Ajout des signaux `Nb_err` et `Nb_bits` à la simulation.

Puis cliquez sur Restart. Enfin, cliquez sur Run trigger :

Relancer la simulation après ajout des signaux.

Relancer la simulation après ajout des signaux.

Question 5

Toutes les réponses aux questions doivent être illustrées par des copies écrans des simulations.

La correspondance entre le signal SNR[5:0] et \(SNR = E_s/N_0\) en dB est donnée dans le tableau des SNR. Les courbes théorique et simulée sous MATLAB de la probabilité d'erreur de la MAQ16 sont données figure TEB MAQ 16.

  • Expliquez pourquoi aucune erreur n'est détectée (Nb_err est égal à 0) lors du 1er lancement de la simulation.
  • Que se passe-t-il lorsqu'on relance la simulation en cliquant plusieurs fois sur Run trigger ?
  • Quel est le taux d'erreurs obtenu ? Pour quelle valeur du signal SNR[5:0] et donc quelle valeur de SNR en dB (cf. tableau des SNR) ? Est-ce que cela correspond à la courbe théorique donnée à la figure TEB MAQ 16 ? (\(SNR = E_s/N_0\))
  • Vérifiez un autre point de la courbe en modifiant le signal SNR[5:0] dans le fichier de testbench. Vous placez les points directement sur la figure (faîtes une copie écran).
  • Dans le fichier de simulation tb_MAQ16_Top.vhd, modifiez le signal SNR[5:0] pour qu'il représente une valeur de 24,02 dB, puis relancez la simulation pour vérifier le nouveau taux d'erreurs. Qu'observez-vous ? Pourquoi ?

Performances théoriques et simulées de la MAQ16 en termes de taux d'erreurs binaires versus rapport signal-à-bruit. RSB = SNR = ES/N0

Performances théoriques et simulées de la MAQ16 en termes de taux d'erreurs binaires versus rapport signal-à-bruit. RSB = SNR = ES/N0

SNR[5:0] \(\sigma_b\) \(SNR\) (dB) SNR[5:0] \(\sigma_b\) \(SNR\) (dB)
000001" 110111 8,3 100001" 10110 16,26
000010" 110101 8,62 100010" 10101 16,67
000011" 110100 8,79 100011" 10100 17,09
000100" 110010 9,13 100100" 10100 17,09
000101" 110001 9,31 100101" 10011 17,54
000110" 101111 9,67 100110" 10011 17,54
000111" 101110 9,86 100111" 10010 18
001000" 101101 10,05 101000" 10010 18
001001" 101011 10,44 101001" 10001 18,5
001010" 101010 10,65 101010" 10001 18,5
001011" 101001 10,86 101011" 10000 19,03
001100" 101000 11,07 101100" 10000 19,03
001101" 100111 11,29 101101" 1111 19,59
001110" 100110 11,52 101110" 1111 19,59
001111" 100100 11,99 101111" 1110 20,19
010000" 100011 12,23 110000" 1110 20,19
010001" 100010 12,48 110001" 1101 20,83
010010" 100001 12,74 110010" 1101 20,83
010011" 100000 13,01 110011" 1101 20,83
010100" 100000 13,01 110100" 1100 21,53
010101" 11111 13,29 110101" 1100 21,53
010110" 11110 13,57 110110" 1100 21,53
010111" 11101 13,86 110111" 1011 22,28
011000" 11100 14,17 111000" 1011 22,28
011001" 11011 14,48 111001" 1011 22,28
011010" 11010 14,81 111010" 1010 23,11
011011" 11010 14,81 111011" 1010 23,11
011100" 11001 15,15 111100" 1010 23,11
011101" 11000 15,51 111101" 1001 24,02
011110" 11000 15,51 111110" 1001 24,02
011111" 10111 15,88 111111" 1001 24,02
100000" 10110 16,26 AUTRES 111000 8,15

ref section Module generation_addition_bruit_bhd : annexe : est donnée en annexe A (cf. section \ref{sec:TP4_annexeA}) ref section cdc Module emetteur_vhd l'annexe D (cf. section \ref{sec:TP4_annexeA}) ref section cdc recepteur_vhd (cf .Annexe \ref{sec:TP4_annexeC}). ref !!! question "Question 5" \ref{tab:snr} ref !!! question "Question 5" \ref{fig:maq16_teb}. ref !!! question "Question 5" (cf. tableau \ref{tab:snr})

chapitre

section

subsection

subsubsection