Vous êtes sur la page 1sur 16

Ecole National des Sciences Appliques Khouribga

Universit Hassan 1er Settat

Introduction gnrale
Spcifications
VHDL est un langage de description matrielle. la diffrence des langages informatiques classiques, VHDL ne vise pas une excution, son but est de permettre la description de tout systme lectronique, den valider le fonctionnement avant de passer la mise en uvre matrielle. La conception dun systme passe par sa description. Cette description est toujours ralise en deux tapes au minimum. La premire tape consiste dcrire le systme comme une boite noire, alors que la seconde sintresse la description interne de la boite noire. Si la description de la vue externe (boite noire) ne pose gnralement pas de problme, la vue interne (larchitecture) peut quant elle tre ralise selon plusieurs modles de description. Rappelons brivement les trois types de description utilisables en VHDL : Description comportementale : il sagit dune description indiquant le comportement dun systme. Gnralement ralise sous la forme de processus, elle sapparente du code procdural classique. Description structurelle : il sagit dune description schmatique dun systme. Sappuyant sur des composants disponibles dans une bibliothque et sur des signaux. Cette description est lexacte reprsentation du schma lectrique du systme. description flot de donnes : il sagit dune description indiquant comment un flot de donnes traverse un systme. Le flot des sorties est exprim en fonction du flot des entres.

Dbuter un projet (initialisation du projet)


Lorsque vous dbutez votre projet, vous devez configurer loutil ModelSim afin quil organise correctement les diffrents fichiers que vous allez crer et manipuler.

laide de Windows, crez un rpertoire de travail sur votre espace disque Z :


/VHDL/Projet

Dans ModelSim, modifier le rpertoire de travail par le menu :


File > Change directory Slectionnez le rpertoire que vous venez de crer Z: /VHDL/Projet.

Pour pouvoir stocker correctement vos units de conception VHDL, vous devez crer une
bibliothque de travail : File > New > Library Laisser les noms work comme librairie de travail et physique, et cocher a new library and a logical mapping to it. Cest dans cette bibliothque que seront places toutes les entits compile sans erreur. Vous devez ensuite crer un projet : File > New > Project Tapez un nom de projet, par exemple projet, laisser coch copy library mappings et valider. Loutil vous demande dajouter des items dans le projet. Pour linstant, cliquer sur Close.

Vous pouvez ensuite passer au dveloppement de votre systme et aux compilations des diffrentes spcifications.

Reprise dun projet


Lorsque vous reprenez votre travail sur un projet que vous avez dj initialis et sur lequel vous avez dj travaill, vous devez vous ouvrir le projet souhait.

Aprs le lancement du logiciel ModelSim, placez-vous dans votre rpertoire de travail sur votre
espace disque par le menu : File > Change directory Slectionnez le rpertoire de travail Z : /VHDL/Projet. Ouvrez votre projet : File > Open > Project Slection du projet. Recherchez le fichier.mpf qui correspond votre projet (normalement, ce fichier doit tre dans le rpertoire que vous avez slectionn par le menu prcdent).

La compilation
Le lancement du compilateur seffectue par le menu : Compile> Compile du logiciel. Une fentre souvre alors et vous donne accs aux fichiers de votre rpertoire de travail. Slectionnez un fichier et cliquez sur Compile. La phase de compilation est alors active.

La simulation
Pour lancer le simulateur, slectionnez le menu Simulate> Start simulation Une fentre est alors ouverte et vous propose lensemble des units prsentes dans la bibliothque. Slectionnez une entit SIMULABLE (ou une configuration), cest dire une entit autonome qui instancie lentit simuler et qui gre les signaux dentre de lentit simuler. Les entits que vous allez dvelopper seront stockes dans la librairie Work ; Ouvrez ensuite les fentres de simulation par le menu View>Wave Par dfaut, lintervalle de simulation est de 100 ns, vous pouvez changer cette valeur en choisissant le menu : Simulate> Runtime options Pour visualiser les signaux de lentit de test, slectionnez TestPorteET dans longlet sim du workspace, cliquez sur Add , puis Add to wave . La fentre des chronogrammes doit alors faire apparatre la liste des signaux de lentit. Pour lancer un pas de simulation (de 100 ns), choisissez Simulate> Run> Run Pour recommencer une simulation, choisissez Simulate> Run> Restart .

