Você está na página 1de 36

UNIVERSIDADE FEDERAL DA PARABA

CENTRO DE CINCIAS E TECNOLOGIA


DEPARTAMENTO DE ENGENHARIA ELTRICA
DISCIPLINA: ARQUITETURA DE SISTEMAS DIGITAIS

HDL Hardware Description Language

Grupo: Alexandre Scaico 9611025-1


Ana Cludia C. Cavalcante 9621040-X
Luiz Felipe de Q. Silveira 9511208-0

Campina Grande, 06 de fevereiro de 2000


2

NDICE

I - INTRODUO pg. 03
I.1 Evoluo dos sistemas digitais pg. 03
I.2 Surgimento das HDLs pg. 03
I.3 Fluxo tpico em um projeto pg. 04
I.4 - Importncia da HDLs pg. 06
I.5 - Tendncias em HDLs pg. 07

II - VHDL pg. 08
II.1 Introduo pg. 08
II.2 O que VHDL? pg. 08
II.3 Por que usar o VHDL? pg. 08
II.4 Limitaes do VHDL pg. 08
II.5 Nveis de abstrao pg. 09
II.6 Apresentao da linguagem pg. 09
II.7 Concorrncia pg. 10
II.8 Exemplos de implementao com VHDL pg. 11

III VERILOG HDL pg. 12


III.1 O que Verilog pg. 12
III.2 Por que usar o Verilog HDL? pg. 12
III.3 Popularidade do Verilog HDL pg. 13
III.4 Aplicaes do Verilog e outras linguagens HDL pg. 13
III.5 Limitaes do Verilog pg. 13
III.6 Nveis de abstrao pg. 14
III.7 Nvel comportamental x RTL pg. 14
III.8 Conceitos principais da linguagem pg. 15
III.9 Metodologias de projeto pg. 15
III.10 Estrutura dos mdulos pg. 16
III.11 Projeto hierrquico pg. 18
III.12 Instncias pg. 18
III.13 Representando hierarquia pg. 19
III.14 Componentes de uma simulao pg. 20
III.15 Nomes hierrquicos pg. 21
III.16 Exemplos de mdulos pg. 22
III.17 Conceitos bsicos pg. 23
III.18 Convenes lxicas pg. 23
III.19 Tipos de dados pg. 25
III.20 Mdulos pg. 27
III.21 Portas pg. 29
III.22 Exemplos de estruturas de mdulos pg. 32

IV CONCLUSO pg. 35

V - BIBLOGRAFIA pg. 36
3

I - INTRODUO

I. 1 - Evoluo dos sistemas digitais

O projeto de sistemas digitais tm se desenvolvido rapidamente nos ltimos 25 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 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, o 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. At esta
data, os circuitos ainda eram testados sobre breadboard 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.

I.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. Surgiu 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 switch. Ou ela pode descrever as
portas lgicas e flip-flops em um sistema digital, ou seja, o nvel de porta . Em um nvel
4

mais alto ela descreve os registradores e os vetores de transferncia de informao entre os


registradores. Este chamado de nvel de transferncia entre registradores (RTL).

