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
A
Alexandre Scaico Dezembro/2000
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
Projeto de Sistemas Digitais na Atualidade pg. 3
A
Alexandre Scaico Dezembro/2000
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
Projeto de Sistemas Digitais na Atualidade pg. 4
A
Alexandre Scaico Dezembro/2000
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

Projeto de Sistemas Digitais na Atualidade pg. 5
A
Alexandre Scaico Dezembro/2000
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.

J unte 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
Projeto de Sistemas Digitais na Atualidade pg. 6
A
Alexandre Scaico Dezembro/2000
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).
Projeto de Sistemas Digitais na Atualidade pg. 7
A
Alexandre Scaico Dezembro/2000
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).


Projeto de Sistemas Digitais na Atualidade pg. 8
A
Alexandre Scaico Dezembro/2000

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;
Projeto de Sistemas Digitais na Atualidade pg. 9
A
Alexandre Scaico Dezembro/2000
- 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.














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.




PLD
Arranjos
Lgicos
Programveis
Arranjos
de Portas
Programveis
PAL PLA FPGA CPLD
Projeto de Sistemas Digitais na Atualidade pg. 10
A
Alexandre Scaico Dezembro/2000
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
Projeto de Sistemas Digitais na Atualidade pg. 11
A
Alexandre Scaico Dezembro/2000
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.

Projeto de Sistemas Digitais na Atualidade pg. 12
A
Alexandre Scaico Dezembro/2000
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.


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.





PLD

PLD

PLD

PLD
Entradas
Sadas
Conexes Programveis
Projeto de Sistemas Digitais na Atualidade pg. 13
A
Alexandre Scaico Dezembro/2000
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

Projeto de Sistemas Digitais na Atualidade pg. 14
A
Alexandre Scaico Dezembro/2000
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
Projeto de Sistemas Digitais na Atualidade pg. 15
A
Alexandre Scaico Dezembro/2000
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. 2
a
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)
Projeto de Sistemas Digitais na Atualidade pg. 16
A
Alexandre Scaico Dezembro/2000
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
Projeto de Sistemas Digitais na Atualidade pg. 17
A
Alexandre Scaico Dezembro/2000
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.

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
Especificaes do Projeto
Descries deprocedimento
Descries RTL (HDL)
Verificao Funcional deTestes
SnteseLgica
Net List -- Nvel-porta
Verificao lgicaeteste
Plano de Fundo Automtico
Layout fsico
Verificao delayout
Implementao
Projeto de Sistemas Digitais na Atualidade pg. 18
A
Alexandre Scaico Dezembro/2000
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
Projeto de Sistemas Digitais na Atualidade pg. 19
A
Alexandre Scaico Dezembro/2000
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.
Projeto de Sistemas Digitais na Atualidade pg. 20
A
Alexandre Scaico Dezembro/2000
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
Projeto de Sistemas Digitais na Atualidade pg. 21
A
Alexandre Scaico Dezembro/2000
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.
Projeto de Sistemas Digitais na Atualidade pg. 22
A
Alexandre Scaico Dezembro/2000
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
Projeto de Sistemas Digitais na Atualidade pg. 23
A
Alexandre Scaico Dezembro/2000
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).

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).


Fig. 13 Estrutura hierrquica

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.




C
D
S
A
B
Cin

U1

U2
A
B
CARRY
U1
SUM
Projeto de Sistemas Digitais na Atualidade pg. 24
A
Alexandre Scaico Dezembro/2000
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.


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.


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
BS
SB SB SB
SB
CB
CB CB CB CB CB CB CB
BS
SB SB SB
SB
CB
CB CB CB CB CB CB CB
Projeto de Sistemas Digitais na Atualidade pg. 25
A
Alexandre Scaico Dezembro/2000
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.


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.
Bloco X
Bloco Y
BlocoA
f
Entrada 1
Entrada 2
Sada 1
Sada 2
Projeto de Sistemas Digitais na Atualidade pg. 26
A
Alexandre Scaico Dezembro/2000
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.


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.

Bloco A
Bloco X Bloco Y Bloco Z
Bloco D Bloco E Bloco B Bloco C Bloco B Bloco D
Projeto de Sistemas Digitais na Atualidade pg. 27
A
Alexandre Scaico Dezembro/2000

Fig. 18 Contador de 4 bits

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); // 1 instncia do T_FF
T_FF tff1(q(1), q(0), reset); // 2 instncia do T_FF
T_FF tff2(q(2), q(1), reset); // 3 instncia do T_FF
T_FF tff3(q(3), q(2), reset); // 4 instncia do T_FF

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


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
d
q
D_FF
clock
reset
q
q
T_FF
tff 0
q
T_FF
tff 0
q
T_FF
tff 0
q
T_FF
tff 0
q0 q1
q2 q3
clock
reset
Contador
de4bits
Projeto de Sistemas Digitais na Atualidade pg. 28
A
Alexandre Scaico Dezembro/2000
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.


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.


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.


