Prévia do material em texto
1 FEDERAL UNIVERSITY OF SANTA CATARINA 1 EEL5105 – Circuitos e Técnicas Digitais Aula 8 hector@eel.ufsc.br http://hectorpettenghi.paginas.ufsc.br Prof. Héctor Pettenghi Material desenvolvido com apoio de arquivos de apresentação do livro de Frank Vahid 2 2 FSMs e Projeto de Blocos de Controle RTL Design: Introdução 3 3 Projeto de Blocos de Controle • De maneira geral, passos para realização do projeto: 1 Capturar a FSM Criar um diagrama de estados (FSM) que descreva o comportamento desejado do controlador. 2 Criar a arquitetura Criar uma arquitetura padrão usando o registrador apropriado além de entradas e saídas apropriadas. 3 Codificar os estados Escolher um valor binário único (código) para cada estado. Qualquer código pode ser usado desde que ele seja único para cada estado. 4 Criar uma tabela de estados Criar uma tabela verdade para a lógica combinacional de tal forma que valores de saída e de próximo estado corretos sejam gerados. 5 Implementar a lógica combinacional Implementar a lógica combinacional usando qualquer método. 4 4 Projeto de Blocos de Controle • Exemplo 1: Projetar um sincronizador de aperto de botão (circuito que converte um toque no botão em um pulso com duração de um ciclo de clock, independentemente do tempo que o botão fica apertado). Button press synchronizer controller bi bo 5 5 Projeto de Blocos de Controle • Exemplo 1: Projetar um sincronizador de aperto de botão (circuito que converte um toque no botão em um pulso com duração de um ciclo de clock, independentemente do tempo que o botão fica apertado). • Passo 1: Capturar a FSM 6 6 Projeto de Blocos de Controle • Exemplo 1: Projetar um sincronizador de aperto de botão (circuito que converte um toque no botão em um pulso com duração de um ciclo de clock, independentemente do tempo que o botão fica apertado). • Passo 1: Capturar a FSM • Passo 2: Criar a arquitetura A B C bo=1 bo=0 bo=0 bi bi b i ’ bi ’ bi ’ bi FSM inputs: bi; FSM outputs: bo 7 7 Projeto de Blocos de Controle • Exemplo 1: Projetar um sincronizador de aperto de botão (circuito que converte um toque no botão em um pulso com duração de um ciclo de clock, independentemente do tempo que o botão fica apertado). • Passo 1: Capturar a FSM • Passo 2: Criar a arquitetura A B C bo=1 bo=0 bo=0 bi bi b i ’ bi ’ bi ’ bi FSM inputs: bi; FSM outputs: bo Combinational logic n0 s1 s0 n1 bo bi clk State register FS M in pu ts FS M ou tp ut s 8 8 Projeto de Blocos de Controle • Exemplo 1: Projetar um sincronizador de aperto de botão (circuito que converte um toque no botão em um pulso com duração de um ciclo de clock, independentemente do tempo que o botão fica apertado). • Passo 3: Codificar os estados 9 9 Projeto de Blocos de Controle • Exemplo 1: Projetar um sincronizador de aperto de botão (circuito que converte um toque no botão em um pulso com duração de um ciclo de clock, independentemente do tempo que o botão fica apertado). • Passo 3: Codificar os estados • Passo 4: Criar uma tabela de estados 00 01 10 bo=1 bo=0 bo=0 bi bi bi ’ bi ’ bi ’ bi FSM inputs: bi; FSM outputs: bo 10 10 Projeto de Blocos de Controle • Exemplo 1: Projetar um sincronizador de aperto de botão (circuito que converte um toque no botão em um pulso com duração de um ciclo de clock, independentemente do tempo que o botão fica apertado). • Passo 4: Criar uma tabela de estados Step 4: State table 11 11 Projeto de Blocos de Controle • Exemplo 1: Projetar um sincronizador de aperto de botão (circuito que converte um toque no botão em um pulso com duração de um ciclo de clock, independentemente do tempo que o botão fica apertado). • Passo 5: Implementar... 12 12 Projeto de Blocos de Controle • Exemplo 1: Projetar um sincronizador de aperto de botão (circuito que converte um toque no botão em um pulso com duração de um ciclo de clock, independentemente do tempo que o botão fica apertado). • Passo 5: Implementar... clk State register bo bi s1 s0 n1 n0 Combinational logic n1 = s1’s0bi + s1s0bi n0 = s1’s0’bi bo = s1’s0bi’ + s1’s0bi = s1s0 13 13 Projeto de Blocos de Controle • Exemplo 2 (fazer somente FSM): Detector de código para abrir porta. • Destrava porta (u=1) somente quando botões pressionados são: • Início, depois verm., azul, verde, verm. • Entradas de cada um dos botões: s,r,g,b • Entrada a indica que um dos botões coloridos foi pressionado. Início Verm. Verde Azul s r g b a Trava da porta u Detector de código 14 14 Projeto de Blocos de Controle • Exemplo 2 (fazer somente FSM): Detector de código para abrir porta. • Destrava porta (u=1) somente quando botões pressionados são: • Início, depois verm., azul, verde, verm. • Entradas de cada um dos botões: s,r,g,b • Entrada a indica que um dos botões coloridos foi pressionado. • Funcionamento da máquina de estados: • Espera em um estado “Wait” até que s seja apertado (s = 1) • Quando s é apertado, vai para um estado “Start” e então: – Se vermelho for apertado, vá para “Red1” – Então, se azul for apertado, vá para “Blue” – Então, se verde for apertado, vá para “Green” – Então, se vermelho for apertado, vá para “Red2” » Em “Red2”, mandar a porta abrir (u = 1) – Botão errado apertado em qualquer estado, volta para “Wait” • Montar máquina... Início Verm. Verde Azul s r g b a Trava da porta u Detector de código 15 15 Projeto de Blocos de Controle • Exemplo 2 (fazer somente FSM): Detector de código para abrir porta. • Resultado: Início Verm. Verde Azul s r g b a Trava da porta u Detector de código Wait Start Red1 R ed2 Green Blue s ’ a ’ a r ’ a b ’ a g ’ a r ’ a ’ ab ag ar a ’ a ’ u=0 u=0 ar u=0 s u=0 u=0 u=1 Entradas: s,r,g,b,a; Saída: u 16 16 Projeto de Blocos de Controle • Exemplo 2 (fazer somente FSM): Detector de código para abrir porta. • Resultado: Início Verm. Verde Azul s r g b a Trava da porta u Detector de código Wait Start Red1 R ed2 Green Blue s ’ a ’ a r ’ a b ’ a g ’ a r ’ a ’ ab ag ar a ’ a ’ u=0 u=0 ar u=0 s u=0 u=0 u=1 Entradas: s,r,g,b,a; Saída: u Como essa máquina de estados pode ser hackeada? 17 17 Projeto de Blocos de Controle • Exemplo 2 (fazer somente FSM): Detector de código para abrir porta. • Resultado: Início Verm. Verde Azul s r g b a Trava da porta u Detector de código Wait Start Red1 R ed2 Green Blue s ’ a ’ a r ’ a b ’ a g ’ a r ’ a ’ ab ag ar a ’ a ’ u=0 u=0 ar u=0 s u=0 u=0 u=1 Entradas: s,r,g,b,a; Saída: u Como essa máquina de estados pode ser hackeada? Mantendo todos os botões apertados ao mesmo tempo! 18 18 Projeto de Blocos de Controle • Exemplo 2 (fazer somente FSM): Detector de código para abrir porta. • Arrumando a FSM: • O Problema foi completamente resolvido? Wait Start Red1 Red2 Green Blue s’ a ’ a ’ ab ag ar a ’ a ’ u=0 u=0 ar u=0 s u=0 u=0 u=1 ar’ ab’ ag’ ar’ 19 19 Projeto de Blocos de Controle • Exemplo 2 (fazer somente FSM): Detector de código para abrir porta. • Arrumando a FSM: • O Problema foi completamenteresolvido? • Não! Se o estado for “Start” e os três botões forem apertados, qual será o próximo estado? Wait Start Red1 Red2 Green Blue s’ a ’ a ’ ab ag ar a ’ a ’ u=0 u=0 ar u=0 s u=0 u=0 u=1 ar’ ab’ ag’ ar’ “Red1” ou “Wait” não dá para saber... 20 20 Projeto de Blocos de Controle • Regras que devem ser obedecidas para evitar armadilhas: • Para um estado qualquer, apenas uma condição de transição deve ser verdadeira de cada vez. a b Qual o próximo estado para a = b = 1? 21 21 Projeto de Blocos de Controle • Regras que devem ser obedecidas para evitar armadilhas: • Para um estado qualquer, apenas uma condição de transição deve ser verdadeira de cada vez. • Para um estado qualquer, pelo menos uma das condições deve ser verdadeira para cada uma das combinações de entradas. a b Qual o próximo estado para a = b = 1? a a ’ b Corrigido (em parte). a a ’ b O que irá acontecer se a = b = 0? 22 22 Projeto de Blocos de Controle • Regras que devem ser obedecidas para evitar armadilhas: • Para um estado qualquer, apenas uma condição de transição deve ser verdadeira de cada vez. • Para um estado qualquer, pelo menos uma das condições deve ser verdadeira para cada uma das combinações de entradas. a b Qual o próximo estado para a = b = 1? a a ’ b Corrigido (em parte). a a ’b a ’ b ’ Corrigido. a a ’ b O que irá acontecer se a = b = 0? 23 23 Projeto de Blocos de Controle • Resolvendo o problema detector de código para abrir porta: Wait Start Red1 Red2 Green Blue s’ a ’ a ’ ab ag ar a ’ a ’ u=0 u=0 ar u=0 s u=0 u=0 u=1 a(rb’g’) QUESTÃO 1: Tempo 5 min 24 24 Projeto de Blocos de Controle • Exemplo 3: Faça o projeto de um circuito árbitro para o acesso a um barramento que funcione conforme descrito a seguir. barramento Dispositivo 1 Dispositivo 2 Árbitro para o barramento r1 c1 c2 r2 • O árbitro recebe requisições para o uso do barramento de 2 dispositivos diferentes • O “Dispositivo 1” tem prioridade sobre o “Dispositivo 2” para o uso do barramento • Somente um dispositivo por vez pode ser autorizado a usar o barramento • Para sinalizar que o dispositivo pode usar o barramento, o árbitro faz o sinal de concessão igual a 1 (c1 = 1 ou c2 = 1, dependendo do dispositivo) clk reset 25 25 Projeto de Blocos de Controle • Exemplo 3: Faça o projeto de um circuito árbitro para o acesso a um barramento que funcione conforme descrito a seguir. barramento Dispositivo 1 Dispositivo 2 Árbitro para o barramento r1 c1 c2 r2 • Uma vez que o dispositivo recebe a concessão para usar o barramento, ele permanece com esta concessão durante todo o tempo que ele necessitar usar o barramento (por isso, o dispositivo mantém seu sinal de requisição em nível alto durante o período de uso do barramento) • Faça o projeto do árbitro... clk reset 26 26 Projeto de Blocos de Controle • Exemplo 3: Faça o projeto de um circuito árbitro para o acesso a um barramento que funcione conforme descrito a seguir. • Solução: • Em um determinado momento, o circuito poderá então estar em um dentre os seguintes estados: – Nenhum dispositivo com acesso concedido ao barramento – Concessão de acesso para o Dispositivo 1 – Concessão de acesso para o Dispositivo 2 • Como são 3 os estados possíveis, precisamos de 2 variáveis de estado para codificar tais estados e, portanto, usaremos 2 flip-flops. • Com isso, podemos especificar as variáveis: – Entradas: r1 e r2 – Saídas: c1 e c2 – Variáveis de estados: q1 e q2 27 27 Projeto de Blocos de Controle • Exemplo 3: Faça o projeto de um circuito árbitro para o acesso a um barramento que funcione conforme descrito a seguir. • Solução: • Construindo o diagrama de estados, temos: Acesso para ninguém 00 Acesso para Disp. 1 01 Acesso para Disp. 2 10 c1 = 0 c2 = 0 c1 = 1 c2 = 0 c1 = 0 c2 = 1 r1 = 1 / r2 = X r1 = 0 r2 = 0 r1 = 0 r2 = 1 r1 = 1 r2 = X r1 = X r2 = 1 r1 = 0 / r2 = X r1 = X r2 = 0 28 28 Projeto de Blocos de Controle • Exemplo 3: Faça o projeto de um circuito árbitro para o acesso a um barramento que funcione conforme descrito a seguir. • Solução: • Construindo o diagrama de estados, temos: Acesso para ninguém 00 Acesso para Disp. 1 01 Acesso para Disp. 2 10 c1 = 0 c2 = 0 c1 = 1 c2 = 0 c1 = 0 c2 = 1 r1 = 1 / r2 = X r1 = 0 r2 = 0 r1 = 0 r2 = 1 r1 = 1 r2 = X r1 = X r2 = 1 r1 = 0 / r2 = X r1 = X r2 = 0 q1 q2 29 29 Projeto de Blocos de Controle • Exemplo 3: Faça o projeto de um circuito árbitro para o acesso a um barramento que funcione conforme descrito a seguir. • Solução: • Agora, a tabela: 30 30 Projeto de Blocos de Controle Entradas Estado atual Próx. estado Saídas r1(t) r2(t) q1(t) q2(t) q1(t+1) q2(t+1) c1(t) c2(t) 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 1 X X X X 0 1 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0 1 0 0 1 0 1 1 1 X X X X 1 0 0 0 0 1 0 0 1 0 0 1 0 1 1 0 1 0 1 0 0 0 0 1 1 0 1 1 X X X X 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1 1 X X X X 31 31 Projeto de Blocos de Controle • Exemplo 3: Faça o projeto de um circuito árbitro para o acesso a um barramento que funcione conforme descrito a seguir. • Solução: • E as equações: – q1(t+1) = d1(t) = q1(t)r2(t) + r1(t)r2(t)q2(t) – q2(t+1) = d2(t) = r1(t)q1(t) – c1(t) = q2(t) – c2(t) = q1(t) • Agora basta montar o circuito... 32 32 Projeto de Blocos de Controle • Exemplo 4: Gerador da seqüência (0001, 0011, 1100, 1000, repete...). 33 33 Projeto de Blocos de Controle • Exemplo 4: Gerador da seqüência (0001, 0011, 1100, 1000, repete...). A B D wxyz=0001 wxyz=1000 wxyz=0011 wxyz=1100 C Inputs: none; Outputs: w,x,y,z clk State register w x y z n0 s0 s1 n1 34 34 Projeto de Blocos de Controle • Exemplo 5: Controle de chave de carro segura • Muitas das chaves modernas para carros incluem um chip: • Quando o carro é ligado, o computador de bordo solicita um identificador para a chave. • Em seguida, a chave envia um código de volta para o computador. • Desenhar a máquina de estados para um chave que envia o código 1101 através de uma saída r após tal código ser requisitado através de uma entrada a. 35 35 Projeto de Blocos de Controle • Exemplo 5: Controle de chave de carro segura • Muitas das chaves modernas para carros incluem um chip: • Quando o carro é ligado, o computador de bordo solicita um identificador para a chave. • Em seguida, a chave envia um código de volta para o computador. • Desenhar a máquina de estados para um chave que envia o código 1101 através de uma saída r após tal código ser requisitado através de uma entrada a. K1 K2 K3 K4 r=1 r=1 r=0 r=1 Espera r=0 Entrada: a; Outputs: r a ’ a 36 36 Projeto de Blocos de Controle • Exemplo 5: Controle de chave de carro segura • Comportamento ao longo do tempo: K1 K2 K3 K4 r=1 r=1 r=0 r=1 Espera r=0 Entrada: a; Outputs: r a ’ a W ait W ait K1 K2 K3 K4 W ait W ait clk Entradas Saídas Estados a r37 37 Projeto de Blocos de Controle • Exemplo 5: Controle de chave de carro segura • Comportamento ao longo do tempo: • O que aconteceria se a requisição feita pelo computador de bordo ficasse ativa por muito tempo? K1 K2 K3 K4 r=1 r=1 r=0 r=1 Espera r=0 Entrada: a; Outputs: r a ’ a clk a W ait W ait K1 K2 K3 K4 W ait r 38 38 FSMs e Projeto de Blocos de Controle RTL Design: Introdução 39 39 RTL Design: Introdução • Até agora: sistemas digitais cada vez + complexos • Porta lógicas, multiplex., decod., somadores, controladores (FSMs) • Nas próximas aulas: como associar esses sistemas para fazer circuitos ainda mais complexos 40 40 RTL Design: Introdução • Exemplo: máquina de venda de refrigerante • Supondo que tal máquina possui: • Interface com o usuário com saída s de 8 bits que indica custo do refrigerante escolhido • Mecanismo de recepção de moedas com: – saída c de 1 bit que indica que uma moeda foi depositada – saída a de 8 bits que indica o valor da moeda • Mecanismo de entrega de refrigerante com entrada d de 1 bit que aciona a entrega 41 41 RTL Design: Introdução • Exemplo: máquina de venda de refrigerante • Entradas: s, c e d • Saída: a Interface com o usuário Mecanismo moedas 8 8 Mecanismo entrega s c a d Machine Manager v.0.1β 42 42 RTL Design: Introdução • Exemplo: máquina de venda de refrigerante • Diagrama de estados: • Tal diagrama contém: • Variáveis com múltiplos bits (tot, s e a) • Operações de “alto nível”: – Soma de valores com múltiplos bits (tot+a) – Atribuição (registro) de valores (tot=0, tot=tot+a) – Comparação de grandezas (tot<s) • Tem-se então um diagrama de estados de alto nível Wait Add Disp I nit d=0 tot=0 c’*(tot<s) d=1 c tot=tot+a c’*(tot<s)’ 43 43 RTL Design: Introdução • RTL Design (Projeto RTL) envolve converter diagrama de estados de alto nível em circuito digital • Para tal, dois tipos de entradas/saídas são definidos: • Entradas/saídas de controle: tipicamente de um bit (ou poucos bits) representando evento ou estado do sistema • Entradas/saídas de dados: geralmente múltiplos bits que representam alguma informação 44 44 RTL Design: Introdução • Exemplos de entrada/saída de controle: • 1 bit representando que um botão foi apertado • 1 bit que, em nível alto, aciona um mecanismo de destravamento de porta • Exemplos de entrada/saída de dados • 8 bits indicando uma medida de temperatura de um sensor • 8 bits indicando a soma dos valores das moedas depositadas em uma máquina de refrigerante 45 45 RTL Design: Introdução • Exemplo: máquina de venda de refrigerante • Entradas/saídas de controle: c e d • Entradas/saídas de dados: s e a Interface com o usuário Mecanismo moedas 8 8 Mecanismo entrega s c a d Machine Manager v.0.1β 46 46 RTL Design: Introdução • RTL Design (Projeto RTL ) envolve converter diagrama de estados de alto nível em circuito digital • Dois tipos de entradas/saídas são definidos: • Entradas/saídas de controle: tipicamente de um bit (ou poucos bits) representando evento ou estado do sistema • Entradas/saídas de dados: geralmente múltiplos bits que representam alguma informação/entidade • São definidos também dois blocos: • Bloco de controle: trata de entradas/saídas de controle • Bloco operacional (datapath): trata de entr./saídas de dados 47 47 RTL Design: Introdução • RTL Design (Projeto RTL ) envolve converter diagrama de estados de alto nível em circuito digital • Com isso, temos a seguinte arquitetura geral: Controle Datapath Entradas de controle Saídas de controle Entradas de dados Saídas de dados 48 48 RTL Design: Introdução • RTL Design (Projeto RTL ) envolve converter diagrama de estados de alto nível em circuito digital • Com isso, temos a seguinte arquitetura geral: • Bloco de controle e datapath conversam entre si a partir de sinais de comando e status Controle Datapath Entradas de controle Saídas de controle Entradas de dados Saídas de dados Comandos Status 49 49 Machine Manager v.0.1β RTL Design: Introdução • Voltando para a máquina de venda de refrigerante: • Entradas/saídas de controle: c e d • Entradas/saídas de dados: s e a Controle Datapath Interface com o usuário Mecanismo moedas 8 8 Mecanismo entrega s c a d 50 50 RTL Design: Introdução • Voltando para a máquina de venda de refrigerante: • Possíveis sinais de comando e status: • m (manda datapath somar valor da nova moeda) • h (informa controle que valor depositado é maior que preço do refrigerante escolhido). Machine Manager v.0.1β Controle Datapath Interface com o usuário Mecanismo moedas 8 8 Mecanismo entrega s c a d m h 51 51 RTL Design: Introdução • Projeto do Bloco de Controle: usando a técnica descrita nesta aula Machine Manager v.0.1β Controle Datapath Interface com o usuário Mecanismo moedas 8 8 Mecanismo entrega s c a d m h 52 52 RTL Design: Introdução • Datapath: Realiza operações com entradas/saídas de dados Machine Manager v.0.1β Controle Datapath Interface com o usuário Mecanismo moedas 8 8 Mecanismo entrega s c a d m h 53 53 Datapath • Para a máquina de venda de refrigerante: • Diagrama de estados de alto nível: • Operações de “alto nível”: • Soma de valores com múltiplos bits (tot+a) • Atribuição (registro) de valores (tot=0, tot=tot+a) • Comparação de grandezas (tot<s) Wait Add Disp I nit d=0 tot=0 c’*(tot<s) d=1 c tot=tot+a c’*(tot<s)’ 54 54 Datapath • Na máquina de venda de refrigerante: • Soma de valores com múltiplos bits (tot+a) • Somador da Aula 5 Somador (m bits) tot a tot+a 55 55 Datapath • Na máquina de venda de refrigerante: • Atribuição (registro) de valores (tot=0, tot=tot+a) • Registrador com FFs Tipo D com load e clear das Aulas 6, 7 e Lab Registrador (m bits) clk clr tot+a tot load load = 1 → tot = tot+a clr = 1 → tot = 0 56 56 Datapath • Na máquina de venda de refrigerante: • Comparação de grandezas (tot<s) • Comparador, o qual pode ser projetado usando Aula 3 Comparador tot s tot < s A B A < B 57 57 Datapath • Na máquina de venda de refrigerante: • Associando os elementos que fazem operações de alto nível, obtém-se o datapath Comparador tot s tot < s A B A < B Somador (m bits) tot a tot+a Registrador (m bits) clk clr tot+a tot load Machine Manager v.0.1β Controle Datapath 8 8 s c a d m h 58 58 Datapath Datapath • Na máquina de venda de refrigerante: • Associando os elementos que fazem operações de alto nível, obtém-se o datapath Comparador tot < s A B A < B Somador (m bits) tot Registrador (m bits) clk clr ld tot+a 8 8 s a a s Tc Tw Tm 59 59 Datapath Datapath • Na máquina de venda de refrigerante: Comparador tot < s AB A < B Somador (m bits) tot Registrador (m bits) clk clr ld tot+a 8 8 s a a s Tc Tw Tm Tw = 1 → tot = tot+a Tc = 1 → tot = 0 Tm: resultado de tot < s 60 60 Datapath Machine Manager v.0.1β Controle Datapath 8 8 s c a d Tw Tc Tm Datapath Comparador tot < s A B A < B Somador (m bits) tot Registrador (m bits) clk clr ld tot+a 8 8 s a a s Tc Tw Tm QUESTÃO 2: Tempo 5 min 61 FEDERAL UNIVERSITY OF SANTA CATARINA 61 EEL5105 – Circuitos e Técnicas Digitais Aula 8 hector@eel.ufsc.br http://hectorpettenghi.paginas.ufsc.br Prof. Héctor Pettenghi Material desenvolvido com apoio de arquivos de apresentação do livro de Frank Vahid 62 62 Exercícios • Exercícios do Livro do Frank Vahid • 3.23 até 3.27 • 3.29 e 3.30 • 3.32 e 3.33 • 3.38 até 3.42 • A versão digital do livro do Frank Vahid está disponível no site da BU • Mais especificamente em: http://150.162.4.10/pergamum/biblioteca_s/php/login_pearson.php 63 63 Exercícios • Outro Exemplo: Contador de 2 bits com contagem ascendente, pausa e indicação de máximo da contagem: 00 11 01 10 y=0 y=0 y=1 y=0 x x x x x’ x’ x’ x’ 64 64 Exercícios • Respostas Livro do Frank Vahid 3.23 3.24 3.25 65 65 Exercícios • Respostas Livro do Frank Vahid 3.26 66 66 Exercícios • Respostas Livro do Frank Vahid 3.27 67 67 Exercícios • Respostas Livro do Frank Vahid 3.29 68 68 Exercícios • Respostas Livro do Frank Vahid 3.30 69 69 Exercícios • Respostas Livro do Frank Vahid 3.32 3.33 70 70 Exercícios • Resposta do 3.38 71 71 Exercícios • Resposta do 3.38 72 72 Exercícios • Resposta do 3.39 73 73 Exercícios • Resposta do 3.39 74 74 Exercícios • Resposta do 3.40