Ao contrrio das linguagens seqenciais (Pascal, FORTRAN, C e 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 Gatewag 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.

I. 3 - Fluxo Tpico em um Projeto:

Um tpico diagrama de fluxo de projetos de circuitos VLSI IC mostrado na figura


abaixo.
5

Especificaes do Projeto

Descries de procedimento

Descries RTL (HDL)

Verificao Funcional de Testes

Sntese Lgica

Net List -- Nvel-porta

Verificao lgica e teste

Plano de Fundo Automtico

Layout fsico

Verificao de layout

Implementao
6

O diagrama de fluxo acima tipicamente usado para projetos que usam HDLs. Em
qualquer projeto, as especificaes so definidas primeiro. As especificaes descrevem de
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 um nvel de portas. O


nvel de portas uma descrio do circuito em termos de portas e coneces 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 snteses de procedimento tem comeado a surgir


recentemente. Essas ferramentas podem criar descries RTL a partir da descrio
algortmica de funcionamento do circuito. Com o amadurecimento dessas ferramentas, os
projetos de circuitos digitais 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, as
Ferramentas de CAD produziro projetos ineficientes. Ento torna-se necessrio o uso de
projetistas para entender as nuances das metodologias de projeto, usando as ferramentas de
CAD para obter um projeto otimizado.

I.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 RTL 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 na ferramenta de sntese lgica e
ela ento cria uma nova organizao ao nvel de porta, usando a nova tecnologia de
7

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 no nvel
RTL, eles podem otimizar e modificar as descries RTL 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.

I.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 RTL e empregar as


ferramentas de sntese lgica para criar os nveis de portas a partir do nvel RTL 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. O modelamento do comportamento dos circuitos
ser usado 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 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 RTL 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.
8

II - VHDL

II.1 - Introduo

O VHDL uma linguagem de programao que usada para a descrio de sistemas


digitais, ou seja, atravs dela podemos descrever o que um determinado sistema digital faz
e como ele executa tal tarefa.

A descrio feita atravs de um programa escrito em VHDL, onde colocada todas


as caractersticas do sistema a ser estudado e atravs de um simulador podemos submeter o
programa aos testes necessrios para a anlise do sistema.

Esta linguagem importante pois com ela podemos simular sistemas e fazer todos os
testes necessrios para melhorar o desempenho do sistema sem comprometer o
equipamento real.

II.2 - O que VHDL?

O VHDL (VHSIC linguagem de descrio de hardware) uma linguagem que vem


sendo desenvolvida e otimizada para descrever o comportamento de circuitos e sistemas
digitais.

Esta linguagem apresenta caractersticas apropriadas para descrever o comportamento


de componentes eletrnicos, que vo desde simples portas lgicas at mesmo componentes
altamente complexos como microprocessadores. Estas facilidades so mostradas atravs
dos diversos tipos de variveis, dos possveis nveis de abstrao e vrios outros aspectos
do VHDL.

II.3 - Por que usar o VHDL?

A razo de se usar o VHDL para descrever sistemas ao invs de outras linguagens


como as linguagens PLD-orientada (PALASM, ABEL, CUPL) se d pelo fato destas
linguagens terem sido desenvolvidas para um fim restrito, que foi o desenvolvimento e a
sintetizao de circuitos digitais relativamente pequenos, enquanto o VHDL permite a
modelagem de qualquer tamanho de circuitos digitais.

Outra importante razo para usar o VHDL, a facilidade imposta pela arquitetura de
poder fazer pequenos blocos e modific-los quando houver necessidade. Um exemplo
disto o rpido desenvolvimento das ferramentas de projeto de automao eletrnica, com
o uso de simulaes em VHDL dispensa a montagem de circuitos reais a cada inovao
feita.

II.4 - Limitaes do VHDL

Como as outras linguagens HDL o VHDL foi desenvolvido apenas para simular
sistema digitais, ou seja no h a possibilidade de fazer a simulao de sistemas
analgicos.
9

II.5 - Nveis de abstrao

O VHDL suporta alguns estilos de programao de descrio. Estes estilos diferem


primeiramente em como eles esto relacionados com o nvel mais baixo de hardware. Os
nveis de abstrao so nvel comportamental, de fluxo de dados e estrutural.

1. Nvel comportamental: O mais alto nvel de abstrao chamado de comportamental


de abstrao. Quando criamos a descrio comportamental de um circuito, ns
descreveremos o circuito em termos de operao sobre o tempo. Neste ns apenas
descrevemos a sntese das ferramentas de entrada, ou seja descrevemos tudo o que o
modelo tem que fazer e como fazer.

2. Nvel de fluxo de dados: Neste nvel o problema segmentado dentro de registradores


e entradas lgicas combinacionais. Simplificando, neste nvel a descrio feita em
termos de blocos que representam uma srie de componentes.

3. Nvel estrutural: Neste nvel podemos descrever o circuito a partir de clulas


indivisveis, ou seja podemos montar o circuito atravs de pequenos blocos que
desempenham apenas a funo de um componente, ou tambm podemos descrever o
componente desde o encapsulamento que se vai simular como por exemplo um
transistor, um CI, etc.

II.6 - Apresentao da linguagem

1. Tipos de dados

Como uma linguagem de programao de alto nvel, o VHDL permite a representao


de diversos tipos de dados. Estes podem ser representados individualmente em fios de um
circuito, ou podem representar um conjunto de fios chamados de matriz. Os tipos de dados
permitidos so:

Bit: Representa o valor lgico de apenas um fio, ou seja carrega apenas valores
referentes a zeros e/ou uns.

Bit_vector: Representa uma matriz de bits, ou seja permite a juno de diversas


informaes individuais atravs de uma nica varivel.

Boolean: Como o prprio nome diz representa vaiveis booleanas. As respostas


desta varivel so em termos de falso e verdadeiro.

Integer: Variveis que tm valores inteiros, geralmente compostas de 32 bits.

Real: Representa variveis reais e valores de ponto flutuante.

Enumerated: Quando declaramos uma varivel com este tipo estamos criando um
tipo especifico de dado.

Record: usada para multiplicar dados como uma coleo.


10

Array: usada para criar matrizes simples ou de diversas dimenses.

Access: Similar aos ponteiros usados na linguagem C e em Pascal.

File: Este tipo de varivel usada quando queremos ler ou escrever os dados
gerados em simulao em disquetes ou em um arquivo do prprio micro.

Physical: Usado para representar valores fsicos, por exemplo tempo e tenso.

2. Unidades de arquitetura

Um conceito nico em VHDL o conceito de unidade na arquitetura. Este conceito


diz que podemos descrever um sistema em segmentos que podem ser simulados
separadamente e armazenados em uma livraria.

Podemos introduzir dois tipos de descrio que j esto prontas que so as


arquiteturas (architecture) e as entidades (entities). Existem de fato cinco tipos de descrio
nica que so: Entidades, arquiteturas, pacotes, corpo de pacotes e configuraes.

Entidades: Esta segmentao define as especificaes externas de um circuito ou


um sub-circuito. Quando escrevemos neste tipo de declarao, devemos especificar
um nome nico para cada entidade descrita e prover uma lista definindo as entradas
e sadas de cada circuito especificado.

Arquiteturas: A declarao de arquitetura um segmento que descreve funes


bsicas e ou a estrutura do circuito. Cada arquitetura descrita deve ser associada por
um nome que esteja relacionados a uma entidade.

Pacotes e corpo de pacotes: A declarao de pacotes identificado por um pacote


palavra-chave, e usado para coletar declaraes de uso global entre diferentes
tipos de declarao. Podemos pensar que os pacotes so reas comuns , usado para
armazenar ciosas como tipo de declaraes, constantes e sub-programas globais

Um pacote pode ser descrito de duas partes bsicas: declarao de pacotes e um


opcional corpo de pacotes. Se um pacote especificar um sub-sistema um corpo de
pacote requisitado, ele deve ter o mesmo nome do correspondente pacote de
declarao.

Configuraes: A declarao de configurao especifica quais as arquiteturas que


esto limitadas por quais entidades, e permitem mudar o local das ligaes dos
blocos, a descrio do sistema o tempo de simulao e sua sntese.

II.7 - Concorrncia

O VHDL permite o desenvolvimento de arquitetura que modelem sistemas


concorrentes, os que executam tarefas paralelamente, e seqenciais, aquelas que so
executadas uma depois da outra.
11

II.8 - Exemplos de implementao com VHDL

Com a esta linguagem podemos modelar desde pequenos componentes, usando o


nvel de interface, blocos de componentes, no nvel de fluxo de dados, e sistemas
complexos, com o uso do nvel comportamental. Abaixo daremos alguns exemplos de
possibilidades bsicas deste implementao usando o VHDL.

Portas lgicas;
Comparadores;
Flip-flops;
Chips;
Sistemas de controle, etc.
12

III - VERILOG HDL

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

III.2 Por que usar o Verilog HDL?

Os sistemas digitais atuais so muito complexos. Em seus nveis de maiores


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 HDLs, das quais as proeminentes so o Verilog e o VHDL. Porm o
Verilog usado pela maioria dos desenvolvedores, dentre os quais os projetistas da 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
13

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

III.3 - Popularidade do Verilog HDL

O Verilog tem se tornado uma linguagem de descrio de hardware padro por oferecer
caractersticas muito teis aos projetista 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.

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

III.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.
14

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.

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

III.7 - Nvel comportamental x RTL

Como mostrado, existem quatro estilos distintos no Verilog. O nveis de layout e de


porta lgica 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 comportmental) mais
adequado que o outro:

