You are on page 1of 31

Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.

1
Componentes e esquemas de iterao
Tpicos
Componentes
Definio de genricos
Comando GENERATE
- esquema de gerao FOR
- esquema de gerao IF
Comando LOOP
- esquema de interao FOR
- esquema de iterao WHILE
- comandos: NEXT EXIT
- laos infinitos
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.2
Componentes
Componente:
- uma descrio (entidade + arquitetura) empregada por uma outra entidade
Emprego:
- interligao de mltiplas entidades de projeto
- projeto hierrquico
Declarao de um componente (primeiro passo para utilizao de um componente)
- similar a declarao de entidade
- exemplo:
COMPONENT nome_componente
PORT (sinal_a : modo_a tipo_sinal_a;
sinal_b : modo_b tipo_sinal_b;
sinal_c : modo_c tipo_sinal_c);
END COMPONENT;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.3
Componentes
A solicitao de um componente contm:
- rtulo de denominao qualquer ( x1, y2 ... )
- nome do componente ( nome_componente )
- mapa de ligaes ( Port Map (....) )
Mapa de ligaes:
- pode seguir mesma ordem estabelecida na declarao do componente:
x1: nome_componente PORT MAP(a(1), b(1), c(1));
- pode seguir uma nova seqncia definida no mapa:
x2: nome_componente PORT MAP(sinal_b => b(1),sinal_a => a(1),sinal_c => c(1));
x1
sinal_a
sinal_b
sinal_c
a(1)
b(1)
c(1)
x2
sinal_a
sinal_b
sinal_c componente componente
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.4
Componentes
Exemplo: Somador de 4 bits formado por somadores de 1 bit
s(3) s(2) s(1) s(0)
x3
x(3)
b a
ve vs
y(3)
v(3)
x2
x(2)
b a
ve vs
y(2)
v(2)
x1
x(1)
b a
ve vs
y(1)
v(1)
x0
x(0)
b a
ve vs
y(0)
ze zs
s s s s
som_1a
som_2a
Descrio do somador de 1 bit (componente a ser referenciado)
1
2
3
4
5
6
7
8
9
10
11
ENTITY som_1a IS
PORT (a, b, ve : IN BIT;
s, vs : OUT BIT);
END som_1a;
ARCHITECTURE teste OF som_1a IS
BEGIN
s <= a XOR b XOR ve; -- soma
vs <= (a AND b) OR (a AND ve) OR (b AND ve); -- vai um
END teste;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.5
Componentes
Descrio do somador empregando
o componente: somador de 1 bit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ENTITY som_2a IS
PORT ( x, y : IN BIT_VECTOR (3 DOWNTO 0); -- entradas do somador
ze : IN BIT; -- entrada vem um
s : OUT BIT_VECTOR (3 DOWNTO 0); -- soma
zs : OUT BIT ); -- vai um
END som_2a;
ARCHITECTURE estrutural OF som_2a IS
COMPONENT som_1a
PORT (a, b, ve : IN BIT; s, vs : OUT BIT);
END COMPONENT;
SIGNAL v : BIT_VECTOR (3 DOWNTO 1); -- vai um interno
BEGIN
x0: som_1a PORT MAP( x(0), y(0), ze, s(0), v(1));
x1: som_1a PORT MAP( x(1), y(1), v(1), s(1), v(2));
x2: som_1a PORT MAP(b =>y(2), a => x(2), s =>s(2), ve =>v(2), vs =>v(3));
x3: som_1a PORT MAP( x(3), y(3), v(3), s(3), zs);
END estrutural;
s(3) s(2) s(1) s(0)
x3
x(3)
b a
ve vs
y(3)
v(3)
x2
x(2)
b a
ve vs
y(2)
v(2)
x1
x(1)
b a
ve vs
y(1)
v(1)
x0
x(0)
b a
ve vs
y(0)
ze zs
s s s s
som_1a
som_2a
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.6
Definio de genricos
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.7
Definio de genricos
Genricos: fornecem um meio de levar informaes externas estticas para
entidades de projeto e blocos
Informaes:
- caractersticas de desempenho
- parmetros que definem a lei de formao na interligao de componentes.
Exemplos:
- declarao com definio do valor
- declarao sem definio do valor
ENTITY nome_entidade IS
GENERIC(generico_1 :tipo_do_generico_1 := valor_inicial; -- declaracao com valor
generico_2 :tipo_do_generico_2); -- apenas declaracao
PORT (......);
END nome_entidade;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.8
Definio de genricos - exemplo
Registrador: nmero de bits definido pelo genrico n
Aps a declarao, o genrico pode ser empregado
- vide linhas 5 e 6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ENTITY flipn_3 IS
GENERIC(n : INTEGER := 3); -- declaracao e definicao do valor do generico
PORT (ck : IN BIT; -- relogio
rst : IN BIT; -- rst=1 leva q=000 assincrono
d : IN BIT_VECTOR(n-1 DOWNTO 0); -- definido pelo generico
q : OUT BIT_VECTOR(n-1 DOWNTO 0)); -- definido pelo generico
END flipn_3;
ARCHITECTURE teste OF flipn_3 IS
BEGIN
PROCESS (ck, rst)
BEGIN
IF (rst = '1') THEN q <= (OTHERS => '0'); -- q=00...0
ELSIF (ck'EVENT AND ck ='1') THEN q <= d; -- armazena dado
END IF;
END PROCESS;
END teste;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.9
Comando GENERATE
- esquema de gerao FOR
- esquema de gerao IF
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.10
Comando GENERATE
Cpia de comandos concorrentes:
- esquema de gerao FOR
- esquema de gerao IF
Aplicao: gerao automtica
- circuitos regulares
- circuitos que seguem uma lei de formao
- exemplo:
- unidades lgicas aritmticas
- somadores
- multiplicadores
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.11
Comando GENERATE - esquema de gerao FOR
FOR identificador IN limites_da_geracao GENERATE
- Identificador: no necessita ser declarado
- Limites da gerao:
- faixa discreta de valores: ( 0 TO 7 ) ( 23 DOWNTO 0 )
- atributos que retornem faixa de valores: aRANGE bREVERSE_RANGE
abc: FOR indentificador IN valor_inicial TO valor_final GENERATE
-- comando concorrente
END GENERATE abc;
Exemplos:
def: FOR i IN sinal'RANGE GENERATE
-- comando concorrente
END GENERATE def;
ghi: FOR x IN valor_final DOWNTO valor_inicial GENERATE
-- comando concorrente
END GENERATE; -- ultimo rotulo opcional
xyz: FOR k IN sinal'REVERSE_RANGE GENERATE
-- comando concorrente
END GENERATE; -- ultimo rotulo opcional
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.12
Comando GENERATE
Comandos podem ser aninhados:
linha: FOR i IN 0 TO 3 GENERATE
coluna: FOR j IN 0 TO 3 GENERATE
x: componente_abc PORT MAP (entrada_a(i),entrada_b(j),saida(i+1)) ;
END GENERATE coluna;
END GENERATE linha;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.13
Comando GENERATE - esquema de gerao FOR
Exemplo de um somador empregando componente
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ENTITY som_6aa IS
GENERIC(n : INTEGER := 3 ); -- numero de bits
PORT (x, y : IN BIT_VECTOR (n-1 DOWNTO 0); -- entradas do somador
ze : IN BIT; -- vem um
s : OUT BIT_VECTOR (n-1 DOWNTO 0); -- saida
zs : OUT BIT); -- vai um
END som_6aa;
ARCHITECTURE estrutural OF som_6aa IS
COMPONENT som_1a
PORT (a, b, ve : IN BIT; s, vs : OUT BIT);
END COMPONENT;
SIGNAL v : BIT_VECTOR (n DOWNTO 0); -- vai um interno
BEGIN
v(0) <= ze;
zs <= v(n);
abc: FOR i IN 0 TO n-1 GENERATE
centro: som_1a PORT MAP (x(i), y(i), v(i), s(i), v(i+1));
END GENERATE abc;
END estrutural;
s(3) s(2) s(1) s(0)
x3
x(3)
b a
ve vs
y(3)
v(3)
x2
x(2)
b a
ve vs
y(2)
v(2)
x1
x(1)
b a
ve vs
y(1)
v(1)
x0
x(0)
b a
ve vs
y(0)
ze zs
s s s s
som_1a
som_2a
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.14
Comando GENERATE - esquema de gerao FOR
Exemplo de um somador empregando componente
- circuito sintetizado:
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.15
Comando GENERATE -- esquema de gerao FOR
Exemplo de um somador empregando comandos concorrentes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ENTITY som_6c IS
GENERIC(n : INTEGER := 3 ); -- numero de bits
PORT (x, y : IN BIT_VECTOR (n-1 DOWNTO 0); -- entradas do somador
ze : IN BIT; -- vem um
s : OUT BIT_VECTOR (n-1 DOWNTO 0); -- saida
zs : OUT BIT); -- vai um
END som_6c;
ARCHITECTURE teste OF som_6c IS
SIGNAL v : BIT_VECTOR (n DOWNTO 0); -- vai um interno
BEGIN
v(0) <= ze;
zs <= v(n);
abc: FOR i IN 0 TO n-1 GENERATE
s(i) <= x(i) XOR y(i) XOR v(i);
v(i+1) <= (x(i) AND y(i)) OR (x(i) AND v(i)) OR (y(i) AND v(i));
END GENERATE abc;
END teste;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.16
Comando GENERATE - esquema de gerao IF
Cpia das declaraes:
- controlada pelo comando IF
- condio verdadeira: cpia efetuadas
Exemplo:
abc: IF condicao GENERATE
-- comando concorrente
-- comando concorrente
END GENERATE abc;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.17
Comando GENERATE - esquema de gerao IF
Exemplo de um somador empregando componentes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
ENTITY som_7a IS
GENERIC(n : INTEGER := 3 ); -- numero de bits
PORT (x, y : IN BIT_VECTOR (n-1 DOWNTO 0); -- entradas so somador
ze : IN BIT; -- vem um
s : OUT BIT_VECTOR (n-1 DOWNTO 0); -- saida
zs : OUT BIT); -- vai um
END som_7a;
ARCHITECTURE estrutural OF som_7a IS
COMPONENT som_1a
PORT (a, b, ve : IN BIT; s, vs : OUT BIT);
END COMPONENT;
SIGNAL v : BIT_VECTOR (n-1 DOWNTO 1); -- vai um interno
BEGIN
global: FOR i IN 0 TO n-1 GENERATE
def: IF i =0 GENERATE
primeira: som_1a PORT MAP (x(i), y(i), ze, s(i), v(i +1)); -- 1a celula
END GENERATE def;
abc: IF (i > 0) AND (i < n-1) GENERATE
centro: som_1a PORT MAP (x(i), y(i), v(i), s(i), v(i +1)); -- celulas centro
END GENERATE abc;
ghi: IF i =n-1 GENERATE
ultima: som_1a PORT MAP (x(i), y(i), v(i), s(i), zs); -- ultima celula
END GENERATE ghi;
END GENERATE global;
END estrutural;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.18
Comando LOOP
- esquema de interao FOR
- esquema de iterao WHILE
- comandos: NEXT EXIT
- laos infinitos
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.19
Comando LOOP
Repetio da execuo de comandos seqenciais:
- esquemas de iterao: FOR e WHILE
Aplicao: gerao automtica
- circuitos regulares
- rotinas de converso (no necessariamente aplicadas em sntese)
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.20
Comando LOOP modo iterativo FOR
FOR identificador IN limites_da_iteracao LOOP
- Identificador: no necessita ser declarado
- Limites da iterao:
- faixa discreta de valores: ( 0 TO 7 ) ( 23 DOWNTO 0 )
- atributos que retornem faixa de valores: aRANGE bREVERSE_RANGE
Exemplos:
abc: FOR i IN valor_inicial TO valor_final LOOP -- faixa crescente
-- comando sequencial
END LOOP abc;
def: FOR i IN valor_final DOWNTO valor_inicial LOOP -- faixa decrescente
-- comando sequencial
END LOOP def;
ghi: FOR i IN xRANGE LOOP -- faixa: elementos na faixa definida, exemplo
-- comando sequencial -- (final DOWNTO inicial), (inicial TO final)
END LOOP ghi;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.21
Comando LOOP - modo iterativo FOR
Exemplo de um somador - comandos seqenciais
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ENTITY som_8a IS
GENERIC(n : INTEGER := 3 ); -- numero de bits
PORT (x, y : IN BIT_VECTOR (n-1 DOWNTO 0); -- entradas do somador
ze : IN BIT; -- vem um
s : OUT BIT_VECTOR (n-1 DOWNTO 0); -- saida
zs : OUT BIT); -- vai um
END som_8a;
ARCHITECTURE teste OF som_8a IS
BEGIN
abc: PROCESS (x, y, ze)
VARIABLE v : BIT_VECTOR (n DOWNTO 0); -- vai um interno
BEGIN
v(0) := ze;
abc: FOR i IN 0 TO n-1 LOOP
s(i) <= x(i) XOR y(i) XOR v(i);
v(i+1) := (x(i) AND y(i)) OR (x(i) AND v(i)) OR (y(i) AND v(i));
END LOOP abc;
zs <= v(n);
END PROCESS;
END teste;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.22
Comando LOOP - modo iterativo FOR
Exemplo de limites de iterao definidos por:
- atributos: RANGE e REVERSE_RANGE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ENTITY rev_bit0 IS
GENERIC(n : INTEGER := 4 );
PORT (x : IN BIT_VECTOR (n-1 DOWNTO 0);
s, t : OUT BIT_VECTOR (n-1 DOWNTO 0));
END rev_bit0;
ARCHITECTURE teste OF rev_bit0 IS
BEGIN
abc: PROCESS (x)
BEGIN
abc: FOR i IN n-1 DOWNTO 0 LOOP
t(t'LEFT -i) <= x(i);
END LOOP abc;
def: FOR i IN x'RANGE LOOP -- faixa: x'RANGE =(n-1 DOWNTO 0)
s(s'LEFT -i) <= x(i);
END LOOP def;
END PROCESS;
END teste;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.23
Comando LOOP - modo iterativo FOR
Exemplo - rotina de converso:
- entrada: tipo bit_vector retorna: tipo inteiro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ENTITY loop_f1 IS
PORT (e_bit : IN BIT_VECTOR (3 DOWNTO 0); -- entrada vetor de bits
inteiro_for : OUT INTEGER RANGE 0 TO 15); -- saida inteiro
END loop_f1;
ARCHITECTURE teste OF loop_f1 IS
BEGIN
abc_for: PROCESS (e_bit)
VARIABLE temp : INTEGER;
BEGIN
temp := 0;
FOR i IN e_bit'RANGE LOOP -- iteracoes: tamanho do vetor entrada
IF e_bit(i) = '1' THEN temp := temp + 2**i;
END IF;
END LOOP;
inteiro_for <= temp;
END PROCESS;
END teste;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.24
Comando LOOP - modo iterativo FOR
Exemplo anterior - rotina de converso:
- tipo bit_vector para inteiro
Circuito sintetizado corretamente:
- apesar do distanciamento circuito descrio
- 2
i
aceito por determinadas ferramentas de sntese
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.25
Comando LOOP modo iterativo WHILE
WHILE condicao_teste LOOP
- Iterao executada enquanto:
- condio de teste verdadeira
Exemplo:
-- nota: teste executado no inicio do LOOP
abc: WHILE condicao_teste LOOP -- enquanto condicao_teste = verdadeira
-- comando sequencial
-- comando sequencial
-- atualizacao variavel de indice
END LOOP abc;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.26
Comando LOOP - modo iterativo WHILE
Exemplo de um somador - declaraes seqenciais
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
ENTITY som_9a IS
GENERIC(n : INTEGER := 3 ); -- numero de bits
PORT (x, y : IN BIT_VECTOR (n-1 DOWNTO 0); -- entradas so somador
ze : IN BIT; -- vem um
s : OUT BIT_VECTOR (n-1 DOWNTO 0); -- saida
zs : OUT BIT); -- vai um
END som_9a;
ARCHITECTURE teste OF som_9a IS
BEGIN
abc: PROCESS (x, y, ze)
VARIABLE i : INTEGER := 0;
VARIABLE v : BIT_VECTOR (n DOWNTO 0); -- vai um interno
BEGIN
i := 0; -- deve ser atualizado a cada iteracao
v(0) := ze;
abc: WHILE i <= n-1 LOOP -- executado enquanto verdadeiro
s(i) <= x(i) XOR y(i) XOR v(i);
v(i+1) := (x(i) AND y(i)) OR (x(i) AND v(i)) OR (y(i) AND v(i));
i := i+1;
END LOOP abc;
zs <= v(n);
END PROCESS;
END teste;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.27
Comando LOOP - modo iterativo WHILE
Exemplo rotina de converso:
- tipo bit_vector para inteiro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ENTITY loop_w1 IS
GENERIC (n : INTEGER := 4);
PORT (e_bit : IN BIT_VECTOR (n-1 DOWNTO 0); -- entrada bit_vector
inteiro_while : OUT INTEGER RANGE 0 TO 2**n-1);-- saida integer
END loop_w1;
ARCHITECTURE teste OF loop_w1 IS
BEGIN
abc_while: PROCESS (e_bit)
VARIABLE temp, i : INTEGER;
BEGIN
temp := 0;
i := 0;
WHILE (i /= e_bit'LENGTH) LOOP -- iteracoes: tamanho vetor entrada
IF e_bit(i) = '1' THEN temp := temp + 2** i;
END IF;
i := i +1;
END LOOP;
inteiro_while <= temp;
END PROCESS;
END teste;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.28
Comandos NEXT e EXIT
NEXT: salto para o final do lao,
execuo dos comandos restantes no esquema de iterao omitidas
EXIT: leva ao trmino das operaes do lao em execuo
Podem ser subordinadas a uma condio: palavra reservada WHEN
Rtulo: pode indicar o lao para retomada das operaes
Permitidos unicamente no interior de laos
Exemplos:
-- comando
laco_a: FOR i IN 0 TO 7 LOOP
-- comando
laco_b: FOR j IN 0 TO 7 LOOP
-- comando
EXIT WHEN x = y;
-- comando
NEXT WHEN x = 5;
-- comando
END LOOP;
-- comando
END LOOP;
-- comando
prxima iterao
de laco_b
termina iterao
de laco_b
-- comando
laco_a: FOR i IN 0 TO 7 LOOP
-- comando
laco_b: FOR j IN 0 TO 7 LOOP
-- comando
EXIT laco_a WHEN x = y;
-- comando
NEXT laco_a WHEN x = 5;
-- comando
END LOOP;
-- comando
END LOOP;
-- comando
prxima iterao
de laco_a
termina iterao
de laco_a
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.29
Laos infinitos
Esquema de gerao:
- sem controle: executado sempre
- equivalente a WHILE TRUE LOOP
Ambos os casos:
- necessrio prever esquema para abortar a execuo
- Comando EXIT por exemplo
Exemplo:
ghi: LOOP -- executado sempre
-- comando sequencial
-- comando sequencial
END LOOP ghi;
def: WHILE TRUE LOOP -- executado sempre
-- comando sequencial
-- comando sequencial
END LOOP def;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.30
Lao infinito exemplo - trmino da execuo: EXIT
Exemplo rotina de converso:
- entrada: tipo bit_vector retorna: tipo inteiro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ENTITY loop_e1 IS
GENERIC (n : INTEGER := 4);
PORT (e_bit : IN BIT_VECTOR (n-1 DOWNTO 0); -- entrada bit_vector
inteiro_exit : OUT INTEGER RANGE 0 TO 2**n-1);-- saida integer
END loop_e1;
ARCHITECTURE teste OF loop_e1 IS
BEGIN
abc_for: PROCESS (e_bit)
VARIABLE temp, i : INTEGER;
BEGIN
temp := 0;
i := 0;
LOOP
IF e_bit(i) = '1' THEN temp := temp + 2**i;
END IF;
i := i +1;
EXIT WHEN i = e_bit'LENGTH;
END LOOP;
inteiro_exit <= temp;
END PROCESS;
END teste;
Roberto dAmore - VHDL: Descrio e Sntese de Circuitos Digitais - captulo 7 - reviso 2.3 7.31
Leitura adicional:
Solicitao direta de componentes - verso VHDL-1993 (pgina 102)
Mapa de genricos na solicitao de componentes (pgina 104)
Leitura para prxima aula:
Pginas 119 a 125

You might also like