INTRODUCTION
Le VHDL est un langage de description du matériel utilisé en électronique numérique. En tant que standard, il est indépendant du logiciel utilisé pour la compilation, la programmation des composants, la simulation, etc.
L'intérêt d'une telle description réside dans son caractère exécutable : une spécification décrite en VHDL peut être vérifiée par simulation, avant que la conception détaillée ne soit terminée. En outre, les outils de conception assistée par ordinateur permettant de passer directement d'une description fonctionnelle en VHDL à un schéma en porte logique ont révolutionné les méthodes de conception des circuits numériques, ASIC ou FPGA.
Pendant ces séances, vous programmerez un FPGA (field-programmable gate array, réseau de portes programmables in situ) de la marque XILINX , type SPARTAN 3E contenant plus de 500 000 portes logiques.
Il vous est demandé de travailler individuellement et de créer un projet par exercice, de tester chaque programme sur le FPGA.
Avancez à votre rythme, ce n'est pas une course contre la montre, faites ce que vous pouvez dans le temps imparti. L'énoncé est volontairement trop long :)
A la fin, merci de compiler les fichiers VHD , UCF, et .BIT (donc 3 fichiers par exercice fait), de mettre tout cela dans un ZIP, et envoyer par email flemarchand@centrale-marseille.fr
--
Nota Le langage VHDL : il existe plein de ressources sur internet. exemple: https://drive.google.com/file/d/1d_CK8pQSt8_uKTHUrJxj9ccNu4oh7vWJ/view?usp=sharing
Sur MacOS: Xilinx ne peut être installé: vous pouvez utiliser un éditeur pour le code, puis compiler et enfin simuler. Par contre impossible de vérifier sur la carte FPGA . utiliser le tuto ici : https://peterbonnesoeur.medium.com/vhdl-on-your-mac-264ff6cc0600
Sur Windows, si probleme avec xilinx, je vous propose de télécharger Symphony EDA Sonata 3.1 VHDL Simili pour Windows ou Linux http://www.symphonyeda.com/ . documentation associée : https://cupdf.com/document/similiumanual.html
La carte SPARTAN 3E. A noter les entrées et sorties sur la carte
Le FPGA lui même. 500K portes logiques programmables et reprogrammables (cellules EEPROM)
EX 3: monte charges
EX4 : Train électrique
EX7: Chariots
La carte: SPARTAN 3E. Entrées switchs N17, H18, L14,L13, boutons poussoirs K17, D18, H13, V4 (nécessitent un pull down) . entrée clk interne 50Mhz en C9
Sorties LED F9, E9, D11, C11,F11,E11, E12,F12 . La doc officielle de la carte est ici: https://www.xilinx.com/support/documentation/boards_and_kits/ug230.pdf
Un bon tuto d'utilisation avec le soft est ici: https://eprints.qut.edu.au/76297/1/Spartan3E_Tutorial_1ver2.pdf
Le FPGA à programmer est de type SPARTAN 3E XCS500E FG320 (voir photo numéro 2)
Installer https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vivado-design-tools/archive-ise.html version 14.7 pour win10. Prévoir 50Go de dispo sur le DD. Il est indispensable de s'inscrire en ligne. Cela installera aussi une Virtual Machine indispensable sous environnement Windows 64 bits. Pour en savoir plus, voir sur https://www.xilinx.com/support/documentation/sw_manuals/xilinx14_7/ug1227-ise-vm-windows10.pdf
Lancer "project navigator" sur le bureau. Cela ouvre la VM qui est par défaut configurée en clavier QWERTY. Vous pouvez y remédier avec menu en haut > entrée> clavier> keybr fr
Dérouler le tuto video https://youtu.be/l5YIhvTbMBg permettant de réaliser un premier montage.
Réaliser sur ce montage basique un test bench. Pour cela suivre le commentaire "utilisation des testbenchs pour simuler les chronogrammes" sous la vidéo.
EXERCICE 1 Commande des feux d'une automobile
Une automobile comprend 4 paires de phares qui sont :
• V : veilleuses.
• C : feux de croisement
• R : feux de route
• A : phares antibrouillards.
Ces phares sont commandés par une série de 4 interrupteurs : v, r, c, a. Les interrupteurs v, c, r,a provoquant respectivement l’allumage des Veilleuses, des feux de Croisement, des feux de Route et des phares Antibrouillard. On s'impose le fonctionnement suivant :
• tout interrupteur allume nécessairement les veilleuses,
• on ne peut allumer en plus des veilleuses qu'une seule paire de phares,
• les antibrouillards sont prioritaires sur les feux de route,
• les feux de croisement sont prioritaires sur les feux de route et les antibrouillards.
Réaliser les fonctions V, C, R, A sur la carte FPGA. En cas d'utilisation d'un bouton poussoir, s'assurer que dans le fichier UCF il y a bien spécifié "pulldown".
NET "<signal name>" LOC = <pin number> |PULLDOWN;
EXERCICE 2 : Compteur Modulo 16
Réaliser un compteur modulo 16 de fréquence de rafraichissement 1Hz, avec comme entrée l'horloge interne C9 à 50MHz. J'ai indiqué comment faire dans les commentaires de la vidéo https://youtu.be/l5YIhvTbMBg. L'utilisation de process est obligatoire. Dans un premier temps, on créé une sous horloge de freq. 1Hz puis le compteur
--
LES EXERCICES SUIVANTS SONT A RESOUDRE PREFERENTIELLEMENT AVEC DES MACHINES A ETATS, EN DECOMPOSANT SOUS FORME D'ETATS- ON UTILSERA COMME SIGNAL d'HORLOGE C9 , 50Mhz
exemple de programmation de type machine à états:
Etat est défini comme signal
process(clk)
begin
if clk'event and clk='1' then
case Etat is
when "000"=> S<='0';
if E='1' then Etat<="001";
else Etat<="000";
end if;
etc ....
voir http://bravo.univ-tln.fr/vhdl/ge2/cours/pdf/VHDL%20machine%20etat.pdf par exemple
EXERCICE 3 : Monte-charge (voir schéma)
On considère un monte-charge effectuant la liaison entre les 2 niveaux d’un bâtiment. Le moteur est commandé par 2 signaux M (pour monter) et D (pour descendre).
Ces commandes sont élaborées à partir des entrées
- B : bouton poussoir ( B=1 si le bouton est enfoncé)
- p0 et p1 : détecteurs de position aux niveaux 0 et 1 ( pi=1 si le monte-charge est présent au niveau i)
Le fonctionnement du système est décrit par le cahier des charges suivant :
Quand la cabine est à un étage si B est inactif elle s’arrête, si B est actif elle change d’étage. Quand la cabine est entre 2 étages la dernière commande (M ou D) est maintenue.
Réaliser la programmation des commandes M et D sur la carte.
EXERCICE 4: Commande de Train électrique (voir schéma)
On considère un train électrique devant effectuer 3 boucles A, B, C, sélectionnables par les aiguillages p et q. Le passage dans une boucle est détecté par un contact de type T noté a, b, c, remontant après le passage du train.
L’itinéraire est le suivant : A->B->B-> C-> A->B->B->C, … et ainsi de suite sachant qu’initialement le train est à l’arrêt au point de Départ. a, b et c sont des contacts dont la valeur est à « 1 » pendant le passage du train.
p et q sont les valeurs des aiguillages :
si (p,q)=(0,0) la boucle sélectionnée est la A.
si (p,q)=(1,0) la boucle sélectionnée est la B.
si (p,q)=(0,1) la boucle sélectionnée est la C.
Etablir le pilotage des aiguillages p et q à l’aide de Machines à Etats.
10. EXERCICE 5 : Détecteur de séquence ADN
L'ADN est une molécule formée d’une chaîne de centaines de milliers de molécules plus petites appelées nucléotides. Il y a dans l'ADN quatre sortes de nucléotides que l'on désigne respectivement par les lettres A, C, G et T. Un système séquentiel comporte une tête de lecture lisant à chaque instant d’horloge un nouveau nucléotide. Réalisez un montage avec une sortie S permettant de détecter des séquences A*GnT comprenant au minimum 4 nucléotides. S est à zéro tant que la séquence n’est pas détectée, et S passera à un pendant un cycle d’horloge lors de la détection de la séquence, avant de revenir à zéro et de pouvoir potentiellement détecter une nouvelle séquence. La période horloge sera fixée à environ 2secondes.
Le symbole * à la deuxième position de la séquence veut dire qu'on accepte n'importe lequel des nucléotides (A,C,G,T) et l’exposant n (n supérieur ou égal à 1) à la troisième position de la séquence indique qu'on accepte un nombre non déterminé du même nucléotide.
Exemples de séquences A*GnT : ACGT, AAGGT, ACGGGGGT, ATGGGGT, AGGGGGT
11. EXERCICE 6 : Compteur de scores
On cherche à faire la synthèse d’une machine qui détermine le vainqueur d'un match de deux joueurs de la façon suivante. A chaque tour, le joueur 1 ou le joueur 2 gagne éventuellement un point (il peut y avoir égalité). Quand un joueur possède 3 points d’avance, il gagne la partie. Le système possède une horloge interne H de fréquence 0.5Hz. Quand la partie est finie, une autre commence au prochain cycle d’horloge. Réaliser la programmation VHDL de cette machine.
12. EXERCICE 7: Déplacement de chariots
Considérons deux chariots C1 et C2 qui peuvent se déplacer respectivement entre les points A1 et B1, et A2 et B2, sur deux rails indépendants de longueur quelconque. Ils sont équipés de capteurs de fin de course a1 et b1, et a2 et b2 conformément à la figure ci-après. Les déplacements de ces chariots sont commandés par deux moteurs à deux sens de rotation D1 et G1, et D2 et G2 respectivement. Les vitesses des deux chariots sont également quelconques. Lorsqu’un opérateur appuie sur le bouton poussoir m, et si les deux chariots sont en A1 et A2, alors ceux-ci partent simultanément vers la droite, jusqu’à atteindre B1 et B2. Le premier chariot Ci qui arrive à droite au point Bi doit attendre l’arrivée de l’autre chariot à droite. C’est alors seulement qu’ils repartiront simultanément et immédiatement vers les points A1 et A2. Le cycle est terminé lorsque les deux chariots sont en Ai. On vous demande de réaliser le pilotage des moteurs (G1,D1,G2,D2) à l’aide de Machines à Etat.
13. EXERCICE 8 : commande de feux tricolores
Un passage pour piétons travers une avenue. Il est protégé par un feu tricolore qui fonctionne à la demande des piétons. En l’absence de toute demande, les feux sont à l’orange clignotant (un nombre Tor de secondes allumés, un nombre Tor de secondes éteints). Quand un piéton souhaite traverser l’avenue, il est invité à appuyer sur un bouton P, ce qui provoque le déclenchement d’une séquence (vue des voitures)
a) orange fixe pendant 2 Tor secondes
b) rouge pendant Tr secondes
c) vert pendant Tv secondes, pour laisser passer le flot de voitures pendant un minimum de temps
d) retour à la situation par défaut (feux orange clignotant) .
L’appel des piétons est mémorisé. Sur une pression du bouton P, l’appel est enregistré, quel que soit l’état des feux au moment de la pression sur le bouton. L’état « appel » est remis à zéro lors du retour à la situation par défaut.
Réaliser le pilotage des feux R O V pour Tor = 2s, Tr =5s, Tv=10s