1 / 94

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

Conception avancée de circuits numériques (VHDL). Hakim ZIMOUCHE LIEN UHP (Hakim.Zimouche@lien.uhp-nancy.fr). Introduction. Objectif 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.

yitro
Download Presentation

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

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. Conception avancée de circuits numériques (VHDL) Hakim ZIMOUCHE LIEN UHP(Hakim.Zimouche@lien.uhp-nancy.fr)

  2. Introduction Objectif • 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

  3. 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)

  4. PLAN • Logique Combinatoire • 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

  5. 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)

  6. 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

  7. E1 S XOU E2 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_nameIS 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(highdowntolow); _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; Description VHDL

  8. 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

  9. 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

  10. Vecteurs • Assigner une valeur à l'ensemble du bus, plusieurs méthodes • S <= "11001010"; • 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.

  11. 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_nameOF_entity_nameIS 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

  12. 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

  13. a & et b ou  1 1 non 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; Description VHDL

  14. a  1 c b Assignation conditionnelle _signal<=_expressionWHEN_boolean_expressionELSE _expressionWHEN_boolean_expressionELSE _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; Description VHDL

  15. 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) ; END;

  16. 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

  17. adresse entree(0) mux entree(1) s entree(2) entree(3) 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; • END; Description VHDL

  18. 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 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 port (E1, E2 : in bit; S : out bit); end component; 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; Description VHDL

  19. A E1 U1 XOU Som B E2 E1 Ret U2 ET E2 Câblage (instanciation) des composants XOU et ET appelés U1 et U2. 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 port (E1, E2 : in bit; S : out bit); end component; 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; Description VHDL

  20. 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) begin 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 Som <= '1'; Ret <= '0'; end if; 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

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

  22. 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;

  23. c e(0) mux e(1) S e(2) e(3) 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) BEGIN 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;

  24. Description comportementale • Concurrence dans un process architecture Arch of Ent is begin Process (A, B) begin if (A = ’1’ and B = ’1’) then S1 <= ’1’; else S1 <= ’0’; end if; end process; Process (B, C) begin if (B = ’0’) then S2 <= A; elsif (C = ’1’) then S2 <= not(A); else S2 <= D; end if; end process; 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

  25. 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

  26. 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) BEGIN 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

  27. 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

  28. 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

  29. 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

  30. 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 comportementale Description VHDL

  31. 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

  32. 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

  33. 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;

  34. Systèmes séquentiels • Principes fondamentaux 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

  35. 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

  36. 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 IF; END Process; La condition sur le reset n’est pas prioritaire Systèmes Séquentiels

  37. 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

  38. 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

  39. Compteurs conv_std_logic_vector (x,n) pour convertir un integer, unsigned ou signed x en un std_logic_vector de n bits 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; Systèmes Séquentiels

  40. 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) BEGIN 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. Compteurs Systèmes Séquentiels

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

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

  43. 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

  44. 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

  45. Machines d'état (FSM) • Description à trois parties • 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

  46. 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

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

  48. Registre Description des sorties 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) 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; Systèmes Séquentiels

  49. 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 ; else etat_f <= etat; end if; when cyc_1 => if E ='1' then etat_f <= lavage ; elsif F= '1' then etat_f <= cyc_2 ; else etat_f <= cyc_1; end if; when cyc_2 => if E = '1' then etat_f <= lavage ; elsif F= '1' then etat_f <= repos ; else etat_f <= etat; end if; end process P3; Circuit d'excitation Systèmes Séquentiels

  50. 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

More Related