La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "Conception avancée de circuits numériques (VHDL)"— Transcription de la présentation:

1 Conception avancée de circuits numériques (VHDL)
Hakim ZIMOUCHE LIEN UHP

2 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

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

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 1993 révision IEEE 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 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

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 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 <= " " alors A(7) = '1' si B <= " " alors B(7) = '0' Description VHDL

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

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

14 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

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) ;

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

17 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

18 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

19 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

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

21 Description comportementale
Interprétation de If, then, elsif, ELSIF IF condition1 THEN instructions séquentielles; ELSIF condition2 THEN ELSIF condition3 THEN ELSE 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 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)

24 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

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) 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 := 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 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

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 <= " "; -- 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 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

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

40 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

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

42 Machines d'état (FSM) Machine de Mealy 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 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

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

48 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

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

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

51 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

52 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

53 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

54 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

55 Méthodes de conception
Flot de conception VHDL-RTL

56 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

57 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

58 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

59 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

60 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

61 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

62 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

63 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

64 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

65 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

66 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

67 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

68 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

69 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

70 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

71 Macrofonctions ARCHITECTURE numero1 OF dec7seg IS BEGIN PROCESS(n)
CASE n IS WHEN 0 =>segments <= " "; WHEN 1 =>segments <= " " ; WHEN 2 =>segments <= " " ; WHEN 3 =>segments <= " " ; WHEN 4 =>segments <= " " ; WHEN 5 =>segments <= " " ; WHEN 6 =>segments <= " " ; WHEN 7 =>segments <= " " ; WHEN 8 =>segments <= " "; WHEN 9 =>segments <= " " ; WHEN others =>segments <= " " ; END CASE; END PROCESS; END numero1; Macrofonctions combinatoires

72 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

73 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

74 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

75 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

76 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

77 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

78 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

79 ANNEXE

80 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

81 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 <= " " alors A(7) = '1' si B <= " " alors B(7) = '0' Description VHDL

82 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

83 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

84 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

85 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

86 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

87 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

88 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

89

90

91

92

93

94


Télécharger ppt "Conception avancée de circuits numériques (VHDL)"

Présentations similaires


Annonces Google