You are on page 1of 61

UNIVERSIDADE FEDERAL DA PARABA CENTRO DE CINCIAS E TECNOLOGIA

DEPARTAMENTO DE ENGENHARIA ELTRICA


DISCIPLINA: ARQUITETURA DE SISTEMAS DIGITAIS

Projeto de Sistemas Digitais na Atualidade

Alexandre Scaico

Campina Grande Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 2

SUMRIO
1. INTRODUO...........................................................................................................................5 2. A LGICA PROGRAMVEL...................................................................................................7 2.1 - O que a Lgica Programvel? ...........................................................................................7 2.2 - Memrias PROM .................................................................................................................7 2.3 - Os Dispositivos Lgicos Programveis (PLD) ....................................................................9 2.4 - Arranjos Lgicos Programveis.........................................................................................10 2.4.1 - PLA..............................................................................................................................10 2.4.2 - PAL..............................................................................................................................11 2.5 - Arranjos de Portas Programveis (Programmable Gate Array).........................................11 2.5.1 - CPLD (Complex PLD) ................................................................................................12 2.5.2 - FPGA (Field Programmable Gate Array)....................................................................13 2.6 - Consideraes finais ..........................................................................................................14 2.7 - Bibliografia ........................................................................................................................15 3. AS LINGUAGENS DE DESCRIO DE HARDWARE.......................................................16 3.1 - Evoluo dos sistemas digitais...........................................................................................16 3.2 - Surgimento das HDLs ......................................................................................................16 3.3 - Fluxo Tpico em um Projeto ..............................................................................................17 3.4 - Importncia das HDLs......................................................................................................18 3.5 - Tendncias em HDLs .......................................................................................................19 3.6 - Bibliografia ........................................................................................................................19 4. VERILOG HDL ........................................................................................................................20 4.1 - O que Verilog? ................................................................................................................20 4.2 - Por que usar o Verilog HDL? ............................................................................................20 4.3 - Popularidade do Verilog HDL ...........................................................................................21 4.4 - Aplicaes do Verilog e outras linguagens HDL ..............................................................21 4.5 - Limitaes do Verilog........................................................................................................21 4.6 - Nveis de abstrao ............................................................................................................22 4.7 - Nvel comportamental x RTL ............................................................................................22 4.8 - Conceitos principais da linguagem ....................................................................................23 4.9 - Metodologias de projeto ....................................................................................................24 4.10 - Estrutura dos mdulos......................................................................................................24 4.11 - Projeto hierrquico...........................................................................................................26 4.12 - Instncias..........................................................................................................................26 4.13 - Representando hierarquia.................................................................................................27
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 3

4.14 - Componentes de uma simulao......................................................................................28 4.15 - Nomes hierrquicos .........................................................................................................29 4.16 - Exemplos de mdulos ......................................................................................................30 4.16.1 - Meio somador ............................................................................................................30 4.16.2 - Somador completo.....................................................................................................30 4.17 - Conceitos bsicos.............................................................................................................31 4.18 - Convenes lxicas..........................................................................................................32 4.18.1 - Espaos em branco ....................................................................................................32 4.18.2 - Comentrios...............................................................................................................32 4.18.3 - Operadores.................................................................................................................32 4.18.4 - Especificaes de nmeros ........................................................................................32 4.18.5 - Strings........................................................................................................................33 4.18.6 Identificadores e palavras-chave...............................................................................33 4.19 - Tipos de dados .................................................................................................................33 4.19.1 - Definio de valores ..................................................................................................33 4.19.2 - Nets............................................................................................................................34 4.19.3 - Registradores .............................................................................................................34 4.19.4 - Vetores.......................................................................................................................34 4.19.5 - Registros de tipos de dados integer, real e time ........................................................34 4.19.6 - Arrays ........................................................................................................................35 4.19.7 - Memrias ...................................................................................................................35 4.19.8 - Parmetros .................................................................................................................35 4.19.9 - Strings........................................................................................................................35 4.20 - Mdulos ...........................................................................................................................35 4.21 - Portas................................................................................................................................37 4.21.1 - Lista de portas............................................................................................................37 4.21.2 - Declaraes de portas ................................................................................................37 4.21.3 - Regras de conexes de portas ....................................................................................38 4.21.4 - Conectando portas a sinais externos..........................................................................39 4.22 - Exemplos de estruturas de mdulos.................................................................................40 4.22.1 - Nvel de portas lgicas ..............................................................................................40 4.22.2 - Nvel de fluxo de dados (RTL)..................................................................................41 4.22.3 - Nvel comportamental ...............................................................................................41 4.23 - Bibliografia ......................................................................................................................42 5. O VERILOG E A FERRAMENTA DE SNTESE LGICA DA ALTERA ...........................43 5. 1 - Consideraes iniciais.......................................................................................................43
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 4

5.2 - Tipos de operadores ...........................................................................................................43 5.2.1 - Operadores aritmticos ................................................................................................44 5.2.2 - Operadores lgicos ......................................................................................................44 5.2.3 - Operadores relacionais ................................................................................................45 5.2.4 - Operadores de igualdade .............................................................................................45 5.2.5 - Operadores Bitwise......................................................................................................45 5.2.6 - Operadores de Reduo ...............................................................................................45 5.2.7 - Operadores de deslocamento .......................................................................................46 5.2.8 - Operador de concatenao...........................................................................................46 5.2.9 - Operador de replicao................................................................................................46 5.2.10 - Operador Condicional................................................................................................46 5.3 - Definio de constantes .....................................................................................................47 5.4 - Estruturas if-else e case......................................................................................................47 5.4.1 - Estrutura if-else............................................................................................................47 5.4.2 - Estrutura case...............................................................................................................48 5.4.3 - Outras estruturas ..........................................................................................................48 5.5 - Controle de Eventos...........................................................................................................48 5.6 - Lgica Combinacional .......................................................................................................49 5.6.1 - Atribuies contnuas ..................................................................................................49 5.6.2 - Construes always .....................................................................................................49 5.7 - Lgica seqencial...............................................................................................................50 5.7.1 Implementando registradores......................................................................................50 5.7.2 - Implementando contadores..........................................................................................51 5.8 - Bibliografia ........................................................................................................................52 6. A PLACA FPGA E A FERRAMENTA MAX+PLUS II .........................................................53 6. 1 - Consideraes iniciais.......................................................................................................53 6.2 A placa de desenvolvimento .............................................................................................53 6.3 A ferramenta de sntese lgica Max+Plus II .....................................................................55 6.3.1 Utilizando o Max+Plus II............................................................................................57 6.4 Realizao dos testes na placa...........................................................................................61 6.5 Bibliografia........................................................................................................................61

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 5

1. INTRODUO

Para muito de ns, a realizao de um projeto de um sistema digital consiste em determinarmos a funo lgica que o sistema que queremos projetar deve apresentar como resposta aos estmulos recebidos, e ento construirmos um circuito lgico complexo que execute essa funo a partir de circuitos lgicos simples (portas OR, AND, XOR, Flip-flops, contadores, registradores, etc.). Mas, devido a complexidade dos sistemas atuais, esse tipo de projeto est se tornando invivel devido a vrios problemas que o projeto a nvel de portas lgicas acarreta, tais como: Alto nmero de CIs contendo os circuitos lgicos (portas lgicas) simples necessrios; Atraso global do sistema alto devido a contribuio individual dos atrasos de cada porta lgica individualmente; Alto custo do projeto; Necessidade de um grande layout fsico para acomodar todos os componentes; Alto consumo do sistema; Possveis erros de conexo e/ou mau contatos (confiabilidade do sistema); Possveis indisponibilidades dos circuitos necessrios no mercado, acarretando em atraso na finalizao dos projetos; Necessidade de prottipos para testes, que acarreta em mais gastos.

Junte a isso a evoluo tecnolgica que vem ocorrendo nos ltimos 35 anos. Com a evoluo, ocorreu um aumento na capacidade de processamento dos sistemas, e isso acarretou uma maior complexidade dos sistemas a serem projetados (e com isso um maior nmero de portas lgicas necessrias ao projeto). E tambm gerou uma maior escala de integrao dos CIs, que a VLSI (Integrao em Altssima Escala). Ento, com a inviabilidade de se efetuar os projetos digitais da maneira convencional (com portas lgicas), pesquisas foram implementadas a fim de se obter uma forma alternativa mais vivel de se efetuar os projetos em dispositivos que contivessem milhares de portas lgicas internamente, e que essas portas pudessem ser programadas de acordo com a necessidade do projeto a fim de implementar a funo desejada (ao invs de ter que interligar uma quantidade considervel de CIs contendo portas lgicas, se usaria esse novo dispositivo). Esses estudos geraram a chamada lgica programvel. Com a lgica programvel surgiram vrios novos dispositivos passveis de serem programados pelo projetista (seja enviando o projeto para a produtora dos dispositivos efetuar a programao ou programando-o o prprio projetista). E, com esses dispositivos surgiu a necessidade de uma nova forma de se projetar, pois as formas tradicionais de projetos baseados em tabelas da verdade, em softwares de projeto lgico a partir de portas lgicas (o Eletronic Workbech um exemplo), entre outros, j no eram mais vivel. Dentre as novas tcnicas que surgiram, a que despontou como a mais promissora a descrio de hardware. Nesta modalidade de projeto, o projetista, com o auxlio do computador, descreve o hardware a ser projetado (o seu sistema digital) utilizando uma HDL (Hardware Description Language Linguagem de Descrio de Hardware). Uma HDL muito parecida com uma linguagem de programao de alto nvel, como C ou Pascal. O projeto utilizando HDL se torna parecido com a programao, uma vez que o projetista inicialmente no
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 6

se preocupa com a tecnologia que vai ser utilizada na implementao do projeto, e sim com a funcionalidade lgica do projeto. Aps a descrio ser feita, existem vrias ferramentas de simulao para testar a funcionalidade do projeto antes de sua implementao. E isto importante porque reduz drasticamente o tempo de testes, uma vez que no necessria a construo de prottipos e que, na ocorrncia de um erro ou mudana no projeto, muito simples se modificar a descrio do sistema em HDL. Ao trmino da etapa de teste ento escolhido o dispositivo que mais se adapte ao projeto (nmero de portas, tempo de resposta, etc.) e ento utilizamos um software de sntese lgica, disponibilizado pelo fabricante do dispositivo, para convertermos a nossa descrio em HDL para um arquivo que contenha os dados necessrios para a programao do dispositivo. E. uma vez realizada a programao, o dispositivo est pronto para ser utilizado. Deve-se ressaltar que existem dispositivos programveis que s podem ser programados uma nica vez (que so os que o projetista envia a descrio para o fabricante programar), e os que podem ser reprogramados de acordo com a necessidade (que so os programveis pelo projetista).

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 7

2. A LGICA PROGRAMVEL

2.1 - O que a Lgica Programvel? Os componentes da lgica programvel so dispositivos que possuem em sua lgica interna centenas (ou milhares) de portas lgicas, flip-flops e registradores; que so interligados internamente. Essas interconexes so os pontos programveis da lgica. Podemos ento programar essas conexes para permanecerem fechadas ou abertas, de acordo com a necessidade do projeto. Essas interconexes podem ser entendidas como fusveis, que de acordo com a necessidade do projeto podem ou no ser queimados (desfazendo ou no a conexo entre portas lgicas). Essa queima realizada pelo projetista, utilizando um software de programao do dispositivo. Existem vrios tipos de dispositivos lgicos programvel (PLD Programmable Logic Devices), como os mostrados abaixo: PLA PAL Dispositivos Lgicos Programveis Complexos (CPLD) Arranjo de Portas Programveis em Campo (FPGA)

Podemos tambm considerar as memrias PROM como dispositivos de lgica programveis se elas forem utilizadas para implementar funes lgicas.

2.2 - Memrias PROM O conceito de programao de hardware (sistemas digitais) se materializou com a necessidade de se construir unidades de memria, cujo contedo fixo, no era perdido ao se desligar o sistema. Esta necessidade foi resolvida com a criao das memrias ROM, que vinham de fbrica com o seu contedo j determinado. Com a evoluo surgiram as memrias PROM (ROM programvel), cuja programao ocorria pela queima dos fusveis internos (interconexes entre as portas lgicas bsicas que compem a PROM). Temos na figura a seguir o modelo de um PROM. Ela internamente nada mais que uma estrutura AND-OR, com a matriz AND fixa e a matriz OR programvel. Ento, podemos ver a matriz AND da PROM como um decodificador completo de endereos que pode ser programado a partir da matriz OR. Ao ser produzida, a PROM vem com todas as conexes internas. Para program-la devemos aplicar nveis de tenso apropriados a fim de manter ou no a conexo de cada entrada de cada porta OR (queimar ou no os fusveis internos). S que uma vez feita a programao, ela no pode ser desfeita. Com a evoluo, sugiram novos tipos de ROMs que solucionaram essa limitao das PROMs, que so as EPROMs apagveis por radiao ultravioleta, e as PROMs apagveis eletricamente (EEPROM).

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 8

Fig.01 Memria PROM de 8 x 2 bits

Ento, podemos ver a PROM no apenas como uma memria apenas de leitura, mas tambm como um circuito combinatrio genrico de n entradas e m sadas, cuja funo lgica executada pode ser facilmente programvel, como mostra a figura abaixo.

Fig. 02 PROM vista como um circuito combinatrio

Mas o uso de PROMs como dispositivos programveis apresentam algumas desvantagens, como por exemplo: A memria no aproveita as vantagens das tcnicas de minimizao porque implementam diretamente a tabela da verdade;
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 9

Quando um sistema possui menos sada que o comprimento da palavra da memria, temos pores de memria que no so utilizadas totalmente.

Por isso, os pesquisadores se empenharam em produzir dispositivos melhores que as memrias para implementar projetos lgicos, esses componentes so chamados de Dispositivos Lgicos Programveis (PLD Programmable Logic Devices).

2.3 - Os Dispositivos Lgicos Programveis (PLD) Dispositivos Lgicos Programveis so dispositivos (circuitos integrados) configurveis pelo usurio usados para implementar uma grande variedade de funes lgicas, tanto seqenciais como combinacionais. PLDs podem implementar qualquer expresso booleana ou funo construda a partir de estruturas lgicas. Sua programao efetuada pelo usurio utilizando uma ferramenta computacional de sntese lgica fornecida pelo fabricante do dispositivo. Podemos ter PLDs com pontos internos de programao permanentes ou reprogramveis. Os pontos de programao so os fusveis (conexes) que interconectam os elementos internos do PLD. atravs da queima ou no desses fusveis que programamos o dispositivo. Devido a complexidade da estrutura interna dos PLDs, podemos dividi-los em duas categorias, como mostra a figura abaixo. E, em cada categoria temos os dispositivos mais representativos.
PLD