somador completo
meiosomador meiosomador
HALF_ADD
U1
HALF_ADD
U2
OR
FULL ADD
A
B
Cin
SUM
CARRY
Nomes de instncia
Projeto de Sistemas Digitais na Atualidade pg. 29
A
Alexandre Scaico Dezembro/2000

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.


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:

HALF_ADD
U1
HALF_ADD
U2
OR
FULL ADD
A
B
Cin
SUM
CARRY
ESTMULO
L1
L2
L3




mdulo projetado
Bloco de estmulo
(estmulos)
(resultados)
Bloco de teste
mdulo

de

estmulo
mdulo

do

projeto
Projeto de Sistemas Digitais na Atualidade pg. 30
A
Alexandre Scaico Dezembro/2000
ESTMULO ESTMULO.FULL_ADD.HALF_ADD.U1
ESTMULO.FULL_ADD ESTMULO.FULL_ADD.HALF_ADD.U2
ESTMULO.FULL_ADD.A ESTMULO.FULL_ADD.HALF_ADD.U1.A
ESTMULO.FULL_ADD.B ESTMULO.FULL_ADD.HALF_ADD.U1.B
ESTMULO.FULL_ADD.Cin ESTMULO.FULL_ADD.HALF_ADD.U1.L1
ESTMULO.FULL_ADD.SUM ESTMULO.FULL_ADD.HALF_ADD.U2.L1
ESTMULO.FULL_ADD.CARRY 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


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.


XOR
AND
A
B
SUM
CARRY
HALF ADD
Projeto de Sistemas Digitais na Atualidade pg. 31
A
Alexandre Scaico Dezembro/2000

Fig. 25 Estrutura do somador completo

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).



HALF_ADD
U1
HALF_ADD
U2
OR
FULL ADD
A
B
Cin
SUM
CARRY
I1
I2
I3
Projeto de Sistemas Digitais na Atualidade pg. 32
A
Alexandre Scaico Dezembro/2000
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.



Projeto de Sistemas Digitais na Atualidade pg. 33
A
Alexandre Scaico Dezembro/2000
- 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 Condio em circuitos digitais
0 Zero lgico, condio falsa
1 Um lgico, condio verdadeira
x Valor desconhecido
z Alta impedncia, estado flutuante




Projeto de Sistemas Digitais na Atualidade pg. 34
A
Alexandre Scaico Dezembro/2000
Nvel de peso Tipo Degrau
suplly Transmisso Maior prioridade
strong Transmisso
pull Transmisso
large Armazenamento
weak Transmisso
medium Armazenamento
small Armazenamento
highz Alta impedncia 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 palavra-
chave 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.

Projeto de Sistemas Digitais na Atualidade pg. 35
A
Alexandre Scaico Dezembro/2000
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.


Fig. 26 Contedo de um mdulo

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
Projeto de Sistemas Digitais na Atualidade pg. 36
A
Alexandre Scaico Dezembro/2000
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.



Fig. 27 Latch RS

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
Sbar
(set)
Rbar
(reset)
Q
Qbar
Projeto de Sistemas Digitais na Atualidade pg. 37
A
Alexandre Scaico Dezembro/2000
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.


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
b
c-in
somador
completo
(4 bits)

fulladd4 c-out
sum
estimulo
Projeto de Sistemas Digitais na Atualidade pg. 38
A
Alexandre Scaico Dezembro/2000
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.


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
reg ou net
net
inout
input
output
reg ou net net
net
net
Projeto de Sistemas Digitais na Atualidade pg. 39
A
Alexandre Scaico Dezembro/2000
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:

Projeto de Sistemas Digitais na Atualidade pg. 40
A
Alexandre Scaico Dezembro/2000
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.


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
Out
In0
Sel1
In1
Sel0
In2
In3
Y1
Y2
Y0
Y3
NotSel1
NotSel0
Projeto de Sistemas Digitais na Atualidade pg. 41
A
Alexandre Scaico Dezembro/2000
4.22.2 - Nvel de fluxo de dados (RTL)

Fig. 31 Diagrama de fluxo de dados do MUX 4x1

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

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
and
lgico
and
lgico
and
lgico
and
lgico
or
lgico
not
lgico
not
lgico
In0
In1
In2
In3
Sel1
Sel0
Out
In0
In1
In2
In3
Out
Sel1 Sel0
Projeto de Sistemas Digitais na Atualidade pg. 42
A
Alexandre Scaico Dezembro/2000
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, University of Edinburgh
(http://www.ee.ed.ac.uk/~gerard/Teach/Verilog/manual/index.html)

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)


