Diapositivas Tema 3 (2013)

Apunte Español
Universidad Universidad Politécnica de Cataluña (UPC)
Grado Ingeniería de Sistemas de Telecomunicación - 2º curso
Asignatura Diseño Digital
Año del apunte 2013
Páginas 23
Fecha de subida 12/11/2014
Descargas 0
Subido por

Vista previa del texto

Disseny Digital 3.1 Elements fonamentals del VHDL T3 - 3 Què és un HDL? Disseny de sistemes digitals Necessitats Descripció d’alt nivell El que hem fet fins ara s'anomena descripció i síntesi lògica.
Sistema X Z Z = F (X) amb X  I , Z  O Calen eines per ...
Codificar Descripció de baix nivell Ho hem fet a mà, però en la pràctica es fa amb eines CAD.
xi n Sistema m comprovar si el disseny funciona correctament.
zi zi = fi (xn-1, , x0) amb 0  i  m-1 convertir aquests dissenys abstractes en circuits electrònics.
Optimitzar Descripció lògica optimitzada Disseny Digital x3 x2 x1 x0 z1 z0 Correcte? Tecnologia 3.1 Elements fonamentals del VHDL Què és un HDL? Disseny de sistemes digitals Necessitats Etapa independent de la tecnologia Etapes dependents de la tecnologia Descripció Disseny lògic / funcional Síntesi Lògica Disseny físic Simulació funcional Fabricació i test de prototipus Síntesi Física Fabricació i test del producte final Simulació elèctrica T3 - 4 Disseny Digital 3.1 Elements fonamentals del VHDL T3 - 5 Què és un HDL? Característiques generals Un llenguatge de descripció de maquinari (HDL) és una eina per descriure amb text circuits i sistemes electrònics HDLs més utilitzats en disseny digital: Estàndards: VHDL, Verilog.
Específics: ABEL, AHDL.
Un HDL té associat sempre un programari que permet simular el sistema descrit.
Usos més comuns d'un HDL: Simulació funcional.
Síntesi automàtica.
Disseny Digital 3.1 Elements fonamentals del VHDL T3 - 6 Què és un HDL? Característiques generals HDL per simulació funcional Descripció Síntesi Lògica Simulació funcional Tecnologia HDL per síntesi automàtica Fase abstracta del disseny: disseny funcional / lògic.
El simulador permet avaluar si la funcionalitat del sistema és l'esperada.
Es poden utilitzar tots els recursos del llenguatge.
Independent de la tecnologia.
+ Permet fer alhora el disseny lògic i el físic.
Descripció Síntesi lògica & física Simulació funcional & física L'eina de síntesi implementa el sistema amb components de la tecnologia triada.
El simulador permet avaluar tant la funcionalitat com prestacions (mida, retards, consums, ...) del sistema.
No es poden utilitzar tots els recursos del llenguatge.
Disseny Digital 3.1 Elements fonamentals del VHDL T3 - 7 Què és un HDL? Trets bàsics del VHDL VHDL vé de VHSIC Hardware Description Language. El VHSIC (Very High Speed Integrated Circuits) era un projecte del departament de defensa dels EUA de principis dels anys 80.
Estandarditzat per l'IEEE des del 1987 i integrat en totes les eines software modernes de disseny digital.
Eina potent, però molt rigorosa i exigent des del punt de vista formal.
Descriu sistemes digitals, per tant no és un llenguatge de programació, és a dir, no és una sèrie d'instruccions que s'executen una darrera l'altra.
Ens centrarem en VHDL per síntesi automàtica.
Disseny Digital 3.1 Elements fonamentals del VHDL T3 - 8 Tipus de dades, objectes i operadors Introducció Un sistema digital treballa amb dades codificades.
El VHDL treballa amb dades, que pertanyen a un tipus i que es poden manipular mitjançant els operadors associats a aquest tipus.
Les dades se suporten mitjançant objectes, per exemple senyals i constants.
Tots els objectes s'han de declarar abans d'utilitzar-los: cal especificar-ne almenys el nom i el tipus.
El VHDL té uns quants tipus estàndard, definits en paquets i llibreries, que també s'han de declarar abans d'utilitzar-los.
Disseny Digital T3 - 9 3.1 Elements fonamentals del VHDL Tipus de dades, objectes i operadors Alguns tipus estàndard Tipus enumerats Els valors pertanyen a una determinada llista o conjunt.
Els més comuns són: Boolean (llibreria std). Valors: false, true.
Bit (llibreria std). Valors: '0', '1'.
Std_logic (llibreria ieee). Valors: 'X' '0' '1' 'Z' '-' ------ Unknown (strong) Logic '0' (strong) Logic '1' (strong) High impedance Don’t care Disseny Digital 'W' 'L' 'H' 'U' ----- Unknown (weak) Logic '0' (weak) Logic '1' (weak) Not initialized 3.1 Elements fonamentals del VHDL T3 - 10 Tipus de dades, objectes i operadors Alguns tipus estàndard Tipus numèrics Els més comuns (llibreria std) són: natural, integer, real, ...
El tipus integer correspon a un codi Ca2 de 32 bits. Podem reduir-ne la mida utilitzant subrangs. Exemple: integer range 0 to 15 correspon a un codi binari de 4 bits.
Tipus vectorials Conjunts n-dimensionals d'elements del mateix tipus.
Els més comuns són: bit_vector (llibreria std) std_logic_vector (llibreria ieee).
Disseny Digital T3 - 11 3.1 Elements fonamentals del VHDL Tipus de dades, objectes i operadors Objectes més comuns Constants El seu valor no es pot modificar.
constant identifier : typeid := expression; Senyals sintaxi Modelen el comportament dels senyals transmesos en circuits, permetent veure efectes com el transcurs del temps o els retards.
signal identifier : typeid ; sintaxi Exemples constant n: integer := 8; constant p: integer := n/2; -- value is 4 constant vdd: std_logic := '1'; constant xx: std_logic_vector(7 downto 0) := "01010101"; constant yy: std_logic_vector(7 downto 0) := X"55"; -- same as xx signal my_bus : std_logic_vector(7 downto 0); signal n,m : integer range 0 to 15; Disseny Digital 3.1 Elements fonamentals del VHDL Tipus de dades, objectes i operadors Operadors més comuns Assignació. Assigna el valor d'una expressió a un objecte.
:= per constants <= per senyals Comparació. El resultat es booleà (true o false): = > < -- Equal to -- More than -- Less than /= >= <= -- Not equal to -- Equal to or more than -- Equal to or less than Concatenació (&). Fa encadenaments.
Exemples signal X : std_logic_vector(1 downto 0); signal Y,Z : std_logic_vector(3 downto 0); Y Z X Z <= X & <= '1' & "10" <= '1' "10"; -- OK, Y=[X(1),X(0),'1','0'] & Y(3 downto 1); -- OK, Z=['1',Y(3),Y(2),Y(1)] <= Y; -- wrong use of & & Y; -- wrong: types mismatch T3 - 12 Disseny Digital 3.1 Elements fonamentals del VHDL T3 - 13 Tipus de dades, objectes i operadors Operadors més comuns Lògics. Són les funcions or, nor, and, nand, xor, i not.
Quan s'apliquen a vectors, operen element a element.
La prioritat de les operacions lògiques de més d'una entrada va d'esquerra a dreta.
Exemples signal x,y,w,z : std_logic; signal zout,yin,xin : std_logic_vector(3 downto 0); z <= x and y; zout <= not (xin nor yin); zout <= xin(1 downto 0) and yin(3 downto 2); -- wrong type widths z <= x nor y nor w; -- this is not a 3 input nor z <= x nor (y nor w); -- not a 3 input nor, but different than previous z <= not (x or y or w); -- 3 input nor Disseny Digital 3.1 Elements fonamentals del VHDL T3 - 14 Tipus de dades, objectes i operadors Operadors més comuns Aritmètics. Només poden utilitzar-se amb tipus numèrics. Els més comuns són: + * / ----- Sign change Addition Multiplication Division mod rem ** abs ----- Module Remainder of integer division Exponentiation Absolute value Els tipus std_logic i std_logic_vector no són numèrics, però s'hi poden fer operacions aritmètiques utilitzant la llibreria ieee, el paquet std_logic_1164 i el paquet ...
std_logic_unsigned, per operacions sense signe (en binari).
std_logic_signed, per operacions amb signe (en Ca2).
Disseny Digital T3 - 15 3.1 Elements fonamentals del VHDL Descripcions en VHDL Entitats, arquitectures i llibreries Un sistema o subsistema descrit en VHDL s'anomena entitat.
Una entitat està formada per una declaració d'entitat i, com a mínim, una descripció d'arquitectura.
Package 1 Design Entity Architecture Body Entity Declaration I/O Declaration Package n Declaration Ports (senyals) i paràmetres que fan d'interfície entre l'entitat i la resta del món.
Sentències que descriuen el comportament i/o l'estructura de l'entitat Disseny Digital Body Body Components, tipus i/o operacions externes, que poden ser utilitzades per més d'una entitat 3.1 Elements fonamentals del VHDL T3 - 16 Descripcions en VHDL Entitats, arquitectures i llibreries Exemple Descripció VHDL d'un sumador total (I) a b Cin Cout s 0 0 0 0 1 1 1 1 a 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 0 0 1 0 1 1 1 0 1 1 0 1 0 0 1 library ieee; use ieee.std_logic_1164.all; s  a  b  Cin  (a  b)  Cin Cout  ab  Cin(a  b) p s g b Cin Cout entity adder is port (a,b,Cin : in std_logic; s, Cout : out std_logic); end adder; architecture gates of adder is signal p,g : std_logic; begin p <= a xor b; Cout <= g or (p and Cin); s <= p xor Cin; g <= a and b; end gates; Disseny Digital 3.1 Elements fonamentals del VHDL T3 - 17 Descripcions en VHDL Entitats, arquitectures i llibreries Exemple Descripció VHDL d'un sumador total (II) library ieee; use ieee.std_logic_1164.all; entity adder is port (a,b,Cin : in std_logic; s, Cout : out std_logic); end adder; architecture gates of adder is signal p,g : std_logic; begin p <= a xor b; Cout <= g or (p and Cin); s <= p xor Cin; g <= a and b; end gates; Disseny Digital Declaració de la llibreria i el paquet que conté el tipus std_logic i els seus operadors bàsics.
Declaració d'entitat: entrades i sortides del mòdul, totes del tipus std_logic Descripció d'arquitectura feta amb assignacions concurrents.
Utilitza dos senyals interns.
L'ordre de les assignacions és irrellevant.
3.1 Elements fonamentals del VHDL Descripcions en VHDL Entitats, arquitectures i llibreries Declaració d'entitat: sintaxi entity identifier is [generic(generic_constants);] {port({inportname: in typein;} {outportname: out typeout;} {ioportname: inout typeio;});} end [entity] [identifier]; Els ports són implícitament senyals.
Tres tipus de ports: in (entrada): només s‘hi poden llegir valors.
out (sortida): només s'hi poden escriure valors.
inout (bidireccional): s'hi pot llegir i escriure.
T3 - 18 Disseny Digital 3.1 Elements fonamentals del VHDL T3 - 19 Descripcions en VHDL Entitats, arquitectures i llibreries Descripció d'arquitectura: architecture identifier of entity_name is [declaration_of_types] [declaration_of_constants_and_signals] [declaration_of_components] begin concurrent_statements end [architecture] [identifier]; sintaxi Primer es declaren els tipus, objectes i components que s’utilitzaran.
La secció concurrent_statements conté la descripció de l’estructura o del comportament de l’entitat.
Les sentències que hi ha dins l’arquitectura són concurrents (s’executen totes alhora), per tant el seu ordre és irrellevant.
Disseny Digital 3.1 Elements fonamentals del VHDL Descripcions en VHDL Entitats, arquitectures i llibreries Declaració de llibreries i paquets: sintaxi library library_name; use library_name.package_name.item; Els paquets s'agrupen en llibreries.
item indica quin element del paquet es vol utilitzar. Escrivint all, poden utilitzar-se tots.
En VHDL només hi ha una llibreria, anomenada std, que no cal declarar per utilitzar-la.
T3 - 20 Disseny Digital 3.1 Elements fonamentals del VHDL T3 - 21 Descripcions en VHDL Entitats, arquitectures i llibreries Llibreries i paquets estàndard més utilitzats en VHDL: llibreria paquets contingut standard Basic VHDL types (boolean, bit, bit_vector, character, string, integer, real, time, ...) plus associated operators.
textio Types such as line and text, conversion functions and procedures to read and write text files.
std_logic_1164 std_logic and std_logic_vector types plus basic associated operators.
std_logic_arith Signed and unsigned types plus associated arithmetic operators.
std_logic_signed Signed artihmetic operations, conversion functions and comparison operators for std_logic_vector type .
std_logic_unsigned Unsigned artihmetic operations, conversion functions and comparison operators for std_logic_vector type .
std_logic_textio Data types, conversion functions and procedures to read & write files for types std_logic and std_logic_vector.
std ieee Disseny Digital Índex • 3.1 Elements fonamentals del VHDL • Què és un HDL? • Tipus de dades, objectes i operadors • Descripcions en VHDL • 3.2 Descripcions de comportament • Assignació concurrent de senyals • Sentències d'assignació • Processos • 3.3 Descripcions d’estructura • Declaració i instanciació de components • Iteració de components T3 - 22 Disseny Digital T3 - 23 3.2 Descripcions de comportament Assignació concurrent de senyals Introducció Podem descriure el moviment de les dades dins d’una entitat mitjançant assignacions concurrents a senyals.
Una assignació concurrent s’executa cada cop que canvia el valor de qualsevol dels senyals que hi ha en la seva expressió.
a m x F(m,n) b s n G(s,t) z t c x <= F(a,b); z <= G(x,c); Tipus d’assignacions concurrents: incondicional, condicional i amb selecció. Les veurem a continuació.
Disseny Digital T3 - 24 3.2 Descripcions de comportament Sentències d'assignació Assignació incondicional Quan canvia de valor algun objecte inclòs en l’expressió, s’avalua el nou valor de l’expressió i s’aplica al senyal.
Exemple signal_identifier <= expression; sintaxi library ieee; use ieee.std_logic_1164.all; entity pse is port (a,b,c : in std_logic; y : out std_logic_vector(1 downto 0)); end pse; architecture arc of pse is begin y(1) <= a and (b or c); y(0) <= b xor c; end arc; a y[1] b y[0] y[1:0] c La primera assignació s’executa cada cop que canvia el valor d’una entrada (a, b o c). La segona només quan ho fan b o c.
Disseny Digital T3 - 25 3.2 Descripcions de comportament Sentències d'assignació Assignació condicional Quan canvia el valor d’algun senyal a la dreta de ‘<=‘, s’aplica el valor de l'expressió corresponent a la 1a condició que sigui certa.
Exemple sintaxi signal_identifier <= {expression_i when condition_i else} expression_N [when condition_N]; library ieee; use ieee.std_logic_1164.all; entity ccomb is port (x,y : in std_logic; sel : in std_logic_vector(1 downto 0); z : out std_logic ); end ccomb ; x architecture arc1 of ccomb is begin z <= x when sel = "01" else y when sel(1) = '0' else x and y; end arc1; Disseny Digital No cal que les condicions siguin excloents.
y z sel[1:0] sel[1] sel[0] T3 - 26 3.2 Descripcions de comportament Sentències d'assignació Assignació amb selecció Quan canvia el valor d’algun senyal, s’aplica el valor de la expressió corresponent a la tria que sigui certa.
Exemple sintaxi with expression select signal_identifier <= {expression_i when choice_i,} expression_N when choice_N; library ieee; use ieee.std_logic_1164.all; entity ccomb is port (x,y : in std_logic; sel : in std_logic_vector(1 downto 0); z : out std_logic ); end ccomb ; x architecture arc2 of ccomb is begin with sel select z <= x when "00", y when "01", x and y when others; end arc2; y Les opcions han de ser excloents.
00 01 10 11 sel[1:0] Mux z Disseny Digital T3 - 27 3.2 Descripcions de comportament Sentències d'assignació Exemples Exemple a[7:0] b[7:0] library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_signed.all;   0 1 Mux 2 3 y[7:0] sel[1:0] entity mini_ALU is port (a,b : in std_logic_vector(7 downto 0); sel : in integer range 0 to 3; y : out std_logic_vector(7 downto 0)); end mini_ALU; architecture arc1 of mini_ALU is begin y <= a+b when sel=0 else a-b when sel=1 else a when sel=2 else b; end arc1; Disseny Digital architecture arc2 begin with sel select y <= a+b when a-b when a when b when end arc2; of mini_ALU is 0, 1, 2, others; 3.2 Descripcions de comportament Processos Introducció Design Entity I/O Entity Declaration Architecture Body A més d'assignacions concurrents, les descripcions d'arquitectura poden contenir processos.
Els processos es comuniquen amb la resta de l'arquitectura mitjançant senyals.
Els processos permeten descriure comportaments seqüencials.
T3 - 28 Disseny Digital T3 - 29 3.2 Descripcions de comportament Processos Concepte i sintaxi [label:] process [(sensitivity_list)] [is] [declarative_section] begin sequence_of_statements end process; sintaxi Quan hi ha un event (canvi de valor) en algun senyal inclòs a sensitivity_list, s'executen les sentències en l'ordre en que apareixen.
Quan s'han executat totes les sentències, el procés s'atura i resta a l'espera d'un nou event.
Els objectes declarats a declarative_section només són visibles dins del procés.
Disseny Digital T3 - 30 3.2 Descripcions de comportament Processos Concepte i sintaxi Exemple library ieee; use ieee.std_logic_1164.all; Descripció d'un MUX 2:1 feta amb una assignació concurrent.
entity mux_2 is port (xa,xb,sel : in std_logic; y : out std_logic); end mux_2; xa architecture arc1 of mux_2 is begin y <= (xa and (not sel)) or (xb and sel); end arc1; 0 Mux xb 1 y sel architecture arc2 of mux_2 is begin process (xa,xb,sel) begin y <= (xa and (not sel)) or (xb and sel); end process; end arc2; Descripció equivalent feta amb un procés i una assignació seqüencial.
Disseny Digital T3 - 31 3.2 Descripcions de comportament Processos Sentències seqüencials: assignació signal_identifier <= expression; sintaxi Els senyals permeten intercanviar informació entre els processos i la resta de l'arquitectura.
Els senyals s'actualitzen quan finalitza l'execució del procés.
Exemple A, B, C i D són senyals declarats fora d'un procés, que conté la sèrie d'assignacions següent: A <= B+C; D <= A+C; A <= C+D; En un cert moment, A=0, B=1, C=2, D=3 i s'executa el procés una vegada. Quan l'execució finalitzi, els valors dels senyals seran: A=5, B=1, C=2, D=2 Disseny Digital T3 - 32 3.2 Descripcions de comportament Processos Sentències seqüencials: assignació Exemple Descripció d'un sumador total.
library ieee; use ieee.std_logic_1164.all; entity adder is port(a,b,Cin : in std_logic; s, Cout : out std_logic); end adder; architecture arq1 of adder is signal p,g : std_logic; begin process (a,b,Cin) begin p <= a xor b; Cout <= g or (p and Cin); s <= p xor Cin; g <= a and b; end process; end arq1; incorrecta a b Cin  Cout s architecture arq2 of adder is signal p,g : std_logic; begin process (a,b,Cin,p,g) begin p <= a xor b; Cout <= g or (p and Cin); s <= p xor Cin; g <= a and b; end process; end arq2; correcta Disseny Digital 3.2 Descripcions de comportament T3 - 33 Processos Sentències seqüencials: if i case if condition then sequence_of_statements {elsif condition then sequence_of_statements} [else sequence_of_statements] end if; sintaxi S'executa la sequence_of_statements corresponent a la primera condició que sigui certa.
No cal que les condicions siguin excloents.
L'opció else s'executa quan cap condició anterior és certa.
Disseny Digital 3.2 Descripcions de comportament Processos Sentències seqüencials: if i case sintaxi case expression is when choices => sequence_of_statements {when choices => sequence_of_statements} [when others => sequence_of_statements] end case; S'executa la sequence_of_statements corresponent al valor de expression.
expression ha de ser de tipus enumerat o un vector.
L'opció others s'executa pels valors de expression no indicats.
T3 - 34 Disseny Digital 3.2 Descripcions de comportament T3 - 35 Processos Sentències seqüencials: if i case Exemple Circuit combinacional que detecta els múltiples de 3 entre 0 i 15 (I).
Descripcions fetes amb assignacions concurrents library ieee; use ieee.std_logic_1164.all; entity three_det is port( num : in integer range 0 to 15; y : out std_logic ); end three_det; architecture a of three_det is begin y <= '1' when (num=0 or num=3 or num=6 or num=9 or num=12 or num=15) else '0'; end a; Disseny Digital num correspon a un codi binari de 4 bits.
architecture b of three_det is begin with num select y <= '1' when 0|3|6|9|12|15, '0' when others; end b; 3.2 Descripcions de comportament T3 - 36 Processos Sentències seqüencials: if i case Exemple Circuit combinacional que detecta els múltiples de 3 entre 0 i 15 (II).
Descripcions fetes amb processos library ieee; use ieee.std_logic_1164.all; entity three_det is port( num : in integer range 0 to 15; y : out std_logic ); end three_det; architecture c of three_det is begin process(num) begin if (num=0 or num=3 or num=6 or num=9 or num=12 or num=15) then y <= '1'; else y <= '0'; end if; end process; end c; architecture d of three_det is begin process(num) begin case num is when 0|3|6|9|12|15 => y <= '1'; when others => y <= '0'; end case; end process; end d; Disseny Digital Índex T3 - 37 • 3.1 Elements fonamentals del VHDL • Què és un HDL? • Tipus de dades, objectes i operadors • Descripcions en VHDL • 3.2 Descripcions de comportament • Assignació concurrent de senyals • Sentències d'assignació • Processos • 3.3 Descripcions d’estructura • Declaració i instanciació de components • Iteració de components Disseny Digital 3.3 Descripcions d'estructura T3 - 38 Declaració i instanciació de components Introducció Descripcions d'estructura = interconnexions de mòduls o components.
Els components poden ser agafats de llibreries o altres entitats del mateix disseny.
Top-level design Entity Component 1 Component L Component 2 Design Entity Design Entity Concurrent Statements Entity Declaration Design Entity Top-level Architecture Body Les connexions es fan sempre amb senyals.
Per utilitzar un component, cal primer declarar-lo i després instanciar-lo tantes vegades com calgui.
Disseny Digital T3 - 39 3.3 Descripcions d'estructura Declaració i instanciació de components Exemple 1 (I) Exemple Descripció VHDL d'un multiplexor per a 2 vectors de 4 bits fet amb buffers tri-estat (I).
library ieee; use ieee.std_logic_1164.all; Comencem descrivint el buffer tri-estat, que utilitzarem com a component per fer després el MUX.
entity tribuff is port( x : in std_logic_vector(3 downto 0); en : in std_logic; y : out std_logic_vector(3 downto 0) ); end entity tribuff; architecture arq of tribuff is begin y <= x when en = '1' else "ZZZZ"; end arq; x[3:0] y[3:0] en Disseny Digital 3.3 Descripcions d'estructura T3 - 40 Declaració i instanciació de components Exemple 1 (II) Exemple Descripció VHDL d'un multiplexor 2:1 per a vectors de 4 bits fet amb buffers tri-estat (II).
library ieee; use ieee.std_logic_1164.all; entity mux_2 is port (x0,x1 : in std_logic_vector(3 downto 0); sel : in std_logic; y : out std_logic_vector(3 downto 0)); end entity mux_2; x0[3:0] y[3:0] x1[3:0] sel architecture arq of mux_2 is component tribuff port(x : in std_logic_vector(3 downto 0); en : in std_logic; y : out std_logic_vector(3 downto 0)); end component; signal nosel : std_logic; begin nosel <= not sel; ch0: tribuff port map(x => x0, en => nosel, y => y); ch1: tribuff port map(x => x1, en => sel, y => y); end arq; Declaració del component.
Dues instanciacions del component Disseny Digital T3 - 41 3.3 Descripcions d'estructura Declaració i instanciació de components Declaració d'un component Declaració d'un component: component identifier [is] {port(ports_definition);} end component [identifier]; sintaxi Es fa en la part de declaracions de l'arquitectura.
El component ha de formar part d'una llibreria prèviament declarada, o ha de ser una entitat del disseny que s'està descrivint.
ports_definition és idèntica a la declaració de ports d'una entitat: diu el nom, mode i tipus de cada port del component.
Disseny Digital T3 - 42 3.3 Descripcions d'estructura Declaració i instanciació de components Instanciació d'un component Instanciació d'un component: label: comp_name [port map (association_list)]; sintaxi Defineix un component individual i connecta els seus ports a senyals de l'entitat que s'està descrivint.
label és el nom del component individual.
comp_name és l'identificador utilitzat en la declaració del component.
association_list assigna un a un els ports del component amb senyals de l'entitat que s'està descrivint.
Disseny Digital T3 - 43 3.3 Descripcions d'estructura Declaració i instanciació de components Exemple 2 (I) Exemple Descripció VHDL d'un sumador de 16 bits fet encadenant quatre sumadors de 4 bits A[3:0] B[3:0] library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;  Cin entity qadd is port (A,B : in std_logic_vector(3 downto 0); Cin : in std_logic; S : out std_logic_vector(3 downto 0); Cout : out std_logic); end qadd; architecture a of qadd is signal Res : std_logic_vector(4 downto 0); begin Res <= ('0'&A) + ('0'&B) + Cin; S <= Res(3 downto 0); Cout <= Res(4); end a; Disseny Digital Cout S[3:0] Descripció del sumador de 4 bits que utilitzarem com a component per fer el de 16 bits.
T3 - 44 3.3 Descripcions d'estructura Declaració i instanciació de components Exemple 2 (II) A[15:12] B[15:12] A[3:0] B[3:0] Cin  Cout A[3:0] B[3:0] Cin  A[3:0] B[3:0] Cin  A[3:0] B[3:0] Cin  S[3:0] CCout S[15:12] C[3] A[15:0] Esquema i descripció VHDL de l'encadenament: B[15:0] CCin A[11:8] B[11:8] C[2] A[7:4] B[7:4] C[1] library ieee; use ieee.std_logic_1164.all; A[3:0] B[3:0] CCin Cout S[3:0] S[11:8] CCout S[15:0] Cout S[3:0] S[7:4] Cout S[3:0] S[3:0] entity add is port (A,B : in std_logic_vector(15 downto 0); Cin : in std_logic; S : out std_logic_vector(15 downto 0); Cout : out std_logic); end add; architecture arq of add is signal C : std_logic_vector(3 downto 1); component qadd is port( A,B : in std_logic_vector(3 downto 0); Cin : in std_logic; S : out std_logic_vector(3 downto 0); Cout : out std_logic ); end component; begin sum3: qadd port map( A(15 downto 12), B(15 downto 12), C(3), S(15 downto 12), Cout ); sum2: qadd port map( A(11 downto 8), B(11 downto 8), C(2), S(11 downto 8), C(3) ); sum1: qadd port map( A(7 downto 4), B(7 downto 4), C(1), S(7 downto 4), C(2) ); sum0: qadd port map( A(3 downto 0), B(3 downto 0), Cin, S(3 downto 0), C(1) ); end arq; Disseny Digital T3 - 45 3.3 Descripcions d'estructura Iteració de components Introducció Les sentències generate permeten iterar assignacions concurrents o instanciacions de components.
Quan es compila el codi VHDL, les sentències generate s'expandeixen en sentències individuals.
Considerem dues variants: label: for identifier in discrete_range generate [block declarations begin] concurrent_statements end generate; sintaxi label: if expression generate [block declarations begin] concurrent_statements end generate; sintaxi Disseny Digital T3 - 46 3.3 Descripcions d'estructura Iteració de components Exemple 1 Exemple Descripció d'un sumador de 8 bits.
library ieee; use ieee.std_logic_1164.all; S  A B  C i i i i i entity qqadd is C  A B  C ( A port(A,B : in std_logic_vector(7 downto 0); i 1 i i i i Cin : in std_logic; S : out std_logic_vector(7 downto 0); Cout : out std_logic); end qqadd; A[7:0] architecture arq of qqadd is B[7:0] signal c : std_logic_vector(8 downto 0); Cin begin suma: for i in 0 to 7 generate S(i) <= A(i) xor B(i) xor c(i); c(i+1) <= (A(i) and B(i)) or (c(i) and (A(i) xor B(i))); end generate; Cout <= c(8); c(0) <= Cin; end arq;   Bi ) Cout S[7:0] Disseny Digital 3.3 Descripcions d'estructura T3 - 47 Iteració de components Exemple 2 library ieee; use ieee.std_logic_1164.all; entity nadd is generic(n : integer := 8); port(A,B : in std_logic_vector(n-1 downto 0); Cin : in std_logic; S : out std_logic_vector(n-1 downto 0); Cout : out std_logic); end nadd; architecture arq of nadd is A[n-1:0] signal c : std_logic_vector(n-1 downto 1); B[n-1:0] begin sum: for i in 0 to n-1 generate Cin first: if i=0 generate S(i) <= A(i) xor B(i) xor Cin; c(i+1) <= (A(i) and B(i)) or (Cin and (A(i) xor B(i))); end generate; mid_i: if i>0 and i<n-1 generate S(i) <= A(i) xor B(i) xor c(i); c(i+1) <= (A(i) and B(i)) or (c(i) and (A(i) xor B(i))); end generate; last: if i=n-1 generate S(i) <= A(i) xor B(i) xor c(i); Cout <= (A(i) and B(i)) or (c(i) and (A(i) xor B(i))); end generate; end generate; end arq;  Cout S[n-1:0] ...