VHDL Présenté par : LASSAAD TAYARI Technologue en Informatique Industrielle à l’Iset de Gabès [email protected] 1 VHDL Initiation à VHDL Application à la Logique Programmable [email protected] 2 VHDL Initiation à VHDL Introduction Le cadre de travail La paire ENTITY/ARCHITECTURE Niveaux de description Fonctionnements parallèles et séquentiels Opérateurs et instructions Descriptions modulaires Attributs spécifiques [email protected] 3 VHDL Introduction Langage de description hardware développé au titre du programme VHSIC (Very High Speed Integrated Circuit) du DoD (Department of Defence). VHDL = VHSIC Hardware Description Langage [email protected] 4 VHDL Objectif fournir un environnement de développement hardware complet et unifié (des spécifications à la réalisation en passant par la simulation) améliorer l'intercommunication entre(spécificateurs, concepteurs, utilisateurs, outils de développement, etc.) rendre les réalisations indépendantes des technologies et des systèmes-hôtes (portabilité, pérennité, etc.) [email protected] 5 VHDL Standardisé en 1987 (IEEE1076), complété en 1993 (IEEE1076, IEEE1164) Langage unique pour Caractéristiques générales la spécification, la documentation la vérification (preuve formelle), la simulation la synthèse : le langage sert d'entrée à des outils intelligents qui permettent la réalisation de circuits intégrés programmables (PALs, GALs, CPLDs, FPGAs) Interprétable par l'homme et la machine Indépendent des process et des technologies, indépendent des systèmes-hôtes [email protected] 6 VHDL Entity et Architecture La brique de base de toute description VHDL est la paire ENTITY + ARCHITECTURE : I1 Entity : déclaration de l'interface (Entrées/Sorties) Architecture : description du fonctionnement O1 I2 I3 I4 entity AZERTY is port( I1, I2, I3, I4 : in bit; O1, O2 : out bit); end AZERTY; O2 architecture XXX of AZERTY is -- description du fonctionnement end XXX; La complexité du bloc décrit par le couple Entity + Architecture est quelconque (système, carte, sousfonction, porte, etc.) [email protected] 7 VHDL Commentaires Et Identificateurs Les commentaires débutent par un double-tiret signal CLK: bit; -- horloge systeme a 50 MHz Identificateurs (noms, étiquettes, etc.) : une suite de lettres ou de chiffres (et éventuellement le caractère '_') débutant par une lettre : A, DATA_8, SYS_CLK_50_OUT VHDL ne fait pas de différence, pour les identificateurs et les mots-clés, entre majuscules et minuscules [email protected] 8 VHDL Littéraux Les littéraux sont utilisés pour la représentation de valeurs Les plus fréquents en synthèse logique : entiers : 12 , 0 booléens : true ou false bits : '0' ou '1' chaînes de bits "1111_1110" (le caractère _ est sans action) x"FE" (notation hexadécimale), o"76" (octal) caractères : 'Z' or '-' chaînes de caractères : "CY7C372i-83JC" caractères et chaines peuvent être concaténées : '1' & "01" & '0' est équivalent à "1010" "au " & "revoir" est équivalent à "au revoir" "au" & "revoir" est équivalent à "aurevoir" [email protected] 9 VHDL a Entity et Architecture Toute description VHDL simple peut être faite sans autre connaissance qu'Entity et Architecture D'autres structures existent néanmoins, d'emploi optionnel ou implicite : Le package et ses components permettent de simplifier l'accès à des descriptions fréquemment utilisées La library est le lieu de stockage des éléments compilés [email protected] 10 VHDL package Un PACKAGE permet de regrouper des Entity/Architectures destinées à être partagées certains packages sont livrés avec les outils de développements d'autres sont créés par les utilisateurs [email protected] 11 VHDL library Les 'unités de compilation' (entity, architecture, package,...) sont conservées dans une LIBRARY Pour accéder aux éléments d'une LIBRARY, il suffit de la nommer au préalable. Par exemple : library LCD; --déclaration d'accès à la library LCD VHDL définit une LIBRARY par défaut (la LIBRARY work), toujours accessible, qu'il n'est pas nécessaire de nommer La compilation d'entity, architecture, etc. s'effectue par défaut dans la library work ou, sur demande, dans une library spécifique [email protected] 12 VHDL PROJET ENTITYS ARCHITECTURES PACKAGES (COMPONENTS) Library WORK Library X [email protected] Library Y 13 VHDL L'Entity L'ENTITY décrit une fonction, vue de l'extérieur : Nom rst d[7:0] Entrées/Sorties q[7:0] BOITE_NOIRE clk co Les signaux d'Entrée/Sortie de l'ENTITY sont des PORTs Chaque PORT possède un nom, un mode (sens), un type (associé éventuellement à un ensemble de valeurs) [email protected] 14 VHDL PORTS : Modes Le MODE correspond au sens de transfert : IN Entrée (monodirectionnelle) OUT Sortie (monodirectionnelle) INOUT Entrée/Sortie bidirectionnelle BUFFER Sortie rebouclée [email protected] 15 VHDL PORTS : Types VHDL est un langage fortement typé, interdisant l'interconnexion de signaux de types différents Certains types sont prédéfinis par le langage : integer, bit, bit_vector, boolean, etc. VHDL permet d'étendre la liste des types de base IEEE1164 (type std_logic, std_logic_vector) Types spécifiques, définis par les outils des fournisseurs Types définis par l'utilisateur : type énuméré, par ex. : type jour is (lu, ma, me, je, ve, sa, di); (souvent utilisé pour les machines d'état) sous-type : subtype octet is bit_vector(0 to 7); [email protected] 16 VHDL Type std_logic (IEEE1164) Le type bit de VHDL peut prendre les valeurs '0' et '1'. Ce type est insuffisant pour décrire des signaux logiques réels (haute-impédance, forçage, etc.) Le standard IEEE1164 définit des signaux multi-valeurs répondant aux besoins de systèmes réels, et facilitant la simulation Le type std_logic (et std_logic_vector) possède 9 valeurs : '0', '1', 'X', 'L', 'H', 'W', 'Z', 'U', '-' L'emploi du type std_logic est possible via la library IEEE1164 (cf. déclaration d'une Library) : library ieee; use ieee.std_logic_1164.all; [email protected] 17 VHDL Déclaration d'Entity rst d[7:0] q[0:7] boite_noire LIBRARY ieee; clk USE ieee.std_logic_1164.all; ENTITY boite_noire IS PORT ( clk, rst:IN STD_LOGIC; d: IN STD_LOGIC_VECTOR(7 DOWNTO 0); MODE TYPE co RANGE q: OUT STD_LOGIC_VECTOR(0 TO 7); co: OUT STD_LOGIC); END boite_noire; [email protected] 18 VHDL ARCHITECTURE L'ARCHITECTURE décrit le fonctionnement de la boîte noire déclarée dans l'ENTITY VHDL permet différents niveaux de description : Haut niveau (comportemental) : description de la fonctionnalité, sans référence au 'hardware' sous-jacent Bas niveau (structurel) : description par utilisation et interconnexion de 'components' (par ex. portes logiques), comme pour un schéma D'une manière générale les descriptions de haut niveau favorisent la portabilité, les descriptions de bas niveau l'efficacité [email protected] 19 VHDL Architecture : exemple d'un comparateur 1- Description comportementale A C B Comparateur architecture ARCH1 of COMPARATEUR is begin C <= '1' when (A=B) else '0'; end ARCH1; [email protected] 20 VHDL Architecture : exemple d'un comparateur 2- Description comportementale (type data-flow) A B C Comparateur architecture ARCH2 of COMPARATEUR is begin C <= not(A xor B); end ARCH2; [email protected] 21 VHDL Architecture : exemple d'un comparateur 3- Description structurelle de bas niveau (interconnecte des composants élémentaires) A B U0 xor2 S U1 inv use work.gatespkg.all; architecture ARCH3 of COMPARATEUR is signal S : bit; Begin Les signaux internes sont déclarés U0 : xor2 port map (A,B,S); en tête de l'architecture (même déclaration que les signaux d'entity, sans 'mode') U1 : inv port map (S,C); end ARCH3; [email protected] 22 C VHDL Déclarations internes L'en-tête d'architecture permet de déclarer les signaux internes, variables, constantes, etc. : Exemple de déclaration de signal : signal VCOMP : std_logic(4 to 7); Exemple de déclaration de constante : Exemple de déclaration de variable : constant NEUF : std_logic_vector(3 downto 0) := "1011"; variable J : integer range 0 to 15 := 0; [email protected] 23 VHDL Architecture : exemple d'un comparateur 4- Description mixte A entity COMPSYNC is C Comparateur 0 port (A,B,CLK,RST : in bit; B QC : out bit); QC end COMPSYNC; CLK use work.gatespkg.all; RST architecture ARCH of COMPSYNC is Conclusion : les descriptions signal C : bit; comportementales sont constant zero : bit := '0'; recommandées, sauf raison begin majeure de performance ou C <= '1' when (A=B) else '0'; de densité : U0 : dsrff port map (C,zero,RST,CLK,QC); [email protected] 24 end ARCH; VHDL ARCHITECTURE meilleure compacité : par exemple un comparateur 4 bits : en comportemental : aeqb <= '1' WHEN a = b ELSE '0'; en structurel bas niveau : u0: u1: u2: u3: u4: xnor2 PORT MAP (a(0), b(0), xnr(0)); xnor2 PORT MAP (a(1), b(1), xnr(1)); xnor2 PORT MAP (a(2), b(2), xnr(2)); xnor2 PORT MAP (a(3), b(3), xnr(3)); and4 PORT MAP (xnr(0), xnr(1), xnr(2), xnr(3), aeqb); meilleure lisibilité meilleure portabilité (indépendance vis-à-vis du composant ciblé) [email protected] 25 VHDL Logiques (définis pour le type bit) Opérateurs VHDL standard and, nand or, nor xor, xnor not Relationnels (bit, bit_vector, integer) = /= < <= > >= (equal to) (not equal to) (less than) (less than or equal to) (greater than) (greater than or equal to) [email protected] 26 VHDL Arithmétique unaire (integer) - (arithmetic negate) Arithmétique (integer) Opérateurs VHDL standard + * (addition) (subtraction) (multiplication) Concaténation (string, bit, bit_vector) & [email protected] 27 VHDL Autres opérateurs VHDL VHDL définit d'autres opérateurs, dont l'usage est plus orienté vers le test ou la simulation : / (division) mod (modulus) rem (remainder) ** (exponentiation) [email protected] 28 VHDL Instructions en mode séquentiel (dans un PROCESS) Instructions VHDL courantes Assignation (<=) Assignation conditionnelle (IF) Assignation sélective (CASE) Instructions en mode concourant (hors d'un process) Assignation (<=) Assignation conditionnelle (WHEN) Assignation sélective (WITH) [email protected] 29 VHDL instruction when Assignation conditionnelle, combinatoire : library ieee; instruction when use ieee.std_logic_1164.all; Multiplexeur 4-->1 a 4 b 4 c 4 d 4 4 s1 s0 e entity MUX4 is port( a,b,c,d : in std_logic_vector(3 downto 0); e : out std_logic_vector(3 downto 0); s1,s0 : in std_logic ); end MUX4; architecture ARCHMUX4 of MUX4 is begin e <= a when (s1 & s0) = "00" else b when (s1 & s0) = "01" else c when (s1 & s0) = "10" else d; end ARCHMUX4; [email protected] 30 VHDL instruction if Assignation conditionnelle, séquentielle : architecture ARCHDECODR of DECODR is instruction if Décodeur 2-->4 (registre en sortie) s0 a(1) s1 a(0) s2 s3 begin process begin wait until (clk'event and clk='1'); if a="00" then s0 <= '0' else s0 <= '1' ; end if; if a="01" then s1 <= '0' else s1 <= '1' ; end if; if a="10" then s2 <= '0' else s2 <= '1' ; end if; if a="11" then s3 <= '0' else s3 <= '1' ; end if; end process; end ARCHDECODR; clk [email protected] 31 VHDL L'instruction CASE Permet l'exécution d'une opération (ou d'une succession d'opérations) en fonction de la valeur prise par une expression Décodeur 2-->4 (registre en sortie) temp(0) a(1) temp(1) a(0) temp(2) temp(3) clk x s0 s1 s2 architecture ARCHDECODR of DECODR is signal temp : std_logic_vector(0 to 3); begin process begin wait until (clk'event and clk='1'); case (a) is when "00" => temp <= "0111"; when "01" => temp <= "1011"; when "10" => temp <= "1101"; when others => temp <= "1110"; end case; end process; s0 <= temp(0); s1 <= temp(1); s2 <= temp(2); s3 <= temp(3); end ARCHDECODR; s3 [email protected] 32 VHDL Conception modulaire et hiérarchique VHDL supporte et encourage la conception modulaire Un niveau de description peut faire appel à des modules compilés indépendamment, et les interconnecter de manière structurelle COMPONENT 2 COMPONENT 1 Les modules de niveaux inférieurs sont des COMPONENTs Si un COMPONENT est d'utilisation fréquente, il est commode de le placer dans un PACKAGE [email protected] 33 VHDL Conception modulaire et hiérarchique Description d'un comparateur 4 bits 1- Description comportementale (pour mémoire)A B entity CMP4 is port( A,B : in bit_vector(0 to 3); C : out bit); end CMP4; 4 4 C architecture ARCH_1 of CMP4 is begin C <= '1' when (A=B) else '0'; end ARCH_1; [email protected] 34 VHDL Conception hiérarchique modulaire et 2 - Description structurelle 'à plat' A B 4 4 C entity XNOR is port(x,y : in bit; xn : out bit); end XNOR; architecture ARCH of XNOR is begin xn <= not(x xor y); end ARCH; entity AND4 is port(a,b,c,d : in bit; e : out bit); end AND4; architecture ARCH of AND4 is begin e <= a and b and c and d ; end ARCH; entity CMP4 is port( A,B : in bit_vector(0 to 3); C : out bit); end CMP4; architecture ARCH_2 of CMP4 is signal i : bit_vector(0 to 3); begin c0 : XNOR port map(A(0),B(0),i(0)); c1 : XNOR port map(A(1),B(1),i(1)); c2 : XNOR port map(A(2),B(2),i(2)); c3 : XNOR port map(A(3),B(3),i(3)); c4 : AND4 port map(i(0),i(1),i(2),i(3),C); end ARCH_2; [email protected] 35 VHDL Conception modulaire et hiérarchique 3 - Description modulaire, sans package 1- Les éléments de base sont décrits à part, et ré-utilisables 2- Instanciation des éléments externes dans l'architecture principale entity XNOR is port(x,y : in bit; xn : out bit); end XNOR; architecture ARCH of XNOR is begin xn <= not(x xor y); end ARCH; entity AND4 is port(a,b,c,d : in bit; e : out bit); end AND4; architecture ARCH of AND4 is begin e <= a and b and c and d ; end ARCH; entity CMP4 is port( A,B : in bit_vector(0 to 3); C : out bit); end CMP4; architecture ARCH_2 of CMP4 is signal i : bit_vector(0 to 3); component XNOR port(x,y : in bit; xn : out bit); end component; component AND4 port(a,b,c,d : in bit; e : out bit); end component; begin c0 : XNOR port map(A(0),B(0),i(0)); c1 : XNOR port map(A(1),B(1),i(1)); c2 : XNOR port map(A(2),B(2),i(2)); c3 : XNOR port map(A(3),B(3),i(3)); c4 : AND4 port map(i(0),i(1),i(2),i(3),C); end ARCH_2; [email protected] 36 VHDL Conception modulaire et hiérarchique 4 - Description modulaire avec package package portes is component XNOR port(x,y : in bit; xn : out bit); end component; component AND4 port(a,b,c,d : in bit; e : out bit); end component; end portes; entity XNOR is port(x,y : in bit; xn : out bit); end XNOR; architecture ARCH of XNOR is begin xn <= not(x xor y); end ARCH; entity AND4 is port(a,b,c,d : in bit; e : out bit); end AND4; architecture ARCH of AND4 is begin e <= a and b and c and d ; end ARCH; 1- Les components sont inclus dans un package 2- Déclaration d'accès aux éléments du package entity CMP4 is port( A,B : in bit_vector(0 to 3); C : out bit); end CMP4; use work.portes.all; architecture ARCH_3 of CMP4 is signal i : bit_vector(0 to 3); begin c0 : XNOR port map(A(0),B(0),i(0)); c1 : XNOR port map(A(1),B(1),i(1)); c2 : XNOR port map(A(2),B(2),i(2)); c3 : XNOR port map(A(3),B(3),i(3)); c4 : AND4 port map(i(0),i(1),i(2),i(3),C); end ARCH_3; [email protected] 37 VHDL Conception modulaire et hiérarchique Conclusions : Les descriptions modulaires de haut niveau facilitent la lecture, la mise au point, la simulation, la fiabilité La conception modulaire permet d'utiliser les composants de bas niveau eventuellement fournis avec les outils logiciels Elle permet également d'utiliser des modules VHDL (développés par les fabricants d'outil ou par les utilisateurs) : on peut alors parler de description 'structurelle de haut niveau'. La description structurelle est la traduction textuelle directe de la représentation schematique [email protected] 38 VHDL Les outils Cypress : Warp2 [email protected] 39 VHDL Warp2 Report File (modèles pour simulation externe) Aldec (Config. file) Simulation temporelle .JED VHDL Text Galaxy Synthèse (Programmation) FSM editor (InSRkit) [email protected] 40 VHDL Warp2 Warp2 s'intègre également dans des environnements CAO généralistes : Viewlogic, Exemplar, Mentor, Cadence, Synopsys, etc. Exemple : Viewlogic Viewdraw Schematic Entry VHDL Entry SpeedWave or VCS Source-level Simulation Viewlogic Warp2 Warp Synthesis Warp Fitting Jedec/Jam Programming File ViewSim, SpeedWave or VCS [email protected] VHDL, Verilog or 3rd Party Simulation models 41