A razo para o RTL (register transfer level) ser to importante que a maioria das
ferramentas de sntese que existem hoje requerem que o cdigo esteja escrito em
RTL. E nesse nvel o projetista ainda mantm sobre a arquitetura dos registradores
do projeto.
15

Por outro lado, as ferramentas de sntese comportamental geram automaticamente


arquiteturas de portas lgicas e de registradores direto de uma descrio
comportamental 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 comportmental usado para criar estruturas de estmulos , para modelar
partes padro do projeto, ou para criar especificaes simulveis do seu sistema.

III.8 - Conceitos principais da linguagem

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

2. Estrutura
Uma caracterstica muito importante do Verilog a capacidade de descrever estrutura
ou hierarquia. Descries de estrutura podem ser misturadas com descries de
comportamento. Tambm possvel Ter apenas a descrio estrutural do projeto em
Verilog ( que so as netlists do Verilog).

A SUM
B U1 U2
Cin CARRY
U1

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.

III.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.
16

Subdividimos ento os sub-blocos at chegarmos em clulas bsicas (blocos que no


podem ser subdivididos), como mostra a figura abaixo.

BS

SB SB SB SB

CB CB CB CB CB CB CB CB

Na metodologia bottom-up ns primeiro identificamos os blocos que possumos e a