Arranjos Lgicos Programveis

Arranjos de Portas Programveis

PAL

PLA

FPGA

CPLD

Fig. 03 Diviso dos PLDs

importante destacar que esses componentes tm o objetivo central de oferecer a versatilidade, o baixo custo, a confiabilidade e a velocidade da microeletrnica em estruturas menos rgidas que as tradicionais. E, para que esses dispositivos sejam utilizveis de maneira simples, os fabricantes oferecem programas de computador que, a partir de descries simplificadas do circuito que se deseja projetar (em HDL), consegue-se gerar rapidamente a programao correta do dispositivo. Ressaltando-se que esses softwares, alm de gerar o contedo a ser gravado (programado) no componente, oferecem recursos de simulao (verificao), documenta completamente o projeto e, ainda, gera roteiros de testes.

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 10

2.4 - Arranjos Lgicos Programveis Os dispositivos que so arranjos lgicos programveis possuem uma estrutura interna semelhante baseadas na estrutura interna AND-OR das PROMs. A estrutura consiste de um nmero de entradas ligadas a nmero de portas AND. As sadas das portas AND so conectadas as entradas de um nmero de portas OR, cujas sadas so as sadas do dispositivo. Nestes dispositivos podemos ter tanto as duas matrizes de portas programveis, quanto apenas a matriz de portas AND programveis. E isso gerou dois tipos de dispositivos: as PLAs e as PALs. Estes dispositivos, assim como as PROMs, s podem se programados um nica vez. 2.4.1 - PLA A estrutura de uma PLA muito semelhante a de uma PROM. S que ela possui uma menor quantidade de portas AND (no formando um decodificador completo), e possuindo tanto a matriz de portas AND quanto a matriz de portas OR programveis. Temos a seguir a estrutura tpica de uma PLA.

Fig. 04 Estrutura tpica de uma PLA

Possuindo as duas matrizes de portas programveis, as PLAs possibilitam que o projetista implemente termos minimizados (que no utilizam todas as entradas), como mostra o diagrama simplificado abaixo (note que cada linha de entrada das portas AND representam todas as entradas disponveis na portas, estando apenas em notao simplificada).

Fig 05 Implementao de uma funo lgica usando PLA


A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 11

2.4.2 - PAL Com o uso da PLAs foram verificadas que existiam situaes em que a flexibilidade da matriz OR programvel era desnecessria, o que no justificava o uso da PLAs. Alm disso, a existncia das duas matrizes (AND e OR) programveis acarretava uma grande propagao de atraso entre a entrada e a sada do dispositivo (alm de uma maior custo do dispositivo). Por causa disso foi-se criado um dispositivo baseado no PLA s que mais simples, que o PAL. O PAL se assemelha ao PLA, tendo apenas a matriz de portas AND programvel (a de portas OR fixa). Temos a seguir a estrutura interna simplificada de uma PAL.

Fig. 06 Estrutura tpica de uma PAL

Essa estrutura bsica da PAL pode ser varia da em quatro alternativas bsicas: Combinatrio; Entrada/Sada Programada; Sadas com registradores e realimentao; Sadas com porta XOR.

O PAL mais simples, o combinatrio, tem as sadas iguais as somas de produtos, sem realimentao (o PAL da figura anterior). Os PALs mais complexos realimentam a sada de volta para a entrada, permitindo que a sada seja tambm uma entrada. Outra caracterstica de PALs mais complexos e a existncia de registradores na sada, que fornecem aos PALs a possibilidade de sintetizar circuitos seqenciais sncronos. Um tipo de PAL bem complexo o que dispe de circuitos de sada que incorporam a porta XOR. Tais dispositivos so normalmente chamados de aritmticos porque so sempre necessrios quando se quer sintetizar unidades aritmticas.

2.5 - Arranjos de Portas Programveis (Programmable Gate Array) Os arranjos de portas programveis so estruturas mais genricas e versteis que as baseadas na estrutura tpica de um PROM (PAL, PAL ou a prpria PROM). Nestas estruturas existem recursos de configurao e interligao mais genricos que aqueles apresentados pelo rgido esquema baseado na estrutura AND-OR. Os fabricantes destes tipos de dispositivos garantem que com seu uso se consegue um fator de utilizao de 80 a 90%, enquanto que com PALs, tipicamente, utiliza-se apenas cerca de 15% de seus componentes.

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 12

Inicialmente, assim como as PROMs, estes componentes s eram passveis de uma nica programao. Mas, com o desenvolvimento das tcnicas de fabricao, surgiram as verses programveis em campo (que podiam ser reprogramadas de acordo com as necessidades do projetista), dentre as quais podemos destacar os FPGAs e os CPLDs. Devemos salientar que com o surgimento das verses programveis em campo, as verses programadas na fbrica no deixaram de existir. Pois componentes programveis em fbrica so sempre mais confiveis, dispensam as etapas de programao e, dependendo do volume, so mais baratos. Devido a esses fatores que os fabricantes oferecem verses programveis em fbrica para os dispositivos programveis em campo que dispem. A idia que sempre que se necessitar de componentes para elevadas quantidades, utiliza-se o componente programvel em campo para a construo dos prottipos, e uma vez terminado o projeto e assegurado que se disponha da programao correta do dispositivo, o fabricante poder fornece-lo em verses programveis de fbrica. 2.5.1 - CPLD (Complex PLD) De uma maneira genrica os CPLDs (ou EPLDs Erasable Programmable Logic Device) podem ser vistos como dispositivos que agregam em sua estrutura vrios PLDs (PLA ou PAL) interligados por conexes programveis, como ilustra a figura a seguir.

PLD Entradas

PLD Sadas

PLD

PLD

Conexes Programveis Fig. 07 Viso genrica de um CPLD

Na realidade, sua estrutura interna formada por centenas de macroclulas programveis, interligadas por conexes tambm programveis (cada PLD da figura anterior seria, na verdade, uma macroclula). Cada macroclula composta por uma matriz AND-OR (com a matriz AND programvel e a OR fixa, como nos PALs) para implementar as funes lgicas combinacionais, cujas sadas ativam mdulos de entrada/sada (compostos por flip-flops e realimentaes com funes e interligaes programveis). Os pinos de E/S podem ser configurados como apenas sada, apenas entrada, ou entrada/sada. Os CPLDs so programveis em campo, e podem ser reprogramados quantas vezes seja necessrio.

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 13

2.5.2 - FPGA (Field Programmable Gate Array) Os FPGAs (Field Programmable Gate Arrays Arranjo de Portas Programveis em Campo), em comparao com os PLDs, possuem uma arquitetura mais flexvel baseada no conceito de blocos lgicos. Um bloco lgico (BL) consiste de um certo nmero de portas lgicas capazes de implementar uma grande variedade de funes lgicas dependendo de sua programao, e pode ou no conter registradores. Temos em detalhe, na figura abaixo, a estrutura interna de um BL tpico do fabricante Xilinx, que consiste em dois registradores, um nmero de multiplexadores e uma unidade de funo combinatria (para implementar as funes lgicas).

Fig 08 Estrutura de um Bloco Lgico da Xilinx

Tipicamente, os blocos lgicos de um FPGA so idnticos, e cada bloco pode ser programado individualmente para realizar um pedao da lgica do projeto (decompondo a funo lgica geral do projeto em funes menores que sero implementadas pelos blocos lgicos). A complexidade de um bloco lgico pode variar (no se limita a estrutura tpica mostrada acima) consideravelmente entre diferentes FPGAs, indo desde um bloco de granularidade fina implementando uma ou duas funes lgicas de duas ou quatro variveis, at blocos de granularidade grossa implementando diversas funes lgicas de quatro a dez variveis. Cada FPGA contm um grande nmero de blocos lgicos, tipicamente entre 50 e 250, e algumas vezes mais. Cada bloco lgico conectado aos outros blocos lgicos e aos pinos de E/S por interconexes programveis. Temos a seguir alguns exemplos de arquiteturas de FPGAs no que diz respeito ao blocos lgicos e as interconexes programveis.

Fig 09 Exemplos de arquitetura de FPGAs com respeitos as interconexes entre blocos lgicos

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 14

Podemos entender as interconexes programveis como um conjunto de fios e um conjunto de chaves programveis entre esses fios. As chaves so programadas para conectar ou desconectar segmentos de fio, de forma a prover os caminhos de comunicao desejados. A figura a seguir mostra um exemplo.

Fig. 10 Exemplo de conexo entre Blocos Lgicos

2.6 - Consideraes finais Como j foi dito, para efetuarmos um projeto utilizando os dispositivos explicados, necessitamos de uma nova tcnica de projeto e de um software que permita realizar a programao (software de sntese lgica). Para o caso da programao, cada dispositivo possui o seu prprio software (de sntese lgica) que fornecido pelo fabricante. Resta, ento, aprender uma nova tcnica de projeto. E, como tambm j foi mencionado, a tcnica mais promissora nos dias atuais a descrio de hardware. Pois, alm das linguagens de descrio de hardware estarem amplamente difundidas e serem de fcil aprendizado (j que se parecem com uma linguagem de programao de alto nvel), os softwares de sntese lgica (que programam os dispositivos) aceitam o projeto em linguagem de descrio de hardware para fazerem a programao dos dispositivos. E, dentre as linguagens de descrio de hardware, a mais promissora nos dias atuais o Verilog HDL. Devemos salientar tambm que, para o usurio final, FPGA e CPLD podem ser vistas como o mesmo tipo de estrutura. A nica diferena est na sua estrutura interna, mas o seu resultado final o mesmo. O fato que um dos grandes fabricantes, a Xilinx usa o nome FPGA, enquanto outro grande fabricante, a Altera, usa o nome CPLD. Tanto faz usar uma ou a outra (embora os fabricantes tentem mostrar que a sua estrutura interna sempre melhor), que se obtm o mesmo resultado. Na prtica, tanto os FPGAs quanto os CPLDs so conhecidos como FPGAs. Existe atualmente uma nova tecnologia que permite usarmos um conceito chamado cache lgica com FPGAs. A cache lgica um meio mais barato de se implementar lgica mais eficientemente. As funes ativas da aplicao que est sendo executada pelo FPGA podem ser reconfiguradas durante a execuo, enquanto funes inativas so armazenadas em uma memria mais barata (um EPROM, por exemplo). Quando uma nova funo necessria, ela buscada na memria e escrita sobre as antigas. Ou seja, as funes vo sendo buscadas a medida que so necessrias como em uma cache de computador. Essa tcnica foi desenvolvida pela
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 15

ATMEL Corporation e, segundo a ATMEL, com isso conseguimos um aumento muito grande da utilizao do FPGA, pois estudos seus mostram que em um FPGA de 10000 com uma funo que o utiliza por completo, apenas 2000 so utilizadas ao mesmo tempo. Ento, utilizando essa tecnologia para fazer a cache das outras 8000 portas podemos implementar essa mesma funo com um FPGA de 2000 portas (bem mais barato). Finalizando, interessante saber que os dispositivos reprogramveis no existem apenas na rea digital. Existem circuitos reconfigurveis analgicos, os FPAAs (Field Programmable Analog Arrays); e os mistos (que misturam estruturam analgicas e digitais), os FPMAs (Field Programmable Mixed Arrays).

2.7 - Bibliografia 1. FREGNI, Edson e SARAIVA, Antonio M. Engenharia do Projeto Lgico Digital Ed. Edgard Blcher LTDA, So Paulo, SP, 1995. 2. SEALS, R. C. & WHAPSHOTT, G. F. Programmable Logic PLDs and FPGAs. Ed. McGraw-Hill, USA, 1997. 3. DEWEY, Allen M. Analysis and Design of Digital Systems with VHDL. Ed. ITP, Boston, MA, USA, 1997. 4. WESTE, Neil H. E. & ESHRAGHIAN, Kamran. Principles of CMOS VLSI Design A System Perspective. 2a Edition, Ed. Addison Wesley, Santa Clara, CA, USA, 1993. 5. Altera Data Book. Altera Corporation, 1996. 6. Implement Cache Logic with FPGAs. Aplication Note, Atmel Corporation, 1999. 7. Programmable Logic Devices. (www.eeng.dcu.ie/~scaifer/csh/pld/pld.html} 8. FPGA Page. (www.ele.auckland.ac.nz/students/chengms/fpga.htm) 9. FPGA Research at University of Toronto. (www.eecg.toronto.edu\EECG\RESEARCH\FPGA.html) 10. FIPSOC: Field Programmable System on a Chip Family. (www.sida.es\ftpsoc.htm)

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 16

3. AS LINGUAGENS DE DESCRIO DE HARDWARE

3.1 - Evoluo dos sistemas digitais O projeto de sistemas digitais tm se desenvolvido rapidamente nos ltimos 35 anos. Os circuitos digitais mais simples eram desenvolvidos com vlvulas e transistores. Posteriormente foram criados os circuitos integrados, quando passou-se a existir uma maior preocupao com os espaos fsicos ocupados por circuitos mais complexos. Os primeiros chips de circuitos integrados foram os chips SSI (Integrao em Pequena Escala) onde um pequeno nmero de portas lgicas dividiam o mesmo espao. Com o comeo da sofisticao tecnolgica, os projetistas desenvolveram circuitos com cerca de 100 portas (ou 100 transistores) em um mesmo chip. Esses chips foram chamados chips MSI (Integrao em Mdia Escala). Com o surgimento do LSI (Integrao em Larga Escala), os projetistas poderiam colocar milhares de portas em um nico chip. Neste ponto, os projetos comearam a ficar muito complexos, e os projetistas acharam necessrio automatizar todos os processos envolvidos nos projetos. E dessa forma, as tcnicas de CAD (Projetos Auxiliados por Computador) comearam a ser desenvolvidas. Os projetistas de chip passaram a usar circuitos e tcnicas de simulao lgica para verificar a funcionalidade de blocos de construo da ordem de 100 transistores (ou portas lgicas). At esta data, os circuitos ainda eram testados sobre breadboards (protoboards) e o layout era feito no papel ou pelo controle manual de um computador grfico. Com o surgimento da Tecnologia VLSI (Integrao em Altssima Escala), os projetistas passaram a projetar chips com mais de 100.000 transistores. Devido a complexidade desses circuitos j no era possvel verificar o funcionamento desses circuitos sobre breadboard. Tcnicas de auxlio por computador comearam a ficar indispensveis na verificao e no projeto de circuitos digitais VLSI. Programas de computador para fazer automaticamente a diviso do espao disponvel e rotinas de layout de circuitos tambm comearam a se difundir. Os projetistas estavam agora construindo circuitos digitais ao nvel de porta sobre terminais grficos. Eles construam pequenos blocos e ento formavam blocos em um nvel arquitetural mais alto a partir dos blocos mais simples. Esse processo continuaria at que se tivesse construdo todo o circuito. Simuladores lgicos eram ento usados para verificar a funcionalidade desses circuitos antes da fabricao do chip. Como os projetos foram ficando mais e mais complexos, os simuladores lgicos assumiram um importante papel nos processos do projeto.