Objectif du TP
Lobjectif de TP consiste : Ecrire un programme VHDL dun multiplexeur 4 vers 1 en utilisant les deux instructions conditionnelle et slective, ainsi dcrire en VHDL une bascule D, puis une unit arithmtique et logique (UAL) puis un Compteur synchrone et asynchrone.

Les TP raliser TP1 : Un Multiplexeur 4*1 TP2: Une Bascule D TP3: Un Compteur TP4: Une unit Arithmtique et Logique TP5: Affichage de 7 segments TP6: Gestion dun CARREFOUR

TP1 : Multiplexeur
Code VHDL

library ieee; use ieee.std_logic_1164.all; entity mux is port(E0,E1,E2,E3:in std_logic; sel:in std_logic_vector(1 downto 0) ; S:out std_logic); end mux; architecture archimux of mux is begin with sel select S<=E0 when "00", E1 when "01",E2 when "10",E3 when others; end archimux;

Lexcution de la simulation

TP2 : Bascule D
Code VHDL

Library ieee; Use ieee.std_logic_1164.all; Use ieee.numeric_std.all; Use ieee.std_logic_unsigned.all; entity BASCULED is port ( D,CLK : in std_logic; S : out std_logic); end BASCULED; architecture DESCRIPTION of BASCULED is

Lexcution de la simulation

TP3 : Compteur
Compteur Simple

Code VHDL

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY compteur IS PORT (clk : IN STD_LOGIC;compt_sortie : OUT STD_LOGIC_VECTOR(4 DOWNTO 0);horloge_sortie : OUT STD_LOGIC); END compteur; ARCHITECTURE rtl OF compteur IS SIGNAL s_compt_sortie : STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN PROCESS (clk) BEGIN IF clk'EVENT AND clk = '1' THEN IF s_compt_sortie >= 23 THEN s_compt_sortie <= "00000"; ELSE

Lexcution de la s_compt_sortie <=simulation s_compt_sortie + 1;