partir deles construmos blocos maiores at chegarmos no bloco de nvel superior, como
mostra a figura abaixo.

BS

SB SB SB SB

CB CB CB CB CB CB CB CB

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.

III.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 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.
17

O bloco abaixo sintetiza tudo o que foi enunciado.

BlocoA
Entrada 1 Sada 1
Bloco X
Entrada 2 Sada 2
f Bloco Y

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.

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

III.11 - Projeto hierrquico

A hierarquia de um projeto descreve a forma na qual ele dividido em sub-blocos


recursivamente at eventualmente chegarmos a um nvel de clula bsica. importante
entender hierarquia para se entender os conceito de projeto hierrquico.

Bloco A

Bloco X Bloco Y Bloco Z

Bloco D Bloco B Bloco D Bloco E Bloco B Bloco C

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.

III.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.
Contador
q0 q1 q2 q3
de 4 bits

q q q q
clock T_FF T_FF T_FF T_FF
tff_0 tff_0 tff_0 tff_0

reset
q 19

d
q
clock D_FF

reset

Temos a seguir a descrio em Verilog.

module ripple_carry_ counter(q, clk, reset);

output [3,0] q;
input clk, reset;

// 4 instncias do mdulo T_FF


T_FF tff0(q(0), clk, reset); // instncia do T_FF
T_FF tff1(q(1), q(0), reset);
T_FF tff2(q(2), q(1), reset);
T_FF tff3(q(3), q(2), reset);