3.2 - Surgimento das HDLs Ao longo do tempo, linguagens de programao (tais como FORTRAN, Pascal e C) foram desenvolvidas para descrever programas de computador. Tambm no campo de projetos digitais, os projetistas comeavam a vislumbrar a necessidade de uma linguagem especfica para descrever circuitos digitais. Surgiram, ento, as Linguagens de Descrio de Hardware (HDLs). As HDLs podem descrever um sistema digital em vrios nveis. Por exemplo, uma HDL pode descrever o layout dos fios, resistores e transistores sobre um chip de circuito integrado, ou seja, descrever o nvel de layout. Ou ela pode descrever as portas lgicas e flip-flops em um sistema digital, ou seja, o nvel de portas lgicas. Em um nvel mais alto ela descreve os registradores e
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 17

os vetores de transferncia de informao entre os registradores. Este chamado de nvel de transferncia entre registradores (RTL). Existe ainda o nvel comportamental, em que se descreve apenas a funcionalidade do projeto sem se preocupar com detalhes de implementao. Ao contrrio das linguagens seqenciais (Pascal, FORTRAN, C, etc.), as HDLs permitiram aos projetistas modelarem os processos concorrentes encontrados nos elementos de Hardware. Entre essas linguagens as que se tornaram mais populares foram a Verilog HDL e a VHDL. A Verilog HDL foi introduzida em 1985 pela Gateway Design System Corporation. At maio de 1990, com a formao da Open Verilog International (OVI), a Verilog HDL era uma linguagem de propriedade da Cadence Design Systems, conglomerado que tinha o controle da Gateway Design System Corporation. A VHDL foi desenvolvida em 1983 pelo departamento de defesa americano (DOD) atravs de um programa chamado Very High Speed Integrated Circuits (VHSIC). Apesar de difcil de aprender, VHDL passou a ser um padro aceito pelo IEEE em 1987. Atualmente ambos os padres, Verilog e VHDL so amplamente aceitos pelos projetistas de sistemas digitais.

3.3 - Fluxo Tpico em um Projeto Um tpico diagrama de fluxo de projetos de circuitos VLSI IC mostrado na figura abaixo.
Especificaes do Projeto

Descries de procedimento

Descries RTL (HDL)

Verificao Funcional de Testes

Sntese Lgica

Net List -- Nvel-porta

Verificao lgica e teste

Plano de Fundo Automtico

Layout fsico

Verificao de layout

Implementao

Fig. 11 - Diagrama de fluxo tpico de um projeto de um sistema digital

O diagrama de fluxo acima tipicamente usado para projetos que usam HDLs. Em qualquer projeto, as especificaes so definidas primeiro. As especificaes descrevem de
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 18

forma abstrata a funcionalidade, interface, e toda a arquitetura do circuito digital a ser projetado. Neste ponto o projetista no precisa saber como implementar o circuito. A descrio de funcionamento ento criada para analisar o projeto em temos da funcionalidade, performance, submisso aos padres e outras caractersticas de alto-nvel. As descries de funcionamento so manualmente convertidas para as descries RTL em uma HDL. O projetista tem que descrever o fluxo de dados desejado no circuito digital. Deste ponto em diante, o processo feito com o auxlio de ferramentas de CAD (Computer-Aided Design). As ferramentas de sntese lgica convertem a descrio RTL em uma descrio nvel de portas lgicas. O nvel de portas lgicas uma descrio do circuito em termos de portas e conexes entre elas. O nvel de porta a entrada para a ferramenta de rotas e distribuio fsica dos elementos, a qual cria o layout. O layout verificado e ento o chip fabricado. A maior parte do tempo gasto no projeto de um circuito digital concentrado na otimizao manual da descrio RTL do circuito. Depois da descrio RTL concluda, ferramentas de CAD so usadas para assistir o projeto nos demais processos. Diminuindo-se o tempo gasto no nvel RTL pode-se reduzir o tempo de projeto de anos para poucos meses. tambm possvel fazer mais interaes no projeto em um curto perodo de tempo. Com essa finalidade, ferramentas de sntese comportamental tem comeado a surgir recentemente. Essas ferramentas podem criar descries RTL a partir da descrio da funcionalidade do circuito (nvel comportamental). Com o amadurecimento dessas ferramentas, os projetos de circuitos digitais esto se tornaro similares programao em alto-nvel de computadores. Os projetistas simplesmente implementaro o algoritmo com a HDL em um nvel muito abstrato. As ferramentas de CAD ajudaro os projetistas a converterem as descries de procedimento em um chip de circuito integrado. importante notar que apesar das ferramentas de CAD conseguirem automatizar os processos e reduzirem o tempo de projeto, os projetistas sero ainda as pessoas que controlaro a performance dessas ferramentas. Alm disso, se usadas impropriamente, essas ferramentas de CAD produziro projetos ineficientes. Ento torna-se necessrio o uso de projetistas que entendam as nuances das metodologias de projeto, usando as ferramentas de CAD para obter um projeto otimizado.

3.4 - Importncia das HDLs As HDLs levam muita vantagem em relao aos projetos baseados apenas em esquemas tradicionais. Os projetos podem ser descritos em um nvel muito abstrato pelo uso de HDLs. Projetistas podem escrever suas descries sem escolha prvia de uma tecnologia especfica de fabricao. Ferramentas de sntese lgica podem automaticamente converter os projetos para qualquer tecnologia de fabricao. Se uma nova tecnologia surgir, os projetistas no necessitam reprojetar seus circuitos. Eles simplesmente entram com as descries RTL e/ou comportamental na ferramenta de sntese lgica (desde que a ferramenta suporte o nvel de descrio usado) e ela ento cria uma nova organizao ao nvel de porta, usando a nova tecnologia de fabricao. A sntese lgica otimiza o circuito na rea e no tempo de processamento, adequando-o a nova tecnologia. Atravs da descrio em HDLs, a verificao funcional do projeto pode ser feita facilmente durante as etapas de projeto. Desde que projetistas trabalham em um nvel
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 19

mais alto de abstrao (RTL ou comportamental), eles podem otimizar e modificar suas descries at que seja alcanada a funcionalidade desejada. A maior parte dos bugs do projeto so eliminados nesse ponto. Isso causa uma reduo significativa no tempo gasto no projeto. Projetos com HDLs so anlogos a programas de computador. Uma descrio textual com comentrios uma forma fcil de desenvolver circuitos e retirar seus problemas. Eles tambm fornecem uma concisa representao do projeto comparado com os esquemas eltricos tradicionais. Esses esquemas tradicionais so altamente incompreensveis para projetos muito complexos.

HDLs so certamente uma tendncia no futuro. Com o rpido aumento da complexidade dos circuitos digitais e com a sofisticao das ferramentas de CAD, HDLs provavelmente se tornaro o nico mtodo de projeto de grandes sistemas.

3.5 - Tendncias em HDLs A velocidade e complexibilidade dos circuitos digitais tm crescido rapidamente. Os projetistas tm projetado em nveis cada vez mais altos de abstrao, se preocupando apenas com a funcionalidade dos circuitos e deixando os detalhes de implementao a cargo das ferramentas de CAD. Essas ferramentas por sua vez vem se tornando sofisticadas o suficientemente para fazerem implementaes prximas do timo. Certamente a tendncia atual projetar em HDL em um nvel alto de abstrao (RTL ou comportamental) e empregar as ferramentas de sntese lgica para criar os nvel de portas a partir do nvel projetado. A sntese de funcionalidade surgiu recentemente. Com o melhoramento dessas ferramentas, os projetistas iro conseguir projetar diretamente em algoritmos o comportamento do circuito e ento usar ferramentas de CAD para fazer a traduo e otimizao nas demais fases do projeto. A modelagem do comportamento dos circuitos ser usada mais e mais com o amadurecimento da sntese de funcionalidade. Tcnicas de verificao formal tambm vm aparecendo no horizonte. A verificao formal aplica tcnicas de matemtica formal para verificar a preciso das descries em HDL e estabelecer equivalncia entre o nvel RTL (e/ou comportamental) e o nvel de portas. Contudo a necessidade de descrever um projeto em HDL no ir desaparecer. Para circuitos de alta velocidade como microprocessadores, o nvel de portas provido pelas ferramentas de sntese lgica no timo. Nestes casos os projetistas misturam as descries em nvel de portas com as descries em nveis mais abstratos para conseguir resultados melhores. Esta prtica vai contra o paradigma de se projetar em alto-nvel, mas mesmo assim, muito utilizada pelos projetistas devido a ineficincia das ferramentas de CAD para esses circuitos de tempo crtico.

3.6 - Bibliografia 01. PALNIKTAR, Salmir. Verilog HDL A Guide to Digital Design and Synthesis, Sun Soft Press, California, EUA, 1996.
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 20

4. VERILOG HDL

4.1 - O que Verilog? O Verilog uma das duas maiores HDL (Hardware Description Language Linguagem de Descrio de Hardware) usadas pelos projetista de hardware na industria e mo meio acadmico (a outra o VHDL). Ela usada para descrever o comportamento e a estrutura de uma parte de um hardware (ou ele todo), e muito parecido com uma linguagem de programao de alto nvel (C, para ser mais preciso). O Verilog foi desenvolvido entre 1984 e 1985 por Philip Moorby que necessitava de um meio simples, intuitivo e efetivo de descrever circuitos digitais para modelagem, simulao e anlise. Em 1985 a linguagem se tornou propriedade da Gateway Design System Corporation, que posteriormente foi adquirida pela Cadence Design Systems Inc., que desenvolveu a linguagem. At maio de 1990, quando foi criada a Open Verilog International (OVI), o Verilog era uma linguagem proprietria da Cadence. Com o OVI a Cadence se sentiu motivada a abrir a linguagem para domnio pblico com a expectativa que com isso aumentasse rapidamente a aceitao da linguagem, e com isso a procura por suas ferramentas de desenvolvimento para Verilog. O padro atual da linguagem Verilog o IEEE1364 de dezembro de 1995.

4.2 - Por que usar o Verilog HDL? Os sistemas digitais atuais so muito complexos. Em seus nveis de maior detalhamento, verificamos que eles consistem de milhes de elementos (transistores ou portas lgicas). Ento, para sistemas digitais grandes, o projeto a nvel de portas lgicas est morto. Por muitas dcadas, esquemas lgicos serviram como a linguagem para projetos digitais. Porm hoje em dia a complexidade do hardware cresceu para um degrau no qual os esquemas lgicos no so mais usuais e mostram apenas uma teia de conexes e no a funcionalidade do projeto. Desde 1970, engenheiros de computao e engenheiros eltricos tem usado as HDLs, das quais as proeminentes so o Verilog e o VHDL. Porm o Verilog usado pela maioria dos desenvolvedores, dentre os quais os projetistas de empresas como a Sun Microsistems, Apple Computer e Motorola. A linguagem Verilog prov ao projetista digital a possibilidade de descrever um sistema digital em uma grande faixa de nveis de abstrao, e, ao mesmo tempo, prov acesso a ferramentas de projeto por computador no auxlio ao projeto. O Verilog permite expressar o projeto em termos de estruturas comportamentais, deixando os detalhes da implementao para um estgio posterior do projeto. Uma representao abstrata ajuda o projetista a explorar alternativas de arquiteturas atravs de simulaes e detectar falhas no projeto antes de comear um maior detalhamento do projeto. Aps terminar os testes com o projeto em Verilog em um nvel comportamental, existem ferramentas computacionais que compilam descries em Verilog para uma descrio das mscaras de um CI VLSI, e ento enviar essa descrio para uma fbrica de CI para o mesmo ser criado. Pode-se ainda converter uma descrio em Verilog em uma descrio para programar um
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 21

FPGA (ou um ASIC, ou um PLD), onde o mesmo testado e o projeto aperfeioado para depois ser enviado para uma fbrica de CI.

4.3 - Popularidade do Verilog HDL O Verilog tem se tornado uma linguagem de descrio de hardware padro por oferecer caractersticas muito teis aos projetistas digitais. Dentre as quais podemos destacar: O Verilog uma HDL de propsito geral que fcil de aprender e usar. Sua sintaxe similar a da linguagem de programao C. Projetistas com experincia de programao em C vo achar fcil aprender Verilog. O Verilog permite que diferentes nveis de abstrao sejam misturados em um mesmo modelo. Ento, pode-se definir uma parte do hardware em termos de portas lgicas, outra em termos comportamentais, etc. As ferramentas de sntese lgica mais populares suportam o Verilog. Isto torna o Verilog a linguagem de escolha dos projetistas.

4.4 - Aplicaes do Verilog e outras linguagens HDL As linguagens de descrio de hardware encontraram a sua principal aplicao em Dispositivos Lgicos Programveis (PLD Programmable Logic Devices) em vrios nveis de complexidade, desde PLDs simples at PLDs complexos (CPLD Complex PLD), e tambm nos FPGAs (Field Programmable Gate Array). PLDs so, de maneira simplificada, matrizes programveis de estruturas de soma de produtos (AND-OR). So utilizados em circuitos onde no exigida muita flexibilidade nem muita lgica seqencial. J os FPGAs so dispositivos mais complexos, que consistem em vrios blocos lgicos em que o projeto realizado. Essa diviso em blocos e a composio dos mesmos varia de forma radical de fabricante para fabricante, no sendo aqui possvel uma explicao genrica deste dispositivo. No caso especfico do Verilog, temos que inicialmente (meio dos anos 80) ele era usado para o projeto de ASICs (usando ferramentas de sntese para automaticamente criar e otimizar a implementao). Atualmente, o Verilog tambm usado (como j foi mencionando) nas reas de FPGAs e PLDs (que so sua aplicao principal). Existem hoje em dia vrias linguagens de descrio de hardware sendo utilizadas atualmente. As mais populares so a Abel, Palasm e Cupl (usadas para projetos de dispositivos com baixa complexidade), e a Verilog e VHDL (para grandes CPLDs e FPGAs).

