Você está na página 1de 268
ab erctorslez\oR Belial (kis de Circuitos By elitclicnc Roberto d'Amore Prefdcio Introdugio ‘ma exposigao gradual dos conceitos envolvidos em linguagens de programagao cnvolve algumas dificul- dades, devido & intertigagio dos temas. A explicagdo de um tSpico pode necessitar de um conceito ainda nao abordado, comprometendo, assim, o seu entendimento. A seqiéicia proposta pracura niio mencionar temas sinda nao abordados; quando necessaro, 6 dada una breve explicacdo sobre o novo tépico, © 0 capitulo que trata ‘ tema com mais profindidade ¢ indicado, ‘A orden dos tépicos abordados visa a ums curva de aprendizado acelerado para projetistas com experiéncia no desenvolvimento de cireaitos digits e profissionais da ree de programasio, Logo apés otercero capitulo, é pos- jvel realizar a descricdo, simuluglo ¢sintese de varios crcuitos basices. Assim, leitores habituados a desenvolver circuitos através de caprum esquemitiea ficam motivados, devido & identificacdo entre as estruturas da linguagem & circutos reais. Profigsionais da drea de programacfo sfo, também, beneficiados, pois a complexidade dos circuitos ‘propostos nos exercicios vai sendo clevada gradualmente, conforme novos t6pices slo apresentados. Sempre que possivel, procuramos manler uma correlagdo entre circuitos reais e 08 exemplos apresentados. Para projtista de circuitos digitais esse vinculo & importante, pois estabelece uma ligagéo entre a estrutura dese- jada e o modo de descrevé-la. No caso de profissionais da érea de programagao, que ntutas vezes desconhiecem ‘as reais possibilidades de implementagio de um circuito, o lo com exemplos reais evita o emprego de cédigos ‘complexos e por domais artficiosos, que nem sempre conduzem a citeuitos possiveis de serem sintetizados, Formato do texto O texto contém figuras, tabelas e quadros de eédigo. A numeragio das figuras, tabelas ¢ quadros identifica a secdo a que se referem. A figura que segue ilustra dois tos de quacros utilizados. No exemplo & esquerda da figura, oquadro contém apenas uma parcela de um cédigo. O quado a direite, dividido em cas regies, lustre ‘um eédigo completo de uma descricdo. A frea contendo a numeragao de linhas ¢ utilizada apenas para referén- cia no texto; ela nfo deve ser inserida no o6digo, Deve-se observar que & dada preferéncia a caracteres alfam- éricos pertencentes ao cédigo ASCII nos quadros, e, portanto, a grafia de algumas palavras nessa area pode estar incorreta. ‘Os termos em inglés foram, em sua maioria, vetidos para o portugués e podem ser encontrados no indice. rea de cbdlgo: ‘somanis caracteres ASCII ZL rea para numeragéo do inhas: ‘lo pertence so abdigo rea de cécigo: 2 [MRE TS sos we ome ‘coments ceracteres ASC 2 ae ae \ ifn’ ‘Quadie 0.12 Segment de um obdige ‘Guadkro a.i.t Example do ums cédigo completo -Exemplos de quadros contendo eéuigos de descrigbes. Preficio Contetido dos capitulos (© Capitulo 1 tem como objetivo apresentar um breve histérico da linguagem ¢ 08 passos envolvidos na sintese de um circuito digital. As etapas de uma sintese so, normalmente, dependentes das ferramentas utilizadas, Pro- ccuremos apresentar uma visSo que englobe, de una maneira mais ampla, os possiveis passos envolvidos. Como neste capitulo sf0 abordadas as etapas de um projeto, ¢ devido & falta de elementos necesséios para deseavolver ‘uma descricdo, as atividades podem ser complementadas com o aprendizado das ferramentas que scr8o utiliza- das, Descrigdes completas sfio oferecidas, ¢ todo o processo de compilacio, simulagdo, sintese ¢ programacio dde uma FPGA, pode set visto. ‘No Capitulo 2 so introduzidos os primeiros conceitos da linguagem, como tipos ¢ operadores prodefinidos, ‘Novamente, os exemplos ¢ exercicios visam sedimentar 0 conhecimento das ferramentas utilizadas empregan- do.0s conceitos vistos. Uma breve explicagio sobre a definigio de tipo é apresentada. Ela é suficiente para os capitalos seguintes. ‘Os Capituls 3 e4 apresentam alguns comandos concorrentes e seqienciais que perinitem elaborar descrigbes de complexidade mediana. Como a linguagem VDL fornece diversas altemnativas para descrever 0 comporta- ‘mento de um mesmo circuito, muitas das construgdes abordadas tem a sua operagio exemplificada através de um ‘mesmo circuito, Isso evita a exposigio de um novo circuito a cada novo comando c enfatiza as miltiplas opsBes para a descrigio. Os exercicios propostos procuram confrontar essas opgSes, com o objetivo de evitar que uma determinada construgio figue assotiada a um tipo de citeuito. 'No Capitulo 5 sto dados os conceitos de atraso, varidve e aributos. Alguns t6picos podem ser omitides ou resurnidos, permitindo que esse capitulo scja inscrido em unt outra capitulo. A descrigio de todos 08 atributos & tun pouce tediosa, ¢ pode ser abordada rapidamente. Atributos como" event” ¢ “ stable " iio devem ser omiti- dos, devido a suas aplicagdes na sintese de circuitos seqiienciais ‘© Capitulo 6 contém as principais estratégias para descrigio de citcuitos seqienciais visando & sintese. Repis- ttadores, maquinas de estado ¢ a inicializagao desses elementos so discutidos, No final desse capitulo, & poss vel realizar a descricao de circuitos com complexidade média para alta, pois muitos dos tépicos importantes da linguagem ja foram abordados. ‘No Capitulo 7 as possibilidades de um projeto sao estendidas: estruturas hieranquicas, © esquemas de terago ‘que permitem gerar citcuitos regulares so apresentados. A hierarquia & constituida de descriodes que sto refe- renciadas na forma de componentes. Os esqucmas de gerago ¢ iteracdo por laco permitera, ainda, a proposta de descrigées escalaveis, onde o tamanho do circuito pode ser programado no momento da sintese. Os exercicios propostos abordam estruturas regulares, como somadores e muttiplicadores celulares, onde é necessiria a inter ligagdo de diversos citcuitos em um modo preestabelecido. ‘© Capitulo 8 aborda os subprogramas fungio e procedimento. Ainda nesse capftulo, é estabelecido um paratelo ‘entre a criagio de cireuitos empregando componente, vista no capitulo anterior, e a criagdo de circuitos empre- ‘gando subprogramas. Sito abordadas, também, outras operacdes de subprogramas, como fingdes de conversa e sobrecarregamento de fungcs prodefinidas. ‘0 Capitulo 9 fomece subsidios para os tépicos a serem abordados no capitulo que segue, discutindo biblioteces pacotes. Esse capitulo tem a possibilidade de sor condensado, se necessério, Varios dos conceitos abordados podem ser apresentados nos Capitulos 10 © 11, onde so discutidos dois paeotes padronizados pelo IEEE. Os exercicios propostos so interessantes, endo vidvel adapt-tos, caso todos os eonceitos do capitulo no term sido abordados. O conjunto de exercicins leva & criagdo de um circuito que realiza uma operacso de divisfo. (Os Capitulos 10 e 11 sio imprescindiveis para a sintese de cireuitos que envolyam barramentos e portas com saida om estado de olta impedincia. Esses capitilos, podem ser apresentados logo apés 0 Capitulo 6 ou 7, con- forme a necessidade. Naturalmente, uma breve mengao dos conceitos de pacotes e bibliotecas € nevesséria, caso ‘0 Capitulo 9 vena a ser omitido. ‘No Capitulo 12 & abordada a criagio de novos tipos, ampliando os conceitos vistos no Capitulo 2. Com relagHo 4 sintese, € apresentada a desorigio de memsrias RAM € ROM empregando os noves conceitos introduzidos. O ‘Capitulo 13 continua a abordagem da definicdo de tipos, com a spresemtago do tipo arquivo. Esee tipo permite a operagio com arquivos no sistema hospedeiro. A discussti englaba arquivos no formato binério e no formato texto. Também so abordadas as diferencas entre as verses VHDI-1987 e VEDL-1993. ‘No Capitulo 14 so apresentados comandos que permite gerar mensagens ua fase de simulagiio, condicio- nar & execugio de um comando em funeio do término das iteragSes que ocorrem na simulagdo de comandos concorrentes, e configurar descrigdes estruturais. A criago de fingbes de resoluctio &, também, discutida. O Capitulo 15 contém uma série de técnicas para o teste de descrigdes empregando 08 conceitos abordados nos Capitulos 13 © 14, Sugestdes para leitura e proposta de curso Uma opeto natural para a leitura do texte, bem como uma proposta de um curso sobre a linguagem, é a adogie da seqiiéneia de capitulos apresentada no texto, Entcetanto, nem sempre a leitor ou o instrutor dispéem de tem- ‘po suficiente, ov necessitam de todos of t6picos apresentados. Na figura que segue, so sugeridas alternatives para o estado, procurando selecionar itens de interesse especifico, de modo a melhor atender uma determinada necessidade e reduzir o tempo necessirio. 4143aa ea645s 318293 5182 125 128 12.50 3918 717273 z 34310 4749 e8sie yaaa 126451 Lys asae 152153 ‘barramentos de alta impodéneia Opsbes de star do texto, Material didatico de apoio ‘0 estudo de uma finguagem de programagio ¢ extremamente mondtono se niio forem ofcrocidas atividades pa- 1a exercitar os conceitos lecionados. Visando motivar o aprentdizado, foi inscrido ao fim de cada capitulo um conjunto de exereicios. Como complemento aos exereicios, est disponivel no enderego eletrinico do autor ura ‘material contendo a salugio de todos os exercicios propostos, com comentarios ‘Além desse material, cada capitulo dispe de uma série de imagens para auxilio didético dos professores. Mais informagées sobre esses complementos podem ser obtides no endereco eletrdnico do autor wwwele.ita, bbr/~damore/vhdl/indiendo no sitio www.lteditore.com.br. Agradecimentos Gostatia de agradecer ao Prof. Jacobus Willibrordus Swart, responsdivel pelo “Programa Especial para Fabricagio de Circuitos Integcados no Exterior”, da FAPESP, ¢ ao comité organizador desse projeto. Gragas a esse programa, foi possivel © acesso a ferramentas que auxiliaram na elaboragao da obra. ‘Nao poderia deixar de mencionar, também, o apoio da equipe do Editorial Técnico da Editora LTC ao longo do desenvolvimento deste trabalho, em especial ao Prof, Bemardo Severo ¢ & Carl. Direitos autorais e capa ‘A remmuneragio do autor foi doada & FUMDHAM, entidade cientfica sem fin lucrativos, co-gestora do Parque ‘Nacional Serra da Capivara ‘A capa ¢ilustrada com pinturas rupestres do Parque Nacional da Capivara. A idéin ¢ estabelecer um parale- lo entre duas formas de linguagem: a utilizada pelos primeiros habitantes no nosso continente para descrever 0 colidiano e a empregada para descrever citcuitos eletronicos. X — Preficio Comentirios finais A claboragio do livro foi executada com o maximo cuidado, tendo como base o manual de referéncia de lin- ‘guagem. Todos os cédigos foram compilados, e operaram corretamente para os estirmalos de teste aplicados. O ‘autor, entretanto, no fornece garantias com relagdo ais descrigSes e & documentacio contida no texto. Deve-se Tembrar, ainda, de que os resultados obtidos, principalmente no caso de sintese, s20 dependentes do aplicativo e versio da ferramentia empregada. Assim, alteragBes nos resultados podem ser esperadas. A interpretacio dessas diferenas foge do escopo da obra, ¢ devem ser analisadas com base no manual de referéncia da linguagem e nas informagies fornccidas pelo fabricante da ferramenta, Sumdrio Capitulo 1 Capitulo 4 Introdugio 1 Comandos seqiienciais bésicos 43 11 Histérico 1 4.1 Lista de sensbilidade em processos 43 1.2. Aspectos gerais da linguagem 2 42 Atribuigio de valor para um sinal —regito 13 Sintese de circuitos 3 seqiencial 44 14 Principais pontas abordados. 6 43° Construglo “IF ELSE" 46 15 Exercicios 6 444 Construgio “ CASE WHEN” 48 4.5. Comando“ WAIT” 49 it 4.6 Comando“ NULL” 51 Capitato 4.7 Cidados na descrigao 53 Primeiro contato com a linguagem 10 ‘Comparagiecs entre “ WHEN ELSE" 2.1 Entidade de projeto 10 “IPELSE” $3 Declaragao da entidade e corpo da arquitetara 11 ‘Comparagies entre “ WITH SELECT "<“ CASE 2.2. Classe de objetos: constante, varidvel, sinal ¢ WHEN” 53 . arquivo 12 ‘ConstrugSes “IF ELSE" “CASE WHEN ” 23° Tipos 14 aninbadas 53 Tipos esealares 15 O emprego da coustrugio “ IF ELSE" e“ CASE ‘Fipos compostos 15 WHEN” 55 i [Noms indexados, parte de vetores © agrogado 16 Expresefio de escotha das construgies * WITH Definigdo de noves ipos 17 SELECT” ¢" CASE WHEN” 57 2.4 Operadores 17 4.8 Principais pontos abordados 58 25 Exemplos de utilizagio 21 49° Bxercicios 58 2.6 Principais pontas abordados 25 27° Exercicios 25 Capitulo 5 sete 3 Atraso, variavel e atributos 62 Capito 51 Ataso 62 ‘Comandos concorrentes bisicos 28 52. Sinal e variével 63 BL Atraso delta A 28 53° Avributos 65 32. “Atribuigdo de valor para um sinal 30 ‘Atributos predefinidos relatives a sinsis que resultam 33 Construgio “ WHEN ELSE” 31 ‘em novos sinais 65 . 34 Construcée“ WITH SELECT” 32 Aributos predefinidos relatives a sinais que nfo 35 Commando" BLOCK” 34 resultam em novos sinais 67 36 Comando“ PROCESS” 36 Arributos predefinidos relaivos a vetores: 68 37 Palavra reservada* UNAFFECTED” 37 Alributos predefinidos relatives a ipos 70 38 Cuidados na deserigdo 37 ‘Atsibutos definidos pelo usuario 71 ‘ aes » SA Cuidados na deserigéo 73 ‘Comparagdes entre as construgdes " WHEN ELSE oremiseieere 37 Orem na atribuigdo de valores 73 Ciagio de lazch com as construgies “ WHEN ELSE” 55 e“WITHSELECT” 39 56 3.9. Principais pontos abordados 40 3.10 Exereicios 40 xii Sumfrie Capitulo 6 Estratégias de deserigio de eircuitos sincronos 78 6.1 Conceitos iniciais 78 62 Registrador sensivel a nivel 79 63. Registrador sensivel a borda—iniializagto sincrona 81 64 Registrador sensivel a borda inicializagdo assinerona 82 6.5. Registtador sensivel a borda com sinal para habilitagdo do sinal de relégio 83 66 Maquinas de estados 86 6.7 _Inferéncia de registrador empregando variavet 90 68 Contadores 91 69 Alternatives para descrigio de registradores 93 6.10 Cuidados na descri¢do 94 Singis na lista de sensibilidade 94 Ciclo de inicializagio 95 Insereao desnecessaria de elementos de meméria 95 6.11. Principais pontos abordados 95 6.12 Bxercicios 96 Capitulo 7 ‘Componentes e esquemas de iteragio 100 7.1 Componentes 100 Declaragio de componente 100 Solicitasao de componente 100 Solicitacao direta de componente 102 72 Genéricos 103 Definigao de genéricos 103 Mapa de genéricos na solicitagdo de componentes. 104 7.3. Comando” GENERATE” 106 Esquema de geragio “ FOR" 106 Esquema de geragio “IF” 108 Comando” LOOP" 108 Esquema de iteragdo “FOR” 108 Esquema de iteragio “WHILE 111 Comandos “NEXT "6" EXIT” 113 Lages infinitos. 113 7.5 Principais pontos abordados 114 76 Exercicios 114 Wa Capituto 8 Subprogramas 119 8.1 Subprogramas 119 8.2 Fungdo 121 8.3 Procedimento 123 84 Sobrecarregamento de subprogramas e operadores 125 8.5 Velores sem especificagio de limites ean subprogramas 127 Cuidados na descrigo 128 Comportamento de varidveis declaradas em subprogramas 128 Chamada de procedimentos: regiBes concorrentes 129 ‘Varidveis compartilhadas 130 8.7 Principais pontos abordados 131 BS Bxercicios 132 86 Capitulo 9 Bibliotecas e pacotes 135 8.1 Bibliotecas de projeto 135 9.2 Pacotes 137 Ferramentas de sintese 141 9.3 Ordem de andlise 141 914 Constants Jeferidas 145 os lobais 146 9.6 pontos abordados 147 97 Exercicios 148 Capitulo 10 Padrao IEEE 1164 151 10.5 Tipos definidos 151 10.2. FungGes e subtipos definidos no pacote “ ste_logic 1164” 153 Descrigées empregando 0 pacote * std_logic_1164” 156 Fungies logicas 156 Operagao da fingio de resolugio em caso de conflito 157 Operagdes com o valor néo importa * =" 158 Sintese empregando tipos do pacote “std logie 1164" 158 Saidas com estado em alta impedincia 159 Resultado da codificasio de valores n0 cireuito gered 161 Sintese com o valor “no importa —comparagio 162 ‘Sintese com o valor “no importa” ~ minimizagao de tabelas 163, Deteogio de bordas de subida ou descida 164 ‘Comanda “ NULL ”: construgfo “ CASE WHEN ” e valores “std_logic” 165 Principais pontos abordados 166 Exercicios 166 103 10.4 10.5 106 Captento 11 Padrao IEEE 1076.3 170 11.1 Tipos definidos 170 112 Operngées definidas 170 11.3. Exemplos de mtlizasdo do padrao IBRE 1076.3 175 Funcées aritméticas. 176 Funcdes logicas 176 Saidas com estado em alta impedancia 177 COperagées relacionais com tipos * unsigned ” e“ signed” 177 Exemplo de sintese com o padrio IEEE 1076.3 178 ‘Valor “nfo importa” € fingao™ std_match ” 178 ‘Transbordo em operagSes de soma com tipos “unsigned” signed" 179 Cireuitos sincronos 181 Principais pontos abordados 183 Exercicios 184 ud us ns Capitulo 12 Declaragio de tipos e pseudénimos 188 121 Tipos 188 122 Defimigto de tipos enumerados 188 12.3 Definigdo de tipos fisicos 189 12.4 Definigio de subtipos 189 125. Definigao de tipos vetor_ 190 Declarando um vetor 190 Definig2o de um vetor com limites em aberto 192 \Vetor composto de elementos do tipo vetor 193 Vetor nmuttidimensional 195 12.6 Definigto de tipos registro 196 12,7 Pseud6nimos 197 128. Sintese de memérias 198 Memérias ROM. 199 Memérias RAM 201 129 Principais pontos abordados 203 12.10 Exercicios 204 Capitulo 13 Arquivos 206 13.1 Emprego de arquives 206 Deelaragio de um tipo arquivo 206 Declaragdo de objets tipo arquivo — versio VEDL-1987 207 Operagdes implicitamente declaradas versio VHDL-1987. 207 Exemplos — versio VHDL-1987 208 Declaragio de abjetos tipo arquivo ~ verso VHDL-1993. 209 Operacées implicitamente declaradas — versio ‘VHDL-1993. 210 Exemplos ~ versio VHDL-1993 211 132 133 134 Sunita xili Pacote“ TEXTIO” 212 Versio VHDL- 1987 215, Versio VHDL-1993. 217 Principais pontos abordados 218 Exereicios 219 Capitulo 14 ‘Tépicos avangados 221 ma a2 143 Ma 14s 146 147 Comando * ASSERT” 221 Comando " REPORT" 223 ‘Tipo com fungao de resolucao 224 Configuragées 227 Especificagio de configuragio 227 Declarasae da confignragao 229 Sintese contendo configuragto 234 ‘Comandos concorrentes pospostos. 236 Principais pontos aberdados 238, Bxercicios 238 Capitute 15 ‘Teste 241 Is 152 153 184 185 Tntodugdo 241 Geragio de estimalos 241 Sinais aleatérios 242 Sinais periédicos 243 Teste de uma descrigio 246 ‘Teste empregando constantes para geragiio dos estimulos 246 ‘Teste empregando dados em arquivo para geragio dos estimulos 250 ‘Teste empregando técnica mista 252 Principais pontos abordados 253 Exercicios 253 CAPITULO NTRODUCAO ‘ma linguagem de descri¢do de circuito padronizada possiilita 0 intercimbio de informagées referentes 20 ‘comportamento de um circuito entre fabricantes, fornecedores de sistemas e empresas de projetos. Outcas aplicagées possiveis de uma linguagem para descricio de circuite, ou HDL, Hardware Description Language, podem ser encontradas no teste de circuitos © na sintese do cireuito descrito. Esta tltima aplicagho permite substituir 0 processo de desenvolvimento de circuitos com captura esquemética com grande vantagem. Por exemplo, miquinas de estados empregadas no controle de um sistema pocem scr sintctizaddas através da infe- réncia de construgées do tipo “ IF THEN ELSE ", Uma outra opgio reside na descrigao de circuitos parametrizé- veis, onde as dimensdes das unidadcs interuas so definidas no momento da sintese. A descrigto de um circuito somador pode ser condicionada 1 uma constante genérica n” que, definida no momento da sintese, estabelece ‘a dimensio desejada para o somadot Este capitulo contém um breve histérico ¢ os motives que levaram ao desenvolvimento da linguagem de des- criglo de circuitos denominada VHDL. Sao abordados, também, os aspectes principais dessa linguagem e as tapas envolvidas em um processo de sintese, 1.1 Histérico ‘A linguagem VHDL deve o seu desenvolvimento necessidade de uma ferramenta de projeto ¢ documentagdo padro para o projeto VHSIC — ery High Speed Integrated Circuit, do Departamento de Defesa dos Estados Unidos da América (DARPA). No ano de 1981, esse departamento patrocinou tum encontro de especialistas pa~ 1a discutir 0s métodos para deserigfio de circuitos. Em 1983, 0 Departamento de Defesa definiu as requisitos de uma linguagem de deserigao de circuitos padrdo. Ainda nesse mesmo ano, foi concedide as firmas * IBM”, * Texas " e “ intermettics ” um contrato para o desenvolvimento da lingsagem e ferramentas. A padronizagio da linguagem pelo IEEE — Institue of Electrical and Electronic Engineer, teve como base a versio 7.2, 0 proces 50 foi auxiliado pela empresa “ CLSI ", contratada por um laboratério da Forca Aétea dos Estados Unidos, em 1986. No ano de 1987, ap6s revisdes propostas par académicos ¢ representantes de indistrias e do governo dos Estados Unidos, surgiu o padro IEBE 1076-1987, ‘Em 1993 uma nova versio da Yinguagem, denominada IBEB 1076-1993, foi aprovada pelo IEEE. As altera- 0s ntroduzidas nessa nova versio ndo acrescentam caractersticas significaivas para a sintese de cieuitos. AS diferencas marcantes entre as verses esto relacionadas com o tratamento de arquivos, Neste texto, quasc todas ‘as descrigbes podem ser compiladas em ambas as versGes. Os cbdigos mio aceitos por uma determinada versio ccontém uma nota de alerta nas primeirasfinbas, na forma de comentiti. ‘Com o objetivo de adicionar facilidades a linguagem, foram propostos dois padres, o IBEE 1164 ¢ IEEE 1076.3. 0 primeira define o pacote “ Std_logic_1184”, ¢0 segundo os pacotes * Numerig_std ”¢ “ Numeric bit. ‘Um pacote em VDL, ou package ”, é um local para armazenamento de informagées de uso comumn, como ti- ‘pos de dados, fangs ete. O pacote padrfo da linguagem define varios tipos de dados, sendo o tipo bit” o que possui correlago mais direta com um dado a ser manipulado por um circuito digital. Veores, ou arrays, contendo ‘elementos do tipo “ bit” sfo também definidos. 0 tipo * bit” pode assumic apenas dois valores, “0” ou 1”, 0 ‘gue limita, em muitos casos, o modclamento. O padre 1164 cobre esta lacuna, definindo navos tipos de dados ‘que permitem modelar condigSes de alta impedncia, ¢ casos em que mais de uma porta aciona um mesmo n6. Os novos tipos de dados definidos modelam, também, situaySes nocmalmente encontradas na simulagiio de um circuito digital, como, por exemplo, um n6 nao-inicializado. O padro 1076.3 visa auxiliar a sinteee de cireui- 2 Capito Um tos, propondo novas tipos dé dados e fungdes. Operagdes aritméticas, como soma ¢ multiplicagio, somente so definidas em tipos de dados inteiros ou reais, No padriio 1076.3 sfo definidas fungies que realizam essas ope- rages em tipos de dados no formato de vetores, dando, assim, mais opgBes para o projetista, tendo em vista que qualquer tipo de dado & convertido para um conjunto de bits no cireuito implementado. 1.2 Aspectos gerais da linguagem ‘Como a linguagem VHDL suporta projetos com miltiplos niveis de hietarquia, a descrigdo pode consistr na iterligacio de outras deserigSes menores, a um cédigo que representa o comportamento esperado do circuit. Esses estilos stio denontinados estrutural ¢ comportamental, e podem ser mesclades em wana mesina descrigao. ‘A cstrutura hierérquica ¢ a opgio de combinar diversos estilos de descrisd0 facilitam a condugio de projetos ‘complexos que partem de um nivel mais elevado para um nivel mais baixo de especificasao, conhecidos como op down design. As ferramentas de sintese suportam descrigdes de diferentes estilos, desde que o nivel de abs- {taco seja moderado. Para a inferéncia correta das estruturas, as construgdes empregadas devem seguir modos proferenciais indicados pelos febricantes das ferramentas Com excesto de regibes especificas no eédigo, todos os comandos silo executados concorrentemente. [so significa que a ordem na apresentagio dos comandos ¢ irrelevante para o comportamento da descrigio. A ocor- rncia de urn evento em um sinal leva A exeeugo de todos os comandos scnsiveis quel sina, da mesma forma que, em um circuito, a mudanga de ur valor em un determinado né afeta todas as entradas Higndas a esse ponto do cireuito, ‘A mudanga de valor em“ b * na Figura 1.2.1, por excmplo, leva 4 execuso conjunta dos comandos conti~ dos nas linhas 8 ¢ 9. A ordem da avaliagdo dos comandos executada pelo simuladar & irrelevante, ¢ 0 resultado seré sempre o mesmo. As operacies internas executadas pela ferramenta de siunulagdo, contudo, séo cfetuadas seqiiencialmente. Assim, o simulador necessita de um mecanismo interno para armazenar o resultado de cada comando, até que a avaliagio dc todos os comandos envolvidos tenha sido realizada. ‘A linguager permite, também, delimitar regides de cOdigo seqilencial, onde a execucio dos comands scgue a ordem de sua apresentagio no cédigo. Para essas tegides sio utilizados comandos especificos, que nfo podem ser empregados na regido de cédigo concorrente. Subprogramas e processos sao regides de cédigo seaiiencial lescrigo VHDL ‘Figura 1.2.1 Concorréncia em uma deserigdo. ‘Assim como as Hinguagens de programagfo, a linguagem VHDL permite a definigao de subprogramas na forma de procedimentas e fungBes. Os subprogremss podem ser empregados em rotinas de conversio, definiso dde novos operadores ¢outras operagoes no dinetamente ligadas a um circuito passivel de sintese, Nada innpede, entretanto, que um subprogramia tenka uma correspondéncia direta a um elemento do citcuito a ser sintetizado. cédiyo de um circuito multiplicador composto por um conjunte de eélulas, por excmplo, pode tera fungao de cada célula descrita por um subprograma. ‘Um outro recurso & a definigao de biblioteca e pacote, lnrary ”€ " packago ”. Os pacotes armazenam sub- programas, constantes ou novos tipos definidos,evitando a repetiglo de uma definigao cin todas as descrigdes, Excetuado o pacote padrdo, ou Standard Package ”, todos os pacotes devem ser declaradas para se tomnarem iveis numa declaragio, As bibliotecas armazenam as informacées compiladas, sendo a biblioteca corrente de trabalho denoroinada “ work". A Finguagem fornece mecanismos de acesso a bibliotecas, permitindo que 0 tra- balho de equipes envolvidas em um mesino projeto seja armazenado mune érea cormam. ‘Atém dos tipos estabelecides no pacote padrlo, é passivel definir novos tipas. Conforme visto, o padrio 1164 contém tipos que modelam condiges nflo encantradas nos tipos do pacote padrao, como de alta impedincia & niio-inicializado, A definicdo de novos tipos pode ser empregada, por exemplo, na representagio dos estados Introduyao 3. de ums méquina. Neste caso, pode ser criada uma correspondéncia mais natural entre o estado da maquina ¢ & tmaneita como ele 6 representado no cédigo. Naturalmente, no processe de sintese ¢atribuida uma codificasio Dindria para cada estado. (© procedimento de teste de uma descrigéo pode ser comandado por um outro cédigo VHDL. Estimulos de ‘teste podem ser definidos para comparar a correspondéncia entre o circuito descrito ¢ a especificagio do proje- to, Alm disso, uma vez disponivel a estimativa de temporizasio do circuito sintetizado, 0 cédigo de teste pode -verificar se restrig6es como hold time « set up time foram satisfeitas, ‘Operaydes com arquivos sfo possiveis. Essas operates slo demasiadamente abstratas para serem empregadas na sintese; elas so empregadas cr cédigos que objetivam o teste de outras descrigbes. ‘Na linguagem VHDL nio é feita nenkuma distingo entre comandos empregando caracteres maiisculos ou jnisculos, como ocorre, por exemplo, na linguagem “C”, Os comentirios iniciam apés dois hifens seguides, 2 terminam no final da Bnha. ‘Devido a sua potencialidade, a linguagem VEDL & complexa, e muitas vezes de dificil entendimento, dades ‘as inimeras opedes para modelar o comportamento de umn mesmo cireuito, Entretanto, o entendimento de um pequeno niimero de comandos, sficiente para o modelamento de estruturas medianamente complexas, pode sor rapidamente atingide. A necessidade de projetos mais complexos encaminka & procura por novos comandos Ievando a ume maior compreensio das opgées da finguagen. 1.3. Sintese de circuitos ‘A linguagem VHDL nfo foi originalmente concebida para a sintese de cireuitos digitais; assim, nem todas as construyes definidas sto suportadas pelas ferramentas de sintese. As limitagies dever-se 2 falta de correspon déneia de construgio com um circuito digital, @ impossibilidade da sintese com preciso, ou falta de detalha- ‘mento para uma sintese diret, Essas limitagées no devem ser consideradas como um problema da ferramenta de sintese ou da linguagem, mnas sim uma falha na propria descri¢do que esta por demais afastada de urn cireuito real. Um projetista pode propor na descriedo, por exemplo, um elemento de meméria sensivel tanto & borda de descida como & borda de subida de um sinal de rel6gio. Do ponto de vista de um simulador VHDL, a descrigie pode ser simulada com sucesso; entretanto, a ferramenta de sintese poder nfo sintetizar a descricio por falta de jum elemento desse tipo no mundo fisico. Uma multiplicagio de dois valores reais é permitida pela linguagemy ta pratica, seria nceesséria uma unidade de multiplicagdo de ponto fhutuante, que é, certamente, muito complex. [Um outro exemplo é a incluso de uma elfusula de atraso em um sina!, Esse recurso € itil para 0 modelamento de um circuito real; contudo, sé o funcionamento do cireuito depende de um valor espeeifico de tempo, a deseri- (fo nto é sintetizada corretamente. A impossibilidade de gerar atrasos em um circuito digital sem 0 auxilio de ‘uma base de tempo leva as ferramentas de sintese a ignorar esses comandos. ‘Os trée passos em um projato empregando uma lingnagem de descric de circuitos sdo apresentados na Figura 1.3.1. A partir da especificagdo de um projeto, é gerada uma descrigao VEIDL, que é submetida a um simulador pata a verificagio da correspondéncia entre a especificagio ¢ 0 cédigo. A mesma descrigfo ¢ interpretada por tuna ferramenta de sintese que infere as estruturas necessérias para um circuito que corresponda A descrigo, O Ferramenta do posiclonamenio & interigagso ‘Figura 1.3.1 Btapas de win projeto. 4 Capitulo Um resultado dessa etapa é um arquivo contendo uma rede de ligagdes de elementos bisicas disponiveis na tecnolo- gia do dispositivo empregado, Esse arquivo contendo a rede de ligagées é a base de dados para a ferramenta que realiza 0 posicionamento ¢ a intcrigagao dos eomponentes, place and route. A saida da ferramenta de posicio- hhamento © interligagio & umn arquivo que contém os dacios necessirios para confeegia do dispositivo, A etapa de elaboragdo da descrigdo ¢ ilustrada na Figura 1.3.2. Como a linguagem VHDL permite deserever tum mesmo circuito com diversos graus de abstracio, 0 eédigo gerudo inicialmente pode contcr estruturas por demais abstratas que ndo permitem a sintesc direta, Um processo iterativo de simulagées e detalhamento dos elementos da estrutura ¢ executaco até ser atingida uma descri¢do que permite a sintese, e até que as simalagées ‘ssegurem a equivaléncia entre a especificagdo do projeto e a descri¢&0 proposta. Figura 1.3.2 Elaboraglo da deserisdo VDL. Uma ver completada a descriglo, di-se iniio ao processo de sintese (ver Figura 1.3.3). A ferramenta de sintese, aps a verificacao de ercos de sintaxe, exevuta o processo de inferéncia e interligayao das estruturas necessérias para o citeuito a ser gerado a partir da descrigdo, Nesta etapa, é gerado um cireuito no nivel RTL — Register Transfer Level, empregando primitives disponiveis na ferramenta como comparadores, somadores,repistradores € portas légicas. O circuito gerado nessa etapa nio esté associado a nenhuma tecnologia de fabricagdo em par- ticular, endo esté, necessariamente, otimizado, AA préxima etapa do processo de sintese & a geracdo de um novo circuito @ partir da estrutura no nivel RTL. A diferenga entre 05 dois circuitos consiste nos elementos utlizados, enquanto no nivel RTL so empregadas primitivas genéricas da ferramenta; nessa etapa, 0 citcuito contém unicamente elementos disponiveis na tecno- logia empregada para a fabrieagfo. Assira, € nevessério especificar o dispositivo empregado para a realizagio sive RTL (SEH were eo ctimicagto velociade ra Incodugio 5S dessa ctapa. Muitas vezes a ferramenta pode lagar mao de informagBes adicionais, fornecidas pelo fabricamte do dispositivo, que levam a sintese mais eficiente de médulos especificos para realizar operagdes aritméticns, contadores ete. Una minimizagio ¢ executada nessa etapa e considera dois parianetros geralmente conflitants: otimizagio de custo ¢ otimizacio para velocidade, ‘Como um dos resultados dessa etapa, tem-se uum arquivo contendo uma rede de ligages entre os elernentos isponiveis na tecnologia emprogada. O formato do arquivo depende da ferramenta de posicionamento ¢inteti- _gngdo empregada; um exemplo & 0 formato EDIF — Electronic Design Interchange Format. "As ferramontas de sintese podera fornecer, ainda, um erquive VHDL deserevendo a rede de ligagdes sintetiza- das, e am outro arquivo contendo informagoes referentes 4 temporizacdo considerande @ tecnologia de fabricagio fempregada. Esses arquivos podem ser submetides novamente a um simulador VHDL excitado pelo mesmo con- {junto de estimulos para verficagio do comportamento da estrutura sintetizada com relago & temporizacao. ‘A temporizagdo estimada nessa etapa pode conter diferencas de até 20% com relagio ao circuito real, pois 0s atrasos referentes &s interligagées niio podem ser ainda determinados com preciso. © caminho correto das ligages somente é determinedo na préxima etapa. AA Figura 1.3.4 ilustra as etapas e um proceso de sintese partindo de uma descriclo VHDL que execute 2 80- ma de valores entre zera e sete. Com base ne descri¢io,¢ inferida 1 necessidade de um bloco somadot com trés bits. A ferramenta langa mo da primitiva no nivel RTL que atendda aos requisites —o caso, um bloco somador de més bits. Na segunda etapa, a ferramenta elabora a primitiva no nivel RTI. com os elementos disponiveis na tecnologia escolhid descrigdo VHDL, et potas lor tee aie sie 7 eo 0 i eal met =i ate-0 Seas en 2:0) cotminagse velecta (roa Figura 1.3.4 Fxemplo dos passos executados por uma ferramenta de sintese ‘Com base na rede de ligagdes gerada pela ferramenta de sintese, a ferrarents que reuliza 0 posicionamento ¢ interligagio dos componentes, place and rowte, assenta cade primitiva em um loval do dispositivo enpregado ¢ define o caminho para interligagio com as demais primitivas (vcr Figura 1 3.5). No caso de dispositivos I cos programéveis, as ferramentas de posicionamento« interligagio s20, normalmente, fornecidas pelos proprios ‘abricantes devido as particularidades de cada tecnologia. Cirevitos integrados de aplicagdo especifica no pos- teste do ctcultosinteizador Foramenta de Interigarées defnides posicionamento & interigagso Figura 1.35 Etapa final do projet. Capitulo Um suem grandes variagdes de anuitetura, peraitindo 0 uso de ferramentas de uso geral para esse fim. Informacies referentes a temporizagio e descrigées VHDL da rede de ligagdes podem, também, ser obtidas, A temporizacio estimada nessa etapa ¢ mais precisa, pois a ferramenta dispGe de informagdes sobre o camino das interligagGes «©, conseqiienterente, o atraso gerado por elas. ‘As etapas descritas podem variar, ou mesmo ser omitidas, para diferentes ferramentas de sintese. Fubricantes de dispositives logicos programiveis forever ferramentas que integram virias das etapas, tamando mais simples © processo de sintese. Hssas ferramentas, contude, possuem limitacdes quanto as estruuras VHDL suportadas, ® apenas comandos voltados para sfntese so permitidas. Nesses casos, operagles de teste e manipulagées de arquives no empregam umn c6digo VHDL; elas sio executadas com operagées especificas dos aplicativos, ‘Os modelos de temporizago fornecidos pelos fabricantes de FPGAs — Field Programmable Logic Devices, © ASIC — Application Specific Inegrated Circuits, podem seguir 0 patio IEEE 1076.4 estabelecido no ano de 1995, Esse padi, conhecido também por VITAL, € um pacote que contém procedimenios e fungdes corn 0 ‘objetiva de modelar atrasos com preciso, verificar a temporizacto e notificar violagdes da temporizagio. ‘As ferramentas de sintese e as ferramentas de posicionamenta ¢ interligaedo podem gerar as informagies de teonporizagao segundo o formato SDF — Standard Delay Format. Esse arquivo, em conjunto com a deserig&o VHDL contendo a rede de ligagdes, fornece as informagées para um simulador VHDL para verificagio da tem- porizagao, conforme ilusttado nas Figuras 1.3.3 ¢ 1.3.5. 1.4 Principais pontos abordados +O desenvolvimento da linguagem VHDL foi motivado pela necessidade de um padrio para 0 intercimbio de informagies entre diversos fornecedores de equipamentos para o Departamento de Defesa dos Estados Uni- dos da America + VHDL € uma linguagem concorrente, Os comandos envolvides na ocorréncia de um evento slo executados simattaneamente, assim como os elementos de um sistema digital executam as suas tarcfas conjuntamente. + Uma descrigao pode conter diversos niveis de abstracfio, variando da interligacdo de componentes a uma re- ppresentacao do comportamento do sistema, Os diversos niveis de abstrago podem ser inseridos numa mesma Aeserigdo, sendlo permitidos, também, projetos hierésquices, + A Tinguagem VHDL néo foi concebida originatmente part a sintese, mas sim para a deserigio de citevitos valor naxino aostredos # ‘masc imeoek = 3 oo Vales rine nesersdor L Givbor 3 angsgen (7 aervsaiey —~ Siviae 25-tosmte wy 2728 row ick are, ‘sate do tenpo irelegio! Serene in oir Te Fatatapod unrelsiics mguina see Gr Erm yocroa jo 90.7); 7" aoeteador Sat POUR SET_voSTSR {0.59 73}, "> nowtendse © fax t_placeas ARCHIUNCEURE BLE_type OF & place? 10 SEOME ch + INTEGER RANGE nox DOeWO 02 contador mostrador sroae Se EDHEGER anes mal BomdO 9) Sontaaor mestrador—t staan oy DITHGER #aNG —Siv_pox Domne Op Dass de tawo Laveras - ‘seqnento sostragor: abedstgh -- "0" ative o regrants, ‘coussnar Geos axe_vecuon (7 SOMO C) 2 "EBOEGDLI'; “- cecigo munsco constr Gen BIE ymcvur (7 DoMG U) 12 "4ODLLLLIt; ~~ codigo snimee 1 canetae eed ‘Brrwecron {7 Downe 0} 1 vcoloaisi-; + soalge numero 2 constr es Bre vecton (7 Downs O} != “bousNie4s; ~~ codkgo mutere 2 Gongtane see Liscyucros (7 howe o} := "200120017; —- endige numece 4 cowgtane des | EItLometon (7 bowo | = “pigiot-; —- coatge numezs # Sarerawr asd ELuucton (7 Rowe 0] is “oLdaoG0L", == codigo numece 6 Conta as? Bu ACTOR (7 DowTO 9} := *OOULTILA-; *. enatge aumaes 7 Conant ace Gu_iworon (7 ome 0; l= soodasdad+; "= camige cuore & GOGH dos: BEEWECWER (7 Samo 9) = spgotant+s CC cogige mmers 8 (Scant: PROCESS (ck, reset) TH creset_p ='0') THEN n+ resot aasinoren un zo; LSID (ee EMIT) AND tok “2!) RN == bane Ob tempo azteca EE iy = esvapor 21 THN tence fies divisno do sual ck aves oF Hera conzador incremented Tr nd = eats map + teste fim da contagen icit_2 elise ay Sera contador et] caso en = sax TP teen # mach) THEM oth <= 0; = terte fia da sentagen git h sss. Sth <= eth ots — Sontlnun coneagen digits ec esr “eka <= ott st: -- sentiaua eontagen asais 2 por late hs moc eel os ee oat ms ran - nastredor nals significative apaaedo querdo +O: ‘Quad 1.5.3 Deserigio equivatente ao diagrams de blocos proposto na Figura 1.5.1 (continua). Inwoducio oa © 8 33 34 3 a im aLoce EADIE as eble_ts stock ~ et os ae oer (Quadro 1.5.3 Deserigho equivalenie 20 diagrama de bloces proposto na Figura 15.1 carie1o PRIMEIRO CONTATO COM A LINGUAGEM pico inicial do capitulo & a entidade de projeto por ser, conforme o manual de referéncia da linguagem, # abstracio priméia de um circuito VHDL. Em seguida sto vistos os conceitos de entidade, arquitetura, portas e modos das portas, Neste capitulo sio apresentados, tamibém, as classes de objeto existentes ¢ os tipos ¢ operadores predefinidos. 2.1 Entidade de projeto Uma entidade de projeto, ou design entity, pode representar desde uma simples porta légica a um sistema comple~ to, ¢ €composta de duas partes: decleraglo da entidade e arguitetura. A declaracéo da entidade define a interface cnlre 2 entidade e o ambiente exterior, como, por exempfo, entradas e saidas. A arquitetura contém a especifica- fo das relagdes entre as entradas e saidas de uma entidnde (ver Figura 2.1.1). ‘Uma anelogia normalmente feita com um projeto em captura esquematica, ¢ comparar a declaragio da enti= dade ao simbolo de um bloco, e a arquiterura ao esquema contido no blaco. A simulagio de uma entidade de projeto somente pode ser executada apés a sua compilagho, ¢ 0 resulta- do € armazenado numa bibliotcea, Hbrary. Caso nao seja especificada uma biblioteca especial, o resultado da compilagdo é armazenado na biblioteca de trabalho denominada “ Work ”. Essa biblioteea é, normalmente, um diretério criado pela ferramenta de compilagio e simulagao empregadia, contendo informactes especificas do aplicativo, ieee scare saz | Y =e x “ a sien ‘entidacee de projeto 8 portas Figura 2.1.1 Bxemplo de entidade de projero. ‘Uma arquitetura pode ser descrita por meio de uma interligagio de componentes, de forma aestabelecer uma hhierarquia no projeto (ver Figura 2.1.2). Cada componente deve ser declarado, sendo ele, tambm, uma entida- de de projeto. Descrigdes que empregam esse estilo sio denominadas estrururas, ¢ a complexidade dessas des- crigdes pode variar de um simples registrador, a um processador contend a interligagdo de locos complexos ‘como memérias, unidades ldgicas artmétieas etc, Nao existe limite para o nivel da hierarquia, e 2 descrigao no procisa comter unicamente a interligagdo de componentes, ¢ possivel meselar diferentes estos de descrigdes em lum mesmo eéigo. Primeiro Coniato comaLinguagern 14 Eyam fem aw ravance ors ae ooo emeare rarcatechrex OT ees sniidade 2 prcaté Sa ‘eiicades saligtzdas na forma de componenites Figura 2.1.2 Pxemplo de entidade de projeto Declaracao da entidade e corpo da arquitetura (© Quadro 2.1.1 apresenta um exemplo de uma declaragéo para uma entidade. A declaragio inicia com a palavra reservada “ ENTITY ” seguida do nome que & identifica. A cléusula “ PORT” é empregada para defini 0 modo ¢ tipo das portas de entrada ¢ saida da descricdo. A cldusula “ GENERIC” permite a passagem de informagbes «stiticas para uma unidade de projeto,Internamente 0 parametro é tratado como una constant ‘© modo ce ums porta determina a diregéo € como os comandos na erquitetura podem operar com as portas. A Figura 2.1.3 ilustra os quatro modos possiveis de uma porta Sto eles: “IN7, “OUT”: “ BUFFER; “INOUT”. [Nos modos IN” ¢ OUT ®, hit portas que operam exchusivamente como entrada e sada, No modo "* BUFFER ”, ‘porta opera unicamente no modo saida, diferonciando do modo “ OUT " porque o valor apresentado pode set referenciado internamente pela arquitetura, Uma porta do modo “ OUT no pode, por exemplo, controlar tun sinal inferno da entidade; no caso de uma porta do tipo * BUFFER”, iss0 € permitido, O modo“ INOUT ” ANTI anctaace_sbs 15 sneasc in popmge = 53) PORT (x9, 21 8 bipoas entradas pa our, Epo be Saisae y Burren Capone: peice fo, ea TMD Cipouahy + anerace 7 salde ‘Quadro 2.1.1 Exemple de uma declaragdo para uma entidads. i ite (br woe io : neur—+ 2 oe 2 our our BUFFER "ye INOUT”. Figura 2.1.3 Quatro modas de portas: 12 Capitsio Dois caracteriza uma porta bidirecional onde uma informagio pode ser apresentada ou amostrada. Essas portas sii adequadas para o modelamento de barramentos de dados, onde a informagio pode transitar em ambos os senti- dos. O tipo define as carncteristicas do valor transferido pela porta, ¢ 0 conjunto de tipos predefinidos pela lin- sguagem abordado no item 2.3. (O corpo da arquitetura inicia-se com a palavra rescrvada “ ARCHITECTURE.” seguida de um nome identifi- cador e 0 nome da declaragao de entidade associada. As linhas que seguem podem conter declaragbes de sinais ce constantes, declaragdes que identificam os componentes externos utilizados pela arquitetura, bem como a des- crigo completa de subprogramas que sio utilizados localmente pela arquitetura. Os comandos concorrentes que deserevern a entidade, propriamente, ficam entre as palavras reservadas “ BEGIN ” e " END ~ O nome identificador da arquitetura permite a existéncie de mais de una arquitetura para uma mesma decla- ragio de entidade, No exemplo da Figura 2.1.4, 0 conjunto formado pela arquitetura " prt_e” ¢ a declaragdo dé centidade “ comb" representam nma entidade. Do mesmo modo, o conjunto formado pela arquitetura “ prt_ou™ a dectaraciio de entidade “ comb representarn uma outra entidade, Assim, eada par declaragdo-arquitetura re- presenta uma entidade distinta com a mesma interface. O emprego de mais de uma arquitetara para uma mesma declaraglo de entidade & abordado, com mais detalhes, no Capitulo 14, ARCHITECTURE nome_identificader OF entidade_abs 15 <2 ““jeclaracces de sinais © constantes <= declaracces de conponentes referenciados <= aaeiseacac # conga de sub-progrenss Tl aetinicss de novos Cipos ce deces locais Quadro 2.1.2 Corpo da anquitetura, [arantestre prt = Ofcomb Eriy coms Past 0,81 :In BR 0 Out ain; nd coms; farchnecture pr_ou Of comb bean 130 <= Noll Or Neto, lend: Figura 2.1.4 Duas arquiteturas © uma finica declarago de entidade 2.2 Classe de objetos: constante, varidvel, sinal e arquivo Objetos so elementos que contém um valor armazenado. Quatro classes de objetos s80 definides em VHDL: ‘constante ou “ CONSTANT”; vvaridvel ou * VARIABLE "; sinal ou“ SIGNAL"; arquivo ou FILE”) | Na versdo VHDL-1987 um objeto arguvo 6 um memb ca clstevaiavel, Primeive Contato coma Linguagem 43 ‘A constante & um objeto com um valor esttico, No caso da varisvel,o valor inicial imposto pode ser alterado no decorrer do eédigo, ¢ é empregada em regides de cédigo seqiiencial. Sinais so objetos que podem ter 0 seu valor alterado, e so empregados em regides de cédigo concorrente € seqiiencial. Os objetos da classe” FILE” estio associados & criagio de arquivos, ¢ sdo abordados no Capitulo 13. (0 Quadro 2.2.1 contém exemplos de declaragio de objetos das classes “ CONSTANT ”, “ VARIABLE ” ¢ “SIGNAL *.A sintaxe da declaragdo é semelhante para as trés classes. Elas iniciam com uma palavra reservada que define a classe do objeto, seguida de uma lista de nomes que identificam os objctos. Apés a lista, é declara- do. tipo dos objetos. Opcionalmente, pode ser definido um valor inicial para os objetos através do delimitador Os objetos so declarados nas regides de declaragao de arquiteturas, blocos, provessos, subprogramas ¢ pax cotes, Restrigdes se aplicam, com relaglo as regides permitidas, a determinadas classes de objeto, assim como 4 visibilidade atingida pelo abjeto declarado, Conforme ilustcado no Quadro 2.1.2, ma regiao de declaragies de uma arquitetura podem ser declarados sinais ¢ constantes. Os objetos ali déclarados sto visiveis somente naquela arquitetura, Note que a porta de uma entidade realiza uma declaragao de um sina s+ classe Lista de somes tipo valae saietal epee: -- sonttente ea valor intotat tipone :# velor_inictal: Tipo '= valorsiaiezal? VARIABLE noae_de_vas: sipe_z, 1. 9@1 valor inietat YARIASLE soamade_vavievelld + tipect # volorainicial 1 on valor inieial VARIABLE vari, vas? Upols i= valerzinicial: vein: mean tipo valse SIGNAL — nona_do_sinala 5 Edpo_ys inal son velor iniciat SUGNAL —nene_do_sinal_b 2 Sige. i= valor inietal; -+ Sinal Gon valor inieiel SIGNAL nomex, none_y, nomea ¢ thpeys T pinaie do neaso tipo (Quadro 2.2.1 Declarasdo de objetos da classe constante, varidvele sina No Quadro 2.2.2 so apresentados alguns exemplos de transferéncia de informagao entre objetos das classes SIGNAL ", “ VARIABLE " © “ CONSTANT ”. Observe que a atribuigao de valor para uma varidvel emprega 0 dclimitador igo para um sinal empregs o detimitador sinal2 <= sinalty furtiiene valor para sinal Sinalls 52 variavel tr ipuleae valor para sine] sinal_4 == coneranbe te furibaleas valor para sins ateipuleae valor sera veriavel Steibaleas valor pars versauel Beritulcas valor para variavel varievela = einat_ty constante ts Quadro 2.2.2 Exemplos de transferéncia de inCoxmaiio entre objeto. © Quadro 2.2.3 apresenta uma descticio completa de uma entidade, Na declaragio da entidade sto definidas ‘nds portas, uma de entrada ¢ das de saida. Todas as portas sio do tipo inteiro, “ INTEGER ™. A arquitetura, de- ‘ominada "teste", inicia no linha 6, esto declarados o inal *s1 "ea constante “o1 ”. As operagdes executadas sito simples, o valor presente na entrada “x1 "€ transferido pata 0 sinal interno 81”, que € transferido, por sua ‘vez, para a saida “1°. Bm outras palavras, a porta de saida “ 1” segue a porta de entrada“ xt”, Por sua vez, a porta de snida “21 ” recebe ¢ valor da constante * ct ”, mantendo sempre o valor “ 7 "(ver Figura 2.1.5). ‘Note a segiiéncia dos comandos nas linhas 10 ¢ 11. Em uma primeira anélise, tem-se a impressdo de que o digo apresenta problemas, pois a porta de saida yt ”recebe o valor de“ st “na linha 10,¢ 0 valor da porta de entrada “xt ”€ transferido para 0 sinal “61 ” nurna finha posterior. Entretanto, como esses comandos esto cm ‘uma regi de c6digo concorrente, a ordem como as linhas so apresentadas é irrelevante, Qualquer alteracao de valorem um sinal acarreta @ execugdio de todos os comandos envolvidos com esse sinal, Essa alteragio tem como conseqtiéncia a alteragio de valores em outros sinais, © a operado perdura até-ndo ocorverem mais akeraqSes. 14 Capitulo Dois rary eects 16 Pos (el I Tiveaes: ARCATDRCMURE cesta OF gteih 1 TS course 2 2 ° BB) at ee ots Ae | amp tastes ‘Quadro 2.2.3 Exemplo de uma descrisfo completa. Sigrelst integer: — xt cinbeger,, ———» ot Y.2t Out reger, Constant cfs iteger=7; Figura 2.1.5 Represeniacio esquemitice do cédigo do Quadro 2.2.3. 2.3. Tipos Conforme o manual de referencia da linguagem, um tipo & caraeterizado por um conjunto de valores ¢ umn con Junto de operagdes. Os objetos * CONSTANT ”, “ VARIABLE" ¢“ SIGNAL” devem ser declarados segundo um tipo definido, para que fiquem estabelecidos os valores que 0 objeto pode assumir e as operagses que podem ser realizadas. ‘Na Figura 2.3.1 sfoilustrados 03 tipos disponivets pels linguegem abordados neste capitulo. Na parte inferior da figura so apresentados alguns dos tipos predefinidos empregados na declaraciio de objeto. Os tipos escaleres consistem nos tipos: enumerado, inleito, ponto flutuantee fisico. Os tipos euumerado ¢ in- teiro podem ser designados como tipos diseretos,¢ 0s tipos inteiro, ponte flutuante ¢fisico podem ser designados ‘somo numeéricos. Com relagio a0s tipas compostos, este capitulo se restringe, apenas, a0 tipo * Array” ‘Nao ¢ permitida a transfezéacia de valores entre objetos declarados com tipos diferentes. Caso scja nevessésio re- alizar uma traca de valores entre objetos declarados com tipos distntos, ¢ preciso uma operagio de conversfo, ‘A linguagem possibiita a defini¢&o de avbtipos. Um subtipo delimita uma faixa de valores dentro da gama de valores do tipo. Como um subtipo é um subconjunto dos valores de um tipo, & possivel a troca de valores entre ‘objecos assim declarados. sents — cumeried patios ure Figura 2.3: Tipos VEDI. sbordados neste capitulo. Primeiro Consto coms Linguagem 15, Tipos escalares ‘A Tabela 2.3.1 apresenta tipos escalares predefinidos no pacote padrao. Tipos escalares so ordenados e repre~ sentam um valor tinico, permitindo, assim, a aplicavao de operadores como maior, menor et. O tipo * BIT” ¢ utilizado para representar os niveis ldgicos * 0” ©" 1" de uma Linh digital. O tipo * BOOLEAN ” pode assumir 0s valores “ FALSE ” ou “ TRUE ”, sendo empregade etn comandos que execu- tam um teste ou decisdo, O tipo “ CHARACTER ” corresponde a qualquer caractere do padrio ASCII na versio ‘ViIDL-1987, ou do padréo [S08859-1 na versio VEDL-1993. O tipo * INTEGER” representa umn niimero inteiro dente os limites: -2.147.483.647 a2,147.483.647, Em uma descrigio, caso nio seja definida na daclaragdo do objeto a faixa de valores que o objeto pode assumir, a ferra- Imenta de sintesc pode utilizar linhas de 32 bits para a representagdo do objeto. Por esse motive, deve-se sempre cstabelecer © limite de valores esperado para um uso adequaclo de recursos no circuito sintetizado. No pacote ‘paddo so dofinidos dois subtipos do tipo" INTEGER ”: os subtipos " NATURAL " e“ POSITIVE ”, “Tabela 2.31 Tipos escalares predefinidos no pucote padro. tipo predefinido valor exemplos air um ze0 ne BOOLEAN veidadsiro, Taso ‘on, SALE CHARACTER cearadteres ASCII OMB OTE INTEGER Paes Pa a3, evLTae, Sen7Re, 2411 20.01 NATURAL osxs 2a 123, on7se, Ler7Re POSITIVE exe Pa pose REAL ass x 5 +360" 22s, Lena, 16F7 BB TIME Los, 100 pe, a fe ‘Nota 1“ NATURAL” “ POSITIVE ” sio subtipos “ INTEGER”. Nota 2 Versio VHDL-1993, valores para tipos “ CHARACTER ” estendido para o conjunto ISO8859-L ‘A representagio de nimeros no formato ponto flutuante utiliza o tipo predefinide " REAL".Um valor de um tipo real pode ser distinguido de um valor do tipo inteito pela presena de um ponto decimal. Deve-se notar que 6 tipo " REAL ” nao é, normalmente, supariado pelus ferramentas de sintese devido 8 complexidade das estru- turas cnvolvidas para realizacio de operagies, ( tipo“ TIME " € ums tipo fisico definide no pacote padrto, emapregedo para representar quantidades fisicas, ‘onde so estabelecidas uma unidade base e sucessivas unidades miltiplas desta, No caso do tipo TIME", @ ua: dade base é "fs ", ou 10°s. Os tipos fisicos ndo sio suportados pelas ferramentas de sintese, no caso do tipo “TIME ", os intervalos de empo definidos sio ignorados. ‘Constantes numéricas poder ser definidas em qualquer base entre 2 ¢ 16, segundo o formato “ baseftvaloré Por exemple, o valor * 123 de um tipo inteiro pode ser representado, na base 10, na forma “ 123", e, na base 16, na forma * 16¥78#". A inclusio do caractere " _ entre algaristnos & permitida, e tem o objetivo de faci- litar@ feitura de um niimero va descrigao., Assim, o Valor do exemplo anterior na base 2 pode, por exemplo, set aprescntada na forma" 28114 10114. ‘Tipos compostos ‘No pacote padriio VHDL so definidos dois tipos “ ARRAY " o tipo “ BIT_VECTOR ” contendo elementos do tipo“ BIT”, € 0 tipo” STRING" contendo elementos do tipo * CHARACTER ™ (ver Tabela 2.3.2). Na declarago ‘Neate ext, a classe" ARRAY" & donomioadn como vers, 16 copitulo Dois do um abjeto, o nimero de elementos contidos ne votor é especificad através dos palavras reservadas “ DOWNTO” TO”. A primeira identifica uma ordem descendente nos indices ¢ a segunda o inverso (ver Figura 2.3.2). ‘Tabela 2.3.2 Tipos * ARRAY ” predefinidos no pacote padro, tipo predefinido valor exemplos BIT_VECTOR 10 sige, eI, oF", AY STRING ‘ipo character texto, _‘ineluinde aopaa"™ Signal: Bit_Vestoyo TO 7) = “10tt0011" ‘Signal b BR ector(7 DOWWTO Q) = "10110011" TT ]2]2]e] 211 Tete eT is slelelile|ele de stelileletetete a) aly 2) 08) a a) 0) a0 er Bf} D1) A) BE) BE) et) BIO) Constant: Sting! TO 8) = "Alo mand avi: Sting(@ DOWNTO 1):= "Alo mundet aTi2).J2healsls Tile). dstalse sledelele}eleleye eLelel tel eielel ec 02) 213) ot of of) a7) f8) 06) 4) oA) 6) a8) A) 61) a} KY Figura 2.3.2 Declaragles de vetotes com definigfo de limites, Nomes indexados, parte de vetores ¢ agregado Em um vetor unidimensional os elementos podem ser referenciados através de nomes indexados ou partes de vetores (ver Figura 2.3.3). Na primeira opsdo, a referéncia 2 um elemento é feita identificando-se 0 objeto € {indice do elemento que & colocado entre paténtesis; exemplo: “ a(4)”, “ b(#)” ¢“ b(3)". Na outra opel, € especificada uma parcela crescente ou decrescente de um vetor por meio das palavras reservades “TO” ou“ DOWNTO” ‘No exemplo proposto, o sinal “b” & declarado como um vetor contendo cinco elementos com indices decres contes (ver Figura 2.3.3). A parte “ b(3 Downto 0)” identifica os elementos b(3) , “b@2)", “ b(t)" e“b(O) ", ‘A ordem na identificagao dos elementos deve seguir a ordem dectarada no objeto. Na versio VHDL-1987, uma parcela na ordem contrarta, como, por exemplo, "b(0 TO 3)”, denota uma parte contendo nienhum elemento. Na versto VHDL-1993 isso é um erro. ‘A atribuigdo de valor a(0 To 8) <= bt Downto 0}:” da Figura 2.3.3 pode parecer incorteta, considerando a ‘ordem dos elementos na identificagdo da parte de um vetor. Note que as partes * a(0 To 3)" e * b(3 Downto 0)” ‘seguem a mesma ordem dectarada nos objetos. Nao ¢ um erro atransferéncia de valores entre vetores com orde- nagio de indices distinta. A atribuigdo “a <= 6:", por exemplo, também esti correta, Spal 2.¢: Bt Veetor@ To 4: Signa b,d Bk Vectortt Dow 0: 80 To) parte do vores Bia Sen, Peleman B13 Bewarno 6) == 010% parte do votor ean [10,105,912 -10't — waloe 00020 agregude notseae pocietenal 2b fies!" emineas'0')7 -- Vater 000x0 Sgreqate Sescelacke por nome ‘Quadro 2.3.1 Kxemplos de atribuigdo de valores em vetotes: indice, parte e agregado. novos tipos Conforme comentado no Capitulo 1, a linguagem VHDL permite 8 criagdo de novos tipos enumerados,fisicos @ compostos. A eriagio de um nova tipo pode facilitara letura de um eSdigo, atibuindo nomes especificos para determinadas condicoes. A abordagem dada neste capitulo sobre @ definicdo de noves tipos € muito Ti- rmitada, e visa apenas dar uma inttodueo sobre o tema. A descrigko detathada desse tipico ¢ apresentacda no Capitulo 12. ‘A declaragiio de um tipo é feta através da palavea reserveda “TYPE ”, sequida do nome escolhido para designar novo tipo ¢ a sua especificagto, No Quadro 2.3.2 é apresentado um exemplo para criagdo de uma tipo enumerado a declaragdo de um sinal que emprega esse tipo. Conforme visto, tipos eaumetados permitein @ aplicagio de ‘operadores de relagao como maior, menor, igual. A ordem acormpanha a seqQiéncia daca na declaracdo, o primei- ro valor é considerado © menor, ¢ 0 titimo valor € considerado o maior. TWPR catade IS [pareds, inicio, cate, easez, caso.sl: -- Gaclaracco ao tipo SIGNAL abe + ostado =~ parade: <- objeto anprogense © tine ‘Quadro 2.3.2 Exemplo da criagdo de um tipo enumerado ¢ deeiaragio de um sal 2.4 Operadores (0s operadores definidos so divididos em classes que estabelecem a precodéncia na execugo das operacies. Na Tabela 2.4.1 sio apresentadas, em ordem erescente de ptecedéncia, as classes de operadores. Os operadores ‘de uma mesma classe possuem o mesmo nivel de precedéncis. Paréntesis podem ser empregados para definit a ‘ordem das operngdes, sendo 0 seu uso recomenclavel para evidenciar a ordem desejada em expressdes longas. O ‘operador™ not ” pertence & classe diversos, devido & sua prevedéncia mais elevada; com respeito & sua operagio, cle deve ser considerado como um operadar ldgico. Devido & rigider da linguagem VHDL com relagto a tipos, os operandos de uma operagao so normalmente ‘do mesmo tipo. As excegSes podem ser encontradas nas operagies de multiplicacdo ¢ divisto entre tipos Hsicos, ‘opcragdes de destocamento ¢ operacao de exponenciagao. 18, Capitulo Doi ‘Tabela 24.1 Operadores definidos por classe precedéncia classe operadores menor Iogleos and oF mand ror xO" xnor ‘eladonais = ees éesiocamenta a sea era rol io acigso 1-8 sal + multoleagee +1 mod rem maior verso abs net Nota a: O operador * not ” est inserido na classe diversos devido a sua maior precedéncia, ‘Nota b: As operagies “or”, “sil”, st", *sla",“sra”, “tol” € “or” nfo so definidas na versio VHDL-1987, A Tabela 2.4.2 relaciona os operadores ldgicos definidos na finguagem, ¢ a Tabela 2.4.3 descreve as opeca- ‘des executadas para cada condigao. No easo de operandos do tipo * boolean ", os valores “0” ¢ 4" da Tabe- 4a 2.4.3 devem ser substituldos pelos valores “ FALSE ” e “ TRUE ", respectivament. As operacics podem ser executadas, também, em vetores compostos por elementos desses dois tipos. Neste caso, os operandos devem ser vetores do mesmo tamanho ¢ compostos por elementos do mesmo tipo. Assim, é possivel, porexemplo, realizar ‘operagdes ldgicas entre tipos “bit_vector”, Tabela 2.4.2 Operadares lgicos. operadores operando L operand A retoma not it mesmo tpo de L mesmo tbo deb and oF x0r boolean ‘mesmo po oe L mmeame ipo de L rend nor xner ‘eter unidimensional com lomenios dotipa Rau | mesmo tipo de mesmo ipo de L Booiean Exemplos: 2<=xANDY; sina_k-<=NOTvar_al; x1:=a OR NOT; Nota a: © operador * not” pertence & classe diversos e possui unieamente o operand L. Not : O operador * xnor "nfo é definido na verso VHDL-1987, Tabela 2.4.3 Deserigio das operagbes logices. L R not | LandR | LrandR | LorR | LrorR | LxorR | Lxnork 7 1 0 7 0 1 ° 3 1 7 c 0 2 1 1 0 1 o o 1 1 0 7 1 0 1 o o ° 1 e 1 2 1 o 1 Primeiro Coniate comaLinguagem 19 (Os operadores relacionais dispontves testam a igualdade, desigualdadé¢ a ordenagto entre dois operands (vee Ta- bela2.4.4), Os operandos devem ser do mescno tip ¢ o resultado é um valor do tipo * Boolean. A operacio pode ser cfetuada entre vetores com tamanihos diferentes, ¢€realizada da esquetda para a dirita com os votoresalinhados &es- querd, Para exemplos de operagdes relacionas entre vetores com dimensies distntas (vet Capitulo (1, fem 11.3). ois valores do tipo escalar sio considerados iguais se tiverem o mesmo valor; no easo de tipos compostos, para cada elemento do operando “ L” deve haver um elemento igual na tesa posigao do operando "R.A Figura 24.1 ilustra exemplos de operadores relacionais entre constantes do tipo" BIT_VECTOR ™. ‘Tabela 2.4.4 Operadoros relacionais:igualdade, desigualdade ¢ ordeasco, operadores operande |. operando FL retomma = ‘qualquer tipo | mesmo tipo de L boolean >< e ‘qualquer tipo escalar| ‘mesma tipo do L boolean ‘velor unidimensional com ‘mesmo tipe de L boolean ‘elementos do tipo inter ou enumerado Exemplos: IF x/*y THEN... WHILE NOT z= valor final conatarta: tt Vacr0T95) ="YO20r Const BiLMasn(3 Comat 2 TT2]e] 6 " gisitly 4 a at ‘ccna Vek To 3) 1010" TT ye eT] 272 slehile etelele ae) at ol) 9) of) ot 0) ‘Figura 24.1 Opstadores relacionais— exemplos. Os operadores de deslocamento aritmético, deslocamento légico erotagto nto sto definidos na verso VHDL.~ 1987 (ver Tabela 2.4.5). O operando da esqueria pode ser qualquer vetor composto por elementos do tipo“ bit™ ‘ou * boolean ”. O operindo da direta, que define o valor do destocamento ou rotagdo, € umn valor inter. As Fi- _guras 2.4.2 ¢ 24.3 ilustram o comportamento de vetores para diferentes casos. Nas operagGes de deslocamento, tum clemento do vetor & descartado, ¢ um novo elemento & inserido. Nos deslocamentos aritméticos, “sta” ou * ra, o elemento mais a dreta ou mais & esquerda do vetor &repetido nas posicdes vages. No caso de um desloca- mente légico, “sl” ou sri", um novo valor ¢inserido: 0 valor mais 8 esquerda do conjunto de valores definides para o tipo. Por exemple, para um tipo “ BIT” 0 valor “0, para um tipe “ BOOLEAN " o valor * FALSE” ‘Com relacio a sintese de circuitos empregando esses operadores, deve ser considerado 0 custo de implemen- taco, Para valores de deslocamento constante, 0 custo de implementacio ¢ minimo, apenas interligagtes reali- zam a opetagao. No caso de valores ndo-constantes, o niimero de portas pare realizagdo da logica combinazionnl pode ser considerével, conforme o tamanho do vetor eas opsbes de deslocsmento.. ‘Tabela 2.4.5 Operadores deslocamento - VHDL-1993 somente, operadores operando L operando R retomna Si sti la sia rol 1or Vetor uiamensional co Integer resmo tipo de | elementos bit ou boole: Exemplos: 2<=xSLL1; sirel.a=xROR n shit, 20 Capituto Dois sia sie arte a shite egies! 22 site seine 8 shi io oes 0 ° False Foe, 19 ei ight artreie tl sit ight gia sa shit ighlartmatc st sh ight gia uy 1 pw —— Fee J". — —= deslocamento 20 destocemerto <0 Figura 2.4.2 OveragBes de deslocamento légico e aritmético, wasn HF rk — desloosranto <0 Figura 2.4.3 Operagies de cotagio, 0s operadores ds classe adigilo “+” e*-* sto definidos para qualquer tipo numérico ¢ correspondem sos operadores mateméticos de soma e suibtragio (ver Tabela 2.4.6). © tipo dos operandos deve ser © mesmo, Na operagao de concatenagdo “ &”, 0 resuitado é um vetor de tamanho igual & soma do tamanho dos opetandos. A concatenacio pode ser executada entre vetores, entre vetores ¢ elementos, ¢ entre elementos, Os operandas ¢ o resultado devem ser do mesmo tipo. Tabela 2.46 Operadores de adigho. operadores operando L operando Fi retorna + tipo numero ‘9 mesine toe de L mesino tbo veto urieimensional mesmo veter de L vetor mesmo too & vetor unidimensional elemento vetor mesmo tbe elemento ‘eter unig mensional vyetor mesmo tiso elemento elemento velor Exemplos: zmxet; sexy Nota: Na operagio “ &” os vetores ou elementos devem ser do mesmo tipo. Os operadores da classe sinal, identidade e negacdo possuem 0 mesmo significado dos operadores materad- ticas equivalentes, Eles podem ser aplicados para qualquer tipo numérico, ¢0 valor de retorno & do mesmo tipo (ver Tabela 2.4.7), ‘Tabela 2.4.7 Operadores aritméticos idemtidade e nego, operadores operando retoma + ‘qualquer tipo numérice mesme tipo Exemplos! a= Primelso Contazo coma Linguagem 20 0 operadores de multiplicagio e divisdo sio definidos para operandos intetos ¢ reais, ¢ o resultado ¢ do sesmo lipo (wer Tabela 2.4.8) Os operadores “ mod “rem” sto definidos para tipos inteios,¢ o resultado ¢ de meemo tipo. Operagdes com tipo fisicos sio também possives (ver Tabela 2.49), No caso de mulipicasio, Spetagdes entre ut tipo fsico © um tipo intro e entre um tipo fisico e teal sto permitidas. O resultado sre sempre in tipo Fisico. Quanto a divsto, um tio fsico pode ser dividido por um tipo inteiro, real ¢fisico, Nes dois primeiros casos, o resultado & umn tipo fsico, eno itino caso é um tipo inteiro, "Tabelo 24.8 Operadores aritsstions muitiplicasto. operadores operando L ‘operando R retoma “7 ‘qualquer po ntoger ad mesmo tho qualaver tipo real mesmo Ho ‘aarno tbe mod _ tern ‘qualquer ipo integer ‘earvo Upo mesmo HP Exemplos: Ldvs<=1/q rem = REM “Fabela 2.4.9 Operadores multiplicagte e dvisio com pos fisicas operadores operando L operando R retorna usleuer tipo physical integer ‘mesmo fpo 86 . ‘qualquer ipa piyseal real rnesme Upo deb ‘reoer qcaque ip paysical mesmo tipo do ‘eal qualquer tipo physicat mesmo 9p0 de R ‘ualquor tino physical integer inesmo ipo de L , ‘alae tipo physical ‘eal resto tipo 66 L qualquer po phsical ‘mesmo to ineget ‘A operagdo™ abs, valor absolut, pode ser aplicada para qualquer tipo € retorma o mesmo tipo (ves Tabele 2.4.10}, Exponenciagdo, "**", pode ser aplicada em tipos inteiros reais, com expoentes do tipo inteiro, Para expoentes eom valor negativo, 0 operand em que es send aplicada a operagio deve ser do tipo“ eel" ‘Tabels 2.4.10 Operadores da classe diversos. operadores, operando L operando R retoma abe ‘qualquer pe numarico rnesine U9 = qualquer tip integer integer mesmo ipo deb ‘qualquer tipo real integer ‘mesmo Up do Exempios; — sinal_a <* ABS(-1.7);varb = # "2; 2.5 Exemplos de utilizagéo ‘A deseriggo do Quadro 2.5.1 permite verificar as possiveis formas de deserever valores para tipos * INTEGER oS REAL.” No exemplo, 0 valor inteio 11" &representado em diversas formas ¢ bases muméricas. Quanto as pores de sida, sio apresentadas algunas opdes para defini os limites gue os valores podem assum (ver 22 Capitulo Dois linhas 2 a6), Esses limites, no caso de descrigdes voltadas para sintese, so importantes, pois definem para a fer- ramenta de sintese 0 menor niimero de bits necessério para representar todos os valores que a porte pode assumir, A descrigio contém constantes do tipo “ REAL ",o que inviabiliza a sua aplicaciio para sintese, pois nevessitaria de uma estrutura de ponto fiutuante pera a representacio dos valores. 2|"hor (sled "sour summase manor 990 311 3 igielt | ou Glnmen RAWE Si DaWNZD Cr a elsjei6,cl7 + ovr anmeisn marge “15 0 15, 5 Sclveri OJ! BBL RUDE 0.0 0 31-6 é Seliert | OU? REAL RAI Si-0 BeWeT0" 0.0) a0) “coxorane cas neous c= ta 1] cast (2: mmece “= ioraae, 42) catemawr 12 nimgoen “S Zecuortey 33] comexanr 2 nimesen <2 24czCon te, St) coxsmsn is | asces = eate, 3s] cowstarr 6 earenal “= nase Te) Cowemawr a7: POSITvR <= Lo#DP: us is] consmure 22 5 Rene sie, 1 20] Covomnwn <3 5 BRA 22011, 08; is 21] Cowsae ee Bex ese; 11, base B formato na.as 22] _coxsmann rs: RAG St L64B-0F, 11, Bese 46 24] Mein <= 2) 652 = 42; 083 «= 43; oth oe Ads CLS ee 15) ci ee AG: AT ee oT 2:| fa a) Sa oa oe la) Ge ‘Quadro 25.1 Atribuigio de valores em sinsis — tipos * INTEGER ” e“ REAL”. A cntidade do Quadro 2.5.2 representa um conjunto de einco portas de safda, “81 " a“* 35”, todas contendo ‘o mesmo valor. Na definigio do valor de um objeto do tipo“ bit_vector ”, € assumido que o valor esté expres- 0 na base dois (linhas 11 ¢ 12). No easo de uma base diferente, deve ser inserido um earactere identificando a base antes da aberture de aspas que contém o valor (ver linhas 12 e 13). O valor de um objeto pode, como n0 ‘caso de um objeto do tipo inteiro,incluir entre os elementos o caractere “_” para facilitar a leitura da descrigio (ver Linke 12). Nas linhas 14 ¢ 15 © valor &atribufdo a uma parte do vetor, Note que a ordem que define a parte do vetor, crescente ou decrescente, deve observar a mesma ordem da declaracio do vetor. Sea parte de “ 85” na linha 15 fosse alterada para "0 TO 2°, ocorreriam alguns problemas. Na versio VHDIL-1987 seria gerada uma mensa- gem de erro ns fase de simulagao, pois estaria sendo atibufdo um valor com trés elementos para um yetor com ‘um niimero de elementos igual a 2210. Na versio VHDL-1993 seria gerada uma mensagem na fase de compila- fo (ver itetn 2.3, 2 OUP BYE vue (@ LOWE 0115 TBEt_WECHOREL DoWMG 0) := "01011", == constants 2 2 Jancersucrine teste OF stds 1S é 0 voter atcaves ae constants a weiss (01011) @ivero = bace Binaria con separadorse 2 BLL Go} coueacensdo oom velor pexseseinal (2041 a vale: (0D), parte do vetor Selor (610), "paste do veto com comestenacns Quadro 2.5.2 Exemplos de stibuisto de valores em sinsis — tipo vetor, Primeiro Contato coma Linguagem 23 No Quatro 2.5.3, sio apresentados exemplos de atribuicio de valor para vetores empregando agregados. Os sinais “ 92" ¢" 94 " tém o valor de cada um dos seus elementos especificados por expresses empregando a notagiio posicional. Nos sinais “ 83.” e “ 85” a atvibuigio ¢ estabelecida pela associagio de nomes. Note que possivel delimitar um conjunto de elementos que recebern o mesmo valor (dectaragho * 4 DOWNTO 3" na linha 12). Observe, também, que o valor de urn dado elemento pode ser resultado de tuma expresso Coperagio “um OR '0'* na tinh 11. BCIy stead as BUPRGREIe2, ai, st, 95 + OUT BITLVECTORLA GoWNID 219) 3 | ma scan 5 sncirsecrune ceota oF ect Te Bb) ed ce 0, n ero, 'e", a "pour ‘Quadro 2.5.3 Exemplos de atribuigdo de valores em sinais do tipo vetor — agregades. Na descrigio do Quadro 2.5.4 so apresentados varios exemplos de atribuigdo de sinal através de ex- presses com operadores lgicos. A incluso de paréntesis em muitos casos & necesséria para identifica a precodéncia das operagGes. Em uma expressao logica a operagio “ c ” tem precedéncia sobre uma operasio * ou", Por exemplo, na expressiio eserita na forma “x= y.z + w”, esté implicito que a operacio “ y.z” & exe- ‘cutada primeito. Como em VHDL todos os operadores lgieos, excetuando “ not, tém a mesma procedén- cia, deve-se empregar paréntesis para indicar a ordem desejada nas operegdes. A atribuigdo da linha 8 esté correta, pois o operador “ not” tem precedéncia mais elevada. A linha 9 esté também correta, pois nao 540 rmisturados operadores diferentes. A linha 10 gera uma mensagem de erro na compilacao, pois a operacto ambigua, uma opgdo correta é apresentada na linha seguinte. O mesmo é vilido para as linhas 32 ¢ 13. Na linha 14 ocorre um outro problema: apesar de a expresso conter os mesmas operadores, ela nao & valida, Deve-se lembrar que a operacio “x nand y ” equivale a“ not (@ and b)”, ¢, portanto, a ordem na aplicagio das operagdes importa, a} mwrary staxon 12 a] textes, br on &

UALUE, FRR, PAIS: 13) goteie eer abit 12) norwait <2 abe SONR a pity Te] not_voet s+ mon aboot: 13] _Snozrwoon S= A eel SHOR 2 pool: Quadro 2.7.3 Deserigio segmdo a versio VHDL-1993. 2.7.7 No Quadro 2.7.46 apresentada uma descrigie com problemas. Mentifique as linhas com erro ¢ propone uma corre- af mmore erraaa 1 2) “wow (abr er as 1 pom 3 ? 2 Gur SERLVECTOR (5 DOMME 0}; a} eo reads 5 | sncmarwerune veete oF erzaa.a 1S B] ric) <= a mm bone aD a 8] eu) <2 2 sue enon ey 10] £02) Sam bore 13) 5) Sl Serta arp bp Kano or 1a] eta) 2 akon" om p ‘Quadro 2.7.4 Descrigo comtendo erros. 2.7.8 No Quadeo 2.7.5 apresentada uma outra descrigao com problemas, [dentifigue as linhas com erro e peoponive mt eorregho 2 maey ene 2 28 3) TEE EE SBP om exeseson 10 m0 ot : {ncaneeine acca ov wera 8 TE wo 2) wee bess i) tant Who ISS sone, A) SORE igne 5 ‘Quadro 2.7.5 Outra descrigio contendo erro. CAPITULO COMANDOS CONCORRENTES BASICOS Jonforme visto, 08 comandos concorrentes presentes em um e6digo sdo executados conjuntamente, ¢, por iss0, a seqigncia como sao apresentados & irelevante. O capitulo aborda umn conjunto bésico de conandos ‘concorrentes: attibuigao de valor incondicional, stribuigdo de valor condicional, blocos ¢ processos. Esse con- junto permite gerar cédigos descrevendo circuitos com alguma complexidade em um nivel de abstragdo mais elevado. Além desses topicos, € apresentado o atraso delta empregado para o simulador avaliar as iteragSes Te- sultantes dos comandos concorrentes 3.1 Atraso delta A Em uma regio de eddigo concorrente, a ordem das comandos no cédigo niio deve interferir no resultado final da simulagdo, Para isso, o simulador nevessita de um atraso intecno, denominado A, de modo a coordenar a avalia- ‘oo de eventos que ocerrem no mesmo instante, Esse intervalo de tempo & nulo, A=0. Durante urna simulagl0, .valteragdo de uma condigio do cireuito pode ativar um ou mais comandos do cédigo. Para todos os comandes ativados, 0 resultado é transferido 1A aps. A nova condicio pode ativar novos comandos, ¢o processo se repete por sucessivas iteragdes até atingir uma condicSo estivel. 'No Quadro 3.1.1 6 apresentado o eddigo de tma possivel descrigio para o cireuito da Figura 3.1.1. Note que 4 posigdo dos comandos procura evidenciaro cariter concorrente dos comands, Em uma linguagem seqiencal, ‘0 comando da linha 9 deveria ser apresentado antes do comndo da linha 8. BIrIRY sig_test 12 Sb, 2e POFEER BIT); ‘ai oie tao) ‘Quadro 3.1.1 Descrigdo para estado das iteragdes do simulador. © resultado da simulacdo ¢ as iteragdes decorrentes do processo de simulaclo so apresentados na Figura 3.1.1. A condigto estavel do circuit é alterada com a muclanga do valor do sinal “sa” em t=10 ns. O novo va- Jorem “5a” ocasiona o agendamento de uma modificagdo no sinal “sb em ¢=10 ns +A, Apds a ocorténcia da primeira iteragdo, o valor de “ sb" ¢ alterado para 1", acarretando o agendamento da troca do valor no sinal “seem t=10 ns +24, Apds a segunda iterngfo, em t=10 ns#2A, 0 circuito atinge uma condigao estével, © ne- rshuma nova iteragio & agendada. Como A =0, a condigdo final visuatizada na safda do simulador cortesponde ‘carta de tempo apresentads no lado direito da figura ‘Comands Concarrentes Bisicos 29 Figra 3.1.1 Exemplo de iteragfos — caso 1 ‘Na Figura 3.1.2 € apresentado um outro circuito para analise das iteragdes,¢ 0 sou o6eligo ¢ daserito no Qua dro 3.1.2. 0 circuito proposto pode ser redesenhado para um circuito equivalente, considerande que uma porta “ ou-excusivo ", com uma das entradas em nivel lbgico alto, inverteo nivel Kgico presente na sua outra entra~ da Caso a entrada “ 2" do cireuito passe para o nivel logico |, a porta e” transfere o sinal " y™ para uma das entradas da porta “ou-exclusivo”, Dessc modo, temos a porta “ ou-exclusivo ” operanda com um inversor cuja saida & conectada & propria entrada, Como o atraso entre a entrada e a saida & nule, a simulagao desse circuito acarretard uum mimero infinito de iteraydes, seguindo a seqiéncia apresentada ao lado direito na Figura 3.1.2 espe twp | 2 x y ay o [oo 4 wo |@o 14 ron | Dt se ppd. tora [4 | sosa | 1 Cfo sows | 1 0 314 crc eqaatonte tesa | 1 GF Figura 3.1.2 Exenpio de iteragtes — caso 2. Bey BUFFER TTI: a op dais: ‘Quadro 3.1.2 Cédigo VHDL pars teste ée iteragies Os simuladores, normalmente,limitam © némero méximo de iteragdes ¢ abortam a simulagi, caso uma con- digo estivel nunce seja atingida. O Quadro 3.1.3 apresente a mensagem gerada devido a simulagio do exemplo da Figura 3.1.1. foo* areors (velm3602) Therstion Lait zeached ar time 10 ns. ‘Quadro 3.1.3 Mensagem devido a0 uimero de iterasies te sido atingido, 30 Capitulo Tes 3.2 Atribuigdo de valor para um sinal A atibuigdo de wm valor a um objeto da classe sinal pode ocorrer tanto em regides de cédigo concorrente come em regides de cédigo seqitencial. Uma atribuigto ocorrendo num dea de comandos concorrentes é considerada ‘como tal, ¢, portanto, a ordem dos comands é irrelevante, Conforme visto a atribuigso emprega o delimitador “ <= ”, ea informacio pode ser originada de um outro inal ou expressto (ver Quadro 3.2.1). Tinguagem VHDL é rigorosa com relagdo a operagtes envolvendo tipos diferentes. Transferéncia de valores entre objetos de tipos diferentes nlo & permitida sinal_destino.a <= sinai_foates = tipo do einsl_éestine.@ = tipe do sinel_tonte pinaladesting.b <= singin OF wins) yr Quadro 3.2.1 Exemplos de atibuig inoondicional de um valor pasa us sial ‘Na Figura 3.2.1 & apresentado o diagrama esquemstico de uma possivel implementaco de um circuito de selegdo de quatro entradas para uma saida. As entradas so denominadas "iz" 213, ea sida = Gt" Ne Guare 3.2.2 apesentado codigo deserevend 0 esguema proposto nes figura A descrigao en prega apenas uma transferéncia de sinal, determinads por uma expressto Iogica, O uso de paténtesis ¢ necessério devido & igual precedéncia dos operadores “ AND” e " OR”. oo _ [mae » ‘ a1e0=01 2 120210 B 5 foe aie —— so-0 [g, ES Figura 3.2.1 Dingrama de bloco © esquemitico de um circuit de selegto 4/1. 30, at) aw Bet bee En, 3 7) ascasepszune nivel_togics oF mux_0 18 5] ae <= (40 ap wor sa aNo Nor 0) on ra (Ea Me nor et an ea) oe u 12 AND aL AND KO #0) OF a ee eee) 13) exw asvodtoaseos Quadro 3.2.2 Fxemplo do cédigo de um circuito de selegto. © Quadro 3.2.3 apresenta uma outra descrigdo para 0 mesmo cireuito de selego que tem como objetivo ex- plorar as caracteristcas de uma regidio de c6digo concorrente, Nesse cédigo sto definidos sinais internos para escrever as aperagSes das quatro portas “ e” do esquema proposto na Figura 3.2.1 (ver inka 8). A eoncorséncia na execugao dos comandos pode ser verificads, por exemplo, na atribuigio do sina “ ot” que ocorre na linha 10 do cédigo. No caso de uma linguagem de programagio convencional, onde os comandos so executados Comandos Concorrentes Bisicos 31 soqilencialmente, o sinal “ ot” receberia 0 valor da expresso antes da atualizagao dos sinais interns * int" “int ", * intZ” @ * int ", o que nao seria razofivel. Como as atribuigdes esto numa regido de cédigo concor- rente, elas so executadas conjuntamente, de mocio similar a componentes de um circuito, Assim, a ocorréncia de um evento num sinal acarseta a avaliagio de todas as expresses que contém esse sinal. Essas expressdes devem ser reavaliadas gerando novos valores, Essa operago gera novas iteragdes até que seja afingida uma condigio estavel. ereTy mux 00 18 BORD 's0, ai, 42, 320: DU ee BND mex 86 . ARCULMESTORE vote OF eux.00 19 SIGNAL ant, 2t1, L8C2) LAS + Bute 12| fen 20 $3 axe wer 91 da a ‘Quadra 3.2.3 Sogundo exemplo do cédige de um circuito de selegio. 3.3. Construgdo * WHEN ELSE” ‘A construgo “ WHEN ELSE ” permite a transferéneia condicional de um sinal, ¢ segue o formato ilustrado no Quadro 3.3.1. Nessa construgio, uma lista de opodes ¢ apresentada estabelecendo qual valor de uma expresso deve ser transferido a um sinal de destino. A primeira condigo que retorna o valor verdadeiro define 0 valor que € uunsferido para o sinal de destino. ~ eondicas 2 * verdadeire 2 Verdagears ~ Reniune concicas verdadeiza sinal_destice <= expresso 2 MIE condicao_{ SiS Gepressao.b WHEN eoedica 2 SiSE Quadro 3.3.1 Construyo “ WHEN ELSE ” ou atribuigdo condicional de sina". © Quadro 3.3.2 contém algumas linhas de cédigo que ilustram a construglo “ WHEN ELSE”. O sinal de destino * 80 pode receber dizctamente o valor dos sinais “iO ”, “1 " ow o resultado de uma operas 1ogica centre esses sinais, As opoGes de escolha so definidas por expressdes que retornam um valor booleano. Como 2 construglo * WHEN ELSE ” define uma prioridade na ordem das opgdes, o citeuito equivalente corresponde ‘uma cadeia de seletores (ver Figura 3.3.1). Cada seletor € comandado por blocos que detectam as opgdes; ‘caso a ops seja verdadeiea,o seletortransfere o valor de uma expressto, caso contririo,transfere o valor de um outro seletor. eo <= 40 OR LT WER ene £0 pup $1 WEN ne= ies ‘Quadro 3.3.2 Parte de um cbdigo empregande a construséo " WHEN ELSE” Capitulo Tets ” fee > wrens _— " ee ee oH vate =o oo ‘seconds «STR Ta} 2s into zq7 Figura 3.31 Circuito equivalente a0 eédigo do Quadro 3.3.2. No Quadro 3.3.3 € apresentado um cédigo completo empregando a construgio “ WHEN ELSE ” para des- crevero circuito de selegio proposto na Figura 3.2.1, Neste caso, a descrigo possui um estilo mais préximo do comportamento do cireuito. 2] Shon or wie s2, 2s ae any ‘ et oon BITS; 45) anceunmovuRe ceste o” sua 16 5] "oe s= io sim ste "0! 28m eoe'a" use Fa H2 HEN is “0! dD E61 BLE n 12 sien aie 2" GNb soc" ELSE ‘Quadro 3.3.3 Circuito de selegéo erapregando a construgto “ WHEN ELSE”. 3.4 Construgio “ WITH SELECT” A construgio “ WITH SELECT ” transfere um valor a um sinal de destino segundo uma relacdo de opedes. Todas as condigdes de selegao devem ser consideradas,¢ elas devem ser mutuamente exclusivas. A lista de opgGes nes- sa construgao ngo contém uma prioridade, como se observa na construgdo “ WHEN ELSE ", Essas construgdes, seguem 0 formato apresentado no Quadro 3.4.1 ‘As opcdes podem ser agcupadas através do delimitador “|”, equivalendo, neste caso, a uma condigfo ou" centre elas. De mado semethante, as palavras reservadas “ TO ” ¢ “ DOWNTO " podem ser empregadas para deli- ‘itat uma faixa de condigdes de um tipo escalar, A palavra reservada “ OTHERS " é valida, como titima alter- nativa, para englobar as condigGes restantes. ‘conden ‘Sondicesd? Sondiear.3 ov eonéiese ‘Quadro 3.4.1 Construgo“ WITH SELECT ” ou *atribuigdo selecionada de sina" Comandos Concorrentes Bisicos 33, O valor de retorno da expresso de escolha deve ser um tipe discreto ou um vetor unidimensional. Uma ex- pressio de escotha tendo como retorno um valor do tipo nfo-disereto como REAL, por exemplo, nfo évilida, pois o mimero de opgdes de escolha éinfinito. Uma boa prica de programagio é manter a expresso de esco- Tha simples. Expresses complexas devem ser avaliadas isoladamente, ¢ o resultado transferido para o campo dda expressao de escolha. ‘No Quadro 3.4.2 é apresentada a parte de um eddigo contendo dois exemplas com construgéo * WITH SELECT ™. No primeiro, a expressfo de escolha € o sinal “ sO ” do tipo * CHARACTER”, © as condigies de escolhiilustradas so do tipo: ‘nica, uma ou mais condigées, faxa de condigSes e condigBes restantes. No se- ‘gundo exemplo a expressio de escolha retorna um valor do tipo BIT”, as duss condigdes de escotha possi- vis sio apresentadas. Como a construgio nfo identifica nenhuma prioridade nas opgdes, 0 citcuito equivalente corresponde a um cireuito de selego Comandado por um decodificador que detecta a8 condigdes contidas no comando (ver Figura 3.4.1). inom decreyceate Ge coadieaes condicoas sestences (RUD DL AKP D0 SELECT —— bh @ 20 tipo Br SL <= 40 WN "Oy fn wae 25 ‘Quadro 3.4.2 Parte de um e6sigo contendo construyes “ WITH SELECT". = L-- roa ed i= = : = faa = Figura 3.4.1 Cirexito equivalente aos ebdigos do Quadra 3.4.2. No Quadro 3.4.3 ¢ apresentada uma nova descric#o para o circuito da Figura 3.2.1. Na declaracdo da entidade as portas de entrada responséveis pela selegao foram concatenadas no sinal interno denominado “ sel ”. 1850 5 dove ao fato de que uma operagio de concatenagio na expressio de escolha nao é valida. Observavdes pestinen- tes expressio de escolha sio apresentadas n0 Capitulo 4. 34 Capitvio Tes i a Poon 1s) a] Seacesn eel © BI¢_Vacese 11" DOMMTO 01 3] apse 25] "eal & ote ear | “or < 10 ecm -oor, a Ame 00 a5, 43 weet one) Quadro 3.4.3 Circuito de seleglo empregando a construgio * WITH SELECT". 3.5 Comando “ BLOCK” (© comando “ BLOCK " tem a finalidade de dividir 0 cddigo em regides para facilitar 0 entendimento da deseri- ‘0. Sinais podem ser declarados no interior de um bloco, ¢ a visbilidade destes é restrita ao interior do bloco. {A divisto do cddigo ndo interfere, natucalmente, no circuito sintetizado. Essas declaragées seguem 0 formato apresentado no Quadro 3.5.1 ‘efinicas de sinais visiveis no bloce peo ‘conandoe Np LOGE nome_zotalor ‘Quadro 3.5.1 Formato de um comando * BLOCK *. [No Quadro 3.5.2 ¢ apresentada uma nova descricao para o circuto de selegdo visto nos itens anteriores. Esse cédigo no visa ilustrar a melhor maneira para descrever 0 circuito de selecdo, mas, sim, um possivel emprego do comando “ BLOCK”, ¢ evidenciar que os bloces sio executados concorrentemente, O bloco “ det” identifica (qual entrada deve ser transferida para a sada. O resultado & transferido para osinal visivel apenas no interior do bloco denominado “ intome def ”,¢ o valor contido nesse sinal & transferido para o sinal * global ”. No bloco “abo é executada a transfecéncia do valor contido na entrada selecionada para a saida* ot” Comandos Concorrentes Bisieos 35 enrany nox $18 2) Sone Tie, it, 42. 420 2k aLey — entendae 3 ‘eh [i BMaarn pope 2 pow 0; == seinces a oe fom amnr cr Sasa 3] a0 muss ‘ 5) ancprvectes com block OF woes 15 a|"Stowak global? BEEvacroR’s 40 10s bes Bic “Et wish Global = "OL" ZOSk {EMD BLOCK abe: es: OK "eicman interne Se€ + BEF VECTOR(O; TOI} == Ween! eel SREECT inal vistvel no Dloso dof -19" SME 2 lopsl <= interns det: " mm consisehs Quaidro 3.5.2 Cirevito de selegdo empregantlo 0 comand“ BLOCK". ‘Um outro emprego do comando * BLOCK *é desabilitar sinais no interior do bloco segundo condighes defini- dos por expresses de guarda (ver Quadro 3.5.3). A expresso de guarda retorna um valor boolean, Na condigéo falsa dessa expressio, um sinal que recebe um valor condlicionado a uma expressio de guard fica desconectado da expressio que 0 aciona. Com relago a sintese, essa desconexao pode ser interpretada como uma contigo de alta impedincia ou manutengdo do valor anterior. Para ser interpretada como uma condigao de alta impedancia, 0 sinal deve ser declarado como tipo “ BUS"; caso contririo,¢ inferido um clemento de meméria sensivel a nivel, fou Jaich. Com relagio & inferéncia de estados de alta impedéncia, ¢ necessério, ainda, o emprage de tipos com Fangio de resolugdo, topico a ser abordado no Capitulo 10, pois um sinal em VHDL nao pode ser acionado por mais de um controlador simultancamente, ‘Deve-se notar que as expresses de guarda nflo slo aceitas por muitas ferramentns de sintese, ¢ sio consie- radas, atualmente, obsoletas. Os tipos “ sat logic”, apresentados no Capitulo 10, sio mais adequados para defi- nigao de condigées de alta impedéneia, além de serem aceitos pela maicria das ferramentas de sintese, one_sotulo: BLOCK expressao, guaxca Sojetinicas de sinass vsaivels no blocs ‘lose <= GUARDED expresso! RD BLOCK none _robute: Quadro 3.5.3 Formato de um comsando “BLOCK” com sinai de guards. ‘No Quadro 3.5.4 & apresentada uma pequena doscricdo contendo uma expressio de guarda. A descrigio cor responde a um faich controlado pelo sinal “ enb ", Oesultado da sintese dessa descrigdo ¢ apresentado ma Fi- gura3.5.1 36 CapinuloTees| 2] hoes aase saw aor 3 Suan om Binh | a sxsokcor é|ancerrecninn teste oF lock 0 2 ° sack (enh = 31 : a8) Sta <= guneane 0) Quadro 3.5.4 Descrigio eprogunde uma expressio com para, of si oD Figura 3.81 Circuito simetizado a partirda deerigio do Quadro 3.54 — nivel RT. 3.6 Comando * PROCESS” Um processa permite definir uma dren contendo comandos sequenciais. A palavra reservada " PROCESS ” iden- tifica o comando conforme o formato apresentado no Quadro 3.6.1. Um provesso & composto de duas regides: + parte de deciarasio; * parte de comandos seqienciais. A primera regio & o local para a declaragSo de tipose subtipos,constantes,variveis, entre outros, A decli- raglo Ge sinais nfo & permitida, A segunda regio, apés a palavra reservada ® BEGIN ",iniia area contendo ‘comandos seqilenciais que representam o comportamento de uma parte ou de toda a descricio, ‘A palavra reservada “ PROCESS " pode ser amtecedida de um rétulo qualquer, e ser seguida de urna lista de sensibilidade, Essa lista define a quais sins o conjunto de eamandos contido no processo & seosivel. Isto € ocorrendo uma mudanga no valor de um dos sinais contidos na lista, o processo sera executade, Exemplos do -emprego desse comando sao apresentados no Capitulo 4. PROCRSE {Liste de ceceibilidade) fasue_persitide declaracao_Ae_sinal @ declaracao_da_variavel_coapartitaada [parte de_somndos sequanaiait ‘comands saquensiat! = comand. mp PnocHSS abe, savencial Quadro 3.6.1 Formato de comands “ PROCESS” Comandas Cancorrenies Bésicos. 37 3.7. Palavra reservada “ UNAFFECTED ” Apalavra reservada “ UNAFFECTED " pode serempregada na atribuigo de valora um sinal, quando no se deseja afetaro valor do sinal. A palavra UNAFFECTED ” somente & permitida em atribuigies concorrentes de valores asinais, Ver o comando " NULL.” ne Capitulo 4, para resultados equivalentes em regides de cédigo seatiencial. "A palavra reservada * UNAFFECTED " nif € definida pata a verso VHDI.-1987, e nem sempre &suportada pelas feramentas de sintese. © Quadro 3.7.1 ifusita dois exemplos com o emprego da palavra " UNAFFECTED ” para as construsies “WHEN ELSE" e WITH SELECT ", No Quadro 3.7.2 so apresentadas duas descrigdes completas. Note iis os sinais “xa”, “ya e" xu” 6 yu” tem o mnesmo comportement ‘cinal doztine < sypresscoa RON condicwo 2 KIER Gkescsred MBN conden“? FLEE —— vaLor nao altazato na condieno.2 Tina. testio <> axpecaona-a WM conéicso 1, SEEELIEGG baum concieeo? Guaerecnes WPM OTmeRs, <- vatex nag alteredo eas cendicoas zestantos (Quadro 3.7.1 Polavea reservada “ UNAFFECTED " na atibuigto de snl, ancucrscroRe carte OF unaet 2a 18 econ case OP UneEE3H IS ten 2 a 5 vo anact br 3 a urns Fd + om 2", 2 am eeoee! ‘Quadro 3.7.2 Deserigdes empregando & palovra reservada “ UNAFFECTED " 3.8 Cuidados na descrigéo Comparagées entre as construgées “ WHEN ELSE” e “ WITH SELECT ” [Na consirugto * WHEN ELSE " a ordem em que as condigdes sdo apresentadas indica a precedéneia na execucio: 1 primeira tem prioridade maxima, ea titima tem a menor prioridade. Na construgdo “ WITH SELECT " todas as ceondigdes possum a mesma prioridade. A diferenga entre as construgdes pode ser aprovetada pelo projetista para obtercircuitos mais eficientes ¢ descrigdes mais sucintas, conforme o comportamento do circuito a ser deserito. ‘A Figura 3.8.1 ilustra o caso de um circuito em que a construydo “ WHEN ELSE " é mais vaniajose, © cit- cuito ¢ um codificador de priotidade entre ws entradas denominades * p3",“ p2”e pt", sendo a entrada 93 a de maior privilégio. Caso ela esteja ativa, “ p3 =1 ", 0 seu cédigo & representado nas safdas “ot ” & 00" independentemente da comdigdo das outras entradas. As entradas restantes,“p2" e"p1”, érn uma prioridade decrescente, conforme ihisrado na tabela-verdade d figura. 38 Capitulo Tes © Quadro 3.8.1 contém a descrigio do circuito empregando a construgdo “ WHEN ELSE”. Essa deserigio ‘em uma maior correspondéacia com a operagao do circuito, onde a condigao de cada entrada € vetificada in- 7» » 8 77» F Figura 3.10.1 Exescicio 3.10.1. 3.10.2 Apresente o cbdigo de um circuito larch wansperente de 4 bits, confurme ilustrado na Figura 3.10.2, empregando a ‘construgo “ WHEN ELSE”. As ssidas “ q" seguem as entrades“* d” na congo “ on =1; na condigo en =0* a infor- ‘magdo mantis, 3.10.3 Repita o Exercicio 3.10.2 empregando a consteugdo " WITH SELECT". Figura 3.10.2 Ilustragdo para os Exercicios 3.10.2 € 3.19.3, 3.10.4 Desesvolva 0 eSdigo para um detector de prioridade com quatro entradas empregando a construc “ WHEN ELSE”. ‘Acentvada de priocidede méxima é 90, ¢ @ entrada de priosidade minima é “ p3.". Q detector deve ser empregado num ‘sistema microprocessado, onde quatro petiféricas podem solicitar uma interrupeio. Uma das entradas ema nivel alto corres ‘onde a um pedido de interrupgéo; neste caso, a saida "ln deve ser ativada, Na Figura 3.10.3 & apresentada a tbela-ver- ade do devodifieador 3:05 Repita 9 Exercicio 3.10.4 empreganda a construgSo “WITH SELECT”. ” po_pt pz ps | 0 in +x x x |o at ” oi x xfors re ine coor rad ooooliio ‘Figura 3.10.3 Iustragdo para os Exercicios 3.10.4 ¢ 3.10.5. 3.10.6 Apresente 0 cédigo de um circuito devodificador para a selego de memérias. 0 sistema & compesto por rés memérias: ‘a primeira respondendo na faixa de enderegas de“ OD0OU h "a 1FFFF ha segunda na faixa de “ 20000 ha“ 27FFFn”, ‘ea terepira na faixa de “ 28000 h" 2“ 2FFFF h (ver Figura 3.10.4). Empregue a construgdo “ WHEN ELSE”. 310-7 Repits o Exereicio 3.10.6 empregando a coastrugdo " WITH SELECT". 42 CapitutoTrés ree mena moo | yf] 200 Deranartn se Ed ae Figura 3.10.4 Ilustrago para os Bxercicios 3.10.66 3.10.7, 3.10.8 Apresente 6 cédigo de um conversor do ebdige BCD, binary-coded decimal, pars um mostrador de sete segmento8 ‘Os segmentos sia acionados em nivel légico alto 3.10.9 Com base na Figura 3.10.5, desenvoiva 9 eédigo descrevendo o sistema contendo tum decodificador BCD para set sexmentos ¢ um cireuto de seleglo, A descrigdo deve ser dividida em dois bloces, wm contend o deooditicador, € 0 outte bloco, o circuit de seleedo. Os mostredores so acionados era nivel baixo eos segmentos acionados em nivel alto. Figura 3.10.5 llustragio para o Exercicio 3.103, 3.10.10 Sinttize as descrigbes crindas para 0 repstrador de quatro bits nos Fxercicios 3.10.2 ¢ 3.10.3 e compare os resulte- dos n9 nivel RTE. AULT Sintetize as deserigbes eriadas para o detector de prioridade nos Fxercicios 3.10.4 ¢ 3.10.5 ¢ compare os resultados. ‘erifique os diagramas gerados na nivel RTL no nivel ports légicss. 3.0.12 Sintetize as deserigis criadas pars o seletor de meméria nos Exereicios 3.10.6 e 3.10.7 ¢ compere os resultados, ‘Verifiqae os diagramas gerados no nivel RTL e no nivel portas logics, CAPITULO COMANDOS SEQUENCIAIS BASICOS jomandos seqienciais ficam contidos em regides especificas de eédigo como provessos ou subprogtamas. ‘Uma vez inicinda a execugo de comandos em regio de cédigo seqlencial, 08 comandos so avaliados na seqiléncin em que So apresentados no cédigo, independentemente da troca de valor nos sina ou varidveis os quais 0 comando é sensivel. Este capitulo apresenta os comandos seqiienciais “IF”, “ CASE ” ¢“ WAIT”, o modo de operagio de wan pro- cess0 e lista de sensibilidade, bem como a atribuigao de valores a sinais nas regides de codigo seqiiencil 4.1 Lista de sensibilidade em processos ‘© comando “ PROCESS " foi apresentado no Capitulo 3, pois um proceso é um comando concorrente. A re- ‘ilo delimitada por um processo contém comandos que sio executados seqliencialmente, como na maioria das linguagens de programagio. Uma descricdo pode conter virios processos, e todos esses proceseos, assim como outros comandos concorrentes, fo executados simultaneamente. A Figur 4.1.1 ilustta a execusio do cédigo de ‘uma descrigio contendo dois processes. Logo apés a palavra reservada “ PROCESS ”, & possivel definir uma lista de sinais que causam a execugdo do processo, Essa relacto de sinais ¢ denominada lista de sensibilidade, A alteracdo de valoc cm um dos sinais contidos na lista de sonsibilidade ativa o processo, causando a execusdo dos comanclos seqilenciais segundo & cordem de apresentagio, Ao término da execucdo, o processo fica suspenso até a ocorréncia de uma nova alters- G0 de valor em um cios sinais relacionados na lista de sensibilidadk abePROCESS __- xyaiPRocess BEGIN BEGIN ‘comand 4 ‘comands 1 ewecugio | comanéo2 ‘omrando 2 escape coe : ee comands comedies comandon, comancon END PROCESS ate END PROCESS We, esaugao confit Figura 4.1.1 Regies de eddigo comendo comandos seqienciais — PROCESS. © Quadro 4.1.1 contém uma descrigo que ilustra a operagao de uma lista de sensibilidade, No processo “abe, os valores das portas de entrada “ a" ¢“ b” sto transferidos pata as portas de satda “ sa" © sb ", respectivamente. Na lisia de sensibilidade do processo foi incInido apenas o sinal “a *, Assim, somente na al- teragto do valor desse sinal ocorre a execucio do processo €, portanto, a atualizagio dos valores nas portas de salda, Desse modo, 0 valor da porta de salda * sa” corresponde sempre ao valor da porta“ a”, pois qualquer alteragio no valor causa a execugio do processo (ver Figura 4.1.2). No caso da porta sb *, @ valor é atual do somente quando ocorre uma alteragio no valor de “ a”. Assim, 0 sina] ~ sb” sc comporta como um citcuta que memoriza o ditimo valor da porta de entrada " b ”, ¢ permanece com 0 mesmo valor até o instante em que 44 Capirulo Quatro porta “a” softe uma slteragdo, Conforme se pode observar na Figur, a porta de saida “ sb” € atualizada nos insiantes 100 ns, 200 ns, 500 ns, 600 ns, 800 ns e 900 ns. O efeito de manutengae do valor fica claro nos instan- tes 500 ns ¢ 800 ns, ‘A deserigio do Quadro 4.1.1 no deve ser considerada como um exemplo para sintese de cireuitos que repre- sentam um tegistrador de qualquer espécie. O primero motivo deve-se a0 fato de que o elemento de meméria deserito & ativado tanto na borda de deseida como na borda de subida de ur sinal, win elemento sem correspon- déncia com circuits reais, Alé disso, as fecramentas de sintese no inferem, necessariamente, a necessidade de ‘um elemento de memoria pela auséncia de um sinal na lista de sensibilidade; apenas uma mensagem de adver- téncia pode ser gerada. A Figura 4.1.3 ¢.0 Quadro 4.1.2 iustram o problema: o circuito gerado néo corresponde ‘40 comportamento da deseriga0, Gost (er bs Te arty 5 ffancerreccume teste OF sena_tes 9 2] Pau: Rous (mn) —- exseutado na aiternoae do valor de “o! 5} Becim 12) _ ew eRacess abe: ‘Quadro 4.1.1 Desetiglo pera o teste de uma lista de sensibilidade em ura process0. b - inden 2 sa 71 i L —— ativagao do ® j process j yf" ee) ‘Figura 4.1.2 Simolagdo da entidado * gens tos” — destaque para a execugo do process. »>>—D* 25— Bs ' Figura 4.1.3 Resultado da sintese da descr proposta no Quadro 4.1.1 —nivel RTE. [WhiLisece tea.vha" Live 11s Wasting, b ahovid ba daclezed on the sensitivity List ef the presess. Quadro 4.1.2 Mensagem getada pela ferrameaa de sintese — eéuigo do Quadro 4.1.1 4,2 Atribuicdo de valor para um sinal - regiéo seqencial ‘A stribuigéo incondicional de valor para um sinal pode ocorrer em regides de eédigo concorrente ou seqtien Em ma regido de cédigo concorrente,a atribuigao & executads como um comand concorrente, isto é, na acor- réncia de uma alteragio de valor de um sinat da expresso. Numa regito de cOdigo seqiencisl, um processo, por cexemplo, uma stribuigo ¢ agendada quatido o comando ¢ executado. ‘Comandos Seqlienvinis Bisicos 45 (Uma questdo que pode surgir é quanto a influéncia da ordem de comandos contendo atribuigdes de sinal em regides de oddigo seqiiencial, Para o entendimento, ¢ preciso recordar do intervalo de tempo 4, empregado pelo simulador para ordenar a avaliagdo de eventos que ocorrem no mesmo instante. Alem disso, € necessatio saber ‘que na suspensito da execugio do processo ocorre a atribuicdo de valores agendados. ‘Supondo, por excmplo, que o circuitoilustrado na Figura 4.2.1 seja descrito pelo cédigo apresentade no Qu dro 4.2.1. Analisando 0 cédigo do Quadro 4.2.1, ¢ a Figura 4.2.1, uma alteragdo do valor no sinal “ sa de “0” para“ 1", emt = 10 ns, causa a execugio do processo. Assim, 0 valor de“ sb”, no caso" 0”, é agendado para ser transferido em 10 ns +A, € 0 valor de“ sa”,"*1 ", € agendado para ser transferido em 10 ns +A. Apés a execugdo dos comandas, © processo & suspenso ¢ uma iteraglo acorre, Como “ sb ” recebe um novo valor apos a itetagio, e * sb ” esti na lista de sensibitidade, o proceso é executado novamente, ¢ 0 dois commandos so reavaliados. © processo € suspenso mais uma vez, € uma nova itetago corre em 10 ns +24, resultando em “sb =1 "esc =1", Como o sinal “ sc" nfo foi incluido na lista de sensibilidade, 0 processo nfo ¢ mais exe- ‘eutado até uma nova alteragio de valor em “ sa. Uina vez que o intervalo de tempo A & nulo, o resultado final da simulagdo corresponde 3 carta de tempo 2 direita da figura, Seo sinal “ sb" ndo fosse incluido na lista de sensibilidade do processo, o comportamento da descrigdo sei iferente. Neste caso, ovorreria somente uma iteracdo, e 0 resultado final da simulagio corresponderia @ eondi- ‘¢do da carta de tempo emt = 10 ns +A, isto &,* sb =1 " esc =0, Esse tipa de comportamento no é imple- mentado pelas ferramentas de sintese, ¢ deve ser evitado. Ini ea cxeest0 co proseszs ——* wt ivin aici fom du east: crnarnannne jets fone | Siem cnn ee Ee at _—— 8 eg PS ee ° Se Figura 4.2.1 Eventos ua simulagio do ebdigo do Quadro 4.21. wrITY sig.test 13 PORT fae morn Soo se muvenn xm), ARcHETECTINE Lenka OF wigteel 18 ERICESS in, abd 1a] _ sib Process, ‘Quadro 4.2.1 Deseriedo pars teste das iterupSes em um process. A descticdo do circuito de selegio do Capitulo 3, empregando a airibuigio incondicional de valor para um sinal em regito de cddigo sequencial, pode ser reescrita no formato apresentado no Quadro 4.2.2. Note que os sinais intd” @**int3” dever ser colocados na lista de sensbilidade do processo. A austucia de um desses sinais xa lista introduziria un comportamento seqilencial na descrigSo, 46 Capitulo Quatro 3) "Hien Geta, a3 3) a) awa sero Geees ince, See = won ao] bnocuss cio, 44, 42, 43, 00, a2, st, dat, sata, kata} 32] "Stee into on inet o tnt2 ox sata Mt) That S212 Rio nor et um Go; a3] ihr Sia "Sh So aoe Soy Be fhe So, Quadro 4.2.2 Descrigto do cireuito de selegio — sinais em regido de ebdigo seqlencil 4.3, Construcao “IF ELSE" A construsiio “ IF ELSE " permite a execugdo condicional de um ou mais comandos seqienciais, segundo uma lista de condigdes (ver Quadro 4.3.1). As condigdes sfo avaliadas na ordem da apresetagio wo cédigo, econ Breen Ff B= Figura 4.3 Circuito equivalente 20 cédigo do Quadro 4.3.3. ‘No Quadro 4.3.4 é apresentada uma nova descrigio para o cireuito de selecdo dos exemplos anteriores, empre- gando a construglo“ IF ELSE”, Comoe comando “ IF” é seqiencial, cle foi inserido em um processo (ver linhas 9.4 18). As portas de entrada “ 30" 1 "silo concatenadas no sinal * sel”. A lista de sensibilidade do provesso deve incluir as portas, “i0,“i1",“i2" 33", co sinal “set”. A falta de um desses sinais na lista de sensibili- dade tem come conseqiigncia que o processe no & executado nas alteragaes de valor do sinal ansente. A desericéo, neste caso, teria um comportamento seqiiencial, nfo correspondendo ao cireuito de selegao desejado. 2] pom Gorin, 42, 33 é ARCTEROTRE vaste CF moe te TE SHONAL sal | 82 WpCTORIa DARNEO O11 15] eel a & sos $2] Sees dnocase tio, sa, 22, 43, ae1) -vainsh tee" ingeride ma Lista | Sem B3[ SSipl set = voor arm ot <= 101 (4) Riste eek = ctr mer ot oe 1 18] Staue cel 5 “or crm 4] aw Procter abe: 15| eo teaver ‘Quadro 43.4 Cédigo VHDL emprogando a construgdo“ IF ELSE”. 48 Capitulo Quatro 4.4 Construcao “ CASE WHEN" ‘A construgio * CASE WHEN " permite a execugao condicionat de um ou mais comandos seqitenciais, confor= me o valor de uma expresso. Cada condig&o define um conjumo de comandos seqienciais a ser executado (ver Quadro 4.4.1) ‘As condigdes devem ser mutuamente exclusivas, significando que nio é permitide mais de uma condiglo vyerdadeira na relacao de valores que a expressio pode assumir,¢ todas as condigdes possuem a mesma priorida- de, Caso a execucdo de um mesmo conjunto de comandos seja condicionads a mais de uma condigio, ¢ possivel agrupar as condigécs através do delimitador |". Ble equivale a uma operagio “ou” entre as condigaes de es- cotha, De modo semelhante, as palavras reservadas " TO" e “ DOWNTO™ podem ser empregadas para delimitar uma faixa de condigdes. A palavra reservada “ OTHERS ” pode ser empregnda naiitima condigio para agrupar as condigies ndo-relacionadas na lista. ‘© valor de retorno da expresso de escolha deve ser um tipo discreto ou um vetor unidimensional: tipos REAL” ©“ PHYSICAL”, por exemplo, ndo sio permitidos. Outras restrigBes sfo aplicdveis com relagdo & iexpressio de escolha (ver item 4.7). Sempre que possivel, deve-se manter a exprassio de escolha simples; ex- pressdes complexas devem ser avaliadas isoladamente, ¢ 0 resultado da operacao transferido para o campo da expresso de escolha no comando, cast exprensacada_cscolha 28 w+ seprncoaa.dewaccatn = ‘ween condsend => conande coudicao.s Sat Sonesone—> conatene? tat eendicao3 | conaie cendienes? ou cendineo_¢ ‘taza condsono 6 To condscne-9 ‘condieseu8 ae condicas.9 Camandans? conando.c: ‘Quadro 4.4.1 Formato da corstrugto“ CASE WHEN”. 0 Quadro 4.4.2 apresenta urn fragmento de cédigo contendo a construgdo “ CASE WHEN ~. A expressio de cescolha é 0 sinal * na " do tipo “ INTEGER ”, ¢ as condigdes de escolha ilustradas sao do tipo: tiniea, faixa de igtes e condigies restantes. Cada opedo de escola determina a expresso que controla os sinais * 80” € “S.A construgio “ CASE WHEN ”, assim como a constnagio concorrente “WITH SELECT ", ni identificam rnenhuma prioridade nas ops6es. O circuito equivalente corresponde a um decodificador que detecta as condicbes contidas no comando e controla dois cireuitos de selecdo (ver Figura 4.4.1), soar 7 70 12 o> Bb exes i ‘Quadro 4.4.2 Exemplo do uma construgia“ CASE WHEN”. rs rae L xm sar ao oscodiader Figura 4.4.1 Cirento equivalents par o ebdigo do Quadro 4.4.2 Comandes Seqicnciais Bésicos 49 No Quadro 4.4.3 & apresentada uma nova desericio pata o circuito de seleglo descrito nos exemplos anterio- res, As miesias observagdes quanto lista de sensibilidade, feitas para a deserigio do Quadro 4.3.4, so validas. ‘Observe que a expressiio de escolha corresponde ao sinal “ sel”, cujo valor € determinado pela concatenagao entre “ 50" st” 2 2 5 4 8) “SicHL sel + BERVECTOR(2 BOM 01) >| pasar aa] abe: process (10, 42, 42, 13, eel) —-sinal ‘ual’ inseride ma Lista a3] case cet te 8 wm rors SS oe oe ia b Sum omiaes 35 Se <2 3, ie) _ amo cass: 33| aw process ste; 20 aus testes Quadro 4.4.3 Cédigo VHDL — circuito de selegio. 4.5 Comando“ WaIT” © comand” WAIT” suspende a execusdo de um proceso ou de um procedimento. A suspensio pode ser con- dicionada a trés cléusulas, ou a uma combinacio delas (ver Quadro 4.5.1). A constraggo * WAIT ON ” fornece uum mecanisimo equivalent a lista de sensibilidade de um processo. Neste caso, apis a execugia do comando “WAIT ", 0 processo fica suspenso até a alterngao de valor ¢m um dos sinais relacionados na lista. Na forma “WAIT UNTIL”, 0 processe é suspenso enquanto a expressio booleana contida no comand néo for satisfeita, No iihimo caso, * WAIT FOR ™, 0 processo & suspenso por um periada de tempo, reiniciando no comando seguinte, apés 0 periodo de tempo definido. ware on 2¢tase gene ibiLLésde; ‘ei? UNTIL axpressac-boclesne, NAL? FOR exprecsao cm tere! AIT OM 1iets-sonszbilidade UNECE condicae Rooleasa POR expetesac. dx teao9) ‘Quadro 45.1 Comando “ WAIT ¢ eléusulas assosiadas, ‘io é permitida a ovorréncia de un comando “ WAIT ” em um processo contendo lista de sensibitidade, En- ‘metanto, mais de umm comando “ WAIT ” pode ser inserido num proceso. Processos com 0 comando ‘* WAIT ” slo Geis em entidades cujo objetivo é o teste de uma outra entidade. Um exeraplo desse tipo de aplicacio ¢ a _geragdo de sinais de estimulos para verificar o comportamento de uma entidade. Esse tipo de aplicaglo 6 abor- ‘dado no Capitulo 15. Deve-se observar que nem todas as ferramentas de sintese suportm o comando “ WAIT”, e, quando supor- tedo, somente um niimero restrto de opgies silo aceitas, As opedes normelmente permitidas sdo: “ WAIT ON ”, substituindo a lista de sensibilidade de um processo, ¢ “ WAIT UNTIL", empregada na inferénefa de registrado- res. Ver o Capitulo 6 para uma amostra do ditimo caso, © Quadro 4.5.2 ilustra alguns exemplos do comando “ WAIT ”. No primeiro, o proceso & suspenso até a ‘ovorréncia de uma alteraco de valor no sinal “ sig_a ” ou no sinal sig_b. No segundo exemplo, o processo & ‘suspenso até que o valor de * sig_o” assuma o valor “1”, No terceiro exemplo, a execuedo do comando causa a sspenido de process por un perodo de 100 ns.No quarto explo, proceso ésuspensonguaéando o valor “0 no sinal “sig_¢” por um intervalo de tempo maximo de 50 ns, 50 Capitulo Quatro esr on aig, slab: WAST UNEIL sig d = 0° FOR 50 087 ‘Quadro 45.2 Fxemplo de construgées * WAIT”. 0 eédigo do Quadco 4.5.3 contéi dois provessos semelhantes empregando 0 comando “ WAIT ” com obje- tivo de ilustrar a execueio da instrusdo. A Figura 4.5.1 apresenta uma carta de tempos da simulagto dessa des- ‘rigdo, A cada suspensio de um processo ocorre uma iteragdo, € os sinais tm os seus valores atualizades, No processo * abe”, o simulador inicia a execusio avaliando 0s comandos das linhas 10, 11 12. ApSs a execugdo io comando “ WAIT”, 0 provesso é suspenso, ¢ ococre uma iteragdo: “x8 " recebe o valor incvementado, e ya” co valor 1”. Apés 30 ns, 0 processo volla a ser executado, ¢ ocorre a avaliagio das linhas 13 e 14. O pracesso suspenso, ¢* ya" reecbe 0 valor 0”, Apbs 20 ns, slo executados os comandos das linhas 10, 11 ¢ 12, retot- nando ao ciclo de operagdes descrito, ‘No processo ede" o primeiro comando causa a suspensto do processo por 30 ns. Apés esse periodo de tempo, 0 simulador retoma & exccusiio do provesso, ¢ 0s comandos das linhas 19, 20 ¢ 21 sio executados, O comando 4a linha 21 suspende novamente a execusio do processo, eos valores de xb" e yb" sto atualizados. Apés 20 1s, so exeeutados os comandos das linhas 22 e 18, as operagGes descritas so novamente executadas a BUresR neroagn RANGE 9 10 18; 3 Burren BIT 5 | ARCCURCTIRE ante OP weit_e 19 2] abe: reocess Ser ‘Quadro 4.83 Desorigdo para teste do comaudo " WAIT" ot wo wat foros: fat fr 20mg) "aot aueridadon leery eto 20, | ° ey 2 io te. | weit % Lrarwsom — | [Bia ——— emsgmies Figuea 4.5.1 Simulagio da descrigho do Quadro 4.5.3. Comandos Seqiencisis Basicos. ST 0 Quattro 4.5.4 apresenta uma nova versio para 0 digo proposto no Quadro 4.2.2. A altcragao foi a remocio «da lista de sensibilidade, inclusdo dos sinais 20s quais o processo deve ser sensivel no comando “ WAIT ™ (ver linha 16). A execugao do processo fica condicionada ao comando “WAIT ON ”, isto &, na mudanga de valor em ‘um dos sinais contids na construgao “ WAIT ON *, a avaliacéo dos comandos no processo é retomada. s eddigos dos Quadros 4.5.4 ¢ 4.2.2 sio equivalentes do ponto de vista da linguagem. Isto porque um pro- ccesso contendo uma lista de sensibilidade contém, implioitamente, uma construgio * WAIT ON list bilidade ” como ultimo comando do process 1) erste ae e218 2) "pore T0744, 42, 49, 20, 21s aN aury — entradas © eelecao a] em ues . 5] ascoroscnuRe tease oF mx n2 75 3) Serowak toto, inet, ani, int + Bn: 2) posse a1] Meee ineo om inet oR aba oR sat3y 33] ka SL Me noe 23 ao Sa Te) Shea Se Tat "2 ip woe Quadro 4.5.4 Codigo empregando o comand “ WAIT”. 4.6 Comando* NULL” © comando “ NULL" nio realiza nenhumna operagio; a execugio & apenas passada para o proximo comand. Conforme sugestio do manual de referéneia de Jinguagem, esse comando é especialmente itil na construgdo “CASE WHEN ”, Como nessa construcdo ¢ nevessério cobrir todos os valores da expressdo de escolha, podem correr situagées em que nenhuma ago deve ser tomada para uma condigo. Assim, para esses casos, pode ser ‘ennpregado © comando * NULL”. © Quackro 4.6.1 contém dois exemplos com o comand “ NULL; © codigo da esquerda empcega a consttusio “ CASE WHEN ", e 0 da direits emprega a construcio “IF ELSE ”. O sinal “ sel” define qual operacio logica realizada entre os elementos do vetot " 2” transferida para“ s ", deserigdo * null_9a ". O mesino se aplica & descrigio “ null_3b ”, com relacdo ao vetor “ w”, Nas condigées “ 00” ¢ 10”, as construsdes “ CASE WHEN *e“ IF ELSE” definem uma acio; nas condiges restantes, nenhuma operagiio é executada, Como uma atribui- «do de sinal paras” foi estabelecida anterionmente na linha L1 de ambas as descrigdes, resulta que “ 3" recebe “2{2) NOR z(0)” nos casos em que 0 comando“ NULL” for executado. Naturabmente, a eléusula “ ELSE” na linha 14 da descri¢do “ null_86 " pode ser removidas ela foi inserida apenas para efeito de ilustragio do comando, merery null_se 15 DORE {zr IN BI vEcTOR!2 BEANO 0} Gel: IN BISvRcroR|2 bemeea 0)! | merry mulls» 25 2) Waar eos IN Brn vecroR!2 pewwmo 0), 5] mp watt aby" , é ARCHTEDCTURE caste OF mull_ie Te 3) am matt 2a : ARCHETECHURE tents OP auli_sb 18 fake: PROCEES2, set) 5] anes pocessie, sen) 20) Sexe 1] agaar st] USPS. eta wor e1on: at] ONES wi2y wos ions 23] ase sate 2 al 00 HEM w ex x(0) AND (200 2 2) OR YO) rea mua) aoe ta) irs Quadro 4.6.2 Deserigdes empregando o comando“ NULL”: * null tae null 18". 0 resultado da sintese das duas descrigdes ¢ apresentado na Figura 46.2. Camo se pode observar, 0 ircui- 10 gerado é o mesmo para ambos os casos, © um ach & inserido para manter 0 valor da saida“ s " conforme a condigto de“ sal”. A condigio “ sel(0)=0" leva o laich para o estado transparente, isto €“ Q=D"; na condigio “ sol()=1 ", 0 valor presente em * D” & mantido, Deserigdo “null_ta" nivel RTL. Descrig&o "null_1b” nivel RTL Figura 4.6.2 Resultado da simese das descrigdes do Quatro 4.62, Comandos Seqiencisis Bisicos 53 4.7 Cuidados na descricao ‘ComparacOes entre * WHEN ELSE "e “IF ELSE" ‘A construglo “ WHEN ELSE ” pode ser empregada unicamente em regides de cidigo concorrente, ¢ & constru- fo “IF ELSE ” em regides de codigo seqlencial, Ambas permitem subordinar a atribuigge de valor a vim sina segundo um conjunto de condigdes (ver Quadro 4.7.1), A primeira condiclo vSlida detectada no conjunto & 8 68- colhide, No caso da construgfio “ WHEN ELSE ,a operacdo executada é a simples ransferéncia de ura valor para ‘um sinal. A construgo“ IF ELSE” mais flexivel, pois permite a execugo de varios comandos sequenciais, ~ exprescaolb WEN condicse 2 BLEE TP condteae 3 tim ‘ionladestina < enpressaa_ar sinal deatina <= expresses Br ‘inal dasting <1 axpressaa.c Quadro 4.7.1 Correspondéncia entre as construgdes “ WHEN ELSE "2 “IF ELSE”. ComparagSes entre * WITH SELECT" e* CASE WHEN" Construgdes ‘As construgSes “ WITH SELECT "0 “ CASE WHEN ” tém como similaridade 0 fato de que todas as opgbes de selegiio dlevem estar presentes na lista de escolha. A construgao “ WITH SELECT ” soments pode ser empregada em regides de cédigo concorrente, ¢ pode exccutar apenas 2 atribuigio de um sinal a cada escolha (ver Quadro 4.7.2). A constragio CASE WHEN " passibilita que cada condigdo de escolha inicie a execu de varios €0- ‘mandos seqiienciais. Essa construgao permitida unicaments em regides de codigo seqilencial rte expreceas_oscotha seLect stsattdnatine <= expres. Yom sonticaa.t, (aN condcae 2 > sina). destico <2 exprosoao, (SH ConciceeL? Ib final_asevise == axpressaalb aes Crs SMuskoeestine <= expressan=e Quaidre 4.7.2 Correspondanela entre as constnugdes "WITH SELECT" “ CASE WHEN *. “IF ELSE” e “CASE WHEN’ aninhadas Nas construgies * IF ELSE” e " CASE WHEN ”, uma condic8o define um conjunto de comandos seqlenciais a ser executado, Desse modo, essas construgdes podem ser aninhadas para exeevtar uma decisio. Fsseestito de dleserigfo pode cer muitas vezes evitado, concatenando-se as sinais envolvidos na decisdo em um Unico sinal Isso resulta em cédigos mais claros e reduzem 0 esforgo de minimizagio da ferramenta de sinese. A Figura 4.7.1 apresenta 0 diagrama de uma unidade 1igica atiunética de um bit para discussio do problema, ‘As entradas “ di" ¢“ d0" definem a operago logica executada entre dois bits de entrada “a” eb". No Quadro 4.7.3 sio apresentadas duas descrigGes para o circuito empregando as construgdes "IF ELSE” com ¢ sem aninhamento, assim como no Quadro 4.7.4 as construgdes “ CASE WHEN ”,nessas duss condig6es "Nos casos sem aninhamento, descrigdas no lado dieito do quadro, os sais que definem a decisdo sao concate- nnados em um inico sinal,resultando em descrigdes mais concises e clas. 54 capitulo Quauo aos { . 2a . oa wee at vunidace I6gice e conmle | a0 ‘do bi eb [1 0 avo [ts Figura 4.7.1 Diagrams de uma oniade lgiea de mn bit i a)erry sin te 1a |omemre cicsea te 3 7b Fa BIS 3 S501 Bt ste, t a] PPG Stem, a] SP abe ae S]em erin, 3 |om eshiee 5] ancurnscrne teste of casts 18 5 |amcucoacvone taste oy 1_se2 20 2) tier 2|""itaun et Sie tecrore) owes 0) 5|"Erctass es, 0.0.00 5 |aeta 3] "S's ome 3) oceds tas! | 5| ee Sy mare is) “a « <9 nw is| Bee iB] eee. 2a} mm sesceses Quadro 4.7.3 Descricdes “ t1_Ih 7 e" t1_ifz*. 2) emrey eacest 38 a) amrce es_oaea ae 2)Rarvaides an me; S| oer tatso'S ow ore 3) ae ap eS ae re : fir ti, S] om ealeents 5S} em ea%eses, : 5 S| ascnenacaone teste oF ei eset 28 | ancummacmene vaste oF cas? 18 2) eae 2| irae es eanaiactantT Bones 0) 3) areas co a0,0.b0 5| ess ah] "Shee ae 35) motese “ela! 3] “Ihde eo 13 43) “lass o ze 1“ WEN "1" o> 8 ee a KOR be 45 go] sas 2 23] ero enocssor x Quadro 4:74 Deserigaes t_cast "6 t1_cas2 Orresultado da sintese no nivel RTL para as quatro descrigdes ¢ ilustrado pelas Figuras 4.7.2 ¢ 4.7.3. As des- cxigdes "H1_cast "e“ {1 i "resulta no mesmo diagram, asim como as descrigdes “t1_cas2" ett if2”. (0 resultado Fina, nivel porta logic, nfo & mastrado. Ele idéntico para todas as deseriges,gragas a etapa de otimizagao da ferramenta de sintese, Algumas caracteristicas do proceso de sintese podem ser identificadas. ‘Nesses exemplos, nas estruturas aninhadas, cada comando “ CASE ” ou “IF * leva insergao de um circuito de selecao. No caso das descrigdes sem aninhamento, a decisio € tomada com um dnice circuit de seleydo. Commandos Seqiencinis Bisicos 8S tat nite igure 4.7.2 Doserighes “t1_#1 "¢*t1_i2" sinttizadas — nivel RTL. sot °D- [tea Sp tcast t1cas2 ool ac Figura 4.7.3 Deseriges "t1_east "e" t1_cas2 sintetizadas — nivel RTL. O emprego da construciio “ IF ELSE" e " CASE WHEN” _As restrigdes impostas pela construgio “ CASE WHEN " sto convenientes para evitar que circuitos seqienciais sejam criadas sem necessidade. Nessa construgdo, todas as condigdes posstveis de uma expresso de escola de~ vvein ser testadas. A auséncia de uma condi¢do gera uma mensagem de erro na etapa de compilacdo, advertindo co problema. A construgio“ IF ELSIF”, por sua vez, ndo é limitada a uma Uniea expressio de controle, esultan- do que a cada estigio uma nova expressio pode ser avaliada, Essa liberdade excessiva pode conduzir a ertos na emnmeC 10 3); {| PReime ea ¢ be smoncr + eros cpezaceo pre-dafinida que nao xetorna tipo decrate aa} 43 Some OTHE, Ae | --cor c2 ect & eb smunon —- Beco: qperacas pro-definida que nae retcuns tipo discrete OL e i9 Wan rae”. erste: expresano pre-definida que retorna tips éisorete Bie xb Bit = tive But 20 zm mt 35|--wrte set_sts seuacr <- epee: valor definide por generics + ero: valor Gefinide por sinat lurne cL + 00 gate —- Conneta: eopzesans pre-definide que retorna tipo discrete O8 ce iO MUEW 7, > Integes + anteger = tiny Intesee 38 | sw conerzos " Quadro 4.7.6 Descrigio com exros:* cas_sal2" 58 Capitulo Quavo a} awsory comael 48 2) "eae [Saya ne. es ax aoe, 3 fs, et, ez, 23: Lt Suamnenma, ‘ 20, ot, 62) 63, of | oun Bay f 5 | cas tei, f 7] ascxirucruae corvete OF cus_sel3 18 8] stowt. seibit + en-vacwondt oMITO 6); 9) sro, weicats + senincdt 0 3)7 L 33) wine seni sauce CCorrator possivel datarminay of valores de zetceno Gx axpresszo aa) “ooh a0 te vor fe contexte ae expresseo (00. 02, ty 12) setoee <= 22 eat & on ; 1s) feira neiatg sacs Corsete: peseivel dotarminar os valorea de revorne ds epusssne ae) 5S STS arm ate fe soncexte da expeeteas s+. aan, ask, adc. 8) won wupesomt a) PERS, 2) cy oon | coretes valor conatante an] oa <6 So'iniew 1c, —— conreto: vatow conttantie 28 22 teen ores: Quadro 4.7.7 Descriedo corrigida: “cas_sef3” 4.8 Principais pontos abordados + Na construyio “IF ELSE", a seqiéneis das condigies define a prioridade, pois a primeira condigio verda- deira encontrads na lista estabelece quais comandos deverm ser executados, + A construgio * WHEN ELSE.” 6 uma transferéncia condicional de sinal concortente,¢ a sua correspondente construgio seqlencial é “IF ELSE”. + Na construgio " CASE WHEN”, as condigSes devem ser mutuamente exclusivas; todas as condigdes devem ser especificadas, ¢ elas possuem 2 mesma prioridade, + Acconstrugio * WITH SELECT ”¢ uma transferéncia condicional de sinal concorrente ¢ a construgdo seqien- cial correspondente 6 CASE WHEN. + Sempre que postivel, deve-se dar preferéncia a descrigBes empregando a construgao CASE WHEN ” em detrimuento da construao “ IF ELSE”. + O-comando WAIT suspende a execugio de wn processo. Ttés tipos de construges podem ser empregados: “WAIT ON,“ WAIT UNTIL”, & WAIT FOR”, + © comand “ NULL ” ndo realiza nenhuma operagéo 4.9 Exercicios 4.9.1 Apresente a comportamente de descrigo do Quadro 4.2.1 altevando a linha & de duas formas. A primeira substizuindo or“ PROCESS (sa) "ea segunda por ” PROCESS (sa, sb, so)”. Descreva a iteragSes que devem ocorrer para cal e230, 49.2, descrigio do Quadeo 49.1 contém erros. Apresente possiveis solugBes para os erros@ comente a5 raz3es, Comandos Seqienciais Bisicos 59 2) "rere fab sox Bry ‘ yak OUT BET; | tem 6] ake: PROCESS (a, by ob at] aes nam x ea a3) mre THEN 2 ce ot 38) TF a amo b= 1h rem y <= 10) 35) Hea bs ots num kee vary 29| sum PROCESS abe: Quadeo 4.9.1 Cédigo com eros. 4.9.3.A descricto do Quadro 4.9.2 contim erros. Apresente possiveis solugdes para os eros ¢ comente os motives, 5 2 Lobe igoen aaoe 0 0 181, | abe: PROCESS Gx a Wim 7 O20 wee B sauna P'S) =e a] ‘eau 2 . SS] _ mm ence, 36] _ mp Process abe; ‘Quadro 4.9.2 Codigo com ertes. 4.9.4 4 deserigho do Quaro 4.9.3 correspande ap circuito de seleglo com uma altorapdo ns lista de sensibilidade, Verfique e comente 0s problemas acarreiados pela alterago _]ou one PERE ge pe Sfpecseornns scan oF aa 8 oy Sa ws 2) SSRIS ie | mx taoezes see: ‘Quadro 4.9.3 Cirosito de selegdo alteada, 60 Capinuio Quatro 4.9.5 Propona duas descrigdes para o eequema de Figura 4.9.1: una empregando a construsEo “ IF ELSE " e outa com a consirugdo * CASE WHEN ". Trés condigiee estabolecem ums operagio logica entre as entradas x" ey". A contigo de suaiarprioridade, “ ab, define uma operacio “e”; a condiio “ b=c” define a operagio “ou”; ea tihima condiga0, “a=”, de menor priariade, define ume cperago “ou-exclusivo”. = = Ll, mS ae oe =e ried Espectisede do crouta ‘igura 4.9.1 Proposta de um cicuito com problemas na espeificago 44.9.6 Rofiaga o Exereicio 3.10.2 empregando a construcdo “IF ELSE", 49.7 Refuge o Exereicio 3.10.2 empregando e construso * CASE WHEN ". 49.8 Refaga o Bxercicio 3.10.4 empregand @ construglo" IF ELSE * 49.9 Refaga 0 Exercicio 3.10.4 empregand a construgo * CASE WHEN , 4.9.10 Reface o Bxetcicio 3.10.6 empregando a construgto “IF ELSE” 4.9.11 Refage 0 Exereicio 3.10.6 emprogando a construgio “ CASE WHEN”. 4.9.12 Refaga o Exereicio 3.10.8 empregando comandos seqienciais, 4.9.13 Refaga 0 Exercicio 3.10.9 empregando comandes seqlenciais. Nio utilize blocos para divisto da deserigto; divida a desctiedo em dois provessas: um canterda o decodifcador, ©» outro contendo o cixeuito de selegso. 4.9.14 A Figura 4.9.2 apresentao diagrama de um circuito de deslocamento nipido, barrel shi, para discussio do exercicio, [Asentradas "d1 ” e" d0” definem o deslacamento dos bits ca entrada “ v" para a salda " sO deslocarmento pode variar ‘entre 2era a tts bits para 2 esquerda, conforme desctito na Figara, _Apresente duas deserigBes pars a soluglo empregando as construgées “ ELSE” e“ CASE WHEN ” aninhadas, © outras ‘dies solusdes sem construgdies aninhadas, Sintetize as desorigbes € comente os resultedas. aida‘ para as possives condiies de desocarunta a[e pe] BETS) (bepspal fepspa ead etaddtet att coo tet Figura 49.2 Diagrama de um deslocadorripide de 4 bits. 4.9.15 Sintetize as deseriges dos Quadros 4.34 ¢ 49.3, entidades “ muda" e“ mux_4b ”, respectivamente, Note que na entidade“ mux_4b ” dois sinss foram removides da lista de sensibilidade do processo.Verifique como a ferramenta de satese trata ese probleme, Compare os diagramas gerados ue nivel RTL e verifique as mensogens geradas pela fecramenta. : 49.16 A desetigto do Quadro 4.9.4 contém erros, Courijaos © proponba alternativas quando nevessério, considerando as restrigdes quanto & expressio de escolha de uma consirugio * CASE WHEN ". Commandos Seoienciais Basicos 6 a 8 BEE te: be bee 20 01.03,03-04,05-08-07, 08, 08» UT INTEGER OESTARE ext = HetaneR T= 7 PROCESS (bE, BEY, Bol, che, dnt, 1, ab, eat Ese be 2 wen 10 mp cass: case bey 78 CASE baw 78 case ae 5 ao case ~ wieet onees = 9? SL: ‘He ne cage int 39 Quadro 4.94 DescrisZo com erros, cariTULo A TRASO, VARIAVEL E ATRIBUTOS traso em VHDL é aplicado na gerago de formas de onda para teste de descricdes ou na modelagem do /comportamenta dinamico de um cireuito. Os comendos que modelam o atraso silo ignorados pelas ferra- smentas de sintese. Conforme visto no Capitulo 2, sinal varigvel sao objetos que eontém um valor armazenado, ¢ o valor ar- ‘mazenado pode ser alterado na exccugo do eédigo. Esses dois objetos ttm caractersticas distintas, que serio bordadas com mais detalhes neste capitulo, ‘© conceito de atributo disponivel na linguagem permite extrair informagdes adicionsis de um objeto, tipo e até unidades de projeto. Considerando um sinal, por exemplo, através de atributos, & possivel determinae se ocorreu uma troca de valor no objeto, 0 tempo decorTido apos essa mudanga ¢ 0 valor anterior do objeto. 5.1 Atraso ‘Na linguagem VHDL ¢ possivel definir um intervalo de tempo, para madelar 0 atraso em uma desctigao. A rmodelagem pode ser com inéreia ou com transporte. O modelo com inércia é indicado para represeutar wma it~ formagdo que se propaga através de um circuito ldgico, Normalmente, nesses elementos, pulses com duracdo ‘menor do que 0 atraso de propagagio do cireuito nfo sdo transferidas para a saida, No moxielo com transporte a informagdo é sempre transmitida, nfo importando a duracao do pulso. ‘A clfiisula “ AFTER” seguida de um valor de tempo modela um atraso na transferéneia de uma informagio. ‘Caso nio scja inscrida « opgdo“ TRANSPORT ”, serd suposto um atraso do modelo cam inéreia, O Quadro 5.1.1 presenta alguns exemplos do formato das cléusulas “ AFTER * ¢ “ TRANSPORT ‘A modelagem do atraso néo & sintetizada pelas ferramentas de sintese devide & impossibilidade de imple- ‘mentar circuitos que gerem esse comportamento com preciso. As cliusulas presentes no cédigo so ignoradas pelas ferramentas de sintese. single preerey Sinale valor x APTER tonpo_tr Valor, valor t APTER tenoe_2, valor k AFTER tape; exprovsio 2 AMER tempe_A, sopsesiao F ASTER compo St piusl_d * TRANSTCRT valor x A°THR vamet) Single <@ TRANSPORT valor_y, velor_e APTHR tempo.2, valor_k AFTER tempo. 3; Stsalf <- TRANSPORT expresoao_> APEER tenpo_4r ‘Quadro 8.1.1 Formato des cliusulas “ AFTER” " TRANSPORT”, ‘No Quadro 5.1.2 € apresentado um cédigo contendo comandos de atraso com inéreia & com transporte. A Figura 5.1.1 ilustra o resultado da simulaglo dessa entidade onde dois pulsos sto aplicades: um com duragdo ‘maior do que o siraso apresentado na clausula “ AFTER ”, ¢ outro cam duragiio menor. No caso do sinal “b", ‘modelagem com inércia, o pulso com duracie menor do que 0 atraso definido nio ¢ transferido para a saida, Para o sinal “ ¢”, o piso é sempre transferido para a salda. Atraso, Varivel eatibutos 63 Peet ee Et arn; Dye OUE BIT: AtcureRCTME teste CP 08 ats1 15, bee 9 AFTER 109 na: Quadra 5.1.2 Citgo VEDI. de una deseriga0 com modelagem de atras. a bee aiter 100 ne; <= transport a afer 100 ns; wo a00 80 amCoOSCSCO~SC«MD tne ‘Figura 5.1.1 Sirulagéo da entideds * | atraso ‘Uma outra ops interessante de emprego da cldusula “ AFTER " éa geragao de formas de onda, Naturelmente, essa aplicagdo nao é possivel para sintesc, mas pode auiliar o teste de uma descrigho, ou geracto de estimulos de teste para um outra entidade (ver Capitulo 15). Um exemplo dessa aplicagio ¢ilustrado no Quadro $.1.3. Nessa deserigdo, semelhante & descrigdo anterior, a porta “ a ” foi substituida por um sinal interno que gera a mesma forma de onda ptoposta na Figurs 5.1.1, (ver linha 8) 3 5 6 | ancutocHRE teste oP o0¢_otr? 28 4 s

Você também pode gostar