endmodule

module T_FF(q, clk, reset);

output q;
input clk, reset;
wire d;

D_FF dff0(q, d, clk, reset); // instncia de D_FF


not n1(d, q) // a porta inversora uma porta bsica do Verilog

endmodule

III.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 funcionalidade neste nvel. Podemos descrever o mdulo de nvel inferior
em qualquer outro lugar.

No entanto isso significa que o mdulo pode ter dois tipos de nomes: nomes de
referncia e nomes de instncia. Para no gerar confuso vamos ver um exemplo de um
somador completo feito a partir de dois meio somadores. Isso ns d dois nveis de
hierarquia.

somador completo

meio somador meio somador


20

Neste caso, o bloco meio somador, com nome de refer6encia HALF_ADD


instanciado duas vezes. Ento precisamos de dois nomes de inst6ancia U1 e U2 para
distingu-los.

FULL ADD
A SUM
HALF_ADD HALF_ADD
B U1 U2

Cin
OR CARRY

Nomes de instncia

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.

III.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 testado 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 abaixo um esquema ilustrativo desses dois estilos de simulao.

Bloco de estmulo Bloco de teste


(estmulos)

mdulo mdulo

mdulo projetado de do

estmulo projeto

(resultados)
21

III.15 - Nomes hierrquicos

Como foi visto o Verilog suporta uma metodologia de projeto hierrquico. Cada
instncia de um mdulo definido com um identificado (seu nome de instncia). Cada
identificador em particular tem uma posio nica na hierarquia do projeto. Um nome
hierrquico uma lista de identificadores separados por pontos para cada nvel de
hierarquia. Ento, cada identificador pode ser endereado de qualquer lugar do projeto
simplesmente especificando o nome hierrquico correspondente desse identificador.

O mdulo de nvel superior chamado de mdulo raiz porque ele no instanciado em


nenhum lugar do projeto. Ele o ponto de partida. Normalmente o mdulo de nvel
superior um mdulo de estmulo (para testar o projeto).

Para identificar o nome nico de um identificador, comece do mdulo de nvel superior


e trace o caminho atravs do projeto hierrquico at o identificador desejado. Para ficar
mais claro esse processo, vamos considerar o exemplo abaixo, j visto anteriormente.

ESTMULO

FULL ADD
L1
A SUM
HALF_ADD HALF_ADD
B U1 U2 L3

Cin
L2 OR CARRY

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:

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.


22

III.16 - Exemplos de mdulos

Vamos agora mostrar 2 exemplos simples de mdulos para mostrar de uma forma geral
como uma descrio feita no Verilog.

1. Meio somador:

HALF ADD
A SUM
XOR

B AND CARRY

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

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.

FULL ADD
I1
A SUM
HALF_ADD HALF_ADD
B U1 U2 I3

Cin
I2 OR CARRY

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

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

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

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

III.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.
24

III.18.2 - Comentrios

Como na linguagem C, os comentrios de uma linha comeam com //. Comentrios


de mltiplas linhas comeam com /* e terminam com */.

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

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

- 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
25

12b1111_0000_1010 // Uso de _ para facilitar a leitura do nmero


4b10?? // Equivalente a 4b10zz

III.18.5 Strings

Uma string uma seqncia de caracteres delimitados por aspas. A restrio que
uma string deve ser de apenas uma linha.

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

III.19 - Tipos de dados

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

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.

III.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.
26

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

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

III.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 constante 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.

III.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 so 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 8 bits

III.19.7 Memrias

As memrias no Verilog so simples arrays de registros (como no segundo item do


exemplo anterior).

III.19.8 Parmetros

Usamos a palavra-chave parameter para definir constantes. Os parmetros no podem


ser usados como variveis.
27

III.19.9 Strings

Strings devem ser armazenadas em reg. O comprimento do registrador deve ser


suficiente para acomodar toda a string.

III.20 - Mdulos