4.5 - Limitaes do Verilog O Verilog uma linguagem para projeto de sistemas digitais. At o presente momento ele no suporta trabalhar com sistemas e sinais analgicos. O IEEE 1364 define apenas a linguagem Verilog e sua sintaxe, porm ele no descreve os diferentes estilos do Verilog e quando us-los.

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 22

Cada ferramenta de sntese suporta uma partio da linguagem Verilog (definida pelo fabricante da ferramenta) e no toda a linguagem. Com isso a vezes necessrio se adequar (alterar) o seu cdigo (descrio em Verilog) para se usar determinada ferramenta de sntese.

4.6 - Nveis de abstrao Como j foi mencionado, uma descrio de um sistema digital em Verilog pode ser feita em vrios nveis de abstrao, que so os diferentes estilos de escrita em Verilog. A abstrao define o nvel de detalhamento necessrio ao projeto, especificado por uma dada descrio desejada. Esses nveis de abstrao so: 1. Nvel de Layout: o nvel mais baixo de abstrao. O projeto neste nvel implementado em termos de chaves, ns de armazenamentos, e das interconexes entre eles. Este nvel especifica as informaes sobre o layout atual do projeto na pastilha de silcio, e pode tambm especificar informaes detalhadas sobre temporizao e possveis efeitos analgicos. 2. Nvel de portas lgicas: Em seguida ao nvel de layout vem o nvel de portas lgicas. Aqui o projeto descrito como uma rede de portas lgicas e registradores, e das interconexes entre os mesmos. Projetar neste nvel similar a descrever um projeto em termos de diagrama lgico de portas lgicas. J o layout e os efeitos analgicos so ignorados. No entanto, o projeto contm informaes sobre a funo, a arquitetura, a tecnologia e a temporizao. 3. Nvel de Transferncia de registros (RTL Register Transfer Level): tambm conhecido como nvel de fluxo de dados. Nesse nvel usamos um estilo estrito do Verilog que define cada registrador do projeto, e a lgica entre eles (o projeto especifica o fluxo dos dados). Aqui, o projetista est preocupado em como os dados fluem entre os registradores. O projeto contm informaes sobre a arquitetura, mas no contm detalhes sobre a tecnologia. 4. Nvel Comportamental: Este o nvel mais alto de abstrao. Aqui descrevemos a funo do projeto sem especificar a arquitetura ou os registradores. O projeto pode ser implementado em termos do algoritmo do projeto desejado sem detalhes da implementao de hardware. Projetar neste nvel similar a programar em C.

4.7 - Nvel comportamental x RTL Como mostrado, existem quatro estilos distintos no Verilog. Os nveis de layout e de portas lgicas no so adequados para sistemas com um nmero considervel de elementos, sendo mais utilizados os nveis RTL e comportamental. Vamos ver os casos os casos em que um desses nveis (RTL e comportamental) mais adequado que o outro: A razo para o RTL ser to importante que a maioria das ferramentas de sntese que existem hoje requer que o cdigo esteja escrito em RTL. E nesse nvel o projetista ainda mantm controle sobre a arquitetura dos registradores do projeto. Por outro lado, as ferramentas de sntese comportamental geram automaticamente arquiteturas de portas lgicas e de registradores direto de uma descrio comportamental
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 23

em Verilog. Existem poucas ferramentas desse tipo e elas tendem a ser baseadas em VHDL. Geralmente voc precisa descrever seu projeto de FPGA ou PLD em RTL para usar as ferramentas de sntese disponveis. O nvel comportamental usado para criar estruturas de estmulos, para modelar partes padro do projeto, ou para criar especificaes simulveis do seu sistema.

Atualmente, as descries so feitas utilizando conjuntamente os nveis RTL e comportamental para dar maior flexibilidade ao projetista. E pra isso os fabricante j dispem de ferramentas de sntese lgica que suporta esses dois nveis de descrio (e tambm o de portas lgicas, se for necessrio).

4.8 - Conceitos principais da linguagem 1. Concorrncia Como o Verilog nos permite descrever hardware, ele tambm tem que ser capaz de descrever atividades que esto ocorrendo em paralelo (atividades concorrentes).
A B S C D

Fig. 12 Concorrncia

2. Estrutura Uma caracterstica muito importante do Verilog a capacidade de descrever estrutura ou hierarquia. Descries de estrutura podem ser misturadas com descries de comportamento. Tambm possvel ter apenas a descrio estrutural do projeto em Verilog ( que so as netlists do Verilog).
A B Cin SUM U1 U2 U1 Fig. 13 Estrutura hierrquica CARRY

3. Declaraes de procedimentos Uma descrio em Verilog pode tambm conter declaraes que executam um aps o outro em seqncia como uma linguagem de software tradicional com C ou Pascal. Isso conhecido como declaraes de procedimento. 4. Tempo O Verilog nos permite modelar o conceito de tempo, que claramente uma parte muito importante da descrio de um sistema eletrnico.

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 24

4.9 - Metodologias de projeto Existem 2 tipos bsicos de metodologias para projetos digitais: metodologia de projeto top-down e a metodologia de projeto botton-up. Na metodologia top-down ns definimos o bloco de nvel superior do projeto e identificamos os sub-blocos necessrios para construir o bloco de nvel superior. Subdividimos ento os sub-blocos at chegarmos em clulas bsicas (blocos que no podem ser subdivididos), como mostra a figura abaixo.
BS

SB

SB

SB

SB

CB

CB

CB

CB

CB

CB

CB

CB

Fig. 14 Metodologia top-down

Na metodologia bottom-up ns primeiro identificamos os blocos que possumos e a partir deles construmos blocos maiores at chegarmos no bloco de nvel superior, como mostra a figura abaixo.
BS

SB

SB

SB

SB

CB

CB

CB

CB

CB

CB

CB

CB

Fig. 15 Metodologia bottom-up

Usualmente usamos uma combinao dessas 2 metodologias. Especificamos o bloco de nvel superior e vamos dividindo-o ao mesmo tempo em que identificamos os blocos que j possumos e vamos agrupando-os para formar blocos maiores.

4.10 - Estrutura dos mdulos Agora vamos comear a ver como estruturamos o cdigo em Verilog para fazer a representao de um projeto. Um projeto formado a partir da construo de blocos, e no Verilog cada bloco chamado de mdulo. O mdulo o equivalente a um smbolo em um projeto baseado em esquema eltrico. A primeira coisa que temos que fazer quando desenvolvemos um bloco dar a ele um nome nico. Em seguida temos que definir as interfaces desse projeto e especificar quais so
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 25

entradas, sadas ou portas bidirecionais. Ns temos que incluir informaes sobre a funcionalidade que implementada pelo bloco. Ns podemos ainda ter a necessidade de incluir blocos de nvel inferior no projeto. Para isso temos que definir quais so esses blocos e como eles so interconectados. A esse processo d-se o nome de hierarquia. O bloco abaixo sintetiza tudo o que foi enunciado.
Entrada 1 Entrada 2 BlocoA Bloco X Sada 1 Sada 2 Bloco Y

Fig. 16 Estrutura de um mdulo

O mdulo pode ser um elemento ou uma coleo de blocos de projeto de nvel inferior. Tipicamente, os elementos so agrupados em mdulos para prover uma funcionalidade comum que usada em vrias partes do projeto. Um modulo prov a funcionalidade necessria para o bloco de nvel superior atravs de sua interface de portas (entradas e sadas), mas esconde a implementao interna. Isto permite ao projetista modificar o contedo de um mdulo sem afetar o resto do projeto. Um modulo declarado pela keyword module e seu trmino com a keyword endmodule. Todo mdulo deve conter um identificador para o mdulo (seu nome), o module_name, acompanhado de uma descrio das entradas e sadas do mdulo, o module_terminal_list. Deve conter tambm a definio de quem entrada/sada e a descrio de sua funcionalidade, o module_internals.

module<module_name> . . . <module_internals> . . . endmodule

O Verilog uma linguagem tanto estrutural quanto comportamental. O contedo de cada mdulo, como j foi explicado, pode ser definido em 4 nveis de abstrao, dependendo da necessidade do projeto. O mdulo se comporta identicamente com o ambiente externo independente do nvel de abstrao no qual descrito (o contedo do mdulo invisvel para o ambiente). Ento, podemos mudar o nvel de abstrao que descreve o mdulo sem a necessidade de mudanas no ambiente. O Verilog permite ao projetista misturar e casar os 4 nveis de abstrao em um mesmo projeto. Se um projeto contm 4 mdulos, o Verilog permite que cada modulo seja escrito em um nvel de abstrao diferente.
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 26

Quanto mais alto o nvel de abstrao, mais flexvel e independente da tecnologia o projeto. Quanto mais baixo o nvel de abstrao (aproximando do nvel de layout), mais dependente da tecnologia e inflexvel se torna o projeto. Considere a analogia com a programao em C e em Assembly. fcil programar em uma linguagem de alto nvel como o C, e o programa pode ser facilmente portado para qualquer mquina. No entanto, se o programa em assembly, ele escrito para uma mquina especfica e no facilmente portvel para outra mquina.

4.11 - Projeto hierrquico A hierarquia de um projeto descreve a forma na qual ele dividido em sub-blocos recursivamente at eventualmente chegarmos a um nvel de clula bsica. importante entender hierarquia para se entender os conceito de projeto hierrquico.
Bloco A

Bloco X Bloco D Bloco B

Bloco Y Bloco D Bloco E

Bloco Z Bloco B Bloco C

Fig. 17 Projeto hierrquico

Acima temos o diagrama que mostra os sub-blocos que formam o bloco A e a sua hierarquia dentro do bloco. As vantagens que obtemos ao fazer uso da hierarquia so: Ao dividir o projeto em partes menores se torna mais fcil encontrar e depurar erros, j que o projetista ir lidar com pedaos menores de cdigo. Pedaos da lgica (sub-blocos) podem ser identificados e reusados em outras partes do projeto apenas instanciando ("chamando") o sub-bloco quando necessrio. Um projeto em blocos pode ser distribudo entre vrios projetistas.

4.12 - Instncias Um mdulo um modelo, a partir do qual voc pode criar objetos. Quando um mdulo chamado, o Verilog cria um objeto nico a partir do modelo. Cada objeto tem seu prprio nome, variveis, parmetros e interfaces de E/S. O processo de criar um objeto a partir de um mdulo modelo chamado instanciao, e os objetos so chamados de instncias. No exemplo abaixo (contador de 4 bits) o bloco de nvel superior cria 4 instncias do flip-flop T (T_FF) modelo, que por sua vez instncia um D_FF e uma porta inversora. Observe que cada instncia deve possuir um nome nico. Atente para o fato de que no Verilog ilegal cascatear mdulos (um dentro do outro), s permitido instanciar.

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 27

Contador de 4 bits q T_FF tff 0

q0 q T_FF tff 0

q1 q T_FF tff 0

q2 q T_FF tff 0

q3

clock

reset Fig. 18 Contador de 4 bits q

d clock q D_FF

reset Fig. 19 Flip-flop D

Temos a seguir a descrio em Verilog. module ripple_carry_ counter(q, clk, reset); output [3,0] q; input clk, reset; T_FF tff0(q(0), clk, reset); T_FF tff1(q(1), q(0), reset); T_FF tff2(q(2), q(1), reset); T_FF tff3(q(3), q(2), reset); endmodule module T_FF(q, clk, reset); output q; input clk, reset; wire d; D_FF dff0(q, d, clk, reset); // instncia de D_FF not n1(d, q) // a porta inversora uma porta bsica do Verilog endmodule // 1 // 2 // 3 // 4 instncia do T_FF instncia do T_FF instncia do T_FF instncia do T_FF

4.13 - Representando hierarquia A hierarquia representada pela instanciao. Instanciando blocos de nveis inferiores (sub-blocos) ns podemos usar sua funcionalidade, mas no precisamos descrever sua
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 28

funcionalidade neste nvel. Podemos descrever o mdulo de nvel inferior em qualquer outro lugar. No entanto isso significa que o mdulo pode ter dois tipos de nomes: nomes de referncia e nomes de instncia. Para no gerar confuso vamos ver um exemplo de um somador completo feito a partir de dois meio somadores. Isso ns d dois nveis de hierarquia.
somador completo meio somador meio somador

Fig. 20 Estrutura hierrquica de um somador completo

Neste caso, o bloco meio somador, com nome de referncia HALF_ADD instanciado duas vezes. Ento precisamos de dois nomes de instncia U1 e U2 para distingu-los.
FULL ADD A B Cin HALF_ADD U1 HALF_ADD U2 OR SUM

CARRY

Nomes de instncia Fig. 21 Instncias em um somador completo

Tipicamente voc vai instanciar o nvel mais alto do seu projeto em um mdulo de estmulo (que serve para testar a funcionalidade do projeto), que ento passar a ser o seu bloco de nvel superior.

4.14 - Componentes de uma simulao Uma vez que um projeto ou parte dele completado, uma boa prtica test-lo. A funcionalidade do bloco projetado pode ser testada aplicando-se estmulos e checando os resultados. Ns chamamos o bloco que faz isso de mdulo de estmulo. uma boa prtica manter o projeto e mdulo de estmulo em arquivos separado e identificar os dois como fazendo parte de um mesmo projeto maior. Dois estilos de aplicao de estmulos so possveis. No primeiro estilo o mdulo de estmulo instancia o mdulo do projeto e mando e recebe sinais do mesmo (o bloco de estmulo no possui nem entradas nem sadas). No segundo estilo, os blocos de estmulo e projeto so instanciados em um mdulo de teste (novo bloco de nvel superior). O bloco de estmulo ento interage com o projeto atravs de suas interfaces. Temos a seguir um esquema ilustrativo desses dois estilos de simulao.

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 29

Bloco de estmulo (estmulos)

Bloco de teste

mdulo mdulo projetado de estmulo (resultados)

mdulo do projeto

Fig. 22 Estilos de simulao

4.15 - Nomes hierrquicos Como foi visto o Verilog suporta uma metodologia de projeto hierrquico. Cada instncia de um mdulo definida com um identificador (seu nome de instncia). Cada identificador em particular tem uma posio nica na hierarquia do projeto. Um nome hierrquico uma lista de identificadores separados por pontos para cada nvel de hierarquia. Ento, cada identificador pode ser endereado de qualquer lugar do projeto simplesmente especificando o nome hierrquico correspondente desse identificador. O mdulo de nvel superior chamado de mdulo raiz porque ele no instanciado em nenhum lugar do projeto. Ele o ponto de partida. Normalmente o mdulo de nvel superior um mdulo de estmulo (para testar o projeto). Para identificar o nome nico de um identificador, comece do mdulo de nvel superior e trace o caminho atravs do projeto hierrquico at o identificador desejado. Para ficar mais claro esse processo, vamos considerar o exemplo abaixo, j visto anteriormente.
ESTMULO FULL ADD A B Cin L1 HALF_ADD U1 HALF_ADD U2 L2 L3 OR CARRY SUM