Projeto de Sistemas Digitais na Atualidade pg. 43
A
Alexandre Scaico Dezembro/2000
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 Smbolo do Operador Operao Realizada Nmero de
Operandos
Aritmtico *
/
+
-
%
Multiplicao
Diviso
Adio
Subtrao
Mdulo
Dois
Dois
Dois
Dois
Dois
Lgico !
&&
| |
NOT lgico
AND lgico
OR lgico
Um
Dois
Dois
Relacional >
<
>=
<=
Maior que
Menor que
Maior ou igual que
Menor ou igual que
Dois
Dois
Dois
Dois
Igualdade ==
! =
===
! ==
Igualdade
Desigualdade
Igualdade Case
Desigualdade Case
Dois
Dois
Dois
Dois
Projeto de Sistemas Digitais na Atualidade pg. 44
A
Alexandre Scaico Dezembro/2000
Bitwise ~
&
|
^
^~ou ~^
NOT
AND
OR
XOR
XNOR
Um
Dois
Dois
Dois
Dois
Reduo &
~&
|
~|
^
^~ou ~^
AND redutor
NAND redutor
OR redutor
NOR redutor
XOR redutor
XNOR redutor
Um
Um
Um
Um
Um
Um
Deslocamento >>
<<
Deslocamento a direita
Deslocamento a
esquerda
Dois
Dois
Concatenao { } Concatenao Qualquer nmero
Replicao {{ }} Replicao Qualquer nmero
Condicional ? : Condicional trs

5.2.1 - Operadores aritmticos

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.

Projeto de Sistemas Digitais na Atualidade pg. 45
A
Alexandre Scaico Dezembro/2000
// 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 Descrio Valores lgicos possveis
A ==B A igual a B, o resultado do tipo x se A ou B
contiverem bits do tipo x
0, 1, x
A ! =B A diferente de B, o resultado do tipo x se A ou
B contiverem bits do tipo x
0, 1, x
A ===B A igual a B incluindo os bits x e z 0, 1
A ! ==B A diferente de B incluindo os bits x e z 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.

Projeto de Sistemas Digitais na Atualidade pg. 46
A
Alexandre Scaico Dezembro/2000
// 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;

Projeto de Sistemas Digitais na Atualidade pg. 47
A
Alexandre Scaico Dezembro/2000
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;

Projeto de Sistemas Digitais na Atualidade pg. 48
A
Alexandre Scaico Dezembro/2000
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


Projeto de Sistemas Digitais na Atualidade pg. 49
A
Alexandre Scaico Dezembro/2000
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.
Projeto de Sistemas Digitais na Atualidade pg. 50
A
Alexandre Scaico Dezembro/2000
- 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;
Projeto de Sistemas Digitais na Atualidade pg. 51
A
Alexandre Scaico Dezembro/2000
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

Projeto de Sistemas Digitais na Atualidade pg. 52
A
Alexandre Scaico Dezembro/2000
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/verilog-
manual.html)
Projeto de Sistemas Digitais na Atualidade pg. 53
A
Alexandre Scaico Dezembro/2000
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
Projeto de Sistemas Digitais na Atualidade pg. 54
A
Alexandre Scaico Dezembro/2000

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. J unto 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.



Projeto de Sistemas Digitais na Atualidade pg. 55
A
Alexandre Scaico Dezembro/2000
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 led [55:48] = 0;
assign led [47:0] = 0;
assign led [63:56] = 0;
assign led [66:65] = 0;

Projeto de Sistemas Digitais na Atualidade pg. 56
A
Alexandre Scaico Dezembro/2000
wire OE = 1 ;
wire WE = 1 ;
wire [15:0] Dmem = 0;
wire [13: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 led [55:48] = Out;
assign led [47:0] = 0;
assign led [63:56] = 0;
assign led [66:65] = 0;

wire OE = 1 ;
wire WE = 1 ;
wire [15:0] Dmem = 0;
wire [13:0] Amem = 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.
Projeto de Sistemas Digitais na Atualidade pg. 57
A
Alexandre Scaico Dezembro/2000
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 - J anela 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.


Projeto de Sistemas Digitais na Atualidade pg. 58
A
Alexandre Scaico Dezembro/2000

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 J anela de Compilao
Projeto de Sistemas Digitais na Atualidade pg. 59
A
Alexandre Scaico Dezembro/2000
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 - J anela 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.

Projeto de Sistemas Digitais na Atualidade pg. 60
A
Alexandre Scaico Dezembro/2000

Fig. 39 - J anela 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
Projeto de Sistemas Digitais na Atualidade pg. 61
A
Alexandre Scaico Dezembro/2000
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 Arquitetura de Computadores
(http://vulcano.dsc.ufpb.br/elmar/cursos/labarc/peac.hym)