See discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/341406833 Rappel sur le langage VHDL (pour les masters II SEM) Presentation · May 2020 DOI: 10.13140/RG.2.2.21655.60326 CITATIONS READS 0 407 1 author: Hamza Atoui Badji Mokhtar - Annaba University 88 PUBLICATIONS 45 CITATIONS SEE PROFILE All content following this page was uploaded by Hamza Atoui on 15 May 2020. The user has requested enhancement of the downloaded file. Rappel sur le langage VHDL Formation Systèmes Embarqués & Mobilité (SEM) Master 2 Par : ATOUI Hamza Plan • • • • • • Un langage HDL? Pourquoi un langage HDL? Avantages d’un langage HDL. Rôles d’un langage HDL. VHDL? VHDL aide mémoire (pour synthèse). Un langage HDL? • Un langage de description matériel (HARDWARE DESCRIPTION LANGUAGE) est un langage qui permet de modéliser et simuler un système électronique (numérique, analogique ou mixte). Pourquoi un langage HDL? • Pourquoi ne pas utiliser un langage informatique standard comme C/C++, Pascal ou ADA ? • Les langages informatiques ne sont pas adaptés pour la modélisation et la simulation des systèmes électroniques à cause de plusieurs choses: – – – – Types de données et signaux. L’exécution parallèle. Les délais de propagation. Etc. Avantages d’un langage HDL Indépendant des technologies. Réutilisation des conceptions déjà existantes. Conception hiérarchique. Utilisation des bibliothèques . Moyen d’échange entre les différents outils de conception. • Améliore la qualité. • Diminue le coût de conception. • Diminue le délai de mise en marche TTM (Time To Market) [Dans le commerce, le délai de mise sur le marché est le temps qui s'écoule entre la conception d'un produit et sa mise en vente]. • • • • • Rôles d’un langage HDL VHDL? • VHDL : VHSIC Hardware Description Language. – VHSIC : Very High-Speed Integrated Circuit. • Autres langages HDL: – VERILOG (concurrent numéro 1 de VHDL). – ABEL. – AHDL. – SystemC. VHDL aide mémoire (pour synthèse) • Prenant cet exemple: la description de la porte logique AND. x z y Que remarquez-vous ? VHDL aide mémoire (pour synthèse) • On a la vu de l’extérieur et de l’intérieur: – De l’extérieur: deux entrées « x » et « y » et une sortie « z ». – De l’intérieur: la relation entre la sortie et les entrées (comportement), c’est l’opérateur logique AND. • Une description en VHDL se base sur : – De décrire la vu de l’extérieur (ENTITY). – De décrire les différentes relations équations et flot de données entres les sorties et les entrées du circuit à décrire (ARCHITECTURE). VHDL aide mémoire (pour synthèse) • Comme n’importe quel langage, le descripteur respecte obligatoirement la syntaxe imposée par les inventeurs de ce langage!!! • Une description en VHDL utilise l’organisation suivante: 1. Inclusion des bibliothèques et des paquetages. 2. L’entité (la vu de l’extérieur). 3. L’architecture (la vu de l’intérieur). VHDL aide mémoire (pour synthèse) • La description suivante présente la description de la porte AND de l’exemple: Que remarquez-vous ? VHDL aide mémoire (pour synthèse) Inclusion des bibliothèques et des paquetages L’entité Bibliothèque IEEE Nom de circuit et le fichier VHDL Paquetage STD_LOGIC_1164 Type de signal Identifiants des signaux mode de signal L’architecture Nom de l’architecture L’équation entre les signaux de notre circuit VHDL aide mémoire (pour synthèse) • Pour les bibliothèques, la plus célèbre est la bibliothèque IEEE avec les deux paquetages STD_LOGIC_1164 et NUMERIC_STD. • les modes possibles sont: – IN: pour les entrées. – OUT: pour les sorties. – INOUT: pour les signaux bidirectionnels. – BUFFER: pour les signaux en sortie réentrants. VHDL aide mémoire (pour synthèse) • Le type le plus utilisé est le STD_LOGIC pour les scalaires et STD_LOGIC_VECTOR pour les vecteurs (tableaux). • Concernant l’architecture, le descripteur a le choix entre une description de haut niveau et portable (comportementale et/ou structurelle hiérarchique) ou une description de bas niveau (structurelle) à des limites de portabilité dû au composant cible. VHDL aide mémoire (pour synthèse) • Les signaux dans une description VHDL présentent des grandeurs physiques dans le circuit à décrire. • Il existe deux catégories de signaux: – Les signaux externes: comme les signaux de l’entité. – Les signaux internes: sont des signaux déclarés à l’intérieur d’une architecture. • Les signaux en VHDL sont systématiquement fortement typés, donc nécessite un contrôle strict et impose des fonctions de conversion ou de surcharge des opérateurs pour passer d’un type à un autre. VHDL aide mémoire (pour synthèse) • Types logiques scalaires: – BIT {‘0’, ‘1’} – BOOLEAN {TRUE, FALSE} – STD_LOGIC {‘0’, ‘1’, ‘Z’, ‘U’, ‘X’, ‘H’, ‘L’, ‘W’, ‘-’}. • Types logiques vectoriels: – STD_LOGIC_VECTOR: c’est un tableau de STD_LOGIC. • STD_LOGIC_VECTOR(3 DOWNTO 0) • STD_LOGIC_VECTOR(0 TO 3) • Le poids fort est toujours à gauche v(3) v(2) v(1) v(0) v(0) v(1) v(2) v(3) VHDL aide mémoire (pour synthèse) • Types arithmétiques vectoriels: – SIGNED/UNSIGNED: se sont des tableaux de STD_LOGIC comme STD_LOGIC_VECTOR pour effectuer des opérations arithmétiques sur des représentations signées/non signées dans le paquetage NUMERIC_STD. • Types mathématiques: – – – – INTEGER : entier signé sur 32 bits. NATURAL : entier positif. POSITIVE : entier positif non nul. REAL : réel en virgule flottante simple précision IEEE-754. • Types caractères: – CHAR. – STRING. VHDL aide mémoire (pour synthèse) • Exemples de déclaration des signaux: – Signaux externes: comme les signaux du PORT de l’ENTITY. – Signaux internes: Que remarquez-vous ? VHDL aide mémoire (pour synthèse) • Attention: les identificateurs sont toujours commencer par une lettre. • Le VHDL n’est pas sensible à la casse (ne différencie pas entre les caractères minuscules et les majuscules). • Vous pouvez définir des constantes comme la déclaration des signaux internes avec une valeur initiale. VHDL aide mémoire (pour synthèse) • Opérateurs en VHDL: – Opérateur d’affectation <= : x <= expression. – Opérateurs logiques : and, or, not, xor, xnor, nand, nor. – Opérateurs arithmétiques (pour INTEGER, SIGNED/UNSIGNED): +, -, *, /, mod, rem. – Opérateur de concaténation : &. – Opérateurs relationnels (pour INTEGER, SIGNED/UNSIGNED): <, >, <=, >=, =, /=. VHDL aide mémoire (pour synthèse) • Exemples sur les opérateurs: Est-ce qu’on peut permuter l’instruction descriptive ‘8’ avec l’instruction ’10’ ? VHDL aide mémoire (pour synthèse) • Absolution oui, par ce que les instructions entre le BEGIN et le END de l’architecture passent en parallèle, et prend le mon de l’espace du domaine concurrent. • N.B : dans le domaine concurrent, l’ordre des instructions a aucun effet ou importance. VHDL aide mémoire (pour synthèse) • Exemple: décrire en VHDL le circuit logique d’un MUX 4-TO-1. Structure interne de circuit OUTPUT Symbole de circuit VHDL aide mémoire (pour synthèse) • Avant de décrire, on a combien de signal interne dans la structure interne de circuit ? S0 S1 S2 S3 S4 S5 S6 S7 S8 S9 OUTPUT VHDL aide mémoire (pour synthèse) Que remarquez-vous ? VHDL aide mémoire (pour synthèse) • C’est lourd!!! C’est fastidieux!!! • Est-ce qu’il y a un autre moyen pour décrire le comportement de circuit sans passer par la structure interne (niveau portes logiques)??? • Absolution, oui! Comme n’importe quel langage, le VHDL compris l’affectation sélective et conditionnelle comme SWITCH et IF du langage C. VHDL aide mémoire (pour synthèse) • En VHDL, l’affectation sélective et conditionnelle se fait à travers : – L’affectation sélective : with … select … – L’affectation conditionnelle : when … else … • Retour à l’exemple de MUX VHDL aide mémoire (pour synthèse) • Par affectation sélective : Que remarquez-vous ? VHDL aide mémoire (pour synthèse) • Par affectation conditionnelle : Que remarquez-vous ? VHDL aide mémoire (pour synthèse) • Très élégant! très agréable! • L’affectation sélective ou conditionnelle convient à l’algorithmique! • Attention, il faut traiter tout les cas, sinon le synthétiseur (compilateur) arrive à créer des cellules mémoires de type D-LATCH. VHDL aide mémoire (pour synthèse) • A vous, faire la description en VHDL des circuits suivants: – Un décodeur 2-TO-4 – Un décodeur 2-TO-4 avec l’entrée ENABLE. – Un encodeur 4-TO-2 avec la sortie VALID. VHDL aide mémoire (pour synthèse) • Pour augmenter plus l’élégance du VHDL, les inventeurs de ce langage proposent l’aspect séquentiel à l’intérieur du domaine concurrent par l’introduction de la notion de processus (PROCESS). • Toute instruction à l’intérieur d’un processus se passe en séquentiel : VHDL aide mémoire (pour synthèse) • Comme le domaine concurrent, le domaine séquentiel utilise des affectation simples, sélectives, conditionnelles et même des boucles. • La syntaxe d’un processus : [nom_du_process:] process (liste_de_sensibilité) -- déclaration des variables internes du processus -- déclaration des constantes begin actions; end process [nom_du_process]; VHDL aide mémoire (pour synthèse) • La liste de sensibilité présente l’entrée d’excitation (exécution) du processus, si aucune liste, le processus s’exécute infiniment. • La notion de variable interne d’un processus présente un signal temporaire affecté par l’opérateur « := » immédiatement par rapport au signal interne d’une architecture qui s’affecte au moment de la sortie du processus. • La but principal d’une variable est d’augmenter la lisibilité de la description séquentielle. VHDL aide mémoire (pour synthèse) • L’affectation simple: – Signal par « <= ». – Variable par « := ». • L’affectation conditionnelle: if conditions then action; end if; if conditions then action1; else action2; end if; if conditions then action1; elsif conditions then action2; else action3; end if; VHDL aide mémoire (pour synthèse) • L’affectation sélective: case signal_variable is when val1 when vald to valf when val2|val3|val4 when others end case; => action1; => action2; => action3; => action4; VHDL aide mémoire (pour synthèse) • Les boucles (structures répétitives): for index in valeur_début to valeur_finale loop actions; end loop; while conditions loop actions; end loop; La structure WHILE, c’est difficile de synthétiser mais on utilise souvent pour la simulation! VHDL aide mémoire (pour synthèse) • Retour à l’exemple de MUX: • Avant d’aller vers la description par un processus, il faut d’abord déterminer la liste de sensibilité. – Pour les circuits logiques combinatoires, la liste de sensibilité se compose par toutes les entrées. – Pour les circuits logiques séquentiels est une autre histoire, on va étudier plus tard. VHDL aide mémoire (pour synthèse) • Donc, notre liste est {IN0, IN1, IN2, IN3, SL0, SL1} VHDL aide mémoire (pour synthèse) • Jusqu’à présent, on a étudié les circuits logiques combinatoires, dont les sorties dépend seulement des entrées. • un circuit logique séquentiel est un système dont les sorties dépend des entrées et son état interne (l’effet mémoire). les circuits séquentiels sont deux catégories: – Synchrones : le changement d’état du système se fait au moment de l’évènement de signal d’horloge. – Asynchrones : le changement d’état du système de fait soit par un évènement de signal d’horloge ou les entrées de forçage. VHDL aide mémoire (pour synthèse) • Exemples de circuits séquentiels de base : – La bascule SR. – La bascule D-LATCH. – La bascule DFF (Flip-Flop). – La bascule DFF avec les entrées de forçage (CLEAR et/ou PRESET). • Comment décrire en VHDL un tel système ??? • Pour les bascules Flip-Flop comment détecter la présence d’un franc (rising/falling) sur le signal d’horloge ??? VHDL aide mémoire (pour synthèse) • Pour décrire efficacement un circuit logique séquentiel en VHDL, tout simplement, on utilise la notion du domaine séquentiel par processus (PROCESS). • N.B : on peut faire la description en VHDL des circuits séquentiels par le domaine concurrent, mais ce genre de description reste dure et déconseillée. • La détection de présence d’un franc sur un signal se fait par ses attributs d’évolution (dédié au synthèse). – nom_signal'event : retourne TRUE s’il y a un changement d’état. – nom_signal'last_value : retourne la dernière valeur d’un signal avant le dernier changement d’état. VHDL aide mémoire (pour synthèse) • L’équation de détection d’un RISING_EDGE: clk'event and clk'last_value = '0' and clk = '1' • L’équation de détection d’un FALLING_EDGE: clk'event and clk'last_value = '1' and clk = '0' VHDL aide mémoire (pour synthèse) • Ou tout simplement par l’invocation des fonctions suivantes: – rising_edge(signal) : retourne TRUE au moment de détection d’un RISING_EDGE. – falling_edge(signal) : retourne TRUE au moment de détection d’un FALLING_EDGE. VHDL aide mémoire (pour synthèse) • Décrire en VHDL les circuits séquentiels suivants: – La bascule D-LATCH sur niveau bas puis sur niveau haut. – La bascule DFF sur rising_edge. – La bascule DFF avec les entrées de forçage CLEAR et PRESET sur rising_adge. – La bascule DFF avec l’entrée ENABLE sur rising_edge. – La bascule DFF avec ENABLE et CLEAR/PRESET synchrone sur rising_edge. VHDL aide mémoire (pour synthèse) VHDL aide mémoire (pour synthèse) VHDL aide mémoire (pour synthèse) VHDL aide mémoire (pour synthèse) VHDL aide mémoire (pour synthèse) VHDL aide mémoire (pour synthèse) • A vous, faire la description en VHDL du circuit suivant: VHDL aide mémoire (pour synthèse) • A vous, faire la description en VHDL du circuit suivant: VHDL aide mémoire (pour synthèse) • Jusqu’à présent, on a vu la description comportementale d’un circuit logique! Quelle est l’histoire d’une description structurelle? Et comment faire? VHDL aide mémoire (pour synthèse) • Pour assembler des blocks fonctionnels également décrits en VHDL ou dans un autre langage. • Pour utiliser des ressources internes des composants (CPLD, FPGA…) ou des primitives d’un constructeur (XILINX, ALTERA…) à travers des bibliothèques. • Pour écrire des fichiers de test (TESTBENCH) VHDL aide mémoire (pour synthèse) • Exemple d’une description structurelle: Signal interne Structure d’un MUX 2-TO-1 Structure d’une bascule D VHDL aide mémoire (pour synthèse) VHDL aide mémoire (pour synthèse) Mot clés pour appeler une structure Instances des composants DFF et MUX21 Signaux de DFF Connecter à VHDL aide mémoire (pour synthèse) VHDL aide mémoire (pour synthèse) • Positionnement du problème : le type STD_LOGIC_VECTOR est un simple vecteur de STD_LOGIC mais présente aucune information sur la donnée dedans, est-ce qu’elle est signée au non? Comment faire des flots de données (chemin de données) en utilisant des opérations arithmétiques comme l’addition la soustraction…? • Exemple : la conception des compteurs nécessite l’utilisation de l’opérateur + ou – ! VHDL aide mémoire (pour synthèse) • Pour la simulation, le type INTEGER fait l’affaire mais pour la synthèse, la bibliothèque IEEE à travers le paquetage NUMERIC_STD propose les types SIGNED et UNSIGNED. • Le type SIGNED/UNSIGNED est un vecteur de STD_LOGIC mais dont l’information est caractérisée comme son nom l’indique. VHDL aide mémoire (pour synthèse) • Le paquetage NUMERIC_STD propose les possibilités suivantes: – – – – UNSIGNED SIGNED + UNSIGNED SIGNED + + UNSIGNED SIGNED + NATURAL INTEGER UNSIGNED SIGNED UNSIGNED SIGNED • Avec les fonctions de conversions suivantes: – – – – TO_INTEGER(UNSIGNED) TO_INTEGER(SIGNED) TO_UNSIGNED(NATURAL, SIZE) TO_SIGNED(INTEGER, SIZE) NATURAL INTEGER UNSIGNED SIGNED VHDL aide mémoire (pour synthèse) • Conversions explicites de types : – STD_LOGIC_VECTOR(UNSIGNED) STD_LOGIC_VECTOR – STD_LOGIC_VECTOR(SIGNED) STD_LOGIC_VECTOR – UNSIGNED(STD_LOGIC_VECTOR) UNSIGNED – SIGNED(STD_LOGIC_VECTOR) SIGNED VHDL aide mémoire (pour synthèse) • Faire la description en VHDL du compteur suivant : – Le comptage se fait sur 4 bits. – Tous les signaux sont de type STD_LOGIC. CLK x ↑ ↑ x RST 1 0 0 0 EN x 1 1 0 L x 1 0 x INIT(INPUT) XXXX XXXX XXXX XXXX CNT (OUTPUT) 0000 (RESET) XXXX (LOAD) Increment by 1 Unchanged VHDL aide mémoire (pour synthèse) • Synoptique du compteur (symbole): INIT 4 EN RST CLK Compteur 4 CNT L VHDL aide mémoire (pour synthèse) VHDL aide mémoire (pour synthèse) VHDL aide mémoire (pour synthèse) • Les circuits mémoires sont indispensables dans les systèmes à µP/µC et les SoC, leur description en VHDL se basent sur la déclaration d’un nouveau type qui s’appelle matrice « array ». • la syntaxe de déclarer d’un nouveau type array : – type NOM_TYPE is array(V1 to V2) of subtype; – type NOM_TYPE is array(V2 downto V1) of subtype; • N.B : les deux syntaxes au-dessus se sont les plus utilisées VHDL aide mémoire (pour synthèse) • Description d’un circuit ROM 8x2 (8 emplacements à 2bits chacun). ADDR 3 Bus d’adresse ROM 8x2bits DB 2 Bus de données VHDL aide mémoire (pour synthèse) VHDL aide mémoire (pour synthèse) • Description d’un circuit RAM 8x4 à base de D-LATCH ADDR 3 RAM 8x4bits DB_IN DB_OUT 4 4 WE VHDL aide mémoire (pour synthèse) VHDL aide mémoire (pour synthèse) • Description d’un circuit RAM 8x4 à base de DFF ADDR 3 RAM 8x4bits DB_IN DB_OUT 4 4 CLK WE VHDL aide mémoire (pour synthèse) VHDL aide mémoire (pour synthèse) • Et pour clôturer cet aide mémoire en VHDL, on va maintenant aborder le sujet de description des machines à états finis FSM de Moore. Entrées Circuit combinatoire d’entrée Registre Etat suivant CLR Etat en cours Circuit combinatoir e de sortie Sorties CLK Sorties = F(Etat en cours) Etat suivant = G(Etat en cours, Entrées) VHDL aide mémoire (pour synthèse) • D’après la synoptique , la FSM de Moore se compose par: – Soit 3 processus: • Processus de registre, • Processus de la logique de sortie, • Processus de la logique de l’état suivant. – Soit 2 processus: • Processus de registre avec la logique de l’état suivant, • Processus de la logique de sortie. VHDL aide mémoire (pour synthèse) • Exemple : détecteur de séquence qu’on a vu dans le rappel de la logique combinatoire/séquentielle. View publication stats