Conception avancée de circuits numériques (VHDL)

Slides:



Advertisements
Présentations similaires
Machines séquentielles
Advertisements

INTRODUCTION.
Les microprocesseurs A. Objectifs de la séquence:
8. Les tableaux P. Costamagna – ISEN N1.
Architecture de machines Eléments de logique
Algorithme et programmation
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
Cours Systèmes logiques
Ing Mohamed MASMOUDI Cours VHDL Ing Mohamed MASMOUDI
Décrire un circuit numérique avec VHDL
Structures de données linéaires
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Expressions et assignations
Cours #6 Conception d’unités de contrôle
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Cours #8 Flot de conception d’un circuit numérique
Algorithmique et Programmation
Programmation multimédia 3
Cours #4 Éléments à mémoire et circuits séquentiels synchrones de base
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
IFT 6800 Atelier en Technologies d’information
Plan 1-Introduction. 2-Standard VHDL-AMS. Modélisations:
Cours #7 Vérification d’un modèle VHDL
Cours #5 Conception de chemins des données
Chapitre 9 Les sous-programmes.
Standard Template Library
COMPOSANTS PROGRAMMABLES
Modélisation des opérations Spécifier les transformations détat que lon attend des services de la machine Létat dune machine entièrement déterminée par.
Animateur : Med HAIJOUBI
Modélisation VHDL d’un chemin des données
Décodeurs et encodeurs : sujets de ce thème
Le VHDL : SOMMAIRE I Introduction II Éléments généraux du langage
Banc d’essai pour un circuit combinatoire
Modélisation VHDL du chemin des données d’un processeur à usage général Sujets de ce thème
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Analyse de machines.
INTRODUCTION.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Description d’un circuit.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Entrées et sorties par.
Advanced Boolean Equation Language
INF8505: processeurs embarqués configurables Département de génie informatique et génie logiciel Langages de description architecturale.
Méthodologie de conception Outils de conception
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Vérification de circuits.
Créer des packages.
Un survol du language C.
Concepts intermédiaires de VHDL
Synthèse et implémentation d’un circuit combinatoire
Journées d'études Faible Tension Faible Consommation 14, 15, 16 mai Gwenolé CORRE, Nathalie JULIEN, Eric SENN, Eric MARTIN LESTER, Université de.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Objets des catégories.
Chapitre 5 : Les circuits séquentiels
Introduction au VHDL - R.WEBER - Polytech'Orleans
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Tests exhaustifs.
Architecture et technologie des ordinateurs II
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
Cours LCS N°4 Présenté par Mr: LALLALI
Implémentation de la division sur FPGA
1 Programmation en C++ Marianne Morris. 2 Intro générale à la programmation On a déjà étudié le langage assembleur Langage de bas niveau Meilleur que.
VHDL pour circuits séquentiels
Compléments VHDL - R.WEBER - Polytech'Orleans
Patricia Renault UPMC 2005/2006
Le VHDL Programmation des CPLD et FPGA avec Quartus II ENSET d'Oran / IUFM Aix Marseille - mai
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Scripts et fonctions Instructions de contrôle
Introduction à l’utilitaire
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Philippe Gandy - 15 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Les bascules et registres
ALGORITHME ET PROGRAMMATION RÉVISION Informatique et Sciences du Numérique.
Description d’un circuit combinatoire en VHDL
Chapitre 01: Structure d'un module VHDL
Transcription de la présentation:

Conception avancée de circuits numériques (VHDL) Hakim ZIMOUCHE LIEN UHP (Hakim.Zimouche@lien.uhp-nancy.fr)

Introduction Objectif Prérequis Rappeler les notions essentielles de la conception de circuits numériques en particulier les méthodes de synthèse et de modélisation des systèmes séquentiels. Concevoir des circuits à partir d'une description en VHDL préparer à la conception des systèmes hiérarchiques Prérequis Connaissance des technologies de circuits numériques et de la conception des circuits combinatoires et séquentiels

Bibliographie "Logique combinatoire et technologie" par Marcel GINDRE et Denis ROUX 1987 (Mc GRAW-HILL) "Circuits numériques et synthèse logique " J. WEBER, M. MEAUDRE, 1995 (MASSON) "Logique programmable" Laurent Dutrieux, Didier DEMIGNY 1997(Eyrolles) "Digital System Design with VHDL" M. Zwolinski, 2000 (Prentice Hall) "Spécification et conception des ASICS" J.-P. Calvez, 1993 (MASSON) "VHDL du langage à la modélisation" R. AIRIAU, J. M. BERGE, V. OLIVE, J. ROUILLARD, 1990 (Presse Polytechniques et Universitaires Romandes) "Arithmétique des ordinateurs" MULLER, (MASSON)

PLAN Logique Combinatoire Conception séquentielle synchrone Représentations Description VHDL Macro-fonctions Conception séquentielle synchrone Modèles machines d ’état Méthodes d ’analyse et de synthèse Description VHDL des machines d ’état

VHDL VHDL : VHSIC Hardware Description Language (VHSIC : Very High Speed Integrated Circuit) 1981 Étude de l'armée américaine sur un moyen de réaliser des documentations techniques sans ambiguïtés et facilement interprétables. 1987 Standard IEEE 1076-1987 1993 révision IEEE 1134-1993 Utilisé pour : décrire le comportement de fonctions synthétiser un circuit modéliser un circuit (modèle logique et technologique) simuler une description ( description des signaux d'entrée)

