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

Gei 431 Architecture des ordinateurs II – Frédéric Mailhot Le VHDL De nos jours, les circuits numériques de haute performance sont habituellement créés.

Présentations similaires


Présentation au sujet: "Gei 431 Architecture des ordinateurs II – Frédéric Mailhot Le VHDL De nos jours, les circuits numériques de haute performance sont habituellement créés."— Transcription de la présentation:

1 Gei 431 Architecture des ordinateurs II – Frédéric Mailhot Le VHDL De nos jours, les circuits numériques de haute performance sont habituellement créés à partir de descriptions en langages de haut niveau. Nous allons maintenant parler de lun de ces langages, le VHDL

2 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Le VHDL: Quest-ce que cest, et à quoi cela sert-il? VHDL: VHSIC Hardware Description Language VHSIC:Very High Speed Integrated Circuit (projet de grande envergure du DoD (Departement of Defense) Américain, mis en place dans les années 80 Principe de base:Définir un langage de description de matériel qui puisse être utilisé pour simuler du matériel numérique Extension:Utilisation du même langage pour la synthèse automatique de circuits

3 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL VHDL: Est-ce le seul HDL? Il existe plusieurs autres langages de description de matériel, entre autres: Verilog (Très populaire aux États-Unis, utilisé aussi en Europe, au Japon et au Canada) UDL/1 (Utilisé à un certain moment au Japon) Estérel (langage académique – Français) HardwareC (langage académique – Stanford) Verilog est plus simple que le VHDL, mais est un peu moins utilisé

4 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL « Design Flow » moderne Design fonctionnel Design « Register Transfer Level » Design Logique Design « Physique » Simulation comportermentale Simulation RTL Validation Simulation logique Vérification Simulation de fautes Analyse des délais Analyse du circuit « Design Rule Checking »

5 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Concepts de base Description du système: Structurale Comportementale (behavioral) Événements Délais de propagation Concurrence Timing: Synchrone Asynchrone Signaux: Forme Valeur Partage Simulation dévénements discrets

6 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Pourquoi utiliser des langages HDL? Pour accélérer la conception de circuits (raison économique) Pour permettre la conception de circuits très complexes (150 millions de portes logiques dici 5 ans) Pour pouvoir représenter les systèmes numériques selon les différents axes dabstraction

7 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Pourquoi mettre en marché plus rapidement? Temps Revenus Délai Augmentation du marché Déclin du marché Revenus maximum Pertes de revenus

8 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Le « Y » de Gadjsky Comportemental Structural Physique Transistors Portes Registres Processeurs Cellules Modules Circuits Printed Circuit Board Algorithmes Register transfer Expressions Booléennes Fonctions de transfert

9 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Valeur des signaux À la base, tout système numérique est constitué de signaux binaires. VHDL supporte le bit au plus bas niveau. Valeur possible du bit:0 ou 1 Est-ce suffisant?

10 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Valeur des signaux ValeurInterprétation00 - Forcé11 - ForcéUUninitialized (non-initialisé)XInconnu - ForcéZHaute impédanceWInconnu - FaibleL0 - FaibleH1 - Faible-Dont Care Standard IEEE 1164:

11 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Premier concept de base: les entités (entity) Première étape de définition de matériel: définir linterface Comment: à laide de la déclaration « entity »

12 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Les « entity » Linterface externe du circuit ci-haut est spécifiée par la déclaration « entity » suivante: entity half_adder is port(a, b: in bit; sum, carry: out bit); end half_adder; a b sum carry

13 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Exemple dentity: multiplexeur de bus entity mux is port (I0, I1 : in std_ulogic_vector (7 downto 0); I2, I3: in std_ulogic_vector (7 downto 0); Sel: in std_ulogic_vector (1 downto 0); z : out std_ulogic_vector (7 downto 0)); end mux;

14 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Exemple dentity: Flip-flop entity D_ff is port (D,Clk, S, R: in std_ulogic; Q, Qbar:out std_ulogic); end D_ff;

15 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Deuxième concept de base: les énoncés concurrents Il faut être capable de définir la fonctionnalité de notre système, qui représente ce que le matériel devra effectuer Puisquon parle de matériel, tout ce qui est décrit va « sexécuter » en parallèle Pour décrire la fonctionnalité dun système, on utilise la déclaration « architecture », qui implicitement contient des énoncés concurrents

16 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Exemple darchitecture: un demi- additionneur library IEEE; use IEEE.std_logic_1164.all; entity half_adder is port(a, b: in bit; sum, carry: out bit); end half_adder; architecture comportement_concurrent of half_adder is begin sum <= (a xor b) after 5 ns; carry <= (a and b) after 5 ns; end comportement_concurrent;

17 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Signaux à source multiples Quarrive-t-il si un signal est produit par plus dune source (e.g. élément dun bus)? Quarrive-t-il si les différentes sources ne déterminent pas la même valeur? On utilise une fonction de « résolution » pour traiter ces cas Dans la librairie IEEE, le type « std_logic » du standard 1164 est résolu

18 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Assignations conditionnelles On peut utiliser une assignation conditionnelle pour définir la valeur dun signal: library IEEE; use IEEE.std_logic_1164.all; entity mux4 is port (In0, In1, In2, In3: in std_logic_vector (7 downto 0); S0, S1: in std_logic; z: out std_logic_vector (7 downto 0)); end mux4; architecture comportemental of mux4 is begin z <= In0 after 5 ns when S0 = 0 and S1 = 0 else In1 after 5 ns when S0 = 0 and S1 = 1 else In2 after 5 ns when S0 = 1 and S1 = 0 else In3 after 5 ns when S0 = 1 and S1 = 1 else after 5 ns; end comportemental;

19 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Utilisation de sélecteurs Lorsquil y a un grand nombre de possibilités qui sont toutes énumérées, on peut utiliser un sélecteur

20 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Utilisation de sélecteurs – exemple library IEEE; use IEEE.std_logic_1164.all; entity memoire is port (addr1,addr2: in std_logic_vector (2 downto 0); mem1: out std_logic_vector (31 downto 0)); end memoire; architecture comportemental of memoire is signal reg0, reg1, reg2, reg3: std_logic_vector (31 downto 0):= to_stdlogicvector(x1234AB); signal reg4, reg5, reg6, reg7: std_logic_vector (31 downto 0):= to_stdlogicvector(x5678FF); begin with addr1 select mem1 <= reg0 after 5 ns when 000; reg1 after 5 ns when 001; reg2 after 5 ns when 010; reg3 after 5 ns when 011; reg4 after 5 ns when others; end comportemental;

21 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Les délais VHDL permet de modéliser différents types de délais, qui sont utiles lors des simulations: Délais dinertie (inertial delay): représentent la durée minimum dune entrée pour que son effet puisse être observé à la sortie. Utile pour tenir compte du temps de montée/descente E.g.: sum <= reject 2 ns inertial (a xor b) after 5 ns; Délais de transport: représentent le délai encouru par les interconnections. Utile pour tenir compte des délais RC dans les longs fils E.g.: sum <= transport (a xor b) after 5 ns; Délais « delta »: utilisés à linterne par les simulateurs pour ordonner larrivée des signaux

22 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Les délais: exemple library IEEE; use IEEE.std_logic_1164.all; entity half_adder is port(a, b: in std_logic; sum, carry: out std_logic); end half_adder; architecture delai_transport of half_adder is signal s1, s2: std_logic := 0; begin s1 <= (a xor b) after 2 ns; s2 <= (a and b) after 2 ns; sum <= transport s1 after 4 ns; carry <= transport s2 after 4 ns; end delai_transport; a b sum carry s2 s1 sum carry b a s1 s Temps (ns) inertie transport

23 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Les délais: exemple library IEEE; use IEEE.std_logic_1164.all; entity circuit is port(a, b: in std_logic; z: out std_logic); end circuit; architecture circ of circuit is signal s1, s2, s3, s4: std_logic; begin s1 <= not a; s2 <= not b; s3 <= not ( s1 and b); s4 <= not (s2 and a); z <= not (s3 and s4); end circ; s1 s2 b a s3 z Temps (ns) a b z s2 s1 s3 s4

24 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Les délais: exemple a b z s2 s1 s3 s4 s1 s2 b a s3 z Temps (ns) s4 b s2 s3 z Temps (ns)

25 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Modélisation de comportement Pour décrire des systèmes plus complexes quun petit groupe de simples portes logiques, nous devons ajouter un nouveau concept: le processus (process) Le «process » a une liste de dépendance (dependency list). Lorsquun ou plusieurs signaux de la liste sont modifiés, le process est enclenché

26 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Les processus: exemple library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; entity mem is port( addr: in std_logic_vector (31 downto 0); wr_data: in std_logic_vector (31 downto 0); Mem_wr, Mem_rd: in std_logic; rd_data: out std_logic_vector (31 downto 0); end mem; architecture comport of mem is type memo_arr is array(0 to 3) of std_logic_vector (31 downto 0); begin memo_proc: process ( addr, wr_data) variable data_memo: memo_arr := ( to_stdlogicvector(X ), to_stdlogicvector(X )); variable addr_int: integer; begin addr_int := to_integer(addr (1 downto 0)); if (Mem_wr = 1 then data_memo(addr_int) := wr_data; elsif Mem_rd = 1 then rd_data <= data_memo(addr_int); end if; end process memo_proc; end comport;

27 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL If, Case, For et While À lintérieur dun « process », on peut utiliser des « if » et/ou des « case ». Lexécution est alors séquentielle De même, on peut utiliser des boucles pour contrôler lexécution. Les « for » sont à bornes fixes, alors que les « while » ne le sont pas.

28 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL If, case: exemple library IEEE; use IEEE.std_logic_1164.all; entity half_adder is port(a, b: in bit; sum, carry: out bit); end half_adder; architecture proc_add of half_adder is begin sum_proc: process (a, b) begin if (a = b) then sum <= 0 after 5 ns; else sum <= (a or b) after 5 ns; end if; end process sum_proc; carry_proc: process (a, b) begin case a is when 0 => carry <= a after 5 ns; when 1 => carry <= b after 5 ns; when others => carry <= X after 5 ns; end case; end process carry_proc; end proc_add;

29 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL For loop: exemple library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; entity mult32 is port(mult1: in std_logic_vector (31 downto 0); mult2: in std_logic_vector (31 downto 0); prod: out std_logic_vector (63 downto 0)); end mult32; architecture comp_mult of mult32 is constant delai_module: Time:= 10 ns; begin mult_proc: process (mult1, mult2) variable prod_reg : std_logic_vector (63 downto 0) := to_stdlogicvector(X ); variable mult_reg : std_logic_vector (31 downto 0) := to_stdlogicvector(X ); begin mult_reg := mult1; prod_reg (63 downto 0) := to_ stdlogicvector(X ) & mult2; for index in 1 to 32 loop if prod_reg(0) = 1 then prod_reg(63 downto 32) := prod_reg(63 downto 32) + mult_reg(31 downto 0); end if; prod_reg(63 downto 0) := 0 & prod_reg (63 downto 1); end loop; prod <= prod_reg after delai_module; end process mult_proc; end comp_mult;

30 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Communication entre processus Les signaux sont globaux: il est possible à un processus daccéder (lire et/ou écrire) un signal dun autre processus La communication entre processus se fait donc à laide de signaux Note: on parle ici de processus qui font partie dune même architecture… Exemple: additionneur 1-bit

31 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Exemple de communication entre processus: additionneur 1-bit Demi-additionneur HA1 Demi-additionneur HA2 Somme C_out In1 In2 C_in Demi-additionneur s1 s3 s2 OR1

32 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Exemple de communication entre processus: additionneur 1-bit library IEEE; use IEEE.std_logic_1164.all; entity add_1_bit is port(In1, In2, C_in: in std_logic; Somme, C_out: out std_logic); end add_1_bit; architecture comp_add of add_1_bit is signal s1, s2, s3: std_logic; constant delai: Time:= 5 ns; begin HA1: process(In1, In2) begin s1 <= (In1 xor In2) after delai; s3 <= (In1 and In2) after delai; end process HA1; HA2: process(s1, C_in) begin Somme <= (s1 xor C_in) after delai; s2 <= (s1 and C_in) after delai; end process HA2; OR1: process(s2, s3) begin C_out <= (s2 or s3) after delai; end process OR1; end comp_add;

33 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Linstruction « wait » Il est possible de définir un « process » sans liste de dépendance. Chaque « process » est toujours exécuté au moins une fois, au début En ajoutant des énoncés « wait », il devient possible dindiquer que le « process » sera réveillé à un certain endroit, selon une certaine condition: wait for time wait on signal wait until condition

34 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Les attributs dans VHDL Il existe un certain nombre dattributs avec le VHDL, qui permettent dutiliser de linformation sur létat des signaux ou sur leur définition: Varevent: Changement sur Var Varactive: Assignation sur Var (peut être la même valeur Varlast_event: Retourne le temps depuis le dernier événement Varlast_value: Retourne la valeur précédente de Var

35 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Exemple de wait et dattributs: flip-flop library IEEE; use IEEE.std_logic_1164.all; entity dff is port(D, Clk: in std_logic; Q, QN: out std_logic); end dff; architecture comp_dff of dff is constant delai: Time:= 5 ns; begin One_ff: process begin wait until (Clkevent and Clk = 1); Q <= D after delai; QN <= not D after delai; end process One_ff; end comp_dff;

36 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Exemple de wait et dattributs: flip-flop asynchrone library IEEE; use IEEE.std_logic_1164.all; entity async_dff is port(D, Clk, S, R: in std_logic; Q, QN: out std_logic); end async_dff; architecture comp_adff of async_dff is constant delai: Time:= 5 ns; begin One_aff: process(R, S, Clk) begin if (R = 1) then Q <= 0 after delai; QN <= 1 after delai; elsif (S = 1) then Q <= 1 after delai; QN <= 0 after delai; elsif (Clkevent and Clk = 1) then Q <= D after delai; QN <= not D after delai; end if; end process One_aff; end comp_adff;

37 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Exemple de registre library IEEE; use IEEE.std_logic_1164.all; entity registre is port(D: in std_logic_vector (31 downto 0); Cl, enable, Clk : in std_logic; Q : out std_logic_vector (31 downto 0)); end registre; architecture comp_reg of registre is constant delai: Time:= 5 ns; begin Reg_proc: process(Cl, Clk) begin if (Cl = 1) then Q <= X after delai; elsif (Clkevent and Clk = 1) then if (enable = 1) then Q <= D after delai; end if; end process Reg_proc; end comp_reg;

38 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Génération dune horloge À laide du VHDL, il est facile de générer un signal dhorloge périodique: library IEEE; use IEEE.std_logic_1164.all; entity horloge is port(Clk : out std_logic); end horloge; architeture comp_horloge of horloge is begin proc_horloge: process Clk <= 0, 1 after 5 ns; wait for 10 ns; end process proc_horloge; end comp_horloge;

39 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Les process: ils peuvent ne pas faire ce que vous pensez… library IEEE; use IEEE.std_logic_1164.all; entity circuit is port(a, b: in std_logic; z: out std_logic); end circuit; architecture circ of circuit is signal s1, s2, s3, s4: std_logic; begin process(a, b) begin s1 <= not a; s2 <= not b; s3 <= not ( s1 and b); s4 <= not (s2 and a); z <= not (s3 and s4); end process; end circ; a b z s2 s1 s3 s4 library IEEE; use IEEE.std_logic_1164.all; entity circuit is port(a, b: in std_logic; z: out std_logic); end circuit; architecture circ of circuit is signal s1, s2, s3, s4: std_logic; begin s1 <= not a; s2 <= not b; s3 <= not ( s1 and b); s4 <= not (s2 and a); z <= not (s3 and s4); end circ;

40 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Les process: ils peuvent ne pas faire ce que vous pensez… a b z s2 s1 s3 s4 s1 s2 b a s3 z Temps (ns) s4 s1 s2 b a s3 z Temps (ns) s4

41 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Représentation hiérarchique On peut utiliser VHDL de façon hiérarchique et ainsi simplifier la description dune machine complexe.

42 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Exemple de représentation hiérarchique: un additionneur: portes XOR et AND library IEEE; use IEEE.std_logic_1164.all; entity one_xor is port(In1, In2 : in std_logic; Z: out std_logic); end one_xor; architecture comp_xor of one_xor is constant delai: Time:= 5 ns; begin z <= (In1 xor In2) after delai; end comp_xor; library IEEE; use IEEE.std_logic_1164.all; entity one_and is port(In1, In2 : in std_logic; Z: out std_logic); end one_and; architecture comp_and of one_and is constant delai: Time:= 5 ns; begin z <= (In1 and In2) after delai; end comp_and;

43 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Exemple de représentation hiérarchique: un additionneur: porte OU library IEEE; use IEEE.std_logic_1164.all; entity one_or is port(In1, In2 : in std_logic; Z: out std_logic); end one_or; architecture comp_or of one_or is constant delai: Time:= 5 ns; begin z <= (In1 or In2) after delai; end comp_or;

44 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Exemple de représentation hiérarchique: un additionneur: demi-additionneur library IEEE; use IEEE.std_logic_1164.all; entity one_half_adder is port(In1, In2 : in std_logic; sum, c_out: out std_logic); end one_half_adder; architecture comp_ha of one_half_adder is component xor_gate port (In_1, In2: in std_logic; z: out std_logic); end component; component and_gate port (In_1, In2: in std_logic; z: out std_logic); end component; for XOR1: xor_gate use entity work.one_xor(comp_xor); for AND1: and_gate use entity work.one_and(comp_and); begin XOR1:xor_gate port map(In1, In2, sum); AND1:and_gate port map(In1, In2, c_out); end comp_ha;

45 © 2001 Frédéric MailhotUniversité de Sherbrooke Le VHDL Exemple de représentation hiérarchique: un additionneur: lensemble library IEEE; use IEEE.std_logic_1164.all; entity one_adder is port(In1, In2, C_in : in std_logic; sum, c_out: out std_logic); end one_adder; architecture comp_add of one_adder is component half_addr port (In_1, In2: in std_logic; sum, c_out: out std_logic); end component; component or_gate port (In_1, In2: in std_logic; z: out std_logic); end component; for HA1: half_addr use entity work.one_half_adder(comp_ha); for HA2: half_addr use entity work.one_half_adder(comp_ha); for OR1: or_gate use entity work.one_or(comp_or); signal s1, s2, s3: std_logic; begin HA1:half_addr port map(In1, In2, s1, s3); HA2:half_addr port map(s1, C_in, sum, s2); OR1:or_gate port map(s2, s3, c_out); end comp_add;


Télécharger ppt "Gei 431 Architecture des ordinateurs II – Frédéric Mailhot Le VHDL De nos jours, les circuits numériques de haute performance sont habituellement créés."

Présentations similaires


Annonces Google