Fig. 23 Mdulo de estmulo do somador completo

Para essa simulao, o mdulo ESTMULO o mdulo de nvel superior. Como ele no instanciado em parte alguma, ele o mdulo raiz. Os identificadores definidos nesse mdulo so A, B, Cin, SUM e CARRY. Mdulo raiz instancia U1 (com o identificadores a, b, L1 e L2) e U2 (com os identificadores (L1, cin, sum L3), que so mdulos do tipo HALF_ADD e uma porta bsica OR (com os identificadores L2, L3, cr). Como a porta OR um bloco bsico do Verilog e s usado uma vez no necessrio instanci-la. A partir dai podemos identificar os nomes hierrquicos, que so:
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 30

ESTMULO ESTMULO.FULL_ADD ESTMULO.FULL_ADD.A ESTMULO.FULL_ADD.B ESTMULO.FULL_ADD.Cin ESTMULO.FULL_ADD.SUM ESTMULO.FULL_ADD.CARRY

ESTMULO.FULL_ADD.HALF_ADD.U1 ESTMULO.FULL_ADD.HALF_ADD.U2 ESTMULO.FULL_ADD.HALF_ADD.U1.A ESTMULO.FULL_ADD.HALF_ADD.U1.B ESTMULO.FULL_ADD.HALF_ADD.U1.L1 ESTMULO.FULL_ADD.HALF_ADD.U2.L1 ESTMULO.FULL_ADD.OR.CARRY

A partir dai voc pode identificar os outros nomes hierrquicos.

4.16 - Exemplos de mdulos Vamos agora mostrar 2 exemplos simples de mdulos para mostrar de uma forma geral como uma descrio feita no Verilog. 4.16.1 - Meio somador
HALF ADD A B XOR AND SUM CARRY

Fig. 24 Estrutura de um meio somador

A palavra chave module define o comeo de cada descrio de mdulo e seguida pela lista de portas. Aps a lista de portas vem a declarao das portas. Cada porta declarada com entrada, sada ou entrada/sada. Voc pode especificar portas como barramento declarando que a porta tem um comprimento nas declaraes de entrada ou sada. Finalizando descrevemos o comportamento do mdulo. Neste caso temos duas atribuies de sinais: o resultado de "A xor B" atribudo para a sada SUM, e o resultado de "A and B" e atribudo para a sada CARRY. A seguir temos o cdigo em Verilog para esse mdulo. module HALF_ADD(A, B, SUM, CARRY); output SUM, CARRY; input A, B; assign SUM=A^B; assing CARRY=A&B; endmodule

4.16.2 - Somador completo Agora, para demonstrar o uso de hierarquia vamos ver o cdigo de um somador completo, incorporando dois dos meios somadores projetados no exemplo anterior.

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 31

FULL ADD A B Cin I1 HALF_ADD U1 HALF_ADD U2 I2 Fig. 25 Estrutura do somador completo I3 OR CARRY SUM

O nome do mdulo e lista de portas so seguidos das declaraes locais. Nosso FULL_ADD contm os sinais I1, I2 e I3 que so locais ao projeto (no so nem entradas nem sadas). Sinais locais so declarados no seu respectivo mdulo, aps a declarao das portas. Em seguida vem a instanciao dos 2 meio somadores (U1 e U2). E, como parte da instanciao, temos que definir as conexes aos terminais dos meio somadores (na mesma seqncia definida no mdulo HALF_ADD). As conexes aos mdulos HALF_ADD so feitas pela posio: a primeira porta listada no HALF_ADD (porta A) conectada a primeira porta listada na instanciao do HALF_ADD no mdulo FULL_ADD (porta A), e assim por diante. Ns ainda temos uma pequena seo de cdigo que descreve a funo OR que requeria pelo somador completo. E, finalmente declaramos o fim da descrio do mdulo. Note que o contedo do meio somador no definido neste nvel ( apenas instanciado). A seguir temos o cdigo em Verilog para esse mdulo. module FULL_ADD(A, B, Cin, SUM, CARRY); output SUM, CARRY; input A, B, Cin; wire I1, I2, I3; HALF_ADD U1(A,B, I1, I2); HALF_ADD U2(I1, Cin, SUM, I3); assign CARRY=I2 | I3; endmodule

4.17 - Conceitos bsicos Para se fazer uma descrio em Verilog necessrio ter conhecimentos das vrias partes que compem a descrio (como estruturar um mdulo, como definir entradas e sadas, as convenes lxicas usadas, os tipos de dados aceitos pela linguagem, etc.), ou seja, dos conceitos bsicos inerente ao Verilog. Nos itens a seguir teremos uma viso geral acerca desses conceitos para com isso proporcionar uma motivao para um posterior estudo mais aprofundado da linguagem. Atente ao fato de que os conceitos estruturais inerentes ao Verilog que sero apresentados a seguir esto apenas dando uma viso geral para que voc possa comear a dar os primeiros passos em Verilog, e no para que voc saia j programando (o quer requer um estudo bem mais detalhado e dedicado).

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 32

4.18 - Convenes lxicas As convenes lxicas bsicas usadas pelo Verilog so similares as usadas na linguagem C. O Verilog possui muitos marcadores. Marcas podem ser comentrios, delimitadores, nmeros, strings, identificadores, e palavras-chaves. O Verilog uma linguagem case sensitive, isto , ela diferencia as letras maisculas das minsculas. E, todas as palavras-chaves devem ser escritas em minsculas. 4.18.1 - Espaos em branco Espaos em branco (\b), tabulaes (\t) e novas linhas (\n) compreendem o espao em branco. Os espaos em brancos so ignorados pelo Verilog, exceto quando esto separando marcas. Os espaos em branco no so ignorados em strings. 4.18.2 - Comentrios Como na linguagem C, os comentrios de uma linha comeam com //. Comentrios de mltiplas linhas comeam com /* e terminam com */. 4.18.3 - Operadores O Verilog aceita trs tipos de operadores: unrio, binrio e ternrio. Operadores unrios precedem o operando. Os operadores binrios aparecem entre os operandos. Os operadores ternrios possuem dois operadores separados que separam trs operandos. a = ~ b // ~ um operador unrio. b o operando a = b && c // && um operador binrio. b e c so operandos a = b ? c : d // ?: um operador ternrio. b, c e d so os operandos. 4.18.4 - Especificaes de nmeros - Nmeros com comprimento definido: So representados como: <comprimento><base numrica><nmero> - Nmeros sem comprimento definido: So representados como: <base numrica><nmero> Os nmeros sem a definio da <base numrica> so entendidos como decimal. - Valores X e Z: O x denota um nmero desconhecido, e o z denota alta impedncia. Um x ou um z definem 4 bits para um nmero hexadecimal, 3 bits para um nmero octal e 2 bits para um nmero binrio. Se o bit mais significativo um 0, x ou z, e voc no define os bits restantes, os bits mais significativos restantes so automaticamente preenchido, respectivamente, com 0, x ou z. Se o bit mais significativo for um 1, o restante ser preenchido com 0. - Nmeros negativos: So definidos colocando-se um sinal - antes do <comprimento> do nmero.

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 33

- Caracteres _ e ?: O _ usado para facilitar a leitura do nmero (usamos para separar o nmero), j que no tem efeito algum sobre o mesmo (exceto se for colocado antes do nmero). A ? uma alternativa para o z (alta impedncia) no contexto dos nmeros. Temos a seguir exemplos de especificaes de nmeros. 4b1111 // Nmero binrio de 4 bits 12habc // Nmero hexadecimal de 12 bits 16d255 // Nmero decimal de 16 bits 23456 // Nmero decimal sem comprimento definido hc3 // Nmero hexadecimal sem comprimento definido 12h13x // N hexa de 12 bits (4 bits menos significativos desconhecidos) 6hx // N hex a de 6 bits (todos desconhecidos) 32bz // N binrio de 32 bits (todos em alta impedncia) -6d3 // N negativo de 6 bits armazenado em complemento de dois 12b1111_0000_1010 // Uso de _ para facilitar a leitura do nmero 4b10?? // Equivalente a 4b10zz 4.18.5 - Strings Uma string uma seqncia de caracteres delimitados por aspas. A restrio que uma string deve ser de apenas uma linha. 4.18.6 Identificadores e palavras-chave Palavras-chave so identificadores especiais reservados para definir as estruturas da linguagem. As palavras-chave devem estar em minsculas. Procure conhecer as palavras-chaves em algum livro ou tutorial sobre o Verilog. Identificadores so nomes dados a objetos para que os mesmos possam ser referenciados no projeto. Identificadores podem conter caracteres alfanumricos, _ e $, porm no podem iniciar pelo & ou por um nmero.

4.19 - Tipos de dados 4.19.1 - Definio de valores O Verilog suporta 4 valores e oito pesos para modelar a funcionalidade de sistemas reais. Temos abaixo esses 4 valores e a definio dos pesos. Nvel de Valor 0 1 x z Condio em circuitos digitais Zero lgico, condio falsa Um lgico, condio verdadeira Valor desconhecido Alta impedncia, estado flutuante

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 34

Nvel de peso suplly strong pull large weak medium small highz

Tipo Transmisso Transmisso Transmisso Armazenamento Transmisso Armazenamento Armazenamento Alta impedncia

Degrau Maior prioridade

Menor prioridade

Se tivermos um sinal pull e um sinal weak ao mesmo tempo em um fio, o valor do pull ir se sobressair sobre o weak (esse pensamento vale para todos os nveis). Se os sinais so de pesos iguais o resultado um valor desconhecido. 4.19.2 - Nets Nets representam conexes entre elementos digitais. Seriam as interconexes entre os elementos (os fios). Nets so declaradas pela palavra-chave wire. O valor padro de um net z. 4.19.3 - Registradores Os registradores representam elementos de armazenagem de dados. Eles retm o valor at que um novo valor seja escrito neles. No confunda o termo registrador do Verilog com os registradores reais. No Verilog o termo registrador se refere a uma varivel que pode armazenar valor. Os registradores so definidos pela palavra-chave reg (reg reset, um exemplo de definio de um registrador). 4.19.4 - Vetores Nets ou registradores podem ser declarados como vetores (de comprimento de mltiplos bits). Se o nmero de bits no especificado o Verilog toma como padro 1. wire [7:0] bus // Barramento de 8 bits reg [0:40] sum // Varivel reg de 41 bits Note que o bit da esquerda (no importa a definio do vetor) o bit mais significativo. 4.19.5 - Registros de tipos de dados integer, real e time Integer: um registro de tipos de dados de propsito geral usado para manipular quantidades. So declarados pela palavra-chave integer. Real: nmero reais constantes e registros de tipos de dados real so declarados pela palavrachave real. Podem ser especificados em notao decimal ou cientfica. Ele no deve conter uma declarao de comprimento. Seu valor padro 0. Time: simulaes no Verilog terminam com seus respectivos tempos de simulao. O time usado para armazenar tempo de simulao. declarado pela palavra-chave time.

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 35

4.19.6 - Arrays Arrays so permitidos para reg, integer, time e vetores (no so permitidos para variveis reais). importante no confundir array com vetor. Um vetor um elemento de n-bits de comprimento, enquanto um array composto de n elementos de 1-bit ou n-bits de comprimento. Temos abaixo alguns exemplos. integer count[0:7] // Array de 8 variveis count reg [4:0] port_id [0:7] // Array de oito port_id, cada port_id com 4 bits 4.19.7 - Memrias As memrias no Verilog so simples arrays de registros (como no segundo item do exemplo anterior). 4.19.8 - Parmetros Usamos a palavra-chave parameter para definir constantes. Os parmetros no podem ser usados como variveis. 4.19.9 - Strings Strings devem ser armazenadas em variveis do tipo reg. O comprimento do registrador deve ser suficiente para acomodar toda a string.

4.20 - Mdulos Vamos agora analisar o contedo de um mdulo. Um mdulo no Verilog consiste de vrias partes distintas, como mostrado abaixo.
Nome do mdulo Lista de portas, declaraes das portas (se existirem portas) Parmetros (opcional) Declaraes de wires, regs e outras variveis Declaraes de fluxo de dados (assign)

Instanciao de mdulos de nvel inferior

Blocos always e initial. Todas declaraes comportamentais vo nesses blocos

Funes e tarefas

Declarao endmodule Fig. 26 Contedo de um mdulo

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 36

A definio de um mdulo sempre inicia com a palavra-chave module. O nome do mdulo, lista de portas, declaraes das portas e o opcional parmetros devem vir primeiro na definio do mdulo. Lista de portas e declaraes de portas esto presentes apenas se o mdulo contiver portas para interagir com o ambiente externo. Os cinco componentes pertencente ao mdulo so: declaraes de variveis, declaraes de fluxo de dados, instanciao de mdulos de nveis inferiores, blocos comportamentais, e funes e tarefas. Estes componentes podem estar em qualquer ordem e em qualquer lugar na definio do mdulo. A declarao endmodule deve sempre vir por ltimo na definio do mdulo. Todos os componentes exceto module, nome de mdulo e endmodule so opcionais podem ser misturados e casados de acordo com a necessidade do projeto. O Verilog permite que vrios mdulos sejam definidos em um mesmo arquivo. Estes mdulos podem vir em qualquer ordem no arquivo. Para entender os componentes de um mdulo mostrados acima, vamos considerar um exemplo simples de um latch SR, confirme a figura a seguir.
Sbar (set)

Rbar (reset) Fig. 27 Latch RS

Qbar

O latch SR tem S e R como portas de entrada e Q e Qbar como portas de sada. O latch SR e seu bloco de estmulo podem ser modelados conforme o cdigo abaixo. module SR_latch(Q, Qbar, Sbar, Rbar); output Q, Qbar; input Sbar, Rbar; nand n1(Q, Sbar, Qbar); // Instanciao da porta nand nand n2(Qbar, Rbar, Q); endmodule module estimulo; wire q, qbar; reg set, reset; SR_latch m1(q, qbar, ~set, ~reset); initial begin $monitor($time set = %b, reset = %b, q = %b\n, set, reset, q); set = 0; reset = 0; #5 reset = 1; #5 reset = 0; # 5 set = 1; end endmodule
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 37

Perceba as seguintes caractersticas sobre os mdulos definidos acima. Na definio do latch SR, perceba que todos os componentes descritos na figura acima esto presentes no mdulo. Ns no temos declaraes de variveis, declaraes de fluxo de dados, ou blocos comportamentais (always ou initial). No entanto, o bloco de estmulo contm declaraes nome de mdulo, wire, reg, e declaraes de variveis, instanciao de mdulos de nvel inferior, bloco de comportamento (initial) e endmodule, mas no contm lista de portas, declarao de portas, e declaraes de fluxo de dados (assign). Ento, todas as partes exceto module, nome do mdulo, e endmodule so opcionais e podem ser misturados e casados de acordo com as necessidades do projeto.

4.21 - Portas As portas provm a interface pela qual o mdulo se comunica com o ambiente. Por exemplo, os pinos de E/S de um CI so as suas portas. O ambiente interage com o mdulo atravs das portas. O contedo do mdulo no visvel para o ambiente. Isto prov uma flexibilidade muito poderosa ao projetista. O contedo do mdulo pode ser mudado sem afetar o ambiente desde que a interface no seja modificada. Portas so tambm chamadas de terminais. 4.21.1 - Lista de portas A definio de um mdulo contm uma opcional lista de portas. Se o mdulo no troca sinais com o ambiente, no h portas na lista. Considere um somador completo de 4 bits instanciado em um mdulo de estmulo, conforme a figura abaixo.
estimulo a b c-in somador completo (4 bits) fulladd4 sum

c-out

Fig. 28 Somador completo de 4 bits

Note que o mdulo estimulo o bloco de nvel superior. O mdulo fulladd4 tem como portas de entrada a, b e cin e como portas de sada sum e carry. Ento, fulladd4 se comunica com meio externo. J o mdulo estimulo no necessita de se comunicar com o ambiente, ele apenas se comunica com fulladd4, ento no necessita de um lista de portas. Temos abaixo um exemplo da declarao desses mdulos e de suas listas de portas. module fulladd4(sum, c_out, a, b, c_in); // mdulo com uma lista de portas module estimulo; // mdulo sem lista de portas (no contm portas) 4.21.2 - Declaraes de portas Todas as portas na lista de portas devem ser declaradas no mdulo. As portas podem ser declaradas como input (porta de entrada), output (porta de sada) ou inout (porta bidirecional). Veja a seguir a declarao das portas do fulladd4.
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 38

module fulladd4(sum, c_out, a, b, c_in) output [3:0] sum; output c_out; input [3:0] a, b; input c_in; ... <module internals> ... endmodule Note que todas as declaraes de portas so implicitamente declaradas como wire no Verilog. Ento, se uma porta deve ser declarada como wire, suficiente declar-la como output, input ou inout. As portas input e inout so normalmente declaradas como wire. No entanto, se a porta output deve armazenar algum valor, ela deve ser declarada como reg. Portas input e inout no podem ser declaradas como reg porque as variveis reg armazenam valores e esses tipos de portas apenas refletem as mudanas dos sinais externos a que so conectadas. 4.21.3 - Regras de conexes de portas Podemos visualizar uma porta como consistindo de duas unidades, uma interna ao mdulo e outra externa ao mesmo. As unidades internas e externas so conectadas. Existem regras que governam a conexo de portas quando mdulos so instanciados em outros mdulos. O Verilog funcionar de maneira anmala se essas regras forem violadas. Essas regras esto ilustradas na figura abaixo.
net net input reg ou net net inout output reg ou net net

Fig. 29 Regra de conexo de portas

- Input: Internamente, portas do tipo input devem sempre ser do tipo net. Externamente, elas podem ser conectadas as variveis reg ou net. - Output: Internamente, portas output podem ser do tipo reg ou net. Externamente, elas devem ser sempre conectadas com nets. - Inout: Internamente devem ser sempre do tipo net. Externamente, inouts devem sempre ser conectadas as nets. - Portas desconectadas: O Verilog permite que deixemos portas desconectadas. Voc pode deixar uma porta desconectada instanciando um mdulo como mostrado abaixo. Fulladd4 fa0(SUM, , A, B, C_IN); // A porta de sada c est desconectada
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 39

4.21.4 - Conectando portas a sinais externos Existem dois mtodos de se fazer conexes entre sinais especificados na instanciao do mdulo e as portas na definio do mdulo. Os dois mtodos no podem ser misturados. - Conectando por lista ordenada: Conectar por lista ordenada o mtodo mais intuitivo para a maioria dos iniciantes. Os sinais a serem conectados devem aparecer na instanciao do mdulo na mesma ordem que as portas na lista de portas da definio do mdulo. Vamos considerar o mdulo fulladd4 como exemplo (j explorado anteriormente). Para conectar sinais do mdulo estimulo por uma lista ordenada devemos usar um cdigo como o mostrado abaixo. Note que os sinais externos SUM, C_OUT, A, B, e C_IN aparecem exatamente na mesma ordem que as portas sum, c_out, a, b, e c_in na definio do mdulo fulladd4. module estimulo; reg [3:0] A, B; // Declarao das variveis de conexo reg C_IN; wire [3:0] SUM; wire C_OUT; fulladd4 fa_orden(SUM, C_OUT, A, B, C_IN); // Instanciao de fulladd4 ... <estmulos> ... endmodule module fulladd4(sum, c_out, a, b, c_in); output [3:0] sum; output c_out; input [3:0] a, b; input c_in; ... <module internals> ... endmodule - Conectando portas por nome: Para grandes projetos onde os mdulos tm, por exemplo, 50 portas ou mais, lembrar a ordem das portas na definio do mdulo impraticvel e bastante factvel ao erro. O Verilog, ento, tambm prov a capacibilidade de se conectar sinais externos a portas usando os nomes hierrquicos das portas. Temos abaixo um exemplo para o fulladd4. Note que voc pode especificar as conexes das portas em qualquer ordem desde que o nome da porta na definio do mdulo corresponda corretamente ao sinal externo. Fulladd4 fa_nome(.c_out(C_OUT), .sum(SUM), .b(B), .c_in(C_IN), .a(A)); Note que apenas as portas que sero conectadas a sinais externos devem ser especificadas na conexo de portas por nome. Por exemplo, se a porta c_out no conectada a sinal algum, a instanciao de fulladd4 ser de seguinte maneira:

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 40

Fulladd4 fa_nome(.sum(SUM), .b(B), .c_in(C_IN), .a(A)); Outra vantagem de se conectar portas por nome que enquanto o nome da porta no mudado, a ordem da portas na lista de portas de um mdulo pode ser rearranjada se causar mudanas nas conexes das portas nos mdulos instanciados.

4.22 - Exemplos de estruturas de mdulos Vamos terminar essa introduo do Verilog com alguns exemplos de estruturas de mdulos. Usaremos como exemplo um multiplexador 4 para 1, descrevendo-o em trs nveis de abstrao (portas lgicas, RTL e comportamental) para que voc perceba os diferentes estilos de escrita de mdulos.

4.22.1 - Nvel de portas lgicas Temos abaixo o diagrama lgico do MUX 4x1.
In0 Sel1 In1 Sel0 In2 NotSel0 Out Y2 Y0 NotSel1 Y1

In3

Y3

Fig. 30 Diagrama lgico do MUX 4x1

E, a seguir, a sua descrio em Verilog no nvel de portas lgicas. Module mux4x1(Out, In0, In1, In2, In3, Sel1, Sel0); output out; input In0, In1, In2, In3, Sel0, Sel1; wire NotSel0, Not Sel1; wire Y0, Y1, Y2, Y3; not (NotSel0, Sel0); not (NotSel1, Sel1); and (Y0, In0, NotSel1, NotSel0); and (Y1, In1, NotSel1, Sel0); and (Y2, In2, Sel1, NotSel0); and (Y3, In3, Sel1, Sel0); or (Out, Y0, Y1, Y2, Y3); endmodule
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 41

4.22.2 - Nvel de fluxo de dados (RTL)


In0 and lgico and lgico and lgico and lgico not lgico Sel1 Sel0 Fig. 31 Diagrama de fluxo de dados do MUX 4x1 not lgico or lgico Out

In1

In2

In3

module mux4x1(Out, In0, In1, In2, In3, Sel1, Sel0); output Out; input In0, In1, In2, In3, Sel0, Sel1; assign Out = (~Sel1 & ~Sel0 & In0) | (~Sel1 & Sel0 & In1) | (Sel1 & ~Sel0 &In2) | (Sel1 & Sel0 & In3) endmodule

4.22.3 - Nvel comportamental


In0 In1 In2 In3 Sel1 Sel0 Out

Fig. 32 Diagrama lgico do MUX 4x1

module mux4x1(Out, In0, In1, In2, In3, Sel1, Sel0); output Out; input In0, In1, In2, In3, Sel0, Sel1; reg Out; always @(Sel1 or Sel0 or In0 or In1 or In2 or In3) begin
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 42

case ([Sel1, Sel0}) 2b00 : Out = In0; 2b01 : Out = In1; 2b10 : Out = In2; 2b11 : Out = In3; default : Out = 1bx; endcase end endmodule

4.23 - Bibliografia 01. PALNIKTAR, Salmir. Verilog HDL A Guide to Digital Design and Synthesis, Sun Soft Press, California, EUA, 1996. 02. HYDE, Daniel C. CSCI 320 Computer Architecture Handbook of Verilog HDL. Bucknell University, Lewisburg, PA, 1997. (http://www.eg.bucknell.edu/~cs320/1995-fall/verilog-manual.html) 03. Masterclass Multimedia Verilog Tutorial, Esperan (http://www.esperan.com/index2.htm) 04. Evita Verilog Tutorial, Aldec (http://www.aldec.com/pages/Downloads.htm) 05. Verilog-HDL Introductory Course . (http://www.vol.webnexus.com/index.html) 06. A Hardware Designers Guide to Verilog, Doulos (http://www.doulos.co.uk/hdgv/index.htm) 07. BLAIR, Gerard M. Online Verilog manual, (http://www.ee.ed.ac.uk/~gerard/Teach/Verilog/manual/index.html) University of Edinburgh

08. PELLERIN, David. Introduction to VHDL for synthesis and simulation, Accolade Desing Automation Inc. (www.acc_eda.com\h_intro.htm) 09. Masterclass Multimedia Verilog Tutorial, Esperan (http://www.esperan.com/index2.htm) 10. Evita VHDL Tutorial, Aldec (http://www.aldec.com/pages/Downloads.htm)

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 43

5. O VERILOG E A FERRAMENTA DE SNTESE LGICA DA ALTERA

5. 1 - Consideraes iniciais Como j foi mencionado, cada ferramenta de sntese lgica suporta apenas uma partio do Verilog (e no toda a linguagem). A ferramenta lgica que vamos utilizar no uma exceo, ela tambm s trabalha com uma partio do Verilog. E isto que ns vamos abordar neste captulo. Essa ferramenta permite que a descrio seja feita misturando-se os nveis RTL e comportamental. Vamos ento estudar a partio do Verilog RTL e comportamental suportada pela ferramenta. Na verdade, no vamos aqui abordar toda a partio do Verilog e as funcionalidades que a ferramenta suporta, pois isto tornaria este captulo muito extenso e tedioso. Vamos aqui abordar basicamente o que necessrio para se iniciar com projetos usando Verilog. Vamos estudar quais so os tipos de operadores que o Verilog suporta e quais so as operaes que esses operadores realizam; como definir constantes; a estrutura de controle de eventos; as estruturas if-else, case e for; e veremos como implementar lgica combinacional, como tambm lgica seqencial.

5.2 - Tipos de operadores Os operadores suportados pelo Verilog so dos tipos: aritmticos, lgicos, relacionais, de igualdade, bitwise, de reduo, de deslocamento, de concatenao, e condicional. Muitos desses operadores so parecidos com os da linguagem C. Cada operador (como nas linguagens de programao) possui um smbolo que o representa. Temos a seguir uma tabela com a lista completa dos operadores e seus smbolos, agrupados por tipo. Tipo de Operador Aritmtico Smbolo do Operador Operao Realizada * / + % ! && || > < >= <= == != === !== Multiplicao Diviso Adio Subtrao Mdulo NOT lgico AND lgico OR lgico Maior que Menor que Maior ou igual que Menor ou igual que Igualdade Desigualdade Igualdade Case Desigualdade Case Nmero de Operandos Dois Dois Dois Dois Dois Um Dois Dois Dois Dois Dois Dois Dois Dois Dois Dois
A

Lgico

Relacional

Igualdade

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 44

Bitwise

Reduo

Deslocamento

~ & | ^ ^ ~ ou ~ ^ & ~& | ~| ^ ^ ~ ou ~ ^ >> << { } {{ }} ?:

Concatenao Replicao Condicional 5.2.1 - Operadores aritmticos

NOT AND OR XOR XNOR AND redutor NAND redutor OR redutor NOR redutor XOR redutor XNOR redutor Deslocamento a direita Deslocamento a esquerda Concatenao Replicao Condicional

Um Dois Dois Dois Dois Um Um Um Um Um Um Dois Dois Qualquer nmero Qualquer nmero trs

Os operadores aritmticos podem ser binrios ou unrios. Os operadores binrios so aqueles que operam sobre dois operandos: multiplicao (*), diviso (/), adio (+), subtrao(-) e mdulo (%). Temos a seguir alguns exemplos. // A = 4b0011, B = 4b0100, C = 6, D = 4 A * B // Multiplica A por B e resultam em 4b1100 C / D // Divide C por D, truncando a parte fracionria A + B // Soma A com B, resultando em 4b0111 B A // Subtrai A de B, resultando em 4b0001 C % D // Resulta no resto da diviso de C por D, que 2 Observe que se um dos operando conter um bit do tipo x, o resultado da operao ser x (no d pra precisar o valor se um dos operandos no tem um valor preciso). Observe tambm que o resultado da operao mdulo tem sempre o mesmo sinal do primeiro operando da operao (Se C fosse 6 o resultado seria 2; e se C fosse positivo e D negativo o resultado teria sinal positivo). Os operadores + e tambm so usados como operadores unrios. Eles so utilizados para definir o sinal de um operando (por conveno, os operandos sem sinal so considerados positivos). E, o Verilog representa internamente os nmeros negativos em complemento de 2. Uma ressalva aqui que embora tenhamos explicado os operadores / e %, os mesmos no so suportados pela ferramenta de sntese lgica da Altera (Max+Plus II). 5.2.2 - Operadores lgicos Os operadores lgicos realizam uma funo lgica em dois operados (no caso de NOT utilizado apenas um operando) e retornam como resultado um O (falso) ou um 1 (verdadeiro) de acordo com a funo lgica que foi executada. Qualquer operando diferente de zero considerado como sendo um 1 lgico. Temos a seguir alguns exemplos.
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 45

// A = 3, B = 0 A && B // Realiza um AND lgico entre A (1 lgico) e B (0 lgico) resultando em 0 A || B // OR lgico entre A e B, resultando em 1 !A // Negao lgica de A, resultando em 0 !B // Negao lgica de B, resultando em 1 5.2.3 - Operadores relacionais Os operadores relacionais comparam dois operandos e retornam um 1 se a comparao for verdadeira e um 0 se for falsa. Os operadores relacionais so: maior que (>), menor que (<), maior ou igual a (>=) e menor ou igual a (<=). Observe alguns exemplos. // A = 4, B = 3, X = 4 b1010, Y = 4 b1101 A <= B // Resulta em 0 A > B // Resulta em 1 Y >= X // Resulta em 1 5.2.4 - Operadores de igualdade Comparam 2 operadores bit a bit, retornando um 0 (falso) ou um 1 (verdadeiro), de acordo com o resultado da comparao. Se os operando so de comprimento diferentes, o menor preenchido com zeros. A tabela a seguir lista esses operadores. Expresso A==B A!=B A===B A!==B Descrio A igual a B, o resultado do tipo x se A ou B contiverem bits do tipo x A diferente de B, o resultado do tipo x se A ou B contiverem bits do tipo x A igual a B incluindo os bits x e z A diferente de B incluindo os bits x e z Valores lgicos possveis 0, 1, x 0, 1, x 0, 1 0, 1

Os Operadores de igualdade === e !==, embora mostrados acima, no so suportados pelo Max+Plus II. 5.2.5 - Operadores Bitwise Esses so os conhecidos operadores da eletrnica digital. Eles realizam a operao bit a bit em dois operandos (ou em um se for o operador NOT). Eles pegam cada bit de um operando e realizam a operao com o bit correspondente do outro operando (se os operando forem de comprimento diferentes, o menor preenchido por zeros). Temos a seguir alguns exemplos. // X = 4b1010, Y = 4b1101 ~X // Negao de X, resultando em 4b0101 X & Y // And entre X e Y, resultando em 4b1000 X | Y // Or entre X e Y, resultando em 4b1111 5.2.6 - Operadores de Reduo Esses operandos realizam operaes da lgica digital em apenas um operando. Como podemos ver nos exemplos a seguir.

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 46

// X = 4b1010 &X // Equivalente a 1 & 0 & 1 & 0, resultando em 1b0 |X // Equivalente a 1 | 0 | 1 | 0, resultando em 1b1 ^X // Equivalente a 1 ^ 0 ^ 1 ^ 0, resultando em 1b0 5.2.7 - Operadores de deslocamento Esses operadores deslocam os bits de um operando para a direita ou esquerda um nmero especificado de bits, como mostrado a seguir. // X = 4b1100 Y = X >> 1; // Y igual a X deslocado de um bit para a direita. Y = 4b0110 Y = X << 1; // Y igual a X deslocado de um bit para a esquerda. Y = 4b1000 Y = X << 2; // Y igual a X deslocado de dois bits para a esquerda. Y = 4b0000 Observe que quando os bits so deslocados, os lugares vazios so preenchidos por zeros. E, temos que os operadores de deslocamentos s so sintetizveis pelo Max+Plus II se o operador da direita (nmero de bits a ser deslocado) for um valor constante. 5.2.8 - Operador de concatenao Esse operador permite concatenar mltiplos operandos, como mostrado a seguir. // A = 1b1, B = 2b00, C = 2b10, D =3b110 Y = {B, C} // Resulta na concatenao de B e C. Ento Y = 4b0010 Y = {A, B, C, D, 3b001} // Resulta em Y = 11b10010110001 Y = {A, B[0], C[1]} // Resultam em Y = 3b101 5.2.9 - Operador de replicao Esse operador permite fazer uma concatenao de um mesmo nmero vrias vezes de forma mais simples que com o operador de concatenao, como mostrado a seguir. // A = 1b1, B = 2b00 Y = {4{A}} // Resulta em Y = 4b1111 Y = {4{A}, 2{B}} // Resultam em Y = 8b11110000 5.2.10 - Operador Condicional O operador condicional (?:) tem a seguinte estrutura: varivel = expresso_condicional ? expresso_verdadeira : expresso_falsa O que temos que ao executar essa linha de cdigo, primeiro verificado a expresso condicional, se ela for verdadeira a varivel ter como resultado a primeira expresso aps a interrogao (expresso_verdadeira), e caso contrrio o resultado ser a segunda expresso aps a interrogao (expresso_falsa). Observe os exemplo abaixo. assign out = control ? In1 : In2; assign val = (A = = 3) ? x : y;

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 47

No primeiro exemplo, primeiro h o teste da varivel control. Se control = 1 ento out ter o valor de In1 (o assign o operador de atribuio contnua, que ser explicado mais a frente neste captulo), se control = 0 out ter o valor de In2. Observe que a expresso condicional s tem como resultado 0 (falso) ou 1 (verdadeiro); com isso, ao se usar uma varivel como expresso condicional, temos que assegurar que essa varivel s tenha como valores 0 ou1. No segundo exemplo h o teste que verifica o valor da varivel A, se A for igual 3 a expresso condicional verdadeira (retorna 1) e val tem seu valor igual a x; se A for diferente de 3 a expresso condicional falsa (retorna 0) e val tem seu valor igual a y.

5.3 - Definio de constantes Para se definir constantes no Verilog utilizamos o operador `define, como mostrado nos exemplos abaixo. `define A = 3; `define regA = 1110; Como podemos ver, no primeiro caso definimos uma constante do tipo int de valor 3, sempre que A for usado na descrio em Verilog estaremos na realidade usando o inteiro 3 (como na liguagem C). e, no segundo exemplo, definimos uma constante do tipo reg de comprimento 4 e valor 1110.

5.4 - Estruturas if-else e case 5.4.1 - Estrutura if-else A estrutura if-else no Verilog muito parecida com a da linguagem de programao C. Sua sintaxe mostrada abaixo. if (<condio>) begin <linhas de cdigo caso a expresso seja verdadeira> end else begin <linhas de cdigo caso a expresso seja falsa> end Caso s tenhamos uma linha de cdigo a ser executada aps o if ou o else, no necessitamos de usar as keywords begin e end. Caso s desejemos que alguma ao seja executada apenas no caso da condio ser verdadeira, omitimos o else. E, pode-se aninhar vrios if-else. Abaixo temos alguns exemplos. if (!lock) buffer = data if (control == 0) y = x + z; else if (control == 1) y = x z; else if (control == 2) y = x * z;

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 48

if(regA = regB) begin regC = regA + regC; regB = regC; end else regC = regA; No primeiro caso, se a varivel lock for igual a zero (a ! indica negao) a varivel buffer ficar com o mesmo valor da varivel data. Pois quando usamos apenas a varivel como condio em um if (if incompleto) estamos na verdade testando o valor da mesma, se um zero lgico ou um lgico, e indicando uma ao a ser tomada. 5.4.2 - Estrutura case A estrutura case usada quando temos uma varivel que pode assumir vrios valores e desejamos que uma ao seja efetuada para cada um desses valores. Esse efeito tambm se consegue utilizando estruturas if-else aninhadas, s que com case fica mais claro de se visualizar as relaes. Tome como exemplo o ltimo exemplo do item anterior. case (control) 0 : y = x + z; 1: y = x z; 2: y = x * z; endcase 5.4.3 - Outras estruturas Existem ainda outras estruturas usadas para se implementar laos (for, while e repeat). Essas estruturas so suportadas pela ferramenta de sntese lgica da Altera, mas no sero abordadas neste documento. Se necessrio se reporte a bibliografia para encontrar explicaes sobre essas estruturas e sua sintaxe.

5.5 - Controle de Eventos No Verilog podemos fazer com que a ocorrncia de eventos (funes, por exemplo) fique sujeita a mudanas de variveis conhecidas cujos valores variam entre 0 e 1. Essas mudanas podem ser a mudana de estado dessa varivel escolhida (mudana de 0 para 1 ou 1 para 0), a subida de nvel (variao de 0 para 1), ou ento descida do mesmo (variao de 1 para 0). Esse controle conseguido usando o operador @ (que significa mudana de nvel). Se usarmos apenas o @ temos que o evento sob controle evoludo sempre que a varivel de controle mude de estado; se usarmos em conjunto a palavra reservada posedge, estamos indicando que o evento s ocorre quando ocorrer uma subida de nvel da varivel (mudana de 0 para 1); e, se usarmos negedge, estamos indicando que o evento s ocorre quando ocorrer uma descida de nvel. Temos abaixo alguns exemplos hipotticos. always @ (d) X = X +1 // Sempre que d mudar de nvel X incrementado always @ (negedge d) X = Y // Sempre que d for a zero X recebe o valor de Y

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 49

always @ (posedge d) begin // Sempre que d subir para 1, as operaes entre o begin e o X = X + 1; // end so efetuadas Y = 2 * X; end

5.6 - Lgica Combinacional A lgica combinacional aquela em que as sadas em um dado instante de tempo so funo apenas das entradas neste instante de tempo (ex: decodificadores, multiplexadores, etc.). A lgica combinacional implementada pelo Verilog utilizando atribuies contnuas, ou construes do tipo always que descrevem um comportamento puramente combinatrio, isto , que no dependem de gatilhamento de relgio (clock). 5.6.1 - Atribuies contnuas O operador de atribuio contnua atribui valores a variveis do tipo net (wire). Seu comportamento como se fosse criada uma conexo direta entre a varivel que est recebendo a atribuio e a funo ou varivel que est sendo atribuda. Fisicamente como pegar um sinal ligar diretamente a um ponto por meio de um fio. Abaixo temos um exemplo do uso desse tipo de construo na criao de uma porta AND e de conexo entre dois ns do projeto. Observe que as atribuies so executadas em paralelo (alis, todas as construes, exceto quando indicadas, no Verilog so executadas paralelamente). module exemplo(a, b, c, d); input a, b, e; output c, d; assign c = a & b; assign d = e; endmodule Como podemos observar, temos trs entradas e duas sadas nesse mdulo. Temos que uma funo AND e executada com as entrada a e b e seu valor ento atribudo continuamente a sada c (quer dizer que a sada c ter sempre o valor do AND ocorrido entre as entradas a e b). Temos tambm que a sada d ter valor igual a entrada e ( como se ligssemos um foi entre esses dois pontos no circuito). 5.6.2 - Construes always Uma construo always em conjunto com um controle de eventos pode ser usada para implementar lgica combinacional se sua construo tem as seguintes propriedades: O controle de eventos para essa construo no pode ser sensvel mudanas de nvel do clock do sistema (se existir um clock). O controle de eventos para a construo sensvel para todas as possveis mudanas na sada dessa construo.

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 50

A construo always prov uma sada para cada mudana ou combinao de mudanas das variveis que esto sendo monitoradas pelo controle de eventos.

Para exemplificar vamos tomar um mdulo simples que conta o nmero de bits 1 em uma varivel do tipo reg. module proc(d, q) input [2:0] d; output [1:0] q; integer num_bits; always @ (d) begin integer i; num_bits = 0; for (i = 0; i < 3; i = i + 1) if (d[i] == 1) num_bits = num_bits + 1; end assign q = num_bits; endmodule Como podemos ver, sempre que a varivel d mudar ser valor (always @ (d)) teremos um lao de comparao para saber quantos dos seus bits so iguais a 1, e esse resultado e armazenado na varivel q.

5.7 - Lgica seqencial A lgica seqencial aquela em que as sadas em um dado instante de tempo so funo das entradas nesse instante de tempo e nos tempos anteriores (ex: registradores, contadores, latches, etc). A lgica seqencial implementada com construes always. 5.7.1 Implementando registradores A ferramenta de sntese lgica da Altera (Max+Plus II) permite que sejam criados registradores com qualquer combinao dos sinais Clear, Preset, Load e Clock sncrono. Os registradores so criados utilizando construes always. E, para criarmos registradores temos que observar duas restries: O sinal de clock s pode ser usado no controle de eventos (no pode ser usado em nenhuma outra parte da construo always). Devemos usar variveis do tipo reg para implementar os registradores (j que as mesmas armazenam seu estado anterior).

Temos abaixo trs exemplo que servem como base para a construo de registradores. module reg1(d, clock, q1) input d, clk; output q1; reg q1;
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 51

always @ (posedge clock) q1 = d; endmodule module reg2(d, clock, clear, q2) input d, clock, clear; output q2; reg q2; always @ (posedge clock or posedge clear) begin if (clear) q2 = 0; else q3 = d; end endmodule module reg3(d, clock, preset, q3) input d, clock, load; output q3; reg q3; always @ (negedge clock or negedge preset) if (!preset) q3 = 1; else q3 = d; end endmodule No primeiro exemplo temos um registrador sensvel a subida do clock (clock mudando de nvel 0 para 1 faz com que d seja armazenado em q1). No segundo exemplo temo um registrador sensvel a subida do clock e com uma entrada clear assncrona (sempre que clear for igual ao nvel lgico 1 o registrador resetado, e se o clear igual ao nvel lgico0 o registrador se comporta como no exemplo anterior). E, no terceiro exemplo temos um registrador sensvel a descida do clock e com um preset assncrono (observe que o preset ativado no nvel lgico 0). Atente para o fato de que no controle de eventos e na definio da funo a ser executada os sinais de controle assncronos devem estar definidos para uma mesma mudana de nvel (por isso que no terceiro exemplo como o preset ativo em 0, foi necessrio usar o operador ! para inverter seu valor de controle e o mesmo ficar em consonncia com seu valor no controle de eventos). 5.7.2 - Implementando contadores A implementao de contadores muito parecida com a implementao de registradores, como pode ser observado nos exemplos abaixo. module cont1(clock, enable, c1) input clock, enable; output c1; reg c1; always @ (posedge clock) begin if (enable) c1 = c1 + 1: end endmodule
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 52

module cont2(clock, clear, enable, c2) input clock, clear, enable; output c2; reg c2; always @ (posedge clock) begin if (!clear) c2 = 0; else if (enable) c2 = c2 + 1; end endmodule module c3(clock, up_down, c3) input clock, up_down; output c3; reg c3; integer direcao; always @ (posedge clock) begin if (up_down) direcao = 1; else (direcao = -1; c3 = c3 + direcao; end endmodule No primeiro exemplo temos um contador sensvel a subida do clock e com um sinal enable assncrono (sempre que o clock mudar de 0 para 1 e o enable for igual a 1 o contador incrementado). No segundo exemplo temos um contador sensvel a subida do clock e com um sinal clear assncrono. E, no terceiro exemplo temos um contador que contm um sinal (up_down) que controla se o contador deve ser incrementado ou decrementado a cada subida do clock.

5.8 - Bibliografia 01. Ajuda on-line da ferramenta de sntese lgica Max+Plus II, da Altera Corp. 02. PALNIKTAR, Salmir. Verilog HDL A Guide to Digital Design and Synthesis, Sun Soft Press, California, EUA, 1996. 03. HYDE, Daniel C. CSCI 320 Computer Architecture Handbook of Verilog HDL. Bucknell University, Lewisburg, PA, 1997. (http://www.eg.bucknell.edu/~cs320/1995-fall/verilogmanual.html)

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 53

6. A PLACA FPGA E A FERRAMENTA MAX+PLUS II

6. 1 - Consideraes iniciais Neste ltimo captulo do texto vamos dar uma viso geral acerca da placa de desenvolvimento de projetos digitais com auxlio de um FPGA, mostrando sua configurao fsica, caractersticas, limitaes e restries de uso. Vamos var tambm os passos necessrios para se utilizar a ferramenta de sntese lgica Max+Plus II para, a partir de uma descrio de seu projeto digital em Verilog, se programar a placa e realizar os testes com a mesma.

6.2 A placa de desenvolvimento Para a realizao dos experimentos ns utilizaremos as placas desenvolvidas pelo professor Elmar Uwe Kurt Melcher do DEE. So placas que contm um FPGA (na verdade um CPLD da Altera) e toda sua interface definida, para uso em projeto de sistemas digitais. Por serem placas que j possuem a interface do FPGA definida, necessrio que se atente para as caractersticas e limitaes inerentes. Ao se falar interface, queremos dizer o meio pelo qual o FPGA se comunica com o mundo exterior (que no caso sero atravs de chaves de entrada e leds de sada). Ento, no necessitamos nos preocupar com a montagem fsica do projeto, e sim apenas com a descrio e como a descrio far uso das interfaces e do prprio FPGA. Temos a seguir a viso superior e inferior da placa.

Fig. 33 - Viso superior da placa


A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 54

Fig. 34 - Viso inferior da placa

Como podemos observar, temos na viso inferior o FPGA, que o ncleo da placa, pois todo o resto da placa composta basicamente da interface ao FPGA (seja para programao ou para testes) e do circuito de clock. Observando a placa na viso superior vemos que a mesma composta de um cabo paralelo para ser ligado ao computador, por onde a programao da placa ser transferida do computador ao FPGA. Logo aps esse cabo, na entrada da placa, temos um CI buffer que serve para regenerar o sinal recebido do computador. Temos 67 leds, que so utilizados como portas de sada do FPGA para se observar os dados de sada. Junto a esses leds vemos vrios CIs, que na verdade so drivers de corrente para os leds, para garantir a corrente necessria para o leds funcionarem, uma vez que a corrente de sada do FPGA muito baixa. A numerao dos leds dada a partir da primeira fileira inferior de leds, comeando pela direita com o led 0 at o 15, na segunda fileira do led 16 at 31, at a ltima fileira que termina no led 63. Os trs leds mais inferiores so os leds 64, 65 e 66. Temos tambm 4 conjuntos de 8 chaves de duas posies, que so utilizadas como entradas para o FPGA. A numerao dessas chaves da direita para a esquerda a partir de 0 a 31. E, existe tambm uma chave seletora de 10 posies, que utilizada para se aumentar a capacidade de entradas e sadas do sistema (associando, por exemplo, que determinado conjunto de leds mostra a sada de um registrador se a chave seletora estiver na posio 1, e a sada de um somador se a chave seletora estiver na posio 2). Existe ainda uma chave bipolar (abaixo da chave seletora) que utilizada para se gerar o clock manual. E, para se gerar o clock existe na placa um oscilador que gera um clock de 5kHz ou 0,5kHz, de acordo com uma seleo na placa (que est associada a um arquivo Verilog de gerao de clock, que ser abordado mais adiante). Finalizando, a esquerda da placa existem dois mdulos de memria RAM.

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 55

6.3 A ferramenta de sntese lgica Max+Plus II Para se utilizar a placa, necessrio primeiro program-la. E para isso necessrio uma ferramenta de sntese lgica fornecida pelo fabricante do dispositivo escolhido para o projeto. No nosso caso a ferramenta o Max+Plus II da Altera. Essa ferramenta alm de programar a placa, permite a depurao de erros na descrio Verilog, a simulao do projeto, entre outras funcionalidades. Para o nosso caso veremos apenas como compilar e depurar erros na descrio Verilog e como programar a placa. Para trabalharmos com o Max+Plus II teremos que dispor de 3 arquivos, um com a descrio Verilog do projeto (arquivo com extenso .v), um com a descrio da interface da placa ( arquivo com extenso .acf) e um com a descrio da gerao do clock (peacclk.v). O arquivo .acf muito importantes, pois nele que definimos qual o dispositivo que ser utilizado (para a ferramenta poder program-lo) e quais foram as definies de portas do FPGA. Quer dizer, ao fazermos uma descrio em Verilog, definimos as interfaces do mdulo que criamos, essas interfaces tem que ser atribudas as portas fsicas do FPGA para que o mesmo possa saber que varivel corresponde a cada porta fsica (pino do CI). Ento, o arquivo .acf tem que ter o mesmo nome da arquivo .v para que na hora da programao da placa as portas de entrada e sada do FPGA sejam atribudas as variveis definidas como interfaces do projeto. O arquivo .v contm a descrio Verilog do sistema projetado. Como estamos usando uma placa j construda, temos uma limitao no projeto, pois s podemos utilizar as interfaces j definidas para essa placa (uma vez que j existem as conexes fsicas permanentes na placa). Com isso, ns no desenvolveremos o projeto todo, e sim apenas a funcionalidade do mesmo, ou seja, utilizaremos um arquivo .v que j vem com a definio das interfaces e projetaremos apenas a funo do sistema. E, utilizaremos a interfaces que j viro definidas. O arquivo .v que ser trabalhado ser como o mostrado a seguir.
module PC(led, swi, onda, bip, Amem, Dmem, OE, WE, clock); output [66:0] led; input [31:1] swi; input [8:0] onda; input [1:0] bip; output [13:0] Amem; inout [15:0] Dmem; output OE, WE; input clock; wire [66:0] led; wire [31:1] sw = ~swi; `include "peacclk.v"

//----- inicio da funo ------

//----- fim da funo -----

assign assign assign assign

led led led led

[55:48] = 0; [47:0] = 0; [63:56] = 0; [66:65] = 0;


A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 56

wire wire wire wire

OE = 1 WE = 1 [15:0] [13:0]

; ; Dmem = 0; Amem = 0;

endmodule

S ser trabalhado a parte entre incio da funo e fim da funo, que onde voc escrever a sua descrio Verilog. E usar tambm a parte de atribuio aos leds que vem aps o fim da funo para definir as sadas do sistema. Temos a seguir um exemplo simples.
module reg_Out(led, swi, onda, bip, Amem, Dmem, OE, WE, clock); output [66:0] led; input [31:1] swi; input [8:0] onda; input [1:0] bip; output [13:0] Amem; inout [15:0] Dmem; output OE, WE; input clock; wire [66:0] led; wire [31:1] sw = ~swi; `include "peacclk.v"

//----- inicio da funo -----reg [7:0] Out; wire load; assign load = sw[7]; always @ (posedge clk) begin if (!load) Out = sw[15:8]; end //----- fim da funo -----

assign assign assign assign wire wire wire wire

led led led led

[55:48] = Out; [47:0] = 0; [63:56] = 0; [66:65] = 0; ; ; Dmem = 0; Amem = 0;

OE = 1 WE = 1 [15:0] [13:0]

endmodule

Como pode ser observado, foram definidas duas variveis internas, um que armazena valor (Out, com 8 bits de comprimento) e outra que no armazena (load). Utilizamos ento as variveis de interface de entrada sw[15:8] que j foi definida para definir as entradas do sistema. Temos a funo (que um registrador sncrono simples), e utilizamos as variveis de interface de sada led[55:48] para definirmos as sadas do sistema.
A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 57

Observe que temos a incluso de um arquivo chamado peacclk.v que o arquivo que gera o clock. Esse arquivo permite a criao de um clock automtico ou manual. Devido ao uso desse arquivo temos algumas restries no uso da placa. No devemos utilizar a chaves de entrada de 0 a 3, pois so as chaves que controlam o clock (deixe as trs em nvel baixo para trabalhar com o clock manual). E, no podemos utilizar o led 64, que o led que mostra o valor do clock no instante atual. Resumindo, teremos trs arquivos para trabalhar, um com extenso .v, um com extenso .acf e o peacclk.v. Desses trs, o nico que trabalharemos o .v, o qual descreveremos a funo de nosso projeto. Atente para o fato de que o arquivo .v, o nome do mdulo dentro do arquivo .v, o arquivo .acf e a definio do chip dentro do arquivo .acf tem que ter o mesmo nome. Voc no pode mudar isso. E, o arquivo .v s pode ter esse nico mdulo (que uma restrio da ferramenta). E esses trs arquivos tem que estar dentro do mesmo diretrio. O arquivo .v pode ser editado em qualquer editor de texto, uma vez que ele um arquivo texto com a extenso mudada pra .v. E, o arquivo .v pode ser editado dentro do prprio Max+Plus II. 6.3.1 Utilizando o Max+Plus II Para se utilizar o Max+Plus II devemos primeiro iniciar o aplicativo. Ao fazer isso chegamos em uma tela cinza. Devemos ento abrir o arquivo .v (menu File, comando Open) com a descrio do projeto. Com isso abriremos uma caixa de dilogo onde escolheremos o arquivo a ser aberto, como mostra a figura abaixo.

Fig. 35 - Janela Abrir Arquivo

Com o arquivo .v aberto, temos que em seguida informar ao aplicativo que esse o arquivo que queremos trabalhar. Isso feito acionando o menu File, em seguida Project, comando Set Project to Current File, como mostra a figura a seguir.

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 58

Fig. 36 - Atribuio do projeto ao arquivo corrente

Em seguida devemos compilar esse arquivo. durante a compilao que a ferramenta verifica se existem erros na descrio. Os erros podem ser de sintaxe, de atribuio de portas, de atribuio de variveis, etc. Se ocorrer um erro, ser mostrado o tipo de erro ( uma mensagem que um tanto confusa), a linha de cdigo onde se encontra o erro e a compilao para. Voc deve ento corrigir o erro e compilar novamente o projeto. Para se compilar o projeto voc deve acionar o menu File, em seguida Project e selecionar a opo Save & Compile. A figura abaixo ilustra isto.

Fig. 37 Janela de Compilao


A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 59

Atente para o fato de que uma compilao bem sucedida no garante um projeto correto em relao a funo desejada, e sim garante um projeto correto em relao ao Verilog. Isso porque voc pode usar um operador errado em relao a sua funo que no indica nenhum tipo de erro lgico e sim um erro funcional, quer dizer, uma funo ser realizada mas no ser a desejada. Durante a compilao que feita a converso da descrio em um nvel mais alto de abstrao para um nvel inferior (normalmente o nvel de portas lgicas) para a placa ser programada. Uma vez compilado o projeto, devemos passar para a parte de programao da placa. Observe que a placa deve estar conectada ao computador para se efetuar a programao. Para isso devemos primeiro entrar no modo de programao, atravs do menu Max+plus II, comando Programmer, como mostrado na figura a seguir.

Fig. 38 - Janela de Programao

Com isso aberta a janela de programao. Mas, antes de programar a placa necessitamos criar um arquivo de extenso .jcf que o arquivo de programao da placa. Para isso acionamos o menu JTAG, comando Multi-Device Jtag Chain Setup. Ser ento aberta uma janela onde iremos criar o arquivo .jcf. Essa janela mostrada abaixo.

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 60

Fig. 39 - Janela para criar o arquivo .jcf

Aqui voc deve clicar no boto Select Programming File, e com isso aberta uma janela na qual voc ir selecionar o arquivo com extenso .sof cujo nome igual a seu arquivo .v. Voc retornar a janela anterior e ento deve clicar no boto Add (observe que o nico arquivo que deve estar presente na caixa de texto maior o que voc acabou de adicionar, e caso exista algum outro, selecione-o e clique em delete). Salve o arquivo clicando em Save Jcf. O nome do arquivo .jcf deve ser igual ao do .v. e ser salvo de preferncia no mesmo diretrio. Em seguida saia dessa janela clicando em OK. Observe que o nome do arquivo .jcf agora aparece na janela Programmer.

Fig. 40 - Criao do arquivo jcf


A

Alexandre Scaico

Dezembro/2000

Projeto de Sistemas Digitais na Atualidade

pg. 61

Para um mesmo projeto s necessrio criar o arquivo .jcf uma nica vez. Se voc voltar para a parte de edio e compilao, ou se sair do programa e abr-lo novamente, voc precisa apenas restaurar o arquivo .jcf, atravs do menu JTAG, comando Restore jcf. E, uma boa medida de precauo restaurar o arquivo .jcf logo aps a sua criao, para garantir que esse arquivo est realmente selecionado. Realizados todos esses passo s resta a programao da placa. Para isso deve-se clicar no boto Configure, na janela Programmer. Ser mostrada a evoluo da programao da placa. Quando acabar s clicar em OK e proceder com os teste na placa.

6.4 Realizao dos testes na placa Para se realizar os testes na placa s entrar com os dados e sinais de controle atravs das chaves que voc definiu como entrada e dar um pulso de clock com a chave bipolar. E, observar os dados de sada atravs dos leds definidos como sadas. Se voc observar que as respostas no esto sendo as esperadas, deve dar uma revisada na descrio Verilog do projeto, corrigir o erro, compilar, programar a placa e testar novamente.

6.5 Bibliografia 01. Ajuda on-line da ferramenta de sntese lgica Max+Plus II, da Altera Corp. 02. Pgina da Placa para Ensino de (http://vulcano.dsc.ufpb.br/elmar/cursos/labarc/peac.hym) Arquitetura de Computadores

Alexandre Scaico

Dezembro/2000

You might also like