Description VHDL Trame principale -- Library Clause LIBRARY ieee; -- Use Clause USE ieee.std_logic_1164.all; -- Package Declaration (optional) -- Package Body (optional) -- Entity Declaration -- Architecture Body Nom du répertoire dans lequel se trouve std_logic_1164 Entité et Architecture sont les parties principales d'une description Description VHDL

Entité Description des entrées et des sorties de la structure en explicitant pour chacune d'entre elles le nom, la direction (IN, OUT et INOUT) et le type. ENTITY _entity_name IS GENERIC( _parameter_name : string := _default_value ; _parameter_name : integer:= _default_value ); PORT( _input_name, _input_name : IN STD_LOGIC; _input_vector_name : IN STD_LOGIC_VECTOR(high downto low); _bidir_name, __bidir_name : IN OUT STD_LOGIC; _output_name, __output_name : OUT STD_LOGIC ); END __entity_name ; Exemple : entity XOU is port (E1, E2 : in bit; S : out bit); end XOU; E1 E2 S XOU Description VHDL

Types Types utilisés en électronique numérique Les signaux, variables et constantes ont obligatoirement un type qui définit l’ensemble auquel ils appartiennent. Définition d'un type entier pour le signal A : A INTEGER RANGE 255 DOWNTO 0 (0to255) Description VHDL

Différence entre rangement ascendant et descendant : Vecteurs Vecteurs pour la manipulation de bus Assigner une valeur à un des éléments d'un bus: B(3) <= '1 ’ Déclaration de trois signaux correspondant à des bus (un vecteur de signaux) comportant 8 signaux A(0), A(1) ,..., A(7) et B(0), B(1) , ..., B(7) ainsi que S(0), S(1) , ..., S(7). rangement descendant A : in bit_vector (7 downto 0); rangement ascendant B : in bit_vector (0 to 7); S : out bit_vector (7 downto 0); Différence entre rangement ascendant et descendant : si A <= "11110000" alors A(7) = '1' si B <= "11110000" alors B(7) = '0' Description VHDL

Vecteurs Assigner une valeur à l'ensemble du bus, plusieurs méthodes assigne 11001010 aux éléments S(7), S(6), ..., S(0). S <= (7 => '1', 6 => '1', 5 downto 4 => '0', 3 => '1', 2 => '0', 1 => '1', 0 => '0') ; assigne la valeur 11001010 aux éléments S(7), S(6), ..., S(0). S <= (7 | 6 | 3 | 1 => '1' , 5 | 4 | 2 | 0 => '0'); assigne la valeur 11001010 au vecteur S S <= (7 => '1', others => '0'); assigne la valeur 10000000 au vecteur S.

Architecture L'architecture décrit le comportement de l'entité. Il est possible de créer plusieurs architectures pour une même entité. Chacune de ces architectures décrira l'entité de façon différente. ARCHITECTURE _architecture_name OF _entity_name IS SIGNAL __signal_name : STD_LOGIC; BEGIN -- Process Statement -- Concurrent Signal Assignment -- Conditional Signal Assignment -- Selected Signal Assignment -- Component Instantiation Statement -- Generate Statement -- Concurrent Procedure Call END _architecture_name ; Description VHDL

Assignation concurrente de signaux Définitions Signal Le signal est vu dans toute l ’architecture. Il est synthétisé sous la forme d’un équipotentiel. L’assignation d’une valeur crée des connexions. Concurrence Lorsque l'on étudie une structure logique, il apparaît à l’évidence que les signaux qui la constituent évoluent de façon indépendante et parallèle. Exemple Assignation simple __signal <= __expression; exemple : c <= a and b ; Description VHDL

Assignation concurrente de signaux Exercice Réaliser la description des trois fonctions de base ENTITY fonc_de_base IS PORT (a, b : IN BIT; et, ou, non : OUT BIT); END fonc_de_base ; ARCHITECTURE ex OF fonc_de_base IS BEGIN et <= a AND b; ou <= a OR b; non <= not b ; END ex;  1 ou non 1 & b a et Description VHDL

Assignation conditionnelle _signal <= _expression WHEN _boolean_expression ELSE _expression WHEN _boolean_expression ELSE _expression ; Exemple : ENTITY ou IS PORT (a, b : IN bit; c : OUT bit); END ou ; ARCHITECTURE conditionnelle OF ou IS BEGIN c <= '0' WHEN (a = '0' AND b = '0' ) ELSE '1'; END conditionnelle;  1 c a b Description VHDL

Autre exemple LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY multiplexeur4 is PORT( entree : IN std_logic_VECTOR (3 DOWNTO 0); adresse : IN std_logic_VECTOR (1 DOWNTO 0); s : OUT std_logic); END; ARCHITECTURE concurrente OF multiplexeur4 IS BEGIN s <= entree(0) WHEN adresse = "00" ELSE entree(1) WHEN adresse = "01" ELSE entree(2) WHEN adresse = "10" ELSE entree(3) ;

Application à l’implémentation de tables de vérité Exercice : proposer une description pour la table de vérité ci-dessous Entrées Sortie 000 100 001 010 010 111 011 110 100 001 101 000 110 011 111 101

Assignation conditionnelle AUTRE Instruction conditionnelle : WITH … SELECT Contrairement à l’instruction conditionnelle when-else, with-select n’a pas de priorité LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY multiplexeur4 is PORT( entree : IN std_logic_VECTOR (3 DOWNTO 0); adresse : IN std_logic_VECTOR (1 DOWNTO 0); s : OUT std_logic); END; ARCHITECTURE with OF multiplexeur4 IS BEGIN WITH adresse SELECT s <= entree(0) WHEN "00", entree(1) WHEN "01", entree(2) WHEN "10", entree(3) WHEN OTHERS; mux entree(0) s adresse entree(1) entree(2) entree(3) Description VHDL

