1 / 48

Polytech'Orléans

Polytech'Orléans. Filière ESI MODULE Processeurs du traitement du signal Introduction au VHDL FASCICULE DE COURS ANNÉE 2005-2006 SPE 3 Option “ESI” Rodolphe WEBER. FORMATION VHDL. Introduction Premiers pas Les Objets VHDL Les Opérateurs VHDL Assignation concurrente

elvin
Télécharger la présentation

Polytech'Orléans

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Polytech'Orléans Filière ESI MODULE Processeurs du traitement du signal Introduction au VHDL FASCICULE DE COURS ANNÉE 2005-2006 SPE 3 Option “ESI” Rodolphe WEBER Introduction au VHDL - R.WEBER - Polytech'Orleans

  2. FORMATION VHDL • Introduction • Premiers pas • Les Objets VHDL • Les Opérateurs VHDL • Assignation concurrente • Assignation séquentielle • Les Testbenchs • Les Compléments • Les machines d'états • Les règles de conception Introduction au VHDL - R.WEBER - Polytech'Orleans

  3. Introduction Logic Standard Logic ASIC CPLDs Les circuits logiques programmables Source: Dataquest Programmable Logic Devices (PLDs) Gate Arrays Cell-Based ICs Full Custom ICs SPLDs (PALs) FPGAs Introduction au VHDL - R.WEBER - Polytech'Orleans

  4. Introduction Les circuits logiques programmables • Les CPLD (complex programmable logic devices) • association de plusieurs blocs logiques • chaque bloc logique contient des macro-cellules (qq10 à qq100) • une macro-cellule réalise une fonction logique combinatoire + bascule • matrice de connexions centrale • temps de propagation prévisible • horloge rapide • technologie eeprom ou flash, ISP Introduction au VHDL - R.WEBER - Polytech'Orleans

  5. Introduction Les circuits logiques programmables • Les FPGA (Field programmable gate arrays) • matrice de blocs logiques (fonctions logiques, multiplexeurs, LUT) • densité plus grande • réseau d’interconnexions • temps de propagation variable • deux technos SRAM ou antifusible Introduction au VHDL - R.WEBER - Polytech'Orleans

  6. Introduction COUT COUT YB YB Carry & Control Logic Carry & Control Logic Look-Up Table Look-Up Table Y Y G4 G3 G2 G1 G4 G3 G2 G1 S S D D Q Q O O CK CK EC EC R R F5IN F5IN BY SR BY SR XB XB Look-Up Table Carry & Control Logic Look-Up Table Carry & Control Logic X X S S F4 F3 F2 F1 F4 F3 F2 F1 D D Q Q O O CK CK EC EC R R CIN CLK CE CIN CLK CE SLICE SLICE Détail extrait de l'architecture d'un FPGA Xilinx Exemple d'une single-slice d'un CLB (Configurable Logic Block) d'un Virtex ou Spartan II • + éventuellement des fonctions spécialisées implantées en dur : • + entrees/sorties • + Blockram • + DLL • + registre à décalage • + multiplieurs • + communications • + …. Introduction au VHDL - R.WEBER - Polytech'Orleans

  7. Introduction Les ASICs (Application Specific Integrated Circuit) • Conçus pour des applications particulières : • réduction des coûts pour les grandes productions • meilleures performances (vitesse, consommation,…) • confidentialité, durcissement. • Différentes technologies : • Pré-caractérisés (standard cells) : à partir d'un wafer nu • Pré-diffusé (gate array) et mer de portes (sea of gates) : les transistors sont déjà sur le wafer, il reste à déposer les interconnexions Introduction au VHDL - R.WEBER - Polytech'Orleans

  8. Introduction Comparaison ASIC/FPGA Introduction au VHDL - R.WEBER - Polytech'Orleans

  9. Introduction mémoire a ≈ Fonctionnellement Vision comportementale f(a3,a2,a1,a0) b [b2,b1,b0] [a3,a2,a1,a0] Niveaux logiques 1 2 3 delay Rappels d’électronique numérique Système combinatoire (asynchrone) : [b2,b1,b0]=f(a3,a2,a1,a0) a0 b0 and a1 or b1 mult a2 xor b2 a3 not Mais temporellement : si niveaux logiques  alors delay • Mauvaise performance en temps • Difficultés pour mettre au point • Difficultés pour tester tous les cas Introduction au VHDL - R.WEBER - Polytech'Orleans

  10. Introduction (Registre = flip-flop = bascule D = Z-1) « Q=D au front de clk1, sinon Q=Q » Feed-back combinatoire D Q registre registre registre registre clk1 logique combinatoire a(n-1) b(n-1) clk2 c(n)=b(n-1) d(n) e(n+1)=d(n)) f(n+1) ^ ^ ^ ^ g(n+2)) Design Synchrone logique combinatoire logique combinatoire logique combinatoire a b c d e f g • Améliore les performances en vitesse • Simplifie la vérification fonctionnelle •  Autorise des analyses statiques du timing • Assure une parfaite testabilité • Architectures des composants calquent cette vision (cf. architecture virtex) Introduction au VHDL - R.WEBER - Polytech'Orleans

  11. Introduction Qu'est-ce que le VHDL ? • VHSIC Hardware Description Language • VHDL est un langage de modélisation et/ou de synthèse de systèmes électroniques • C'est un langage normalisé au niveau international, il estsensé être indépendant de tout compilateur ou simulateur (actuellement version 93, la version 2000 existe mais les modifications sont spécifiques). • Il peut cibler des CPLDs, des FPGAs ou des Asics. • Conception de haut niveau d'abstraction : Modification rapide de la conception, réduction cycle, réduction risques… • Meilleur management du projet, développement de grosses conception (structure de programmation hiérarchisée) • Adéquation entre le style d'écriture et les compilateurs : les résultats en terme de vitesse ou de compacité peuvent être notablement différents. Introduction au VHDL - R.WEBER - Polytech'Orleans

  12. Introduction Flux de conception VHDL et Niveaux d'abstraction Simulation rapide Faible précision Simulation VHDL : VHDL Synthèse comportementale validation • fonctionnelle Editeur VHDL rtl Synthèse VHDL • structurelle validation timing logique Fichier de contrainte Placement/Routage Simulation lente(x100) Grande précision librairies (VITAL,UNISIM…) VHDL Générique Testbench génération de stimuli comportementale rtl : Register Transfert level : ensemble de registres (synchro.), interconnectés par de la logique combinatoire Introduction au VHDL - R.WEBER - Polytech'Orleans

  13. Introduction Introduction Procédure de développement d'un composant programmable Introduction au VHDL - R.WEBER - Polytech'Orleans

  14. Premiers pas I ) Structure d’un fichier VHDL Permet d’accéder à d’autres descriptions définies dans des diverses librairies. Rem. : Plusieurs couples entity/architecture sont possibles au sein d ’un même fichier. Les clauses library et use ne sont pas globales. Leur effet s’arrête dès la déclaration d’une nouvelle entity. D'office il y a Standard et Work library ieee; use ieee.std_logic_1164.all; entity essai is port (a,b : instd_logic; c : out integer); end essai; architecture archi1 of essai is Signal s1, s2 : std_logic; begin . . end archi1; Description de l’interface a Description du comportement de l’entité. Pour une même entité plusieurs architectures sont possibles. c s1 s2 b Introduction au VHDL - R.WEBER - Polytech'Orleans

  15. Premiers pas Exemple de projet avec l’outil Xilinx et Modelsim • Simulation : • (Ouvrir le webpack) • Ecrire le composant en VHDL • Ecrire le testbench associé en VHDL • Ecrire le batch (*. do) qui va compiler tous les fichiers dont vous avez besoin pour la simulation • Ouvrir Modelsim, lancer le fichier batch puis la simulation • Synthèse : • Ouvrir le webpack • Ouvrir ou créer un projet (pas de chemin avec des espaces) • Insérer tous les fichiers nécessaires dans ce projet • (facultatif) Définir un fichier de contraintes (*.ucf) • Lancer les différentes étapes de la synthèse. Chaque étape peut générer un fichier VHDL pour la simulation qu'il suffit de préciser ensuite dans le fichier batch de simulation. rst a c rst D b clk en en Intro.vhd Introduction au VHDL - R.WEBER - Polytech'Orleans

  16. Premiers pas Exemple de projet avec le webpack et ModelSim intro_tb.vhd intro.vhd library ieee; use ieee.std_logic_1164.all; entity intro_tb is end intro_tb; architecture vhd of intro_tb is component intro port ( rst : in std_logic; clk : in std_logic; en : in std_logic; a : in std_logic; b : in std_logic; c : out std_logic); end component ; signal rst : std_logic :='1'; signal clk : std_logic := '0'; signal en : std_logic:= '0'; signal a : std_logic:= '0'; signal b : std_logic:= '0'; signal c : std_logic; constant periode : time := 20 ns; begin clk <= not clk after periode/2; rst <= '1', '0' after 45 ns; --generateur pseudoaleatoire pour a et b et du en process variable m_a : std_logic_vector(6 downto 1):= "000001"; variable m_b : std_logic_vector(6 downto 1):= "011001"; variable m_en : std_logic_vector(6 downto 1):= "110001"; begin wait until clk='1'; a <= m_a(6) after periode/7; m_a(6 downto 2) := m_a(5 downto 1); m_a(1) := m_a(1) xor m_a(6); b <= m_b(6) after periode/5; m_b(6 downto 2) := m_b(5 downto 1); m_b(1) := m_b(1) xor m_b(6); en <= m_en(6) after periode/3; m_en(6 downto 2) := m_en(5 downto 1); m_en(1) := m_en(1) xor m_en(6); end process; -- instantiation du composant tester test : intro port map (rst => rst, en => en, a => a, b => b, c => c ); end vhd; library ieee; use ieee.std_logic_1164.all; entity intro is port ( rst : in std_logic; clk : in std_logic; en : in std_logic; a : in std_logic; b : in std_logic; c : out std_logic); end intro ; architecture vhd of intro is begin process (clk, rst) begin if rst='1' then c <= '0'; elsif rising_edge(clk) then if en='1' then c <= a and b; end if; end if; end process; end vhd; Introduction au VHDL - R.WEBER - Polytech'Orleans

  17. Premiers pas Exemple de projet avec le webpack et ModelSim intro.do vlib work vcom -93 intro.vhd vcom -93 intro_tb.vhd vsim intro_tb view structure view signals view wave do wave_intro.do run 1000 ns Introduction au VHDL - R.WEBER - Polytech'Orleans

  18. Premiers pas Le Design Flow Xilinx 1) Synthesis Conversion VHDL => netlist HDL Machine d’états : très éfficaces pour décrire des process HDL ParsingIdentification of language syntax errors Une description Bien précise = Une fonction connue Et donc optimisée HDL SynthesisMacro recognition, FSM extraction,resource sharing • Soft • Hard Low Level OptimizationMacro implementation, timing optimization,LUT mapping, register replication Constraints .NGC .LOG Introduction au VHDL - R.WEBER - Polytech'Orleans

  19. Premiers pas Le Design Flow Xilinx Implement • 2) Implementationincludes many phases • Translate: Merge multiple design files into a single netlist • Map: Group logical symbols from the netlist (gates) into physical components (CLBs and IOBs) • Place & Route: Place components onto the chip, connect them, and extract timing data into reports . . . Constraints Translate Map simulation Place & Route Modèle vhdl . . . 3)Download Fichier binaire => composants Introduction au VHDL - R.WEBER - Polytech'Orleans

  20. Premiers pas 1ères Règles d’écriture du VHDL • VHDL 87 (obsolète), VHDL 93 ( en cours) , VHDL 2000 (très peu de changement) • La simulation comportementale est indépendante du style d'écriture et du compilateur utilisée et de la cible , pas la synthèse • Les commentaires commencent par deux tirets et se prolongent jusqu’à la fin de la ligne • -- ceci est un commentaire • En général, les commandes VHDL se terminent par ';' • Aucune distinction entre les minuscules et les majuscules • Règles de dénomination : • 26 lettres de l ’alphabet + les 10 chiffres + ‘ _ ’ • le premier caractère est une lettre • interdit : v__hdl, vhdl_ et les noms réservés • Valeurs explicites : • entiers : 123, 1_2_3, 2#11#  3, 16#0F#  15, 2#11#e3  24 • caractère ASCII: ‘ a ’ , ‘ @ ’ • bit : '0', '1', 'Z', '-',... • chaîne de caractère : "composant programmable" • bus : "0010", "001-", "0Z1"... X"F6"  "11111100" • boolean : true, false Introduction au VHDL - R.WEBER - Polytech'Orleans

  21. Les objets VHDL II) Les objets VHDL • Les objets manipulés en VHDL sont : • les ports E/S (PORT) • les signaux (SIGNAL) • les constantes (CONSTANT) • les variables (VARIABLE) (cf. les PROCESS) • les paramètres (GENERIC) (cf. compléments) • Ces objets représentent une valeur • Ils doivent être typés • vhdl standard (integer, bit, bit_vector, boolean, time, array, énumération…) • librairie IEEE Standard 1164 : ieee.std_logic_1164 (std_logic, std_logic_vector,…) • librairie IEEE Numeric_std (signed, unsigned,…) • type défini par l'utilisateur Introduction au VHDL - R.WEBER - Polytech'Orleans

  22. Les objets VHDL Les ports E/S Exemple : • Ils sont définis dans la section entity • Ils listent les signaux d'interface avec l'extérieur du composant • Il y a 4 modes possibles : • L'affection se fait avec "<=" (sauf pour le mode IN) library ieee; use ieee.std_logic_1164.all; entity essai is port (a,b : instd_logic; c : out std_logic); end essai; architecture vhd of essai is begin c <= a and b; end vhd; essai a c b Introduction au VHDL - R.WEBER - Polytech'Orleans

  23. Les objets VHDL Les signaux • Ils représentent une équipotentielle (virtuelle ou non) • Ils doivent être déclarés avant utilisation • Ils peuvent être déclarés : • Dans un package, ils sont alors globaux • Dans une entity, ils sont communs à toutes les architectures de l'entity • Dans l'architecture, ils sont locaux • L'affectation se fait avec "<=" • L'initialisation se fait avec ":=" (attention danger car OK pour la simu mais pas pour la synthèse !) architecture rtl of essai is signal carry : std_logic :='0'; begin : carry <= a and b : end rtl; entity essai is port (a,b : instd_logic; c : out integer); signal rst : std_logic; end essai; package essai is signal clk : std_logic; signal rst : std_logic :='1'; end essai; Introduction au VHDL - R.WEBER - Polytech'Orleans

  24. Les objets VHDL architecture vhd of essai is signal sigbuf : std_logic; begin sigbuf <= a and b; sigout <= sigbuf; c <= sigbuf or a; … end vhd; La solution : utiliser un signal intermédiaire Les ports E/S vs. les signaux essai b sigout library ieee; use ieee.std_logic_1164.all; entity essai is port (a,b : instd_logic; sigout,c :out std_logic); end essai; architecture vhd of essai is begin sigout <= a and b; c <= sigout or a; -- ne fonctionne pas … end vhd; a sigbuf c Introduction au VHDL - R.WEBER - Polytech'Orleans

  25. Les objets VHDL Les constantes • Ils doivent être déclarés avant utilisation • Ils peuvent être déclarés : • Dans un package, ils sont alors globaux • Dans une entity, ils sont communs à toutes les architectures de l'entity • Dans l'architecture, ils sont locaux • L'affectation se fait avec ":=" architecture rtl of essai is constant VCC : std_logic :='1'; constant GND : std_logic:='0'; constant periode : time := 20 ns; begin : end rtl; Introduction au VHDL - R.WEBER - Polytech'Orleans

  26. Les objets VHDL Le typage des objets VHDL • Types scalaires prédéfinis • integer : par défaut 32bits mais limites paramétrables. ex.: signal val integer range 0 to 15 implique que val ne peut prendre que les 16 valeurs de 0 à 15. Il sera donc codé sur 4 bits • natural : sous-type de integer, limité aux nombres >=0 • positive : sous-type de integer, limité aux nombres >0 • real : (non synthétisable pour les simus seulement) • time : (non synthétisable pour les simus seulement)x := 20 ns; • Types énumérations prédéfinis • character, string : (ex: 'a', "bonjour") • bit, bit_vector : seulement 0 ou 1 (ex. : '0', '1', "0101") type peu ou pas utilisé • boolean : false ou true Introduction au VHDL - R.WEBER - Polytech'Orleans

  27. Les objets VHDL Le typage des objets VHDL (suite) • std_logic et std_logic_vector(package std_logic_1164) : 9 états possibles dont 4 synthétisables 0 : bas 1 : haut Z : haute impédance - : indifférent Ex.: signal s :std_logic; -- représente 1 bit signal bus : std_logic_vector( 7 downto 0); -- représente un vecteur (un bus) de 8 bits bus(7) représente le bit de poids fort et bus(0) le bit du poids faible signal toto : std_logic_vector( 0 to 3); -- représente un vecteur (un bus) de 4 bits toto(0) représente le bit de poids fort et toto(3) le bit du poids faible s <= ‘1’; -- notez le simple cote bus <= "01-10ZZZ" ; -- notez le double cote bus(1) <= s and bus(2) ; toto <= bus (7 downto 4); affectation rapide d'un vecteur : bus <= (others => '0')  bus <= "00000000" Introduction au VHDL - R.WEBER - Polytech'Orleans

  28. Les objets VHDL Le typage des objets VHDL (suite) • Type personnalisé • Tableaux d'éléments type etat is(debut, fin, stop); signal x : etat; -- idéal pour une machine d'états x<=debut; type table is array (0 to 3, 0 downto 7) of bit; signal x :table; x(2,4)<='1'; -- voilà comment est défini std_logic_vector dans la librairie 1164 type std_logic_vector isarray ( natural range <>) of std_logic; signal x : std_logic_vector (5 downto 0); x<="101010"; • type vs. subtype type montype is integer range 0 to 31; subtype int5b is integer range 0 to 31; signal vala : montype; signal valb : int5b; signal valc : integer range 0 to 31; vala <= valc ; --erreur !!! valb <=valc ; -- voilà comment est défini une ROM 16 x 8bits Type romtype isarray ( 0 to 15) of std_logic_vector (7 downto 0); constant my_rom : romtype := ( X"FF", X"00",…,X"11"); Introduction au VHDL - R.WEBER - Polytech'Orleans

  29. Les objets VHDL La Librairie NUMERIC_STD • Elle permet de faire de l'arithmétique cc2 avec des vecteurs : use ieee.numeric_std.all;C'est aussi un vecteur, mais il représente un nombre signé ou non signé • possibilités d'opérations arithmétiques ou relationnelles entre eux, mais aussi avec des integer • Elle définit deux types vecteurs :SIGNED et UNSIGNED : • signal u: unsigned ( 3 downto 0); -- "1010" représentent 10 • signal s: signed (3 downto 0); -- "1010" représentent -6 • Changement de type : to_integer(s) Type signed std_logic_vector(s) to_signed(i,nbits) signed(v) Type std_logic_vector Type integer unsigned(v) to_unsigned(i,nbits) Type unsigned std_logic_vector(u) to_integer(u) Introduction au VHDL - R.WEBER - Polytech'Orleans

  30. Les opérateurs VHDL III) Les opérateurs VHDL • Opérateurs logiques (sur booléens, bits et dérivés) • Opérateurs relationnels (sur types scalaires ou dérivés (signed et unsigned) ) Introduction au VHDL - R.WEBER - Polytech'Orleans

  31. Les opérateurs VHDL Les opérateurs VHDL (suite) • Opérateurs bits (sur vecteurs de bits et types numériques) : "01" & "00" = "0100" • Opérateurs arithmétiques (sur les types numériques : entiers, signés, non signés, flottant) : • Opérateurs de décalage (sur les tableaux de bits, std_logic_vector, signed et unsigned) : sll, srl, sla, sra, rol, ror Introduction au VHDL - R.WEBER - Polytech'Orleans

  32. Le mode concurrent IV) Assignation concurrente • La description de la fonctionnalité se fait dans l'architecture • Toutes les déclarations sont exécutées simultanément et en permanence • L'ordre des déclarations dans le code source n'a pas d'importance • Les déclarations possibles sont : • assignation continue : "<=" • instantiation d'un composant port map (déclaration préalable du composant par component) • assignation conditionnelle when…else • assignation sélective with…select…when…when • appel d'un process • instruction generate • appel d'une fonction • assert cf. compléments 5ème année Introduction au VHDL - R.WEBER - Polytech'Orleans

  33. Le mode concurrent c and d e b xor a Assignation continue "<=" library ieee; use ieee.std_logic_1164.all; entity essai is port (a,b,c : instd_logic; d : out std_logic); end essai; architecture archi1 of essai is signal e: std_logic; begin d <= e and c after 5 ns; e <= a xor b after 6 ns; end archi1; en simulation uniquement pour simuler des délais Introduction au VHDL - R.WEBER - Polytech'Orleans

  34. Le mode concurrent Instantiation d'un composant tutu essai ina a c outc inb b • Le composant à instantier peut être déclaré de 3 façons : • Toutes les paires entity/architecture sont déclarées dans le même fichier • La paire entity/architecture est déclarée dans un autre fichier • La structure component est déclarée dans une library via un package comp1 essai c a c outa a b architecture rtl of principal is component mux port (sel :in std_logic; a,b : instd_logic_vector (width-1downto 0); c : out std_logic_vector (width-1 downto 0)); end component; begin . . . end rtl; comp2 package mon_package is component mux ...end component; end mon_package; Introduction au VHDL - R.WEBER - Polytech'Orleans

  35. Les objets VHDL Instantiation (suite) • library ieee; • use ieee.std_logic_1164.all; • entity tutu is • port (ina,inb,a,c : instd_logic; • outc,outa : out std_logic); • end tut; • architecture vhd of tutu is • component essai is • port (a,b : instd_logic; • c : out std_logic); • end component; • begin • comp1 : essai– instantiation par position • port map ( ina,inb,outc); • comp2 : essai – instantiation par nomination • port map (b=>a, c=>outa, a=>c); • end vhd; • L'instantiation se fait avec "port map(…)" tutu essai ina a c outc inb b comp1 essai c a c outa a b comp2 Introduction au VHDL - R.WEBER - Polytech'Orleans

  36. Le mode concurrent Assignation conditionnelle • Forme générale : signal <= valeur when condition else autre_valeur when autre condition…; • Une seule cible peut être assignée • Les conditions sont sous-entendues exclusives • Mémorisation implicite lorsque toutes les conditions ne sont pas listées S<= "a" when (sel="00") else "b" when (sel="01") else "c"; A <= B when c='0' else D when e='1' else  D when e='1' and c='1' else F; S<= '1' when sel="00" else '0' when sel="01" (else S); Introduction au VHDL - R.WEBER - Polytech'Orleans

  37. Le mode concurrent Assignation sélective • Forme générale : with selecteur select signal <= valeur when valeur_sel, valeur when valeur_sel ...; • Importance de la clause when others qui permet de préciser tous les cas non définis. • Possibilité de regrouper plusieurs valeurs du sélécteur pour une même assignation : " | ". with selecteur select x<= a when "00", b when "01", c when "10", d when others; with selecteur select x<= a when "00", b when "01" | "10", d when others; Introduction au VHDL - R.WEBER - Polytech'Orleans

  38. Le mode concurrent 1ers Exemples • - Un buffer 3 états • un décodeur d'adresse • un latch avec reset Introduction au VHDL - R.WEBER - Polytech'Orleans

  39. Le mode séquentiel V) Assignation séquentielle • ATTENTION, ce mode concerne uniquement les function, procedure et les process • Les function et procedure ne manipulent que des variable (cf. complément 5ème année) • les process manipulent variable et signal • Au sein de ces descriptions, les déclarations sont exécutées de manière séquentielle • L'ordre des déclarations est donc important • Les déclarations possibles sont : • assignation continue : "<=" pour les signal et ":=" pour les variable • assignation conditionnelle if…then…elsif ... then ... else …end if; • assignation sélective case… is … when… => … when … =>… end case; • boucles for …. in … loop… end loop; • boucles while … loop … end loop; Introduction au VHDL - R.WEBER - Polytech'Orleans

  40. Le mode séquentiel Process(liste de sensibilité) --Déclaration de constantes et variables Begin --Description séquentielle End process Les process • Dans un process, l'interprétation des instructions est séquentielle MAIS l'ensemble de leur réalisation est instantanée (le temps extérieur est suspendu) : • les signal sont assignés en sortie du process : '<='  "va prendre la valeur en sortie" • les variable sont assignées immédiatement : ':='  "prend la valeur" • les variables ne sont pas visibles à l'extérieur du process • Lors d'affectation multiple, c'est la dernière qui est prise en compte. • Le process n'est activé que lorsque les signal de sa liste de sensibilité ont subi un changement (attention à l’interprétation des listes incomplètes) • Absence de liste de sensibilité : le process se réactive en permanence process(a,b,c, d) variable e,f,g,h : std_logic; begin a <= b; a <= c and a ; d <= a and b ; e := f ; e := g and e; h := e and f ; end process; process(a) begin c<=b and a; end process; Règle : tout signal qui modifie un autre signal ou variable doit être dans la liste de sensibilité Introduction au VHDL - R.WEBER - Polytech'Orleans

  41. Le mode séquentiel registre assignation conditionnelle • Forme générale : if condition then ….. elsif conditons then ….else…; • Mise en oeuvre de process clockés : • if clk='1' and clk'event ou if rising_edge(clk) • if clk='0' and clk'event ou if falling_edge(clk) • Absence de liste de sensibilité+ wait until (clk='1') placé en tête de la partie déclarative du process • Attention aux mémorisations implicite et aux listes incomplètes: Structure d'un process clocké process(clk,rst) variable éventuelle begin if rst='1' then mise à zeros de c elsif rising_edge(clk) then if en='1' then description du bloc combinatoire end if end if; end process; process(a,b) -- process (a,b,c) begin if (a=b) then c<='1'; else c<='0'; end if; d<=c; end process; process(d,en) begin if en='1' then q<=d; -- else q<=q end if; end process; rst, en logique combinatoire b c a Introduction au VHDL - R.WEBER - Polytech'Orleans clk

  42. Le mode séquentiel Assignation sélective • Forme générale : case sélecteur is when val_select => instructiuons;... end case; • Possibilité de grouper des valeurs de sélections • par 'val1_select | val2_select' • par val1_select to val2_select • Attention aux clauses incomplètes pouvant générer des registres ou des latches : • utilisation de la clause when others process begin wait until (clk='1'); case en is when "00" | "11" => q<='1'; c<='0'; when "10" => q<='0'; c<='1'; when others => null; -- ou when others => q<= ' - '; c <= ' - '; end case; end process; Introduction au VHDL - R.WEBER - Polytech'Orleans

  43. Le mode séquentiel Les boucles loop • Forme générale : • for i in val_deb to val_fin loop…end loop; • L'indice i de boucle n'a pas besoin d'être déclaré mais il n'est ni visible de l'extérieur ni modifiable • Les bornes doivent être statiques • while condition loop … end loop; process begin for i in 0 to 3 loop y(i) <= a(3-i); end loop; end process; Introduction au VHDL - R.WEBER - Polytech'Orleans

  44. Le mode séquentiel 1ers Exemples • - Un buffer 3 états • un décodeur d'adresse • une rom synchrone • une bascule D avec reset • un compteur • un registre à décalage Introduction au VHDL - R.WEBER - Polytech'Orleans

  45. Testbench VI) Les Testbenchs stimuli Vhdl à tester • Pour générer des stimulis et valider le design vhdl. • la durée s'exprime avec un type physique : fs, ps, ns, us, ms • Possibilité ( nécessité) d'utiliser des ressources VHDL non synthétisable • label : wait on liste_signal until condition for durée; -- dans des process • wait on : attente sur évènements • wait until : attente de conditions (s’il a eu un événement sinon la condition n’est pas testée) • wait for : attente pour un certains temps constant Period: TIME := 25 NS; ... Stimulus: process begin A <= "0000"; B <= "0000"; wait for Period; A <= "1111"; wait for Period; B <= "1111"; wait for Period; wait; end process; wait on clk until now=1ms ; --attente synchrone d’une durée de simulation wait until now=1ms ; wait for 10 ns ; wait until clk=‘1’ ; -- attente d’un front montant Introduction au VHDL - R.WEBER - Polytech'Orleans

  46. Testbench Les Testbenchs • signal <= valeurafterdurée absolue, valeurafterdurée absolue ,… ; H <= "00", "01" after 10 NS, "10" after 20 NS; clk<= not clk after 50 ns;-- génération d’une horloge à 10 MHz Introduction au VHDL - R.WEBER - Polytech'Orleans

  47. Complément VII) Les Compléments • Les Paramètres Génériques • Les Fonctions • Les Procédures • Les Packages • La boucle Generate • Package Textio • Les Attributs • Les assertions • Les Configurations cf. compléments 5ème année Introduction au VHDL - R.WEBER - Polytech'Orleans

  48. Complément Les paramètres génériques • Ils sont déclarés dans l'entity • Ils permettent de paramétrer des composants • une valeur par défaut peut être définie (":=") • l'instanciation se fait grâce à "generic map(…)" entity mux is generic(width : integer :=8); port (sel :in std_logic; a,b : instd_logic_vector (width-1 downto 0); c : out std_logic_vector (width-1 downto 0)); end mux; architecture behav of mux is begin c<=a when sel='0' else b; end behav; comp1 : mux generic map( 4) port map(sel=>seldata, a=> dataa, b=> datab, c=>data); comp2 : mux port map(sel=>seladr, a=>adra, b=> adrb, c=>adr); Introduction au VHDL - R.WEBER - Polytech'Orleans

More Related