Vamos agora analisar o contedo de um mdulo. Um mdulo no Verilog consiste de


vrias partes distintas, como mostrado abaixo.

Nome do mdulo
Lista de portas, declaraes das portas (se existirem portas)
Parmetros (opcional)

Declaraes de wires, Declaraes de fluxo de dados


regs e outras variveis (assign)

Instanciao de mdulos Blocos always e initial. Todas declaraes


de nvel inferior comportamentais vo nesses blocos

Funes e tarefas

Declarao endmodule

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 abaixo.
28

Sbar
(set) Q

Rbar Qbar
(reset)

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

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

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

III.21.1 Lista de portas

A definio de um mdulo contm uma opcional lista de portas. Se o mdulo no


troca sinais com o ambiente, no h portas na lista. Considere um somador completo de 4
bits instanciado em um mdulo de estmulo, conforme a figura abaixo.

estimulo

a somador sum
completo
b (4 bits)
c-in fulladd4 c-out

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)

III.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 abaixo a declarao das portas do fulladd4.

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
30

Note que todas as declaraes de portas so implicitamente declarada 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.

III.21.3 Regras de conexes de portas

Podemos visualizar uma porta como consistindo de duas unidades, uma interna ao
mdulo e outra externa ao mesmo. As unidades internas e externas so conectadas.
Existem regras que governam a conexo de portas quando mdulos so instanciados em
outros mdulos. O Verilog funcionar de maneira anmala se essas regras forem violadas.
Essas regras esto ilustradas na figura abaixo.

net

net inout

input output

reg ou net net reg ou net net

- 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

III.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.
31

- 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 tem, 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:

Fulladd4 fa_nome(.sum(SUM), .b(B), .c_in(C_IN), .a(A));


32

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.

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

1. Nvel de portas lgicas:

Temos abaixo o diagrama lgico do MUX 4x1.

In0 Y0
NotSel1
Sel1
In1 Y1
NotSel0
Sel0
Out
In2 Y2

In3 Y3

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
33

2. Nvel de fluxo de dados (RTL):

In0 and
lgico

In1
and
lgico
or Out
In2 lgico
and
lgico

In3 and
lgico

not not
lgico lgico

Sel1

Sel0

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

3. Nvel comportamental:

In0

In1
Out
In2

In3

Sel1 Sel0

module mux4x1(Out, In0, In1, In2, In3, Sel1, Sel0);

output Out;
input In0, In1, In2, In3, Sel0, Sel1;
reg Out;
34

always @(Sel1 or Sel0 or In0 or In1 or In2 or In3)


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

endmodule
35

IV - CONCLUSO

Esperamos que com esta pequena introduo consigamos fazer com que o leitor
comece a se interessar pelo uso das HDLs (j que se trata de uma rea emergente e muito
promissora), principalmente do VHDL e Verilog (a HDL mais importante atualmente).
No propsito deste texto se aprofundar em nenhuma HDL (explicar exaustivamente a
sintaxe, estrutura detalhada de mdulo, tcnicas de projeto, descrio nos vrios nveis de
abstrao, etc.), apesar de ter sido dada uma maior nfase ao Verilog (devido a sua
importncia atual para os projetos de sistemas digitais, e sim de mostrar os fundamento
bsicos das linguagens VHDL e Verilog para dar uma motivao inicial para um estudo
mais aprofundado das citadas HDLs.

Existem hoje livros, tutorias e vrios sites na Internet que tratam das HDls ,
principalmente VHDL e Verilog (a nica ressalva que nenhum em portugus) que
podem ser consultados. Na bibliografia tem um livro muito bom sobre a estrutura da
linguagem em Verilog e um tutorial introdutrio bem interessante (Altera Masterclass)
que existe tanto para Verilog quanto para VHDL que vale a pena consultar, alm de se
fazer uma busca mais detalhada na Internet.
36

V - 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 os 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)