Description structurelle Entity add is port (A, B : in bit; Som, Ret : out bit); end add; architecture Arch_structurelle of add is component XOU port (E1, E2 : in bit; S : out bit); end component; component ET for U1 : XOU use entity work.XOU(Ar_XOU); for U2 : ET use entity work.ET(Ar_ET); begin U1 : XOU port map (A, B, Som); U2 : ET port map (A, B, Ret); end arch_structurelle; Déclaration du composant XOU Déclaration du composant ET. Spécification de l'entité et de l'architecture à utiliser pour les composants ET et XOU. Câblage (instanciation) des composants XOU et ET appelés U1 et U2. Description VHDL

Description structurelle Entity add is port (A, B : in bit; Som, Ret : out bit); end add; architecture Arch_structurelle of add is component XOU port (E1, E2 : in bit; S : out bit); end component; component ET for U1 : XOU use entity work.XOU(Ar_XOU); for U2 : ET use entity work.ET(Ar_ET); begin U1 : XOU port map (A, B, Som); U2 : ET port map (A, B, Ret); end arch_structurelle; U2 ET Ret U1 XOU B A Som E1 E2 Câblage (instanciation) des composants XOU et ET appelés U1 et U2. Description VHDL

Description comportementale Le process Le processus est une instruction concurrente définie à l ’aide d ’instructions séquentielles architecture Arch_comport of add is begin process (A, B) if (A = '0' and B = '0') then Som <= '0'; Ret <= '0'; end if; if (A = '0' and B = '1') then Som <= '1'; Ret <= '0'; end if; if (A = '1' and B = '0') then if (A = '1' and B = '1') then Som <= '1'; Ret <= '1'; end if; end process; end Arch_comport; Il est activé si un des signaux de la liste de sensibilité change d ’état Description du comportement de la fonction L'examen séquentiel des instructions a pour conséquence de rendre le dernier if prioritaire Description VHDL

Description comportementale Interprétation de If, then, elsif, ELSIF IF condition1 THEN instructions séquentielles; ELSIF condition2 THEN ELSIF condition3 THEN ELSE END IF;

Description comportementale Instruction CASE s'utilise dans un process CASE signal IS WHEN valeur1 => instructions séquentielles ; WHEN valeur2 => instructions séquentielles ; WHEN valeur3 => instructions séquentielles ; WHEN OTHERS => instructions séquentielles ; END CASE;

Description comportementale LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY combi4 IS PORT (c :IN INTEGER RANGE 0 TO 3; e : IN STD_LOGIC_VECTOR(3 DOWNTO 0); S : OUT STD_LOGIC ); END combi4; ARCHITECTURE archi OF combi4 IS BEGIN PROCESS(c) CASE c IS WHEN 0 => s<= e(0); WHEN 1 => s<= e(1); WHEN 2 => s<= e(2); WHEN 3 => s<= e(3); END CASE; END PROCESS; END archi; mux e(0) e(1) S c e(2) e(3)

Description comportementale Concurrence dans un process architecture Arch of Ent is begin Process (A, B) if (A = ’1’ and B = ’1’) then S1 <= ’1’; else S1 <= ’0’; end if; end process; Process (B, C) if (B = ’0’) then S2 <= A; elsif (C = ’1’) then S2 <= not(A); else S2 <= D; end if; end ; architecture Arch of Ent is begin S1 <= A and B; S2 <= A when B = ’0’ else S2 <= notA when C = ’1’ else S2 <= D; end Arch; Description VHDL

Description comportementale Instruction for loop Comme son nom l'indique l'instruction loop permet de répéter une opération de manière itérative en fonction d'un paramètre. FOR paramètre IN intervalle LOOP instructions séquentielles; END LOOP; Description VHDL