END IF; END IF; END PROCESS; compt_sortie <= s_compt_sortie; horloge_sortie <= '0' WHEN s_compt_sortie < 12 ELSE '1'; END;begin PRO_BASCULED : process (CLK) begin if (CLK'event and CLK ='1') then S <= D; end if;end process PRO_BASCULED;end DESCRIPTION;

Lexcution de la simulation

Compteur Synchrone

Library ieee;Use ieee.std_logic_1164.all;Use ieee.numeric_std.all;Use ieee.std_logic_unsigned.all; entity compteursyn is PORT (CLOCK : in std_logic;RESET : in std_logic;Q : out std_logic_vector (2 downto 0)); end compteursyn ; architecture DESCRIPTION of CMP3BITS is signal CMP: std_logic_vector (2 downto 0); begin process (CLOCK) begin if (CLOCK ='1' and CLOCK'event) then if RESET ='1' then CMP <= "000"; else CMP <= CMP + 1; end if; end if; end process; Q <= CMP; end DESCRIPTION;

Lexcution de la simulation

Compteur aSynchrone

Library ieee;Use ieee.std_logic_1164.all;Use ieee.numeric_std.all;Use ieee.std_logic_unsigned.all; entity CMP3BITS is PORT (CLOCK : in std_logic;RESET : in std_logic;Q : out std_logic_vector(2 downto 0)); end compterAsyn; architecture DESCRIPTION of CMP3BITS is signal CMP: std_logic_vector (2 downto 0); begin process (RESET,CLOCK) begin if RESET ='1' then CMP <= "000"; elsif (CLOCK ='1' and CLOCK'event) then CMP <= CMP + 1; end if; end process; Q <= CMP;

Lexcution de la simulation

TP4 : Unit Arithmtique et Logique


Code VHDL

Library ieee;Use ieee.std_logic_1164.all;Use ieee.numeric_std.all;Use ieee.std_logic_unsigned.all; entity CMP3BITS is PORT (CLOCK : in std_logic;RESET : in std_logic;Q : out std_logic_vector(2 downto 0)); end compterAsyn; architecture DESCRIPTION of CMP3BITS is signal CMP: std_logic_vector (2 downto 0); begin process (RESET,CLOCK) begin if RESET ='1' then CMP <= "000"; elsif (CLOCK ='1' and CLOCK'event) then CMP <= CMP + 1; end if; end process; Q <= CMP; end DESCRIPTION;

Lexcution de la simulation

TP5 : Affichage de 7 segments


Code VHDL

library ieee; use ieee.std_logic_1164.all;entity BCD_2_7SEG is


port( BIN : in STD_LOGIC_VECTOR(3 downto 0);ORTIE : out STD_LOGIC_VECTOR(6 downto 0)) ; end BCD_2_7SEG; architecture COMPORTEMENT of BCD_2_7SEG is begin with BIN select SORTIE <="0000001" when "0000", "1001111" when "0001", "0010010" when "0010", "0000110" when "0011", "1001100" when "0100", "0100100" when "0101", "0100000" when "0110", "0001111" when "0111", "0000001" when "1000", "0000100" when "1001", "0110001" when others; -- E pour erreur. end COMPORTEMENT;

Lexcution de la simulation

TP6 : Gestion de carrefour


Code VHDL
library ieee; use IEEE.std_logic_1164.all; library synopsys ; library std_developerskit; ENTITY feux1 IS PORT(RAZ,hor1 :in std_logic; v1,v2,r1,r2,o1,o2 :out std_logic); END feux1; ARCHITECTURE diagramme Of feux1 IS TYPE etat_17 IS (INIT ,v11,v12,v13,v14,v15,v16,v17,v18,or1,sec,v21,v22,v23,v24,v25,or2); SIGNAL etat, nextetat : etat_17; BEGIN DEFIN_ETAT : PROCESS(RAZ,hor1 etat <= INIT ; BEGIN END IF;

if RAZ = '1' THEN

ELSIF rising_edge(hor1) THEN etat <= nextetat;

END PROCESS DEFIN_ETAT; sorties : process (etat) BEGIN CASE etat IS WHEN INIT => r1 <= '1' ; r2 <='1' ; v1 <= '0'; v2 <= '0'; o1 <= '0';o2 <= '0'; nextetat <= v11; WHEN v11 => r1 <= '0' ; v1 <= '1'; nextetat <= v12; WHEN v12 => r1 <= '0'; v1 <= '1' ; nextetat <= v13; WHEN v13 => r1 <= '0'; v1 <= '1' ; nextetat <= v14; WHEN v14 => r1 <= '0'; v1 <= '1' ; nextetat <= v15; WHEN v15 => r1 <= '0'; v1 <= '1' ; nextetat <= v16; WHEN v16 => r1 <= '0'; v1 <= '1' ; nextetat <= v17; WHEN v17 => r1 <= '0'; v1 <= '1' ; nextetat <= v18; WHEN v18 => r1 <= '0'; v1 <= '1' ; nextetat <= or1; WHEN or1 => v1 <= '0'; o1 <= '1' ; nextetat <= sec; WHEN sec => r1 <= '1'; o1 <= '0' ; nextetat <= v21; WHEN v21 => r2 <= '0'; v2 <= '1' ; nextetat <= v22; WHEN v22 => r2 <= '0'; v2 <= '1' ; nextetat <= v23; WHEN v23 => r2 <= '0'; v2 <= '1' ; nextetat <= v24; WHEN v24 => r2 <= '0'; v2 <= '1' ; nextetat <= v25; WHEN v25 => r2 <= '0'; v2 <= '1' ; nextetat <= or2; WHEN or2 => v2 <= '0'; o2 <= '1' ; nextetat <= INIT; END CASE; END process sorties; END architecture diagramme;

Lexcution de la simulation

Suite de la simulation

Conclusion
Daprs la ralisation de ce TP, nous avons pu aboutir et apporter une rponse notre problmatique qui consiste dcrire et simuler la rponse dune composante lectronique en utilisant Modelsim et le langage VHDL, ce TP nous a aid approfondir et laborer nos connaissances en VHDL ainsi, se familiariser correctement avec Modelsim, nous avons acquis et dvelopp des qualits, aptitudes et intrts. Ce qui va tre bnfique notre dans cursus d'tude.

Vous aimerez peut-être aussi