Description comportementale Exemple d'application de l'instruction for loop LIBRARY ieee;USE ieee.std_logic_1164.all; ENTITY adder4 IS PORT (a,b : IN STD_LOGIC_VECTOR(3 DOWNTO 0); cin : IN STD_LOGIC; cout : OUT STD_LOGIC; sum : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END adder4 ; ARCHITECTURE compor OF adder4 IS signal c : STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN PROCESS (a,b,cin,c) c(0) <= cin; FOR i IN 0 TO 3 LOOP sum(i) <= a(i) xor b(i) xor c(i); c(i+1) <= (a(i) and b(i)) or (c(i) and (a(i) or b(i))); END LOOP; cout <= c(4); END PROCESS; END compor; Description VHDL

Description comportementale Signaux, variables et constantes Ce sont les trois objets manipulés dans une description VHDL. Les trois objets sont nécessairement typés. Le signal est connu dans toute l'architecture où il est déclaré. Les ports sont des signaux. Les signaux ne sont pas mis à jour immédiatement dans un process. Dans un process la dernière assignation détermine la valeur attribuée au signal. (assignation : s <= a) (initialisation par s := '0') La variable ne peut être utilisé que dans un process où elle est locale. Elle est mise à jour instantanément. (assignation : i := '1') La constante peut être utilisée partout mais aucune assignation n'est possible. Seule l'initialisation est prévue exemple : CONSTANT PI : real := 3.1414 Description VHDL

Description comportementale Mauvaise utilisation d'un signal LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; ENTITY mux_faux IS PORT (a, b :IN STD_LOGIC; e : IN STD_LOGIC_VECTOR(3 DOWNTO 0); S : OUT STD_LOGIC); END mux_faux; ARCHITECTURE archi OF mux_faux IS signal muxval : integer; BEGIN PROCESS(a, b, e) Description VHDL

Description comportementale Mauvaise utilisation d'un signal BEGIN muxval <= 0; if (a= '1') then muxval <= muxval + 1; end if; if (b= '1') then muxval <= muxval + 2; end if; CASE muxval IS WHEN 0 => s<= e(0); WHEN 1 => s<= e(1); WHEN 2 => s<= e(2); WHEN 3 => s<= e(3); WHEN OTHERS => null ; END CASE; END PROCESS; END archi; Pour muxval, il s'agit d'une assignation multiple dans un process. En conséquence, c'est la dernière ligne qui définit la valeur de muxval Description VHDL

Description comportementale PROCESS(a, b, e) variable muxval : integer; BEGIN muxval := 0; if (a= '1') then muxval := muxval + 1; end if ; if (b= '1') then muxval := muxval + 2; end if ; CASE muxval IS WHEN 0 => s<= e(0); WHEN 1 => s<= e(1); WHEN 2 => s<= e(2); WHEN 3 => s<= e(3); WHEN others => null; END CASE; END PROCESS; END archi; Correction : La variable étant mise à jour instantanément, la description est correctement interprétée Description VHDL

Erreur fréquente dans les processus Exemple : conception d'un décodeur 3 vers 8 binaire library IEEE; use IEEE.std_logic_arith.all ; use IEEE.std_logic_1164.ALL; ENTITY dec3vers8 IS PORT ( sel : IN BIT_VECTOR (2 DOWNTO 0); en : IN STD_LOGIC; Y : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END dec3vers8; ARCHITECTURE numero1 OF dec3vers8 IS BEGIN

Erreur fréquente dans les processus PROCESS(sel, en) BEGIN IF (en='1') THEN CASE sel IS WHEN "000" => Y(0)<= '1'; WHEN "001" => Y(1)<= '1'; WHEN "010" => Y(2)<= '1' ; WHEN "011" => Y(3)<= '1' ; WHEN "100" => Y(4)<= '1' ; WHEN "101" => Y(5)<= '1' ; WHEN "110" => Y(6)<= '1' ; WHEN "111" => Y(7)<= '1' ; END CASE; END IF; END PROCESS; END numero1; L'erreur fréquente dans les processus est d'oublier d'attribuer une valeur par défaut. Dans l'exemple lorsque en=‘0’, alors Y n'est pas attribuée. Le synthétiseur affecte dans ce cas un latch à chaque sortie Y

Erreur fréquente dans les processus PROCESS(sel, en) BEGIN Y <= "0000 0000"; -- valeur par défaut IF (en='1') THEN CASE sel IS WHEN "000" => Y(0)<= '1'; WHEN "001" => Y(1)<= '1'; WHEN "010" => Y(2)<= '1' ; WHEN "011" => Y(3)<= '1' ; WHEN "100" => Y(4)<= '1' ; WHEN "101" => Y(5)<= '1' ; WHEN "110" => Y(6)<= '1' ; WHEN "111" => Y(7)<= '1' ; END CASE; END IF; END PROCESS; END numero1;

Systèmes séquentiels Principes fondamentaux Bascule D Process (clk) Pour des raisons de reproductibilité et de robustesse par rapport aux aléas des fonctions combinatoires, seules les fonctions séquentielles synchrones sont recommandées! Bascule D Process (clk) Begin IF clk'event AND clk='1' THEN Q <= D; END IF; END Process; Attribut 'event vrai lorsque le signal associé subit une variation d'état Systèmes Séquentiels

Bascule D avec reset Avec Reset asynchrone Process (clk, reset) Begin IF reset = '0' THEN Q <= '0'; ELSIF clk'event AND clk='1' THEN Q <= D; END IF; END Process; La condition sur le reset est prioritaire Systèmes Séquentiels

Bascule D avec reset Avec Reset synchrone Process (clk) Begin IF clk'event AND clk='1' THEN IF reset = '0' then Q <= '0'; ELSE Q <= D; END IF; END Process; La condition sur le reset n’est pas prioritaire Systèmes Séquentiels

Bascule D avec Enable Process (clk, EN) BEGIN IF EN = '0' THEN Q <= Q ; ELSIF clk'event AND clk='1' THEN Q <= D; END IF; END Process; Question : La commande Enable est-elle synchrone ou asynchrone ? Systèmes Séquentiels

Compteurs Problèmes posés par les compteurs Les compteurs sont des machines d'état soit de MOORE soit de MEALY. Réaliser un compteur ou tout circuit d'incrémentation se traduit par une opération d'addition du type : Q <= Q + 1 ; Cette expression révèle deux problèmes : - Le port de sortie Q est utilisé comme entrée, ce qui n'est pas compatible avec son mode "out". - L'incrémentation de la valeur Q du type bit_vector, n'est pas possible avec l'opérateur arithmétique " + ". Systèmes Séquentiels

Compteurs Solution pour le problème de type: Utiliser un convertisseur de type exemple : CONV_STD_LOGIC_VECTOR ENTITY adder IS PORT (op1, op2 : IN UNSIGNED(7 DOWNTO 0); result : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END adder; ARCHITECTURE archi OF adder IS BEGIN result <= CONV_STD_LOGIC_VECTOR(op1 + op2, 8 ); END archi; conv_std_logic_vector (x,n) pour convertir un integer, unsigned ou signed x en un std_logic_vector de n bits Systèmes Séquentiels

Compteurs Solution au problème de port : ENTITY cpt3 IS PORT(e: IN INTEGER RANGE 255 DOWNTO 0; h, prepn, razn : IN STD_LOGIC; S: OUT INTEGER RANGE 0 TO 255 ); END cpt3; ARCHITECTURE archi OF cpt3 IS SIGNAL test : INTEGER RANGE 0 TO 255; BEGIN PROCESS(razn,h,prepn) IF razn = '0' THEN test<= 0; ELSIF (h'EVENT AND h ='1') THEN IF prepn='0' THEN test<=e; ELSE test<=test+1; END IF; ELSE test <= test; END IF; END PROCESS; S <= test; END archi; Solution au problème de port : Utiliser un signal ou une variable pour effectuer les opérations puis mettre la sortie à jour à la fin. Systèmes Séquentiels

Machines d'état (FSM) Machine de Moore Systèmes Séquentiels

Machines d'état (FSM) Machine de Mealy Systèmes Séquentiels

Type énuméré Énumération Création personnalisée d’un type correspondant à une énumération d’éléments explicites. Très utile pour identifier les états d'une machine d'états. Exemple : TYPE libelle_instruction IS (MOVE, ADD, JNE, BRS, RTS) ; SIGNAL Instruction : libelle_instruction ; Description VHDL

Machines d'état (FSM) Description VHDL Les FSM sont composées de trois parties, deux fonctions combinatoires et un registre. Chacune de ces parties peut être décrite séparément ou de manière composée avec une autre . Les états peuvent être identifiés explicitement à l'aide d'un type énuméré approprié ! Exemple : TYPE state IS (lecture, incrément, décode, exécute) ; Systèmes Séquentiels

Machines d'état (FSM) Description à trois parties ps : process(etat) ARCHITECTURE FSM3p of exemple IS TYPE state IS (lecture, incrément, décode, exécute) ; signal etat, etat_futur : state ; BEGIN Pr : process(horloge) ..... IF horloge'event .... ...... etat <= etat_futur ; ps : process(etat) ..... S <= .... pe : process(E, etat) ...... etat_futur <= ... Systèmes Séquentiels

Exemple de machine d'état Commande d'essuie glace On considère un essuie glace avec pompe de lavage. Le maintien de la commande E active le moteur M de balayage simultanément au moteur de pompe P. La libération de E arrête la pompe P. Le moteur M reste activé pendant deux cycles complet de balayage. Le système est équipé d'un contact de fin de course F. Représenter le graphe de la machine d'état du dispositif. Décrire la machine en VHDL. Systèmes Séquentiels

Exemple de machine d'état Commande d'essuie glace cyc_2 M , !P cyc_1 M, !P lavage M, P repos !M, !P ! F F E !E Systèmes Séquentiels

Exemple de machine d'état Type state is (repos, lavage, cyc_1, cyc_2) signal etat, etat_f : state; P1 : process(clk) begin if clk'event and clk='1' then etat <= etat_f; end if; end process P1; P2 : process(etat) if etat= repos then M <= '0'; P <= '0'; elsif etat = lavage then M <= '1'; P <= '1'; else M <= '1'; P <= '0'; end process P2; Description des sorties Registre Systèmes Séquentiels

Exemple de machine d'état P3 : process(F, E, etat) begin case etat is when repos => if E='1' then etat_f <= lavage ; else etat_f <= etat; end if; when lavage => if E = '0' then etat_f <= cyc_1 ; when cyc_1 => if E ='1' then elsif F= '1' then etat_f <= cyc_2 ; else etat_f <= cyc_1; end if; when cyc_2 => if E = '1' then elsif F= '1' then etat_f <= repos ; end process P3; Circuit d'excitation Systèmes Séquentiels

Machine d'état Simplification de l'écriture Il est possible de regrouper les parties combinatoires dans un processus, ce qui allège l'écriture au détriment de la lisibilité. Systèmes Séquentiels

Machine d'état Pour l'exemple cela donne : Type state is (repos, lavage, cyc_1, cyc_2) signal etat, etat_f : state; reg : process(clk) begin if clk'event and clk='1' then etat <= etat_f; end if; end process reg ; Systèmes Séquentiels

Machine d'état Etats de sorties Etat futur P3 : process(F, E, etat) begin case etat is when repos => M <= '0'; P <= '0' if E='1' then etat_f <= lavage ; else etat_f <= etat; end if; when lavage => M <= '1'; P <= '1'; if E = '0' then etat_f <= cyc_1 ; when cyc_1 => M <= '1'; P <= '0'; if E ='1' then etat_f <= lavage ; elsif F= '1' then etat_f <= cyc_2 ; when cyc_2 => M <= '1'; P <= '0'; if E = '1' then etat_f <= lavage ; elsif F= '1' then etat_f <= repos ; end process P3; Etats de sorties Etat futur Systèmes Séquentiels

Machine d'état autre simplification Créer un registre à la fin du circuit d’excitation Pour l'exemple cela donne : Type state is (repos, lavage, cyc_1, cyc_2) signal etat : state; -- pas de process registre P2 : process(etat) begin if etat= repos then M <= '0'; P <= '0'; elsif etat = lavage then M <= '1'; P <= '1'; else M <= '1'; P <= '0'; end if; end process P2; Etats de sorties Systèmes Séquentiels

Machine d'état autre simplification P3 : process(F, E, etat) Begin if clk'event and clk='1' then case etat is when repos => if E='1' then etat <= lavage ; else etat <= etat; end if; when lavage => if E = '0' then etat <= cyc_1 ; when cyc_1 => if E ='1' then etat <= lavage ; elsif F= '1' then etat <= cyc_2 ; when cyc_2 => if E = '1' then etat <= lavage ; elsif F= '1' then etat <= repos ; end case; end process P3; Description du registre d’état Systèmes Séquentiels

Méthodes de conception Flot de conception VHDL-RTL

Flot de Conception Conception Vérification Spécification Layout manuelle Analyse du problème Description comportementale Simulation comport. Raffinement architectural Description VHDL-RTL Conception Vérification Synthèse Netlist logique indépendante Synthèse technologique Netlist logique technologique Placement routage Simulation logique Layout

Instructions avancées Generate Generate est une instruction qui simplifie de manière très sensible l'écriture de descriptions structurelles complexes. L'instruction permet de répliquer automatiquement des composants en incrémentation les indices de bus. __generate_label : FOR __index_variable IN _plage GENERATE instruction; _instruction; END GENERATE; Description VHDL

Generate : exemple réalisation d'un registre à décalage Use work.std_logic_1164.all; Entity decalage is port (a, clk : in std_logic; b : out std_logic); end decalage; Architecture gen_decal of decalage is component D_basc port (d, clk : In std_logic; q : out std_logic); end component; signal z : std_logic_vector(0 to 4) Description VHDL

Generate : exemple suite Begin z(0) <= a ; instance : For i In 0 to 3 generate Dx : D_basc port MAP( z(i), clk, z(i+1)); End Generate; b <= z(4) ; End gen_decal; (d, clk : In std_logic; q : out std_logic); D clk Q Z(0) a Z(1) Z(2) Z(3) b Z(4) D_basc(0) D_basc(1) D_basc(2) D_basc(3) Description VHDL

Instructions avancées Generic Il est possible de rajouter une déclaration de GENERIC correspondant à des paramètres. Ces paramètres pourront, par la suite, être modifiés lors de l'utilisation de la description en temps que composant. Generic est utilisé pour deux applications principales : définition de paramètres de délai Paramétrage de la taille des bus GENERIC( _parameter_name : string := __default_value; _parameter_name : integer:= __default_value); Description VHDL

Generic : exemple Dans ces premiers exemples TP est une constante de type time. L'attribut after modélise le délai pour la fonction réalisée. Entity ET is GENERIC (TP : time := 0 ns); port (E1, E2 : in bit; S1 : out bit); end ET; architecture ET of ET is begin S1 <= E1 and E2 after TP; Entity OU is GENERIC (TP : time := 20 ns); port (E1, E2 : in bit; S1 : out bit); end OU; architecture OU of OU is begin S1 <= E1 or E2 after TP; Description VHDL

Generic suite de l'exemple Entity ET_OU is port (A, B : in bit; X, Y : out bit); end ET_OU; architecture ET_OU of ET_OU is component OU generic (TP : time); port (E1, E2 : in bit; S1 : out bit); end component; component ET for U1 : OU use entity work.OU(OU); for U2 : ET use entity work.ET(ET); begin U1 : OU generic map ( TP => 5 ns ) port map (A, B, X); U2 : ET generic map ( TP => 15 ns ) port map (A, B, Y); end ET_OU; Description VHDL

Packages regroupement de données, variables, fonctions, procédures, etc., que l'on souhaite pouvoir utiliser ou appeler à partir d'architectures. Au sein d'un projet contenant plusieurs entités, les packages permettent d ’utiliser des ressources (constantes, variables particulières, fonctions...) identiques. Deux unités pour les paquetages : La déclaration de paquetage (PACKAGE nom IS) Le corps de paquetage (PACKAGE BODY nom IS)qui contient les valeurs déclarées et la description des sous-programmes (procedure et fonction) PACKAGE __package_name IS -- Type Subtype Declaration -- Constant Declaration -- Signal Declaration -- Component Declaration -- procedure, fonction Declaration END __package_name; Non supporté par certains compilateurs Description VHDL

Exemple d ’application du paquetage Package exemple is constant delai : time; end exemple ; package body ex_bod of exemple is constant delai : time := 27ns; end ex_bod; Déclaration de la constante de type time Initialisation de la constante à 27ns Use work.exemple.all entity A is .......; end A; architecture arch_X of A is begin ......; S <= E after delai ; end arch_X; entity B is end B; architecture arch_X of B is Sb <= Ex after delai ; Utilisation de la même constante de temps dans deux entités A et B Description VHDL

Conception avancée Fonction Le langage VHDL permet l'utilisation et la création de fonctions ou de procédures que l'on peut appeler à partir d'une architecture. A la différence de la procédure la fonction renvoie une valeur unique. FUNCTION nom de la fonction ( liste des paramètres de la fonction avec leur type ) RETURN type du paramètre de retour IS zone de déclaration des variables ; BEGIN ...........; instructions séquentielles ; RETURN nom de la variable de retour ou valeur de retour; END; Description VHDL

Conception avancée Exemple 1 : FUNCTION bool_vers_bit (X : boolean) RETURN bit IS BEGIN if X then RETURN '1'; else RETURN '0'; end if; END; Description VHDL

Conception avancée Exemple 2 : fonction au sein d'un package Package outil is function xor3 (a,b,c : bit) return bit ; end outil; package body outil is function xor3 (a,b,c : bit) return bit is begin return (a xor b xor c) ; end xor3 ; end outil; library work ; use work.outil.all ; entity exemple2 is port (a,b,c : in bit; sum : out bit); end exemple2 architecture RTL of exemple2 is sum <= xor3(a, b, c) ; end RTL; Description VHDL

Conception avancée Procédure Les procédures diffèrent des fonctions par le fait qu'elles acceptent des paramètres dont la direction peut être IN, INOUT et OUT. Une procédure ne possède donc pas un ensemble de paramètres d'entrées et un paramètre de sortie mais un ensemble de paramètres d'entrées-sorties Exemple : PROCEDURE RS (signal A, B : IN bit; signal Q, Qb : INOUT bit) IS BEGIN Q <= not (A or Qb); Qb <= not (B or Q); END; Description VHDL

Macrofonctions combinatoires Décodeur binaire Fonction qui convertit des données codées en binaire en bits pondérés décimal. Ainsi toutes les valeurs sur n bits d'entrée sont représentées sur 2n sorties. Exercice : réaliser la description VHDL d'un décodeur 2 vers 4. LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY decodeur IS PORT ( a :IN STD_LOGIC_VECTOR(1 DOWNTO 0); S : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END decodeur; ARCHITECTURE archi OF decodeur IS BEGIN s <= "0001" when a = "00" else "0010" when a = "01" else "0100" when a = "10" else "1000" when a = "11" ; END archi; Macrofonctions combinatoires

Macrofonctions Exercice Réaliser un décodeur BCD-7segments library IEEE; use IEEE.std_logic_arith.all; use IEEE.std_logic_1164.ALL; ENTITY dec7seg IS PORT ( n : IN INTEGER RANGE 0 TO 15; segments : OUT STD_LOGIC_VECTOR (6 DOWNTO 0)); END dec7seg; Macrofonctions combinatoires

Macrofonctions ARCHITECTURE numero1 OF dec7seg IS BEGIN PROCESS(n) CASE n IS WHEN 0 =>segments <= "1111110"; WHEN 1 =>segments <= "0110000" ; WHEN 2 =>segments <= "1101101" ; WHEN 3 =>segments <= "1111001" ; WHEN 4 =>segments <= "0110011" ; WHEN 5 =>segments <= "1011011" ; WHEN 6 =>segments <= "1011111" ; WHEN 7 =>segments <= "1110000" ; WHEN 8 =>segments <= "1111111"; WHEN 9 =>segments <= "1111011" ; WHEN others =>segments <= "0000001" ; END CASE; END PROCESS; END numero1; Macrofonctions combinatoires

Encodeur L'encodeur binaire réalise la fonction inverse du décodeur. Les 2n entrées sont pondérées décimal. L'entrée active de plus fort poids est codée en binaire sur n bits. Réaliser un encodeur à 4 entrées en utilisant when else LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY encodeur1 IS PORT ( a :IN STD_LOGIC_VECTOR(3 DOWNTO 0); S : OUT STD_LOGIC_VECTOR(1 DOWNTO 0)); END encodeur1; ARCHITECTURE archi OF encodeur1 IS BEGIN s <= "11" when a(3) = '1' else "10" when a(2) = '1' else "01" when a(1) = '1' else "00" when a(0) = '1' ; END archi; Macrofonctions combinatoires

Encodeur Réaliser un encodeur à 4 entrées en utilisant If then else LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY encodeur2 IS PORT (a :IN STD_LOGIC_VECTOR(3 DOWNTO 0); S : OUT STD_LOGIC_VECTOR(1 DOWNTO 0)); END encodeur2; ARCHITECTURE archi OF encodeur2 IS BEGIN PROCESS (a) IF a(3) = '1' THEN s<= "11" ; ELSIF a(2) = '1' THEN s<= "10"; ELSIF a(1) = '1' THEN s<= "01"; ELSE s<= "00"; END IF; END PROCESS ; END archi; Macrofonctions combinatoires

Encodeur Variante de l'encodeur utilisant trois instructions IF LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; ENTITY encodeur3 IS PORT (a :IN STD_LOGIC_VECTOR(3 DOWNTO 0); S : OUT STD_LOGIC_VECTOR(1 DOWNTO 0)); END encodeur3; ARCHITECTURE archi OF encodeur3 IS BEGIN PROCESS (a) S<= "00"; IF a(1) = '1' THEN s<= "01"; END IF; IF a(2) = '1' THEN s<= "10"; END IF; IF a(3) = '1' THEN s<= "11"; END IF; END PROCESS ; END archi; Assignation multiple qui n'est possible que parce qu'elle est faite dans un process : la dernière est conservée Macrofonctions combinatoires

Multiplexeur Un multiplexeur permet d'aiguiller une donnée parmi N entrées vers une seule sortie. (cf exemple ch. assignation conditionnelle). Exercice : décrire un mux à n bits d'entrée en utilisant une affectation de type : S <= e(sel) Macrofonctions combinatoires

Multiplexeur LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY mux_n IS GENERIC(n : integer:= 4); PORT (e: IN bit_vector((2**n-1) downto 0) ; sel : IN integer range (2**n-1) downto 0 ; S : OUT bit); END mux_n; ARCHITECTURE RTL OF mux_n IS BEGIN S <= e(sel); END RTL; Macrofonctions combinatoires

Macrofonction de la bibliothèque Utilisation des macrofonctions LPM (Altera) LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; LIBRARY lpm; USE lpm.lpm_components.ALL; ENTITY cpt2 IS PORT( e : IN STD_LOGIC_VECTOR(3 DOWNTO 0); h, prepn, razn : IN STD_LOGIC; s : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END cpt2; Déclaration des bibliothèques Systèmes Séquentiels

Macrofonction de la bibliothèque ARCHITECTURE archi OF cpt2 IS SIGNAL raz, prep : STD_LOGIC; BEGIN mon_compteur : lpm_counter GENERIC MAP ( LPM_WIDTH => 4, LPM_DIRECTION => "UP") PORT MAP (data => e(3 DOWNTO 0), clock => h, sload => prep, aclr => raz, q => s(3 DOWNTO 0)); razn <= NOT raz; prepn <= NOT prep; END archi; Instanciation de la macrofonction Déclaration des paramètres Connexion des ports Systèmes Séquentiels

ANNEXE

Types Types utilisés en électronique numérique Les signaux, variables et constantes ont obligatoirement un type qui définit l ’ensemble auquel ils appartiennent. Définition d'un type entier pour le signal A : A INTEGER RANGE 255 DOWNTO 0 (0to255) Description VHDL

Différence entre rangement ascendant et descendant : Vecteurs Vecteurs pour la manipulation de bus Assigner une valeur à un des éléments d'un bus: B(3) <= '1 ’ Assigner une valeur à l'ensemble du bus, plusieurs méthodes Déclaration de trois signaux correspondant à des bus (un vecteur de signaux) comportant 8 signaux A(0), A(1) ,..., A(7) et B(0), B(1) , ..., B(7) ainsi que S(0), S(1) , ..., S(7). rangement descendant A : in bit_vector (7 downto 0); rangement ascendant B : in bit_vector (0 to 7); S : out bit_vector (7 downto 0); Différence entre rangement ascendant et descendant : si A <= "11110000" alors A(7) = '1' si B <= "11110000" alors B(7) = '0' Description VHDL

Types std_logic et std_ulogic Le type bit est insuffisant à définir des états haute impédance ou indéfinis! Le standard IEEE de 1993 ( std_logic_1164) remédie à ce problème en définissant les types std_ulogic et std_logic le standard std_logic est résolu (des affectations multiples sont prévues) std_logic_vector et std_ulogic_vector sont des bus de type std. 'U' = Non initialisé, ’W’ = inconnu forçage faible, ’X ' = inconnu forçage fort, ’L’ = forçage faible, (bas) ’0’ = forçage fort, (bas) ’H’ = forçage faible, ’1’ = forçage fort, (haut) ’-’ = quelconque. (haut) ’Z ' = haute impédance, Description VHDL

Types std_logic et std_ulogic Le type bit est insuffisant à définir des états haute impédance ou indéfinis! Le standard IEEE de 1993 ( std_logic_1164) remédie à ce problème en définissant les types std_ulogic et std_logic le standard std_logic est résolu (des affectations multiples sont prévues) std_logic_vector et std_ulogic_vector sont des bus de type std. Seuls ces quatres états ont une signification pour la synthèse ’1’ = forçage fort, (haut) ’0’ = forçage fort, (bas) ’Z ' = haute impédance, ’-’ = quelconque. (haut) Description VHDL

Type énuméré et tableau Énumération Création personnalisée d ’un type correspondant à une énumération d ’éléments explicites. Exemple : TYPE libelle_instruction IS (MOVE, ADD, JNE, BRS, RTS) ; SIGNAL Instruction : libelle_instruction ; Tableau définition de tableau de valeurs de type quelconque. TYPE Tableau_4x8xbit IS ARRAY (3 downto 0, 7 downto 0) OF bit ; ou bien encore TYPE Tableau_8xbit IS ARRAY (7 downto 0) OF bit ; TYPE Tableau_4x8xbit IS ARRAY (3 downto 0) OF Tableau_8xbit ; Description VHDL

Type Record Type composé de plusieurs éléments différents et juxtaposés . L ’utilisation du ‘ . ’ permet ensuite d ’accéder à l ’élément souhaité. Exemple de type : TYPE Bus_micro IS RECORD Nbr_bit_adresse : integer ; Nbr_bit_donnee : integer ; Vitesse : time ; END RECORD ; Exemple d ’assignation sur ce type : Bus_micro.Nbr_bit_adresse <= 24 ; Bus_micro.Nbr_bit_donnee <= 16 ; Bus_micro.vitesse <= 10us ; Description VHDL

Conversion de type Nécessité Certains opérateurs peuvent être prévus uniquement sur un type fixé (ex : integer). L'utilisation de cet opérateur sur d'autres types (ex : std_logic_vector) nécessite une conversion de type. Ces convertisseurs sont parfois spécifiques au package utilisé. LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; ENTITY adder IS PORT (op1, op2 : IN UNSIGNED(7 DOWNTO 0); result : OUT INTEGER); END adder; ARCHITECTURE maxpld OF adder IS BEGIN result <= CONV_INTEGER(op1 + op2); END maxpld; Description VHDL

Bibliothèques standard Bibliothèques du standard IEEE IEEE.std_logic_1164 : contient les types STD_logic et std_logic_vector ainsi que les opérateurs logiques : and, nand, or, nor, xor, xnor, not IEEE.std_logic_arith : contient un groupe d'opérateurs arithmétiques : "+", "-", "abs", "*", "<", ">", "<=", ">=", "/=", "=", shr, shl, conv_integer etc.. std_logic_signed : contient des opérateurs sur nombres entiers signés. std_logic_unsigned : contient des opérateurs sur nombres entiers non signés. Description VHDL

Opérateurs + , - , *, **, / valides sur entiers et flottants & : concaténation ex : a et b sur 2bits c<=a&b : sur 4 bits notation des bases : base#nombre# (la base est écrite en décimal) exemple : 16#A8# = 10#24# = 2#11000# Description VHDL