Você está na página 1de 1012

Projeto Digital e

Arquitetura de Computadores
By David Money Harris & Sarah L. Harris

Esta traduo Portuguesa foi patrocinada


pela Imagination Technologies
Morgan Kaufman www.imgtec.com
English 2nd Edition 2013 community.imgtec.com/university
Esta edio do Digital Design and Computer Architecture de David Money Harris e Sarah L Harris publicada por acordo com a ELSEVIER INC.,
a Delaware Corporation com sede em 360 Park Avenue South, New York, NY 10010, USA
Publicada por Imagination Technologies
2nd Edio, Portugus, ISBN: 978-0-9954839-0-3
Elsevier, Inc. Todos os diretos reservados
2nd Edition, English, ISBN: 978-0-12-394424-5
Traduzido por Antnio Esprito-Santo e Renato de Macedo Giovanini

Antnio Esprito-Santo
Licenciado em Engenharia Eletrotcnica, ramo de Automao, Energia e Electrnica, pela Universidade de Coimbra e Mestre em Engenharia
Eletrotcnica, ramo de Sistemas e Automao, pela mesma Universidade. Obteve o Doutoramento em Engenharia Eletrotcnica pela
Universidade da Beira Interior onde atualmente Professor Auxiliar. Na Universidade da Beira Interior leciona unidades curriculares de Sistemas
Embutidos e de Instrumentao e Medida. Para alm disso coordena o Laboratrio de Investigao de Instrumentao e Sensores Biomdicos.
ainda investigador do Instituto de telecomunicaes.

Renato de Macedo Giovanini


Engenheiro Eletricista graduado pela Universidade Estadual Paulista - UNESP - Faculdade de Engenharia de Ilha Solteira, onde atualmente
desenvolve projeto de Pesquisa no LIEB - Laboratrio de Instrumentao e Engenharia Biomdica, na rea de Instrumentao Eletrnica aplicada
Engenharia de Reabilitao. J atuou como professor ou instrutor em diversas reas, de msica a cursos pr-vestibulares.

Se tiver sugestes e/ou correes por favor envie para Antnio Esprito-Santo.

ii
Material Ensino: MIPSfpga
Introduo
O MIPSfpga disponibiliza o cdigo-fonte RTL do ncleo MIPS microAptiv para implementao numa FPGA, juntamente com materiais de
ensino. O ncleo MIPS microAptiv UP um membro da mesma famlia de microcontroladores encontrados em muitos dispositivos embarcados,
incluindo o popular microcontrolador PIC32MZ da Microchip e o novo Artik1 da Samsung.
Os materiais de ensino iro mostrar-lhe como usar este ncleo como parte de um curso de Arquitectura de Computadores, abrindo o caminho
para que os seus alunos possam explorar o modo como o ncleo de um processador comercial com pipeline trabalha internamente e possam
usar este ncleo em seus projetos, criando os seus prprios projetos SoC.
Com a sua longa herana e excelente documentao, a MIPS a escolha preferida de arquitetura RISC para muitos professores em todo o
mundo. Mas, no passado, para demonstrar conceitos-chave, os professores tiveram de se contentar com a criao de ncleos parciais "MIPS-like
'ou usar cpias no oficiais de herana dbia. Agora no! o MIPSfpga o verdadeiro RTL 'industrial', no ofuscado, e est disponvel livremente
para uso acadmico.

Estrutura
Os materiais pedaggicos MIPSfpga so compostos de trs partes:
O Getting Started Package contm um guia detalhado que comea com uma breve introduo ao ncleo MIPSfpga includo no pacote.
Ele d uma viso geral de como configurar o ncleo para a simulao ou coloc-lo numa FPGA, assim como a programao do processador.
Orientaes sobre a instalao do software tambm so dadas, juntamente com detalhadas e instrues de referncia sobre o ncleo e

iii
a sua ISA - Instruction Set Architecture, o Guia do System Integrator e como usar as UDI - User Defined Instructions. Todos os usurios
precisam deste pacote, em primeiro lugar porque ele contm a RTL, os guias de referncia, um instalador OpenOCD + Codescape
Essentials e outros componentes. O Getting Started Guides em outros idiomas so apenas tradues do guia.
MIPSfpga Fundamentals. Aqui o leitor vai encontrar slides acompanhado de roteiros de laboratrio, ilustrando o uso da Digilent Nexys 4
DDR ou outras plataformas. Com isso, ser levado desde construir o ncleo at programao em C e assembly, com 9 exerccios para
completar ao longo do caminho. O leitor, ento, pode avanar e adicionar uma variedade de perifricos ao ncleo de modo a permitir
um maior nvel de interao. O ltimo exemplo ilustra como portar o MIPSfpga para outras placas FPGA, tais como, a Basys 3.
MIPSfpga SOC. Este pacote avanado permite que execute o Buildroot Linux no MIPSfpga especificamente utilizando a plataforma Digilent
Nexys4 DDR. O ncleo microAptiv empacotado como um bloco IP utilizvel por Xilinx Vivado IP Integrator. Como resultado, o AXI
baseado nos blocos de IP da Xilinx pode facilmente ser conectado com o ncleo MIPS. Estes so usados para criar um exemplo SoC, como
um projeto com uma UART e Ethernet, rodando sob Linux, em MIPSfpga. Um bloco GPIO AXI personalizado juntamente com um exemplo
de driver em Linux tambm fornecido. H extensa documentao includa. Coletivamente estes constituem uma excelente base para
um curso SoC sendo altamente relevante para as necessidades da indstria de projeto de chips, embora o nvel de complexidade a destine
a uma ps-graduao. Os estudantes de doutoramento e ps-doc vo tambm reconhecer que este material ser muito til para os seus
projetos de pesquisa.

Cursos Alvo e Projetos (Nvel de Escolaridade)


Projecto Digital & microarquiteturas (BSC)

Organizao de Computares & Arquiteturas, Arquiteturas Avanadas de Computadores (Licenciatura, Mestrado)

Projeto SoC (MSc)

Verificao de Projeto (MSc)

Projeto de Sistemas Embarcados (Licenciatura, Mestrado)

iv
Arquitetura de Processadores: modificaes, melhorias, otimizao ... (MSc, PhD)

Os Autores
Os materiais do curso foram desenvolvidos por David Harris e Sarah Harris, co-autores do popular
livro Digital Design and Computer Architecture, e fornece um acompanhamento exclusivamente
relevante da MIPSfpga).

Materiais Complementares
Livro de texto Computer Organisation and Design de David Patterson e John L. Hennessy
continua a ser a "bblia" para essas atividades, e fornece mais profundidade ao Harris & Harris num
curso baseado em MIPSfpga.

Outros livros relevantes so referenciados aqui


http://community.imgtec.com/university/resources/books/?subject=mips-architecture

Aceda ao ncleo microAptiv em silcio atravs de placas, como Digilent 'WiFire' incorporao da
Microchip PIC32MZ MCU

Vdeos do workshop dadas por Sarah Harris e Parimal Patel da Xilinx on-line Aqui:
http://community.imgtec.com/university/video-gallery/

Programa global de Workshops: a ser anunciado na pgina Eventos Universitrios.

v
Ferramentas requeridas
Hardware

Host PC: Windows 64 bits

Digilent Basys 3 ou Nexys 4 DDR, com Xilinx Artix 7 FPGA

Adaptao a outras placas foi demonstrada: Zed board, Nexys 3, Nexys 4 (not DDR) etc.

programador JTAG: SEEED Studio MIPS Bus Blaster incluindo o adaptador de 14 para 12 pinos para a placa Nexys4 DDR

Software

Codescape MIPS SDK Essentials (instalador includo com o Getting Started Package)

OpenOCD (Instalador includo com o Getting Started Package, ou verso offline disponvel para download do site do IUP)

Vivado (Xilinx) Web Pack Edition

Mentor Graphics ModelSim (Student ou Full editions) ou Xilinx Xsim

Disponibilidade
Imediata: MIPSfpga Getting Started ver. 1.3, MIPSfpga Fundamentals 1.3, MIPSfpga SOC ver. 1.0

vi
Lnguas em que o Getting Started & Fundamentals est atualmente disponvel
Ingls

Chins simplificado

Japons

Russo

Espanhol

Suporte
O frum Insider MIPS aqui tem uma linha especificamente para questes tcnicas sobre o MIPSfpga.

O frum do IUP (Imagination University Programme) aqui para discusso de currculos e outros assuntos.

Parceiros
Temos trabalhado em estreita colaborao com a Xilinx e a Digilent que deram um apoio maravilhoso a este projeto grande e complexo. Os
detalhes sobre seus programas universitrios est aqui:

vii
Como se juntar ao IUP e aceder a estes materiais
1. Clique em "Register" ou "Join IUP na pgina de principal: www.imgtec.com/university
2. Complete a primeira seo: the Community Registration
3. Marque a caixa selecionada Join Imagination University Programme e complete a informao adicional

4. Um e-mail de verificao ser enviado para si para ativao. (Por favor verifique, tambm, a caixa de correio de spam, porque de vez em
quando o correio filtrado)
5. Para fazer download dos materiais de ensino, visite a pgina IUP - Teaching Resources http://community.imgtec.com/university/resources/
6. Solicitar o pacote (s) que deseja, aceite o contrato de licena, e fornea alguns detalhes sobre como pretende usar os materiais.
7. Em seguida, iremos receber um pedido para aprovar a sua transferncia, normalmente, esta ao completa-se em menos de 48 horas. Uma
vez aprovado receber um e-mail com as instrues de download.

NOTA: Os pedidos podem ser rejeitados pelas seguintes razes


- Os dados de registo esto incompletos
- H poucos ou nenhuns detalhes sobre a utilizao prevista
- O solicitante parece ser uma empresa comercial ou um concorrente

viii
ndice
1. DO ZERO AO UM .................................................................................................................................................................................... 1
1.1. O PLANO DE JOGO ......................................................................................................................................................................................... 1
1.2. A ARTE DE GERIR A COMPLEXIDADE ............................................................................................................................................................. 2
1.3. ABSTRAO DIGITAL ..................................................................................................................................................................................... 6
1.4. BASES NUMRICAS ........................................................................................................................................................................................ 8
1.5. PORTAS LGICAS ......................................................................................................................................................................................... 23
1.6. POR BAIXO DA ABSTRAO DIGITAL ........................................................................................................................................................... 27
1.7. TRANSSTORES CMOS* ................................................................................................................................................................................ 33
1.8. CONSUMO DE ENERGIA............................................................................................................................................................................... 43
1.9. SUMRIO E ANTECIPAO .......................................................................................................................................................................... 45
2. PROJETO DE LGICA COMBINATRIA.................................................................................................................................................... 73
2.1. INTRODUO ............................................................................................................................................................................................... 73
2.2. EQUAES BOOLEANAS .............................................................................................................................................................................. 77

ix
2.3. LGEBRA BOOLEANA ................................................................................................................................................................................... 81
2.4. DA LGICA S PORTAS ................................................................................................................................................................................ 90
2.5. LGICA COMBINATRIO MULTI-NVEL ....................................................................................................................................................... 93
2.6. XS E ZS, OH MEU DEUS! ............................................................................................................................................................................. 97
2.7. MAPAS DE KARNAUGH ................................................................................................................................................................................ 99
2.8. BLOCOS COMBINATRIOS ......................................................................................................................................................................... 109
2.9. TEMPORIZAO ......................................................................................................................................................................................... 115
2.10. SUMRIO................................................................................................................................................................................................ 123
3. PROJETO DE LGICA DIGITAL .............................................................................................................................................................. 139
3.1. INTRODUO ............................................................................................................................................................................................. 139
3.2. BSCULAS E FLIP-FLOPS ............................................................................................................................................................................. 140
3.3. PROJETO DE LGICA SNCRONA ................................................................................................................................................................ 153
3.4. MQUINAS DE ESTADOS FINITOS ............................................................................................................................................................. 159
3.5. TEMPORIZAO DA LGICA SEQUENCIAL ................................................................................................................................................ 186
3.6. PARALELISMO ............................................................................................................................................................................................ 208
3.7. SUMRIO ................................................................................................................................................................................................... 213
4. LINGUAGENS DE DESCRIO DE HARDWARE ....................................................................................................................................... 231
4.1. INTRODUO ............................................................................................................................................................................................. 231
4.2. LGICA COMBINATRIA ............................................................................................................................................................................ 237
4.3. MODELAGEM ESTRUTURAL ....................................................................................................................................................................... 257

x
4.4. LGICA SEQUENCIAL ................................................................................................................................................................................. 262
4.5. MAIS LGICA COMBINATRIA .................................................................................................................................................................. 271
4.6. MQUINAS DE ESTADOS FINITOS ............................................................................................................................................................. 289
4.7. TIPOS DE DADOS* ...................................................................................................................................................................................... 297
4.8. MDULOS PARAMETRIZADOS*................................................................................................................................................................. 304
4.9. TESTBENCHES ............................................................................................................................................................................................ 310
4.10. SUMRIO................................................................................................................................................................................................ 317
5. BLOCOS DE CONSTRUO DIGITAL ...................................................................................................................................................... 339
5.1. INTRODUO ............................................................................................................................................................................................. 339
5.2. CIRCUITOS ARITMTICOS .......................................................................................................................................................................... 339
5.3. SISTEMAS NUMRICOS .............................................................................................................................................................................. 361
5.4. BLOCOS DE CONSTRUO SEQUENCIAIS .................................................................................................................................................. 368
5.5. MATRIZES DE MEMRIA............................................................................................................................................................................ 373
5.6. MATRIZES LGICAS.................................................................................................................................................................................... 386
5.7. SUMRIO ................................................................................................................................................................................................... 397
6. ARQUITETURA .................................................................................................................................................................................... 417
6.1. INTRODUO ............................................................................................................................................................................................. 417
6.2. LINGUAGEM ASSEMBLY............................................................................................................................................................................. 418
6.3. LINGUAGEM DE MQUINA........................................................................................................................................................................ 431
6.4. PROGRAMANDO ........................................................................................................................................................................................ 439

xi
6.5. MODOS DE ENDEREAMENTO .................................................................................................................................................................. 476
6.6. LUZ, CMERA, AO: COMPILANDO, MONTANDO E CARREGANDO ....................................................................................................... 480
6.7. MISCELNEA .............................................................................................................................................................................................. 489
6.8. PERSPECTIVA DO MUNDO REAL: ARQUITETURA X86 ............................................................................................................................... 496
6.9. SUMRIO ................................................................................................................................................................................................... 507
7. MICROARQUITETURA.......................................................................................................................................................................... 529
7.1. INTRODUO ............................................................................................................................................................................................. 529
7.2. ANLISE DE DESEMPENHO ........................................................................................................................................................................ 534
7.3. PROCESSADORES DE CICLO-NICO ........................................................................................................................................................... 536
7.4. PROCESSADOR MULTI-CICLO..................................................................................................................................................................... 554
7.5. PROCESSADOR COM PIPEPLINE................................................................................................................................................................. 579
7.6. REPRESENTAO HDL*.............................................................................................................................................................................. 604
7.7. EXCEES*................................................................................................................................................................................................. 621
7.8. MICROARQUITETURA AVANADA*........................................................................................................................................................... 625
7.9. PERSPECTIVA DO MUNDO REAL: MICROARQUITETURA X86* .................................................................................................................. 644
7.10. SUMRIO................................................................................................................................................................................................ 653
8. MEMRIA E SISTEMAS DE I/O ............................................................................................................................................................. 667
8.1. INTRODUO ............................................................................................................................................................................................. 667
8.2. ANLISE DA PERFORMANCE DOS SISTEMAS DE MEMRIA...................................................................................................................... 672
8.3. CACHES ...................................................................................................................................................................................................... 674

xii
8.4. MEMRIA VIRTUAL ................................................................................................................................................................................... 695
8.5. INTRODUO AO I/O ................................................................................................................................................................................. 710
8.6. SISTEMAS DE I/O EMBARCADOS ............................................................................................................................................................... 713
8.7. SISTEMAS I/O DO PC .................................................................................................................................................................................. 793
8.8. PERSPECTIVA DO MUNDO REAL: MEMRIA X86 E SISTEMAS I/O ............................................................................................................ 803
8.9. SUMRIO ................................................................................................................................................................................................... 808
A IMPLEMENTAO DE SISTEMAS DIGITAIS ........................................................................................................................................... 825
A.1 INTRODUO ............................................................................................................................................................................................. 825
A.2 LGICA 74XX .............................................................................................................................................................................................. 825
A.3 LGICA PROGRAMVEL ............................................................................................................................................................................ 827
A.4 CIRCUITOS INTEGRADOS DE USO ESPECFICO ........................................................................................................................................... 835
A.5 DATA SHEETS ............................................................................................................................................................................................. 835
A.6 FAMLIA LGICAS....................................................................................................................................................................................... 842
A.7 EMPACOTAMENTO E MONTAGEM ........................................................................................................................................................... 845
A.8 LINHAS DE TRASMISSO ............................................................................................................................................................................ 851
A.9 ECONOMIA ................................................................................................................................................................................................ 866
B INSTRUES MIPS............................................................................................................................................................................... 871
C PROGRAMAO EM C ......................................................................................................................................................................... 877
C.1 INTRODUO ............................................................................................................................................................................................. 877
C.2 BEM VINDO AO C ....................................................................................................................................................................................... 879

xiii
C.3 COMPILAO ............................................................................................................................................................................................. 881
C.4 VARIVEIS .................................................................................................................................................................................................. 885
C.5 OPERADORES ............................................................................................................................................................................................. 890
C.6 CHAMADAS DE FUNO............................................................................................................................................................................ 894
C.7 DECLARAES DE CONTROLE DE FLUXO................................................................................................................................................... 896
C.8 MAIS TIPOS DE DADOS .............................................................................................................................................................................. 902
C.9 BIBLIOTECAS PADRO ............................................................................................................................................................................... 922
C.10 COMPILADOR E OPES DA LINHA DE COMANDO .................................................................................................................................. 933
C.11 ERROS COMUNS ........................................................................................................................................................................................ 935
D PROCESSADOR MIPSFPGA ................................................................................................................................................................... 941
D.1 INTRODUO ............................................................................................................................................................................................. 941
D.2 OBTER E INSTALAR AS FERRAMENTAS DE TRABALHO .............................................................................................................................. 952
D.3 SIMULAO COM O MODELSIM ............................................................................................................................................................... 963
D.4 CARREGAR E DEPURAR UM PROGRAMA EM TEMPO REAL ...................................................................................................................... 972

xiv
xv
Prefcio
Porqu publicar mais um livro sobre projeto digital e arquitetura de computadores? H dezenas de bons
livros impressos sobre o projeto digital. H tambm vrios bons livros sobre arquitetura de computadores,
especialmente os textos clssicos de Patterson e Hennessy. Este livro nico na sua abordagem na medida
em que apresenta o projeto de lgica digital a partir da perspectiva da arquitetura de computadores,
comeando do incio com 1 e 0, e levando os alunos atravs da concepo de um microprocessador MIPS.
Temos utilizado vrias edies do Computer Organization and Design (COD) de Patterson Hennessy
durante muitos anos no Harvey Mudd College. Gostamos particularmente da cobertura da arquitetura MIPS
porque uma arquitetura de microprocessador comercialmente bem-sucedida, mas simples o suficiente
para explicar claramente e construir numa aula introdutria. Dado que a nossa disciplina no tem nenhum
pr-requisito, a primeira metade do semestre dedicada ao projeto digital, o que no coberto pelo COD.
Outras universidades tm indicado a necessidade de um livro que combine o projeto digital com a arquitetura
de computadores. Comprometermo-nos a preparar um desses livros.
Acreditamos que a construo de um microprocessador um rito especial de iniciao para estudantes de
engenharia e cincia da computao. O funcionamento interno de um processador parece quase mgico para
os no iniciados, mas revela-se simples quando cuidadosamente explicado. O projeto digital em si um tema
poderoso e emocionante. A programao em linguagem assembly revela a linguagem interna falada pelo
processador. A microarquitetura a ligao entre as partes.
Este livro adequado para uma rpida introduo, de um nico semestre para projeto da arquitetura de
computadores digitais ou para dois semestres em sequncia, dando mais tempo para digerir o material e

i
experimentar no laboratrio. O curso pode ser ensinado sem pr-requisitos. O material geralmente
ensinado nos anos iniciais do curso, mas tambm pode ser acessvel a calouros brilhantes.

Caractersticas
Este livro oferece uma srie de caractersticas especiais.
Cobertura Lado-a-Lado com SystemVerilog e VHDL
As linguagens de descrio de hardware (HDL Hardware Discreption Language) esto no centro das
prticas modernas de projeto digital. Infelizmente, os projetistas esto divididos igualmente entre as duas
linguagens dominantes, SystemVerilog e VHDL. Este livro introduz as HDL no Captulo 4, logo que projeto
lgico combinatrio e sequencial tenha sido abordado. As HDL so ento utilizadas nos Captulos 5 e 7 para
projetar blocos de construo maiores e processadores inteiros. No entanto, O Captulo 4 pode ser ignorado
e os Captulos posteriores ainda assim ficam acessveis para os cursos que optem por no cobrir HDL.
Este livro nico na sua apresentao lado-a-lado de SystemVerilog e VHDL, permitindo que o leitor
aprenda as duas linguagens. O Captulo 4 descreve os princpios que se aplicam a ambas as HDL, em seguida,
fornece a sintaxe especfica de cada linguagem e exemplos em colunas adjacentes. Este tratamento, lado-a-
lado, torna mais fcil para um instrutor escolher qualquer uma das HDL, e para o leitor a transio de uma
para a outra, quer numa aula ou em prtica profissional.
Arquitetura Clssica MIPS e Microarquitetura
Os Captulos 6 e 7 focam a arquitetura MIPS adaptada a partir da abordagem feita por Patterson e
Hennessy. A arquitetura MIPS ideal porque uma arquitetura real, entregue em milhes de produtos por
ano, no entanto, simples e fcil de aprender. Alm disso, centenas de universidades em todo o mundo tm
desenvolvido pedagogia, laboratrios, e ferramentas em torno da arquitetura MIPS.

ii
Perspectivas do Mundo Real
Os Captulos 6, 7 e 8 ilustram a arquitetura, a microarquitetura, e hierarquia de memria de processadores
Intel x86. O Captulo 8 tambm descreve os perifricos no contexto do microcontrolador PIC32 da Microchip.
Estes Captulos tm uma perspectivam do mundo real e mostram como os conceitos discutidos nos Captulos
relacionados com os chips so encontrados em muitos PC e electrnica de consumo.
Overview Acessvel de Microarquiteturas Avanadas
O Captulo 7 inclui uma viso geral das modernas caractersticas da microarquitetura de alto desempenho,
incluindo, branch prediction, superscalar e out-of-order operation, multithreading, e multicore processors. A
abordagem acessvel a um aluno num primeiro curso e mostra como as microarquiteturas do livro podem ser
estendidas a processadores modernos.
Exerccios de Fim-de-Captulo e Perguntas da Entrevista
A melhor maneira de aprender projeto digital faz-lo. Cada Captulo termina com numerosos exerccios
para praticar o material. Os exerccios so seguidos por um conjunto de perguntas de entrevista que os nossos
colegas da indstria pediram a alunos candidatos para trabalhar neste domnio. Essas perguntas fornecem uma
viso til para os candidatos vislumbrarem os problemas de trabalho normalmente encontrados no processo
de entrevista. (As solues dos exerccios esto disponveis atravs das pginas web da editora e dos
instrutores do livro. Para mais detalhes, consulte a seo seguinte, suplementos on-line.)

Suplementos Online
Os materiais complementares esto disponveis online em textbooks.elsevier.com/ 9780123944245. Este
site da editora (acessvel a todos os leitores) inclui:
Solues dos exerccios mpares

iii
Link para ferramentas profissionais de Projeto Assistido por Computador (CAD) da Altera\ e
Synopsys
Link para QtSpim (referidos genericamente como SPIM), um simulador MIPS
Cdigo HDL para o processador MIPS
Dicas teis para o Altera Quartus II
Dicas teis para o IDE da Microchip MPLAB
Slides no formato PowerPoint (PPT) do curso
Amostras de materiais do curso e de laboratrio
Errata
O site do instrutor (vinculado ao site da editora e acessvel a quem se registe em textbooks.elsevier.com)
inclui:
Solues para todos os exerccios
Link para ferramentas profissionais de Projeto Assistido por Computador (CAD) da Altera e
Synopsys. (A Synopsys oferece o Synplify Premier s universidades qualificadas num pacote de 50 licenas.
Para mais informaes sobre o programa Universitrio da Synopsys, aceder ao site do instrutor para este
livro.)
Figuras do texto em formatos JPG e PPT
Detalhes adicionais sobre como usar as ferramentas Altera, Synopsys, Microchip, e QtSpim no seu curso
so fornecidos na prxima seo. Detalhes sobre os materiais de laboratrio de amostra tambm so
fornecidos aqui.

iv
Como usar as Ferramentas de Software num Curso
Altera Quartus II
A Quartus II Web Edition uma verso gratuita da ferramenta profissional para projeto FPGA Quartus II.
Permite que os alunos carreguem os seus projetos digitais em esquema ou usando uma linguagem de descrio
de hardware (HDL) SystemVerilog ou VHDL. Depois de carregarem o projeto, os alunos podem simular os seus
circuitos usando o ModelSim - Altera Starter Edition, que est disponvel com o Altera Quartus II Web Edition.
O Quartus II Web Edition tambm inclui uma ferramenta de sntese lgica que suporta tanto o SystemVerilog
como o VHDL.
A diferena entre a Web Edition e a Subscription Edition que a Web Edition suporta um subconjunto das
FPGA mais comuns da Altera. A diferena entre o ModelSim-Altera Starter Edition e as verses comerciais do
ModelSim que a Starter Edition degrada o desempenho para simulaes com mais de 10.000 linhas de HDL.
Microchip MPLAB IDE
O MPLAB da Microchip Integrated Development Environment (IDE) uma ferramenta para programao de
microcontroladores PIC e est disponvel para download gratuito. A aplicao MPLAB integra escrita,
compilao, simulao e depurao (debug) numa nica interface. Ela inclui um compilador C e um depurador,
permitindo que os alunos possam desenvolver programas em C e assembly, compil-los e, opcionalmente,
program-los num microcontrolador PIC.
Ferramentas Opcionais: Synplify Premier e QtSpim
O Synplify Premier e o QtSpim so ferramentas opcionais que podem ser utilizadas com este material.
O produto Synplify Premier um ambiente de sntese e depurao para projeto de FPGA e CPLD. Est
includo o HDL Analyst, uma ferramenta de anlise HDL grfica nica que gera automaticamente vistas

v
esquemticas do projeto com cross-probing ao cdigo-fonte HDL. Isto extremamente til no processo de
aprendizagem e depurao.
A Synopsys oferece o Synplify Premier s universidades qualificadas num pacote de 50 licenas. Para
mais informaes sobre o programa Universitrio da Synopsys ou o software de desenho Synopsys FPGA,
visite o site instrutor deste livro (textbooks.elsevier.com/9780123944245).
O QtSpim, tambm chamado simplesmente de SPIM, um simulador MIPS que executa cdigo assembly
MIPS. Os alunos inserem o seu cdigo assembly para MIPS num arquivo de texto e executam-no usando o
QtSpim. O QtSpim exibe as instrues, a memria e os valores dos registros. Ligaes para os arquivos dos
manuais e dos exemplos do utilizador esto disponveis no site da editora
(textbooks.elsevier.com/978012394424).

Labs
O site da editora inclui links para uma srie de laboratrios que cobrem tpicos de projeto digital atravs
da arquitetura de computador. Os laboratrios ensinam os alunos como usar as ferramentas Quartus II para
introduzir, simular, sintetizar e implementar seus projetos. Os laboratrios tambm incluem tpicos na
linguagem de programao em C e assembly usando o IDE MPLAB da Microchip.
Aps a sntese, os alunos podem implementar os seus projetos usando a plataforma DE2 de
desenvolvimento e educao da Altera. Esta placa poderosa e com preos competitivos est disponvel a
partir de www.altera.com. A placa contm uma FPGA que pode ser programada para implementar os
projetos dos estudantes. Ns fornecemos laboratrios que descrevem como implementar uma seleo de
projetos na placa DE2 usando o Cyclone II Web Edition.
Para executar os laboratrios, os alunos tero de baixar e instalar o Quartus II Web Edition da Altera e
IDE MPLAB da Microchip. Os instrutores tambm podem optar por instalar as ferramentas em mquinas de

vi
laboratrio. Os laboratrios incluem instrues sobre como executar os projetos na placa DE2. A etapa de
implementao pode ser ignorada, mas ns descobrimos que possui um grande valor.
Os laboratrios foram testados no Windows, mas as ferramentas tambm esto disponveis para Linux.

Erros
Como todos os programadores experientes sabem, qualquer programa de complexidade significativa
contm, sem dvida, bugs. Assim tambm os livros. Tivemos muito cuidado para encontrar e eliminar os
erros neste livro. No entanto, alguns, sem dvida, permanecem. Iremos manter uma errata na pgina Web
do livro.
Por favor, envie os seus relatrios de erros para ddcabugs@onehotlogic.com. A primeira pessoa a relatar
um erro significativo com uma correo que usemos numa impresso futuro ser recompensada com uma
recompensa de US $1!

Agradecimentos
Em primeiro lugar agradecemos a David Patterson e John Hennessy pelo seu pioneirismo na
microarquitetura MIPS descrita em seu livro Computer Organization and Design. Temos vindo a ensinar a
partir de vrias edies do seu livro ao longo de muitos anos. Agradecemos o seu apoio gracioso deste livro
e a sua permisso para construir nas suas microarquiteturas.
Duane Bibby, o nosso cartunista favorito, trabalhou muito e bem para ilustrar a diverso e aventura do
projeto digital. Agradecemos tambm o entusiasmo de Nate McFadden, Todd Green, Danielle Miller, Dia
Robyn, e do resto da equipe do Morgan Kaufmann, que permitiu que este livro acontecesse.

vii
Gostaramos de agradecer ao Matthew Watkins que contribuiu na seo sobre multiprocessadores
Heterogneos no Captulo 7. Tambm apreciamos o trabalho de Chris Parks, Carl Pearson, e Jonathan Chai
que testaram o cdigo e desenvolveram contedo para a segunda edio.
Numerosos revisores melhoraram substancialmente o livro. Eles incluem John Barr, Jack V. Briner,
Andrew C. Brown, Carl Baumgaertner, A. Utku Diril, Jim Frenzel, Jaeha Kim, Philip King, James Pinter-Lucke,
Amir Roth, Z. Jerry Shi, James E. Stine, Luke Teyssier, Peiyi Zhao, Zach Dodds, Nathaniel Guy, Ashwin Krishna,
Volnei Pedroni, Karl Wang, Ricardo Jasinski, e um revisor annimo.
Apreciamos tambm aos alunos do nosso curso em Harvey Mudd College, que nos deram um feedback
til em esboos deste livro. Uma nota especial a Matt Weiner, Carl Walsh, Andrew Carter, Casey Schilling,
Alice Clifton, Chris Bacon, e Stephen Brawner.
E, por ltimo, mas no menos importante, ambos agradecemos s nossas famlias por seu amor e apoio.

viii
Acerca dos Autores

David Money Harris professor de engenharia no Harvey Mudd College. Recebeu seu Ph.D. em Engenharia Eltrica pela Universidade de
Stanford e seu M.Eng. em Engenharia Eltrica e Cincia da Computao pelo MIT. Antes de ingressar em Stanford, ele trabalhou na Intel como
um projetista de lgica e circuitos nos processadores Itanium e Pentium II. Desde ento, ele consultor na Sun Microsystems, Hewlett-Packard,
Evans & Sutherland, e noutras empresas de projeto. As paixes de David incluem o ensino, a construo de chips, e explorar o ar livre. Quando
no est no trabalho, ele pode ser encontrado em caminhadas, montanhismo ou escalada. Ele particularmente gosta de caminhar com os seus
trs filhos. David detm cerca de uma dzia de patentes e autor de trs outros livros de texto sobre projeto de chips, bem como quatro guias
das montanhas do sul da Califrnia.

Sarah L. Harris professora associada de engenharia no Harvey Mudd College. Recebeu seu Ph.D. e M.S. em Engenharia Elctrica pela
Universidade de Stanford. Antes de ingressar em Stanford, recebeu um B. S. em Engenharia Elctrica e da Computao pela Universidade Brigham
Young. Sarah tambm trabalhou na Hewlett-Packard, San Diego Supercomputer Center, e Nvidia. Ela ama ensinar e experimentao laboratorial.
Quando ela no est trabalhando ou correndo atrs dos seus dois filhos, pode ser encontrada a tocar msica com amigos, em caminhadas, na
canoagem, no ciclismo, e a viajar.

ix
x
Captulo um Do Zero ao Um

1. Do Zero ao Um
1.1. O PLANO DE JOGO
Os microprocessadores revolucionaram o mundo durante as ltimas trs dcadas. Um computador
porttil possui hoje mais capacidades do que no passado um mainframe do tamanho de uma sala. Um
carro topo de linha possui cerca de 50 microprocessadores. Os avanos nos microprocessadores tornaram
os telefones celulares e a internet possveis., melhoraram vastamente a medicina, e transformaram a
forma como a guerra travada. As vendas na indstria mundial dos semicondutores cresceram dos $21
bilhes de US em 1985 para os $300 bilhes em 2011, sendo os microprocessadores um segmento
importante destas vendas. Acreditamos que os microprocessadores no so apenas tecnicamente,
economicamente, e socialmente importantes, mas so tambm uma inveno humana intrinsecamente
fascinante. No momento em que o leitor acabar de ler este livro, ele saber como projetar e construir um
microprocessador. As capacidades que o leitor ir adquirir ao longo do caminho vo permitir-lhe projetar
outros sistemas digitais.
Assume-se que o leitor est basicamente familiarizado com conhecimentos de eletricidade,
experincia prvia em programao, e um interesse genuno em perceber o funcionamento de um
computador. Este livro foca-se no projeto de sistemas digitais, que funcionam em termos de 1 e 0.
Comea-se por estudar o funcionamento de portas de lgica digital, que aceitam 1 e 0 como entradas, e
devolvem na sua sada 1 e 0 como resultado. Em seguida, explorada a forma de combinar portas lgicas
em mdulos de maior complexidade tais como somadores ou memrias. Transita-se em seguida para a
programao em linguagem assembly, que a lngua nativa do microprocessador. Finalmente, a
associao de portas lgicas vai permitir construir um microprocessador que executa essa linguagem
assembly.

1
Captulo um Do Zero ao Um

Uma grande vantagem dos sistemas digitais que os blocos utilizados na sua construo so muito
simples: apenas 1 e 0. No requerem matemtica complexa ou um conhecimento aprofundado de
fsica. Em vez disso, o desafio do projetista passa por combinar estes blocos simples em sistemas de
complexidade crescente. Um microprocessador pode ser o primeiro sistema que o leitor constri que
demasiado complexo para ser por ele interiorizado. Um dos temas abordados neste livro a gesto
da complexidade.

1.2. A ARTE DE GERIR A COMPLEXIDADE


Uma das caractersticas que separa um engenheiro ou cientista da computao de um leigo uma
abordagem sistemtica da gesto da complexidade. Os modernos sistemas digitais so construdos a
partir de milhes ou bilhes de transistores. Nenhum ser humano pode compreender estes sistemas
escrevendo equaes que descrevem o movimento dos eltrons em cada transistor e resolver todas
essas equaes simultaneamente. O leitor ter que aprender a gerir a complexidade para perceber
como construir um microprocessador sem se atolar num pntano de detalhes.
1.2.1. Abstrao
Uma tcnica fundamental para gerenciar a complexidade a abstrao: Escondendo os detalhes
sempre que eles no sejam relevantes. Um sistema pode ser visto de diferentes nveis de abstrao.
Por exemplo, os polticos abstraem-se do mundo em cidades, municpios, estados e pases. Um
municpio contm vrias cidades e um estado contm muitos municpios. Quando um poltico est
concorrendo presidncia, o poltico est principalmente interessado em saber como o estado ir
votar, em vez de saber como cada municpio ir votar, de modo que o estado um nvel mais til de

2
Captulo um Do Zero ao Um

abstrao. Por outro lado, o Instituto de Estatstica mede a populao de cada cidade, por isso, esta
agncia deve considerar os detalhes associados a um menor nvel de abstrao.
A Figura 1.1 ilustra os nveis de abstrao de um sistema computacional eletrnico, juntamente
com blocos de construo tpicos em cada nvel. No nvel mais baixo de abstrao temos a fsica, o
movimento dos eltrons. O comportamento dos eltrons descrito atravs da mecnica quntica e
das equaes de Maxwell. O nosso sistema construdo a partir de dispositivos eletrnicos, como
transstores (ou tubos de vcuo, era uma vez). Estes dispositivos tm bem definidos pontos de
ligao chamados terminais e podem ser modelados atravs da relao observada entre a tenso e
a corrente medida em cada terminal. Ao abstrair a este nvel do dispositivo, podemos ignorar os
eltrons individuais. O prximo nvel de abstrao corresponde aos circuitos analgicos, em que os
dispositivos so montados para criar componentes, tais como os amplificadores. Os circuitos
analgicos possuem uma faixa contnua de tenses de entrada e sada. Os circuitos digitais, tais como
as portas lgicas, esto limitados a tenses pertencentes a intervalos discretos, que usaremos para
indicar os nveis 0 e 1. No projeto de sistemas lgicos, vamos construir estruturas mais complexas,
como somadores ou memrias, utilizando circuitos digitais.
A microarquitetura liga os nveis de abstrao lgica com a arquitetura. O nvel de abstrao da
arquitetura descreve o computador do ponto de vista do programador. Por exemplo, a arquitetura
Intel x86 utilizada por microprocessadores, na maioria dos computadores pessoais (PC) definida Figura 1.1 Nveis de abstrao para
um sistema computacional
por um conjunto de instrues e registros (memria para armazenar temporariamente variveis) que
electrnico
o programador est autorizado a usar. A microarquitetura envolve a combinao de elementos
lgicos para executar as instrues definidas na arquitetura. Uma arquitetura particular pode ser
implementada por uma de vrias microarquiteturas diferentes, com diferentes relaes de
preos/desempenhos/potncia. Por exemplo, o processador Intel Core i7, o Intel 80486, e o AMD
Athlon todos implementam a arquitetura x86 com diferentes microarquiteturas.
Entrando no reino do software, o sistema operacional lida com detalhes de baixo nvel, tais como
o acesso a uma unidade de disco rgido ou a gesto da memria. Finalmente, os aplicativos usam
essas facilidades oferecidas pelo sistema operacional para resolver um problema para o utilizador.

3
Captulo um Do Zero ao Um

Cada Captulo deste livro comea com um Graas ao poder de abstrao, a sua av pode navegar na Web sem qualquer preocupao pelas
cone de abstrao indicando o foco do vibraes qunticas dos eltrons ou a organizao da memria no computador dela.
Captulo em azul-escuro, com temas
Este livro centra-se nos nveis de abstrao dos circuitos digitais atravs da arquitetura de
secundrios mostrados em tons mais
claros de azul.
computadores. Quando o leitor trabalha num nvel de abstrao, bom saber algo sobre os nveis de
abstrao imediatamente acima e abaixo de onde ele est a trabalhar. Por exemplo, um cientista da
computao no pode otimizar completamente o cdigo sem compreender a arquitetura para a qual o
programa est a ser escrito. Um engenheiro de dispositivos no pode optar por solues de compromisso
no projeto de um transstor sem compreender os circuitos em que sero utilizados os transstores.
Esperamos que ao terminar de ler este livro, o leitor possa escolher o nvel de abstrao adequado para
resolver o seu problema e avaliar o impacto das suas escolhas de projeto noutros nveis de abstrao.
1.2.2. Disciplina
Disciplina o ato de restringir intencionalmente as suas escolhas de projeto para que se possa
trabalhar de forma mais produtiva num nvel mais alto de abstrao. A utilizao de peas intermutveis
uma aplicao familiar de disciplina. Um dos primeiros exemplos de peas intermutveis foi na
fabricao da espingardas de pederneira. At o incio do sculo IXX, as espingardas eram fabricadas
individualmente mo. Os componentes adquiridos a vrios artesos eram cuidadosamente
armazenados e montados por um armeiro altamente qualificado. A disciplina de peas intermutveis
revolucionou a indstria. Ao limitar os componentes a um conjunto padronizado com tolerncias bem
definidas, as espingardas passaram a poder ser montadas e reparadas muito mais rapidamente e com
menos habilidade. O armeiro deixou de se preocupar com os nveis mais baixos de abstrao, tais como
a forma especfica individual de um cano ou coronha.
No contexto deste livro, a disciplina digital ser muito importante. Os circuitos digitais utilizam
tenses discretas, enquanto os circuitos analgicos usam tenses contnuas. Por conseguinte, os
circuitos digitais so um subconjunto dos circuitos analgicos e em certo sentido, devem ser mais
limitados do que a classe mais ampla de circuitos analgicos. No entanto, os circuitos digitais so muito
mais simples de projetar.
Ao nos limitarmos aos circuitos digitais podemos facilmente combinar componentes em sistemas
sofisticados que, em ltima anlise, superam aqueles construdos a partir de componentes analgicos
4
Captulo um Do Zero ao Um

em muitas aplicaes. Por exemplo, televisores digitais, discos compactos (CD) e telefones celulares
O Capito Meriwether Lewis da Lewis and
substituem atualmente os seus antecessores analgicos.
Clark Expedition foi um dos primeiros
1.2.3. Os Trs Y defensores de peas intercambiveis para
Alm da abstrao e da disciplina, os projetistas utilizam os trs "y" para gerir a complexidade: espingardas. Em 1806, ele explicou:
hierarquia, modularidade e regularidade. Estes princpios aplicam-se tanto a sistemas de software As armas de Drewyer e do Sarg. Pryor
como de hardware. ficaram ambas fora de servio. A primeira
foi reparada com um trico novo, o antigo
A hierarquia implica a diviso de um sistema em mdulos, em seguida, deve-se ainda
tornou-se imprprio para uso; a segunda
subdividir cada um destes mdulos at que as peas sejam fceis de entender.
teve o co quebrado, que foi substitudo
A modularidade afirma que os mdulos tm funes e interfaces bem definidas, para que por uma cpia que havia sido preparada
se possam interligar facilmente sem imprevistos efeitos colaterais. para o trinco em Harpers Ferry, onde foi
A regularidade procura uniformidade entre os mdulos. Os mdulos mais comuns so fabricada. Mas pela precauo tomada
reutilizados muitas vezes, reduzindo o nmero de mdulos distintos que devem ser em trazer esses trincos extras, e as peas
concebidos. de trincos, alm da ingenuidade de John
Shields, a maioria das nossas armas
Para ilustrar esses "y" voltamos ao exemplo da fabricao das espingardas. Uma espingarda de estaria, neste momento, totalmente
pederneira foi um dos objetos mais intrincados de uso comum no incio do sculo IXX. Utilizando o inadequadas para uso; mas felizmente
princpio da hierarquia, podemos dividi-lo em componentes como mostrado na Figura 1.2: trinco, para ns, eu tenho-as aqui comigo para
coronha e cano. registrar que todas elas esto em boa
ordem.

Veja Elliott Coues, ed, a histria de Lewis


e Clark Expedition ... (4 vols), New York:
Harper, 1893;. reimpresso, 3 vols, New
York: Dover, 3: 817.

5
Captulo um Do Zero ao Um

Figura 1.2 Espingarda Flintlock com


uma vista detalhada (Image by
Euroarms Italia. www.euroarms.net
2006.)

Charles Babbage, 1791-1871.

Frequentou a Universidade de Cambridge 1.3. ABSTRAO DIGITAL


e casou-se com Georgiana Whitmore em
1814. Inventou a Mquina Analtica, o A maioria das variveis fsicas contnua. Por exemplo, a tenso de um fio, a frequncia de oscilao, ou
primeiro computador mecnico do a posio de uma massa so todas quantidades contnuas. Os sistemas digitais, por outro lado, representam
mundo. Tambm inventou o cowcatcher
informaes com variveis de valores discretos, ou seja, variveis com um nmero finito de valores distintos.
e a taxa postal universal e a gazua,
(Imagem cortesia da Fourmilab Sua,
www.fourmilab.ch).
6
Captulo um Do Zero ao Um

Um sistema digital inicial que utilizava variveis com dez valores discretos era a Mquina
Analtica de Charles Babbage. Babbage trabalhou de 1834 a 1871, na concepo e tentando
construir este computador mecnico. A Mquina Analtica utilizava engrenagens com dez posies
marcadas de 0 a 9, como um velocmetro mecnico num carro. A Figura 1.3 mostra um prottipo
da Mquina Analtica, na qual cada linha processa um dgito. Babbage optou por 25 linhas de
engrenagens, a mquina possui por isso 25 dgitos de preciso.

Figura 1.3 Mquina Analtica de


Babbage, em construo por altura
da sua mortem 1871 (Imagem
cortesia do Science Museum/Science
and Society Picture Library)

Ao contrrio da mquina de Babbage, a maioria dos computadores electrnicos usa uma


representao binria (dois valores) na qual uma tenso alta indica um "1" e uma tenso baixa
indica um "0", uma vez que mais fcil de distinguir entre duas tenses do que entre dez.
A quantidade de informao D numa varivel discreta avaliada com n estados distintos medida
em unidades de bits como
= log 2 (1.1)
Uma varivel binria transmite log2(2) = 1 bit de informao. Na verdade, a palavra bit deriva de
dgito binrio. Cada uma das engrenagens de Babbage permitia log2(10) = 3.322 bits de informao,
pois poderia estar numa das 23.322 = 10 posies. Um sinal contnuo contm teoricamente uma
7
Captulo um Do Zero ao Um

quantidade infinita de informao, porque pode assumir um nmero infinito de valores. Na prtica, o rudo
e o erro de medio limitam as informaes a apenas 10 a 16 bits para a maioria dos sinais contnuos. Se
a medio tem de ser feita rapidamente, o contedo de informao inferior (por exemplo, 8 bits).
Este livro centra-se em circuitos digitais que utilizam variveis binrias: 1 e 0. George Boole desenvolveu
um sistema de lgica de funcionamento tendo por base variveis binrias que agora conhecido como
lgica booleana. Cada uma das variveis de Boole pode assumir o valor TRUE ou FALSE. Os computadores
electrnicos geralmente usam uma tenso positiva para representar '1' e zero volts para representar '0'.
Neste livro, vamos usar os termos '1', TRUE, e HIGH como sinnimos. Da mesma forma, vamos usar '0',
FALSE, e LOW de forma intermutvel.
A beleza da abstrao digital que os projetistas digitais podem-se concentrar nos 1 e 0, ignorando se
as variveis booleanas so fisicamente representadas com tenses especficas, engrenagens rotativas, ou
mesmo atravs de nveis de fluido hidrulico.
Um programador de computadores pode trabalhar sem a necessidade de conhecer os detalhes ntimos
de hardware do computador. Por outro lado, a compreenso dos detalhes do hardware permite ao
programador otimizar o software para esse computador especfico.
Um bit isolado no carrega muita informao. Na prxima seo examinamos como grupos de bits
podem ser usados para representar nmeros. Nos prximos Captulos, vamos tambm utilizar grupos de
bits para representar letras e programas.

1.4. BASES NUMRICAS


O leitor est acostumado a trabalhar com nmeros decimais. Nos sistemas digitais que consistem em 1
e 0, os nmeros binrios ou hexadecimais so muitas vezes mais convenientes. Esta seo apresenta os
diversos sistemas numricos que sero utilizados em todo o resto do livro.

8
Captulo um Do Zero ao Um

Figura 1.4 Representao de um


nmero decimal

1.4.1. Nmeros Decimais


Na escola primria, o leitor aprendeu a contar e a fazer contas em decimal. Assim como o leitor
(provavelmente) tem dez dedos, h dez dgitos decimais: 0, 1, 2, ..., 9. Os dgitos decimais so associados
para formar nmeros decimais maiores. Cada posio de um dgito decimal tem dez vezes o peso da posio
anterior. Da direita para a esquerda, os pesos das posies so 1, 10, 100, 1000, e assim por diante. Os
nmeros decimais so referidos como base 10. A base indicada por um subscrito aps o nmero para
evitar a confuso quando se trabalha com mais do que uma base. Por exemplo, a Figura 1.4 mostra a forma
como o nmero decimal 974210 escrito como a soma de cada um dos seus dgitos multiplicado pelo peso
da posio correspondente.
Um nmero decimal de N-dgitos representa uma das possibilidades 10N: 0, 1, 2, 3, ..., 10N - 1. Esta
chamada a gama do nmero. Por exemplo, um nmero de trs dgitos decimais representa uma das 1000
possibilidades na faixa de 0 a 999.
1.4.2. Nmeros Binrios
Os bits representam um de dois valores, 0 ou 1, e so associados para formar nmeros binrios. Cada
posio de um nmero binrio tem o dobro do peso da posio anterior, assim os nmeros binrios tm
base 2. No sistema binrio, o peso da posio (mais uma vez da direita para a esquerda) 1, 2, 4, 8, 16, 32,
64, 128,256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, e assim por diante. Se o leitor trabalha
com nmeros binrios, muitas vezes, vai economizar tempo se se lembrar dessas potncias de dois at 216.
Um nmero binrio de N-bit representa uma das possibilidades 2N: 0, 1, 2, 3, ..., 2N-1. A Tabela 1.1 mostra
os 1, 2, 3, e 4 bits de nmeros binrios e os seus equivalentes decimais.

9
Captulo um Do Zero ao Um

Exemplo 1.1 CONVERSO DE BINRIO PARA DECIMAL


Converter o nmero binrio 101102 para decimal.
Soluo: A Figura 1.5 ilustra o processo de converso.

Tabela 1.1 Nmeros binrios e o seu equivalente decimal

10
Captulo um Do Zero ao Um

Figura 1.5 Converso de um nmero


binrio para decimal

Exemplo 1.2 CONVERSO DE DECIMAL PARA BINRIO


Converter o nmero decimal 8410 para binrio.
Soluo: Determinar se cada posio do resultado binrio tem um 1 ou um 0. Podemos fazer isso a
partir da esquerda ou da direita.
Trabalhando a partir da esquerda, comeamos com a maior potncia de 2 menor do que ou igual ao
nmero (neste caso, 64). 84 64, para que haja um 1 na posio do 64, restando 84-64 = 20. 20 < 32,
para que haja um 0 na posio do 32. 20 16, para que haja um 1 na posio do 16, deixando 20-16 =
4. 4 <8, para que haja um 0 na posio do 8. 4 4, para que haja um 1 na posio do 4, deixando 4-4 =
0. Assim, deve haver 0 de na posio do 2 e primeira posio. Colocando tudo junto, temos que 8410 =
10101002.
Trabalhar a partir da direita, repetidamente devemos dividir o nmero por 2. O resto vai para a
posio. 84/2 = 42, ento 0 vai para a posio do 1. 42/2 = 21, ento 0 vai para a posio do 2. 21/2 =
10 com um resto de 1 indo para posio do 4. 10/2 = 5, por isso 0 fica na posio do 8. 5/2 = 2 com um
resto de 1 indo para a posio do 16. 2/2 = 1, ento 0 vai para a posio do 32. Finalmente, 1/2 = 0 com
um resto de 1 indo para a coluna do 64. Novamente, temos 8410 = 10101002,

1.4.3. Nmeros Hexadecimais


Escrever nmeros binrios longos entediante e propenso a erros. Um grupo de quatro bits
representa uma de 24 = 16 possibilidades. Por isso, s vezes, mais conveniente trabalhar na base 16,

11
Captulo um Do Zero ao Um

chamada de hexadecimal. Os nmeros hexadecimais utilizam os dgitos de 0 a 9, juntamente com as


"Hexadecimal", um termo cunhado pela letras A a F, como se mostra na Tabela 1.2. As posies na base 16 tm pesos de 1, 16, 162 (ou 256),
IBM em 1963, deriva do grego hexi (seis) e
163 (ou 4096), e assim por diante.
do Latim decem (dez). Um termo mais
adequado seria usar o termo do Latim
sexa (seis), mas sexadecimal soava muito
picante. Exemplo 1.3 CONVERSO DE HEXADECIMAL PARA BINRIO E DECIMAL
Converter o nmero hexadecimal 2ED16 para binrio e decimal.
Soluo: A converso de hexadecimal para binrio fcil, porque cada dgito hexadecimal
corresponde diretamente a quatro dgitos binrios. 216 = 00102, E16 = 11102 e D16 = 11012, de modo
que 2ED16 = 0010111011012. A converso para decimal requer o uso da aritmtica mostrada na Figura
1.6.

Figura 1.6 Converso de um nmero


hexadecimal para binrio

Exemplo 1.4 CONVERSO DE BINRIO PARA HEXADECIMAL


Converter o nmero binrio 11110102 para hexadecimal.
Soluo: Novamente, a converso fcil. Devemos comear a ler partindo da direita. Os quatro bits
menos significativos so 10102 = A16. Os prximos bits so 1112 = 716. Da o resultado ser 11110102 =
7A16.

12
Captulo um Do Zero ao Um

Tabela 1.2 Sistema numrico hexadecimal

Exemplo 1.5 CONVERSO DE DECIMAL PARA HEXADECIMAL E BINRIO


Converter o nmero decimal 33310 para hexadecimal e binrio.
Soluo: Como na converso de decimal para binrio, a converso hexadecimal pode ser feita a partir
da esquerda ou da direita.
Trabalhando a partir da esquerda, devemos comear com a maior potncia de 16 a menos do que
ou igual ao nmero (neste caso, 256). 256 vai para 333 uma vez, para que haja um 1 na coluna 256,

13
Captulo um Do Zero ao Um

deixando 333-256 = 77. 16 vai para 77 quatro vezes, por isso temos um 4 na posio do 16, deixando
77-16 4 = 13. 1310 = D16, para que haja um D na posio do 1. Em resumo, 33310 = 14D16. Agora fcil
converter de hexadecimal para binrio, devemos proceder como no Exemplo 1.3, resulta 14D16 =
1010011012.
Trabalhando a partir da direita, devemos repetidamente dividir o nmero por 16. O resto da diviso
fica nas respectivas posies. 333/16 = 20 com um resto de 1310 = D16 indo para a posio do 1. 20/16
= 1 com um resto de 4 indo para a coluna 16. 1/16 = 0 com um resto de 1 para a posio do 256. Mais
uma vez, o resultado 14D16.
Um microprocessador um processador 1.4.4. Bytes, Nibbles, e All That Jazz
construdo num nico chip. At dcada
Um grupo de oito bits chamado de byte. Ele representa uma de 2 8 = 256 possibilidades. O
de 1970, os processadores eram
tamanho de objetos armazenados na memria do computador habitualmente medido em bytes em
demasiado complexos para caber num
vez de bits.
nico chip, por isso processadores de
mainframe foram construdos a partir de Um grupo de quatro bits, ou metade de um byte, chamado de nibble. Ele representa uma de 24 =
placas contendo muitas fichas. A Intel 16 possibilidades. Um dgito hexadecimal ocupa um nibble e dois dgitos hexadecimais ocupam um
lanou o primeiro microprocessador de 4-
byte inteiro. Nibbles j no uma unidade usada comumente, mas o termo bonito.
bits, chamado de 4004, em 1971. Agora,
at mesmo os supercomputadores mais Os microprocessadores lidam com pedados de dados chamados de palavras. O tamanho de uma
sofisticados so construdos usando palavra depende da arquitetura do microprocessador. Quando este Captulo foi escrito em 2012, a
microprocessadores. Usaremos os termos maioria dos computadores tinham processadores de 64-bits, o que indica que eles operam palavras
microprocessador e processador de forma de 64-bits. Na poca, os computadores mais velhos processavam palavras de 32 bits tambm estavam
intercambivel ao longo deste livro.
amplamente disponveis. Os microprocessadores mais simples, especialmente os utilizados em
dispositivos tais como torradeiras, usam palavras de 8 ou 16-bits.
Num grupo de bits, o bit na posio 1 chamado de bit menos significativo (lsb less significative
bit), e ao bit na outra extremidade d-se a designao de bit mais significativo (msb - most significative
bit), como mostrado na Figura 1.7 (a) para um nmero binrio de 6-bits. Do mesmo modo, dentro de
uma palavra, os bytes so identificados como byte menos significativo (LSB - Less Significative Byte) e
de byte mais significativo (MSB - Most Significative Byte), como mostrado na Figura 1.7 (b) para um
nmero de 4-bytes escrito com oito dgitos hexadecimais.

14
Captulo um Do Zero ao Um

Por coincidncia, 210 = 1024 103. Assim, o termo quilo (grego para mil) indica 210. Por exemplo, 210
bytes um kilobyte (1 KB). Da mesma forma, o Mega (milhes) indica 2 20 106, e giga (bilhes) indica
230 109. Se o leitor souber que 210 1000, 220 1 milho, 230 1 bilho, e se conhecer as potncias
de dois at 29, para ele fcil estimar mentalmente qualquer potncia de dois.

Figura 1.7 Byte menos e mais significante

Exemplo 1.6 ESTIMAO DE UMA POTNCIA DE DOIS


Encontrar o valor aproximado de 224 sem utilizar uma calculadora.
Soluo: Devemos dividir o expoente em mltiplos de dez com o resto. 224 = 220 24. 220 1 milho.
24 = 16. Assim, 224 16 milhes. Tecnicamente, 224 = 16.777.216, mas 16 milhes perto o suficiente.

1.4.5. Adio Binria


A adio binria semelhante adio decimal, mas mais fcil, como mostrado na Figura 1.8. Tal
como na soma decimal, se a soma dos dois nmeros maior do que o que se encaixa num nico dgito,
transportamos o valor 1 para a prxima posio. Na Figura 1.8 feita a comparao entre a adio de
nmeros decimais e nmeros binrios. Na coluna mais direita da Figura 1.8 (a), 7 + 9 = 16, o que no
pode caber num nico dgito porque ele maior do que 9. Portanto, guardamos o primeiro dgito, 6,
e transportamos as dezenas, 1, para a posio seguinte. Da mesma forma, em binrio, se a soma de
dois nmeros maior do que 1, o segundo dgito transportado para a posio seguinte. Por exemplo,
na coluna mais direita da Figura 1.8 (b), a soma 1 + 1 = 210 = 102 no cabe num nico dgito binrio.
Ento, guardamos o primeiro dgito (0) e transportamos o segundo dgito (1) do resultado para a
prxima posio. Na segunda posio, a soma de 1 + 1 + 1 = 310 = 112. Novamente, devemos guardar
15
Captulo um Do Zero ao Um

o primeiro dgito (1) e transportar o segundo dgito (1) para a prxima posio. Por razes bvias, o bit
que transportado para a posio vizinha chamado de bit de transporte.

Figura 1.8 Exemplo de adio com transportes: (a) decimal, (b) binrio

Exemplo 1.7 SOMA BINRIA


Encontrar 01112 + 01012.
Soluo: A Figura 1.9 mostra que o valor da soma 11002. Os transportes so indicados a azul.
Figura 1.9 Exemplo de uma soma Podemos verificar o nosso trabalho, repetindo a operao em decimal. 01112 = 710. 01012 = 510. A soma
binria 1210 = 11002.

Os sistemas digitais geralmente operam com um nmero fixo de dgitos. Diz-se que a adio
transborda (overflow) se o resultado for muito grande para caber nos dgitos disponveis. Um nmero
de 4 bits, por exemplo, permite valores no intervalo [0, 15]. A adio binria de 4-bits transborda se o
resultado for superior a 15. O quinto bit descartado, produzindo um resultado incorreto nos
restantes quatro bits. A situao de overflow pode ser detectada atravs da verificao de um
transporte para fora da posio mais significativa.

Exemplo 1.8 SOMA COM OVERFLOW


Encontrar 11012 + 01012. Ocorre um overflow?

16
Captulo um Do Zero ao Um

Soluo: A Figura 1.10 representa que a soma 100102. Este resultado transborda do intervalo de um
nmero binrio de 4-bits. Se tiver de ser armazenado como quatro bits, o bit mais significativo
descartado, deixando o resultado incorreto de 00102. Se o clculo foi feito usando nmeros com cinco
ou mais bits, o resultado teria sido 100102 corretamente representado.

1.4.6. Nmeros Binrios com Sinal Figura 1.10 Exemplo de uma soma
At agora, temos considerado apenas nmeros binrios sem sinal que representam quantidades binria com overflow
positivas. Muitas vezes, queremos representar nmeros positivos e negativos, o que requer um
sistema numrico binrio diferente. Existem vrios esquemas para representar nmeros binrios com
sinal; os dois mais amplamente empregados so chamados de sinal/magnitude e complemento-2.
Nmeros Sinal/ Magnitude
Nmeros sinal/magnitude so intuitivamente atraentes porque eles seguem o nosso costume de
escrever nmeros negativos usando um sinal de menos seguido pela magnitude. Um nmero
sinal/magnitude de N-bit usa o bit mais significativo como sinal e os restantes N-1 bits como a
magnitude (valor absoluto). Um bit de sinal de 0 indica um valor positivo e um bit de sinal de 1 indica
um valor negativo.

Exemplo 1.9 NMEROS DE SINAL/MAGNITUDE


Escreva 5 e -5 como um nmero sinal/magnitude de 4 bits
Soluo: Ambos os nmeros tm uma magnitude de 510 = 1012. Assim, 510 = 01012 e -510 = 11012.

Infelizmente, a adio binria normal no funciona para nmeros de sinal/magnitude. Por exemplo,
a adio normal de -510 + 510 d 11012 + 01012 = 100102, o que no faz sentido.
Um nmero sinal/magnitude de N-bit abrange a gama [-2-N-1 + 1, 2N-1 - 1]. Os nmeros sinal/magnitude
so um pouco estranhos j que tanto 0 como -0 existem. Ambos indicam o valor zero. Como o leitor
pode esperar, pode ser problemtico ter duas representaes diferentes para o mesmo nmero.

17
Captulo um Do Zero ao Um

Nmero em complemento-2
O foguete de 7 bilhes de USD Ariane 5,
lanado em 4 de Junho de 1996, saiu da Os nmeros representados no formato complemento-2 so idnticos aos nmeros binrios sem sinal,
sua rota 40 segundos aps o lanamento, exceto que a posio do bit mais significativo tem um peso de -2-N-1, em vez de 2N-1. Esta representao
partiu-se, e explodiu. O problema foi ultrapassa as limitaes dos nmeros sinal/magnitude: o zero tem uma representao nica e a adio
causado quando o computador que comum funciona.
controla o foguete sofreu um overflow da
sua gama de 16 bits e crashou. O cdigo Em representao de complemento-2, o zero escrito como todos os zeros: 00 ... 0002. O nmero
tinha sido extensivamente testado no mais positivo tem um 0 na posio mais significativa e 1 de outras posies: 01 ... 1112 = 2N-1 - 1. O
foguete Ariane 4. No entanto, o Ariane 5 nmero mais negativo tem um 1 na posio mais significativa e 0 noutras posies: 10 ... 0002 = -2-N-1. O
tinha um motor mais rpido que produziu valor -1 escrito com todos os bits a 1: 11 ... 1112.
valores maiores para o computador de
controlo, que levou ao overflow. Note-se que os nmeros positivos tm um 0 na posio do bit mais significativo e os nmeros
negativos tm um 1 na posio do bit menos significativo, de modo que o bit mais significativo pode ser
visto como o bit de sinal. No entanto, os restantes bits so interpretados de forma diferente para
nmeros complemento-2 e nmeros de sinal/magnitude.
O sinal de nmero de complemento-2 revertido num processo chamado obter o complemento-2.
Este processo consiste em complementar todos os bits do nmero, seguida da soma de 1 posio do
bit menos significativo. Isto til para encontrar a representao de um nmero negativo, ou para
determinar a magnitude de um nmero negativo.

Exemplo 1.10 REPRESENTAO DE UM NMERO NEGATIVO EM COMPLEMENTO-2


Obter a representao de -210 em complemento-2 num formato de 4-bits
Soluo: Comece com + 210 = 00102. Para obter -210, inverta os bits e adicione 1. A inverso 00102 produz
11012. Sendo 11012 + 1 = 11102. Assim -210 11102.

(Fotografia cortesia da
ESA/CNES/ARIANESPACEService Optique CS6.)

18
Captulo um Do Zero ao Um

Exemplo 1.11 VALOR DE NMEROS NEGATIVOS EM COMPLEMENTO-2


Determinar o valor decimal do nmero em complemento-2 10012.
Soluo: O nmero 10012 inicia por 1, por isso deve ser negativo. Para encontrar a sua magnitude,
devemos inverter os bits e adicionar 1. Inverso 10012 = 01102. 01102 + 1 = 01112 = 710. Assim, 10012
= -710.

Os nmeros em complemento-2 tm a vantagem de que a adio funciona corretamente tanto para


os nmeros positivos como negativos. Devemos recordar que, aquando da adio de nmeros de N-
bits, o Nsimo bit de transporte (i.e., o bit N + 1 do resultado) descartado.

Exemplo 1.12 ADICIONAR DOIS NMEROS EM COMPLEMENTO-2


Determine (a) -210 + 110 e (b) -710 + 710 usando nmeros de complemento-2.
Soluo: (a) -210 + 110 = 11102 + 00012 = 11112 = -110. (B) -710 + 710 = 10012 +
01112 = 100002. O quinto bit descartado, deixando o resultado de 4 bits correto 00002.

A subtrao realizada tomando o complemento-2 do segundo nmero seguida da adio.

Exemplo 1.13 SUBTRAIR DOIS NMEROS EM COMPLEMENTO-2


Determine (a) 510 - 310 e (b) 310 - 510 usando nmeros de 4-bits em complemento-2.
Soluo: (a) 310 = 00112. Tome o complemento-2 para obter -310 = 11012. Agora devemos adicionar 510
+ (-310) = 01012 + 11012 = 00102 = 210. Note que o transporte da posio mais significativa descartado
porque o resultado armazenado em quatro bits.
(b) Tome o complemento-2 de 510 para obter -510 = 10112. Agora adicione 310 + (-510) = 00112 + 10112
= 11102 = -210.

19
Captulo um Do Zero ao Um

O complemento-2 de 0 encontrado invertendo todos os bits (produzindo 11 ... 111 2) e


adicionando 1, o que produz todos os bits 0, desconsiderando o transportar para fora da posio do
bit mais significativo. Por isso, o zero sempre representado com todos os bits 0. Ao contrrio do
sistema sinal/magnitude, o sistema complemento-2 no tem uma representao separado -0. O zero
considerado positivo porque o seu bit de sinal 0.
Como os nmeros sem sinal, os nmeros de complemento-2 de N-bit representam um dos 2N
possveis valores. No entanto, os valores so divididos entre nmeros positivos e negativos. Por
exemplo, um nmero sem sinal de 4-bits representa 16 valores: 0 a 15. Um nmero de 4-bits em
complemento-2 tambm representa 16 valores: -8 a 7. Em geral, o intervalo dos nmeros de N-bits
em complemento-2 est dentro do intervalo [- 2N-1, 2N-1 - 1]. Far sentido que haja mais um nmero
negativo do que nmeros positivos porque no h -0. O nmero mais negativo 10 ... 0002 = -2-N-1
s vezes chamado de nmero estranho. O complemento-2 encontrado invertendo os bits
(produzindo 01 ... 1112) e adicionando 1, que produz 10 ... 0002, o nmero estranho, novamente.
Assim, este nmero negativo no tem contrapartida positiva.
A adio de dois nmeros positivos ou nmeros negativos de N-bits pode causar overflow se o
resultado maior do que 2N-1 -1 ou inferior a -2-N-1. A adio de um nmero positivo a um nmero
negativo nunca causa overflow. Ao contrrio dos nmeros sem sinal, um transporte para fora da
coluna mais significativa no indica overflow. Em vez disso, o overflow ocorre se os dois nmeros
que esto sendo adicionados tm o mesmo bit de sinal e o resultado tem o bit de sinal oposto.

Exemplo 1.14 ADICIONAR DOIS NMEROS EM COMPLEMENTO-2 COM OVERFLOW


Determine 410 + 510 usando nmeros de 4-bits em complemento-2. Ocorre um overflow do
resultado?
Soluo: 410 + 510 = 01002 + 01012 = 10012 = -710. O resultado ultrapassa o intervalo dos nmeros
positivos de 4 bits em complemento-2, produzindo um resultado negativo incorreto. Se o clculo for
realizado usando cinco ou mais bits, o resultado 010012 = 910 teria sido correto.

20
Captulo um Do Zero ao Um

Quando um nmero em complemento-2 estendido para mais bits, o bit de sinal deve ser copiado
para as posies de bit mais significativas. Este processo chamado de extenso de sinal. Por exemplo,
os nmeros 3 e -3 so escritos como nmeros de 4-bits em complemento-2 como 00112 e 11012,
respectivamente. A sua extenso de sinal para sete bits, ocorre copiando o bit de sinal para os trs
novos bits superiores para formar 00000112 e 11111012, respectivamente.
Comparao dos Sistemas Numricos
Os trs sistemas de nmeros binrios mais utilizados so sem sinal, complemento-2, e
sinal/magnitude. A Tabela 1.3 compara o intervalo de nmeros de N-bits em cada um destes trs
sistemas. Os nmeros em complemento-2 so convenientes porque representam inteiros positivos e
negativos e, por causa disso, a operao de soma normal funciona para todos os nmeros. A subtrao
realizada negando o segundo nmero (i.e., efetuando o complemento-2), e ento efetuando a
adio. A menos que indicado de outra forma, devemos assumir que todos os nmeros binrios
utilizam a representao em complemento-2.

Tabela 1.3 Intervalo de nmeros de N-bits

21
Captulo um Do Zero ao Um

Figura 1.11 Linha numrica e codificao binria de 4-bits

A Figura 1.11 apresenta uma linha de nmero que indica os valores de nmeros de 4-bits em
cada um dos sistemas. Os nmeros sem sinal abrangem o intervalo [0, 15]. Os nmeros em
complemento-2 cobrem o intervalo [-8, 7]. Os nmeros positivos [0, 7] compartilham a mesma
codificao como nmeros sem sinal. Os nmeros negativos [-8, -1] so codificados de tal modo
que o maior valor binrio sem sinal representa um nmero mais prximo de 0. Note que o nmero
estranho, 10002, representa -810 e no tem correspondente positivo. Os nmeros de
sinal/magnitude abrangem a gama [-7, 7]. O bit mais significativo o bit de sinal. Os nmeros
positivos [1, 7] compartilham a mesma codificao dos nmeros sem sinal. Os nmeros negativos
so simtricos, mas tm o bit de sinal cativo. O zero possui a dupla representao de 0000 e 1000.
Assim, os nmeros de N-bit de sinal/magnitude representam apenas 2N - 1 inteiros por causa das
duas representaes para 0.

22
Captulo um Do Zero ao Um

1.5. PORTAS LGICAS


Agora que sabemos como usar variveis binrias para representar informaes, vamos explorar os
sistemas digitais que executam operaes sobre essas variveis binrias. As portas lgicas so circuitos
digitais simples que possuem uma ou mais entradas digitais e produzem uma sada binria. As portas
lgicas so desenhadas com um smbolo que mostra a entrada (ou entradas) e a sada. As entradas so
normalmente desenhadas do lado esquerda (ou superior) e as sadas do lado direito (ou inferior). Os
projetistas digitais normalmente usam letras perto do incio do alfabeto para as entradas da porta e a
letra Y para a sada da porta. A relao entre as entradas e a sada pode ser descrita por uma tabela
verdade ou uma equao booleana. A tabela verdade lista as entradas esquerda e a sada
correspondente direita. As tabelas possuem uma linha para cada combinao possvel de entradas.
Uma equao booleana uma expresso matemtica que usa variveis binrias.
1.5.1. Porta NOT
Uma porta NOT tem uma entrada, A, e uma sada, Y, como mostrado na Figura 1.12. A sada da porta
NOR o inverso da sua entrada. Se A FALSE, ento Y TRUE. Se A TRUE, ento Y FALSE. Esta relao
resumida pela tabela verdade e a equao booleana na figura. A linha sobre A na equao booleana
designada de NOT, ento Y = lido "Y igual a NO A." A porta NOT tambm chamado de inversora.
Outros textos utilizam uma variedade de notaes para NOT, incluindo Y = A', Y = A, Y = !A ou Y =
~A. Usaremos Y = exclusivamente, mas no se confunda se encontrar outra notao em outros
lugares.
1.5.2. Buffer
A outra porta lgica de uma entrada chamada de buffer e mostrada na Figura 1.13 Ela Figura 1.12 Porta NOT
simplesmente copia a entrada para a sada. Do ponto de vista lgico, um buffer no diferente de um
fio, por isso pode parecer intil. No entanto, do ponto de vista analgico, o buffer pode ter
caractersticas desejveis tais como a capacidade de produzir grandes quantidades de corrente para um
motor ou a capacidade de enviar rapidamente a sua sada para muitas portas. Este um exemplo de
que preciso considerar vrios nveis de abstrao para entender completamente um sistema; a

23
Captulo um Do Zero ao Um

abstrao digital esconde o verdadeiro propsito de um buffer. O smbolo tringulo indica um tampo.
Um crculo na sada indica inverso, como foi visto no smbolo NOT da Figura 1.12.
1.5.3. Porta AND
As portas lgicas de duas entradas so mais interessantes. A porta AND mostrada na Figura 1.14
produz uma sada de TRUE, Y, se e somente se ambos A e B so TRUE. Caso contrrio, a sada FALSE.
Por conveno, as entradas so listadas na ordem 00, 01, 10, 11, como se estivesse contando em
binrio. A equao booleana para uma porta AND pode ser escrita de vrias maneiras: Y = A B, Y =
Figura 1.13 Porta Buffer AB, ou Y = A B. O smbolo pronunciado "interseco" e preferido pelos lgicos. Ns preferimos
Y = AB, leia "Y igual a A e B", porque somos preguiosos.
1.5.4. Porta OR
A porta OR mostrada na Figura 1.15 produz uma sada de TRUE, Y, se A ou B (ou ambas) so TRUE.
A equao Booleana para uma porta OR escrita como Y = A + B ou Y = A B. O smbolo designado
por unio e preferido pelos lgicos. Os projetistas digitais normalmente usam a notao +, Y = A + B
pronunciado "Y igual a A ou B."
1.5.5. Outras Portas de Duas Entradas
A Figura 1.17 apresenta outras portas lgicas comuns de duas entradas. XOR (OU exclusivo,
pronuncia-se "ex-OR") TRUE se A ou B, mas no ambos, so TRUE. Qualquer porta pode ser seguida
por um crculo para inverter o seu funcionamento. A porta NAND implementa NOT AND. A sua sada
Figura 1.14 Porta AND TRUE, a menos que ambas as entradas sejam TRUE. A porta NOR implementa NOT OR. A sua sada
TRUE se nem A nem B so TRUE. Uma porta XOR de N-entradas , s vezes, chamada de porta de
paridade e produz uma sada TRUE se um nmero mpar de entradas so TRUE. Tal como acontece
De acordo com Larry Wall, inventor da com portas de duas entradas, as combinaes de entrada na tabela verdade so listadas em ordem
linguagem de programao Perl, "as trs da contagem.
principais virtudes de um programador
so preguia, impacincia e arrogncia."

24
Captulo um Do Zero ao Um

Figura 1.16 Mais portas de duas entradas


Figura 1.15 Porta OR
Exemplo 1.15 PORTA XNOR
Uma estranha maneira de lembrar o
A Figura 1.17 apresenta o smbolo e a equao Booleana para uma porta XNOR de duas entradas smbolo OR que o seu lado de entrada
que executa o inverso de uma XOR. Complete a tabela verdade. curvo como a boca de Pac Man, de modo
que a porta est com fome e com vontade
Soluo: A Figura 1.18 mostra a tabela verdade. A sada XNOR TRUE se ambas as entradas so FALSE de comer qualquer entrada TRUE que
ou ambas as entradas forem TRUE. A porta XNOR de duas entradas s vezes chamada de porta possa encontrar!
igualdade, porque a sua sada verdadeira quando as entradas so iguais.

Figura 1.17 Porta XNOR

25
Captulo um Do Zero ao Um

Figura 1.18 Tabela verdade XNOR

1.5.6. Portas de Mltiplas Entradas


Existem muitas funes booleanas de trs ou mais entradas. As mais comuns so AND, OR, XOR,
NAND, NOR e XNOR. Uma porta AND de N-entradas produz uma sada TRUE quando todas as suas N-
entradas so TRUE. Uma porta OR de N-entradas produz uma sada TRUE quando pelo menos uma
entrada for TRUE.

Figura 1.19 Porta NOR de 3 entradas Exemplo 1.16 PORTA NOR DE TRS ENTRADAS
A Figura 1.19 mostra o smbolo e a equao booleana para uma porta NOR de trs entradas.
Complete a tabela verdade.
Soluo: A Figura 1.20 mostra a tabela verdade. A sada TRUE somente se nenhuma das entradas for
TRUE.

Exemplo 1.17 PORTA AND DE QUATRO ENTRADAS


A Figura 1.21 mostra o smbolo e a equao booleana para uma porta de quatro-entrada. Crie uma
Figura 1.20 Tabela verdade da porta
NOR de 3 entradas tabela verdade
Soluo: A Figura 1.22 mostra a tabela verdade. A sada TRUE somente se todas as entradas forem
TRUE.

26
Captulo um Do Zero ao Um

1.6. POR BAIXO DA ABSTRAO DIGITAL


Um sistema digital utiliza variveis discretas. No entanto, as variveis so representadas por
quantidades fsicas contnuas tais como a tenso de um fio, a posio de uma roda dentada, ou o nvel
de fluido dentro de um cilindro. Assim, o projetista deve escolher uma maneira de relacionar o valor
contnuo com o valor discreto. Figura 1.21 Porta AND de 4 entradas

Por exemplo, considere que representa um sinal binrio A com uma tenso num fio. Seja 0 volts (V)
indicados por A = 0 e 5 V indicados A = 1. Qualquer sistema real deve tolerar algum rudo, de modo que
4,97 V, provavelmente, deve ser interpretado como A = 1 tambm. Mas e 4,3V? Ou 2,8V? Ou 2.500000V?
1.6.1. Fonte de Tenso
Suponhamos que a menor tenso no sistema de 0 V, tambm chamado terra ou GND. A tenso mais
alta do sistema vem da fonte de alimentao e normalmente chamado de VDD. Na tecnologia de 1970
e 1980, VDD era geralmente 5 V. Com os circuitos integrados a progrediram para transstores menores, a
VDD caiu para 3.3 V, 2.5 V, 1.8 V, 1.5 V, 1.2 V, ou ainda valores menores para economizar energia e evitar
a sobrecarga dos transstores.
1.6.2. Nveis Lgicos
O mapeamento de uma varivel contnua para uma varivel binria discreta feito definindo nveis
lgicos, como mostrado na Figura 1.23. A primeira porta chamada de driver a segunda porta chamada Figura 1.22 Tabela verdade da porta
de receiver. A sada do controlador ligada entrada do receiver. O driver produz um nvel LOW (0) de AND de 4 entradas
sada na gama de 0 a VOL ou um HIGH (1) de sada na gama de VOH a VDD. Se o receiver recebe uma entrada
na faixa de 0 a VIL, ir considerar a entrada a LOW. Se o receiver recebe uma entrada na faixa de VIH a
VDD, ele vai considerar a entrada a HIGH. Se, por algum motivo, como o rudo ou componentes
defeituosas, a entrada do receiver cair na zona proibida entre VIL e VIH, o comportamento da porta
imprevisvel. VOH, VOL, VIH e VIL so chamados de nveis lgicos altos e baixos de sada e entrada.

27
Captulo um Do Zero ao Um

1.6.3.Margens de Rudo
VDD representa a tenso no dreno do
Se a sada do driver para ser interpretada corretamente na entrada do receiver, devemos
transstor semicondutor de xido de
metal usada para construir a maioria dos escolher VOL < VIL e VOH > VIH. Assim, mesmo que a sada do driver seja perturbada por algum rudo,
chips modernos. A tenso de alimentao a entrada do receiver detectar o nvel lgico correto. A margem de rudo a quantidade de rudo
tambm por vezes chamada VCC, que que pode ser adicionado de tal forma que o sinal pode ainda ser interpretado como uma entrada
est para a tenso no coletor de um vlida num pior caso da sada. Como pode ser visto na Figura 1.23, as margens de rudo de baixo e
transstor bipolar de juno utilizado para alto nvel so, respectivamente
construir chips numa tecnologia mais
antiga. O GND por vezes chamado de = (1.2)
VSS, porque a tenso da source de um = (1.3)
transstor semicondutor de xido de
metal. Veja a Seo 1.7 para mais
informaes sobre transstores.

Figura 1.23 Nveis lgicos e margens de rudo

28
Captulo um Do Zero ao Um

Exemplo 1.18 DETERMINAR AS MARGENS DE RUDO


Considere o circuito inversor da Figura 1.24. VO1 a tenso de sada do inversor I1, e VI2 a tenso
de entrada do conversor I2. Ambos os conversores tm as seguintes caractersticas: VDD = 5 V, VIL = 1,35
V, VIH = 3.15 V, VOL = 0,33 V e VOH = 3,84 V. Quais so as margens de rudo de nvel baixo e alto do
inversor? o circuito pode tolerar 1 V de rudo entre VO1 e VI2?

Figura 1.24 Circuito inversor

Soluo: As margens de rudo do inversor so: NML = VIL - VOL = (1,35 V - 0,33 V) = 1,02 V, NMH = VOH -
VIH = (3,84 V - 3,15 V) = 0,69 V. O circuito pode tolerar 1 V de rudo quando a sada est a LOW (NML =
1,02 V), mas no quando a sada est a HIGH (NMH = 0,69 V). Por exemplo, suponha que o driver, I1,
gera no pior caso o valor HIGH, VO1 = VOH = 3,84 V. Se o rudo fizer com que a tenso diminua 1 V antes
de atingir a entrada do receptor, VI2 = (3,84 V - 1 V) = 2,84 V. Este menor do que o valor de entrada DC indica um comportamento em que
HIGH aceitvel, VIH = 3,15 V, de modo que o receiver pode no detectar uma entrada HIGH adequada. uma tenso de entrada mantida
constante ou as alteraes ocorrem
1.6.4. Caracterstica de Transferncia DC devagar o suficiente para que o resto do
Para entender os limites da abstrao digital, devemos aprofundar o comportamento analgico de sistema possa manter-se. A raiz histrica
uma porta lgica. A caracterstica de transferncia DC de uma porta lgica descreve a tenso de sada do termo vem da corrente contnua, um
como uma funo da tenso de entrada quando a entrada alterada de forma suficientemente lenta mtodo de transmisso de energia
para que a sada possa manter-se. chamada de caractersticas de transferncia porque descreve a atravs de uma linha com uma tenso
constante. Em contraste, a resposta
relao entre as tenses de entrada e sada.
transiente de um circuito o
Um inversor ideal dever ter um limiar de comutao brusco a VDD/2, conforme comportamento quando uma tenso de
mostrado na Figura 1.25 (a). Para V(A) < VDD/2, V(Y) = VDD. Para V(A) > VDD/2, entrada varia rapidamente. A Seo 2.9
V (Y) = 0. Neste caso, VIH = VIL = VDD/2. VOH = VDD e VOL = 0. explora mais a resposta transitria.

29
Captulo um Do Zero ao Um

Um inversor verdadeiro muda gradualmente mais entre os extremos, tal como mostrado na Figura
1.25 (b). Quando a tenso de entrada V(A) 0, a tenso de sada V(Y) = VDD. Quando V(A) = VDD, V (Y)
= 0. No entanto, a transio entre estes extremos suave e no pode ser exatamente centrada em
VDD/2. Isso levanta a questo de como definir os nveis lgicos.
Um lugar razovel para escolher os nveis lgicos onde o declive da caracterstica de
transferncia d(Y)/dV(A) -1. Estes dois pontos so chamados de pontos de ganho unitrio.
Escolhendo os nveis lgicos nos pontos de ganho unitrio geralmente maximiza as margens de rudo.
Se VIL foi reduzido, VOH s iria aumentar por uma pequena quantidade. Mas se VIL for aumentado, VOH
cairia vertiginosamente.

Figura 1.25 Caracterstica de transferncia DC e nveis lgicos

30
Captulo um Do Zero ao Um

1.6.5. A Disciplina Esttica


Para evitar entradas que caem na zona proibida, as portas lgicas digitais so concebidas de
acordo com a disciplina esttica. A disciplina esttica requer que, dadas as entradas logicamente
vlidas, cada elemento do circuito ir produzir sadas logicamente vlidas.
Conformando-se com a disciplina esttica, os projetistas digitais sacrificaram a liberdade de usar
elementos de circuito analgico arbitrrios para obterem a simplicidade e a robustez dos circuitos
digitais. Eles permitem elevar o nvel de abstrao de analgico para digital, aumentando a
produtividade de projeto ao esconder detalhes desnecessrios.
A escolha de VDD e dos nveis lgicos arbitrria, mas todas as portas que se comunicam devem
ter nveis lgicos compatveis. Por conseguinte, as portas so agrupadas em famlias lgicas de modo
a que todas as portas de uma famlia lgica obedeam disciplina esttica quando usadas com outras
portas na famlia. As portas lgicas da mesma famlia lgica encaixam como Legos, as quais usam
tenses de alimentao e nveis lgicos consistentes.
As quatro grandes famlias lgicas que predominaram desde a dcada de 1970 atravs da dcada
de 1990 so a Transistor-Transistor Logic (TTL), a Complementary Metal-Oxide-Semiconductor Logic,
Low Voltage Logic TTL (LVTTL) e Low Voltage Logic CMOS (LVCMOS). Os nveis lgicos utilizados so
comparados na Tabela 1.4. Desde ento, as famlias lgicas tm-se dividido com a proliferao das
tenses de alimentao ainda mais baixas. O Apndice A.6 revisita as famlias lgicas mais populares
em detalhe.

31
Captulo um Do Zero ao Um

Tabela 1.4 Famlias lgicas de nveis lgicos de 5 V e 3.3 V

Tabela 1.5 Compatibilidade das famlias lgicas

Exemplo 1.19 COMPATIBILIDADE DAS FAMLIAS LGICAS


Quais das famlias lgicas apresentadas na Tabela 1.4 podem comunicar entre elas de forma
confivel?
Soluo: A Tabela 1.5 lista a compatibilidade lgica entre famlias lgicas. Note-se que uma famlia
com lgica de 5 V, tais como a TTL ou a CMOS pode produzir uma tenso de sada to alto quanto 5V.
Se este sinal de 5 V aciona a entrada de uma famlia de 3,3 V, tal como a lgica LVTTL vs LVCMOS,
pode danificar o receiver, a menos que este seja especialmente concebido para ser "5 volts
compatvel."

32
Captulo um Do Zero ao Um

1.7. TRANSSTORES CMOS*


Esta e outras sees marcadas com * so opcionais e no so necessrias para compreender o
fluxo principal do livro.
A Mquina Analtica de Babbage foi construda a partir de engrenagens, e os computadores
elctricos iniciais utilizavam rels ou tubos de vcuo. Os computadores modernos usam transstores
porque so baratos, pequenos, e de confiana. Os transstores so interruptores controlados
eletricamente que ligam ou desligam quando uma tenso ou corrente aplicada a um terminal de
controlo. Os dois principais tipos de transstores so os transstores de juno bipolar (bipolar junction
transistors) e os transstores de efeito de campo de metal-oxido-semicondutor (metal-oxide-
semiconductor field effect transistors) (MOSFET ou transstores MOS).
Em 1958, Jack Kilby na Texas Instruments construiu o primeiro circuito integrado contendo dois
transstores. Em 1959, Robert Noyce na Semiconductor Fairchild patenteou um mtodo de
interconexo de vrios transstores em um nico chip de silcio. Na poca, os transstores custavam
cerca de US $ 10 cada. Robert Noyce, 1927-1990. Nascido em
Burlington, Iowa. Recebeu um B. A. em
Graas a mais de trs dcadas de avanos de fabricao sem precedentes, os engenheiros podem fsica pela Grinnell College eum Ph.D. em
agora empacotar cerca de um bilho de transstores MOSFET num chip de 1 cm2 de silcio, e esses Fsica pelo MIT. Apelidado de "prefeito do
transstores custam menos do que 10 micro centavos cada. A capacidade e os custos continuam a Vale do Silcio" por sua profunda
melhorar por uma ordem de magnitude a cada 8 anos ou mais. Os MOSFET so agora os blocos de influncia sobre a indstria.
construo de quase todos sistemas digitais utilizam. Nesta seo, vamos espreitar por baixo da Co-Fundador da Fairchild Semiconductor
abstrao digital para ver como as portas lgicas so construdas a partir de MOSFET. em 1957 e da Intel em 1968. Inventou o
circuito integrado. Muitos engenheiros de
1.7.1. Semicondutores
suas equipes fundaram outras empresas
Os transstores MOS so construdos a partir de silcio, o tomo predominante na pedra e areia. O
de semicondutores.
silcio (Si) um tomo do grupo IV, por isso, tem quatro eltrons na sua camada de valncia e forma
ligaes com quatro tomos adjacentes, resultando numa rede cristalina. A Figura 1.26 (a) mostra a ( 2006, Intel Corporation. Reproduzido
estrutura em duas dimenses para facilidade de desenho, mas devemos lembrar que a rede com permisso).
efetivamente forma um cristal cbico. Na figura, uma linha representa uma ligao covalente. Por si

33
Captulo um Do Zero ao Um

s, o silcio um mau condutor porque todos os eltrons esto amarrados em ligaes covalentes.
No entanto, torna-se um condutor melhor quando pequenas quantidades de impurezas, chamadas
tomos dopantes, so cuidadosamente adicionadas. Se um dopante do grupo V, como arsnio (As)
adicionado, os tomos dopantes tm um eltron extra que no est envolvido nas ligaes. Os
eltrons podem facilmente mover-se sobre a estrutura, deixando um tomo dopante ionizado (As+)
para trs, como mostrado na Figura 1.26 (b). O eltron carrega uma carga negativa, de modo que
chamamos o arsnio de dopante do tipo-n. Por outro lado, se um dopante do grupo III, tais como o
boro (B), adicionado, aos tomos dopantes falta um eltron, como mostrado na Figura 1.26 (c).
Esta falta de eltrons denominada de lacuna. Um eltron de um tomo de silcio vizinho pode
mover-se para preencher a ligao em falta, formando um tomo dopante ionizado (B-) e deixando
uma lacuna no tomo de silcio vizinho. De um modo semelhante, a lacuna pode migrar em torno da
estrutura. A lacuna uma falta de carga negativa, por isso, atua como uma partcula carregada
positivamente. Por isso, chamamos o Boro de dopante do tipo-p. Uma vez que a condutividade de
silcio muda ao longo de muitas ordens de grandeza, dependendo da concentrao dos dopantes, o
silcio designado de semicondutor.
1.7.2. Dodos
A juno entre o silcio do tipo-p e do tipo-n, silcio chamado de dodo. A regio do tipo-p
chamada de nodo e a regio de tipo-n chamada de ctodo, conforme ilustrado na Figura 1.27.
Quando a tenso no nodo sobe acima da tenso no ctodo, o dodo polarizado diretamente e a
corrente flui atravs do dodo a partir do nodo para o ctodo. Mas, quando a tenso de nodo
menor do que a tenso no ctodo, o dodo polarizado reversa, e a corrente no passa. O smbolo
de dodo mostra intuitivamente que a corrente flui em uma nica direo.

Figura 1.26 Estrutura cristalina do


Silcio de tomos dopantes

34
Captulo um Do Zero ao Um

1.7.3. Capacitor
Um capacitor constitudo por dois condutores separados por um isolador. Quando uma tenso V
aplicada a um dos condutores, o condutor acumula a carga eltrica Q e o outro condutor acumula a
carga -Q oposta. A capacitncia C do capacitor a razo entre a carga e a tenso:
C = Q / V. A capacitncia proporcional ao tamanho dos condutores e inversamente proporcional Figura 1.27 Dodo de Juno p-n.
distncia entre eles. O smbolo para um capacitor est ilustrado na Figura 1.28. Estrutura e smbolo

A capacidade importante porque o carregamento ou descarga de um condutor leva tempo e


energia. Uma capacidade maior significa que um circuito ser mais lento e necessita de mais energia
para funcionar. A velocidade e a energia sero discutidas ao longo deste livro.
1.7.4. Transstores nMOS e pMOS
Figura 1.28 Smbolo do capacitor
Um MOSFET um sanduche de vrias camadas de conduo e materiais isolantes. Os MOSFET so
construdos a partir de finas wafers de silcio com cerca de 15 a 30 cm de dimetro. O processo de
fabrico comea com uma simples wafer. O processo envolve uma sequncia de passos ao longo dos
quais os dopantes so implantados ao silcio, filmes finos de dixido de silcio e silcio so produzidos,
e o metal depositado. Entre cada passo, a wafer padronizada de modo a que os materiais aparecem
apenas onde so desejados. Uma vez que os transstores tm comprimento de uma fraco de mcron
(1 m= 1 micron = 106 m.) toda a bolacha processada de uma s vez, por isso pouco dispendioso o
fabrico de bilhes de transstores de cada vez. Uma vez que o processamento esteja concludo, a wafer
cortada em retngulos chamados de chips ou dice que contm milhares, milhes ou at bilhes de
transstores. O chip testado e, em seguida, colocado num plstico ou pacote de cermico com pinos Tcnicos numa sala limpa da Intel usando
de metal para conect-lo a uma placa de circuito. fato de proteo Gore-Tex para evitar que
partculas dos seus cabelos, pele e roupas
A sanduche de MOSFET consiste numa camada condutora chama de porta no topo de uma camada
contaminassem os transstores
isolante de dixido de silcio (SiO2) na parte superior da bolacha de silcio, o chamado substrato.
microscpicos em wafers de silcio
Historicamente, a porta foi construda a partir de metal, da o nome de semicondutores de xidos de ( 2006, Intel Corporation. Reproduzido
metal. Os processos de fabrico modernos usam silcio policristalino para a porta, porque no funde com permisso).
durante os passos de processamento de alta temperatura subsequentes. O dixido de silcio mais
conhecido como vidro e muitas vezes chamado simplesmente de xido na indstria de
35
Captulo um Do Zero ao Um

semicondutores. A sanduche de metal-xido-semicondutor forma um condensador, em que uma


camada fina de xido isolante chamado de dieltrico separa as placas de metal e semicondutoras.

Um pacote dual-in-line de 40 pinos (DIP)


contm um pequeno chip (pouco visvel)
no centro que est ligado a 40 pinos de
metal, 20 por lado, por fios de ouro mais
finos do que um fio de cabelo (fotografia
de Kevin Mapp. Harvey Mudd College).

Figura 1.29 Transstores nMOS e pMOS

Existem dois tipos de MOSFET: nMOS e pMOS. A Figura 1.29 mostra seces transversais de
cada tipo, feito por corte de uma wafer e olhando para ele de lado. Os transstores do tipo-n,
chamado nMOS, tm regies dopantes do tipo-n adjacentes porta chamada de source e dreno
e so construdas sobre um substrato semicondutor do tipo-p. Os pMOS so exatamente o
oposto, que consiste numa source de tipo-p e a regio do dreno num substrato tipo-n.
Um MOSFET comporta-se como um interruptor controlado por tenso em que a tenso da
porta cria um campo elctrico que liga ou desliga a ligao entre a source e o dreno. A designao
de transstor de efeito de campo vem deste princpio de operao. Vamos comear por explorar
o funcionamento de um transstor nMOS.

36
Captulo um Do Zero ao Um

O substrato de um transstor nMOS est normalmente ligada a GND, a tenso mais baixa no sistema. Os terminais da source e do dreno so
Em primeiro lugar, consideremos a situao quando a porta est tambm a 0 V, conforme mostrado fisicamente simtricos. No entanto,
na Figura 1.30 (a). Os dodos entre a source ou o dreno e o substrato esto polarizados inversamente podemos dizer que a carga flui da source
porque a tenso da source ou do dreno no negativa. Assim, no existe um caminho para o fluxo de para o dreno. Num transstor nMOS, a
corrente entre a source e o dreno, de modo que o transstor est ao corte. Agora, considere que a porta carga transportada por eltrons, que
colocada a VDD, como mostrado na Figura 1.30 (b). Quando uma tenso positiva aplicada placa de fluem de tenso negativa para a tenso
topo de um condensador, estabelece um campo elctrico que atrai a carga positiva para a placa de positiva. Num transstor pMOS, a carga
transportada por lacunas, que fluem da
topo e a carga negativa para a placa inferior. Se a tenso suficientemente grande, de modo que muita
tenso positiva para a tenso negativa. Se
carga negativa atrada para o lado de baixo da porta a regio inverte do tipo-p para se tornar
desenharmos esquemas com a tenso
efetivamente do tipo-n. Esta regio invertida denominada de canal. Agora, o transstor tem um mais positiva na parte superior e a mais
percurso contnuo a partir da source do tipo-n, atravs do canal do tipo-n, para o dreno do tipo-n, de negativo na parte inferior, a source de
modo que os eltrons podem fluir da source para o dreno. O transstor est em conduo. A tenso da cargas (negativa) num transstor nMOS
porta necessria para ligar um transstor chamada de tenso de limiar, Vt, e tipicamente de 0,3 a o terminal inferior e a fonte de cargas
0,7 V. (positivas) num transistor pMOS o
terminal superior.

Um tcnico segura uma bolacha de 12


Figura 1.30 Funcionamento de um transstor nMOS polegadas que contm centenas de
microprocessadores
( 2006, Intel Corporation. Reproduzido
com permisso).

37
Captulo um Do Zero ao Um

Os transstores pMOS trabalham exatamente de maneira oposta, como pode ser deduzido a partir
do crculo no seu smbolo mostrado na Figura 1.32. O substrato mantido a VDD. Quando a porta est
tambm a VDD, e o transstor pMOS fica ao corte. Quando a porta est a GND, o canal inverte para tipo-
p e o transstor pMOS fica em conduo.
Infelizmente, os MOSFET no so interruptores perfeitos. Em particular, os transstores nMOS
comutam bem para 0, mas mal para 1. Especificamente, quando a porta de um transstor nMOS est
a VDD, o dreno s ir comutar entre 0 e VDD - Vt. Da mesma forma, os pMOS comutam bem para 1, mas
mal para 0. No entanto, vamos ver que possvel construir portas lgicas que usam transstores apenas
no seu modo bom.

Figura 1.31 Modelo de interrupto dos MOSFET

Os transstores nMOS precisam de um substrato do tipo-p, e os pMOS precisam de um substrato


tipo-n. Para construir os dois tipos de transstores no mesmo chip, os processos de fabricao
normalmente comeam com uma wafer do tipo-p, em seguida, implantam regies do tipo-n chamadas
de wells onde os transstores pMOS sero construdos. Estes processos que fornecem ambos os tipos
de transstores so chamados Complementar MOS ou CMOS. Os processos CMOS so utilizados para
construir a grande maioria de todos os transstores fabricados hoje.
Em resumo, os processos CMOS do-nos dois tipos de comutadores controlados eletricamente,
Figura 1.32 Esquemtico de uma
porta NOT como mostrado na Figura 1.32. A tenso na porta (g) regula o fluxo de corrente entre a source (s) e o
dreno (d). Os transstores nMOS esto ao corte quando a porta est 0 e em conduo quando a porta

38
Captulo um Do Zero ao Um

est a 1. Os transstores pMOS so exatamente o oposto: em conduo quando a porta est a 0 e ao corte
quando a porta est a 1.
1.7.5. Porta CMOS NOT
A Figura 1.32 apresenta um diagrama esquemtico de uma porta NOT construda com transstores
CMOS. O tringulo indica GND, e a barra indica VDD; esses rtulos estaro omissos em esquemas
futuros. O transstor nMOS, N1, est ligado entre GND e a sada Y. O transstor pMOS, P1, est ligado
entre VDD e a sada Y. Ambas as portas dos transstores so controladas atravs da entrada, A.
Se A = 0, N1 est OFF e P1 est ON. Assim, Y est ligado a VDD, mas no a GND, e puxado para cima
um 1 lgico. P1 permite um bom 1. Se A = 1, N1 est ON e P1 est OFF, e Y puxado para baixo um 0
lgico. N1 permite um bom 0. Verificando a tabela verdade na Figura 1.12, vemos que o circuito de
Gordon Moore, 1929-. Nascido em San
facto uma porta NOT. Francisco. Recebeu um B. S. em qumica
1.7.6. Outras Portas Lgicas CMOS pela Universidade de Berkeley e um Ph.D.
em qumica e fsica da Caltech. Co-
A Figura 1.33 apresenta um diagrama esquemtico de uma porta NAND de duas entradas. Nos
Fundador da Intel em 1968 com Robert
diagramas esquemticos, as ligaes so sempre unidas utilizando junes de trs vias. Nos
Noyce. Observa em 1965 que o nmero
cruzamentos so utilizadas junes de quatro vias e somente um ponto mostrado. Os transstores de transstores num chip de computador
nMOS N1 e N2 esto ligados em srie; ambos os transstores nMOS devem estar em conduo de duplica a cada ano. Esta tendncia tornou-
modo a puxar a sada para baixo para GND. Os pMOS P1 e P2 esto em paralelo; apenas um transstor se conhecida como Lei de Moore. Desde
pMOS deve estar em conduo para puxar a sada para VDD. A Tabela 1.6 lista o funcionamento das 1975, nmero de transstores dobra a
redes de pull-up e de pull-down e o estado da sada, demonstrando que a porta funciona como um cada dois anos. Um corolrio da Lei de
NAND. Por exemplo, quando A = 1 e B = 0, N1 est ON, mas N2 est OFF, bloqueando o caminho de Y Moore que o desempenho do
para GND. P1 est OFF, mas P2 est ON, criando um caminho de VDD para Y. Assim, Y puxado para microprocessador dobra a cada 18 a 24
cima a 1. meses. As vendas de semicondutores
tambm tm aumentado
exponencialmente. Infelizmente, o
consumo de energia tem tambm
aumentado exponencialmente.

( 2006, Intel Corporation. Reproduzido


com permisso).
Figura 1.33 Esquemtico de uma porta NAND de duas entradas
39
Captulo um Do Zero ao Um

Tabela 1.6 Operao de uma porta AND

Figura 1.34 Forma geral de uma


porta logica inversora

A Figura 1.34 mostra a forma geral utilizada para construir qualquer porta lgica de inverso, como
NOT, NAND ou NOR. Os transstores nMOS permitem bons 0, por isso uma rede pull-down de
transstores nMOS colocada entre a sada e GND para puxar a baixo a sada para 0. Os transstores
pMOS permitem bons 1, ento uma rede de pull-up de transstores pMOS colocada entre a sada e
VDD para puxar a sada at 1. As redes podem ser constitudas por transstores em srie ou em paralelo.
Quando os transstores esto em paralelo, a rede est ON se qualquer transstor est em conduo.
Quando os transstores esto em srie, a rede est ON somente se ambos os transstores esto em
conduo. A barra atravs da ligao de entrada indica que a porta pode receber mltiplas entradas.
Se tanto a rede de pull-up como de pull-down estiverem ON simultaneamente, um curto-circuito
existiria entre o VDD e o GND. A sada da porta pode estar numa zona proibida e os transstores
consumirem grandes quantidades de energia, possivelmente o suficiente para queimar. Por outro
lado, se tanto a rede de pull-up como de pull-down estiverem OFF simultaneamente, a sada no

40
Captulo um Do Zero ao Um

Projetistas experientes afirmam que estaria ligada nem a VDD nem a GND. Dizemos que a sada flutua. O seu valor indefinido. As sadas
dispositivos eletrnicos funcionam flutuantes so geralmente indesejveis, mas na Seo 2.6, veremos como elas podem,
porque contm fumaa mgica. Eles eventualmente, ser usadas em vantagem do projetista.
confirmam esta teoria com a observao
de que, se a fumaa mgica deixa o Numa porta lgica a funcionar adequadamente, uma das redes deve estar ON e a outra OFF, em
dispositivo ele deixa de trabalhar. determinado momento, de modo que a sada esteja puxado para HIGH ou para LOW e no em curto-
circuito ou flutuante. Podemos garantir isso usando a regra de complementos de conduo. Quando
os transstores nMOS esto em srie, os transstores pMOS devem estar em paralelo. Quando os
transstores nMOS esto em paralelo, os transstores PMOS devem estar em srie.

Exemplo 1.20 ESQUEMTICO DE UM NAND DE TRS ENTRADAS


Desenhe um esquema para uma porta NAND de trs entradas usando transstores CMOS.
Soluo: A porta NAND deve produzir uma sada a 0 somente quando todas as trs entradas
estiverem a 1. Assim, a rede de pull-down deve ter trs transstores nMOS em srie. Atravs da regra
de complemento da conduo, os pMOS deve estar em paralelo. Uma porta destas mostrada na
Figura 1.35; pode-se verificar a funo, observando que a tabela verdade est correta.

Exemplo 1.21 ESQUEMTICO DE UM NOR DE DUAS ENTRADAS


Desenhe um esquema para uma porta NOR de duas entradas usando transstores CMOS.
Soluo: A porta NOR deve produzir uma sada a 0 se qualquer entrada estiver a 1. Assim, a rede de
pull-down deve ter dois transstores nMOS em paralelo. Pela regra de complemento de conduo, os
pMOS devem estar em srie. Uma porta mostrada na Figura 1.36.
Figura 1.35 Esquemtico de uma
porta NAND de trs entradas
Exemplo 1.22 ESQUEMTICO DE UM AND DE DUAS ENTRADAS
Desenhe um esquema para uma porta AND de duas entradas usando transstores CMOS.

41
Captulo um Do Zero ao Um

Soluo: impossvel construir uma porta AND com uma nica porta CMOS. No entanto, a
construo de portas NAND e NOT fcil. Assim, a melhor maneira de construir uma porta AND
utilizando transstores CMOS a utilizao de um NAND seguido por um NOT, como mostrado na
Figura 1.37.

1.7.7. Portas de Transmisso


Por vezes, os projetistas acham conveniente utilizar um interruptor ideal que possam transmitir Figura 1.36 Esquemtico de uma
bem tanto o 0 como o 1. Lembre-se que os transstores nMOS so bons a transmitir o 0 e os pMOS porta NOR de duas entradas
so bons a transmitir o 1, ento a combinao paralela dos dois permite transmitir ambos os valores.
A Figura 1.38 mostra tal circuito, chamado de porta de transmisso ou porta de passagem. Os dois
lados do interruptor so chamados de A e B porque um interruptor bidirecional e no tem nenhum
lado de entrada ou sada preferida. Os sinais de controlo so chamados enable, EN e . Quando EN
= 0 e = 1, ambos os transstores esto desligados. Assim, a porta de transmisso est OFF ou Figura 1.37 Esquemtico de uma
descativada, ento A e B no esto ligados. Quando EN = 1 e = 0, a porta de transmisso est porta AND de duas entradas
ligada ou cativada, e qualquer valor lgico pode fluir entre A e B.
1.7.8. Lgica Pseudo-nMOS
Uma porta NOR CMOS de N-entradas usa N nMOS em paralelo e N transstores pMOS em srie.
Os transstores em srie so mais lentos do que os transstores em paralelo, assim como as
resistncias em srie tm maior resistncia do que resistores em paralelo. Alm disso, os pMOS so
mais lentos do que os transstores nMOS porque as lacunas no se podem mover em torno da
estrutura de silcio to rapidamente como os eltrons. Portanto, os transstores nMOS em paralelo Figura 1.38 Porta de transmisso
so rpidos e os transstores pMOS em srie so lentos, especialmente quando muitos esto em
srie.
A lgica pseudo-nMOS substitui a pilha lenta de transstores pMOS com um nico transstor pMOS
fraco que est sempre ON, como mostrado na Figura 1.39. Este transstor pMOS frequentemente
chamado de fraco pull-up. As dimenses fsicas do transstor pMOS so selecionadas de modo que o
transstor PMOS v puxar a sada Y a HIGH fracamente, isto , apenas se nenhum dos transstores
nMOS est em conduo. Mas, se algum transstor nMOS est em conduo, domina os pull-up fracos
e puxa Y para baixo o suficiente perto de GND para produzir um 0 lgico.
42
Captulo um Do Zero ao Um

A vantagem da lgica pseudo-nMOS que ela pode ser usada para construir portas NOR rpidas
com muitas entradas. Por exemplo, a Figura 1.40 mostra um NOR pseudo-nMOS de quatro-entrada.
As portas pseudo-nMOS so teis para certas matrizes de memria e lgica discutidas no Captulo 5.
A desvantagem que existe um curto-circuito entre VDD e GND quando a sada est a LOW; os
transstores fracos pMOS e nMOS esto ambos em conduo. O curto-circuito deixa passar energia
de forma contnua, de modo que a lgica pseudo-nMOS deve ser utilizada com moderao.
As portas pseudo-nMOS obtiveram o seu nome na dcada de 1970, quando os processos de
fabricao s tinham transstores nMOS. Um transstor fraco nMOS foi utilizado para puxar a sada a Figura 1.39 Peudo-nMOS genrico
HIGH porque os transstores PMOS no estavam disponveis.

1.8. CONSUMO DE ENERGIA


O consumo de energia a quantidade de energia utilizada por unidade de tempo. O consumo de
energia de grande importncia em sistemas digitais. A vida til da bateria dos sistemas portteis,
como telefones celulares e computadores portteis limitada pelo consumo de energia. A potncia
Figura 1.40 Porta NOR de quatro
tambm significativa para os sistemas que esto ligados, porque a eletricidade custa dinheiro e
entradas pseudo-nMOS
porque o sistema vai sobreaquecer se consumir muita energia.
Os sistemas digitais consumem energia dinmica e esttica. A energia dinmica utilizada para
carregar condensadores medida que os sinais mudam entre 0 e 1. A energia esttica utilizada
mesmo quando os sinais no mudem e o sistema estiver ocioso.
As portas lgicas e as ligaes que as conectam tm uma capacidade. A energia obtida a partir da
fonte de alimentao para carregar um condensador C tenso VDD CVDD2. Se a tenso no
condensador comuta frequncia f (ou seja, f vezes por segundo), o condensador carrega f/2 e
descarrega f/2 vezes por segundo. A descarga no retira energia da fonte de alimentao, de modo
que o consumo de energia dinmica
1
= 2 2 (1.4)

43
Captulo um Do Zero ao Um

Exemplo 1.23 CONSUMO DE ENERGIA


Um telefone celular tem uma bateria de 6 watt-hora (W-hr) e opera a 1,2 V. Suponha que, quando
ele est em uso, funciona a 300 MHz e a quantidade mdia de capacidade a comutar no chip num
dado tempo de 10 nF (10-8 Farads). Quando em uso, ele tambm transmite 3 W de potncia atravs
da sua antena. Quando o telefone no est em uso, a potncia dinmica cai para quase zero, porque
o processamento de sinal est desligado. Mas o telefone requer tambm a 40 mA de corrente de
repouso se ele est em uso ou no. Determinar a vida til da bateria do telefone (a) se ele no estiver
sendo usado, e (b) se ele est sendo usado continuamente.
Soluo: A potncia esttica Pesttica = (0,040 A) (1,2 V) = 48 mW. (A) Se o telefone no estiver sendo
usado, este o nico consumo de energia, de modo que a vida til da bateria (6 Whr) / (0,048 W) =
125 horas (cerca de 5 dias). (B) Se o telefone estiver sendo usado, a potncia dinmica P dinmica =
(0,5)(10-8 F)(1,2 V)2(3 108 Hz) = 2,16 W. Juntamente com a potncia esttica e de transmisso, a
potncia total ativa 2,16 W + 0,048 W + 3 W = 5,2 W, de modo que a vida til da bateria de 6 W-
hr / 5.2 W = 1.15 horas. Este exemplo simplifica a operao real de um telefone celular, mas ilustra as
ideias-chave de consumo de energia.

Os sistemas elctricos consomem alguma corrente, mesmo quando eles esto ociosos. Quando os
transstores esto ao corte, eles perdem uma pequena quantidade de corrente. Alguns circuitos, tais
como as portas pseudo-nMOS discutidas na Seco 1.7.8, tm um caminho de VDD para GND atravs
do qual a corrente flui continuamente. A corrente esttica total, o IDD, tambm chamada de corrente
de fuga ou a corrente de alimentao de repouso que flui entre VDD e GND. O consumo de energia
esttica proporcional a esta corrente esttica:
= (1.5)

44
Captulo um Do Zero ao Um

1.9. SUMRIO E ANTECIPAO


H 10 tipos de pessoas neste mundo: aqueles que podem contar em binrio e aqueles que no
podem.
Este Captulo introduziu princpios para a compreenso e concepo de sistemas complexos.
Embora o mundo real seja analgico, os projetistas digitais disciplinam-se para utilizar um
subconjunto discreto de possveis sinais. Em particular, variveis binrias tm apenas dois estados:
0 e 1, tambm chamados de FALSE e TRUE ou HIGH e LOW. As portas lgicas calculam uma sada
binria de uma ou mais entradas binrias. Algumas das portas lgicas comuns so:

NOT : TRUE quando a entrada FALSE


AND: TRUE quando todas as entradas so TRUE
OR: TRUE quando todas as entradas so TRUE
XOR : TRUE quando um nmero mpar de entradas TRUE
As portas lgicas so normalmente construdas a partir de transstores CMOS, que se comportam
como interruptores controlados eletricamente. Os transstores nMOS ficam em conduo quando a
gate est a 1. Os transstores pMOS ficam em conduo quando a gate est a 0.
Nos Captulos 2 ao 5 continuamos o estudo da lgica digital. O Captulo 2 aborda a lgica
combinatria, em que as sadas dependem apenas das entradas atuais. As portas lgicas introduzidas
j so exemplos de combinaes lgicas. O leitor vai aprender a projetar circuitos que envolvem
mltiplas portas para implementar uma relao entre as entradas e as sadas especificadas por uma
tabela verdade ou uma equao booleana. O Captulo 3 aborda a lgica sequencial, em que as sadas
dependem tanto do estado atual como passado das entradas. Os registros so elementos sequenciais
comuns que recordam a sua entrada anterior. As mquinas de estados finitos, construdas a partir
de registros e lgica combinatria, so uma maneira poderosa para construir sistemas complicados
de uma maneira sistemtica. Estudamos tambm o sincronismo de sistemas digitais para analisar o
quo rpido este pode operar. O Captulo 4 descreve as linguagens de descrio de hardware (HDL).
As HDL esto relacionadas com as linguagens de programao convencionais, mas so usadas para

45
Captulo um Do Zero ao Um

simular e construir hardware em vez de software. A maioria dos sistemas digitais de hoje projetada
com HDL. SystemVerilog e VHDL so as duas lnguas predominantes, e elas so cobertas em paralelo
neste livro. O Captulo 5 estuda outros blocos combinatrios e sequenciais de construo, tais como
somadores, multiplicadores e memrias.
O Captulo 6 aborda a arquitetura de computadores. Ele descreve o processador MIPS, um
microprocessador padro da indstria usado em electrnica de consumo, algumas estaes de
trabalho Silicon Graphics, e muitos sistemas de comunicaes, tais como televisores, hardware de
rede e ligaes sem fios. A arquitetura MIPS definida por seus registros e conjunto de instrues
assembly. O leitor vai aprender a escrever programas em linguagem assembly para o processador
MIPS de modo que possa comunicar com o processador na sua lngua nativa.
Os Captulos 7 e 8 estabelecem a ponte entre a lgica digital e a arquitetura de computadores. O
Captulo 7 investiga a microarquitetura, a organizao dos blocos de construo digitais, tais como
somadores e registradores, necessrios para construir um processador. Nesse Captulo, o leitor
aprende a construir o seu prprio processador MIPS. Na verdade, aprende trs microarquiteturas que
ilustram diferentes compromissos de desempenho e custo. O desempenho do processador tem
aumentado exponencialmente, exigindo cada vez sistemas de memria mais sofisticadas para
alimentar a procura insacivel por dados. O Captulo 8 investiga a arquitetura do sistema de memria
e tambm descreve como os computadores comunicam com dispositivos perifricos, como teclados
e impressoras.

46
Captulo um Do Zero ao Um

Exerccios
Exerccio 1.1 Explique num pargrafo, pelo menos, trs nveis de abstrao que so utilizados por:
(a) bilogos que estudam o funcionamento das clulas.
(b) qumicos que estudam a composio de matria.

Exerccio 1.2 Explique num pargrafo como as tcnicas de hierarquia, modularidade e regularidade
podem ser utilizadas por
(a) projetistas de automveis.
(b) empresas na gesto das suas operaes.

Exerccio 1.3 Ben Bitdiddle est a construir uma casa. Explique como pode ele usar os princpios de
hierarquia, modularidade e regularidade para economizar tempo e dinheiro durante construo.

Exerccio 1.4 Uma tenso analgica situa-se na gama 0-5 V. Se puder ser medida com uma preciso
de 50 mV, quantos bits de informaes transmite no mximo?

47
Captulo um Do Zero ao Um

Exerccio 1.5 A sala de aula tem um velho relgio na parede cujo ponteiro dos minutos se avariou.
(a) Se o leitor pode ler o ponteiro das horas para o valor mais prximo dos 15 minutos, quantos
bits de informao o relgio transmite sobre o tempo?
(b) Se o leitor sabe se antes ou depois do meio-dia, quantos bits de informao adicional sabe
sobre o tempo?

Exerccio 1.6 Os Babilnios desenvolveram o sistema de numerao sexagesimal (base 60) cerca
de 4000 anos atrs. Quantos bits de informao so transmitidos com um dgito sexagesimal? Como
se escreve o nmero 400010 em sexagesimal?

Exerccio 1.7 Quantos nmeros diferentes podem ser representados com 16 bits?

Exerccio 1.8 Qual o maior nmero binrio de 32 bits sem sinal?

Exerccio 1.9 qual o maior nmero binrio de 16 bits que pode ser representado com
(a) nmeros sem sinal?
(b) nmeros em complemento-2?
(c) nmeros de sinal/magnitude?

Exerccio 1.10 Qual o maior nmero binrio de 32 bits que pode ser representado com

48
Captulo um Do Zero ao Um

(a) nmeros sem sinal?


(b) nmeros em complemento-2?
(c) nmeros de sinal/magnitude?

Exerccio 1.11 Qual o menor nmero binrio de 16 bits (mais negativo) que pode ser representado
com
(a) nmeros sem sinal?
(B) nmeros em complemento-2?
(c) nmeros de sinal/magnitude?

Exerccio 1.12 Qual o menor nmero binrio de 32 bits (mais negativo) que pode ser representado
com
(a) nmeros sem sinal?
(B) nmeros em complemento-2?
(c) nmeros de sinal/magnitude?

Exerccio 1.13 Converta os seguintes nmeros binrios sem sinal para decimal. Apresente o seu
trabalho.
(a) 10102
(b) 1101102
(c) 111100002

49
Captulo um Do Zero ao Um

(d) 0001000101001112

Exerccio 1.14 Converta os seguintes nmeros binrios sem sinal para decimal. Apresente seu
trabalho.
(a) 11102
(b) 1001002
(c) 110101112
(d) 0111010101001002

Exerccio 1.15 Repita o Exerccio 1.13, mas converta em hexadecimal.

Exerccio 1.16 Repita o Exerccio 1.14, mas converta em hexadecimal.

Exerccio 1.17 Converta os seguintes nmeros hexadecimais para decimal. Mostre seu trabalho.
(a) A516
(b) 3B16
(c) FFFF16
(d) D000000016

Exerccio 1.18 Converta os seguintes nmeros hexadecimais para decimal. Mostre seu trabalho.

50
Captulo um Do Zero ao Um

(a) 4E16
(b) 7C16
(c) ED3A16
(d) 403FB00116

Exerccio 1.19 Repita o Exerccio 1.17, mas converta para binrio sem sinal.

Exerccio 1.20 Repita o Exerccio 1.18, mas converta para binrio sem sinal.

Exerccio 1.21 Converta os seguintes nmeros binrios em complemento-2 para decimal.


(a) 10102
(b) 1101102
(c) 011100002
(d) 100111112

Exerccio 1.22 Converta os seguintes nmeros binrios em complemento-2 para decimal.


(a) 11102
(b) 1000112
(c) 010011102
(d) 101101012

51
Captulo um Do Zero ao Um

Exerccio 1.23 Repita o Exerccio 1.21, assumindo que os nmeros binrios esto na forma de
sinal/magnitude, em vez de na representao em complemento-2.

Exerccio 1.24 Repita o Exerccio 1.22, assumindo que os nmeros binrios esto na forma de
sinal/magnitude, em vez de na representao em complemento-2.

Exerccio 1.25 Converta os seguintes nmeros decimais para binrio sem sinal.
(a) 4210
(b) 6310
(c) 22910
(d) 84510

Exerccio 1.26 Converta os seguintes nmeros decimais para binrio sem sinal.
(a) 1410
(b) 5210
(c) 33910
(d) 71110

Exerccio 1.27 Repita o Exerccio 1.25, mas converta para hexadecimal.

52
Captulo um Do Zero ao Um

Exerccio 1.28 Repita o Exerccio 1.26, mas converta para hexadecimal.

Exerccio 1.29 Converta os seguintes nmeros decimais para nmeros de 8-bits em complemento-2
ou indique se o nmero decimal ultrapassa o intervalo.
(a) 4210
(b) -6310
(c) 12410
(d) -12810
(e) 13310

Exerccio 1.30 Converta os seguintes nmeros decimais para nmeros de 8-bits em complemento-2
ou indique se o nmero decimal ultrapassa o intervalo.
(a) 2410
(b) -5910
(c) 12810
(d) -15010
(e) 12710

Exerccio 1.31 Repita o Exerccio 1.29, mas converta para nmeros de sinal/magnitude de 8 bits.

Exerccio 1.32 Repita o Exerccio 1.30, mas converta para nmeros de sinal/magnitude de 8 bits.

53
Captulo um Do Zero ao Um

Exerccio 1.33 Converta os dois nmeros seguintes de 4-bits para 8-bits em complento-2.
(a) 01012
(b) 10102

Exerccio 1.34 Converta os dois nmeros seguintes de 4-bits para 8-bits em complento-2.
(a) 01112
(b) 10012

Exerccio 1.35 Repita o Exerccio 1.33, se os nmeros no possurem sinal em vez de


complemento-2.

Exerccio 1.36 Repita o Exerccio 1.34 se os nmeros no possurem sinal em vez de


complemento-2.

Exerccio 1.37 A base 8 designada como octal. Converta cada um dos nmeros do Exerccio 1.25
para octal.

Exerccio 1.38 A base 8 referida como octal. Converta cada um dos nmeros de Exerccio 1.26
para octal.

54
Captulo um Do Zero ao Um

Exerccio 1.39 Converta cada um dos nmeros seguintes de octal para binrio, hexadecimal e
decimal.
(a) 428
(b) 638
(c) 2558
(d) 30478

Exerccio 1.40 Converta cada um dos seguintes nmeros de octal para binrio, hexadecimal e
decimal.
(a) 238
(b) 458
(c) 3718
(d) 25608

Exerccio 1.41 Quantos nmeros de 5-bit em complemento-2 so maiores do que 0? Quantos so


inferiores a 0? Como que as suas respostas seriam diferentes para nmeros sinal/magnitude?

Exerccio 1.42 Quantos nmeros de 7-bit em complemento-2 so maiores do que 0? Quantos so


inferiores a 0? Como que as suas respostas seriam diferentes para nmeros sinal/magnitude?

55
Captulo um Do Zero ao Um

Exerccio 1.43 Quantos bytes possui uma word de 32-bit? Quantas nibles possui essa word?

Exerccio 1.44 Quantos bytes possui uma word de 64-bits?

Exerccio 1.45 Um dado modem DSL, opera a 768 kbits/s. Quantos bytes pode ele receber num
1 minuto?

Exerccio 1.46 Uma porta USB 3.0 pode enviar dados a 5 Gbits/seg. Quantos bytes pode ela enviar
num 1 minuto?

Exerccio 1.47 Os fabricantes de discos rgidos usam o termo "megabyte" para significar 106 bytes
e "gigabyte" para significar 109 bytes. Quantos GB reais de msica que voc pode armazenar num
disco rgido de 50 GB?

Exerccio 1.48 Estime o valor de 231 sem usar uma calculadora.

Exerccio 1.49 A memria no microprocessador Pentium II organizada como uma matriz


retangular de bits com 28 linhas e 29 colunas. Estimar quantos bits possui sem usar uma calculadora.

Exerccio 1.50 Desenhe uma linha de nmeros anloga da Figura 1.11 para nmeros de 3-bits
sem sinal, em complemento-2, e sinal/magnitude.

56
Captulo um Do Zero ao Um

Exerccio 1.51 Desenhe uma linha de nmeros anloga da Figura 1.11 para nmeros de 2-bits sem
sinal, em complemento-2, e sinal/magnitude.

Exerccio 1.52 Execute as seguintes adies de nmeros binrios sem sinal. Indicar se a soma
transborda ou no num resultado de 4-bits.
(a) 10012 + 01002
(b) 11012 + 10112

Exerccio 1.53 Execute as seguintes adies de nmeros binrios no assinados. Indicar se a soma a
soma transborda ou no num resultado de 8-bits.
(a) 100110012 + 010001002
(b) 110100102 + 101101102

Exerccio 1.54 Repita o Exerccio 1.52, assumindo que os nmeros binrios esto na forma
complemento-2.

Exerccio 1.55 Repita o Exerccio 1.53, assumindo que os nmeros binrios esto na forma
complemento-2.

Exerccio 1.56 Converta os seguintes nmeros decimais para nmeros binrios em complemento-2
de 6-bits e adicione-os. Indique se a soma transborda ou no o resultado de 6-bits.

57
Captulo um Do Zero ao Um

(a) 1610 + 910


(b) 2710 + 3110
(c) -410 + 1910
(d) 310 + -3210
(e) -910 -1610
(f) -2710 + -3110

Exerccio 1.57 Repita o Exerccio 1.56 para os seguintes nmeros.


(a) 710 + 1310
(b) 1710 + 2510
(c) -2610 + 810
(d) 3110 + -1410
(e) -1910 + -2210
(f) -210 + -2910

Exerccio 1.58 Execute as seguintes adies de nmeros hexadecimais sem sinal. Indique se a soma
transborda ou no num resultado de 8-bits (dois dgitos hex).
(a) 716 + 916
(b) 1316 + 2816
(c) AB16 + 3E16

58
Captulo um Do Zero ao Um

(d) AD16 + 8F16

Exerccio 1.59 Execute as seguintes adies de nmeros hexadecimais sem sinal. Indique se a soma
transborda ou no um resultado de 8-bits (dois dgitos hex).
(A) 2216 + 816
(B) 7316 + 2C16
(C) 7F16 + 7 F16
(D) C216 + A416

Exerccio 1.60 Converta os seguintes nmeros decimais em nmeros binrios de 5-bits em


complemento-2 e subtraia-os. Indique se a diferena transborda ou no um resultado de 5-bits.
(a) 910 - 710
(b) 1210 - 1510
(c) -610 1110
(d) 410 - -810

Exerccio 1.61 Converta os seguintes nmeros decimais em nmeros binrios de 6-bits em


complemento-2 e subtraia-os. Indique se a diferena transborda ou no um resultado de 6-bits.
(a) 1810 -1210
(b) 3010 -910
(c) -2.810 -310

59
Captulo um Do Zero ao Um

(d) -1610 - 2110

Exerccio 1.62 Num sistema numrico binrio de N-bits com bias B, os nmeros positivos e
negativos so representados somando o seu valor ao valor de bias B. Por exemplo, para o nmero
de 5-bits com bias de 15, o nmero 0 representado como 01111, 1 como 10000, e assim por
diante. Os sistemas de nmeros com bias so por vezes usados em matemtica de vrgula
flutuante, que ser discutido no Captulo 5. Considere um sistema numrico binrio de 8-bit s
com bias de 12.710
(a) qual o valor decimal que o nmero binrio 100000102 representa?
(b) que nmero binrio representa o valor 0?
(c) qual a representao do valor do nmero mais negativo?
(d) qual a representao do valor do nmero mais positivo?

Exerccio 1.63 Desenhe uma linha numrica anloga da Figura 1.11 para nmeros de 3-bit
com bias de 3 (ver Exerccio 1.62 para uma definio de nmeros com bias).

Exerccio 1.64 Num sistema de codificao binria decimal (BCD), 4 bits so utilizados para
representar um dgito decimal de 0 a 9. Por exemplo, 3710 escrito como 00110111 BCD.
(a) escreva 28910 em BCD
(b) converta 100101010001 BCD para decimal
(c) converta 01101001BCD para binrio
(d) explique porque o BCD pode ser uma maneira til para representar nmeros

60
Captulo um Do Zero ao Um

Exerccio 1.65 responda s seguintes questes relacionadas com os sistemas BCD (ver Exerccio
1.64 para a definio da BCD),
(a) escreva 37110 em BCD
(b) converta 000110000111BCD para decimal
(c) converta 10010101 BCD para binrio
(d) Explique as desvantagens do BCD quando comparado com representaes binrias de
nmeros

Exerccio 1.66 Um disco voador despenhou-se num campo de milho no Nebraska. O FBI
investiga os destroos e encontra um manual de engenharia contendo uma equao no sistema
numrico Marte: 325 + 42 = 411. Se esta equao est correta, quantos dedos o leitor esperaria
que os marcianos tenham?

Exerccio 1.67 Ben Bitdiddle e Alyssa P. Hacker esto tendo uma discusso. Ben diz: "Todos os
inteiros maiores que zero exatamente divisveis por seis tm exatamente dois 1s na sua
representao binria." Alyssa discorda. Ela diz: "No, mas todos esses nmeros tm um nmero
par de 1s na sua representao." Voc concorda com o Ben ou com a Alyssa ou com ambos ou com
nenhum? Explique.

Exerccio 1.68 Ben Bitdiddle e Alyssa P. Hacker esto a ter outra discusso. Ben diz: "Eu posso
obter o complemento-2 de um nmero subtraindo 1 e, em seguida, invertendo todos os bits do
resultado." Alyssa diz: "No, eu posso fazer isso, examinando cada bit do nmero, comeando com

61
Captulo um Do Zero ao Um

o menos significativo. Quando o primeiro 1 encontrado, inverter cada bit subsequente. "Voc
concorda com Ben ou com a Alyssa ou com ambos ou com nenhum? Explique.

Exerccio 1.69 Escreva um programa na sua linguagem favorita (por exemplo, C, Java, Perl) para
converter nmeros de binrio para decimal. O utilizador deve digitar um nmero binrio sem sinal.
O programa deve imprimir o equivalente decimal.

Exerccio 1.70 Repita o Exerccio 1.69, mas que converta de uma base arbitrria b1 para outra base
b2, conforme especificado pelo utilizador. Aceite bases at 16, usando as letras do alfabeto para
dgitos superiores a 9. O utilizador deve introduzir b1, b2, e seguido o nmero a converter na base b1.
O programa deve imprimir o nmero equivalente na base b2.

Exerccio 1.71 Desenhe o smbolo, a equao booleana e tabela verdade para


(a) uma porta OR de trs entradas
(b) uma porta OR exclusivo (XOR) de trs entradas porto
(c) uma porta de quatro entradas XNOR

Exerccio 1.72 Desenhe o smbolo, a equao booleana e tabela verdade para


(a) uma porta OR de quatro entradas
(b) uma porta XNOR de trs entradas
(c) uma porta NAND de cinco entradas

62
Captulo um Do Zero ao Um

Exerccio 1.73 Uma porta de maioria produz uma sada TRUE se e somente se mais de metade
de suas entradas so TRUE. Produza uma tabela verdade para a porta maioria de trs entradas
mostrado na Figura 1.41.

Figura 1.41 Porta maioria de trs entradas

Exerccio 1.74 A porta AND-OR (AO) de trs entradas mostrado na Figura 1.42 produz uma sada
TRUE se ambas A e B so TRUE, ou se C TRUE. Produza uma tabela verdade para esta porta.

Figura 1.42 Porta AND-OR de trs entradas

Exerccio 1.75 A porta OR-AND invertida de trs entradas (AOI), mostrada na Figura 1.43, produz
uma sada FALSE se C verdadeiro e A ou B so TRUE. Caso contrrio, produz uma sada TRUE.
Produza uma tabela verdade para esta porta.

Figura 1.43 Porta AND-OR_NOT de trs entradas

63
Captulo um Do Zero ao Um

Exerccio 1.76 Existem 16 tabelas verdade diferentes para funes booleanas de duas variveis.
Liste cada uma destas tabelas verdade. D a cada uma um nome descritivo (tal como OR, NAND, e
assim por diante).

Exerccio 1.77 Quantas tabelas verdade diferentes existem para funes booleanas de N
variveis?

Exerccio 1.78 possvel atribuir nveis lgicos de modo que um dispositivo com as caractersticas
de transferncia apresentada na Figura 1.44 opere como um conversor? Se sim, quais so os nveis
HIGH e LOW de entrada e sada (VIL, VOL, VIH, e VOH) e as margens de rudo (NML e NMH)? Se no,
explique porque no.

Figura 1.44 Funo de transferncia DC

64
Captulo um Do Zero ao Um

Exerccio 1.79 Repita o Exerccio 1.78 para as caractersticas de transferncia mostradas na Figura
1.45.

Figura 1.45 Funo de transferncia DC

Exerccio 1.80 possvel atribuir nveis lgicos de modo que um dispositivo com as caractersticas
de transferncia apresentada na Figura 1.46 opere como um buffer? Se sim, quais so os nveis HIGH
e LOW de entrada e sada (VIL, VOL, VIH, e VOH) e as margens de rudo (NML e NMH)? Se no, explique
porque no.

65
Captulo um Do Zero ao Um

Figura 1.46 Funo de transferncia DC

Exerccio 1.81 Ben Bitdiddle inventou um circuito com as caractersticas de transferncia


mostrados na Figura 1.47 que ele gostaria de usar como buffer. Ser que vai funcionar? Porque sim
ou porque no? Ele gostaria de o anunciar como sendo compatvel com lgica LVCMOS e LVTTL. Pode
o buffer do Bem receber corretamente as entradas a partir dessas famlias lgicas? A sada pode fazer
o drive correto essas famlias lgicas? Explique.

Figura 1.47 Funo de transferncia DC

66
Captulo um Do Zero ao Um

Exerccio 1.82 Enquanto caminhava por um beco escuro, Ben Bitdiddle encontrou uma porta
de duas entradas cuja funo de transferncia mostrada na Figura 1.48. As entradas so A e B
e a sada Y.

Figura 1.48 Funo de transferncia DC

(a) que tipo de porta lgica ele encontrou?


(b) quais so os nveis lgicos aproximados de HIGH e LOW?

67
Captulo um Do Zero ao Um

Exerccio 1.83 Repita o Exerccio 1.82 para a Figura 1.49.

Figura 1.49 Funo de transferncia DC

Exerccio 1.83 Esboce um circuito a nvel do transstor para as seguintes portas CMOS. Use
um nmero mnimo de transstores.
(a) porta NAND de quatro entradas
(b) porta OR-AND-NOT de trs entradas (ver Exerccio 1.75)
(c) porta NAND-OR de trs entradas (ver Exerccio 1.74)

Exerccio 1.84 Esboce um circuito a nvel do transstor para as seguintes portas CMOS. Use um
nmero mnimo de transstores.
(a) porta NOR de trs
(b) porta AND de trs entradas
(c) porta OR de duas entradas
68
Captulo um Do Zero ao Um

Exerccio 1.85 Uma porta minoritria produz uma sada TRUE se, e somente se, menos da metade
de suas entradas so TRUE. Caso contrrio, produz uma sada FALSE. Esboce um circuito a nvel de
transstor para uma porta CMOS minoritria de trs entradas. Use um nmero mnimo de transstores.

Exerccio 1.86 Escreva uma tabela verdade para a funo desempenhada pela porta da Figura 1.50.
A tabela verdade deve ter duas entradas, A e B. Qual o nome desta funo?

Figura 1.50 Esquema mistrio

Exerccio 1.87 Escreva uma tabela verdade para a funo desempenhada pela porta da Figura 1.51.
A tabela verdade deve ter trs entradas, A, B, e C.

Figura 1.51 Esquema mistrio

69
Captulo um Do Zero ao Um

Exerccio 1.88 Implemente as seguintes portas lgicas de trs entradas usando apenas portas
lgicas pseudo-nMOS. Estas portas recebem trs entradas, A, B e C. Utilize um nmero mnimo
de transstores.
(A) porta NOR de trs entradas
(B) porta NAND de trs entradas
(C) porta AND de trs entradas

Exerccio 1.89 A lgica Resistor-Transstor (RTL) usa transstores nMOS para puxar a sada da
porta a LOW e uma resistncia fraca para puxar a sada a HIGH quando nenhum dos caminhos
para a terra est cativo. A porta NOT construda utilizando um RTL mostrado na Figura 1.52.
Esboce uma porta NOR RTL de trs entradas. Use um nmero mnimo de transstores.

Figura 1.52 Porta RTL NOT

70
Captulo um Do Zero ao Um

Questes de Entrevista
Estas perguntas foram feitas em entrevistas para trabalhos de projeto digital.

Pergunta 1.1 Desenhe um circuito a nvel do transstor para uma porta NOR CMOS de quatro
entradas.

Pergunta 1.2 O rei recebe 64 moedas de ouro em impostos, mas tem razes para acreditar que
uma falsa. Ele convoca-o para identificar a moeda falsa. O leitor tem uma balana que pode conter
moedas de cada lado. Quantas vezes o leitor precisa usar a balana para encontrar a moeda falsa mais
leve?

Pergunta 1.3 O professor, o assistente, o aluno de projeto digital, e o calouro precisam atravessar
uma ponte frgil numa noite escura. A ponte to instvel que apenas duas pessoas podem
atravessar de uma vez. Eles tm apenas uma lanterna entre eles e a extenso muito longa para
lanar a lanterna, ento algum deve lev-lo de volta para as outras pessoas. O caloiro pode
atravessar a ponte em 1 minuto. O estudante de projeto digital pode atravessar a ponte em 2 minutos.
O assistente pode atravessar a ponte em 5 minutos. O professor que sempre se distrai e leva 10
minutos para atravessar a ponte. Qual o tempo mais rpido para fazer chegar todos ao outro lado
da ponte?

71
Captulo um Do Zero ao Um

72
Captulo dois Projeto de Lgica Combinatria

2. Projeto de Lgica Combinatria


2.1. INTRODUO
Na eletrnica digital, um circuito uma rede que processa variveis de valores discretos. Um circuito pode
ser visto como uma caixa preta, mostrada na Figura 2.1, com
Um ou mais terminais de entrada de valor discreto
Um ou mais terminais de sada de valor discreto
Uma especificao funcional descrevendo a relao entre as entradas e sadas
Uma especificao temporal descrevendo o atraso entre as mudanas nas entradas e as respostas
nas sadas.
Olhando dentro da caixa preta, os circuitos so compostos de ns e elementos. Um elemento por si s
um circuito com entradas, sadas e uma especificao. Um n um fio, cuja tenso transmite um valor varivel
discreto. Os ns so classificados como entrada, sada ou interno. As entradas recebem valores vindos do
mundo externo. As sadas entregam os valores para o mundo externo. Os fios que no so nem entradas nem
sadas so chamados de ns internos.

Figura 2.1 Circuito representado como uma caixa preta com entradas, sadas e especificaes

73
Captulo dois Projeto de Lgica Combinatria

Figura 2.2 Elementos e ns

A Figura 2.2 ilustra um circuito com trs elementos, E1, E2 e E3, e seis ns. Os ns A, B e C so
entradas. Y e Z so sadas. n1 um n interno entre E1 e E3.
Os circuitos digitais so classificados como combinatrios ou sequenciais. A sada de um circuito
combinatrio depende apenas do valor atual das entradas; por outras palavras, ele combina os valores
atuais das entradas para determinar o valor da sada. Por exemplo, uma porta lgica um circuito
combinatrio. A sada de um circuito sequencial depende tanto dos valores atuais de entrada quanto
dos anteriores; por outras palavras, ele depende da sequncia de entrada. Um circuito combinatrio
no possui memria, mas um circuito sequencial tem memria. Este Captulo foca os circuitos
combinatrios, e o Captulo 3 examina os circuitos sequenciais.
A especificao funcional de um circuito combinatrio expressa os valores de sada em termos dos
valores atuais das entradas. A especificao temporal de um circuito combinatrio consiste nos limites
inferiores e superiores do atraso da entrada para a sada. Iremos, inicialmente, nos concentrar nas
especificaes funcionais e, ento, retornar para as especificaes temporais mais tarde neste
Captulo.
A Figura 2.3 mostra um circuito combinatrio com duas entradas e uma sada. esquerda da figura
esto as entradas, A e B, e direita est a sada, Y. O smbolo dentro da caixa indica que o circuito
implementado utilizando apenas lgica combinatrio. Nesse exemplo, a funo F especificada como

74
Captulo dois Projeto de Lgica Combinatria

OR: Y = F(A,B) = A + B. Literalmente, podemos dizer que a sada Y uma funo de duas entradas, A e
B, nomeada Y = A OR B.
A Figura 2.4 mostra duas possveis implementaes para o circuito lgico combinatrio da Figura 2.3
Como veremos repetidamente ao longo deste livro, existem muitas implementaes possveis para
uma nica funo. O leitor quem escolhe qual utilizar, dados os blocos digitais sua disposio e as
suas limitaes de projeto. Essas limitaes incluem frequentemente rea, velocidade, potncia e Figura 2.3 Bloco de circuito
tempo de projeto. combinatrio
A Figura 2.5 mostra um circuito combinatrio com mltiplas sadas. Este circuito combinatrio
particular chamado de full adder e iremos v-lo novamente na Seo 5.2.1. As duas equaes
especificam a funo das sadas, S e Cout, em termos das entradas, A, B e Cin.
A fim de simplificar as ilustraes, muitas vezes utilizamos uma linha nica cortada por uma barra
para indicar um barramento, um pacote de vrios sinais. O nmero especifica quantos sinais existem
no barramento. Por exemplo, a Figura 2.6 (a) representa um bloco de lgica combinatria com trs
entradas e duas sadas. Se o nmero de bits no tiver importncia ou for bvio, a barra pode ser
mostrada sem o nmero. A Figura 2.6 (b) indica dois blocos de lgica combinatria com um nmero Figura 2.4 Duas implementaes OR
arbitrrio de sadas de um bloco servindo como entrada para o segundo bloco.
As regras da associao combinatria dizem-nos como podemos construir um grande circuito
combinatrio a partir de elementos combinatrios menores.
Um circuito dito combinatrio se ele for constitudo por elementos de circuitos interconectados
de tal modo que:
Todos os elementos do circuito so combinatrios. Figura 2.5 Circuito combinatrio de
Todos os ns do circuito so tambm designados como uma entrada ou conectados a mltiplas sadas
exatamente um terminal de sada de um elemento do circuito.
O circuito no contm caminhos cclicos: todos os caminhos atravs do circuito visitam cada
n do circuito no mximo uma vez.

75
Captulo dois Projeto de Lgica Combinatria

Exemplo 2.1 CIRCUITOS COMBINATRIOS


Quais dos circuitos na Figura 2.7 so circuitos combinatrios, de acordo com as regras da composio
combinatrio?
Soluo: O circuito (a) combinatrio. Sendo construdo a partir de dois elementos de circuitos
combinatrios (inversores I1 e I2). Tem trs ns: n1, n2 e n3. n1 a entrada para o circuito e para I1; n2 um
n interno, sada de I1 e entrada de I2; n3 a sada do circuito e de I2. (b) no um circuito combinatrio,
pois existe um caminho cclico: a sada da funo XOR realimenta uma das entradas. Consequentemente, um
Figura 2.6 Notao de barra para caminho cclico, partindo de n4, passa atravs da porta XOR em direo a n5, que retorna a n4. (c)
mltiplos sinais combinatrio. (d) no combinatrio, pois o n n6 est conectado aos terminais de sada tanto de I3 quanto
de I4. (e) combinatrio, ilustrando dois circuitos combinatrios conectados formando um circuito
combinatrio maior. (f) no obedece s regras da associao combinatria pois existe um caminho cclico
atravs dos dois elementos. Dependendo das funes dos elementos, ele pode ser ou no um circuito
combinatrio.

Figura 2.7 Circuitos de exemplo

76
Captulo dois Projeto de Lgica Combinatria

Grandes circuitos como microprocessadores podem ser muito complicados, ento utilizamos os
princpios do Captulo 1 para gerir a complexidade.
Visualizando o circuito como uma caixa preta com uma funo e interface bem definida uma
aplicao de abstrao e modularidade. Construindo o circuito principal atravs de circuitos menores
uma aplicao de hierarquia. As regras de composio combinatria so aplicaes de disciplina.
A especificao funcional de um circuito combinatrio usualmente expressa atravs de uma tabela
verdade ou equao Booleana. Nas prximas sees, ns descreveremos como derivar uma equao
Booleana a partir de qualquer tabela verdade, e como utilizar a lgebra Booleana e os mapas de Karnaugh
para simplificar equaes. Mostraremos como implementar estas equaes utilizando portas lgicas e
como analisar a velocidade destes circuitos.

2.2. EQUAES BOOLEANAS


Equaes Booleanas lidam com variveis que so TRUE ou FALSE, sendo, portanto, perfeitas para
descrever a lgica digital. Esta Seo define algumas terminologias comumente utilizadas em equaes
Booleanas, e mostra como escrever uma equao Booleana para qualquer funo lgica, baseada na sua
tabela verdade.
2.2.1. Terminologia
O complemento de uma varivel A seu inverso, . A varivel ou o seu complemento so chamados
, so literais. Chamamos A de forma verdadeira da varivel e A
literais. Por exemplo, , , de forma
complementar; forma verdadeira no significa que A tem valor TRUE, mas meramente que A no
possui uma barra sobre ele.

A funo lgica AND de uma ou mais variveis literais chamada de produto. , e so todos
produtos de uma funo de trs variveis. Um mintermo um produto envolvendo todas as entradas da
funo. um mintermo para uma funo de trs variveis A, B e C, mas no , pois no envolve
C. Similarmente, a unio OR de uma ou mais variveis literais chamada de soma. Um maxtermo a

77
Captulo dois Projeto de Lgica Combinatria

soma envolvendo todas as entradas da funo. + + um maxtermo para uma funo de trs variveis
A, B e C.
A ordem de operao importante na interpretao de equaes Booleanas. Y = A + BC significa Y =
(A OR B)AND C ou Y = A OR (B AND C)? Nas equaes Booleanas, a funo NOT tem a mxima
precedncia, seguida pela funo AND e depois OR. Da mesma forma que nas equaes comuns, os produtos
so realizados antes das somas. Portanto, a equao lida como Y = A OR (B AND C). A equao 2.1 mostra
outro exemplo da ordem de operaes.

+
= (()) + ((
)) (2.1)

2.2.2. Forma de Soma de Produtos


Uma tabela verdade com N entradas contm 2 linhas, uma para cada possvel valor da entrada. Cada
linha na tabela verdade associada a um mintermo que mostra o sinal lgico TRUE para aquela linha. A
Figura 2.8 mostra uma tabela verdade com duas entradas, A e B. Cada linha mostra o seu mintermo
Figura 2.8 Tabela verdade e correspondente. Por exemplo, o mintermo para a primeira linha , pois TRUE quando A = 0 e B = 0.
mintermos Os mintermos so numerados partindo de 0; a linha de cima corresponde ao mintermo 0, 0 , a prxima
linha corresponde ao mintermo 1, 1 , e assim por diante.
Podemos escrever uma equao Booleana para qualquer tabela verdade somando cada um dos
mintermos para o qual a sada Y possui nvel lgico TRUE. Por exemplo, na Figura 2.8, existe apenas uma
linha (ou mintermo) para o qual a sada Y verdadeira (circulado em azul). Portanto, = . A Figura 2.9
mostra uma tabela verdade com mais de uma linha para as quais a sada TRUE. A soma de cada mintermo
circulado resulta em = + .
Esta denominada a forma cannica soma de produtos de uma funo pois a sada igual soma (OR)
dos produtos (AND formando mintermos). Apesar de existirem muitas maneiras de se escrever a mesma
Figura 2.9 Tabela verdade com funo, tal como = + , iremos classificar os mintermos na mesma ordem pela qual aparecem na
vrios mintermos TRUE tabela verdade, de tal modo que sempre escreveremos a mesma expresso Booleana para uma mesma
tabela verdade.

78
Captulo dois Projeto de Lgica Combinatria

A forma de soma de produtos cannicos pode tambm ser escrita na notao sigma, utilizando-se o
smbolo de somatrios, . Com essa notao, a funo da Figura 2.9 pode ser reescrita como:

Forma Cannica apenas uma palavra


(, ) = (1 , 3 ) ou chique para denominar forma padro. O
leitor pode utilizar esse termo para
(2.2)
impressionar seus amigos e para
(, ) = (1,3) amedrontar seus inimigos!

Exemplo 2.2 FORMA DE SOMA DE PRODUTOS


Ben Bitdiddle est fazendo um piquenique. Ele no ir aproveitar se chover ou se houver formigas.
Projete um circuito que ir ter sada TRUE apenas se Ben aproveitar o piquenique.
Soluo: Primeiro, defina as entradas e as sadas. As entradas so A e R, que indicam se existem formigas
e se est chovendo, respectivamente. A ser TRUE se houver formigas e FALSE se no houver. Da mesma
forma, R TRUE se chover, e FALSE se o sol sorrir sobre Ben. A sada E o aproveitamento do piquenique
por Ben. E TRUE se Ben aproveitar o piquenique e FALSE se ele no aproveitar. A Figura 2.10 mostra a
tabela verdade para a experincia de Ben no piquenique.

Utilizando a forma de soma de produtos cannicos, escrevemos a equao como: = ou =


(0). Podemos construir a equao utilizando dois inversores e a porta AND de duas entradas mostrada
na Figura 2.11 (a). O leitor pode reparar que essa tabela verdade a da funo NOR mostrada na Seo
1.5.5: = NOR =
+ . A Figura 2.11 (b) mostra a implementao da funo NOR. Na Seo 2.3,
mostraremos que essas duas equaes, e
+ , so equivalentes. Figura 2.10 Tabela verdade de Ben

79
Captulo dois Projeto de Lgica Combinatria

A forma de soma de produtos d uma equao Booleana para qualquer tabela verdade com qualquer nmero
de variveis. A Figura 2.12 mostra uma tabela verdade com trs entradas de valores aleatrios. A forma de soma
de produtos dessa funo lgica :

= + + ou
(2.3)
= (0,4,5)
Infelizmente, a forma de soma de produtos no gera necessariamente uma equao simples. Na Seo 2.3
mostraremos como escrever a mesma funo utilizando-se termos menores.
2.2.3. Forma de Produto de Somas
Um modo alternativo de expressar funes Booleanas a forma cannica de produto de somas. Cada linha da
tabela verdade corresponde ao maxtermo que FALSE para aquela linha. Por exemplo, o maxtermo da primeira
Figura 2.11 Circuito de Ben linha de uma tabela verdade de duas entradas (A+B), pois (A+B) FALSE quando A=0, B=0. Podemos escrever
uma equao Booleana para qualquer circuito diretamente da sua tabela verdade como uma funo AND de cada
um dos maxtermos para o qual a sada FALSE. A forma cannica do produto de somas pode tambm ser escrita
na notao pi, utilizando-se o smbolo matemtico para produto, .

Exemplo 2.3 FORMA DE PRODUTO DE SOMAS


Escreva uma equao na forma de produto de somas para a tabela verdade na Figura 2.13.
Soluo: A tabela verdade possui duas linhas nas quais a sada FALSE. Portanto, a funo pode ser escrita na
forma de produto de somas como = ( + ) ( + ) ou, utilizando a notao pi, = (0 , 2 ) ou ainda =
(0,2). O primeiro maxtermo, ( + ), garante que Y = 0 para A = 0, B = 0, pois qualquer valor AND 0 igual a 0.
Figura 2.12 Tabela verdade aleatria Da mesma forma, o segundo maxtermo, ( + ), garante que Y = 0 para A = 1, B = 0. A Figura 2.13 a mesma
de trs entradas tabela verdade da Figura 2.9, mostrando que a mesma funo pode ser escrita em mais do que uma forma.

80
Captulo dois Projeto de Lgica Combinatria

De forma similar, a equao Booleana para o piquenique do Ben (Figura 2.10) pode ser escrita na
forma de produto de somas apenas circulando-se as trs linhas com 0s, obtendo-se =
( + )( + ) ( + ) ou = (1,2,3). Essa forma mais feia do que a equao na forma de soma
de produtos, = , mas as duas equaes so logicamente equivalentes.
A soma de produtos produz uma equao mais curta quando a sada TRUE em apenas algumas
linhas de uma tabela verdade; o produto das somas mais simples quando a sada FALSE em apenas
algumas linhas de uma tabela verdade.
Figura 2.13 Tabela verdade com
2.3. LGEBRA BOOLEANA vrios maxtermos FALSE

Na Seo anterior, aprendemos como escrever uma expresso Booleana a partir de uma tabela
verdade. No entanto, esta expresso no necessariamente leva ao conjunto mais simples de portas
lgicas. Do mesmo modo que o leitor pode utilizar a lgebra para simplificar equaes matemticas,
tambm pode utilizar a lgebra Booleana para simplificar equaes Booleanas. As regras da lgebra
Booleana so muito parecidas com as da lgebra comum, em alguns casos at mais simples, pois as
variveis possuem apenas dois valores possveis: 0 ou 1.
A lgebra Booleana baseada num conjunto de axiomas que assumiremos estarem corretos.
Axiomas no so provados, no mesmo sentido em que uma definio no pode ser provada. Com base
nesses axiomas, provamos todos os teoremas da lgebra Booleana.

81
Captulo dois Projeto de Lgica Combinatria

Tabela 2.1 Axiomas da lgebra Booleana

Estes teoremas tm grande significncia no sentido prtico, pois eles nos ensinam a como
simplificar a lgica para produzir circuitos menores e mais baratos.
Os axiomas e teoremas da lgebra Booleana obedecem ao sentido da dualidade. Se os smbolos
Figura 2.14 Teorema da Identidade 0 e 1 e os operadores (AND) e + (OR) so inter-relacionados, a declarao ainda ser correta.
em hardware: (a) T1, (b) T1 Utilizamos o smbolo () para denotar o dual de uma declarao.
2.3.1. Axiomas
A Tabela 2.1 mostra os axiomas da lgebra Booleana. Estes cinco axiomas e seus duais definem
as variveis Booleanas e os significados de NOT, AND e OR. O axioma A1 declara que uma varivel
Booleana 0 se ela no for 1. O axioma dual A1 declara que a varivel 1 se ela no for 0. Juntos,
A1 e A1 dizem que estamos a trabalhar num campo binrio ou Booleano de zeros e uns. Os
axiomas A2 e A2 definem a operao NOT. Os axiomas A3 at A5 definem AND; seus duais, A3 a
Figura 2.15 Teorema do elemento A5, definem OR.
nulo em hardware: (a) T2, (b) T2

82
Captulo dois Projeto de Lgica Combinatria

Tabela 2.2 Teoremas Booleanos de uma varivel

Figura 2.16 Teorema da


Idempotncia em hardware: (a) T3,
(b) T3

2.3.2. Teoremas de uma Varivel


Os teoremas T1 a T5 na Tabela 2.2 descrevem como simplificar equaes envolvendo uma varivel.
O teorema da identidade, T1, declara que para qualquer varivel Booleana B, B AND 1 = B. O seu
dual declara que B OR 0 = B. Em hardware, como mostrado na Figura 2.14, T1 significa que se uma das
Figura 2.17 Teorema da involuo:
duas entradas de uma porta AND sempre 1, podemos remover a porta AND e substitu-la por um fio
T4
conectado a varivel B. Da mesma forma, T1 significa que se uma das duas entradas de uma porta OR
sempre 0, podemos substituir a porta OR por um fio conectado B. Em geral, portas lgicas custam
dinheiro, potncia e atraso, ento, substituir uma porta por um fio tem os seus benefcios.
O teorema do elemento nulo, T2, diz que B AND 0 sempre igual a 0. Portanto, 0 chamado de
elemento nulo para a operao AND, pois ele sempre anula o efeito de qualquer outra entrada. Seu
dual declara que B OR 1 sempre igual a 1. Portanto, 1 o elemento nulo para a operao OR. Em
hardware, como mostrado na Figura 2.15, se uma entrada de uma porta AND 0, podemos substituir
a porta AND por um fio com nvel logico LOW (0). Da mesma forma, se uma das entradas de um OR for
1, podemos substituir a porta OR por um fio conectado ao nvel lgico HIGH (1).
A idempotncia, T3, diz que uma varivel AND ela prpria igual a ela. Da mesma forma, uma
varivel OR ela prpria igual a ela mesma. O teorema recebe este nome a partir do latim: idem (igual) Figura 2.18 Teorema do
e potent (potncia). A operao retorna a mesma coisa que recebe. A Figura 2.16 mostra que este complemento em hardware: (a) T5,
(b) T5
teorema novamente permite a substituio de uma porta por um fio.
83
Captulo dois Projeto de Lgica Combinatria

A involuo, T4, um modo rebuscado de dizer que complementar uma varivel duas vezes resulta na
varivel original. Na eletrnica digital, dois errados resultam num certo. Duas portas inversoras em srie
logicamente cancelam uma outra e so logicamente equivalentes a um fio, como mostrado na Figura
2.17. O dual de T4 ele prprio.
O teorema do complemento, T5 (Figura 2.18), declara que uma varivel AND e o seu complemento 0
(pois uma delas precisa ser 0). Por dualidade, uma varivel OR e o seu complemento 1 (porque uma delas
precisa ser 1).
O teorema do elemento nulo leva a
expresses estranhas que so verdade. Isso 2.3.3. Teoremas com muitas Variveis
particularmente perigoso quando utilizado Os teoremas do T6 ao T12 na Tabela 2.3 descrevem como simplificar equaes envolvendo mais do que
por pessoas que enviam anncios: O LEITOR uma varivel Booleana.
GANHAR UM MILHO DE DLARES ou ns
lhe enviaremos uma escova de dentes pelo A comutatividade e associatividade, T6 e T7, trabalham do mesmo modo que na lgebra tradicional.
correio. (O leitor provavelmente receber Por comutatividade, a ordem de entrada para uma funo AND ou OR no afeta o valor da sada. Por
uma escova de dentes. associatividade, os agrupamentos especficos das entradas no afetam os valores da sada.
O teorema da distributividade, T8, o mesmo da lgebra tradicional, mas o seu dual, T8, no . Atravs
de T8, AND se distribui por cima de OR, e por T8, OR se distribui por cima de AND. Na lgebra tradicional,
a multiplicao se distribui antes da adio mas a adio no se distribui por cima da multiplicao, de
modo que (B + C). (B + D) B + (C. D).
Os teoremas T9 a T11 nos permitem eliminar variveis redundantes. Pensando um pouco, o leitor ser
capaz de se convencer que estes teoremas esto corretos.
O Teorema de De Morgan, T12, uma ferramenta particularmente poderosa no projeto de sistemas
digitais. O teorema mostra que o complemento do produto de todos os termos igual ao produto do

84
Captulo dois Projeto de Lgica Combinatria

complemento de cada termo. Da mesma forma, o complemento da soma de todos os termos igual ao
produto dos complementos de cada termo.

Tabela 2.3 Teoremas Booleanos para muitas variveis

Augustus De Morgan, morte: 1871.


Matemtico Britnico, nascido na
ndia. Cego de um olho. Seu pai
morreu quando ele tinha 10 anos.
Entrou no Trinity College, Cambridge,
De acordo com o teorema de De Morgan, uma porta NAND equivalente a uma porta OR com suas com 16 anos, e foi contratado como
entradas invertidas. Similarmente, uma porta NOR equivalente a uma porta AND com suas entradas professor de matemtica da
invertidas. A Figura 2.19 mostra as portas equivalentes de De Morgan para portas NAND e NOR. Os dois recentemente fundada London
smbolos mostrados para cada funo so chamados duais. Eles so logicamente equivalentes e podem University com 22 anos. Escreveu
ser utilizados de modo intercambivel. largamente sobre muitos assuntos
O crculo, smbolo da inverso, chamado bolha ou bola. Intuitivamente, o leitor pode imaginar que, matemticos, incluindo lgica, lgebra
empurrando a bolha atravs da porta lgica faz com que ela saia pelo outro lado e mude o formato da e paradoxos. A cratera lunar de De
porta lgica de AND para OR ou vice-versa. Por exemplo, a porta NAND na Figura 2.19 consiste num corpo Morgan tem esse nome em
de porta AND com uma bolha na sada. Empurrar a bolha para a esquerda resulta num corpo de porta OR homenagem a ele. Ele props um
com bolhas nas entradas. As regras fundamentais para esses empurres de bolha so: enigma para o ano de seu nascimento:
Eu tinha x anos no ano x.

85
Captulo dois Projeto de Lgica Combinatria

Figura 2.19 Portas equivalentes de De Morgan

Empurrando bolhas para trs (partindo da sada) ou para frente (partindo da entrada) muda o corpo
da porta logica de AND para OR ou vice-versa.
Empurrar uma bolha da sada de volta para as entradas coloca as bolhas em todos os terminais de
entrada.
Empurrar bolhas em todos os terminais de entrada em direo a sada coloca uma bolha no terminal
Figura 2.20 Tabela verdade
de sada.
mostrando e
A Seo 2.5.2 utiliza os empurres de bolha no auxlio da anlise de circuitos.

Exemplo 2.4 DERIVANDO A FORMA DE PRODUTO DE SOMAS

A Figura 2.20 mostra a tabela verdade para uma funo Booleana e seu complemento . Usando
o Teorema de De Morgan, derive a forma cannica de produto de somas de para a forma de soma de
produtos de .
Figura 2.21 Tabela verdade
Soluo: a Figura 2.21 mostra os mintermos (circulados) contidos em . A forma cannica de soma de
mostrando os mintermos para
produtos de :

86
Captulo dois Projeto de Lgica Combinatria

= + (2.4)
Tomando o complemento de ambos os lados da equao e aplicando-se o Teorema de De Morgan
duas vezes, obtemos:

= =
+ = (
)( ) = ( + )( + ) (2.5)

2.3.4. A Verdade por Detrs de Tudo


Um leitor curioso provavelmente se perguntaria como provar que este teorema verdade. Na
lgebra Booleana, a prova de teoremas com um nmero finito de variveis fcil: apenas mostre que
o teorema vlido para todos os valores possveis para essas variveis. Este mtodo chamado
induo perfeita e pode ser realizado com uma tabela verdade.

Exemplo 2.5 PROVANDO O TEOREMA UTILIZANDO A INDUO PERFEITA


Prove o teorema T11 da Tabela 2.3.
Soluo: Verifique ambos os lados da equao para todas as oito combinaes de B, C e D. A tabela
verdade na Figura 2.22 ilustra essas combinaes. Como + + = para todos os casos,
o teorema provado.

Figura 2.22 Prova da tabela verdade


(T11)

87
Captulo dois Projeto de Lgica Combinatria

2.3.5. Simplificando Equaes


Os teoremas da lgebra Booleana nos ajudam a simplificar equaes Booleanas. Por exemplo,
considere a expresso na forma de soma de produtos a partir da tabela da Figura 2.9: = + .
Pelo teorema T10, essa equao simplificada para = . Isto pode parecer bvio quando se observa
a tabela verdade. Em geral, mltiplos passos podem ser necessrios para simplificar equaes mais
complexas.
O princpio bsico da simplificao de equaes na forma de soma de produtos combinar os termos
utilizando-se a relao + = , onde P pode ser qualquer implicante. At quando uma equao
pode ser simplificada? Definimos que uma equao na forma de soma de produtos deve ser minimizada
se forem utilizados o mnimo possvel de implicantes. Se existem muitas equaes com o mesmo nmero
de implicantes, o implicante mnimo ser aquele com o menor nmero de literais.
Um implicante chamado de implicante primo se ele no pode ser combinado com nenhum outro
implicante na equao, a fim de formar um novo implicante com um nmero menor de literais. Os
implicantes numa equao mnima devem ser todos implicantes primos. Por outro lado, eles podem ser
combinados para reduzir o nmero de literais.

Exemplo 2.6 MINIMIZAO DE EQUAES

Minimize a equao 2.3: + + .


Soluo: Comeamos com a equao original e ento aplicamos os teoremas Booleanos passo-a-passo,
como mostrado na Tabela 2.4.
Simplificamos completamente a equao at este ponto? Vamos olhar mais de perto.

Da equao original, os mintermos e diferem em apenas uma varivel, A. Ento


combinamos os mintermos para formar . No entanto, se olharmos para a equao original,
notaremos que os ltimos dois mintermos, e tambm diferem em apenas um literal ( e ).
Assim, usando o mesmo mtodo, podemos combinar esses dois mintermos para formar o mintermo
. Dizemos que os implicantes e compartilham o mintermo .

88
Captulo dois Projeto de Lgica Combinatria

Ento, estamos bloqueados e apenas podemos simplificar apenas um dos pares de mintermos, ou
podemos simplificar os dois? Utilizando o teorema da idempotncia, podemos duplicar os termos
quantas vezes quisermos: = + + + Utilizando este princpio, simplificamos a equao
completamente para os seus dois implicantes primos, e , como mostrado na Tabela 2.5.
Tabela 2.4 Minimizao de equaes

Tabela 2.5 Minimizao melhorada de equaes

89
Captulo dois Projeto de Lgica Combinatria

Apesar de ser um pouco contra intuitivo, expandir um implicante (por exemplo, transformando
em + ) pode ser til na minimizao de equaes. Fazendo isso, o leitor pode repetir um
dos mintermos expandidos para ser combinado com outro mintermo.
O leitor pode ter notado que simplificar totalmente uma equao Booleana com os teoremas da
lgebra Booleana pode levar a certa tentativa e erro. A Seo 2.7 descreve um procedimento metdico
chamado mapa de Karnaugh que torna o processo mais simples.
Porque simplificar uma equao Booleana se ela continua logicamente equivalente? A
simplificao reduz o nmero de portas lgicas usadas para implementar fisicamente a funo,
deixando-a menor, mais barata e, possivelmente, mais rpida. A prxima Seo descreve como
implementar equaes Booleanas utilizando portas lgicas.

2.4. DA LGICA S PORTAS


Um esquemtico um diagrama de um circuito digital, que mostra os elementos e as suas
conexes. Por exemplo, o esquemtico na Figura 2.23 mostra uma possvel implementao de
hardware para a nossa funo lgica favorita, a equao 2.3:

= + +
Atravs do esboo de esquemticos num estilo consistente, podemos deixamo-los mais fceis de
ler e de encontrar defeitos. Geralmente, obedecemos s seguintes orientaes:
Entradas do lado esquerdo, ou acima do esquemtico.
Sadas do lado direito, ou abaixo do esquemtico.
Quando possvel, o sentido de orientao das portas deve ser da esquerda para a direita.
Utilizar fios retos melhor do que fios com vrias esquinas (fios irregulares fazem o leitor
gastar muito esforo mental seguindo os fios ao invs de pensar sobre o que o circuito faz).
Fios sempre so conectados numa juno T.
Um ponto no cruzamento entre fios indica que eles esto conectados entre si.
Cruzamento de fios num ponto significa que eles no esto conectados.

90
Captulo dois Projeto de Lgica Combinatria


Figura 2.23 Esquemtico para = +
+

As ltimas trs orientaes so mostradas na Figura 2.24.


Qualquer equao Booleana na forma de soma de produtos pode ser desenhada como um
diagrama esquemtico de um modo sistemtico semelhante Figura 2.23. Primeiramente, desenhe
as colunas para as entradas. Ponha inversores em colunas adjacentes para disponibilizar as entradas
complementadas, se necessrio. Desenhe as linhas e as portas AND para cada um dos mintermos. Figura 2.24 Ligaes de fios
Em seguida, para cada sada, desenhe uma porta OR conectada aos mintermos relacionados com
aquela sada. Esse estilo chamado array lgico programvel, pois os inversores, portas AND e OR
so colocados num estilo sistemtico. Esse tipo de desenho melhor discutido na Seo 5.6.
A Figura 2.25 mostra uma implementao da equao simplificada que encontramos utilizando
lgebra Booleana no exemplo 2.6. Note que o circuito simplificado possui significativamente menos
hardware do que o circuito da Figura 2.23. Ele tambm mais rpido, pois utiliza portas com menos
entradas.

91
Captulo dois Projeto de Lgica Combinatria

Podemos diminuir o nmero de entradas ainda mais (ainda que de apenas um inversor) tirando
vantagem das portas inversoras. Observe que uma porta AND com entradas invertidas. A Figura
2.26 mostra um esquemtico utilizando essa otimizao a fim de se eliminar o inversor em C. Lembre-
se que, pelo teorema de De Morgan, a porta AND com entradas inversoras equivalente a uma porta
NOR. Dependendo da tecnologia de implementao, pode ser mais barato utilizar a menor
quantidade possvel de portas ou ento dar preferncia a certos tipos de portas em relao a outras.
Por exemplo, NANDs e NORs so preferveis ao invs de AND e OR na implementao tipo CMOS.
Muitos circuitos possuem mltiplas sadas, cada uma delas computando uma funo Booleana
separada. Podemos escrever uma tabela verdade separada para cada sada, mas conveniente
escrever todas as sadas numa nica tabela verdade e ento desenhar um esquemtico para todas
elas.

Exemplo 2.7: CIRCUITOS DE MLTIPLAS SADAS


Figura 2.25 Esquemtico para =

+
O reitor, o chefe de departamento, o professor assistente e o chefe do departamento de
dormitrios utilizam o auditrio de tempos em tempos. Infelizmente, eles ocasionalmente entram
em conflito devido a alguns desastres, como quando a reunio do reitor para recolha de fundos
ocorreu ao mesmo tempo que a festa dos dormitrios. Alyssa P. Hacker foi chamada para projetar
um sistema de reserva de sala.
O sistema possui quatro entradas, 3 , , 0 , e quatro sadas, 3 , , 0. Estes sinais tambm
podem ser escritos como 3:0 e 3:0 . Cada usurio confirma a sua entrada, solicitando o auditrio
para o dia seguinte. O sistema confirma no mximo uma sada, garantindo o auditrio para o usurio
de maior prioridade. O reitor, que est pagando por esse sistema, demanda maior prioridade (3). O
chefe de departamento, professor assistente e chefe do departamento de dormitrios possuem
prioridade decrescente.
Escreva uma tabela verdade e as equaes Booleanas para este sistema. Desenhe o circuito que
desenvolva a funo.
Figura 2.26 Esquemtico usando
menos portas lgicas

92
Captulo dois Projeto de Lgica Combinatria

Soluo: Esta funo chamada de circuito de prioridade de quatro entradas. Seu smbolo e sua
tabela verdade so mostrados na Figura 2.27.
Poderamos escrever cada sada na forma de soma de produtos e ento reduzir as equaes
utilizando lgebra Booleana. No entanto, as equaes simplificadas so claramente compreensveis
atravs da inspeo da descrio funcional (e tabela verdade) do sistema: 3 TRUE sempre que 3
for acionada, ento, 3 = 3 . 2 TRUE se 2 foi acionado e 3 no foi acionado, ento 2 = 3 2 .
1 TRUE se nenhuma das entradas de maior prioridade for acionada: 1 = 3
2 1 . E 0 TRUE
sempre que 0 for acionada, apenas. Portanto, 0 =
3
2 1 0 . O esquemtico mostrado na Figura
2.28. Um projetista experiente poderia implementar a lgica desse circuito por inspeo. Dada uma
especificao clara, simplesmente transformaria as palavras em equaes e as equaes em portas
lgicas.

Note que, se 3 acionado no circuito de prioridade, as sadas so aquelas, no interessando as


entradas (dont care). Ns utilizamos o smbolo X para descrever entradas que no interferem nos
valores das sadas. A Figura 2.29 mostra que a tabela verdade do circuito de prioridade de quatro
entradas se torna muito menor considerando-se os dont cares. A partir dessa tabela verdade, ns
podemos facilmente ler as equaes Boolenas na forma de soma de produtos apenas ignorando as
entradas com X. Dont cares podem tambm aparecer nas sadas das tabelas verdades, como veremos
na Seo 2.7.3.

2.5. LGICA COMBINATRIO MULTI-NVEL


A lgica na forma de soma de produtos chamada lgica de dois nveis, pois consiste em literais
conectados a um nvel de portas AND, conectados, por sua vez, a um nvel de portas OR. Os projetistas, Figura 2.27 Circuito de prioridade de
muitas vezes, constroem circuitos com mais do que dois nveis de portas lgicas. Estes circuitos prioridade
combinatrios multi-nveis podem utilizar menos hardware do que seus equivalentes em dois nveis.
O mtodo dos empurres de bolha especialmente til na anlise e projeto de circuitos multi-nvel.

93
Captulo dois Projeto de Lgica Combinatria

2.5.1. Reduo de Hardware


Algumas funes lgicas necessitam de uma enorme quantidade de hardware quando construdas
utilizando-se a lgica de dois nveis. Um exemplo notvel a funo XOR de mltiplas variveis. Por
exemplo, considere o projeto de uma porta XOR de trs entradas utilizando as tcnicas de dois nveis
que estudmos at agora.
Lembre-se que uma XOR de N entradas produz uma sada de valor TRUE quando um nmero par
de entradas TRUE. A Figura 2.30 mostra a tabela verdade para uma funo XOR de trs entradas,
com as linhas circuladas que produz Figura 2.30 em sadas TRUE. A partir da tabela verdade obtemos
a equao Booleana na forma de soma de produtos mostrada na equao 2.6. Infelizmente, no
Figura 2.28 Esquemtico do circuito possvel simplificar essa equao para um nmero menor de implicantes.

= + + + (2.6)
Por outro lado, = ( ) (prove o leitor, por induo perfeita, caso tenha
dvidas). Portanto, uma XOR de trs entradas pode ser construda a partir de portas XOR de duas
entradas em cascata, como mostrado na Figura 2.31.

Figura 2.29 Tabela verdade do


circuito de prioridade, com dont
care (X)

X um smbolo com mais do que um


significado, que significa "no importa" ou
"don't care" em tabelas verdade, e
"conteno" em simulao lgica (veja
Seo 2.6.1). Pense um pouco para no
confundir os significados. Alguns autores
utilizam D ou ? ao invs de "don't care"
para evitar ambiguidades.
Figura 2.30 XOR de trs entradas: (a) especificao funcional. (b) implementao lgica de dois
nveis
94
Captulo dois Projeto de Lgica Combinatria

De modo similar, uma XOR de oito entradas necessitaria de 128 portas AND de oito entradas e uma
porta OR de 128 entradas para uma implementao de soma de produtos em dois nveis. Uma opo
melhor a utilizao de uma rvore de portas XOR de duas entradas, como mostrado na Figura 2.32.
Selecionar a melhor implementao multi-nvel para uma funo lgica especfica no um
processo simples. Mais ainda, melhor possui vrios significados: menor quantidade de portas, mais
rpido, menor tempo de projeto, menor custo, menor consumo de potncia. No Captulo 5, o leitor
ver que o melhor circuito num tipo de tecnologia no necessariamente o melhor noutro tipo. Por Figura 2.31 XOR de trs entradas:
utilizando XOR de duas entradas
exemplo, temos utilizado portas AND e OR, mas na tecnologia CMOS, NAND e NOR so mais eficientes.
Com alguma experincia, o leitor ir descobrir que pode criar um bom projeto multi-nvel atravs da
inspeo de vrios circuitos. O leitor ir desenvolver um pouco essa experincia conforme for
estudando os exemplos de circuito atravs deste livro. Conforme for aprendendo, explore vrias
opes de projeto e faa um balano entre eles. As ferramentas CAD (Computer-aided design) esto
disponveis para a consulta num grande espao de possveis projetos multi-nvel, para que encontre
algum que melhor se adapte s limitaes, dado os blocos disponveis.
2.5.2. Empurres de Bolha
O leitor deve se lembrar, da Seo 1.7.6, que nos circuitos CMOS as portas NAND e NOR so
preferveis sobre AND e OR. Porm, analisar por inspeo uma equao de um circuito multi-nvel com
NAND e NOR pode ser bem complicado. A Figura 2.33 mostra um circuito multi-nvel o qual a funo
no imediatamente clara atravs da inspeo. O mtodo dos empurres de bolha um modo til Figura 2.32 XOR de oito entradas
de redesenhar estes circuitos, para que as bolhas se cancelem e a funo possa ser determinada mais utilizando sete XOR de duas entradas
facilmente. A partir dos princpios da Seo 2.3.3, as orientaes para os empurres de bolhas so os
seguintes:
Comece nas sadas do circuito e trabalhe em direo s entradas;
Empurre qualquer bolha na sada de volta para a entrada, assim o leitor poder ler a
equao em termos da sada (por exemplo, ) ao invs do complemento da sada ().

95
Captulo dois Projeto de Lgica Combinatria

Trabalhando no sentido contrrio, desenhe cada porta de tal forma que as bolhas se possam
cancelar. Se a porta atual tiver uma bolha na entrada, desenhe a porta precedente com uma bolha
na sada. Se a porta atual no tem uma bolha na entrada, desenhe a porta precedente sem
nenhuma bolha na sada.
A Figura 2.34 mostra como redesenhar a Figura 2.33 de acordo com as orientaes para os
Figura 2.33 Circuito multi-nvel empurres de bolha. Partindo da sada , a porta NAND possui uma bolha na sada que ns
utilizando NAND e NOR gostaramos de eliminar. Ns ento empurramos a bolha na sada de modo a formar uma porta OR
com entradas invertidas, mostrada na Figura 2.34 (a). Trabalhando para a esquerda, vemos que a
porta mais direita possui uma bolha na entrada que se cancela com a bolha de sada da porta
NAND do meio, no sendo necessrias mudanas nesse caso, como mostrado na Figura 2.34 (b). A
porta do meio no tem nenhuma bolha de entrada, por isso, transformamos a porta mais
esquerda para no ter nenhuma bolha de sada, como se mostra na Figura 2.34 (c). Agora todas as
bolhas no circuito se cancelam, exceto as entradas, de modo que a funo pode ser lida por
inspeo em termos de AND e OR de entradas normais ou complementadas: = + .

A fim de enfatizar esse ltimo ponto, a Figura 2.35 mostra um circuito logicamente equivalente
com aquele na Figura 2.34. As funes dos ns internos esto mostradas em azul. Como as bolhas
em srie se cancelam, ns podemos ignorar as bolhas na sada da porta central e numa das entradas
da porta mais direita a fim de produzir uma lgica equivalente ao circuito da Figura 2.35.

Exemplo 2.8 EMPURRES DE BOLHA PARA LGICA CMOS


Muitos projetistas pensam em termos de portas AND e OR, mas, supondo que o leitor gostaria
de implementar o circuito da Figura 2.36 utilizando lgica CMOS, que favorecem portas NAND e
NOR. Usando a tcnica dos empurres de bolha, converta o circuito para portas NAND, NOR e
inversoras.
Soluo: Uma soluo usando fora bruta seria apenas substituir cada porta AND por uma NAND e
Figura 2.34 Circuito utilizando um inversor, e cada porta OR, por uma NOR e um inversor, como mostrado na Figura 2.37. Isso
empurres de bolha requer oito portas. Note que o inversor desenhado com a bolha na sua frente, ao invs de atrs,
para enfatizar como a bolha pode ser cancelada com a porta inversora anterior.

96
Captulo dois Projeto de Lgica Combinatria

Para obter uma soluo melhor, observe que bolhas podem ser adicionadas sada de uma porta
e entrada da porta seguinte sem que haja mudana na funo, como mostrado na Figura 2.38 (a).
A porta AND final convertida numa NAND e uma inversora, como mostrado na Figura 2.38 (b). Esta
soluo requer apenas cinco portas.

Figura 2.35 Lgica equivalente do


circuito utilizando empurres de
bolha
Figura 2.37 Circuito pobre utilizando NAND e NOR

Figura 2.38 Circuito melhorado utilizando NAND e NOR

2.6. XS E ZS, OH MEU DEUS! Figura 2.36 Circuito utilizando AND e


OR
A lgebra Booleana limitada aos valores 0 e 1. No entanto, circuitos reais podem tambm
possuir valores ilegais e flutuantes, representados simbolicamente por X e Z.
2.6.1. Valor Ilegal: X
O smbolo X indica que o n do circuito tem um valor desconhecido ou ilegal. Isso normalmente
acontece quando tanto 0 quanto 1 esto sendo direcionados para o mesmo n ao mesmo tempo. A
Figura 2.39 mostra um caso onde o n recebe tanto nvel HIGH quanto LOW. Esta situao,
chamada conteno, considerada um erro e deve ser evitada. A tenso verdadeira num n pode
ser algo entre 0 e , dependendo da fora das portas que esto transmitindo os nveis HIGH e

97
Captulo dois Projeto de Lgica Combinatria

LOW. Essa regio considerada, quase sempre, uma zona proibida. A conteno pode requer uma
grande quantidade de potncia das portas em conflito, resultando em aquecimento do circuito e,
possivelmente, em danos.
Os valores X so, algumas vezes, utilizados por simuladores de circuito para indicar um valor no
inicializado. Por exemplo, se o leitor se esquecer de especificar o valor de uma entrada, o simulador
pode assumir que essa uma entrada X para prevenir problemas.
Figura 2.39 Circuito com conteno
Como mencionado na Seo 2.4, os projetistas de sistemas digitais tambm usam o smbolo X para
indicar valores dont care em tabelas verdade. Tenha certeza de que no est confundindo os dois
significados. Quando X aparece numa tabela verdade, ele indica que o valor da varivel presente na
tabela verdade no importante (tanto faz se 0 ou 1). Quando o X aparece num circuito, isso
significa que o n do circuito possui um valor desconhecido ou ilegal.
2.6.2. Valor Flutuante: Z
O smbolo Z indica que um n no est sendo alimentado nem por nvel HIGH nem LOW. O n
dito estar flutuante, em alta impedncia ou alta Z. Um equvoco tpico que um n flutuante ou no
alimentado o mesmo que um nvel lgico 0. Na realidade, um n flutuante pode ser 0, pode ser 1,
ou pode ser qualquer tenso entre esses dois nveis, dependendo da histria do sistema. Um n
flutuante nem sempre significa um erro no circuito, desde que outro elemento do circuito alimente
Figura 2.40 Buffer Tristate
o n com um nvel lgico vlido quando o valor desse n for relevante para a operao do circuito.
Um modo comum de se produzir um n flutuante esquecendo-se de alimentar uma entrada do
circuito, ou assumir que uma entrada no conectada o mesmo que uma entrada com nvel lgico
0. Esse erro pode fazer com que o circuito se comporte incorretamente, pois a entrada flutuante
muda aleatoriamente de 0 para 1. De fato, apenas tocar o circuito pode ser suficiente para disparar
a mudana, devido eletricidade esttica do corpo. Temos visto circuitos que operam corretamente
apenas enquanto o aluno mantm o dedo pressionado sobre o chip.
O buffer tristate, mostrado na Figura 2.40, possui trs possibilidades de estado de sada: HIGH (1),
LOW (0), e flutuante (Z). O buffer tristate possui uma entrada A, uma sada Y e um enable (ativao)

98
Captulo dois Projeto de Lgica Combinatria

E. Quando o enable TRUE, o buffer tristate se comporta como um simples buffer, transferindo o
valor da entrada para a sada. Quando o enable FALSE, a sada flutuante (Z).
O buffer tristate na Figura 2.40 possui um enable ativo a alto. Isto , quando o enable HIGH(1),
o buffer est ativado. A Figura 2.41mostra um buffer tristate com um enable ativo a baixo. Quando
o enable LOW (0), o buffer est ativado. Mostramos que o sinal se torna ativo a baixo colocando-
se uma bolha no seu fio de entrada. Frequentemente indicamos uma entrada ativa a baixo
colocando uma barra sobre o seu nome, , ou colocando as letras bou baraps o seu nome,
ou _.
Os buffers tristate so normalmente utilizados em barramentos que conectam mltiplos chips. Figura 2.41 Buffer Tristate com
Por exemplo, um microprocessador, um controlador de vdeo e um controlador Ethernet poderiam Enable ativo a baixo
todos precisar se comunicar com a memria do sistema num computador pessoal. Cada chip pode
se conectar com o barramento de memria compartilhado utilizando-se buffers tristate, como
mostrado na Figura 2.42. Somente a um chip, por vez, permitido ativar o seu sinal de ativao para
transmitir um valor para o barramento. Os outros chips devem produzir sadas flutuantes para que
no causem conteno com o chip a comunicar com a memria. Qualquer chip pode ler a
informao do barramento compartilhado a qualquer momento. Estes barramentos tristate j
foram comuns. No entanto, nos computadores modernos, com maiores velocidades so possveis
atravs de links ponto a ponto, nos quais os chips so conectados entre si diretamente, ao invs de
um barramento compartilhado.

2.7. MAPAS DE KARNAUGH


Aps trabalhar com muitas minimizaes de equaes Booleanas utilizando lgebra Booleana, o
leitor vai perceber que, se no tomar cuidado, s vezes, ir terminar com uma equao
completamente diferente, ao invs de uma equao simplificada. Os mapas de Karnaugh (K-maps)
so um mtodo grfico para a simplificao de equaes Booleanas. Eles foram inventados em 1953
por Maurice Karnaugh, um engenheiro de telecomunicaes da Bell Labs. Os K-maps funcionam Figura 2.42 Buffer Tristate
bem para problemas com menos do que quatro variveis. Mais importante ainda, do informaes conectando mltiplos chips
sobre a manipulao de equaes Booleanas.
99
Captulo dois Projeto de Lgica Combinatria

Recordamos que a lgica da minimizao envolve a combinao de termos. Dois termos contendo
um implicante e as formas real e complementar de alguma varivel so combinados para
Maurice Karnaugh, 1924-. Graduado
eliminar : + = . Os mapas de Karnaugh tornam estes termos combinveis fceis de ver,
como bacharel em fsica pela City College
colocando-os perto um do outro numa grade.
of New York em 1948 , recebeu seu Ph.D.
em fsica pela Yale em 1952. A Figura 2.43 mostra a tabela verdade e o K-map para uma funo de trs entradas. A linha de
Trabalhou na Bell Labs e na IBM de 1952 a cima do K-map d os trs valores possveis para as entradas A e B. A coluna da esquerda d as duas
1993 e como professor de cincia da possibilidades de valores para a entrada C. Cada quadrado no K-map corresponde a uma linha na
computao pela Polythecnic Unversity of tabela verdade, e contm o valor da sada naquela linha. Por exemplo, o quadrado do canto
New York de 1980 a 1999. superior esquerdo corresponde primeira linha da tabela verdade e indica que o valor de sada =
1 quando = 000. Assim como cada linha numa tabela verdade, cada quadrado no mapa de
Karnaugh representa um nico mintermo. A propsito de explicao, a Figura 2.43 (c) mostra os
mintermos correspondentes para cada quadrado no K-map.

Os cdigos de Gray foram patenteados


(Patente EUA 2.632.058) por Frank Gray,
um pesquisador da Bell Labs, em 1953.
Eles so especialmente teis em
codificadores mecnicos porque um
pequeno desalinhamento provoca um
erro em apenas um bit. Figura 2.43 Funo de trs entradas: (a) tabela verdade, (b) K-map, (c) K-map mostrando os
mintermos
Os cdigos Gray generalizam para
qualquer nmero de bits. Por exemplo, Cada quadrado, ou mintermo, difere do quadrado adjacente de uma mudana numa nica
uma sequncia de cdigo de Gray 3 bits : varivel. Isso significa que quadrados adjacentes compartilham todos os mesmos literais, exceto um,
000, 001, 011, 010,
o qual aparece em forma TRUE num quadrado e em forma complementar em outro. Por exemplo,
110, 111, 101, 100 os quadrados representando os mintermos e so adjacentes e diferem somente da
varivel C. O leitor pode ter notado que as combinaes e na linha de cima esto numa ordem
peculiar: 00,01,11,10. Essa ordem chamada de cdigo Gray. Ele difere da ordem binria comum

100
Captulo dois Projeto de Lgica Combinatria

(00,01,10,11) em que entradas adjacentes diferem apenas numa varivel. Por exemplo, 01:11 apenas Lewis Carroll representava um enigma
mudam para 1, enquanto 01:10 poderia mudar de 1 para 0 e de 0 para 1. Portanto, escrever as relacionado na Vanity Fair em 1879.
combinaes em ordem binria poderia no produzir a propriedade desejada de quadrados
adjacentes diferindo apenas de uma varivel. "As regras do quebra-cabea so
bastante simples. Duas palavras so
O K-map tambm envolve. Os quadrados logo direita so efetivamente adjacentes aos propostas, com o mesmo
quadrados logo esquerda, nos quais diferem em apenas uma varivel, . Por outras palavras, o leitor comprimento; e o enigma consiste em
poderia pegar o mapa e enrol-lo num cilindro, ento juntar os finais do cilindro em forma de donut, as vincular interpondo outras
e ainda assim garantir que quadrados adjacentes iriam diferir em apenas uma varivel. palavras, cada um dos quais deve
2.7.1. Pensamento Circular diferir da prxima palavra em apenas
No K-map da Figura 2.43, apenas dois mintermos so apresentados na equao, e , como uma letra. Isto quer dizer, uma carta
indicado pelos uns na coluna da esquerda. Lendo os mintermos a partir do mapa de Karnaugh pode ser alterada em uma das
exatamente equivalente a ler as equaes na forma de soma de produtos a partir da tabela verdade. palavras apresentadas, em seguida,
uma letra da palavra assim obtida, e
assim por diante, at chegar outra
palavra dada. "
Por exemplo, SHIP para DOCK:
SHIP, SLIP, SLOP,
SLOT, SOOT, LOOT,
LOOK, LOCK, DOCK.
Figura 2.44 Minimizao com mapa de Karnaugh
Pode o leitor encontrar uma sequncia
Como antes, podemos utilizar a lgebra Booleana para minimizar as equaes na forma de soma mais curta?
de produtos.

= + = ( + ) = (2.7)
Os mapas de Karnaugh ajudam a fazer essa simplificao graficamente circulando os 1 em
quadrados adjacentes, como mostrado na Figura 2.44. Para cada crculo, escrevemos o implicante
correspondente. Lembre-se, da Seo 2.2, que um implicante o produto de um ou mais literais.
Variveis cujas formas verdadeiras e complementares esto ambas no crculo so excludas do

101
Captulo dois Projeto de Lgica Combinatria

implicante. Nesse caso, a varivel tem tanto a sua forma verdadeira (1) quanto sua forma
complementar (0) no crculo, ento no a inclumos no implicante. Por outras palavras, Y TRUE
quando = = 0, independente de . Ento o implicante . O mapa de Karnaugh d a mesma
resposta que encontramos utilizando a lgebra Booleana.
2.7.2. Minimizao Lgica com Mapas de Karnaugh
Os mapas de Karnaugh fornecem num modo visual simples de minimizar a lgica. Simplesmente
circule todos os blocos retangulares com 1 no mapa, utilizando o menor nmero possvel de
crculos. Cada crculo deve ser o maior possvel. Ento tome os implicantes que foram circulados.
De modo mais formal, lembre-se que uma equao Booleana minimizada quando escrita
como uma soma do menor nmero possvel de implicantes principais. Cada crculo no mapa de
Figura 2.45 K-map para o exemplo Karnaugh representa um implicante. Os maiores crculos possveis so os implicantes principais.
2.9
Por exemplo, no mapa de Karnaugh da Figura 2.44, e so implicantes, mas no
implicantes principais. Apenas um implicante principal no mapa de Karnaugh. As regras para
se encontrar uma equao minimizada a partir de um K-map so as seguintes:
Utilize o menor nmero possvel de crculos necessrios para cobrir todos os 1;
Todos os quadrados dentro de cada crculo devem conter 1;
Cada crculo deve cobrir um bloco retangular que seja potncia de 2 isto , 1, 2, ou 4
quadrados em cada direo;
Cada crculo deve ser o maior possvel;
Um crculo pode dar as voltas ao redor das bordas do K-map;
Um 1 num K-map pode ser circulado mltiplas vezes, se isso permitir menos crculos serem
utilizados.

Figura 2.46 Soluo para o exemplo


2.9

102
Captulo dois Projeto de Lgica Combinatria

Exemplo 2.9 MINIMIZAO DE UMA FUNO DE TRS VARIVEIS UTILIZANDO UM MAPA DE KARNAUGH
Suponha que ns temos a funo = (, , ) com o mapa de Karnaugh mostrado na Figura
2.45. Minimize a equao utilizando o mapa de Karnaugh.

Soluo: Circule os 1 no K-map usando a menor quantidade possvel de crculos, como mostrado na
Figura 2.46. Cada crculo no mapa de Karnaugh representa um implicante principal, e a dimenso de
cada crculo uma potncia de 2 (2x1 e 2x2). Formamos o implicante principal para cada crculo
escrevendo as variveis que aparecem no crculo apenas em condio verdadeiro ou apenas na forma
complementada.

Por exemplo, no crculo 2x1, as formas verdadeira e complementar de B esto includas no crculo, Figura 2.47 cone para o display
ento no inclumos B no implicante principal. No entanto, apenas a forma verdadeira de () e a decodificador de sete segmentos
forma complementada de ( ) esto nesse crculo, ento inclumos essas variveis no implicante
principal . Similarmente, o crculo 2x2 cobre todos os quadrados onde = 0, ento o implicante
principal .

Note como o quadrado superior direito (mintermo) coberto duas vezes para tornar o crculo do
implicante principal o maior possvel. Como ns vimos nas tcnicas de lgebra Booleana, isso equivale
a compartilhar o mintermo para reduzir o tamanho dos implicantes. Note tambm como o crculo
cobrindo quatro quadrados d a volta pelos lados do mapa de Karnaugh.

Exemplo 2.10 DECODIFICADOR DE DISPLAY DE SETE SEGMENTOS

Um decodificador de display de sete segmentos toma um dado de entrada de 4 bits 3:0 e produz
sete sadas que controlam diodos emissores de luz que mostram um dgito de 0 a 9. As sete sadas so

103
Captulo dois Projeto de Lgica Combinatria

tambm chamadas de segmento a a g, ou , como definido na Figura 2.47. Os dgitos so


mostrados na Figura 2.48. Escreva uma tabela verdade para as sadas, e use os K-maps para encontrar
equaes Booleanas para as sadas e . Deve assumir que os valores ilegais de entrada (10-15)
produzem uma leitura em branco.
Soluo: A tabela verdade dada na Tabela 2.6. Por exemplo, uma entrada de 0000 deve ligar todos
os segmentos, exceto .

Cada uma das sete sadas uma funo independente de quatro variveis. O K-map para as sadas
e so mostrados na Figura 2.49. Lembre-se que quadrados adjacentes podem diferir em apenas
uma varivel, ento rotulamos as linhas e colunas na ordem do cdigo Gray: 00,01,11,10. Tenha o
cuidado de lembrar essa ordem quando inserir os valores das sadas nos quadrados.
Prximo passo, circular os implicantes principais. Utilize o menor nmero possvel de crculos
necessrios para cobrir todos os 1. Um crculo pode atravessar as bordas (vertical e horizontal), e
um 1pode ser circulado mais de uma vez. A Figura 2.50 mostra os implicantes principais e as
equaes Booleanas simplificadas.

Figura 2.48 Dgitos para o display decodificador de sete segmentos

Note que o conjunto mnimo de implicantes principais no nico. Por exemplo, a entrada 0000
no mapa de foi circulado tambm com a entrada 1000 para produzir o mintermo 2
1
0 . O

crculo poderia, alm disso, ter includo a entrada 0010, produzindo o mintermo 3 2 0 , como
mostrado com linhas pontilhadas na figura Figura 2.51.

104
Captulo dois Projeto de Lgica Combinatria

A Figura 2.52 ilustra um erro comum no qual um implicante no principal foi escolhido para cobrir
o 1 no canto superior esquerdo. O mintermo poderia ter sido combinado com qualquer um dos 1
adjacentes para formar um crculo maior, como foi feito nas duas figuras anteriores.

Figura 2.49 Mapas de Karnaugh para e

Figura 2.50 Mapa de Karnaugh soluo para o exemplo 2.10

105
Captulo dois Projeto de Lgica Combinatria

Figura 2.51 Mapa de Karnaugh alternativo para mostrando diferentes conjuntos de implicantes
principais

Tabela 2.6 Tabela verdade para o display decodificador de sete segmentos

106
Captulo dois Projeto de Lgica Combinatria

2.7.3. Dont Cares


Lembre-se que entradas dont care numa tabela verdade foram introduzidas na Seo 2.4 para
reduzir o nmero de linhas na tabela quando algumas variveis no afetam as sadas. Elas so
indicadas pelo smbolo X, que significa que a entrada pode ser tanto 0 quanto 1.
Dont cares tambm aparecem em sadas de tabelas verdade quando a sada no importante ou
a combinao de entrada correspondente impossvel de ocorrer. Tais sadas podem ser tratadas
tanto como 0 quanto 1 pelo projetista.
Num mapa de Karnaugh, os X permitem ainda mais simplificar a lgica. Eles podem ser circulados
se ajudarem a cobrir os 1 com crculos maiores ou em quantidade menor, mas eles no precisam
ser circulados se no forem teis.

Figura 2.52 Mapa de Karnaugh


Exemplo 2.11 DECODIFICADOR DE DISPLAY DE SETE SEGMENTOS COM DONT CARES alternativo para mostrando
implicantes incorretos
Repita o exemplo 2.10 considerando que no nos importamos com os valores das sadas para as
entradas ilegais dos valores de 10 a 15.
Soluo: O K-map mostrado na Figura 2.53 com as entradas X representando dont cares. Como os
dont cares podem ser 0 ou 1, circulamos um dont care se ele nos permitir cobrir os 1 com crculos
maiores ou com menos crculos. Dont cares circulados so tratados como 1, enquanto dont cares
no circulados so 0. Observe como um quadrado 2x2 vai atravs dos quatro cantos ser circulado
para o segmento . O uso dos dont cares simplifica substancialmente a lgica.

2.7.4. A grande Imagem


A lgebra Booleana e os mapas de Karnaugh so dois mtodos de simplificao lgica. Em ltima
anlise, o objetivo encontrar um mtodo de baixo custo para a implementao de uma determinada
funo lgica.

107
Captulo dois Projeto de Lgica Combinatria

Nas modernas prticas de engenharia, programas de computador chamados sintetizadores lgicos


produzem circuitos simplificados a partir de uma descrio de uma funo lgica, como ser visto no
Captulo 4. Para grandes problemas, os sintetizadores lgicos so muito mais eficientes que os
humanos. Para pequenos problemas, um humano com um pouco de experincia pode encontrar uma
boa soluo por inspeo. Nenhum dos autores nunca utilizou um mapa de Karnaugh na vida real
para resolver um problema prtico. Mas o conhecimento adquirido a partir dos princpios
fundamentais dos mapas de Karnaugh valioso. E os mapas de Karnaugh muitas vezes aparecem nas
entrevistas de emprego!

Figura 2.53 Solues de K-map com dont cares

108
Captulo dois Projeto de Lgica Combinatria

2.8. BLOCOS COMBINATRIOS


A lgica combinatria frequentemente agrupada em blocos maiores a fim de se construrem
sistemas mais complexos. Essa uma aplicao do princpio de abstrao, escondendo os detalhes
a nvel das portas e enfatizando a funo do bloco. At aqui ns j estudamos trs destes blocos:
full adders (na Seo 2.1), circuitos de prioridade (na Seo 2.4) e decodificadores de displays de
sete segmentos (na Seo 2.7). Esta Seo introduz mais dois blocos normalmente utilizados:
multiplexadores e decodificadores. O Captulo 5 cobre outros blocos combinatrios.
2.8.1. Multiplexadores
Os multiplexadores esto entre os circuitos combinatrios mais normalmente utilizados. Eles
escolhem uma sada de entre muitas possveis entradas tendo por base o valor de um sinal de
seleo. Um multiplexador, s vezes, carinhosamente chamado de mux.
2.8.2. Multiplexadores 2:1
A Figura 2.54 mostra o esquemtico e a tabela verdade de um multiplexador 2:1 com duas Figura 2.54 Smbolo e tabela
entradas de dados, 0 e 1 , uma entrada de seleo e uma sada . O multiplexador escolhe entre verdade de um multiplexador 2:1
as duas entradas de dados baseada na entrada de seleo: se = 0, = 0 , e se = 1, = 1 .
tambm chamado de sinal de controle, pois controla o que o multiplexador faz.
Um multiplexador 2:1 pode ser construdo a partir da lgica de soma de produtos, como
mostrado na Figura 2.55. A equao Booleana para o multiplexador pode ser derivada com um mapa
de Karnaugh ou lida por inspeo ( 1 se = 0 AND 0 1 OR = 1 AND 1 1).
Alternativamente, os multiplexadores podem ser construdos a partir de buffers tristate como
mostrado na Figura 2.56. O controle do tristate arranjado de tal modo que, em todas as vezes,
exatamente um buffer tristate est ativo. Quando = 0, o tristate T0 est ativado, permitindo que
0 flua para . Quando = 1, o tristate T1 est ativado, permitindo que 1 flua para .

109
Captulo dois Projeto de Lgica Combinatria

Figura 2.56 Multiplexador utilizando


buffers tristate
O curto-circuito em conjunto das sadas
de vrias portas lgicas tecnicamente
viola as regras para circuitos Figura 2.55 Implementao de um multiplexador 2:1 utilizando lgica de dois nveis
combinatrios dadas na Seo 2.1. Mas
porque exatamente uma das sadas
Multiplexadores Maiores
conduzida a qualquer momento, a Um multiplexador 4:1 possui quatro entradas de dados e uma sada, como mostrado na Figura
exceo permitida. 2.57. Dois sinais de seleo so necessrios para escolherem entre as quatro entradas. O
multiplexador 4:1 pode ser construindo utilizando-se a lgica de soma de produtos, tristates ou
mltiplos multiplexadores 2:1, como mostrado na Figura 2.58.
Os termos do produto ativando os tristates podem ser formados utilizando-se portas AND e
inversoras. Eles tambm podem ser formados usando um decodificador, o qual foi introduzido na
Seo 2.8.2.
Os Multiplexadores maiores, como os multiplexadores 8:1 ou 16:1, podem ser construdos
Figura 2.57 Multiplexador 4:1 expandindo-se os mtodos mostrados na Figura 2.58. Em geral, um multiplexador : 1 necessita de

110
Captulo dois Projeto de Lgica Combinatria

log 2 linhas de seleo. Novamente, a melhor escolha de implementao depende da tecnologia


alvo.

Figura 2.58 Implementao de um


multiplexador 4:1 com lgica de
porta AND de duas entradas
Figura 2.59 Implementao de um multiplexador 4:1: (a) lgica de dois nveis; (b) tristates; (c)
hierrquica

Lgica do Multiplexador
Os multiplexadores podem ser usados como tabelas de pesquisa para realizar funes lgicas.
A Figura 2.59 mostra um multiplexador 4:1 utilizado para implementar uma porta AND de duas
entradas. As entradas, A e B, servem como linhas de seleo. As entradas de dados do
multiplexador so conectadas a 0 ou 1 de acordo com a linha correspondente da tabela verdade.
Em geral, um multiplexador de 2 entradas pode ser programado para realizar qualquer funo
lgica de entradas aplicando-se 0 ou 1 s entradas de dados apropriadas. De fato, atravs da
mudana nos dados de entrada, o multiplexador pode ser reprogramado para realizar uma funo
diferente.

111
Captulo dois Projeto de Lgica Combinatria

Com um pouco de destreza, ns podemos cortar o tamanho de um multiplexador pela metade


utilizando apenas um multiplexador de 21 entradas para realizar qualquer funo lgica de
entradas. A estratgia deixar um dos literais, com 0 ou com 1, como entrada de dados do
multiplexador.
Para ilustrar este princpio, a Figura 2.60 mostra as funes AND e XOR implementadas com
multiplexadores 2:1. Comeamos a partir de uma tabela verdade comum, e combinamos pares de
linhas a fim de eliminar a varivel de entrada mais direita, expressando a sada em termos dessa
varivel. Por exemplo, no caso da AND, quando = 0, = 0, independentemente de . Quando =
1, = 0 se = 0 e = 1 se = 1, ento = . Ns ento usamos o multiplexador como uma
tabela de pesquisa de acordo com a nova, e menor, tabela verdade.

Figura 2.60 Lgica de multiplexador utilizando variveis de entrada

112
Captulo dois Projeto de Lgica Combinatria

Exemplo 2.12 LGICA COM MULTIPLEXADORES

Alyssa P. Hacker precisa implementar a funo = + + para finalizar o seu projeto


snior, mas, quando ela olha para o seu kit de laboratrio, o nico componente que sobrou um
multiplexador 8:1. Como implementaria ela essa funo?
Soluo: A Figura 2.61 mostra a implementao de Alyssa utilizando um nico multiplexador 8:1. O
multiplexador age como uma tabela de pesquisa onde cada linha na tabela verdade corresponde a
uma entrada do multiplexador.

Exemplo 2.13 LGICA COM MULTIPLEXADORES, REPRISADA


A Alyssa ligou seu circuito uma ltima vez antes da apresentao final e explodiu o multiplexador
8:1 (ela acidentalmente o alimentou com 20 V ao invs de 5 V aps passar a noite em claro). Ela
implorou a seus amigos para que lhe cedessem componentes, e eles lhe deram um multiplexador
4:1 e uma porta inversora. Ela pode construir o seu circuito apenas com esses componentes? Figura 2.61 Circuito da Alyssa: (a)
tabela verdade; (b) implementao
Soluo: A Alyssa reduziu a sua tabela verdade para quatro linhas deixando a sada dependendo de do multiplexador
(ela tambm poderia ter escolhido rearranjar as colunas da tabela verdade a fim de deixar a sada
dependente de e ). A Figura 2.62 ilustra o novo projeto.

113
Captulo dois Projeto de Lgica Combinatria

2.8.3. Decodificadores
Um decodificador possui entradas e 2 sadas. Ele ativa exatamente uma de suas sadas,
dependendo da combinao das entradas. A Figura 2.63 ilustra um decodificador 2:4. Quando 1:0 =
00, 0 = 1. Quando 1:0 = 01, 1 = 1, e assim por diante.

Exemplo 2.14 IMPLEMENTAO DE UM DECODIFICADOR


Implemente um decodificador 2:4 com portas AND, OR e NOT.
Soluo: A Figura 2.64 ilustra a implementao de um decodificador 2:4 utilizando quatro portas AND.
Cada porta depende de ambas as formas, verdadeiras e complementadas, de cada entrada. Em geral,
Figura 2.62 Novo circuito da Alyssa
um decodificador : 2 pode ser construdo a partir de 2 portas AND de entradas que aceitam as
vrias combinaes das entradas normais e complementadas. Cada sada num decodificador representa
um nico mintermo. Por exemplo, 0 representa o mintermo
1
0 . Esse fato ser conveniente quando
utilizarmos decodificadores em outros blocos digitais.

Lgica do Decodificador
Decodificadores podem ser combinados com portas OR para construrem funes lgicas. A Figura
2.65 mostra a funo XNOR de duas entradas utilizando um decodificador 2:4 e uma nica porta OR.
Devido a cada entrada do decodificador representar um nico mintermo, a funo construda como
OR de todos os mintermos na funo. Na Figura 2.65, = + =
.
Quando so utilizados decodificadores para se construir lgica, mais fcil expressar as funes na
forma de tabela verdade ou na forma cannica de soma de produtos. Uma funo de entradas com
1s na tabela verdade pode ser construda com um decodificador : 2 e um OR de entradas
Figura 2.63 Decodificador 2:4 conectadas a todos os mintermos contendo 1 na tabela verdade. Esse conceito ser aplicado para a
construo de Memrias de Apenas Leitura (Read Only Memories, ROMs), na Seo 5.5.6.

114
Captulo dois Projeto de Lgica Combinatria

2.9. TEMPORIZAO
Nas sees anteriores, a nossa preocupao principal se o circuito funciona idealmente,
utilizando poucas portas. No entanto, como qualquer projetista amadurecido de circuitos ir constatar,
um dos problemas mais desafiadores no projeto de circuitos a temporizao: fazer um circuito
funcionar rapidamente.
Uma sada leva tempo para mudar a sua resposta a uma mudana na entrada. A Figura 2.66 mostra
o atraso entre a mudana na entrada e a mudana subsequente na sada de um buffer. A figura
chamada de diagrama de temporizao; ele representa a resposta transitria do circuito do buffer
quando a entrada muda. A transio do nvel LOW para HIGH chamada flanco ascendente.
Similarmente, a transio de HIGH para LOW (no mostrada na figura) chamada de flanco
descendente. A seta azul indica que o flanco ascendente de causada pelo flanco ascendente de .
Medimos o atraso do ponto de 50% do sinal de entrada, , at ao ponto de 50% do sinal de sada, . Figura 2.64 Implementao de um
O ponto de 50% o ponto em que o sinal est na metade do caminho (50%) entre os valores LOW e decodificador 2:4
HIGH conforme a transio realizada.
2.9.1. Atraso de Propagao e de Contaminao
A lgica combinatria caracterizada por seu atraso de propagao e contamination delay. O atraso
de propagao o tempo mximo a partir do qual a entrada muda de valor, at quando a sada ou
as sadas atingem seu valor final. O contamination delay o tempo mnimo a partir do qual a
entrada muda de nvel, at quando qualquer uma das sadas comece a mudar de valor.
A Figura 2.67 ilustra o atraso de propagao e contamination delay de um buffer em azul e cinza,
respectivamente. A figura mostra que inicialmente HIGH ou LOW e muda de estado num dado
instante; estamos interessados apenas no fato de que ele muda, mas no qual o valor que ele tem. Em
resposta, muda algum tempo depois. Os arcos indicam que comea a mudar de valor aps a
Figura 2.65 Funo lgica utilizando
transio de , e que definitivamente se estabelece no novo valor dentro do tempo . decodificador

115
Captulo dois Projeto de Lgica Combinatria

As causas fundamentais para o atraso nos circuitos incluem o tempo necessrio para carregar as
capacitncias num circuito, e a velocidade da luz. e podem ser diferentes devido a muitas
Quando os projetistas falam sobre razoes, incluindo:
calcular o atraso de um circuito, eles
geralmente se referem ao pior caso (o Diferentes atrasos de subida e descida;
atraso de propagao), a no ser que Mltiplas entradas e sadas, algumas das quais so mais rpidas que outras;
esteja claro de uma outra forma, a partir Circuitos diminuem a velocidade quando esto quentes e aumentam quando esto frios.
do contexto.
Calcular e requer uma profundidade em nveis baixos de abstrao fora do escopo deste
livro. No entanto, os fabricantes normalmente fornecem data sheets especificando estes atrasos
para cada porta.
Juntamente com os fatores j listados, os atrasos de propagao e contamination delay so
tambm determinados atravs do caminho que um sinal faz da entrada para a sada. A Figura 2.68
mostra um circuito lgico de quatro entradas. O caminho crtico, mostrado a azul, o caminho da
entrada para a sada . o caminho mais longo e, portanto, o mais lento, pois a entrada viaja
atravs de trs portas at a sada. Esse caminho crtico pois limita a velocidade a que o circuito
opera. O caminho curto atravs do circuito, mostrado em cinza, vai da entrada D sada Y. Este o
menor, e portanto, mais rpido, caminho atravs do circuito, pois a entrada viaja atravs de apenas
uma porta para a sada.
Figura 2.66 Atraso do circuito
O atraso de propagao de um circuito combinatrio igual soma dos atrasos de propagao
atravs de cada elemento no caminho crtico. O contamination delay a soma dos contamination
delays atravs de cada elemento no caminho curto. Esses atrasos so mostrados na Figura 2.69 e so
descritos pelas seguintes equaes:
= 2 + (2.8)

= (2.9)

116
Captulo dois Projeto de Lgica Combinatria

Atrasos nos circuitos so normalmente da


ordem de picossegundos (1 =
1012segundos) a nanossegundos
9
(1 = 10 segundos). Trilhes de
picossegundos foram gastos para o leitor
ler esta caixa de texto.

Figura 2.67 Atraso de propagao e de contaminao

Exemplo 2.15 ENCONTRANDO ATRASOS


Ben Bitdiddle precisa encontrar o atraso de propagao e o contamination delay do circuito mostrado
na Figura 2.70. De acordo com o seu datasheet, cada porta tem um atraso de propagao de 100 pico-
segundos (ps) e um contamination delay de 60 ps.

Figura 2.68 Caminho curto e caminho


crtico

117
Captulo dois Projeto de Lgica Combinatria

Embora estejamos ignorando atraso de


condutor nesta anlise, os circuitos digitais so
agora to rpidos que o atraso de condutores
longos pode ser to importante quanto o
atraso das portas. A velocidade de atraso luz
em fios coberto no Apndice A.

Figura 2.70 Circuito do Ben

Figura 2.69 Formas de onda do caminho curto e do caminho crtico

Soluo: Ben comeou encontrando o caminho crtico e o caminho mais curto atravs do circuito.
O caminho crtico, destacado em azul na Figura 2.71, vai da entrada ou , atravs de trs portas,
at sada . Consequentemente, igual a trs vezes o atraso de propagao de uma nica
porta, ou 300 ps.
O caminho mais curto, mostrado em cinza na Figura 2.72, vai da entrada , ou atravs de
Figura 2.71 Caminho crtico do circuito do
Ben duas portas, para a sada . Existem apenas duas portas no caminho mais curto, ento igual
a 120 ps.

Exemplo 2.16 TEMPORIZAO DE MULTIPLEXADORES: CONTROLE CRTICO VS DADOS CRTICOS


Compare o pior caso de temporizao dos projetos de trs multiplexadores de quatro entradas
mostrados na Figura 2.58, na Seo 2.8.1. A Tabela 2.7 lista os atrasos de propagao dos
componentes. Qual o caminho crtico para cada projeto? Dada a sua anlise de temporizao,
porque o leitor escolheria um projeto ao invs de outro?
118
Captulo dois Projeto de Lgica Combinatria

Soluo: Um dos caminhos crticos para cada uma das trs opes de projeto destacado em azul na
Figura 2.73 e Figura 2.74. indica o atraso de propagao da entrada para a sada ; indica
o atraso de propagao da entrada para a sada ; o pior dos dois: max( , ).

Tanto para a implementao lgica de dois nveis quanto para a implementao por tristates na
Figura 2.73, o caminho crtico vai de um dos sinais de controle para a sada : = . Estes
circuitos so de controle crtico, devido ao caminho crtico ir dos sinais de controle sada. Qualquer Figura 2.72 Caminho mais curto do
atraso adicional nos sinais de controle vai diretamente para o pior caso de atraso. O atraso de para circuito do Ben
na Figura 2.73 (b) de apenas 50 ps, comparado ao atraso de para , de 125 ps.
A Figura 2.74 mostra a implementao hierrquica de um multiplexador 4:1 utilizando dois estgios
de multiplexadores 2:1. O caminho crtico vai de qualquer uma das entradas para a sada. Este
circuito crtico em dados, pois o caminho crtico vai da entrada de dados at a sada: = .

Se as entradas de dados chegam bem antes das entradas de controle, poderamos preferir o
projeto com o menor atraso controle-sada (o projeto hierrquico da Figura 2.74). Similarmente, se
as entradas de controle chegam bem antes das entradas de dados, ns poderamos preferir o projeto
com o menor atraso dados-sada (o projeto com tristates da Figura 2.73 (b)).
A melhor escolha depende no apenas do caminho crtico atravs do circuito e dos tempos de
chegada, mas tambm da potncia, custo e disponibilidade de componentes.

119
Captulo dois Projeto de Lgica Combinatria

Figura 2.73 Atrasos de propagao num multiplexador 4:1: (a) lgica de dois nveis; (b) tristate

Tabela 2.7 Especificaes de temporizao para elementos de circuitos multiplexadores

Figura 2.74 Atraso de propagao em


um multiplexador: Hierrquico
utilizando multiplexadores 2:1

120
Captulo dois Projeto de Lgica Combinatria

2.9.2. Glitches
At agora temos discutido o caso em que uma nica mudana na entrada causa uma nica mudana
na sada. No entanto, possvel que uma nica transio na entrada cause mltiplas transies na
sada. Elas so chamadas de glitches ou hazards. Apesar de os glitches normalmente no causarem
problemas, importante perceber que eles existem, e reconhece-los ao olhar um diagrama de
temporizao. A Figura 2.75 mostra um circuito com um glitche e o mapa de Karnaugh do circuito.
A equao Booleana corretamente minimizada, mas vamos dar uma olhada no que acontece
quando = 0, = 1 e transita de 1 para 0. A Figura 2.76 ilustra este cenrio. O caminho mais curto
(caminho em cinza) passa atravs de duas portas, a AND e a OR. O caminho crtico (mostrado em azul)
passa atravs da inversora e de duas portas, a AND e a OR.
Com a transio de de 1 para 0, n2 (no caminho mais curto) cai antes que n1 (no caminho crtico)
possa se elevar. At que n1 aumente, as duas entradas da porta OR so 0, e a sada cai para 0. Figura 2.75 Circuito com Glitch
Quando n1 eventualmente aumenta, retorna a 1. Como mostrado no diagrama de temporizao
da Figura 2.76, inicia em 1 e termina em 1, mas momentaneamente vai para o valor 0.
Enquanto esperarmos que atraso de propagao termine antes que dependamos da sada, os
glitches no sero um problema, pois a sada eventualmente vai para o valor correto.
Caso optemos por isso, podemos evitar o glitch adicionando outra porta lgica na implementao.
Isso mais simples de se entender em termos do K-map. A Figura 2.77 mostra como uma mudana na
entrada em de = 001 para = 011 se move de um implicante principal para outro. A
mudana atravs da fronteira dos dois implicantes principais no mapa de Karnaugh indicam um
possvel glitch.
Como vimos no diagrama de temporizao na Figura 2.76, se a implementao do circuito de um
dos implicantes primos desliga antes que o circuito de outro implicante primo possa ligar, existe um
glitch. Para consertar isto, adicionamos outro crculo que cobre a fronteira do implicante primo, como
mostrado na Figura 2.78. O leitor talvez possa reconhecer isso como teorema do consenso, onde o
termo adicionado, , o consenso ou termo redundante.

121
Captulo dois Projeto de Lgica Combinatria

A Figura 2.79 mostra o circuito prova de glitch. A porta AND adicionada destacada em azul.
Agora, a mudana de quando = 0 e = 1 no causa um glitch na sada, pois a porta AND azul
emite 1 durante toda a transio.

Figura 2.77 Mudana na entrada


cruzando a fronteira do implicante

Figura 2.76 Temporizao de um glitch

Em geral, um glicth pode ocorrer quando uma mudana numa varivel atravessa a fronteira entre
dois implicantes primos num mapa de Karnaugh. Podemos eliminar o glitch adicionando implicantes
Figura 2.78 K-map sem o glitch redundantes ao K-map para cobrir essas fronteiras. Isso, claro, vem com um custo extra de
hardware.
No entanto, mudanas simultneas em vrias entradas tambm podem causar glitches. Este tipo
de glitches no pode ser resolvido adicionando-se hardware. Devido vasta maioria de circuitos de
sistemas de interesse que possuem transies simultneas (ou quase simultneas), os glitches so
um fato na vida da maioria dos circuitos. Apesar de termos mostrado como eliminar um tipo de
glitch, o ponto de discusso no sobre elimin-los, mas estar cientes de que eles existem. Isso
Figura 2.79 Circuito sem o glitch especialmente importante quando analisamos os diagramas de temporizao num simulador ou
osciloscpio.
122
Captulo dois Projeto de Lgica Combinatria

2.10. SUMRIO
Um circuito digital um mdulo com entradas e sadas de valores discretos e uma especificao
descrevendo a funo e a temporizao do mdulo. Este Captulo teve o seu foco nos circuitos
combinatrios, nos quais as sadas dependem unicamente dos valores atuais de entradas.
A funo de um circuito combinatrio pode ser dada por uma tabela verdade ou equao
Booleana. A equao Booleana para qualquer tabela verdade pode ser obtida sistematicamente
utilizando-se a forma de soma de produtos ou de produto de somas. Na forma de soma de produtos,
a funo escrita como a soma (OR) de um ou mais implicantes. Implicantes so produtos (AND) de
literais. Literais so as formas verdadeiras ou complementadas das variveis de entrada.
As equaes Booleanas podem ser simplificadas utilizando-se as regras da lgebra Booleana. Em
particular, elas podem ser simplificadas em mnimas formas de soma de produtos atravs da
combinao de implicantes que diferem entre si apenas na forma verdadeira e complementada de
um dos literais: + = . Os mapas de Karnaugh so ferramentas visuais de minimizao de
funes de at quatro variveis. Na prtica, os projetistas podem usualmente simplificar funes de
poucas variveis por inspeo. Ferramentas de projeto auxiliado por computador so utilizadas para
funes mais complicadas; tais mtodos e ferramentas so discutidos no Captulo 4.
As portas lgicas so conectadas entre si para criar circuitos combinatrios que realizam uma
funo desejada. Qualquer funo na forma de soma de produtos pode ser construda utilizando-se
lgica de dois nveis: os complementos das entradas so constitudos por portas NOT, os produtos
por portas AND, e as somas, por portas OR. Dependendo da funo e dos blocos lgicos disponveis,
implementaes lgicas multi-nvel com vrios tipos de portas podem ser mais eficientes. Por
exemplo, os circuitos CMOS favorecem portas NAND e NOR, pois essas portas podem ser construdas
diretamente por transistores CMOS sem que portas NOT extra sejam necessrias. Quando portas
NAND e NOR so utilizadas, a tcnica dos empurres de bolha til para acompanhar as inverses.

123
Captulo dois Projeto de Lgica Combinatria

As portas lgicas so combinadas para produzir circuitos maiores, como multiplexadores,


decodificadores, e circuitos de prioridade. Um multiplexador escolhe uma das entradas de dados
baseado numa entrada de seleo. Um decodificador leva uma das sadas para nvel HIGH de acordo
com as entradas. Um circuito de prioridade produz uma sada indicando qual a entrada de maior
prioridade. Todos esses circuitos so exemplos de blocos combinatrios. O Captulo 5 ir introduzir
mais blocos lgicos, incluindo outros circuitos aritmticos. Esses blocos sero utilizados
extensivamente para construir um microprocessador no Captulo 7.
A especificao de temporizao de um circuito combinatrio consiste nos atrasos de propagao
e contaminao do circuito. Estes indicam os maiores e menores tempos entre uma mudana na
entrada e a consequente mudana na sada. Calcular o atraso de propagao de um circuito envolve
identificar o caminho crtico atravs do circuito e, ento, adicionar os atrasos de propagao para
cada elemento ao longo do caminho. Existem muitas maneiras diferentes de se implementar circuitos
combinatrios complicados; essas maneiras oferecem compensaes entre velocidade e custo.
O prximo Captulo ir se deslocar para os circuitos sequenciais, nos quais as sadas dependem
tanto dos valores atuais como os valores anteriores das entradas. Por outras palavras, circuitos
sequenciais possuem memria do passado.

124
Captulo dois Projeto de Lgica Combinatria

Exerccios
Exerccio 2.1 Escreva a equao Booleana na forma cannica de soma de produtos para cada uma
das tabelas verdade na Figura 2.80.

Figura 2.80 Tabelas verdade para os Exerccio 2.1 e Exerccio 2.3

Exerccio 2.2 Escreva a equao Booleana na forma cannica de soma de produtos para cada uma
das tabelas verdade na Figura 2.81.

125
Captulo dois Projeto de Lgica Combinatria

Figura 2.81 Tabelas verdade para os Exerccio 2.2 e Exerccio 2.4

Exerccio 2.3 Escreva a equao Booleana na forma cannica de produto das somas para cada
uma das tabelas verdade na Figura 2.80.

Exerccio 2.4 Escreva a equao Booleana na forma cannica de produto das somas para cada
uma das tabelas verdade na Figura 2.81.

Exerccio 2.5 Minimize cada uma das equaes Booleanas do Exerccio 2.1.

Exerccio 2.6 Minimize cada uma das equaes Booleanas do Exerccio 2.2.

126
Captulo dois Projeto de Lgica Combinatria

Exerccio 2.7 Esboce um circuito combinatrio razoavelmente simples implementando cada uma
das funes do Exerccio 2.5. Razoavelmente simples significa que o leitor no vai desperdiar
portas lgicas, mas tampouco vai gastar muito tempo verificando cada possvel implementao
para o circuito.

Exerccio 2.8 Esboce um circuito combinatrio razoavelmente simples implementando cada uma
das funes do Exerccio 2.6.

Exerccio 2.9 Repita o Exerccio 2.7 usando apenas portas NOT, AND e OR.

Exerccio 2.10 Repita o Exerccio 2.8 usando apenas portas NOT, AND e OR.

Exerccio 2.11 Repita o Exerccio 2.7 usando apenas portas NOT, N AND e NOR.

Exerccio 2.12 Repita o Exerccio 2.8 usando apenas portas NOT, NAND e NOR.

Exerccio 2.13 Simplifique as seguintes equaes Booleanas utilizando os teoremas Booleanos.


Verifique se as respostas esto corretas utilizando uma tabela verdade ou um K-map.

(a) = +
(b) = + + (
+ )
(c) =
+ + + +
+ +

127
Captulo dois Projeto de Lgica Combinatria

Exerccio 2.14 Simplifique as seguintes equaes Booleanas utilizando os teoremas Booleanos.


Verifique se as respostas esto corretas utilizando uma tabela verdade ou um K-map.

(a) = +
(b) +
=
(c) = + (
+
+ + + )

Exerccio 2.15 Esboce um circuito combinatrio relativamente simples implementando cada uma
das funes do Exerccio 2.13.

Exerccio 2.16 Esboce um circuito combinatrio relativamente simples implementando cada uma
das funes do Exerccio 2.14.

Exerccio 2.17 Simplifique cada uma das seguintes equaes Booleanas. Esboce um circuito
combinatrio relativamente simples implementando a equao simplificada.

(a) = + +
(b) =
+ + +
+
(c)
= + + + + + ( + + ) + + +
+

Exerccio 2.18 Simplifique cada uma das seguintes equaes Booleanas. Esboce um circuito
combinatrio relativamente simples implementando a equao simplificada.

(a) = +
+
(b)
= ( + + ) + +
(c)
= + + ( + )

128
Captulo dois Projeto de Lgica Combinatria

Exerccio 2.19 D um exemplo de uma tabela verdade que requer entre 3 e 5 bilhes de linhas e
pode ser construda utilizando-se menos de 40 (mas pelo menos 1) portas de duas entradas.

Exerccio 2.20 D um exemplo de um circuito com um caminho cclico e que mesmo assim
combinatrio.

Exerccio 2.21 Alyssa P. Hacker diz que qualquer funo Booleana pode ser escrita na forma mnima
de soma de produtos como uma soma de todos os implicantes primos da funo. Ben Bitdiddle diz
que existem algumas funes para as quais as suas equaes mnimas no envolvem todos os
implicantes primos. Explique por que Alyssa est certa ou d um contra-exemplo demostrando o
ponto de Ben.

Exerccio 2.22 Prove que os teoremas a seguir so verdadeiros utilizando induo perfeita. O leitor
no precisar provar seus duais.
(a) O teorema da idempotncia (T3)
(b) O teorema da distributividade (T8)
(c) O teorema da cominao (T10)

Exerccio 2.23 Prove o Teorema de De Morgan (T12) para trs variveis, 1, 2, 0, utilizando
induo perfeita.

Exerccio 2.24 Escreva equaes Booleanas para o circuito da Figura 2.82. O leitor no precisar
minimizar as equaes.

129
Captulo dois Projeto de Lgica Combinatria

Figura 2.82 Esquemtico do circuito

Exerccio 2.25 Minimize as equaes Booleanas do Exerccio 2.24 e esboce um circuito melhorado
com a mesma funo.

Exerccio 2.26 Utilizando portas equivalentes de De Morgan e mtodos de empurro de bolha,


redesenhe o circuito da Figura 2.83 a fim de que o leitor possa encontrar a equao Booleana por
inspeo. Escreva a equao Booleana.

Figura 2.83 Circuito esquemtico

130
Captulo dois Projeto de Lgica Combinatria

Exerccio 2.27 Repita o Exerccio 2.26 para o circuito da Figura 2.84.

Figura 2.84 Circuito esquemtico

Exerccio 2.28 Encontre a equao Booleana mnima para a funo na Figura 2.85. Lembre-se de
tirar vantagem das entradas dont care.

Figura 2.85 Tabela verdade do exerccio 2.28

Exerccio 2.29 Esboce um circuito para a funo do Exerccio 2.28.

131
Captulo dois Projeto de Lgica Combinatria

Exerccio 2.30 O seu circuito feito no Exerccio 2.29 tem algum glitch potencial quando uma das
entradas varia? Se no, explique porque no. Se sim, mostre como modificar o circuito para eliminar
os glitches.

Exerccio 2.31 Encontre a equao Booleana mnima para a funo na Figura 2.86. Lembre-se de
tirar vantagem das entradas dont care.

Figura 2.86 Tabela verdade do exerccio 2.31

Exerccio 2.32 Esboce um circuito para a funo lgica do Exerccio 2.31.

Exerccio 2.33 Ben Bitdiddle vai aproveitar seu piquenique em dias ensolarados e sem formigas. Ele
tambm vai aproveitar o seu piquenique em qualquer dia que haja um beija flor, assim como em dias
que existam formigas e joaninhas. Escreva uma equao Booleana para seu aproveitamento (A) em
termos do Sol (S), das formigas (F), dos beija flores (B) e das joaninhas (J).

132
Captulo dois Projeto de Lgica Combinatria

Exerccio 2.34 Complete o projeto do decodificador de sete segmentos atravs de (ver


Exerccio 2.10):
(a) Derive equaes Booleanas para as sadas atravs de , assumindo que entradas maiores
do que 9 produzem entradas em branco (0).
(b) Derive equaes Booleanas para as sadas atravs de , assumindo que entradas maiores
do que 9 so consideradas dont cares.
(c) Esboce um a implementao a nvel de portas lgicas relativamente simples do item (b). Sadas
mltiplas podem ser compartilhadas quando apropriado.

Exerccio 2.35 Um circuito possui quatro entradas e duas sadas. As entradas 3:0 representa um
nmero de 0 a 15. A sada deve ser TRUE se o nmero for primo (0 e 1 no so primos, mas 2,3,5 e
assim por diante, so). A sada deve ser TRUE se o nmero for divisvel por 3. D equaes Booleanas
simplificadas para cada sada e esboce o circuito.

Exerccio 2.36 Um codificador de prioridades possui 2 entradas. Ele produz uma sada binria de
N-bits indicando se o bit mais significativo da entrada TRUE, ou 0 se nenhuma das entradas for TRUE.
Ele tambm produz uma sada NONE, que TRUE se nenhuma das entradas TRUE. Projete um
codificador de prioridade de oito entradas com entradas 7:0 e sadas 2:0 e NONE. Por exemplo, se as
entradas so 00100000, a sada deve ser 101 e NONE deve ser 0. Fornea a equao Booleana
simplificada para cada sada, e esboce o esquemtico.

Exerccio 2.37 Projete um codificador de prioridades modificado (veja o Exerccio 2.36) que recebe
uma entrada de 8 bits e produz duas sadas de 3 bits, 2:0 e 2:0. indica que o bit mais significativo
da entrada TRUE. indica que o segundo bit mais significativo da entrada TRUE. deve ser 0 se
nenhuma das entradas TRUE. deve ser 0 no mais que uma das entradas VERDADEIRO. D a
equao Booleana simplificada para cada sada e esboce o esquemtico.

133
Captulo dois Projeto de Lgica Combinatria

Exerccio 2.38 Um cdigo de termmetro de M bits para o nmero k consiste de k bits 1 nas
posies menos significativas e M k bits 0 em todos outros bits significativos. Um cdigo conversor
de binrio para termmetro tem N entradas e 21 sadas. Ele produz um cdigo de termmetro de
21 bits para o nmero especificado na entrada. Por exemplo, se as entradas so 110, a sada deve
ser 0111111. Projete um conversor de cdigo binrio para termmetro 3:7. D a equao Booleana
simplificada para cada sada, e esboce o esquemtico.

Exerccio 2.39 Escreva a equao Booleana minimizada para a funo realizada pelo circuito na
Figura 2.87.

Figura 2.87 Circuito multiplexador

Exerccio 2.40 Escreva a equao Booleana minimizada para a funo realizada pelo circuito na
Figura 2.88.

Figura 2.88 Circuito multiplexador

Exerccio 2.41 Implemente a funo da Figura 2.80 (b) utilizando:


(a) Um multiplexador 8:1
134
Captulo dois Projeto de Lgica Combinatria

(b) Um multiplexador 4:1 e uma inversora


(c) Um multiplexador 2:1 e duas outras portas lgicas

Exerccio 2.42 Implemente a funo do Exerccio 2.17 (a) utilizando:

Um multiplexador 8:1
Um multiplexador 4:1 e uma inversora
Um multiplexador 2:1 e duas outras portas lgicas

Exerccio 2.43 Determine o atraso de propagao e o atraso de contaminao do circuito na


Figura 2.83. Use os atrasos de porta dados na Tabela 2.8.

Exerccio 2.44 Determine o atraso de propagao e o atraso de contaminao do circuito na


Figura 2.84. Use os atrasos de porta dados na Tabela 2.8.
Tabela 2.8 Atrasos de porta para os Exerccio 2.43 Exerccio 2.47

135
Captulo dois Projeto de Lgica Combinatria

Exerccio 2.45 Esboce o esquemtico para um decodificador rpido 3:8. Suponha que os atrasos
de porta so dados pela Tabela 2.8 (e apenas as portas daquela tabela esto disponveis). Projete
seu decodificador para que ele tenha o menor caminho crtico possvel, e indique qual caminho
esse. Quais so os atrasos de propagao e de contaminao?

Exerccio 2.46 Projete novamente o circuito do Exerccio 2.35 para que ele seja o mais rpido
possvel. Utiliza apenas as portas da Tabela 2.8. Esboce o novo circuito e indique qual o caminho
crtico. Quais so os atrasos de propagao e de contamination?

Exerccio 2.47 Projete novamente o circuito do Exerccio 2.36 para que ele seja o mais rpido
possvel. Utiliza apenas as portas da Tabela 2.8. Esboce o novo circuito e indique qual o caminho
crtico. Quais so os atrasos de propagao e de contamination?

Exerccio 2.48 Projete um multiplexador 8:1 com o menor atraso possvel das entradas de dados
para a sada. O leitor pode utilizar qualquer uma das portas da Tabela 2.7. Esboce o esquemtico.
Utilizando os atrasos de porta dados pela tabela, determine o atraso total.

136
Captulo dois Projeto de Lgica Combinatria

Questes de Entrevista
Essas perguntas foram feitas em entrevistas para trabalhos de projeto digital.

Pergunta 2.1 Esboce um esquema para a funo XOR de duas entradas usando apenas portas
NAND. Apenas quantos pode usar?

Pergunta 2.2 Projete um circuito que vai dizer se um determinado ms tem 31 dias. O ms
especificado por uma entrada de 4-bits A3:0. Por exemplo, se as entradas so 0001, o ms janeiro, e
se as entradas so 1100, o ms dezembro. A sada Y circuito deve ser ativada apenas quando o ms
especificado pelas entradas tem 31 dias nele. Escreva a equao simplificada, e desenhe o diagrama
de circuito utilizando um nmero mnimo de portas. (Dica: Lembre-se de tirar proveito das condies
dont care.)

Pergunta 2.3 O que um buffer tristate? Como e porque usado?

Pergunta 2.4 Uma porta ou conjunto de portas universal, se pode ser usado para construir
qualquer funo Booleana. Por exemplo, o conjunto {AND, OR, NOT} universal.
(a) Uma porta AND, por si s universal? Porque o ou porque o no ?
(b) o conjunto {OR, NOT} universal? Porque o ou porque o no ?
(c) a porta NAND por si s universal? Porque o ou porque o no ?

137
Captulo dois Projeto de Lgica Combinatria

138
3. Projeto de Lgica Digital
3.1. INTRODUO
No ltimo Captulo, demonstramos como analisar e projetar lgica combinatria. A sada da lgica
combinatria depende apenas dos valores atuais das entradas. Dada uma especificao sob a forma
de tabela verdade ou equao booleana, podemos criar um circuito otimizado que observa as
especificaes.
Neste Captulo, vamos analisar e projetar lgica sequencial. As sadas da lgica sequencial
dependem tanto dos atuais valores da entrada como dos anteriores. Assim, a lgica sequencial tem
memria. A lgica sequencial pode lembrar-se explicitamente de certas entradas anteriores, ou pode
refinar as entradas anteriores numa quantidade menor de informao chamada de estado do
sistema. O estado de um circuito sequencial digital definido por um conjunto de bits designado de
variveis de estado que contm todas as informaes sobre o passado necessrias para explicar o
comportamento futuro do circuito.
O Captulo comea por estudar bsculas e flip-flops, que so circuitos sequenciais simples que
armazenam o estado de um bit. Em geral, os circuitos sequenciais possuem uma anlise complexa.
Para simplificar o projeto, vamos disciplinarmo-nos a construir apenas circuitos sequenciais
sncronos formados por lgica combinatria e bancos de flip-flops que contm o estado do circuito.
O Captulo descreve mquinas de estados finitos, que so uma maneira fcil de projetar circuitos
sequenciais. Finalmente, analisamos a velocidade dos circuitos sequenciais e discutimos o
paralelismo como uma forma de aumentar a velocidade.

139
Captulo trs Projeto de Lgica Digital

3.2. BSCULAS E FLIP-FLOPS


O bloco de construo fundamental de memria um elemento biestvel, um elemento com dois estados
estveis. A Figura 3.1 (a) mostra um elemento biestvel simples consistindo de um par de inversores ligados
em realimentao. A Figura 3.1 (b) mostra o mesmo circuito redesenhado para enfatizar a simetria. Os
inversores esto numa configurao cross-coupled, o que significa que a entrada de I1 a sada de I2 e vice-
.
versa. O circuito no tem entradas, mas possui duas sadas, Q e Q

Figura 3.1 Par de inversores cross-coupled


Da mesma forma que Y A anlise deste circuito diferente da anlise de um circuito combinatria porque cclica: Q depende de
vulgarmente usado para a sada da , e depende Q. Considere os dois casos, Q 0 ou Q 1. Trabalhando com as consequncias de cada caso,

lgica combinatria, Q
temos:
comumente utilizada para a sada
da lgica sequencial. Caso I: Q = 0
Como mostrado na Figura 3.2 (a), I2 recebe uma entrada FALSE, Q, de modo que produz uma
sada de TRUE em : I1 recebe uma entrada TRUE, , de modo que produz uma sada FALSE
em Q. Isto consistente com a suposio inicial que Q = 0, de modo que este caso estvel.
Caso II: Q = 1
Como mostrado na Figura 3.2 (b), I2 recebe uma entrada TRUE e produz uma sada FALSE em
: I1 recebe uma entrada FALSE e produz uma sada TRUE em Q. Este caso novamente
estvel.

140
Captulo trs Projeto de Lgica Digital

Figura 3.2 Operao biestvel de um par de inversores cross-coupled

Dado que os inversores cross-coupled tm dois estados estveis, Q = 0 e Q = 1, o circuito dito biestvel.
Um ponto subtil que o circuito tem um terceiro estado possvel com ambas as sadas aproximadamente a
meio caminho entre 0 e 1. Isso designado por estado metaestvel e ser discutido na Seo 3.5.4.
Um elemento com N estados estveis transmite log2N bits de informao, de modo que um elemento
biestvel armazena 1 bit. O estado dos inversores cross-coupled est contido numa varivel de estado
binrio, Q. O valor de Q diz-nos tudo sobre o passado que necessrio para explicar o comportamento
futuro do circuito. Especificamente, se Q = 0, ele permanecer para sempre a 0, e se Q = 1, ele permanecer
a 1 para sempre. O circuito tem um outro n, , mas no contm qualquer informao adicional porque
se Q conhecido, tambm conhecido. Por outro lado, tambm uma opo aceitvel para a varivel
de estado.
Quando a energia aplicada pela primeira vez a um circuito sequencial, o estado inicial desconhecido
e geralmente imprevisvel. Ele pode ser diferente de cada vez que o circuito seja ligado.
Embora os inversores cross-coupled possam armazenar 1 bit de informao, eles no so prticos porque o
utilizador no tem entradas para controlar o estado. No entanto, outros elementos biestveis, tais como
bsculas e flip-flops, disponibilizam entradas para controlar o valor da varivel de estado. O restante desta
seco considera estes circuitos.
3.2.1. Bscula SR
Um dos circuitos sequenciais mais simples a bscula SR, a qual composta por duas portas NOR na
configurao cross-coupled, tal como mostrado na Figura 3.3. A bsculas tem duas entradas, S e R, e duas
sadas, Q e : A bscula SR semelhante ao inversor cross-couple, mas o seu estado pode ser controlado
atravs das entradas S e R, que fazem set e reset da sada Q.

141
Captulo trs Projeto de Lgica Digital

Figura 3.3 Esquema de uma bscula RS

Uma boa maneira de entender um circuito desconhecido analisar a sua tabela verdade, de modo que
por onde vamos comear. Lembre-se que uma porta NOR produz uma sada FALSE quando uma entrada
for TRUE. Considere as quatro possveis combinaes de R e S.
Caso I: R = 1, S = 0
N1 v finalmente uma entrada TRUE, R, de modo que produz uma sada FALSE em Q. N2 v ambos Q e S
FALSE, por isso produz uma sada TRUE em :
Caso I: II: R = 0, S = 1

N1 recebe entradas de 0 e : Porque ns ainda no sabemos , no podemos determinar a sada Q. N2


recebe finalmente uma entrada TRUE, S, por isso produz uma sada FALSE em : Agora podemos revisitar
N1, sabendo que ambas as entradas so FALSE, ento a sada Q TRUE.
Caso III: R = 1, S = 1
N1 e N2 veem finalmente uma entrada TRUE (R ou S), de modo que cada uma produz uma sada FALSE. Da
Q e serem ambas FALSE.
Caso IV: R = 0, S = 0

N1 recebe a entradas de 0 e : Porque ns ainda no sabemos , no podemos determinar a sada. N2


recebe entradas de 0 e Q. Porque ns ainda no sabemos Q, no podemos determinar a sada. Agora
estamos presos. Esta uma reminiscncia dos inversores cross-coupled. Mas sabemos que Q deve ser 0 ou
1. Assim, podemos resolver o problema, verificando o que acontece em cada uma destes subcasos.

142
Captulo trs Projeto de Lgica Digital

Caso IVa: Q = 0

Dado que S e Q so FALSE, N2 produz uma sada TRUE em Q , como mostrado na Figura 3.4 (a). Agora
N1 recebe uma entrada TRUE, Q , ento a sua sada, Q, FALSE, da mesma forma que tnhamos
assumido.
Caso IVb: Q = 1

Uma vez que Q TRUE, N2 produz uma sada FALSE em , como mostrado na Figura 3.4 (b). Agora
N1 recebe duas entradas FALSE, R e , logo sua sada, Q, TRUE, da mesma forma que tnhamos
assumido.

Figura 3.4 Estados biestveis de uma bscula SR

Colocando tudo junto, suponha que Q tem algum valor antes conhecido, a que chamaremos Qprev, antes
de entrarmos no caso IV. Qprev 0 ou 1, e representa o estado do sistema. Quando R e S so 0, Q vai-se lembrar
deste antigo valor, Qprev, e ser o seu complemento, . Este circuito tem memria.

A tabela verdade da Figura 3.5 resume esses quatro casos. As entradas S e R significam Set e Reset. Fazer
set de 1 bit significa torn-lo TRUE. Fazer reset de 1 bit significa torn-lo FALSE. As sadas, Q e , so
normalmente complementares. Quando R ativo, Q faz reset a 0 e faz o contrrio. Quando S ativo, Q
definido como 1 e faz o contrrio. Quando nenhuma entrada est ativa, Q lembra o seu antigo valor, Qprev.
Ativando S e R simultaneamente no faz muito sentido, porque isso significa que a bscula deve ser ligada e
desligada ao mesmo tempo, o que impossvel. O circuito responde levando ambas as sadas 0.

143
Captulo trs Projeto de Lgica Digital

Figura 3.5 Tabela verdade de uma bscula SR

Figura 3.6 Smbolo de uma bscula SR

A bscula SR representada pelo smbolo na Figura 3.6. Usar o smbolo uma aplicao de abstrao e
modularidade. Existem vrias maneiras de construir uma bscula SR, tais como o uso de diferentes portas
lgicas e transstores. No entanto, qualquer elemento do circuito com o relacionamento especificado pela
tabela verdade na Figura 3.5 e o smbolo na Figura 3.6 chamado de bscula SR.
Como os inversores cross-coupled, a bscula SR um elemento biestvel, com 1 bit de estado
armazenado em Q. No entanto, o estado pode ser controlado atravs das entradas S e R. Quando R
ativado, o estado reposto a 0. Quando S ativado, o estado definido como 1. Quando nenhuma das
entradas ativada, o estado mantm o seu valor antigo. Observe que toda a histria das entradas pode ser
avaliada pela varivel nica de estado Q. No importa o padro de set ou reset ocorrido no passado, tudo
o que necessrio para prever o comportamento futuro da bscula SR se ela esteve mais recentemente
set ou reset.
3.2.2. Bscula D
A bscula SR perigosa porque ela tem um comportamento estranho quando ambas as entradas S e R
so ativadas simultaneamente. Alm disso, as entradas S e R confundem as questes de o qu e quando.
Ativando uma das entradas determina no apenas o que o estado deve ser, mas tambm quando se deve
mudar. Projetar circuitos torna-se mais fcil quando essas perguntas sobre o qu e quando esto separadas.

144
Captulo trs Projeto de Lgica Digital

A bscula D na Figura 3.7 (a), resolve estes problemas. Ela tem duas entradas. A entrada de dados, D, controla
qual deve ser o prximo estado. A entrada de clock, CLK, controla quando o estado deve mudar.
Mais uma vez, analisamos a bscula escrevendo a tabela verdade, dada na Figura 3.7 (b). Por convenincia,
consideramos em primeiro lugar os ns internos , S e R. Se CLK = 0, S e R so FALSE, independentemente do
valor de D. Se CLK = 1, uma porta AND ir produzir TRUE e outra FALSE, dependendo do valor de D. Dado S e
R, Q e so determinados usando a Figura 3.5. Observe que quando CLK = 0, Q lembra o seu antigo valor,
Qprev. Quando CLK = 1, Q = D. Em todos os casos, o smbolo representa o complemento de Q, como lgico.
A bscula D evita o perigoso caso de simultaneamente ativar as entradas R e S.
Juntando tudo, vemos que o relgio controla quando os dados fluem atravs da bscula. Quando
CLK = 1, a bscula est transparente. Os dados em D fluem atravs de Q, como se a bscula fosse apenas um
buffer. Quando CLK = 0, a bscula est opaca. Ela bloqueia os novos dados de flurem para Q, e Q mantm o Algumas pessoas preferem usar
valor antigo. Assim, a bscula D s vezes chamada de bscula transparente ou uma bscula sensvel ao nvel. bscula aberta ou fechada em vez
O smbolo da bscula D fornecido na Figura 3.7 (c). de transparente ou opaca. No
entanto, achamos que esses
A bscula D atualiza o seu estado continuamente enquanto CLK = 1. Veremos mais tarde neste Captulo que termos so ambguos - aberto
til atualizar o estado somente num instante especfico no tempo. O flip-flop D descrito na prxima seo significa transparente, como uma
faz exatamente isso. porta aberta, ou opaco, como um
circuito aberto?

Figura 3.7 bscula D: (a) esquema, (b) tabela verdade, (c) smbolo

145
Captulo trs Projeto de Lgica Digital

3.2.3. Flip-flop D
Um flip-flop D pode ser construdo a partir de duas bsculas D controladas por relgios
complementares, como se mostra na Figura 3.8 (a). A primeira bscula, L1, chamada de mestre. A
segunda bscula, L2, chamada de escravo. O n entre elas chamado de N1. Um smbolo para o flip-flop
D dado na Figura 3.8 (b). Quando a sada no necessria, o smbolo frequentemente condensado
como na Figura 3.8 (c).
Quando o CLK = 0, a bscula mestre est transparente e o escravo est opaco. Portanto, qualquer que
seja o valor em D propagado para N1. Quando CLK = 1, o mestre torna-se opaco e o escravo torna-se
transparente. O valor em N1 propagado para Q, mas N1 cortado de D. Assim, o valor que estava em D
A distino precisa entre flip-flops e imediatamente antes que o relgio efetuasse a transio de 0 para 1 copiado para Q imediatamente
bscula um pouco confusa e aps a subida do relgio. Em todas as outras vezes, Q mantm o seu valor antigo, porque h sempre uma
evoluiu ao longo do tempo. No uso
bscula opaca bloqueando o caminho entre D e Q.
comum da indstria, um flip-flop
disparado por borda. Em outras Por outras palavras, um flip-flop D cpia o nvel lgico de D para Q na borda ascendente do relgio, e
palavras, um elemento biestvel, relembra o seu estado em todas as outras vezes. Releia esta definio at que a tenha memorizado; um
com uma entrada de relgio. O dos problemas mais comuns para projetistas digitais iniciantes esquecer o que um flip-flop faz. A borda
estado das mudanas do flip-flop ascendente do relgio muitas vezes chamada abreviadamente de flanco do clock. A entrada D especifica
apenas em resposta a um relgio,
qual ser o novo estado. O clock indica quando o estado deve ser atualizado.
como quando o relgio sobe de 0 a
1. Um elemento biestvel sem um
relgio disparado por borda
comumente chamado de bsculas.

O termo flip-flop ou bscula por si


s geralmente refere-se a uma
bscula D ou flip-flop D,
respectivamente, porque estes so
os tipos mais comumente utilizados
na prtica.

Figura 3.8 Flip-flop D: (a) esquemtico, (b) smbolo, (c) smbolo condensado

146
Captulo trs Projeto de Lgica Digital

Exemplo 3.1 CONTAGEM DE TRANSSTORES NUM FLIP-FLOP


Quantos transstores so necessrios para construir o flip-flop D descrito nesta seo?
Soluo: Uma porta NAND ou NOR usa quatro transstores. Uma porta NOT utiliza dois transstores. Uma
porta AND construda a partir de uma NAND e outra NOT, pelo que ela usa seis transstores. A bscula SR
usa duas portas NOR, ou seja, oito transstores. A bscula D usa uma bscula SR, duas portas AND, e uma
porta NOT, ou seja, 22 transstores. O flip-flop D usa duas bsculas D e uma porta NOT, ou seja, 46
transstores. A Seco 3.2.7 descreve uma implementao CMOS mais eficiente usando portas de
transmisso.

Um flip-flop D tambm conhecido como um flip-flop mestre-escravo, um flip-flop disparado por borda,
ou um flip-flop disparado por borda positiva. O tringulo nos smbolos denota uma entrada de relgio
disparado por borda. A sada muitas vezes omitida quando ela no necessria.
3.2.4. Registro
Figura 3.9 Registro de 4-bits:
Um registro de N-bits um banco de N flip-flops que compartilham uma entrada CLK comum, de modo
(a) esquemtico, (b) smbolo
que todos os bits do registro so atualizados em simultneo. Os registros so os alicerces fundamentais da
maioria dos circuitos sequenciais. A Figura 3.9 mostra o esquema e o smbolo para um registro de quatro
bits com entradas D3:0 e sadas Q3:0. D3:0 e Q3:0 so dois barramentos de 4-bits.
3.2.5. Enabled Flip-Flop
Um enabled flip-flop possui outra entrada chamada EN ou habilitar para determinar se os dados so
carregados na transio do relgio. Quando EN TRUE, o enabled flip-flop comporta-se como um flip-flop
D comum. Quando EN FALSE, o enabled flip-flop ignora o relgio e mantm o seu estado. Os enabled flip-
flops so teis quando se deseja carregar um novo valor para um flip-flop apenas em algumas das vezes,
em vez de a cada transio do relgio.

147
Captulo trs Projeto de Lgica Digital

A Figura 3.10 mostra duas maneiras de construir um enabled flip-flop a partir de um flip-flop D e uma
porta extra. Na Figura 3.10 (a), um multiplexador de entrada escolhe se se deve passar o valor de D, se EN
TRUE, ou para reciclar o velho estado de Q, se EN FALSE. Na Figura 3.10 (b), o relgio passa por uma
porta lgica. Se EN TRUE, a entrada CLK para o flip-flop comuta normalmente. Se EN FALSE, a entrada
CLK tambm FALSE e o flip-flop mantm o seu valor antigo. Observe que EN no deve mudar enquanto
CLK = 1, para que o flip-flop veja um glitch no relgio (comutao num momento incorreto). Geralmente,
executar lgica no relgio uma m ideia. Fazer passar o relgio por uma porta atrasa o relgio e pode
causar erros temporais, como veremos na Seo 3.5.3, assim devemos faz-lo apenas se houver a certeza
de que se sabe o que se est a fazer. O smbolo para um enabled flip-flop dado na Figura 3.10 (c).

Figura 3.10 Enabled flip-flop: (a,b) esquemticos, (c) smbolo

3.2.6. Resettable Flip-Flop


Um resettable flip-flop possui outra entrada chamada RESET. Quando RESET for FALSE, o resettable flip-
flop comporta-se como um flip-flop D comum. Quando RESET for TRUE, o Resettable flip-flop ignora D e
repe a sada para 0. Os resettable flip-flops so teis quando queremos forar um estado conhecido (ou
seja, 0) em todos os flip-flops num sistema quando ligado pela primeira vez.
Estes flip-flops podem ser sncronos ou assncronos. Os resettable flip-flop sncronos fazem reset a eles
prprios apenas no flanco ascendente do relgio CLK. Os resettable flip-flop assncronos fazem reset a eles
prprios, logo que RESET se torne TRUE, independente do CLK.

148
Captulo trs Projeto de Lgica Digital

A Figura 3.11 (a) mostra como construir um resettable flip-flop sncrono atravs de um flip-flop D
comum e uma porta AND. Quando for FALSE, a porta AND fora um 0 na entrada do flip-flop.
for TRUE, a porta AND passa D ao flip-flop. Neste exemplo,
Quando um sinal activo a
baixo, o que significa que o sinal de reset executa a sua funo quando est a 0, e no a 1. Ao adicionar
um inversor, o circuito poderia ter aceite em alternativa um sinal de reset activo a baixo. A Figura 3.11 (b)
e Figura 3.11 (c) mostram os smbolos para um resettable flip-flop com reset activo a alto.

Figura 3.11 Resettable flip-flop sncrono: (a) esquemticos, (b, c) smbolos

Um resettable flip-flop assncrono requer modificar a estrutura interna do flip-flop e so deixados para
que o leitor o possa projetar no Exerccio 3.13; no entanto, eles esto frequentemente disponveis para o
projetista como um componente padro.
Como o leitor pode imaginar, os settable flip-flops tambm so usados ocasionalmente. Eles carregam
um 1 no flip-flop quando SET ativado, e tambm esto disponveis na verso sncronas e assncronas. Os
resettable e settable flip-flop tambm podem ter uma entrada de habilitao e podem ser agrupados em
registros de N-bit.
3.2.7. Projeto de Bsculas e Flip-Flops a Nvel do Transstor*
O Exemplo 3.1 mostrou que bsculas e flip-flops exigem um grande nmero de transstores quando
construdas a partir de portas lgicas. Mas o papel fundamental de uma bscula ser transparente ou

149
Captulo trs Projeto de Lgica Digital

opaca, muito parecido com um interruptor. Lembre-se da seco 1.7.7 em que uma porta de transmisso
uma forma eficiente de construir um interruptor CMOS, ento podemos esperar que poderamos tirar
proveito das portas de transmisso para reduzir a contagem do transstor.
Uma bscula compacta D pode ser construda a partir de uma nica porta de transmisso, como
= 0, a porta de transmisso est ON, ento D flui para
mostrado na Figura 3.12 (a). Quando CLK = 1 e
Q e a bscula est transparente. Quando CLK = 0 e = 1, a porta de transmisso est OFF, ento Q est
isolado de D e a bscula est opaca. Esta bscula sofre de duas grandes limitaes:
N de sada flutuante: Quando a bscula est opaca, Q no mantido no seu valor por nenhuma das
portas. Assim Q chamado de n flutuante ou dinmico. Depois de algum tempo, rudo e corrente de fugas
podem perturbar o valor de Q.
Sem buffer: A ausncia de buffers causou defeitos em vrios produtos comerciais. Um aumento de
rudo que puxe D a uma tenso negativa pode ligar o transstor nMOS, tornando a bscula transparente,
mesmo quando CLK = 0. Da mesma forma, um aumento de D acima de VDD pode ligar o transstor pMOS
mesmo quando CLK = 0. E a porta de transmisso simtrica, por isso, pode conduzir para trs com o rudo
em Q a afetar a entrada D. A regra geral que nem a entrada de uma porta de transmisso nem o n de
estado de um circuito sequencial pode ser continuamente exposto ao mundo exterior, onde o rudo
provvel.

Este circuito assume que CLK e A Figura 3.12 (b) mostra uma bscula D de 12 transstores mais robusta utilizada em chips comerciais
esto ambos disponveis. Se no, modernos. Ela ainda construda em torno de uma porta de transmisso chaveada, mas acrescenta
mais dois transstores so
inversores I1 e I2 para isolar a entrada e a sada. O estado da bscula realizado no n N1. O inversor I3 e
necessrios para um inversor de
o buffer tristate, T1, fornece realimentao para transformar N1 num n esttico. Se uma pequena
CLK.
quantidade de rudo ocorre em N1 enquanto CLK = 0, T1 ir conduzir N1 de volta para um valor lgico vlido.
A Figura 3.13 mostra um flip-flop D construdo a partir de duas bsculas estticas controladas pelo CLK e
. Alguns inversores internos redundantes foram removidos, de modo que o flip-flop requer apenas 20

transstores.

150
Captulo trs Projeto de Lgica Digital

Figura 3.12 Esquemtico de uma bscula D

Figura 3.13 Esquemtico de um flip-flop D

3.2.8. Colocando Tudo Junto


Bsculas e flip-flops so os blocos fundamentais dos circuitos sequenciais. Lembre-se que uma bscula
D sensvel ao nvel, enquanto que um flip-flop D disparado por borda. A bscula D transparente
quando CLK = 1, permitindo que a entrada D flua para a sada Q. O flip-flop D copia D para Q no flanco de
subida de CLK. Em todas as outras situaes, bsculas e flip-flops mantm seu estado anterior. Um registro
um banco de vrios flip-flops D que compartilham um sinal CLK comum.

151
Captulo trs Projeto de Lgica Digital

Exemplo 3.2 COMPARAO DE FLIP-FLOPS E BSCULAS


Ben Bitdiddle aplica as entradas CLK e D apresentados na Figura 3.14 a uma bscula D e a um flip-flop D.
Ajude a determinar a sada, Q, de cada dispositivo.
Soluo: A Figura 3.15 mostra as formas de onda da sada, assumindo um pequeno atraso para Q para
responder s alteraes da entrada. As setas indicam a causa de mudana de uma sada. O valor inicial de
Q desconhecido e pode ser 0 ou 1, como indicado pelo par de linhas horizontais. Primeiro, considerando
a bscula. No primeiro flanco de subida do CLK, D = 0, ento Q definitivamente torna-se 0. Sempre que D
muda enquanto CLK = 1, Q tambm o segue. Quando D muda enquanto CLK = 0, ele ser ignorado. Agora
considere o flip-flop. Em cada flanco de subida do CLK, D copiado para Q. Em todas as outras vezes, Q
mantm o seu estado.

Figura 3.14 Exemplo de forma de onda

Figura 3.15 Forma de onda da soluo

152
Captulo trs Projeto de Lgica Digital

3.3. PROJETO DE LGICA SNCRONA


Em geral, os circuitos sequenciais incluem todos os circuitos que no so combinatrios - ou seja,
aqueles cuja resultado no pode ser determinado simplesmente olhando para as entradas atuais. Alguns
circuitos sequenciais so simplesmente magnficos. Esta seo comea por examinar alguns desses
circuitos interessantes. Em seguida, introduz a noo de circuitos sequenciais sncronos e a disciplina
dinmica. Disciplinando-nos ns prprios nos circuitos sequenciais sncronos, podemos desenvolver
modos fceis e sistemticos para analisar e projetar sistemas sequenciais.
3.3.1. Alguns Circuitos Problemticos
Exemplo 3.3 CIRCUITOS ASTVEIS
Alyssa P. Hacker encontrou trs inversores interligados numa malha, como se mostra na Figura 3.16.
A sada do terceiro inversor realimentado para o primeiro inversor. Cada inversor tem um atraso de
propagao de 1 ns. Determinar o que o circuito faz.
Soluo: Suponha que o n X est inicialmente a 0. Ento, Y = 1, Z = 0, e, portanto, X = 1, o que Figura 3.16 Trs inversores em malha
inconsistente com a nossa hiptese inicial. O circuito no tem estados estveis e diz-se ser astvel ou
instvel. A Figura 3.17 apresenta o comportamento do circuito. Se X sobe no instante 0, Y vai cair em 1
ns, Z ir subir em 2 ns, e X vai cair de novo em 3 ns. Por sua vez, Y vai subir em 4 ns, Z vai cair em 5 ns, e
X vai subir novamente em 6 ns, e, em seguida, o padro ir se repetir. Cada n oscila entre 0 e 1, com
um perodo (tempo de repetio) de 6 ns. Este circuito chamado um oscilador em anel.
O perodo do oscilador em anel depende do atraso de propagao de cada inversor. Este atraso
depende da forma como o inversor foi fabricado, da tenso de alimentao, e at mesmo da
temperatura. Portanto, o perodo de funcionamento do anel oscilador difcil de prever com preciso.
Em suma, o oscilador em anel um circuito sequencial com zero entradas e uma sada, que muda
periodicamente.

153
Captulo trs Projeto de Lgica Digital

Figura 3.17 Formas de onda do oscilador em anel

Figura 3.18 Uma bscula D melhorada (?)

Figura 3.19 Formas de onda ilustrando as condies de corrida da bscula

154
Captulo trs Projeto de Lgica Digital

Exemplo 3.4 CONDIES DE CORRIDA


Ben Bitdiddle desenhou uma nova bscula D que alega ser melhor do que a da Figura 3.7, porque usa
menos portas. Ele escreveu a tabela verdade para encontrar a sada, Q, dadas as duas entradas, D e CLK,
e o antigo estado da partida, Qprv. Com base nesta tabela verdade, ele obteve as equaes Booleanas.
Ele obtm Qprv realimentando a sada, Q. O seu projeto mostrado na Figura 3.18. A sua bscula trabalha
corretamente, independente dos atrasos de cada porta?
Soluo: A Figura 3.19 mostra que o circuito tem uma condio de corrida que faz com que ele falhe
quando certas portas so mais lentas do que outras. Supondo CLK = D = 1. A bscula transparente e
passa D para fazer Q = 1. Agora, CLK cai. A bscula deve-se lembrar do seu valor antigo, mantendo Q =
1. No entanto, suponha que o atraso atravs do inversor de CLK para bastante longo, em
comparao com os prazos de portas AND e OR. Ento os ns N1 e Q podem ambos cair antes que

suba. Nesse caso, N2 nunca ir subir, e Q fica preso a 0
Este um exemplo de projeto de circuito assncrono em que as sadas esto diretamente
realimentadas para as entradas. Os circuitos assncronos so conhecidos por terem condies de
corrida, onde o comportamento do circuito depende de qual dos dois caminhos atravs de portas lgicas
mais rpido. Um circuito pode trabalhar, enquanto um aparentemente idntico, construdo a partir
de portas com atrasos um pouco diferentes, pode no funcionar. Ou o circuito pode funcionar apenas
em determinadas temperaturas e tenses em que os atrasos esto corretos. Estas avarias so
extremamente difceis de rastrear.

3.3.2. Circuitos Sequenciais Sncronos


Os dois exemplos anteriores contm circuitos chamados caminhos cclicos, nos quais as sadas so
realimentadas diretamente para as entradas. Eles so circuitos sequenciais em vez de circuitos
combinatrios. A lgica combinatria no tem caminhos cclicos e nem restries de corrida. Se as
entradas so aplicadas lgica de combinaes, as sadas tero sempre o valor correto dentro de um
atraso de propagao. No entanto, os circuitos sequenciais com caminhos cclicos podem ter corridas

155
Captulo trs Projeto de Lgica Digital

O tpcq representa o tempo de indesejveis ou comportamento instvel. A anlise de problemas nesses circuitos demorada, e muitas
propagao do relgio para Q, em que pessoas brilhantes cometeram erros.
Q indica a sada do circuito sequencial
Para evitar estes problemas, os projetistas quebram os caminhos cclicos atravs da insero de
sncrono. O tccq significa o tempo de
registros algures no caminho. Isso transforma o circuito numa coleo de lgica combinatria e de
contaminao a partir do relgio para
Q. Estes so anlogos ao tpd e tcd na registros. Os registros contm o estado do sistema, que muda apenas no flanco do relgio, por isso
lgica combinatria. dizemos que o estado sincronizado com o relgio. Se o relgio suficientemente lento, de modo que
as entradas para todos os registros estejam definidas antes da prxima transio de relgio, todas as
corridas so eliminados. Adoptando esta disciplina de usar sempre registros no caminho de
Esta definio de um circuito realimentao leva-nos definio formal de um circuito sequencial sncrono.
sequencial sncrono suficiente, mas
mais restritiva do que o necessrio. Lembre-se que um circuito definido pelos seus terminais de entrada e de sada e pelas suas
Por exemplo, em microprocessadores especificaes funcionais e temporais. Um circuito sequencial tem um conjunto finito de estados
de alto desempenho, alguns registros discretos {S0, S1, ..., Sk-1}. Um circuito sequencial sncrono tem uma entrada de relgio, cujos flancos
podem receber relgios atrasados ascendentes indicam uma sequncia de tempos em que as transies de estado ocorrem. Muitas vezes
para espremer o ltimo bit de usamos os termos estado atual e prximo estado para distinguir o estado do sistema no presente do
desempenho. Da mesma forma, estado em ele vai entrar na prxima transio de relgio. A especificao funcional detalha o prximo
alguns microprocessadores usam
estado e o valor de cada sada para cada combinao possvel de valores de estado e de entrada atual.
bsculas em vez de registros. No
A especificao de tempo consiste num limite superior, tpcq, e num limite inferior, tccq, do tempo entre o
entanto, a definio adequada para
todos os circuitos sequenciais flanco de subida do relgio at que ocorram as mudanas na sada, bem como a tempo de setup e hold,
sncronos abordados neste livro e tsetup e thold, indicam quando as entradas devem estar estveis em relao ao flanco de subida do relgio.
para a maioria dos sistemas digitais
As regras de composio de circuitos sequenciais sncronos ensinam-nos que um circuito um circuito
comerciais.
sequencial sncrono, se ele possui elementos de circuito interligados de tal forma que:
Cada elemento do circuito ou um registro ou um circuito combinatrio
Pelo menos um elemento do circuito um registro
Todos os registros recebem o mesmo sinal de relgio
Cada percurso cclico contm pelo menos um registro.

Figura 3.20 Estado atual e


prximo de flip-flop
156
Captulo trs Projeto de Lgica Digital

Circuitos sequenciais que no so sncronos so chamados de assncronos.


Um flip-flop o mais simples circuito sequencial sncrono. Ele tem uma entrada, D, um relgio, CLK,
uma sada, Q, e dois estados, {0, 1}. A especificao funcional de um flip-flop que o prximo estado
D e que a sada, Q, o estado atual, como mostrado na Figura 3.20.
Ns muitas vezes designamos o estado atual de varivel S e o prximo estado de varivel . Neste
caso, a linha depois do S indica o prximo estado, no inverso. A temporizao de circuitos sequenciais
ser analisada na Seo 3.5.
Dois outros tipos comuns de circuitos sequenciais sncronos so chamados de mquinas de estados
finitos e pipelines. Estes sero abordados mais adiante neste Captulo.

Figura 3.21 Exemplos de circuitos

157
Captulo trs Projeto de Lgica Digital

Exemplo 3.5 CIRCUITOS SEQUENCIAS SNCRONOS


Qual dos circuitos da Figura 3.21 so circuitos sequenciais sncronos?
Soluo: O circuito (a) combinatrio, e sequencial, porque no tem registros. O (b) um circuito
sequencial simples, sem realimentao. O (c) no nem um circuito combinatrio, nem um circuito
sequencial sncrono, porque tem uma bscula que no nem um registro nem um circuito combinatrio.
Os circuitos (d) e (e) so circuitos sncronos de lgica sequencial; so duas formas de mquinas de
estados finitos, que so discutidas na Seo 3.4. O circuito (f) no nem sequencial combinatria nem
sncrona, porque tem um percurso cclico a partir da sada da lgica combinatria volta para a entrada
da mesma lgica, mas sem um registro no caminho. O circuito (g) de lgica sequencial sncrona sob a
forma de um pipeline, que estudaremos na Seo 3.6. O circuito (h) no , falando rigorosamente, um
circuito sequencial sncrono, porque o segundo registro recebe um sinal de relgio diferente do primeiro,
retardado por dois inversores de atraso.

3.3.3. Circuitos Sncronos e Assncronos


O projeto de circuitos assncronos, em teoria, mais geral do que o projeto de circuitos sncronos,
porque a temporizao do sistema no limitada pelos registros de sincronizao. Assim como os
circuitos analgicos so mais gerais do que os circuitos digitais, pois os circuitos analgicos podem usar
qualquer tenso, os circuitos assncronos so mais gerais do que circuitos sncronos, porque eles podem
usar qualquer tipo de realimentao. No entanto, os circuitos sncronos provaram ser mais fceis de
projetar e usar do que os circuitos assncronos, assim como os digitais so mais fceis do que os circuitos
analgicos. Apesar de dcadas de pesquisa sobre circuitos assncronos, praticamente todos os sistemas
digitais so essencialmente sncronos.
Claro que, os circuitos assncronos s vezes so necessrios quando se comunica entre sistemas com
diferentes relgios ou quando se recebe entradas em tempos arbitrrios, assim como os circuitos
analgicos so necessrios ao se comunicar com o mundo real de tenses contnuas. Alm disso, a
investigao em circuitos assncronos continua a gerar detalhes interessantes, alguns dos quais podem
melhorar muito os circuitos sncronos.

158
Captulo trs Projeto de Lgica Digital

3.4. MQUINAS DE ESTADOS FINITOS


Os circuitos sequenciais sncronos podem ser desenhados nas formas apresentadas na Figura 3.22.
Estas formas so chamadas de mquinas de estados finitos (FSM). Eles obtiveram este nome porque
um circuito com k registros pode estar num de um nmero finito (2k) de estados nicos. Uma FSM
As mquinas de Moore e de Mealy
tem entradas M, N sadas, e k bits de estado. Ele tambm recebe um relgio e, opcionalmente, um
receberam o nome dos seus
sinal de reset. Uma FSM composta por dois blocos de lgica combinatria, lgica do estado seguinte inventores, investigadores que
e lgica de sada, e um registro que armazena o estado. Em cada flanco do relgio, a FSM avana para desenvolveram a teoria de
o prximo estado, que foi calculado com base no estado atual e nas entradas. Existem duas classes autmatos, os fundamentos
gerais de mquinas de estados finitos, caracterizadas pelas suas especificaes funcionais. Nas matemticos das mquinas de estado,
mquinas de Moore, as sadas dependem apenas do estado atual da mquina. Nas mquinas de na Bell Labs. Edward F. Moore (1925-
Mealy, as sadas dependem tanto do estado atual e como das entradas atuais. As mquinas de estados 2003), no deve ser confundido com o
finitos fornecem uma forma sistemtica de projetar circuitos sequenciais sncronos dada uma fundador da Intel Gordon Moore,
especificao funcional. Este mtodo ir ser explicado no restante desta seco, comeando com um publicou seu artigo seminal,
exemplo. Gedanken-experiments on Sequential
Machines em 1956. Em seguida,
3.4.1. Projeto Exemplo de FSM tornou-se professor de matemtica e
Para ilustrar a concepo das FSM, considere o problema de inventar um controlador para um cincia da computao na
semforo num cruzamento movimentado no campus. Os estudantes de engenharia esto a Universidade de Wisconsin.
deambular entre os dormitrios e os laboratrios na Av. Acadmica. Eles esto ocupados lendo sobre George H. Mealy publicou um mtodo
as FSM nos seus livros favoritos e no esto olhando para onde esto indo. Os jogadores de futebol de sntese de circuitos sequenciais em
esto a mover-se apressadamente entre os campos de atletismo e sala de jantar em Blvd. Bravado. 1955. Posteriormente, ele escreveu o
Eles esto jogando bola para trs e para frente e no esto tambm olhando para onde esto indo. primeiro sistema operativo da Bell
Vrios ferimentos graves j ocorreram no cruzamento destas duas ruas, e o decano dos estudantes Labs para o computador IBM 704. Mais
pede a Ben Bitdiddle para instalar um semforo antes que haja mortes. tarde, ele se juntou Universidade de
Harvard.

159
Captulo trs Projeto de Lgica Digital

Figura 3.22 Mquinas de estados finitos: (a) A mquina de Moore, (b) mquina de Mealy

Ben decide resolver o problema com uma FSM. Ele instala dois sensores de trfego, TA e TB, na Av.
Acadmica e no Blvd. Bravado, respectivamente. Cada sensor indica TRUE se os alunos esto presentes
e FALSE se a rua est vazia. Ele tambm instala dois semforos, LA e LB, para controlar o trfego. Cada
luz recebe entradas digitais para especificar se ela deve estar verde, amarela ou vermelha. Por isso, a
sua FSM tem duas entradas, TA e TB, e duas sadas, LA e LB. O cruzamento com luzes e sensores so
mostrados na Figura 3.23. Ben fornece um relgio com um perodo de 5 segundos. Em cada pulso de
relgio (flanco ascendente), as luzes podem mudar de acordo com os sensores de trfego. Ele tambm
fornece um boto de reset para que os tcnicos possam colocar o controlador num estado inicial
conhecido ao lig-lo. A Figura 3.24 mostra uma vista da caixa preta da mquina de estados.
O prximo passo de Ben esboar o diagrama de transio de estado, mostrado na Figura 3.25, para
indicar todos os possveis estados do sistema e as transies entre esses estados. Quando o sistema
reiniciado, as luzes esto verde na Av. Acadmica e vermelho em Blvd. Bravado. A cada 5 segundos, o
controlador examina o padro de trfego e decide o que fazer a seguir. Enquanto o trfego est presente
na Av. Acadmico, as luzes no mudam. Quando j no existe trfego na Av. Acadmica, a luz da Av.

160
Captulo trs Projeto de Lgica Digital

Acadmica torna-se amarela durante 5 segundos antes de ficar vermelha, e a luz do Blvd. Bravado fica
verde. Da mesma forma, a luz da Blvd. Bravado permanece verde enquanto o trfego est presente na
avenida, em seguida, torna-se amarela e, eventualmente, vermelha.

Figura 3.23 Mapa do campus

Figura 3.24 Vista de caixa preta da mquina de estados finitos

161
Captulo trs Projeto de Lgica Digital

Observe que os estados so


designados como S0, S1, etc. As
verses subscritas, S0, S1, etc., referem-
se aos bits de estado.

Figura 3.25 Diagrama da transio de estados

Num diagrama de transio de estado, os crculos representam os estados e os arcos representam as


transies entre estados. As transies ocorrem no flanco ascendente do relgio; que no
representado no diagrama, porque ele est sempre presente num circuito sequencial sncrono. Alm
disso, o relgio controla quando devem ocorrer as transies, enquanto que o grfico indica que
transies ocorrem. O arco ilustrado apontando do espao exterior para o estado S0 indica que o sistema
deve entrar nesse estado aps reset, independentemente do estado anterior em que se encontrava. Se
um estado tem vrios arcos deixando-o, os arcos so rotulados para mostrar que entrada aciona cada
transio. Por exemplo, quando no estado S0, o sistema ir permanecer nesse estado se TA TRUE e
passar para S1 se TA FALSE. Se um estado tem um nico arco a deix-lo, a transio ocorre sempre,
independentemente das entradas. Por exemplo, quando no estado S1, o sistema ir sempre transitar
para S2. Os valores que as sadas tm enquanto num determinado estado so indicados no estado. Por
exemplo, enquanto no estado S2, LA vermelha e LB verde.
O Ben reescreve o diagrama de transio de estado como uma tabela de transio de estado (Tabela
3.1 que indica, para cada estado e entrada, qual ser o prximo estado, S'. Note que a tabela usa o

162
Captulo trs Projeto de Lgica Digital

smbolo (X) (dont care) sempre que o prximo estado no depende de uma entrada em particular. Alm
disso, note que Reset omitido da tabela. Em vez disso, usamos resettable flip-flops que sempre vo
para o estado S0 quando reinicia, independentes das entradas.
O diagrama de transio de estado abstrato usando estados designadas {S0, S1, S2, S3} e sadas
designadas {vermelha, amarela, verde}. Para construir um circuito real, aos estados e s sadas devem
ser atribudas codificaes binrias. Ben escolhe as codificaes dadas nas Tabela 3.2 e Tabela 3.3. Cada
estado e cada sada so codificados com dois bits: S1:0, LA1:0, e LB1:0.
Tabela 3.1 Tabela de transio de estados

Tabela 3.2 Codificao de estados

163
Captulo trs Projeto de Lgica Digital

Tabela 3.3 Codificao das sadas

O Ben actualiza a tabela de transio do estado para usar estas codificaes binrias, como mostra a
Tabela 3.4. A tabela de transio de estado revista uma tabela verdade especificando o prximo estado
lgico. Ela define o prximo estado, S', como uma funo do estado actual, S, e das entradas.
A partir desta tabela, fcil serem lidas as equaes Booleanas para o prximo estado na forma de
soma de produtos.

1 = 1 0 + 1 0
+ 1 0
0 = 1 0
+ 1 0
(3.1)
As equaes podem ser simplificadas usando mapas de Karnaugh, mas muitas vezes faz-lo por
inspeo torna-se mais fcil. Por exemplo, os termos TB e
na equao S'1 so claramente redundantes.
Assim S'1 reduz-se a uma operao XOR. Equao 3.2 d as equaes simplificadas de prximo estados.
Tabela 3.4 Codificao binria das transies de estado

164
Captulo trs Projeto de Lgica Digital

Tabela 3.5 Tabela de sada

1 = 1 0
(3.2)
0 = 1 0
+ 1 0

Da mesma forma, Ben escreve uma tabela de sada (Tabela 3.5), indicando, para cada estado, qual
deve ser a sada nesse estado. Novamente, fcil de serem lidas e simplificar as equaes Booleanas
para as sadas. Por exemplo, observar que LA1 TRUE apenas nas linhas onde S1 TRUE.
= 1
0 = 1 0
(3.3)
= 1
0 = 1 0
Finalmente, Ben esboa a sua FSM de Moore na forma da Figura 3.22 (a). Em primeiro lugar, ele
desenha o registro de estado de dois bits, como mostrado na Figura 3.26 (a). Em cada flanco do relgio,
o estado de registro copia o prximo estado, S'1:0, para se tornar o estado S1:0. O registro de estado
recebe um reset sncrono ou assncrono para inicializar a FSM no arranque. Em seguida, ele desenha a
lgica do prximo estado, com base na equao 3.2, que calcula o prximo estado a partir do estado
atual e das entradas, como mostrado na Figura 3.26 (b). Finalmente, ele desenha a lgica de sada, com
base na equao 3.3, que calcula as sadas a partir do estado atual, como mostrado na Figura 3.26 (c).
A Figura 3.27 mostra um diagrama temporal que ilustra o controlador de semforo passando por
uma sequncia de estados. O diagrama mostra CLK, Reset, as entradas TA e TB, o prximo estado S', o
estado S, e as sadas LA e LB. As setas indicam causalidade; por exemplo, alterando o estado faz com que

165
Captulo trs Projeto de Lgica Digital

as sadas se alterem, e mudando as entradas faz com que o prximo estado a mude. As linhas a tracejado
indicam os flancos ascendentes do CLK, quando o estado muda.
Este esquema usa algumas portas AND
com negaes nas entradas. Elas
podem ser construdas com portas
AND e inversores de entrada, com
portas NOR e inversores para as
entradas no negadas ou com alguma
outra combinao de portas. A melhor
escolha depende da tecnologia de
implementao em particular.

Figura 3.26 Circuito da mquina de estados para o controlador de semforo

Figura 3.27 Diagrama temporal do controlador de semforo

166
Captulo trs Projeto de Lgica Digital

O relgio tem um perodo de 5 segundos, assim os semforos mudam no mximo uma vez a cada 5
segundos. Quando a mquina de estados finitos ligada pela primeira vez, o seu estado desconhecido,
como indicado pelos pontos de interrogao. Portanto, o sistema deve ser redefinido de modo a coloc- Apesar dos melhores esforos de Ben,
os alunos no prestam ateno aos
lo num estado conhecido. Neste diagrama temporal, S redefinido imediatamente para S0, indicando
semforos e as colises continuam a
que os resettable flip-flops assncronos esto sendo usados. No estado S0, a luz LA est verde e a luz LB
ocorrer. O decano dos estudantes
est vermelha. pergunta-lhe a ele e Alyssa para
Neste exemplo, o trfego chega imediatamente na Av. Acadmica. Portanto, o controlador permanece projetar uma catapulta para lanar os
no estado S0, mantendo LA verde mesmo que o trfego chegue no Blvd. Bravado e inicia a espera. Aps estudantes de engenharia
diretamente para os telhados dos
15 segundos, todo o trfego passou na Av. Acadmica e TA cai. No relgio seguinte, o controlador segue
seus dormitrios atravs das janelas
para o estado S1, transformando LA em amarelo. Em mais 5 segundos, o controlador prossegue para o
abertas do laboratrio, ignorando o
estado S2 em que LA fica vermelha e LB fica verde. O controlador espera no estado S2 at que todo o cruzamento problemtico. Mas isso
trfego na Blvd. Bravado passe. Ele ento transita para S3, fazendo LB amarelo. Depois de 5 segundos, o assunto para outro livro.
controlador entra no estado S0, transformando LB em vermelho e LA em verde. O processo repete
indefinidamente.
3.4.2. Codificao de Estados
No exemplo anterior, as codificaes de estado e de sada foram selecionadas arbitrariamente. Uma
escolha diferente teria resultado num circuito diferente. Uma pergunta natural como determinar a
codificao que produz o circuito com o menor nmero de portas lgicas ou o atraso de propagao mais
curto. Infelizmente, no existe uma maneira simples de encontrar a melhor codificao, exceto tentar
todas as possibilidades, o que invivel quando o nmero de estados elevado. No entanto, muitas
vezes possvel escolher uma boa codificao por inspeo, para que os estados ou as sadas relacionadas
partilhem bits. Ferramentas computer-aided (CAD) so tambm boas na busca do conjunto de possveis
codificaes e selecionando um razovel.
Uma deciso importante na codificao de estados a escolha entre codificao binria e a codificao
one-hot. Com codificao binria, como foi usada no exemplo do controlador de semforo, cada estado
est representado como um nmero binrio. Como os K nmeros binrios a poderem ser representados
pelos log2K bits, um sistema com K estados apenas necessita de log2K bits de estado.

167
Captulo trs Projeto de Lgica Digital

Na codificao one-hot, um bit separado de estado usado para cada estado. Chama-se one-hot
porque apenas um bit est "quente" ou verdadeiro em qualquer momento. Por exemplo, uma FSM
codificada em one-hot com trs estados teria codificaes de estados de 001, 010 e 100. Cada bit de
estado armazenado num flip-flop, ento uma codificao one-hot requer mais flip-flops do que a
codificao binria. No entanto, com a codificao one-hot, a lgica de prxima estado e sada muitas
vezes mais simples, de modo que so necessrios menos portas. A melhor escolha de codificao
depende do FSM especfico.

Exemplo 3.6 CODIFICAO DOS ESTADOS DE UMA FSM


Um contador de diviso-por-N possui uma sada e no tem entradas. A sada Y est HIGH para N ciclos
de relgio. Em outras palavras, a sada divide a frequncia do relgio por N. O diagrama de transio de
estado e a forma de onda para um contador divisor-por-3 mostrado na Figura 3.28. Esboce o circuito
para este contador usando codificao de estado binrio e one-hot.

Figura 3.28 Contador divide-por-3 (a), forma de onda e (b) diagrama de transio de estado

Soluo: As Tabela 3.6 e Tabela 3.7 mostram as transies de estado e sada antes da codificao.
A Tabela 3.8 compara a codificao binria e one-hot para os trs estados.
A codificao binria usa dois bits de estado. Usando esta codificao, a tabela de transio de estado
mostrada na Tabela 3.9. Note-se que no existem entradas; o prximo estado depende apenas do

168
Captulo trs Projeto de Lgica Digital

estado atual. A tabela de sada deixada como um exerccio para o leitor. As equaes de prximo estado
e de sada so:

1 = 1 0
0 = 1 0 (3.4)

= 1 0 (3.5)
Tabela 3.6 Tabela de transio de estado do contador divide-por-3

Tabela 3.7 Tabela de sada do contador divide-por-3

A codificao one-hot usa trs bits de estado. A tabela de transio de estado para esta codificao
mostrada na Tabela 3.10 e a tabela de sada novamente deixada como um exerccio para o leitor. As
equaes de prximo estado e de sada so as seguintes:
2 = 1
1 = 0 (3.6)
0 = 2
= 0 (3.7)

169
Captulo trs Projeto de Lgica Digital

A Figura 3.29 mostra os esquemas para cada um destes projetos. Note-se que o hardware para o
projeto da codificada binria poderia ser optimizado para compartilhar a mesma porta entre Y e S'0.
Observe tambm que a codificao one-hot requer flip-flops com (s) settable e (r) resettable para
inicializar a mquina para S0 no arranque. A melhor escolha de implementao depende do custo
relativo das portas e dos flip-flops, mas o projeto one-hot geralmente prefervel para este exemplo
especfico.
Tabela 3.8 Codificaes e binria e one-hot para contador dividir-por-3

Tabela 3.9 Tabela de transio de estado com codificao binria

Tabela 3.10 Tabela de transio de estado com codificao one-hot

170
Captulo trs Projeto de Lgica Digital

Uma maneira fcil de lembrar a


diferena entre os dois tipos de
mquinas de estados finitos que uma
mquina de Moore geralmente tem
mais estados do que uma mquina de
Mealy para um determinado
problema.

Figura 3.29 Contador divide-por-3 (a), forma de onda e (b) diagrama de transio de estado

3.4.3. Mquinas de Moore e de Mealey


At agora, temos mostrado exemplos de mquinas de Moore, na qual a sada depende apenas do
estado do sistema. Assim, nos diagramas de transio de estado para mquinas de Moore, as sadas so
rotuladas nos crculos. Lembre-se que as mquinas de Mealy so muito parecidas com as mquinas de
Moore, mas as sadas podem depender tanto das entradas, como do estado atual. Assim, nos diagramas
de transio de estado para mquinas de Mealy, as sadas so colocadas nos arcos em vez de nos crculos.
O bloco de lgica combinatria que calcula as sadas usa o estado atual e as entradas, como foi mostrado
na Figura 3.22 (b).

Exemplo 3.7 MQUINA DE MOORE VS MQUINA DE MEALY


Alyssa P. Hacker dono de um caracol robtico de estimao com um crebro FSM. O caracol rasteja
a partir da esquerda para a direita ao longo de uma fita de papel contendo uma sequncia de 1 e 0. Em
cada ciclo de clock, o caracol rasteja para o prximo bit. O caracol sorri quando os dois ltimos bits ao
longo dos quais se arrastou so, da esquerda para a direita, 01. Projete a FSM para calcular quando o
caracol deve sorrir. A entrada A a parte debaixo das antenas do caracol. A sada Y TRUE quando o

171
Captulo trs Projeto de Lgica Digital

caracol sorri. Compare os projetos das mquinas de estado de Moore e Mealy. Esboce um diagrama
temporal para cada mquina que mostra a entrada, os estados e a sada quando o caracol de Alyssa se
arrasta ao longo da sequncia 0100110111.
Soluo: A mquina de Moore requer trs estados, como mostrado na Figura 3.30 (a). Considere que
o diagrama de transio de estado est correto. Em particular, por que que h um arco de S2 para S1
quando a entrada est a 0?
Em comparao, a mquina Mealy requer apenas dois estados, como mostrado na Figura 3.30 (b)
(arco identificado como A/Y. A o valor da entrada que causa essa transio, e Y a sada
correspondente.
As Tabela 3.11 e Tabela 3.12 mostram a transio de estado e tabela de sada para a mquina de
Moore. A mquina de Moore requer pelo menos dois bits de estado. Considere o uso da codificao
binria de estado: S0 = 00, S1 = 01, e S2 = 10. As Tabela 3.13 e Tabela 3.14 reescrevem as tabelas de
transio de estado e de sada com estas codificaes.
A partir dessas tabelas, encontramos as seguintes equaes de estado e de sada por inspeo. Note-
se que estas equaes so simplificadas fazendo uso do fato de que o estado 11 no existe. Deste
modo, o prximo estado e sada correspondente para o estado que no existe so dont care (no
mostrado nas tabelas). Usamos os dont care para minimizar as nossas equaes.

1 = 0 (3.8)
0 =
= 1 (3.9)
A Tabela 3.15 mostra a transio de estado e de sada para a mquina de Mealy. A mquina de
Mealy requer apenas um bit de estado. Considere o uso de uma codificao de estado binria: S0 = 0
e S1 = 1. A Tabela 3.16 reescreve a transio de estado e de sada com estas codificaes.
A partir dessas tabelas, encontramos as seguintes equaes de estado e de sada por inspeo.

0 = (3.10)
172
Captulo trs Projeto de Lgica Digital

= 0 (3.11)
Os esquemas das mquinas de Moore e de Mealy so mostrados na Figura 3.31. Os diagramas
temporais para cada mquina so mostrados na Figura 3.32. As duas mquinas seguem uma sequncia
diferente de estados. Alm disso, a sada da mquina Mealy sobe um ciclo mais cedo porque responde
entrada em vez de esperar a mudana de estado. Se a sada da mquina de Mealy fosse atrasada atravs
de um flip-flop, ela iria coincidir com a sada da mquina de Moore. Quando escolher o seu estilo do
projeto da FSM, o leitor deve considerar quando quer que as suas sadas respondam.

Figura 3.30 Diagramas de transio de estado da FSM: (a) A mquina de Moore, (b) mquina de
Mealy

Tabela 3.11 Tabela de transio de estado da mquina de Moore

173
Captulo trs Projeto de Lgica Digital

Tabela 3.12 Tabela de sada da mquina de Moore

Tabela 3.13 Tabela de transio de estado da mquina de Moore com codificaes de estado

Tabela 3.14 Tabela de sada da mquina de Moore com codificaes de estado

174
Captulo trs Projeto de Lgica Digital

Tabela 3.15 Tabela de transio de estado e sada da mquina de Mealy

Tabela 3.16 Tabela de transio de estado da mquina de Mealy com codificaes de estado

175
Captulo trs Projeto de Lgica Digital

3.4.4. Factoring Mquinas de Estado


O projeto de FSM complexas frequentemente mais fcil se elas forem divididas em vrias
mquinas de estado mais simples que interagem de tal modo que as sadas de algumas mquinas so
as entradas de outras. Esta aplicao da hierarquia e modularidade chamada de factoring de
mquinas de estado.

Figura 3.31 Esquemas de FSM para mquinas (a) Moore e (b) de Mealy

Figura 3.32 Diagramas temporais para as mquinas de Moore e de Mealy

176
Captulo trs Projeto de Lgica Digital

Exemplo 3.8: MQUINAS DE ESTADO UNFACTORED E FACTORED


Modifique o controlador de semforo da Seo 3.4.1 para ter um modo de desfile, o que mantm a
luz verde para o Boulevard Bravado enquanto os espectadores e a banda marcham para jogos de futebol
em grupos dispersos. O controlador recebe mais duas entradas: P e R. Ativando P por pelo menos um
ciclo entra-se no modo de desfile. Ativando R durante pelo menos um ciclo sai-se do modo de desfile.
Quando em modo de desfile, o controlador procede atravs de sua sequncia normal at LB ficar verde,
em seguida, permanece nesse estado com LB verde at que o modo desfile termine.
Em primeiro lugar, esboce um diagrama de transio de estado para uma nica FSM, como mostrado
na Figura 3.33 (a). Em seguida, esboce os diagramas de transio de estado para duas FSM interagindo,
como mostrado na Figura 3.33 (b). O Modo FSM ativa a sada M quando se est no modo de desfile. A
Lights FSM controla as luzes com base em M e nos sensores de trfego, TA e TB.
Soluo: A Figura 3.34 (a) mostra o desenho da EFM. Os estados S0 a S3 lidam com o modo normal. Os
estados S4 a S7 lidam com o modo desfile. As duas metades do diagrama so quase idnticas, mas no
modo de parada, a FSM permanece no estado S6 com a luz verde no Blvd. Bravado. As entradas P e R
controlam o movimento entre estas duas metades. O projeto de FSM confuso e entediante. A Figura
3.34 (b) mostra o projeto factored da FSM. O Modo FSM tem dois estados para controlar se as luzes esto
no modo normal ou no modo desfile. A Ligth FSM modificada para permanecer em S2, enquanto M
TRUE.

177
Captulo trs Projeto de Lgica Digital

Figura 3.33 Projetos para a FSM controlador de trfego modificada a) nico e (b) factored

178
Captulo trs Projeto de Lgica Digital

Figura 3.34 Diagrama de transio de estados: (a) no factored (b) factored

3.4.5. Obtendo uma FSM de um Esquema


A derivao do diagrama de transio de estado a partir de um esquema segue quase o processo
inverso do projeto de uma FSM. Este processo pode ser necessrio, por exemplo, quando se pega num
projeto com documentada incompleta ou caso seja necessrio fazer engenharia reversa do sistema de
outra pessoa.

179
Captulo trs Projeto de Lgica Digital

Examine o circuito, ativando as entradas, sadas, e bits de estado.


Escreva as equaes dos prximos estado e de sada.
Crie as tabelas dos prximos estado e de sada.
Reduza a tabela de prximo estado para eliminar estados inacessveis.
Atribua a cada combinao de bits de estado vlidos um nome.
Reescreva a tabela de prximo estado e de sada com nomes de estado.
Desenhe o diagrama de transio de estado.
Escreva por palavras o que a FSM faz.
Na etapa final, deve ter o cuidado de descrever sucintamente o objetivo global e funo da FSM -
No basta voltar a descrever cada transio do diagrama de transio de estado.

Exemplo 3.9 OBTER UMA FSM DO SEU CIRCUITO


Alyssa P. Hacker chega em casa, mas o teclado do seu acesso foi religado e o seu cdigo antigo no
funciona. Um pedao de papel est colado a ele tal como se mostra no diagrama do circuito da Figura
3.35. Alyssa pensa que o circuito poder ser uma mquina de estados finitos e decide derivar o
diagrama de transio de estado para ver a ajuda a abrir a porta.
Soluo: Alyssa comea por examinar o circuito. A entrada A1:0 e a sada Unlock. Os bits de estado
j esto marcados na Figura 3.35. Esta uma mquina de Moore, porque a sada depende apenas dos
bits de estado. Do circuito, ela retira diretamente as equaes de prximo estado e de sada:

1 = 0
1 0

0 = 1 0 1 0 (3.12)
= 1

180
Captulo trs Projeto de Lgica Digital

Figura 3.35 Circuito da FSM encontrada no Exemplo 3.9

Em seguida, ela escreve as equaes das tabelas de prximo estado e de sada, como mostrado nas
Tabela 3.17 e Tabela 3.18, colocando primeiro 1 nas posies das tabelas como indicado pela Equao
3.12. Ela coloca em seguida 0 nos restantes lugares.
Alyssa reduz a tabela, removendo os estados no utilizados e combinando linhas dont cares. O estado
S1:0 = 11 nunca listado como sendo um possvel prximo estado na Tabela 3.17, ento as linhas com este
estado atual so removidas. Para o estado atual S1:0 = 10, o prximo estado sempre S1:0 = 00,
independentemente das entradas, por isso dont care so inseridos para as entradas. As tabelas reduzidas
so mostradas nas Tabela 3.19 e Tabela 3.20.
Ela atribui nomes a cada combinao de bits de estado: S0 S1:0 = 00, S1 S1:0 = 01 e S2 S1:0 = 10. As
Tabela 3.21 e Tabela 3.22 mostram as tabelas de prximo estado e de sada com os nomes de estado.

181
Captulo trs Projeto de Lgica Digital

Tabela 3.17 Tabela de prximo estado derivada do circuito na Figura 3.36

Tabela 3.18 Tabela da sada proveniente do circuito da Figura 3.35

182
Captulo trs Projeto de Lgica Digital

Tabela 3.19 Tabela simplificada do prximo estado

Tabela 3.20 Tabela simplificada da sada

183
Captulo trs Projeto de Lgica Digital

Tabela 3.21 Tabela simblica do prximo estado

Tabela 3.22 Tabela simblica da sada

184
Captulo trs Projeto de Lgica Digital

Figura 3.36 Diagrama de transio de estado da FSM encontrada do Exemplo 3.9

Alyssa escreve o diagrama de transio de estado mostrado na Figura 3.36 usando as Tabela 3.21 e
Tabela 3.22. Por inspeo, ela pode ver que a mquina de estados finitos destranca a porta s depois de
detectar um valor de entrada, A1:0, de 3 seguido por um valor de entrada de 1. A porta , ento, novamente
bloqueada. Alyssa tenta este cdigo no teclado da porta e esta abre-se!

3.4.6. Reviso das FSM


As mquinas de estados finitos so uma forma poderosa de projetar sistematicamente circuitos
sequenciais a partir de uma especificao escrita. Use o seguinte procedimento para projetar um FSM:
Identifique as entradas e as sadas.
Esboce um diagrama de transio de estado.

185
Captulo trs Projeto de Lgica Digital

Para uma mquina de Moore:


Faa uma tabela de transio de estado.
Faa uma tabela de sada.
Para uma mquina Mealy:
Escreva uma tabela combinada das transies de estado e de sada.
Selecione a codificao dos estados a sua seleo afeta o projeto do hardware.
Escreva as equaes Booleanas para a lgica do prximo estado e de sada.
Esboce o esquema de circuito.

Vamos usar repetidamente as FSM para projetar sistemas digitais complexos ao longo deste livro.

3.5. TEMPORIZAO DA LGICA SEQUENCIAL


Lembre-se que um flip-flop copia a entrada D para a sada Q no flanco ascendente do relgio. Este
processo chamado de amostragem (sampling) de D na borda ascendente do relgio. Se D est estvel
a 0 ou a 1 quando o relgio sobe, este comportamento claramente definido. Mas o que acontece se
D est mudando ao mesmo tempo que o relgio sobe?
Este problema semelhante ao que se coloca a uma cmara ao tirar uma fotografia. Imagine que
fotografa um sapo pulando de uma almofada de lrio para o lago. Se o leitor tirar a foto antes do salto,
ir ver um sapo numa almofada de lrio. Se o leitor tirar a foto depois do salto, ir ver ondulaes na
gua. Mas se o leitor tirar a foto, assim que o sapo pula, o leitor poder ver uma imagem do sapo
esborratada que se estende desde a almofada de lrio at gua. Uma cmara caracterizada pelo seu
tempo de abertura, durante o qual o objeto tem de permanecer parado para se capturar uma imagem
ntida. Do mesmo modo, um elemento sequencial tem um tempo de abertura em torno do flanco do
relgio, durante o qual a entrada deve ser estvel para que o flip-flop possa produzir uma sada bem
definida.

186
Captulo trs Projeto de Lgica Digital

A abertura de um elemento sequencial definida por um tempo de preparao (setup) e um tempo


de espera (hold), antes e depois do flanco do relgio, respectivamente. Assim, como a disciplina esttica
nos limita a usar nveis lgicos fora da zona proibida, a disciplina dinmica nos limita ao uso de sinais
que mudam fora do tempo de abertura. Tirando proveito da disciplina dinmica, podemos pensar no
tempo em unidades discretas chamadas de ciclos de relgio, assim como ns pensamos nos nveis de
sinal como discreto 1 e 0. Um sinal pode apresentar glitch e oscilar descontroladamente por alguma
quantidade limitada de tempo. Sob a disciplina dinmica, estamos preocupados apenas sobre o seu valor
final no fim do ciclo de relgio, depois de ter normalizado num valor estvel. Assim, pode-se
simplesmente escrever A[n], como o valor do sinal A, no final do ciclo de relgio de ordem n, onde n
um nmero inteiro, em vez de A (t), o valor de A em algum instante t, em que t um qualquer nmero
real.
O perodo do relgio tem que ser longo o suficiente para todos os sinais estabilizarem. Isto define um
limite para a velocidade do sistema. Em sistemas reais, o relgio no atinge todos os flip-flops
precisamente ao mesmo tempo. Esta variao no tempo, chamada de defasagem do relgio, aumenta
ainda mais o perodo de relgio necessrio.
Algumas vezes impossvel satisfazer a disciplina dinmica, especialmente quando se faz o interface
com o mundo real. Por exemplo, considere um circuito com uma entrada proveniente de um boto. Um
macaco pode pressionar o boto apenas quando o relgio sobe. Isso pode resultar num fenmeno
chamado de metaestabilidade, onde o flip-flop captura um valor a meio caminho entre 0 e 1 que pode
levar uma quantidade ilimitada de tempo para determinar um valor lgico correto. A soluo para tais
entradas assncronas usar um sincronizador, que possui uma probabilidade muito pequena (mas
diferente de zero) de produzir um valor lgico ilegal.
Vamos expandir todos estes conceitos no restante desta seo.
3.5.1. A Disciplina Dinmica
At agora, temo-nos focado na especificao funcional dos circuitos sequenciais. Recorde-se que um
circuito sequencial sncrono, tal como um flip-flop, ou FSM, tambm tem uma especificao temporal,
tal como ilustrado na Figura 3.37. Quando o relgio sobe, a sada (ou sadas) podem comear a mudar
depois do relgio-para-Q contamination delay, tccq, e deve estabelecer definitivamente o valor final
187
Captulo trs Projeto de Lgica Digital

dentro do relgio-para-Q propagation delay, tpcq. Estes representam os atrasos mais rpidos e mais
lentos atravs do circuito, respectivamente. Para o circuito amostrar a sua entrada corretamente, a
entrada (ou entradas) devem ter estabilizado pelo menos algum setup time, tsetup, antes do flanco de
subida do relgio e devem permanecer estveis durante pelo menos durante algum hold time, thold,
aps o flanco de subida do relgio. A soma do setup time e do hold time chamado de aperture time
do circuito, uma vez que o tempo total durante o qual a entrada deve permanecer estvel.
A disciplina dinmica afirma que as entradas de um circuito sequencial sncrono devem estar
estveis durante o setup e hold time em torno do flanco do relgio. Ao impor essa exigncia,
garantimos que os flip-flops amostram os sinais enquanto eles no esto mudando. Porque estamos
preocupados apenas sobre os valores finais das entradas no momento em que so recolhidos,
podemos tratar os sinais tanto como discretos no tempo, assim como em nveis lgicos.
3.5.2. Temporizao do Sistema
O perodo de relgio ou tempo de ciclo, Tc, o tempo entre os flancos de um sinal de relgio
repetitivo. O seu recproco, fc = 1 / Tc, a frequncia de relgio. Tudo o resto idntico, aumentando
a frequncia do relgio aumenta-se o trabalho que um sistema digital pode realizar por unidade de
tempo. A frequncia medida em unidades de hertz (Hz), ou ciclos por segundo: 1 megahertz (MHz) =
Nas trs dcadas a seguir compra de 106 Hz, e um gigahertz (GHz) = 109 Hz.
um computador Apple II+ por um
A Figura 3.38 (a) ilustra um caminho genrico num circuito sequencial sncrono cujo perodo de
familiar dos autores at ao tempo
presente de escrita, as frequncias de relgio se deseja calcular. No flanco ascendente do relgio, o registro R1 produz uma sada (ou sadas)
relgio dos microprocessadores Q1. Estes sinais entram num bloco de lgica combinatria, produzindo D2, a entrada (ou entradas)
aumentaram de 1 MHz at vrios GHz, para o registro R2. O diagrama temporal da Figura 3.38 (b) mostra que cada sinal de sada pode
um fator de mais de 1000. Esta comear a mudar com um contamination delay depois da mudana das entradas e a estabelecer-se no
acelerao explica parcialmente as valor final dentro de um tempo de atraso de propagao aps as suas entradas se estabelecerem. As
mudanas revolucionrias feitas pelos setas cinzentas representam o contamination delay atravs de R1 e da lgica combinatria, e as setas
computadores na sociedade. azuis representam o atraso de propagao atravs de R1 e da lgica combinatria. Analisamos as
restries temporais em relao ao setup time e ao hold time do segundo registro, R2.

188
Captulo trs Projeto de Lgica Digital

Figura 3.37 Especificaes temporais para um circuito sequencial sncrono

Figura 3.38 Caminho entre registros e diagrama temporal

Restrio do Setup Time


Na Figura 3.39 o diagrama temporal mostra apenas o atraso mximo atravs do percurso, indicado
pelas setas azuis. Para satisfazer o setup time de R2, D2 deve estabelecer-se o mais tardar antes do setup
time da prxima transio de relgio. Assim, encontramos uma equao para o perodo de relgio
mnimo:
+ + (3.13)

189
Captulo trs Projeto de Lgica Digital

Em projetos comerciais, o perodo de relgio muitas vezes ditado pelo Diretor de Engenharia ou
pelo departamento de marketing (para garantir um produto competitivo). Alm disso, o propagation
delay e o setup time do relgio-para-Q do flip-flop, tpcq e tsetup, so especificados pelo fabricante. Por
isso, reescrevemos a Equao 3.13 em ordem ao atraso mximo de propagao atravs da lgica
combinatria, que normalmente a nica varivel sob o controlo do projetista.
( + ) (3.14)

O termo entre parnteses, tpcq + tsetup, chamado de sobrecarga de sequenciamento (sequencing


overhead). Idealmente, o tempo total de ciclo Tc estaria disponvel para realizar clculo til na lgica
combinatria, tpd. No entanto, a sobrecarga de sequencial do flip-flop reduz este tempo. A Equao 3.14
chamada de setup time constraint ou de max-delay constraint, porque depende do setup time e limita
o atraso mximo atravs da lgica combinatria.

Figura 3.39 Max-delay para o setup time constraint

Se o atraso de propagao atravs da lgica combinatria muito grande, D2 pode no ser ter
estabelecido no seu valor final no momento em que R2 precisa dele estvel para que o possa amostrar.
Assim, R2 pode amostrar um resultado incorreto ou mesmo um nvel lgico ilegal, num nvel na regio
proibida. Em tal caso, o circuito ter um funcionamento incorreto. O problema pode ser resolvido
aumentando o perodo de relgio ou redesenhando a lgica combinatria para que tenha um atraso de
propagao mais curto.

190
Captulo trs Projeto de Lgica Digital

Restrio do Hold Time


O registro R2 na Figura 3.38 (a) tambm tem uma hold time constraint. A sua entrada, D2, no deve
mudar at algum tempo, thold, aps o flanco ascendente do relgio. De acordo com a Figura 3.41, D2 pode
mudar assim que tccq + tcd a seguir ao flanco ascendente do relgio. Assim, encontramos
+ (3.15)

Mais uma vez, tccq e thold so caractersticas do flip-flop que esto geralmente fora do controle do
projetista. Reorganizando, podemos resolver para o mnimo de contamination delay atravs da lgica
combinatria:
(3.16)

A equao 3.16 tambm chamada de hold time constraint ou min-delay constraint porque limita o
atraso mnimo atravs da lgica combinatria.
Assumimos que quaisquer elementos lgicos podem ser ligados uns aos outros sem a introduo de
problemas de tempo. Em particular, seria de esperar que dois flip-flops possam ser ligados diretamente
em cascata como na Figura 3.40, sem causar problemas de hold time.
Em tal caso, o tCd = 0 porque no h nenhuma lgica combinatria entre os flip-flops. Substituindo na
equao 3.16 produz o requisito de que
(3.17)

191
Captulo trs Projeto de Lgica Digital

Figura 3.41 Min-delay para o hold time constraint

Por outras palavras, um flip-flop de confiana deve ter um hold time mais curto do que o seu
Figura 3.40 flip-flops Back-to-back
contamination delay. Muitas vezes, os flip-flops so projetados com thold = 0, de modo que a Equao
3.17 sempre satisfeita. Salvo disposio em contrrio, vamos geralmente fazer essa suposio e
ignorar a restrio do hold time neste livro.
No entanto, as restries do hold time so extremamente importantes. Se violadas, a nica soluo
consiste em aumentar o contamination delay atravs da lgica, o que exige o redesenho do circuito. Ao
contrrio da restrio do setup time, que no pode ser corrigido, ajustando o perodo de relgio.
Projetar um circuito integrado e fabricar o projeto corrigido leva meses e milhes de dlares nas atuais
tecnologias, por isso, assim os hold time violations devem ser levados muito a srio.
Juntando Tudo
Os circuitos sequenciais tm restries de setup e hold time e de espera que ditam os atrasos
mnimos e mximos da lgica combinatria entre flip-flops. Os flip-flops modernos so normalmente
concebidos de modo a que o atraso mnimo atravs da lgica combinatria seja de 0, isto , os flip-flops
pode ser colocado back-to-back. A restrio de atraso mximo limita o nmero de portas consecutivas
sobre o caminho crtico de um circuito de alta velocidade, porque uma frequncia elevada de relgio
significada um curto perodo de relgio.

192
Captulo trs Projeto de Lgica Digital

Exemplo 3.10 ANLISE TEMPORAL


Ben Bitdiddle desenhou o circuito na Figura 3.42. De acordo com as folhas de dados para os
componentes que ele est usando, os flip-flops tm um contamination delay de relgio-para-Q de 30 ps e
um atraso de propagao de 80 ps. Eles tm um setup time de 50 ps e um hold time de 60 ps. Cada porta
lgica tem um atraso de propagao de 40 ps e um contamination delay de 25 ps. Ajude o Ben a
determinar a frequncia mxima do relgio e se alguma violao do hold time poder ocorrer. Este
processo chamado de anlise temporal (timing analysis).

Figura 3.42 Circuito de exemplo para anlise temporal


Figura 3.43 Diagrama temporal:
Soluo: A Figura 3.43 (a) mostra as formas de onda que ilustram quando os sinais podem mudar. As (a) caso geral, (b) caminho crtico,
entradas, A a D, passam por registros, ento elas s se alteram um pouco depois do CLK subir. (c) caminho curto
O caminho crtico ocorre quando B = 1, C = 0, D = 0, e A sobe de 0 a 1, levando n1 a subir, X' a subir, e
Y' a descer, conforme se mostra na Figura 3.43 (b). Este caminho envolve trs atrasos de porta. Para o
caminho crtico, assumimos que cada porta requer a totalidade do seu atraso de propagao. Y' deve estar
preparado antes do prximo flanco ascendente do CLK. Assim, o tempo de ciclo mnimo
+ 3 + = 80 + 3 40 + 50 = 250 (3.18)

A frequncia mxima de relgio fc = 1 / Tc = 4 GHz.

193
Captulo trs Projeto de Lgica Digital

Um caminho curto ocorre quando A = 0 e C sobe, fazendo com que X suba, como se mostra na Figura
3.43 (c). Para o caminho curto, assumimos que cada porta se altera aps um contamination delay. Este
caminho envolve apenas um atraso de porta, por isso pode ocorrer aps tccq + tcd = 30 + 25 = 55 ps. Mas
lembre-se de que o flip-flop tem um tempo de espera de 60 ps, o que significa que X' deve permanecer
estvel durante 60 ps aps o flanco ascendente do CLK para que o flip-flop possa amostrar de forma
confivel o seu valor. Neste caso, X' = 0 no primeiro flanco ascendente do CLK, por isso queremos que o
flip-flop capture X = 0. Porque X' permanece estvel o tempo suficiente, o valor atual de X imprevisvel.
O circuito tem uma violao do hold time e pode comportar-se de forma irregular a qualquer frequncia
de relgio

Exemplo 3.11 RESOLUO DA VIOLAO DO HOLD TIME


Alyssa P. Hacker prope para corrigir circuito do Ben adicionar buffers para abrandar o caminho curto,
como mostrado na Figura 3.44. Os buffers tm os mesmos atrasos que as outras portas. Determine a
frequncia mxima do relgio e se ser de esperar outros problemas de tempo.
Soluo: A Figura 3.45 mostra as formas de onda ilustrando quando os sinais podem mudar. O caminho
crtico de A a Y no afetado, uma vez que no passa atravs de qualquer buffer. Portanto, a frequncia
mxima de relgio ainda de 4 GHz. No entanto, os caminhos curtos so retardados pelo atraso de
contaminao do buffer. Agora, X' no mudar at que tccq + 2tcd = 30 + 2 x 25 = 80 ps. Isto , aps que o
hold time de 60 ps tenha decorrido, de modo que o circuito opera agora corretamente.
Este exemplo tinha um hold time invulgarmente longo para evidenciar os problemas de hold time. A
maioria dos flip-flops so projetados com thold < tccq para evitar tais problemas.

194
Captulo trs Projeto de Lgica Digital

Figura 3.44 Circuito corrigido para resolver o problema do hold time

Figura 3.45 Diagrama temporal com buffers para resolver o problema do hold time

No entanto, alguns microprocessadores de alto desempenho, incluindo o Pentium 4, usam um elemento


chamado uma pulsed latch em vez de um flip-flop. A pulsed latch comporta-se como um flip-flop, mas tem
um pequeno atraso de relgio-para-Q e um hold time longo. Em geral, a adio de buffers pode geralmente,
mas no sempre, resolver problemas do hold time, sem abrandar o caminho crtico.
3.5.3. Skew do Relgio*
Na anlise anterior, assumiu-se que o relgio atinge todos os registros exatamente ao mesmo tempo.
Na realidade, h alguma variao deste instante. Esta variao nos flancos do relgio chamada de
desenquadramento do relgio (clock skew). Por exemplo, as pistas da fonte de relgio para diferentes
registros podem ter diferentes comprimentos, resultando em atrasos ligeiramente diferentes, tal como
195
Captulo trs Projeto de Lgica Digital

mostrado na Figura 3.46. O rudo tambm resulta em atrasos diferentes. O clock gating, descrito na
Seo 3.2.5, atrasa ainda mais o relgio. Se alguns relgios esto ativos e outros no, haver uma
distoro substancial entre os relgios fechados e abertos. Na Figura 3.46, CLK2 est em avano em
relao ao CLK1, porque a pista de relgio entre os dois registros segue uma rota cnica. Se a pista do
relgio tivesse sido encaminhada de forma diferente, o CLK1 poderia estar em avano. Ao fazemos
uma anlise temporal, consideramos o pior cenrio possvel, para que possamos garantir que o circuito
ir funcionar em todas as circunstncias.
A Figura 3.47 acrescenta um skew no diagrama temporal da Figura 3.38. A linha cheia do relgio
indica o ltimo momento em que o sinal de relgio pode chegar a qualquer registro; as linhas a trao
interrompido mostram que o relgio pode chegar at tskew mais cedo.
Primeiro, considere a restrio de setup time mostrada na Figura 3.48. No pior dos casos, R1 recebe
o relgio em atraso e R2 recebe o relgio em avano, deixando pouco tempo para que os dados se
possam propagar entre os registros.

Figura 3.46 Skew do relgio provocado pelo atraso no condutor

196
Captulo trs Projeto de Lgica Digital

Figura 3.47 Diagrama temporal com skew do relgio

Os dados propagam-se atravs do registro e da lgica combinatria e devem estabilizar antes que
R2 os amostre. Assim, conclumos que
+ + + (3.19)

( + + ) (3.20)

Figura 3.48 Restrio do setup time com skew do relgio

197
Captulo trs Projeto de Lgica Digital

Em seguida, considere a restrio de hold time mostrada na Figura 3.49. No pior dos casos, R1 recebe
um relgio em avano, CLK1, e R2 recebe um relgio em atraso, CLK2. Os dados percorrem os registros
e a lgica combinatria, mas no devem chegar at um hold time aps o ltimo relgio. Assim,
descobrimos que
+ + (3.21)

+ (3.22)

Em resumo, o skew do relgio efetivamente aumenta tanto o setup time e como o hold time. Ele
acrescenta uma sobrecarga ao sequenciamento, reduzindo o tempo disponvel para realizar trabalho til
na lgica combinatria. Tambm aumenta o atraso mnimo exigido pela lgica combinatria. Mesmo se
thold = 0, um par de flip-flops back-to-back ir violar a Equao 3.22 se tskew > tccq. Para evitar graves falhas
de hold time, os projetistas no devem permitir demasiada skew do relgio. s vezes os flip-flops so
intencionalmente concebidos para serem particularmente lentos (isto , elevado tccq), para evitar
problemas de hold time, mesmo quando o skew do relgio substancial.

Figura 3.49 Restrio do hold time com skew do relgio

198
Captulo trs Projeto de Lgica Digital

Exemplo 3.12 ANLISE TEMPORAL COM SKEW DO RELGIO


Revisitar o Exerccio 3.10 e assumir que o sistema tem 50 ps de skew do relgio.
Soluo: O caminho crtico continua a ser o mesmo, mas o setup time efetivamente aumentado pelo skew.
Assim, o tempo de ciclo mnimo
+ 3 + + = 80 + 3 40 + 50 + 50 = 300 (3.23)

O caminho curto tambm permanece o mesmo em 55 ps. O hold time eficazmente aumentado pelo
skew para 60 + 50 = 110 ps, que muito maior do que 55 ps. Assim, o circuito ir violar o hold time e ter
um mau funcionamento a qualquer frequncia. O circuito viola a restrio do hold time , mesmo sem skew.
O skew no sistema faz a violao ser pior.

Exemplo 3.13 SOLUCIONAR A VIOLAO DO TEMPO DE ESPERA


Revisitar o Exerccio 3.11 e assumir que o sistema tem 50 ps de skew do relgio.
Soluo: O caminho crtico no afetado, ento a frequncia mxima do relgio permanece 3.33 GHz.
O caminho curto aumenta para 80 ps. Isto ainda menos do que thold + tskew = 110 ps, de modo que o
circuito ainda viola a sua restrio de tempo de espera.
Para corrigir o problema, ainda mais buffers podem ser inseridos. Os buffers que tm que ser adicionados
tambm no caminho crtico assim, reduzindo a frequncia de relgio. Alternativamente, um flip-flop com
um hold time mais curto poderia ser utilizado.

199
Captulo trs Projeto de Lgica Digital

3.5.4. Metaestabilidade
Como observado anteriormente, nem sempre possvel garantir que a entrada para um circuito
sequencial estvel durante o aperture time, especialmente quando a entrada chega do mundo exterior.
Considere-se um boto ligado entrada de um flip-flop, como mostrado na Figura 3.50. Quando o boto
no est pressionado, D = 0. Quando o boto pressionado, D = 1. Um macaco pressiona o boto num
qualquer momento aleatrio em relao ao flanco ascendente do CLK. Queremos saber qual a sada Q
aps o flanco ascendente de CLK. No Caso I, quando o boto pressionado muito antes de CLK, Q = 1.
No Caso II, quando o boto no pressionado at muito tempo depois de CLK, Q = 0. Mas no Caso III,
quando o boto pressionado em algum momento entre tsetup antes de CLK e thold depois de CLK, a
entrada viola a disciplina dinmica e a sada indefinida.
Estado Metaestvel
Quando um flip-flop amostra uma entrada que est em mudana durante a sua abertura, a sada Q
pode assumir momentaneamente uma tenso entre 0 e VDD situada na zona proibida. Isso chamado
um estado metaestvel. Eventualmente, o flip-flop vai estabelecer a sada num estado estvel (stable
state) de 0 ou 1. Contudo, o resolution time necessrio para alcanar o estado estvel ilimitado.
Figura 3.50 Entrada modifica-se O estado metaestvel de um flip-flop anlogo a uma bola no cume de uma colina entre dois vales,
antes, depois e durante o tempo como mostrado na Figura 3.51. Os dois vales so estados estveis, porque uma bola no vale permanecer
de abertura
l, desde que no seja perturbada. O topo da colina chamado metaestvel porque a bola iria
permanecer l se fosse perfeitamente equilibrada. Mas porque nada perfeito, a bola ir rolar,
eventualmente, para um lado ou para o outro. O tempo necessrio para que essa alterao ocorra
depende de como equilibrada a bola estava originalmente. Cada dispositivo biestvel tem um estado
metaestvel entre os dois estados estveis.
Resolution Time
Se uma entrada do flip-flop muda num momento aleatrio durante o ciclo de relgio, o resolution
time, tres, necessrio para resolver para um estado estvel tambm uma varivel aleatria. Se a entrada
muda fora da abertura, ento, tres = tpcq. Mas se ocorre a entrada alterar-se dentro da abertura, tres pode

200
Captulo trs Projeto de Lgica Digital

ser substancialmente mais longo. As anlises tericas e experimentais (ver Seo 3.5.6) mostram que a
probabilidade de que o tempo de resoluo, tres, exceda algum tempo arbitrrio, t, diminui
exponencialmente com t:


( > ) = 0 (3.24)

onde Tc o perodo de relgio, e T0 e so caractersticas do flip-flop. A equao vlida apenas para t


substancialmente maior do que tpcq. Figura 3.51 Estados estveis e
Intuitivamente, T0 / Tc descreve a probabilidade de que a entrada mude num momento inoportuno metaestveis
(isto , durante o tempo de abertura); esta probabilidade diminui com o tempo de ciclo, Tc. uma
constante de tempo indicadora do quo rpido o flip-flop se afasta do estado metaestvel; ele est
relacionado com o atraso atravs das portas do flip-flop.
Em resumo, se a entrada de um dispositivo biestvel, tal como um flip-flop, se altera durante o tempo
de abertura, a sada pode assumir um valor metaestvel durante algum tempo antes de se resolver para
o valor estvel 0 ou 1. A quantidade de tempo necessrio para resolver no tem limite, porque para
qualquer tempo finito, t, a probabilidade de que o flip-flop ainda seja metaestvel diferente de zero.
No entanto, essa probabilidade cai exponencialmente quando t aumenta. Portanto, se esperarmos o
tempo suficiente, muito mais do que tpcq, podemos esperar com uma alta probabilidade elevada que o
flip-flop chegue a um nvel lgico vlido.
3.5.5. Sincronizadores
Entradas assncronas do mundo real em sistemas digitais so inevitveis. A entrada humana
assncrona, por exemplo. Se manuseado sem cuidado, estas entradas assncronas podem levar a tenses
metaestveis dentro do sistema, causando falhas errticos no sistema que so extremamente difceis de
rastrear e corrigir. O objetivo de um projetista de um sistema digital deve ser o de assegurar que, dada
uma entrada assncrona, a probabilidade de encontrar uma tenso metaestvel suficientemente
pequena. "Suficientemente" depende do contexto. Para um telefone celular, talvez uma falha em 10
anos aceitvel, porque o utilizador pode sempre desligar o telefone e voltar a ligar se este bloquear.

201
Captulo trs Projeto de Lgica Digital

Para um dispositivo mdico, um fracasso na vida esperada do universo (10 10 anos) um alvo melhor.
Para garantir bons nveis de lgica, todas as entradas assncronas devem ser passadas atravs de
sincronizadores.
Um sincronizador, mostrado na Figura 3.52, um dispositivo que recebe uma entrada D assncrona e
um relgio CLK. Ela produz uma sada Q dentro de um perodo limitado de tempo; a sada tem um nvel
lgico vlido com probabilidade extremamente alta. Se D estvel durante a abertura, Q deve assumir
o mesmo valor de D. Se D se altera durante a abertura, Q pode tomar um valor HIGH ou LOW, mas no
deve ser metaestvel.
A Figura 3.53 mostra uma maneira simples de criar um sincronizador a partir de dois flip-flops. F1
amostra D no flanco ascendente do CLK. Se D est a mudar naquele momento, a sada D2 pode ser
momentaneamente metaestvel. Se perodo do relgio da Figura 3.53 mostra uma maneira simples de
criar um sincronizador de dois flip-flops. Amostras F1 D na borda de subida de CLK. Se D est mudando
naquele tempo, a sada D2 pode ser momentaneamente metaestvel. Se o perodo do relgio for
Figura 3.52 Smbolo de um
suficientemente longo, D2 ser, com grande probabilidade, resolvido para um nvel lgico vlido antes
sincronizador
do final do perodo. F2, em seguida, amostra D2, que agora est estvel, produzindo uma boa sada Q.

Figura 3.53 Sincronizador simples

202
Captulo trs Projeto de Lgica Digital

Dizemos que um sincronizador falha se Q, a sada do sincronizador, se torna metaestvel. Isso pode
acontecer se D2 no se resolveu a um nvel vlido no momento em que se deve preparar em F2, isto , se
tres > Tc - tsetup. Segundo a Equao 3.24, a probabilidade de falha para uma nica mudana da entrada num
tempo aleatrio

0
() = (3.25)

A probabilidade de falha, P (falha), a probabilidade de que a sada Q seja metaestvel numa nica
mudana de D. Se D muda uma vez por segundo, a probabilidade de falha por segundo apenas P (falha).
No entanto, se D muda N vezes por segundo, a probabilidade de falha por segundo N vezes to grande
como:

0
()/ = (3.26)

A fiabilidade do sistema geralmente medida em tempo mdio entre falhas (MTBF - mean time between
failures). Como o nome sugere, MTBF a quantidade mdia de tempo entre as falhas do sistema. o
inverso da probabilidade de que o sistema ir falhar num dado segundo

( )
1
= = (3.27)
()/ 0

A Equao 3.27 mostra que o MTBF melhora exponencialmente medida que o sincronizador de espera
durante mais tempo, Tc. Para a maioria dos sistemas, um sincronizador que espera por um ciclo de relgio
proporciona um MTBF seguro. Excepcionalmente em sistemas de alta velocidade, a espera por mais ciclos
pode ser necessria.

Exemplo 3.14 SINCRONIZADOR PARA ENTRADA DE FSM


A FSM do controlador de semforo da Seo 3.4.1 recebe entradas assncronas a partir dos sensores de
trfego. Suponha-se que um sincronizador usado para garantir entradas estveis ao controlador. O
trfego chega em mdia 0,2 vezes por segundo. Os flip-flops do sincronizador tm as seguintes

203
Captulo trs Projeto de Lgica Digital

caractersticas: = 200 ps, T0 = 150 ps, e tsetup = 500 ps. Quanto tempo o perodo de relgio sincronizador
deve ter para que o MTBF exceda 1 ano?
Soluo: 1 ano 107 segundos. Resolvendo a equao 3.27.
5001012
2001012
107 = (0,2)(1501012 ) (3.18)

Esta equao no tem soluo de forma fechada. No entanto, bastante fcil de resolver por
tentativa e erro. Numa folha de clculo, tente alguns valores para Tc e calcule o MTBF at descobrir o
valor de Tc que d um MTBF de um ano: Tc = 3.036 ns

3.5.6. Derivada do Resolution Time*


A Equao 3.24 pode ser obtida utilizando conhecimentos bsicos de teoria de circuitos, equaes
diferenciais, e probabilidade. Esta seo pode ser ignorada se voc no est interessado na derivao
ou se voc no estiver familiarizado com a matemtica.
A sada de um flip-flop ser metaestvel depois de algum tempo, t, se o flip-flop amostrar uma
entrada em mudana (causando uma condio metaestvel) e a sada no se resolve para um nvel
vlido dentro desse tempo aps o flanco do relgio. Simbolicamente, esta pode ser expressa como
( > ) = ( ) () (3.29)
Consideramos cada termo de probabilidade individualmente. O sinal de entrada assncrona comuta
entre 0 e 1 em algum tempo, tswitch, tal como mostrado na Figura 3.54. A probabilidade de que a entrada
se altere durante a abertura em torno do flanco do relgio
+ +
( ) = (3.30)

Se o flip-flop entrar em metaestabilidade, isto , com probabilidade P(samples changing input), o


tempo para resolver a metaestabilidade depende do funcionamento interno do circuito. Este tempo de

204
Captulo trs Projeto de Lgica Digital

resoluo determina P(unresolved), a probabilidade de que o flip-flop ainda no esteja resolvido para um
nvel lgico validade aps um tempo t. O restante desta seco analisa um modelo simples de um
dispositivo biestvel para estimar essa probabilidade.

Figura 3.54 Temporizao da entrada

Figura 3.55 Modelo do circuito de um dispositivo biestvel

Um dispositivo biestvel usa armazenamento com realimentao positiva. A Figura 3.55 (a) mostra esta
realimentao implementada com dois inversores; o comportamento deste circuito representativo da
maioria dos elementos biestveis. Um par de inversores comporta-se como um buffer. Vamos modela-lo
como tendo as caractersticas simtrica de transferncia DC mostradas na Figura 3.55 (b), com um declive
G. O buffer pode entregar apenas uma quantidade finita de corrente de sada; podemos modelar isto como
uma resistncia de sada, R. Todos os circuitos reais tambm possuem alguma capacidade C que deve ser
carregada. Carregar o condensador atravs da resistncia provoca um atraso RC, impedindo o buffer de

205
Captulo trs Projeto de Lgica Digital

comutar instantaneamente. Por isso, o modelo do circuito completo mostrado na Figura 3.55 (c), onde
Vout (t) a tenso de interesse que transmite o estado do dispositivo biestvel.
O ponto metaestvel para este circuito Vout (t) = Vin (t) = VDD/2; se o circuito comeasse exatamente
nesse ponto, ele permaneceria l indefinidamente na ausncia de rudo. Porque as tenses so variveis
contnuas, a probabilidade de que o circuito comece exatamente no ponto metaestvel muito
pequena. No entanto, o circuito pode comear no tempo 0, perto da metaestabilidade em vout (0) =
VDD/2 + V para um pequeno desvio de V. Em tal caso, o feedback positivo ir eventualmente conduzir
Vout (t) a VDD se V > 0 e a 0 se V < 0. O tempo necessrio para atingir VDD ou 0 o tempo de resoluo
do dispositivo biestvel.
A caracterstica de transferncia DC no linear, mas parece linear perto do ponto metaestvel, que
a regio de interesse para ns. Especificamente, se vin (t) = VDD / 2 + V / G, ento Vout (t) = VDD / 2 +
V para pequenos V. A corrente atravs da resistncia i (t)= (Vout (t) - Vin (t)) / R. O condensador
carrega a uma taxa dvin (t) / dt = i (t) / C. Colocando juntos todos os factos, encontramos a equao que
governa a tenso de sada.
() (1)
= [ () ] (3.31)
2

Esta uma equao diferencial linear de primeira ordem. A resoluo usando a condio inicial vout
(0) = VDD/2 + V d
(1)

() = + (3.32)
2

A Figura 3.56 fornece vrias trajetrias para vout (t) dados vrios pontos de partida. vout (t) desloca-
se exponencialmente para longe do ponto metaestvel VDD/2 at que satura em VDD ou 0. A sada
eventualmente resolve-se para 1 ou 0. A quantidade de tempo depende do desvio (V) a partir do ponto
inicial de tenso metaestvel (VDD/2).
Resolvendo a equao 3.32 para o tempo de resoluo tres, de tal forma que vout (tres) = VDD ou 0, d

206
Captulo trs Projeto de Lgica Digital
(1)

|| = (3.33)
2

= 1 ln 2|| (3.34)

Em resumo, o tempo de resoluo aumenta se o dispositivo biestvel tem alta resistncia ou


capacidade o que faz com que a sada mude lentamente. Ela diminui se o dispositivo biestvel tem ganho
elevado, G. O tempo de resoluo tambm aumenta algoritmicamente com o circuito a comear mais
prximo do ponto metaestvel (V 0).
Definindo como (RC) / (G-1). Resolvendo a equao 3.34 para V devolve o deslocamento inicial,
Vres, que corresponde a um tempo de resoluo em particular, tres:


= (3.35)
2

Figura 3.56 Trajetrias de resoluo

Suponha-se que um dispositivo biestvel amostra uma entrada ao mesmo tempo que esta muda. Ele
mede a tenso, vin (0), que assumimos estar uniformemente distribuda entre 0 e VDD. A probabilidade de
que a sada no se tenha resolvido para um valor legal depois do instante tres depende da probabilidade
de que o deslocamento inicial seja suficientemente pequeno. Especificamente, o deslocamento inicial na
Vout deve ser inferior a Vres, de modo que o deslocamento inicial em Vin seja ser inferior a Vres / G. Ento,

207
Captulo trs Projeto de Lgica Digital

a probabilidade de que o dispositivo biestvel amostre a entrada num instante de tempo para obter um
nvel suficientemente pequeno do deslocamento inicial
Vres 2
() = (| (0) |< )= (3.36)
2

Colocar tudo em conjunto, a probabilidade de que o tempo de resoluo seja superior a um tempo t
dado pela seguinte equao:
+ +
( > ) = (3.37)

Observe que a Equao 3.37 possui a forma de equao 3.24, em que T0 = (tswitch + tsetup + thold)/G e
= RC/(G-1). Em resumo, derivamos a Equao 3.24 e mostrmos como T0 e dependem das
propriedades fsicas do dispositivo biestvel.

3.6. PARALELISMO
A velocidade de um sistema caracterizada pela latncia e pela taxa de transferncia de informao
(throughput) em movimento atravs dela. Ns definimos um token como um grupo de entradas que so
processadas para produzir um grupo de sadas. A latncia de um sistema o tempo requerido para que
um token passe atravs do sistema desde o incio at ao fim. A taxa de transferncia de informao
determinada pelo nmero de tokens que podem ser processados por unidade de tempo.

Exemplo 3.15 BOLOS, TAXA DE TRANSFERNCIA DE INFORMAO E LATNCIA


Ben Bitdiddle est dando uma festa de leite e biscoitos para celebrar a instalao de seu controlador
de semforo. Ele leva 5 minutos para moldar os biscoitos e coloc-los na sua bandeja. Em seguida, so
precisos 15 minutos para que os biscoitos possam cozer no forno. Uma vez que os biscoitos estejam
cozidos, ele comea a preparar outra bandeja. Qual a taxa de transferncia e latncia de Ben para uma
bandeja de biscoitos?

208
Captulo trs Projeto de Lgica Digital

Soluo: Neste exemplo, uma bandeja de biscoitos um token. A latncia de 1/3 hora por bandeja. A
taxa de transferncia de 3 bandejas / hora.

Como o leitor pode imaginar, o rendimento pode ser melhorado atravs do processamento de vrios
token em simultneo. Isso chamado de paralelismo, e vem em duas formas: espacial e temporal. Com
o paralelismo espacial, mltiplas cpias do hardware so fornecidas de modo que mltiplas tarefas
podem ser realizadas ao mesmo tempo. Com o paralelismo temporal, uma tarefa dividida em etapas,
como uma linha de montagem. Mltiplas tarefas podem ser distribudas atravs das etapas. Embora
cada tarefa deva passar por todas as etapas, uma tarefa diferente estar em cada etapa, num dado
instante, para que vrias tarefas se possam sobrepor. O paralelismo temporal normalmente chamado
de pipelining. O paralelismo espacial s vezes chamado apenas de paralelismo, mas vamos evitar essa
conveno de nomenclatura porque ambgua.

Exemplo 3.16 BISCOITOS E PARALELISMO


Ben Bitdiddle tem centenas de amigos que vm para a sua festa e precisa fazer biscoitos mais rpido.
Ele est a pensar em usar o paralelismo espacial e/ou temporal.
Paralelismo espacial: Ben pede a Alyssa P. Hacker para o ajudar. Ela tem a sua prpria bandeja de
biscoitos e forno.
Paralelismo Temporal: Ben recebe uma segunda bandeja de biscoitos. Uma vez que ele coloca uma
bandeja de biscoitos no forno, ele comea a moldar os biscoitos no outro tabuleiro, em vez de esperar
que a primeira bandeja coza.
Qual a taxa de transferncia e latncia usando paralelismo espacial? Usando paralelismo temporal?
Usando ambos?
Soluo: A latncia o tempo necessrio para concluir uma tarefa do incio at ao fim. Em todos os
casos, a latncia de 1/3 hora. Se Ben comea sem biscoito, a latncia o tempo necessrio para ele
produzir a primeira bandeja de biscoitos.

209
Captulo trs Projeto de Lgica Digital

A taxa de transferncia o nmero de tabuleiros de biscoito por hora. Com o paralelismo


espacial, Ben e Alyssa cada um completa uma bandeja a cada 20 minutos. Assim, a taxa de
transferncia duplica, 6 bandejas/hora. Com o paralelismo temporal Ben coloca um novo tabuleiro
no forno a cada 15 minutos, alcanando uma taxa de transferncia de 4 bandejas/hora. Estas esto
ilustradas na Figura 3.57.
Se o Ben e a Alyssa usarem ambas as tcnicas, eles podem cozer 8 bandejas/hora.

Considere-se uma tarefa com latncia L. Num sistema sem paralelismo, a taxa de transferncia
de 1/L. Num sistema com espacialidade paralela com N cpias do hardware, a taxa de
transferncia de N/L. Num sistema temporalmente paralelo, a tarefa idealmente dividida em
N etapas, ou estgios, de igual comprimento. Em tal caso, a taxa de transferncia tambm N/L,
e apenas uma cpia do hardware requerida. No entanto, como o exemplo dos biscoitos
demostrou, encontrando N passos de igual comprimento muitas vezes impraticvel. Se o passo
mais longo tem uma latncia de L1, a taxa de transferncia do pipeline e de 1/L1.

Figura 3.57 Paralelismo espacial e temporal na cozinha dos biscoitos


210
Captulo trs Projeto de Lgica Digital

O Pipelining (paralelismo temporal) particularmente atraente porque acelera um circuito sem


duplicar o hardware. Em vez disso, os registros so colocados entre os blocos de lgica combinatria para
dividir a lgica em etapas mais curtas que podem ser executadas com um relgio mais rpido. Os registros
evitam que um token num estgio do pipeline alcance outro token e o corrompa.
A Figura 3.58 apresenta um exemplo de um circuito sem paralelismo. Ele contm quatro blocos de
lgica entre os registros. O caminho crtico passa atravs de blocos 2, 3 e 4. Suponha que o registro tem
um atraso de propagao de 0,3 ns do relgio-para-Q e um tempo de configurao de 0,2 ns. Ento o
tempo de ciclo Tc = 0,3 + 3 + 2 + 4 + 0,2 = 9,5 ns. O circuito tem uma latncia de 9,5 ns e uma taxa de
transferncia de 1/9,5 ns = 105 MHz.

Figura 3.58 Circuito sem pipeline

Figura 3.59 Circuito com pipeline de dois estgios

211
Captulo trs Projeto de Lgica Digital

Figura 3.60 Circuito com pipeline de trs estgios

A Figura 3.59 apresenta o mesmo circuito dividido por um pipeline de dois estgios atravs da adio
de um registro entre os blocos 3 e 4. A primeira fase tem um perodo de relgio mnimo de 0,3 + 3 + 2 +
0,2 = 5,5 ns. A segunda fase tem um perodo de relgio mnimo de 0,3 + 4 + 0.2 = 4.5 ns. O relgio deve
ser lento o suficiente para que todos os estgios possam trabalhar. Assim, Tc = 5,5 ns. A latncia de
dois ciclos de relgio, ou 11 ns. A taxa de transferncia de 1 / 5.5 ns = 182 MHz. Este exemplo mostra
que, num circuito real, usando um pipeline com dois estgios quase dobra a taxa de transferncia e
aumenta ligeiramente a latncia. Em comparao, um pipeline ideal permitiria exatamente o dobro da
taxa de transferncia, sem qualquer penalidade na latncia. A discrepncia acontece porque o circuito
no pode ser dividido em duas metades exatamente iguais e porque os registros introduzem mais
sobrecarga de sequenciamento.
A Figura 3.60 apresenta o mesmo circuito dividida num pipeline de trs estgios. Note-se que mais
dois registros so necessrios para armazenar os resultados dos blocos 1 e 2 no final do primeiro estgio
do pipeline. O tempo de ciclo agora limitado pelo terceiro estgio em 4,5 ns. A latncia de trs ciclos,
ou 13,5 ns. A taxa de transferncia de 1/4,5 ns = 222 MHz. Mais uma vez, a adio de um estgio do
pipeline melhora o rendimento custa de alguma latncia.
Embora estas tcnicas sejam poderosas, elas no se aplicam a todas as situaes. A desgraa do
paralelismo so as dependncias. Se a tarefa atual dependente do resultado de uma tarefa anterior,
ao invs de apenas os estgios anteriores da tarefa atual, a tarefa no pode comear at que a tarefa
anterior esteja concluda. Por exemplo, se o Ben quer verificar se a primeira bandeja de biscoitos tem
um sabor bom, antes que ele comece a preparar a segunda, ele tem uma dependncia que impede o

212
Captulo trs Projeto de Lgica Digital

pipeline e a operao paralela. O paralelismo uma das tcnicas mais importantes para a concepo de
sistemas digitais de alto desempenho. O Captulo 7 discute a operao de pipeline e mostra exemplos de
como manipular as dependncias.

3.7. SUMRIO
Este Captulo descreveu a anlise e projeto de lgica sequencial. Em contraste com a lgica
combinatria, cujas sadas dependem apenas das entradas correntes, sadas lgicas sequenciais
dependem de ambas as entradas corrente e anteriores. Por outras palavras, a lgica sequencial memoriza
informaes sobre entradas anteriores. Esta memria chamada de estado da lgica.
Os circuitos sequenciais podem ser difceis de analisar e so fceis de desenhar incorretamente, por
Quem conseguisse inventar lgica
isso, limitamo-nos a um pequeno conjunto de blocos de construo cuidadosamente projetados. O
cujas sadas dependessem de entradas
elemento mais importante para os nossos propsitos o flip-flop, que recebe um relgio e uma entrada futuras seria fabulosamente rico!
D e produz uma sada Q. O flip-flop cpia D para Q no flanco ascendente do relgio e, de outra forma,
recorda-se do antigo estado de Q. Um grupo de flip-flops que partilham de um relgio geralmente
chamado de registro. Os flip-flops podem tambm receber sinais de controlo de reset ou enable.
Embora existam muitas formas de lgica sequencial, ns nos disciplinamos em usar circuitos
sequenciais sncronos, porque so fceis de projetar. Os circuitos sequenciais sncronos consistem em
blocos de lgica combinatria separados por registros operados por relgios. O estado do circuito
armazenado no registro e atualizado apenas nos flancos do relgio.
As mquinas de estados finitos so uma tcnica poderosa para projetar circuitos sequenciais. Para
projetar uma FSM, primeiro devemos identificar as entradas e as sadas da mquina e esboar um
diagrama de transio de estado, indicando os estados e as transies entre eles. Devemos selecionar
uma codificao para os estados, e reescrever o diagrama como uma tabela de transio de estado e
tabela de sada, indicando o prximo estado e de sada, dado o estado atual e as entradas. A partir dessas
tabelas, podemos projetar a lgica combinatria para determinar o prximo estado e a sada, e em
seguida podemos esboar o circuito.

213
Captulo trs Projeto de Lgica Digital

Os circuitos sequenciais sncronos possuem especificaes temporais, incluindo o tempo de


propagao do relgio-para-Q e os contamination delays, tpcq e tccq, e o setup time e hold time, tsetup e
thold. Para uma operao correta, as suas entradas devem estar estveis durante um aperture time que
comea um setup time antes do flanco ascendente do relgio e termina um hold time aps o flanco
ascendente do relgio. O tempo de ciclo mnimo Tc do sistema igual ao atraso de propagao tpd atravs
da lgica combinatria mais tpcq + tsetup do registro. Para uma operao correta, o contamination delay
atravs do registro e da lgica de combinatria deve ser maior que thold. Apesar da concepo errada, o
hold time no afeta o tempo de ciclo.
O desempenho geral do sistema medido em latncia e taxa de transferncia. A latncia o tempo
necessrio para que um token passe do incio ao fim. A taxa de transferncia corresponde ao nmero de
tokens que o sistema pode processar por unidade de tempo. O paralelismo melhora a taxa de
transferncia do sistema.

214
Captulo trs Projeto de Lgica Digital

Exerccios
Exerccio 3.1 Dadas as formas de onda mostradas na Figura 3.61, esboar a sada, Q, de uma bscula
SR.

Figura 3.61 Formas de onda de entrada da bscula SR para o Exerccio 3.1

Exerccio 3.2 Dadas as formas de onda mostradas na Figura 3.62, esboar a sada, Q, de uma bscula
SR.

Figura 3.62 Formas de onda de entrada de bscula SR para o Exerccio 3.2

Exerccio 3.3 Dadas as formas de onda mostradas na Figura 3.63, esboar a sada, Q, D de uma
bscula.

Figura 3.63 Formas de onda de entrada da bscula D ou flip-flop para os Exerccio 3.3 e Exerccio
3.5.
215
Captulo trs Projeto de Lgica Digital

Exerccio 3.4 Dadas as formas de onda mostradas na Figura 3.64, esboar a sada, Q, de uma
bscula D.

Figura 3.64 Formas de onda da entrada de D da bscula ou flip-flop para os Exerccio 3.4 e
Exerccio 3.6

Exerccio 3.5 Tendo em conta as formas de onda mostradas na Figura 3.63, esboar a sada, Q, de
um flip-flop D.

Exerccio 3.6 Dadas as formas de onda mostradas na Figura 3.64, esboar a sada, Q, de um flip-
flop D.

Exerccio 3.7 O circuito na Figura 3.65 de lgica combinatria ou de lgica sequencial? Explicar
de uma forma simples, qual a relao entre as entradas e sadas. Como o leitor chamaria a este
circuito?

Figura 3.65 Circuito mistrio

216
Captulo trs Projeto de Lgica Digital

Exerccio 3.8 O circuito na Figura 3.66 de lgica combinatria ou de lgica sequencial? Explicar de
uma forma simples, qual a relao entre as entradas e sadas. Como o leitor chamaria a este circuito?

Figura 3.66 Circuito mistrio

Exerccio 3.9 O flip-flop toogle (T) tem uma entrada, CLK, e uma sada, P. A cada flanco ascendente
do CLK, Q alterna com o complemento do seu valor anterior. Desenhe um esquema para um flip-flop T
usando um D flip-flop e um inversor.

Exerccio 3.10 Um flip-flop JK recebe um relgio e duas entradas, J e K. No flanco ascendente do


relgio, ele atualiza a sada, P. Se J e K so ambos 0, Q mantm o seu valor antigo. Se apenas J 1, Q
torna-se 1. Se apenas K 1, Q torna-se 0. Se ambos J e K so 1, Q torna-se o oposto do seu estado atual.
(a) Construa um flip-flop JK usando um flip-flop D e algumas combinaes lgica.
(b) Construa um flip-flop D usando um flip-flop JK e algumas combinaes lgica.
(c) Construir um flip-flop T (ver Exerccio 3.9) usando um flip-flop JK.

217
Captulo trs Projeto de Lgica Digital

Exerccio 3.11 O circuito da Figura 3.67 chamado de elemento C-Muller. Explique que forma
simples qual a relao entre as entradas e sada.

Figura 3.67 Elemento-C de Muller

Exerccio 3.12 Projete uma bscula D resettable assncrona usando portas lgicas.

Exerccio 3.13 Projete um flip-flop D resettable assncrono usando portas lgicas.

Exerccio 3.14 Projete um flip-flop D settable sncrona configurvel usando portas lgicas.

Exerccio 3.15 Projete um flip-flop D settable assncrona usando portas lgicas.

Exerccio 3.16 Suponha que um oscilador em anel construdo a partir de N inversores ligados
num loop. Cada inversor tem um atraso mnimo de tcd e um atraso mximo de tpd. Se N mpar,
determine a gama de frequncias em que o oscilador pode operar.

Exerccio 3.17 Por que deve N ser impar no Exerccio 3.16?

218
Captulo trs Projeto de Lgica Digital

Exerccio 3.18 Quais dos circuitos da Figura 3.68 so circuitos sequenciais sncronos? Explique.

Figura 3.68 Circuitos

Exerccio 3.19 O leitor est a projetar um controlador para um elevador de um edifcio de 25


andares. O controlador possui duas entradas: para cima e para baixo. Ele produz uma sada que indica
o andar que o elevador est ligado. No h piso 13. Qual o nmero mnimo de bits de estado do
controlador?

Exerccio 3.20 leitor est a projetar uma FSM para acompanhar o humor dos quatro estudantes que
trabalham no laboratrio de projeto digital. O humor de cada aluno ou HAPPY (o circuito funciona),
SAD (o circuito explodiu), BUSY (trabalhando no circuito), CLUELESS (confuso sobre o circuito), ou
ASLEEP (face para baixo na placa de circuito). Quantos estados tem a FSM? Qual o nmero mnimo
de bits necessrios para representar estes estados?

219
Captulo trs Projeto de Lgica Digital

Exerccio 3.21 Como realizar o factoring da FSM do Exerccio 3.20 em vrias mquinas mais
simples? Quantos estados cada mquina mais simples tem? Qual o nmero mnimo total de bits
necessrios neste projeto?

Exerccio 3.22 Descreva por palavras o que faz a mquina de estado da Figura 3.69. Utilizando a
codificao binria de estado, complete uma tabela de transio de estado e uma tabela de sada
para a FSM. Escreva as equaes Booleanas para o prximo estado e de sada e esboce um esquema
da FSM.

Figura 3.69 Diagrama de transio de estados

Exerccio 3.23 Descreva por palavras suas o que faz a mquina de estado na Figura 3.70. Utilizando
a codificao de estado binrio, complete uma tabela de transio de estado e uma tabela de sada
para a FSM. Escreva as equaes Booleanas para o prximo estado e de sada e esboce um esquema
da FSM.

Figura 3.70 Diagrama de transio de estados

220
Captulo trs Projeto de Lgica Digital

Exerccio 3.24 Os acidentes continuam a ocorrer no cruzamento da Avenida Acadmica e com o


Boulevard Bravado. A equipa de futebol corre para o cruzamento no momento em que a luz B fica
verde. Eles esto a chocar com os alunos de mestrado, privados de sono, que cambaleiam para o
cruzamento um pouco antes da luz A ficar vermelha. Estenda o controlador de semforo da Seo 3.4.1
para que ambas as luzes sejam vermelhas por 5 segundos antes de qualquer luz ficar verde novamente.
Esboce o seu melhorou diagrama de transio de estados da mquina de Moore, codificaes de
estados, tabela de transio de estado, tabela de sada, equaes de prximo estado e de sada, e o
esquema da sua FSM.

Exerccio 3.25 O caracol da Alyssa P. Hacker da Seo 3.4.3 tem uma filha cujo crebro uma
mquina de Mealy. A caracol filha sorri quando ela desliza sobre o padro de 1101 ou o padro 1110.
Esboce o diagrama de transio de estado para este caracol feliz usando o menor nmero de estados
possvel. Escolha uma codificao de estados e escreva uma tabela de transio de estado e de sada
combinada usando as suas codificaes. Escreva as equaes do prximo estado e de sada e esboce o
esquema da sua FSM.

Exerccio 3.26 O leitor foi convocado para projetar um distribuidor de mquina de refrigerante para
a sala do departamento. Os refrigerantes so parcialmente subsidiados pelo captulo estudante do IEEE,
pelo que custam apenas 25 centavos. A mquina aceita nqueis, moedas de dez centavos e quartos.
Quando forem inseridas moedas suficientes, ele dispensa o refrigerante e retorna o troco necessrio.
Projete um controlador FSM para a mquina de refrigerante. As entradas da FSM so Nickel, Dime, e
Quarter, indicando a moeda que foi inserido. Suponha que uma moeda inserida exatamente em cada
ciclo. As sadas so Dispense, Return Nickel, Return Dime, e ReturnTwoDimes. Quando a FSM chega a
25 centavos de dlar, ativa o dispensador e as sadas Return devolvem o troco necessrios. Em seguida,
ela deve estar pronta para comear a aceitar moedas para outro refrigerante.

221
Captulo trs Projeto de Lgica Digital

Exerccio 3.27 O cdigo de Grey tem uma propriedade til na qual os nmeros consecutivos
diferem apenas num bit de posio. A Tabela 3.23 lista um cdigo de Gray de 3-bits que representa
os nmeros 0 a 7. Projete uma FSM de um contador de Gray de 3-bit mdulo 8 sem entradas e com
trs sadas. (Um contador mdulo N conta de 0 a N-1, repetidamente. Por exemplo, um relgio usa
um contador de mdulo 60 para os minutos e segundos que contam de 0 a 59.) Quando reiniciado,
a sada deve ser 000. Em cada ciclo de relgio, a sada deve avanar para o prximo cdigo de Gray.
Depois de atingir 100, deve repetir com 000.
Tabela 3.23 Cdigo de Gray de 3-bits

Exerccio 3.28 Estenda o seu contador de Gray mdulo 8 do Exerccio 3.27 para um contador
UP/DOWN, adicionando uma entrada UP. Se UP = 1, o contador avana para a prxima srie. Se UP
= 0, o contador recua para o nmero anterior.

222
Captulo trs Projeto de Lgica Digital

Exerccio 3.29 A sua empresa, Detect-o-rama, gostaria de projetar uma FSM que leva duas
entradas, A e B, e gera uma sada, Z. A sada no ciclo n, Zn, ou o resultado booleano de AND ou OR
da correspondente entrada An e da entrada anterior An-1, dependendo a outra entrada, Bn:

= 1 = 0
= + 1 = 1
(a) Esboce a forma de onda para Z dadas as entradas mostrados na Figura 3.71.
(b) esta FSM uma mquina de Moore ou de Mealy?
(c) Projete a FSM. Mostre o seu diagrama de transio de estado, tabela de transio de estados
codificados, equaes de prximo estado e de sada, e esquemtico.

Figura 3.71 Formas de onda das entradas da FSM

Exerccio 3.30 Projete uma FSM com uma entrada, A, e duas sadas, X e Y. X deve ser 1 se A tiver
sido 1 por, pelo menos, durante trs ciclos (no necessariamente consecutivamente). Y deve ser 1 se
A tiver sido 1 por, pelo menos, dois ciclos consecutivos. Mostre o seu diagrama de transio de estado,
tabela de transio de estados codificados, equaes do prximo estado e de sada, e esquemtico.

Exerccio 3.31 Analise a FSM mostrada na Figura 3.72. Escreva as tabelas de transio de estados
e de sada e esboce o diagrama de transio de estado. Descrever em palavras o que a FSM faz.

223
Captulo trs Projeto de Lgica Digital

Figura 3.72 Esquemtico da FSM

Exerccio 3.32 Repita o Exerccio 3.31 para a FSM mostrada na Figura 3.73. Lembre-se que as
entradas s e r do registro indicam ligada e desligada, respectivamente.

Figura 3.73 Esquemtico da FSM

Exerccio 3.33 Ben Bitdiddle projetou o circuito da Figura 3.74 para calcular uma funo com
registro XOR de quatro entradas. Cada porta XOR de duas entradas tem um atraso de propagao
de 100 ps e um contamination delay de 55 ps. Cada flip-flop tem um tempo de configurao de 60
ps, um hold time de 20 ps, um atraso mximo de relgio-para-Q de 70 ps, e um atraso mnimo de
relgio-para-Q de 50 ps.
(a) Se no houver nenhum skew do relgio, qual a frequncia mxima de funcionamento do
circuito?
(b) Quanto skew do relgio pode tolerar o circuito se deve operar a 2 GHz?
(c) Quanto skew do relgio pode tolerar o circuito antes que ele possa experimentar uma
violao do hold time?
(d) Alyssa P. Hacker observa que ela pode redesenhar a lgica combinatria entre os registros
para ser mais rpida e tolerar mais a skew do relgio. O seu circuito melhorado tambm utiliza trs

224
Captulo trs Projeto de Lgica Digital

XOR de duas entradas, mas eles esto dispostos de forma diferente. Qual o seu circuito? Qual a sua
frequncia mxima, se no houver a skew do relgio? Quanto skew do relgio pode tolerar o circuito
antes que ele possa experimentar uma violao do hold time?

Figura 3.74 Circuito XOR de quatro entradas com registro

Exerccio 3.34 O leitor est a projetar um componente adicional para o extremamente rpido
processador RePentium 2-bits. O somador construdo a partir de dois full-adders tal que o transporte
para fora do primeiro somador o transporte para o segundo somador, como mostrado na Figura 3.75.
O seu somador tem registros de entrada e sada e deve completar a soma num ciclo de relgio. Cada
full-adder possui os seguintes atrasos de propagao: 20 ps de Cin para Cout ou para Sum (S), 25 ps de A
ou B para Cout, e 30 ps de A ou B para S. O somador tem um contamination delay de 15 ps da Cin para
qualquer sada e 22 ps de A ou B para qualquer sada. Cada flip-flop tem um setup time de 30 ps, um
hold time de 10 ps, um atraso de propagao relgio-para-Q de 35 ps, e um contamination delay do
relgio-para-Q de 21 ps.
(a) Se no houver nenhum skew do relgio, qual a frequncia mxima de funcionamento do
circuito?
(b) Quanto skew do relgio pode tolerar o circuito se ele deve operar a 8 GHz?
(c) Quanto skew do relgio pode tolerar o circuito antes que ela possa experimentar uma violao
hold time?

225
Captulo trs Projeto de Lgica Digital

Figura 3.75 Esquemtico de um somador de 2-bits

Exerccio 3.35 Uma FPGA (Fields Programmable Gate Array) usa CLB (Configurable Logical
Blocks) em vez de portas lgicas para implementar a lgica combinatria. A FPGA da Xilinx Spartan
3 tem atrasos de propagao e contaminantion delay de 0,61 e 0,30 ns, respectivamente, para cada
CLB. Ela tambm contm flip-flops com atrasos de propagao e contaminantion delay de 0,72 e
0,50 ns, e setup time e hold time de 0,53 e 0 ns, respectivamente.
(a) Se o leitor est a construir um sistema que precisa operar a 40 MHz, quantos CLB consecutivos
pode usar entre dois flip-flops? Suponha que no h nenhum skew do relgio e nenhum atraso
atravs dos condutores entre CLB.
(b) Suponha que todos os caminhos entre flip-flops passam por pelo menos um CLB. Quanto
skew do relgio pode o FPGA ter sem violar o hold time?

Exerccio 3.36 Um sincronizador construdo a partir de um par de flip-flops com tsetup = 50 ps,
T0 = 20 ps, e = 30 ps. Amostra uma entrada assncrona que muda 108 vezes por segundo. Qual o
perodo mnimo de relgio do sincronizador para alcanar um tempo mdio entre falhas (MTBF) de
100 anos?

226
Captulo trs Projeto de Lgica Digital

Exerccio 3.37 O leitor gostaria de construir um sincronizador que pode receber entradas
assncronas com um MTBF de 50 anos. O sistema opera a 1 GHz, e so utilizados flip-flops com
amostragem = 100 ps, T0 = 110 ps, e tsetup = 70 ps. O sincronizador recebe uma nova entrada assncrona
em mdia 0,5 vezes por segundo (isto , uma vez a cada 2 segundos). Qual a probabilidade de falha
requerida no cumprimento desta MTBF? Quantos ciclos de relgio seriam necessrios esperar antes
de ler o sinal de entrada amostrado para obter essa probabilidade de erro?

Exerccio 3.38 O leitor est andando pelo corredor quando voc encontra o seu parceiro de
laboratrio caminhando em outra direo. Os dois do um primeiro passo para um lado e ainda assim
esto no caminho um do outro. Ento ambos do um passo para o outro lado e continuam no caminho
um do outro. Em seguida, ambos esperam um pouco, na expectativa de que a outra pessoa d um
passo para se afastar. O leitor pode modelar esta situao como um ponto metaestvel e aplicar a
mesma teoria que tem sido aplicado a sincronizadores e flip-flops. Suponha que criar um modelo
matemtico para si e para o seu parceiro de laboratrio. Comea o infeliz encontro no estado

metaestvel. A probabilidade de que voc permanecer nesse estado aps t segundos . Em que
indica a sua taxa de resposta; Hoje, o seu crebro foi afetado pela falta de sono e tem = 20 segundos.
(a) Quanto tempo passar at que o leitor tenha 99% de certeza de que vai sair da metaestabilidade
(i.e., Descobrir como passar um ao outro)?
(b) O leitor no est apenas sonolento, mas tambm com uma fome voraz. Na verdade, vai morrer
de fome se no comear a ir para o refeitrio dentro de 3 minutos. Qual a probabilidade de que o
seu parceiro de laboratrio tenha que o arrastar at morgue?

Exerccio 3.39 O leitor construiu um sincronizador usando flip-flops com T0 = 20 ps e = 30 ps. O seu
chefe diz-lhe que vai ser preciso aumentar o MTBF por um fator de 10. De quanto ser preciso
incrementar o perodo de relgio?

227
Captulo trs Projeto de Lgica Digital

Exerccio 3.40 Ben Bitdiddle inventa o sincronizador novo e melhorado da Figura 3.76 que afirma
eliminar a metaestabilidade num nico ciclo. Ele explica que o circuito na caixa M um detector
analgico de metaestabilidade que produz uma sada de tenso HIGH se a entrada est na zona
proibida entre VIL e VIH. O detector de metaestabilidade verifica para determinar se o primeiro flip-
flop produziu uma sada metaestvel em D2. Se assim for, realizada um reset assncrono do flip-flop
para produzir um 0 bom em D2. O segundo flip-flop, em seguida, amostra D2, produzindo sempre
um nvel lgico vlido em Q. Alyssa P. Hacker diz a Ben que deve haver um erro no circuito, porque
eliminar a metaestabilidade to impossvel quanto a construo de uma mquina de movimento
perptuo. Quem est certo? Explique, mostrando o erro de Ben ou mostrando porque que a Alyssa
est errada.

Figura 3.76 Sincronizador novo e melhorado

228
Captulo trs Projeto de Lgica Digital

Questes de entrevista
Os exerccios seguintes apresentam perguntas que foram feitas em entrevistas para trabalhos de
projeto digital.

Pergunta 3.1 Desenhar uma mquina de estados que poderia detectar quando ela recebesse a
sequncia srie 01010 na entrada.

Pergunta 3.2 Projete uma FSM srie (um bit por vez) complementar com duas entradas, Start e A,
e uma sada, Q. Um nmero binrio de comprimento arbitrrio fornecido na entrada A, comeando
com o bit menos significativo. O bit correspondente da sada aparece em Q no mesmo ciclo. Start
cativado num ciclo para inicializar a FSM antes do bit menos significativo ser fornecido.

Pergunta 3.3 Qual a diferena entre uma bscula e um flip-flop? Em que circunstncias prefervel
cada um?

Pergunta 3.4 desenhe um contador de 5-bits finito com uma mquina de estados.

Pergunta 3.5 Projete um circuito detector de flanco. A sada deve ir a HIGH um ciclo aps a entrada
fazer uma transio 0 1.

Pergunta 3.6 Descreva o conceito de pipelining e por que ele usado.

229
Captulo trs Projeto de Lgica Digital

Pergunta 3.7 Descreva o que significa para um flip-flop ter um hold time negativo.

Pergunta 3.8 Dado sinal A, mostrado na Figura 3.77, projete um circuito que produza sinal B.

Figura 3.77 Formas de onda dos sinais

Pergunta 3.9 Considere um bloco de lgica entre dois registros. Explicar as restries de tempo.
Se for adicionado um buffer na entrada do relgio do receptor (o segundo flip-flop), a restrio de
setup time ficar melhor ou pior?

230
4. Linguagens de Descrio de
Hardware
4.1. INTRODUO
At agora, temos focado o projeto de circuitos digitais combinatrios ou sequenciais a nvel de diagramas
esquemticos. O processo de encontrar um conjunto eficiente de portas lgicas para realizar uma dada
funo trabalhoso e propenso a erros, uma vez que so necessrias simplificaes manuais de tabelas
verdade ou de equaes Booleanas, e traduo manual de mquinas de estado finitos em portas. Na dcada
de 90, os projetistas descobriram que eram muito mais produtivos se trabalhassem num nvel maior de
abstrao, especificando apenas a funo lgica e permitindo que uma ferramenta de projeto auxiliado por
computador (CAD - computer-aided design) produzisse as portas otimizadas. As especificaes so, de modo
geral, dadas numa linguagem de descrio de hardware (HDL hardware descriprion language). As duas
principais linguagens de descrio de hardware so a SystemVerilog e a VHDL.
A SystemVerilog e VHDL so construdas sobre princpios similares, mas possuem sintaxes diferentes. As
discusses destas linguagens neste Captulo so divididas em duas colunas, para comparao literal lado a
lado, com a SystemVerilog esquerda e a VHDL direita. Quando ler este Captulo pela primeira vez, foque
numa linguagem ou outra. Uma vez que conhea alguma, voc poder rapidamente aprender a outra, caso
precise.
Os Captulos subsequentes mostram o hardware tanto na forma esquemtica quanto na forma HDL. Se
voc optar por pular este Captulo e no aprender uma das HDL, voc ainda ser capaz de dominar os

231
Captulo quatro Linguagens de Descrio de Hardware

princpios da organizao computacional dos esquemticos. No entanto, a grande maioria dos sistemas
comerciais atualmente so construindos utilizando-se HDL ao invs de esquemticos. Se voc pretende
ser um projetista de sistemas digitais em qualquer ponto de sua carreira profissional, ser aconselhado a
aprender uma das HDL.
4.1.1. Mdulos
Um bloco de hardware com entradas e sadas chamado de mdulo. Uma porta AND, um
multiplexador, e um circuito de prioridade so todos exemplos de mdulos de hardware. Os dois estilos
gerais para a descrio da funcionalidade do mdulo so a comportamental e a estrutural. Modelos
comportamentais descrevem o que o mdulo faz. Modelos estruturais descrevem como o mdulo
construdo a partir de partes simples; uma aplicao de hierarquia. O cdigo SystemVerilog e VHDL no
Exemplo HDL 4.1 ilustram as descries comportamentais de um mdulo que determina a funo lgica
do exemplo 2.6, = + + . Em ambas as linguagens, o mdulo chamado
sillyfuction e tem trs entradas, a, b e c, e uma sada, y.

Exemplo HDL 4.1 LGICA COMBINATRIA

SystemVerilog VHDL

Module sillyfunction(input logic a, b, c, library IEEE; use IEEE.STD_LOGIC_1164.all;


output logic y);
assign = ~a & ~b ~c | entity sillyfunction is
a & ~b ~c | port(a, b, c: in STD_LOGIC;
a & ~b c; y: out STD_LOGIC);
endmodule end;

architecture synth of sillyfunction is


begin
y <= (not a and not b and not c) or
(a and not b and not c) or
(a and not b and c);
end;

232
Captulo quatro Linguagens de Descrio de Hardware

Um mdulo SystemVerilog comea com o nome do mdulo e uma O cdigo VHDL possui trs partes: a clusula library use, a
lista de entradas e sadas. A declarao assign descreve a lgica declarao entity e o corpo architecture. A clusula
combinatria. ~ indica NOT, & indica AND e | indica OR. library use ser discutida na seo 4.7.2. a declarao entity
Sinais do tipo logic, tais como entradas e sadas, so variveis lista o nome do mdulo e as suas entradas e sadas. O corpo
Boolenanas (0 ou 1). Eles tambm podem ter valores flutuantes e architecture define o que o mdulo faz.
indefinidos, com discutido na seo 4.2.8. Os sinais VHDL, tais como entradas e sadas, devem ter uma
O tipo logic foi introduzido em SystemVerilog. Ele substitui o tipo declarao de tipo. Sinais digitais devem ser declarados como sendo
reg, o qual era uma permanente fonte de confuso no Verilog. do tipo STD_LOGIC. Sinais do tipo STD_LOGIC podem ter valores
logic deveria ser utilizado sempre, exceto em sinais com mltiplos 0 ou 1, assim como valores indefinidos e flutuantes que sero
drivers. Sinais com mltiplos drivers so chamados de nets e so descritos na seo 4.2.8. O tipo STD_LOGIC definido na biblioteca
explicados na seo 4.7. IEEE.STD_LOGIC_1164, e por isso que essa biblioteca deve ser
utilizada.
A VHDL necessita de uma boa ordem padro de operaes entre
AND e OR, por isso, equaes Booleanas devem estar entre
parnteses.

Um mdulo, como o leitor poderia esperar, uma boa aplicao de modularidade. Ele tem numa
interface bem definida, consistindo em entradas e sadas, e realiza uma funo. O modo particular no
qual ele codificado no importante para os outros que podem utilizar esse cdigo, contanto que ele
execute a sua funo.
4.1.2. Origens das Linguagens O termo bug data da inveno do
computador. Thomas Edison
As universidades esto quase igualmente divididas sobre qual dessas linguagens ser apresentada
chamava de bugs as pequenas falhas
num primeiro curso. A indstria est tendendo para o SystemVerilog, mas muitas companhias continuam
e dificuldades em suas invenes em
utilizando o VHDL e muitos projetistas precisam ser fluentes em ambas. 1878.
Comparada SystemVerilog, a VHDL mais prolixa e trabalhosa, como o leitor poderia esperar de
uma linguagem desenvolvida por um comit.

233
Captulo quatro Linguagens de Descrio de Hardware

SystemVerilog VHDL
A Verilog foi desenvolvida pela Gateway Design Automation como A linguagem VHDL um acrnimo para VHSIC Hardware
uma linguagem proprietria para simulaes lgicas em 1984. A Description Language. A VHSIC por sua vez, um acrnimo para o
Gateway foi adquirida pela Cadence em 1989 e a Verilog se tornou um programa Very High Speed Integrated Circuits do Departamento de
padro aberto em 1990, sob o controle da Open Verilog International. Defesa dos EUA.
A linguagem se tornou um padro IEEE em 1995. A linguagem foi A VHDL foi originalmente desenvolvida em 1981 pelo
estendida em 1995 para simplificar idiossincrasias e para melhor Departamento de Defesa para descrever estruturas e funes de
suportar a modelagem e a verificao de sistemas. Essas extenses hardware. Foi baseado na linguagem de programao Ada. A
foram fundidas num padro nico de linguagem, o qual agora linguagem foi inicialmente imaginada para documentao, mas foi
chamado de SystemVerilog (IEEE STD 1800-2009). Os nomes de rapidamente adotada para simulao e sntese. O IEEE a padronizou
arquivos em SystemVerilog normalmente terminam em .sv. em 1987 e atualizou o padro muitas vezes desde ento. Este Captulo
baseado na reviso de 2008 do padro VHDL (IEEE STD 1076-2008),
o que agiliza a linguagem em vrios modos. Na hora da escrita, nem
todas as caractersticas do VHDL 2008 so suportadas pelas
ferramentas CAD; este Captulo usa apenas aquelas entendidas pelo
Synplicity, Altera Quartus e ModelSim. Os arquivos VHDL tm os seus
nomes normalmente terminados em .vhd.

Ambas as linguagens so totalmente capazes de descrever qualquer sistema de hardware, e ambas


possuem as suas peculiaridades. A melhor linguagem para se usar aquela em uso no seu local de
trabalho ou aquela que os seus clientes exigem. A maioria das ferramentas CAD hoje em dia permitem
que as duas linguagens sejam misturas, de modo que diferentes mdulos possam ser descritos em
linguagens diferentes.

234
Captulo quatro Linguagens de Descrio de Hardware

4.1.3. Simulao e Sntese


Os dois maiores propsitos das HDL so a simulao e a sntese lgicas. Durante a simulao, as
entradas so aplicadas ao mdulo, e as sadas so examinadas para verificar se o mdulo opera
corretamente. Durante a sntese, a descrio textual do mdulo transformada em portas lgicas.
O termo "bug" anterior inveno
Simulao do computador. Thomas Edison
Os humanos rotineiramente cometem erros. Tais erros em projetos de hardware so chamados de chamava de "bugs" em 1878 as
"pequenas falhas e dificuldades" das
bugs. Eliminar os bugs de um sistema digital , obviamente, importante, especialmente quando os clientes
suas invenes.
esto pagando dinheiro e h vidas que dependem da correta operao. Testar um sistema no laboratrio
algo demorado. Descobrir a causa dos erros no laboratrio pode ser extremamente difcil, pois apenas O primeiro bug real de computador
sinais encaminhados para o chip podem ser observados. No existe um modo para diretamente observar foi uma mariposa descoberta entre os
o que est acontecendo dentro de um chip. Corrigir erros aps a construo do sistema pode ser rels do computador eletromecnico
devastadoramente caro. Por exemplo, corrigir um erro num circuito integrado topo de gama custa mais Harvard Mark II em 1947. Ela foi
encontrada por Grace Hopper, que
de um milho de dlares e leva muitos meses. Um bug infame foi o FDIV (diviso em vrgula flutuante)
registrou o incidente, comentando:
num processador Pentium, da Intel, que forcou a companhia a substituir os chips aps eles terem sido
o primeiro caso verdadeiro de um
despachados, com um custo total de U$ 475 milhes. A simulao lgica essencial para testar um sistema bug sendo encontrado.
antes de que ele seja construdo.

A Figura 4.1 mostra as formas de onda para uma simulao do mdulo sillyfunction anterior,
demonstrando que o mdulo funciona corretamente. y TRUE quando a, b e c so 000, 100 e 101,
como especificado na equao Booleana.

Figura 4.1 Formas de onda de simulao

235
Captulo quatro Linguagens de Descrio de Hardware

Sntese
A sntese lgica transforma o cdigo HDL numa netlist descrevendo o hardware (isto , as portas lgicas
e os fios que as conectam). O sintetizador lgico pode realizar otimizaes para reduzir a quantidade de
hardware necessrio. A netlist pode ser um arquivo de texto, ou pode ser desenhada como um esquemtico
para ajudar a visualizar o circuito. A Figura 4.2 mostra o resultado da sntese do mdulo sillyfunction.
Note como os trs AND de trs entradas so simplificados como dois AND de duas entradas, como
mostrado por ns no exemplo 2.6 utilizando lgebra Booleana.

Figura 4.2 Circuito Sintetizado

A descrio de circuitos em HDL lembra os cdigos de uma linguagem de programao. No entanto, voc
deve se lembrar que o cdigo projetado para representar hardware. SystemVerilog e VHDL so linguagens
ricas com muitos comandos. Nem todos esses comandos podem ser sintetizados em hardware. Por
exemplo, um comando para imprimir resultados na tela durante uma simulao no pode ser traduzido em
hardware. Devido ao nosso principal interesse ser construir hardware, ns iremos enfatizar um
subconjunto sintetizvel das linguagens. Especificamente, iremos dividir o cdigo HDL em mdulos
sintetizveis e de testes. Os mdulos sintetizveis descrevem o hardware. Os cdigos de teste contm
entradas para aplicar num mdulo, para verificar quando os resultados na sada esto corretos, e imprimir
discrepncias entre sadas reais e esperadas. O cdigo de teste tem a inteno apenas de simulao e no
pode ser sintetizado.
Um dos erros mais comuns dos iniciantes pensar em HDL como sendo um programa de computador
ao invs de uma abreviao para descrever hardware digital. Se voc no sabe aproximadamente que

236
Captulo quatro Linguagens de Descrio de Hardware

hardware deve ser sintetizado, voc provavelmente no gostar do que ir conseguir. O leitor pode criar
muito mais hardware do que o necessrio, ou ento escrever cdigos que so simulados corretamente,
mas no podem ser implementados em hardware. Ao invs disso, pense no seu sistema em termos de
blocos combinatrios, registradores e mquinas de estados finitos. Esboce esses blocos num papel e ento
mostre como eles so conectados, antes de comear a escrever o cdigo.
Atravs da nossa experincia, o melhor modo de aprender uma HDL atravs de exemplos. As HDL
possuem meios especficos de descrever vrias classes de lgica; esses modos so chamados de idiomas.
Este Captulo vai ensin-lo a como escrever o idioma HDL adequado para cada tipo de bloco e, em seguida,
como reunir esses blocos para produzir um sistema funcional. Quando o leitor precisar descrever um tipo
particular de hardware, procure por um exemplo similar e adapte-o para o seu propsito. No nos
atentaremos a definir rigorosamente a sintaxe das HDL, pois isso mortalmente tedioso e porque isso
tende a encorajar o pensamento das HDL como linguagens de programao, e no abreviaes para
hardware. As especificaes da IEEE SystemVerilog e da VHDL, e os seus manuais exaustivos e resumidos,
contm todos os detalhes, se o leitor necessitar de mais informao num tpico particular (Veja a seo
de leituras complementares no final deste livro).

4.2. LGICA COMBINATRIA


Lembre-se que ns estamos nos disciplinando para projetar circuitos sequenciais sncronos, os quais
consistem de lgica combinatria e registradores. As sadas da lgica combinatria dependem apenas das
entradas atuais. Esta seo descreve como escrever modelos comportamentais de lgica combinatria
utilizando-se HDL.
4.2.1. Operadores Bit a Bit
Operadores bit a bit agem em sinais de bits individuais ou em barramentos multi-bit. Por exemplo, o
mdulo inv, no Exemplo HDL 4.2, descreve quatro inversores conectados a barramentos de 4-bits.

237
Captulo quatro Linguagens de Descrio de Hardware

Exemplo HDL 4.2 INVERSORES

SystemVerilog VHDL

module inv(input logic[3:0] a. library IEEE; use IEEE.STD_LOGIC_1164.all;


output logic[3:0] y);
entity inv is
assign y=~a port(a: in STD_LOGIC_VECTOR(3 downto 0);
endmodule y: out STD_LOGIC_VECTOR(3 downto 0));

a[3:0] representa um barramento de 4-bits. Os bits, do mais end;


significativo para o menos significativo, so a[3], a[2], a[1]
e a[0]. Essa a chamada ordem de little-endian, devido ao bit architecture synth of inv is
menos significativo ter o menor nmero de bit. Ns poderamos ter begin
t <= not a;
nomeado o barramento a[4:1], caso em que a[4] seria o mais
end;
significativo. Ou ento poderamos ter usado a[0:3], em cujo caso
os bits, do mais significativo para o menos significativo, seriam VHDL utiliza STD_LOGIC_VECTOR para indicar os barramentos de
a[0], a[1], a[2] e a[3]. Isto chamado big endian order. STD.LOGIC. STD_LOGIC_VECTOR(3 downto 0) representa
um barramento de 4-bits. Os bits, do mais significativo para o menos
significativo, so a(3), a(2), a(1) e a(0). Esta a chamada
little endian, pois o bit menos significativo tem o menor nmero. Ns
poderamos ter declarado o barramento como
STD_LOGIC_VECTOR(4 downto 1), caso em que o bit 4 seria o
mais significativo. Ou ns poderamos ter escrito
STD_LOGIC_VECTOR(0 to 3), caso em que os bits, do mais
significativo para o menos significativo, seriam a(0), a(1), a(2)
e a(3). Esta a chamada ordem big-endian.

238
Captulo quatro Linguagens de Descrio de Hardware

Figura 4.3 Circuito inv sintetizado

A ordenao de um barramento puramente arbitrria. De fato, a ordenao tambm irrelevante


para este exemplo, pois num banco de inversores no interessa qual a ordem em que os bits esto. A
ordenao apenas interessa para os operadores, tais como adio, onde a soma de uma coluna se
transporta para a prxima. Qualquer ordenao aceitvel, desde que utilizada consistentemente.
Iremos, consistentemente, utilizar a ordem little-endian, [N-1:0] em SystemVerilog e (N-1 downto
0) em VHDL, para um barramento de N-bits.
Aps cada cdigo de exemplo neste Captulo, um esquemtico produzido a partir do cdigo
SystemVerilog atravs da ferramenta de sntese Synplify Premier. A Figura 4.3 mostra que o mdulo inv
sintetiza um banco de quatro inversores conectados a barramentos de entrada e sada de 4-bits. Um
hardware similar produzido a partir do cdigo VHDL sintetizado.

O mdulo gates no Exemplo HDL 4.3 demonstra operaes bit a bit em barramentos de 4-bits para
outras funes lgicas bsicas.

Exemplo HDL 4.3 PORTAS LGICAS

SystemVerilog VHDL

module gates(input logic [3:0] a, b, library IEEE; use IEEE.STD_LOGIC_1164.all;


output logic [3:0] y1, y2,
y3, y4, y5); entity gates is
port(a, b: in STD_LOGIC_VECTOR(3 downto 0);
/* five different two-input logic y1, y2, y3, y4,
gates acting on 4-bit busses */ y5: out STD_LOGIC_VECTOR(3 downto 0));
end;
239
Captulo quatro Linguagens de Descrio de Hardware

assign y1 = a & b; // AND architecture synth of gates is


assign y2 = a | b; // OR begin
assign y3 = a ^ b; // XOR five different two-input logic gates
assign y4 = ~(a & b); // NAND acting on 4-bit busses
assign y5 = ~(a | b); // NOR y1 <= a and b;
endmodule y2 <= a or b;
y3 <= a xor b;
~, ^ e | so exemplos de operadores SystemVerilog, onde a, b, e y4 <= a nand b;
y1 so operandos. Uma combinao de operadores e operandos, y5 <= a nor b;
como por exemplo a&b, ou ~(a|b), chamada de expresso. Um end;
comando completo, como assign y4 = ~(a&b); chamado
declarao. not, xor e or so exemplos de operadores VHDL, onde a, b,
assign out = in1 op in2 chamado de declarao de e y1 so operandos. Uma combinao de operadores e operandos,
atribuio contnua. Atribuies contnuas terminam com um ponto e como a and b, ou a nor b, chamada de expresso. Um comando
vrgula. A qualquer momento que as entradas do lado direito de = completo, como y4 <= a nand b; chamado de declarao.
numa declarao de atribuio contnua mudam, a sada do lado out <= in1 op in2; chamado de declarao de atribuio
esquerdo recalculada. Desta maneira, declaraes de atribuies de sinal concorrente. Declaraes de atribuies VHDL terminam com
contnuas descrevem lgica combinatria. um ponto e vrgula. A qualquer momento que as entradas do lado
direito de <= numa declarao de atribuio de sinal concorrente
muda, a sada ao lado esquerdo recalculada. Dessa maneira,
declaraes de atribuio de sinais concorrentes descrevem lgica
combinatria.

240
Captulo quatro Linguagens de Descrio de Hardware

Figura 4.4 Circuito gates sintetizado

4.2.2. Comentrios e Espaos em Branco


O exemplo das portas mostrou como formatar comentrios. SystemVerilog e VHDL no so exigentes
em relao ao uso de espaos em branco (isto , espaos, tabs e quebras de linha). Mesmo assim, uma
indentao apropriada e o uso de linhas em branco so teis para tornar projetos no triviais mais legveis.
Seja consistente no uso de capitalizao e underscores nos nomes dos mdulos e dos sinais. Este texto
utiliza sempre letras minsculas. Nomes de sinais e de mdulos no devem comear com um dgito.

SystemVerilog VHDL

Os comentrios em SystemVerilog so iguais aos do C ou Java. Comentrios que se iniciam com /* continuam, possivelmente atravs
Comentrios que iniciam com /* continuaro possivelmente atravs de mltiplas linhas, at o prximo */. Comentrios que se iniciam com
de muitas linhas, at o prximo */. Comentrios iniciando com // - - continuam at o fim da mesma linha.
continuam at o final da mesma linha. VHDL no case sensitive. y1 e Y1 so os mesmos sinais em VHDL.
No entanto, outras ferramentas que podem ler o seu arquivo podem

241
Captulo quatro Linguagens de Descrio de Hardware

SystemVerilog case-sensitive. y1 e Y1 so sinais diferentes em ser case sensitive, levando a bugs desagradveis se voc,
SystemVerilog. No entanto, confuso utilizar mltiplos sinais que despreocupadamente, misturar letras maisculas e minsculas.
diferem apenas entre maisculas e minsculas.

4.2.3. Operadores de Reduo


Operadores de reduo implicam numa porta de mltiplas entradas atuando sobre um nico
barramento. O Exemplo HDL 4.1 descreve uma porta AND de oito entradas, a7, a6, ..., a0. Operadores
de reduo anlogos existem para portas OR, XOR, NAND, NOR e XNOR. Lembre-se que uma porta XOR
de mltiplas entradas realiza paridade, retornando TRUE se um nmero mpar de entradas TRUE.

Exemplo HDL 4.4 AND DE OITO ENTRADAS

SystemVerilog VHDL

module and8(input logic [7:0] a, library IEEE; use IEEE.STD_LOGIC_1164.all;


output logic y);
entity and8 is
assign y = &a; port(a: in STD_LOGIC_VECTOR(7 downto 0);
y: out STD_LOGIC);
// &a is much easier to write than end;
// assign y = a[7] & a[6] & a[5] & a[4] &
// a[3] & a[2] & a[1] & a[0]; architecture synth of and8 is
endmodule begin
y <= and a;
and a is much easier to write than
y <= a(7) and a(6) and a(5) and a(4) and
a(3) and a(2) and a(1) and a(0);
end;

242
Captulo quatro Linguagens de Descrio de Hardware

Figura 4.5 Circuito and8 sintetizado

4.2.4. Atribuio Condicional


Atribuies condicionais selecionam a sada dentre alternativas baseadas numa entrada denominada
condio. O Exemplo HDL 4.5 ilustra um multiplexador 2:1 utilizando atribuio condicional.

Exemplo HDL 4.5 MULTIPLEXADOR 2:1

SystemVerilog VHDL

O operador condicional ?: escolhe, baseado numa primeira As atribuies condicionais de sinais realizam diferentes operaes,
expresso, entre a segunda e a terceira expresso. A primeira dependendo da condio. Elas so especialmente teis para se
expresso denominada condio. Se a condio 1, o operador descrever um multiplexador. Por exemplo, um multiplexador 2:1 pode
escolhe a segunda expresso. Se a condio 0, o operador escolhe a utilizar a atribuio condicional de sinais para selecionar uma de duas
terceira expresso. entradas de 4-bits.
?: especialmente til para descrever um multiplexador, pois,
baseado na primeira entrada, ele seleciona entre duas outras. O library IEEE; use IEEE.STD_LOGIC_1164.all;
cdigo abaixo demostra a linguagem para um multiplexador 2:1 com
entradas e sadas de 4-bits utilizando-se o operador condicional. entity mux2 is
port(d0, d1: in STD_LOGIC_VECTOR(3 downto 0);
s: in STD_LOGIC;
y: out STD_LOGIC_VECTOR(3 downto 0));
243
Captulo quatro Linguagens de Descrio de Hardware

module mux2(input logic [3:0] d0, d1, end;


input logic s,
output logic [3:0] y); architecture synth of mux2 is
begin
assign y = s ? d1 : d0; y <= d1 when s else d0;
endmodule end;

Se s 1, ento y = d1. Se s 0, ento y = d0. A atribuio condicional de sinal define y como d1 se s 1. De outra
?: tambm chamado operador ternrio, pois recebe trs forma, define y como d0. Note que antes da reviso de 2008 da VHDL,
entradas. Ele utilizado com o mesmo propsito nas linguagens de tnhamos que escrever when s = 1 ao invs de when s.
programao C e Java.

Figura 4.6 Circuito mux2 sintetizado

O Exemplo HDL 4.6 mostra um multiplexador 4:1 baseado no mesmo princpio do multiplexador 2:1
do Exemplo HDL 4.5. A Figura 4.7 mostra o esquemtico produzido pelo Sinplify Premier, para o
multiplexador 4:1. Os softwares usam um smbolo diferente para o multiplexador do que o que este
texto tem mostrado at agora. O multiplexador possui mltiplos dados (d) e uma entrada de ativao
(e). Quando uma das entradas de ativao acionada, o dado associado passa para a sada. Por exemplo,
quando s[1] = s[0] = 0, a porta AND de baixo, un1_s_5, produz um 1, ativando a entrada de
baixo do multiplexador e o fazendo selecionar d0[3:0].

244
Captulo quatro Linguagens de Descrio de Hardware

Exemplo HDL 4.6 MULTIPLEXADOR 4:1

SystemVerilog VHDL

Um multiplexador 4:1 pode selecionar uma de quatro entradas Um multiplexador pode selecionar uma de quatro entradas utilizando
utilizando operadores condicionais aninhados. mltiplas clusulas else na atribuio condicional de sinais.

module mux4(input logic [3:0] d0, d1, d2, d3, library IEEE; use IEEE.STD_LOGIC_1164.all;
input logic [1:0] s,
output logic [3:0] y); entity mux4 is
port(d0, d1,
assign y = s[1] ? (s[0] ? d3 : d2) d2, d3: in STD_LOGIC_VECTOR(3 downto 0);
: (s[0] ? d1 : d0); s: in STD_LOGIC_VECTOR(1 downto 0);
endmodule y: out STD_LOGIC_VECTOR(3 downto 0));
end;
Se s[1] 1, ento o multiplexador escolhe a primeira expresso
(s[0] ? d3: d2). Essa expresso, por sua vez, escolhe d3 ou architecture synth1 of mux4 is
d2 baseado em s[0] (y = d3 se s[0] 1 e d2 se s[0] 0). Se begin
s[1] 0, ento o multiplexador similarmente escolhe a segunda y <= d0 when s = "00" else
d1 when s = "01" else
expresso, a qual transmite, por sua vez, d1 ou d0, baseado em
d2 when s = "10" else
s[0]. d3;
end;

VHDL tambm suporta declaraes de atribuio de sinais


selecionados, possibilitando assim uma abreviao quando so
selecionadas uma ou mais possibilidades. Estas declaraes so
anlogas s declaraes switch/case ao invs de mltiplos if/else em
algumas linguagens de programao. O multiplexador 4:1 pode ser
reescrito com atribuio de sinais selecionados, como abaixo:

245
Captulo quatro Linguagens de Descrio de Hardware

architecture synth2 of mux4 is


begin
with s select y <=
d0 when "00",
d1 when "01",
d2 when "10",
d3 when others;
end;

Figura 4.7 Circuito mux4 sintetizado

246
Captulo quatro Linguagens de Descrio de Hardware

4.2.5. Variveis Internas


Muitas vezes conveniente quebrar uma funo complexa em passos intermedirios. Por exemplo,
um full adder, o qual ser discutido na Seo 5.2.1, um circuito com trs entradas e duas sadas
definido pelas seguintes equaes:
= (4.1)
= + + (4.2)
Se definirmos sinais intermedirios, P e G,
= (4.3)
= (4.4)
Podemos reescrever o somador completo da maneira como se segue:
= (4.6)
= + (4.7)
e so chamadas variveis internas, devido ao fato de elas no serem nem entradas nem sadas,
mas apenas serem utilizadas internamente no mdulo. Elas so similares s variveis locais nas
linguagens de programao. O Exemplo HDL 4.7 mostra como elas so utilizadas em HDL.

A declarao de atribuio em HDL (assign em SystemVerilog e <= em VHDL) ocorrem


simultaneamente. Isso diferente nas linguagens de programao convencionais, em que as
declaraes so avaliadas medida que so escritas. Numa linguagem convencional, importante que
= venha depois de = , pois as declaraes so executadas sequencialmente. Em
HDL, a ordem no importa. Assim como no hardware, as declaraes de atribuio so executadas a
qualquer momento que as entradas, os sinais do lado direito, modificam seu valor, independente da
ordem em que as declaraes de atribuio aparecem no mdulo.

247
Captulo quatro Linguagens de Descrio de Hardware

Exemplo HDL 4.7 SOMADOR COMPLETO

SystemVerilog VHDL

Em SystemVerilog, os sinais internos so normalmente declarados Em VHDL, sinais so usados para representar variveis interna, cujos
como logic. valores so definidos por declaraes de atribuio de sinais
concorrentes, como p <= a xor b;
module fulladder(input logic a, b, cin,
output logic s, cout); library IEEE; use IEEE.STD_LOGIC_1164.all;
logic p, g; entity fulladder is
port(a, b, cin: in STD_LOGIC;
assign p = a ^ b; s, cout: out STD_LOGIC);
assign g = a & b; end;

assign s = p ^ cin; architecture synth of fulladder is


assign cout = g | (p & cin); signal p, g: STD_LOGIC;
endmodule begin
p <= a xor b;
g <= a and b;
s <= p xor cin;
cout <= g or (p and cin);
end;

Figura 4.8 Circuito full adder sintetizado


248
Captulo quatro Linguagens de Descrio de Hardware

4.2.6. Precedncia
Note que ns colocamos entre parnteses a expresso cout no Exemplo HDL 4.7, para definir a
ordem das operaes, como = + (. ), ao invs de = ( + ). . Se ns no tivssemos
utilizado parnteses, a ordem padro de operao seria definida pela linguagem. O Exemplo HDL 4.8
especifica a precedncia do operador, da maior para a menor, para cada linguagem. A tabela inclui
operadores aritmticos de deslocamento e de comparao que sero definidos no Captulo 5.

Exemplo HDL 4.8 OPERADOR PRECEDNCIA

SystemVerilog VHDL

Tabela 4.1 Precedncia de operadores em SystemVerilog Tabela 4.2 Precedncia de operadores em VHDL

249
Captulo quatro Linguagens de Descrio de Hardware

A precedncia de operadores para SystemVerilog bem parecida com A multiplicao tem precedncia sobre adio em VHDL, como o leitor
o que o leitor esperaria em outras linguagens de programao. Em poderia esperar. No entanto, diferente de SystemVerilog, todas as
particular, AND tem precedncia sobre OR. Ns podemos tirar operaes lgicas (and, or, etc) possuem precedncias iguais, ao
vantagem dessa precedncia para eliminar os parnteses. contrrio do que voc poderia esperar em lgebra Booleana. Portanto,
os parnteses so necessrios; de outra forma, cout <= g or p
assign cout = g | p & cin; and cin poderia ser interpretado da esquerda para a direita, como
cout <= (g or p) and cin.

4.2.7. Nmeros
Os nmeros podem ser especificados em bases binria, octal, decimal ou hexadecimal (bases 2, 8, 10
e 16, respectivamente). O comprimento, isto , o nmero de bits, pode, opcionalmente, ser dado e ento
preenchido com zeros at atingir o comprimento. ndices abaixo dos nmeros so ignorados e podem ser
teis na quebra de grandes nmeros em pedaos menores e mais legveis. O Exemplo HDL 4.9 explica
como os nmeros so escritos em cada linguagem.

Exemplo HDL 4.9 NMEROS

SystemVerilog VHDL
O formato de declarao de constantes NBvalue, onde N o Em VHDL, nmeros STD_LOGIC so escritos em binrio entre aspas
tamanho, em bits, B uma letra especificando a base, e value o simples: 0 e 1 indicam nvel lgico 0 e 1. O formato para a
valor. Por exemplo, 9h25 um nmero de 9-bits com o valor de declarao de constantes STD_LOGIC_VECTOR NB value, onde N
2516 = 3710 = 0001001012 . A SystemVerilog aceita b para binrio, o comprimento em bits, B um indicador de base, e value indica o
o para octal, d para decimal e h para hexadecimal. Se a base valor. Por exemplo, 9X25 indica um nmero de 9-bits com o valor de
omitida, padronizada como sendo decimal. 2516 = 3710 = 0001001012 . VHDL 2008 aceita B para binrio, O
Se o tamanho no dado, considerado que o nmero tem tantos para octal, D para decimal, e X para hexadecimal.
bits quanto a expresso, no qual ele se encontra, est utilizando. Zeros Se a base omitida, , por padro, binria. Se o comprimento no
so automaticamente adicionados frente do nmero para deixa-lo dado, o nmero considerado como tendo o comprimento de
com o comprimento total. Por exemplo, se w um barramento de 6 acordo com o nmero de bits especificado em value. A partir de
bits, assign w = b11 d a w o valor de 000011. uma boa outubro de 2011, o software Synplify Premier, da Synopsys ainda no
prtica disponibilizar explicitamente o comprimento. Uma exceo aceitava a especificao de comprimento.

250
Captulo quatro Linguagens de Descrio de Hardware

que 0 e 1 so comandos em SystemVerilog que preenche num others => 0 e others => 1 so comandos em VHDL
barramento todo com 0 e todo com 1, respectivamente. que preenchem todos os bits com 0 e 1, respectivamente.

Tabela 4.3 Nmeros em SystemVerilog Tabela 4.4 Nmeros em VHDL

251
Captulo quatro Linguagens de Descrio de Hardware

4.2.8. Zs e Xs
As HDL usam z para indicar um valor flutuante, z particularmente til para descrever um buffer
tristate com a sada flutuante quando a entrada de ativao 0. Lembre-se, da Seo 2.6.2, em que um
barramento podia ser acionado por muitos buffers tristate, apenas um poderia estar ativado. Exemplo
HDL 4.10 mostra o comando para um buffer tristate. Se o buffer est ativado, a sada a mesma que a
entrada. Se o buffer est desativado, atribudo sada um valor flutuante (z).

Similarmente, as HDL usam x para indicar um nvel lgico invlido. Se um barramento levado
simultaneamente a 0 e 1 por dois buffers tristate ativados (ou outras portas), o resultado x, indicando
conteno. Se todos os buffers tristate que acionam o barramento esto simultaneamente desligados, o
valor no barramento ir flutuar, indicado por z.
No incio da simulao, ns com estados, tais como as sadas de flip-flops, so inicializadas com um
valor desconhecido (x em SystemVerilog e u em VHDL). Isso til para procurar erros causados pelo
esquecimento de reinicializao de flip-flops antes dos mesmos serem utilizados.

Exemplo HDL 4.10 BUFFER TRISTATE

SystemVerilog VHDL

module tristate(input logic [3:0] a, library IEEE; use IEEE.STD_LOGIC_1164.all;


input logic en,
output tri [3:0] y); entity tristate is
port(a: in STD_LOGIC_VECTOR(3 downto 0);
assign y = en ? a : 4'bz; en: in STD_LOGIC;
endmodule y: out STD_LOGIC_VECTOR(3 downto 0));
end;
Note que y declarado como tri ao invs de logic. Sinais do tipo
logic podem ter apenas um acionador. Barramentos tristate podem architecture synth of tristate is
ter mltiplos acionadores, ento, eles devem ser declarados como begin
uma net. Dois dos tipos de nets em SystemVerilog so denominadas y <= a when en else "ZZZZ";
end;
252
Captulo quatro Linguagens de Descrio de Hardware

tri e trireg. Tipicamente, exatamente um acionador por net est


ativo por vez, e a net toma aquele valor. Se nenhum acionador est
ativo, tri flutua (z), enquanto trireg retm o valor anterior. Se
nenhum tipo for especificado para uma entrada ou sada, assumido
que seja tri. Note tambm que uma sada tri de um mdulo pode
ser utilizada como uma entrada logic para outro mdulo. A seo
4.7 discute melhor as nets e os acionadores mltiplos.

Figura 4.9 Circuito tristate sintetizado

Se uma porta recebe uma entrada flutuante, ela pode produzir uma sada x quando no puder
determinar o valor correto da sada. Similarmente, se ela receber uma entrada de valor ilegal ou no-
inicializado, pode produzir uma sada x. O Exemplo HDL 4.11 mostra como SystemVerilog e VHDL
combinam estes diferentes valores de sinal em portas lgicas.

Exemplo HDL 4.11 TABELAS VERDADE COM ENTRADAS INDEFINIDAS E FLUTUANTES

SystemVerilog VHDL

Valores de sinais em SystemVerilog so 0, 1, z e x. As restries em Sinais do tipo VHDL STD_LOGIC so 0, 1, z, x e u.


SystemVerilog iniciam-se com o fato de que z ou x so preenchidos A Tabela 4.6 mostra uma tabela verdade para uma porta AND
com zs ou xs (ao invs de 0) para atingir o comprimento total do utilizando todos os cinco possveis valores de sinal. Note que a porta
dado quando necessrio. pode, s vezes, determinar a sada mesmo com algumas entradas
A Tabela 4.5 mostra uma tabela verdade para uma porta AND sendo desconhecidas. Por exemplo, 0 and z retorna 0 pois a sada
utilizando todos os quatro possveis valores de sinal. Note que a porta de uma porta AND sempre 0 se alguma das entradas for 0. De
pode, algumas vezes, determinar a sada mesmo com algumas das outro modo, entradas invlidas ou flutuantes causam sadas invlidas,
253
Captulo quatro Linguagens de Descrio de Hardware

entradas sendo desconhecidas. Por exemplo, 0 & z retorna 0. Pois a mostradas como x em VHDL. Entradas no-inicializadas causam
sada de uma porta AND sempre 0 se alguma das entradas 0. De sadas no-inicializadas, mostradas como u em VHDL.
outro modo, entradas flutuantes ou invlidas causam sadas invlidas,
mostradas como x em SystemVerilog.

Tabela 4.5 Tabela verdade de uma porta AND com z e x em Tabela 4.6 Tabela verdade de uma porta AND com z, x e u em VHDL
SystemVerilog

Ver valores x ou u na simulao , quase sempre, uma indicao de um bug ou de m prtica de


programao. Num circuito sintetizado, isso corresponde a uma entrada de porta flutuante, estado no
inicializado ou conteno. O x ou u pode ser interpretado aleatoriamente pelo circuito como sendo 0 ou
1, levando-o a um comportamento imprevisvel.

254
Captulo quatro Linguagens de Descrio de Hardware

4.2.9. Reorganizao de Bits


Muitas vezes necessrio operar num subconjunto de um barramento ou ento concatenar (juntar)
sinais a fim de formar barramentos. Estas operaes so coletivamente denominadas reorganizao de
bits (bit swizzling). No Exemplo HDL 4.12, y dado como um valor de 9-bits, 2 1 0 0 0 0 101 utilizando
operaes de reorganizao de bits.

Exemplo HDL 4.12 REORGANIZAO DE BITS

SystemVerilog VHDL

assign y = {c[2:1], {3{d[0]}}, c[0], 3'b101}; y <=(c(2 downto 1), d(0), d(0), d(0), c(0),
3B"101");
O operador { } utilizado para concatenar barramentos. {3{d[0]}}
indica trs cpias de d[0]. O operador de agregao ( ) usado para concatenar barramentos. y
No confunda a constante binria de 3-bits 3'b101 com um deve ser do tipo STD_LOGIC_VECTOR de 9 bits.
barramento denominado b. Note que foi fundamental especificar o Outro exemplo demonstra o poder das agregaes VHDL. Assumindo
comprimento de 3-bits na constante; de outra forma, poderia haver que z um STD_LOGIC_VECTOR de 8 bits, a z dado o valor 10010110
um nmero desconhecido de zeros que poderia aparecer no meio de utilizando-se o seguinte comando de agregao:
y.
Se y fosse menor do que 9-bits, zeros poderiam ser colocados nos z <= ("10", 4 => '1', 2 downto 1 =>'1', others
bits mais significativos. =>'0')

O 10 o primeiro par de bits. So ento colocados 1s no bit 4 e nos


bits 2 e 1. Os outros bits so 0.

255
Captulo quatro Linguagens de Descrio de Hardware

4.2.10. Atrasos
As declaraes HDL podem ser associadas a atrasos especificados em unidades arbitrrias. Eles so
teis durante a simulao para prever o quo rpido um circuito vai funcionar (se o leitor especificar os
atrasos mais significativos), e tambm para propsitos de debugging, para entender a causa e o efeito
(seguir a fonte de uma sada ruim complicado se todos os sinais mudam simultaneamente nos
resultados de uma simulao). Esses atrasos so ignorados durante a sntese; o atraso de uma porta
produzido pelo sintetizador depende das especificaes e , e no de nmeros no cdigo HDL.

O Exemplo HDL 4.13 adiciona atrasos funo original do Exemplo HDL 4.1, = + + .
Ele assume que os inversores tm um atraso de 1 ns, as portas AND de trs entradas tm atrasos de 2 ns,
e as portas OR de trs entradas possuem atrasos de 4 ns. A Figura 4.10 mostra as formas de onda das
simulaes, com y atrasado 7 ns depois das entradas. Note que y inicialmente desconhecido no
comeo da simulao.

Exemplo HDL 4.13 PORTAS LGICAS COM ATRASOS

SystemVerilog VHDL

timescale 1ns/1ps library IEEE; use IEEE.STD_LOGIC_1164.all;


module example(input logic a, b, c,
output logic y); entity example is
port(a, b, c: in STD_LOGIC;
logic ab, bb, cb, n1, n2, n3; y: out STD_LOGIC);
end;
assign #1 {ab, bb, cb} = ~{a, b, c};
assign #2 n1 = ab & bb & cb; architecture synth of example is
assign #2 n2 = a & bb & cb; signal ab, bb, cb, n1, n2, n3: STD_LOGIC;
assign #2 n3 = a & bb & c; begin
assign #4 y = n1 | n2 | n3; ab <= not a after 1 ns;
endmodule bb <= not b after 1 ns;
cb <= not c after 1 ns;
Os arquivos em SystemVerilog podem incluir uma diretiva de escala n1 <= ab and bb and cb after 2 ns;
de tempo que indica o valor de cada unidade de tempo. A declarao n2 <= a and bb and cb after 2 ns;
n3 <= a and bb and c after 2 ns;
256
Captulo quatro Linguagens de Descrio de Hardware

da forma timescale unidade/preciso. Neste arquivo, y <= n1 or n2 or n3 after 4 ns;


cada unidade possui 1 ns, e a simulao possui 1 ps de preciso. Se end;
nenhuma diretiva de escala de tempo dada no arquivo, a unidade
padro de preciso (normalmente, 1 ns para ambas) utilizada. Em Em VHDL, a clusula after utilizada para indicar atraso. As
SystemVerilog, o smbolo # utilizado para indicar o nmero de unidades, neste caso, so especificadas em nanossegundos.
unidades do atraso. Ele pode ser colocado na declarao assign,
assim como atribuies de bloco (=) e no-blocos (<=), como ser
discutido na Seo 4.5.4.

Figura 4.10 Exemplo de formas de onda com atrasos (do simulador ModelSim)

4.3. MODELAGEM ESTRUTURAL


Foi discutida, na seo anterior, a modelagem comportamental, descrevendo um mdulo em termos
das relaes entre as entradas e as sadas. Esta seo examina a modelagem estrutural, descrevendo um
mdulo em termos de como ele composto por mdulos mais simples.
Por exemplo, o Exemplo HDL 4.14 mostra como montar um multiplexador 4:1 a partir de trs
multiplexadores 2:1. Cada cpia do multiplexador 2:1 chamada de instncia. Mltiplas instncias de um
257
Captulo quatro Linguagens de Descrio de Hardware

mesmo mdulo so distinguidas por nomes distintos, nesse caso, lowux, highmux e finalmux. Isso
um exemplo de regularidade, no qual um multiplexador 2:1 reutilizado muitas vezes.

Exemplo HDL 4.14 MODELO ESTRUTURAL DE UM MULTIPLEXADOR 4:1

SystemVerilog VHDL

module mux4(input logic [3:0] d0, d1, d2, d3, library IEEE; use IEEE.STD_LOGIC_1164.all;
input logic [1:0] s,
output logic [3:0] y); entity mux4 is
port(d0, d1,
logic [3:0] low, high; d2, d3: in STD_LOGIC_VECTOR(3 downto 0);
s: in STD_LOGIC_VECTOR(1 downto 0);
mux2 lowmux(d0, d1, s[0], low); y: out STD_LOGIC_VECTOR(3 downto 0));
mux2 highmux(d2, d3, s[0], high); end;
mux2 finalmux(low, high, s[1], y);
endmodule architecture struct of mux4 is
component mux2
As trs instncias mux2 so denominadas lowmux, highmux e port(d0,
finalmux. O mdulo mux2 deve ser definido num outro lugar no d1: in STD_LOGIC_VECTOR(3 downto 0);
cdigo SystemVerilog vide Exemplo HDL 4.5, Exemplo HDL 4.15 ou s: in STD_LOGIC;
Exemplo HDL 4.34. y: out STD_LOGIC_VECTOR(3 downto 0));
end component;
signal low, high: STD_LOGIC_VECTOR(3 downto
0);
begin
lowmux: mux2 port map(d0, d1, s(0), low);
highmux: mux2 port map(d2, d3, s(0), high);
finalmux: mux2 port map(low, high, s(1), y);
end;

A arquitetura deve primeiro declarar os portos mux2 utilizando a


declarao component. Isso permite s ferramentas VHDL verificar
258
Captulo quatro Linguagens de Descrio de Hardware

que os componentes que o leitor deseja utilizar possuem as mesmas


portas que a entidade que foi declarada noutra declarao,
prevenindo erros causados pela mudana de entidade, mas no da
instncia. No entanto, a declarao de componentes torna o cdigo
VHDL bastante trabalhoso.

Figura 4.11 Circuito mux4 sintetizado

O Exemplo HDL 4.15 utiliza modelagem estrutural para construir um multiplexador 2:1 a partir de um
par de buffers tristate. Construir lgica a partir de tristates, no entanto, no recomendado.

Exemplo HDL 4.15 MODELO ESTRUTURAL DE UM MULTIPLEXADOR 2:1

SystemVerilog VHDL

module mux2(input logic [3:0] d0, d1, library IEEE; use IEEE.STD_LOGIC_1164.all;
input logic s,
output tri [3:0] y); entity mux2 is
port(d0, d1: in STD_LOGIC_VECTOR(3 downto 0);

259
Captulo quatro Linguagens de Descrio de Hardware

tristate t0(d0, ~s, y); s: in STD_LOGIC;


tristate t1(d1, s, y); y: out STD_LOGIC_VECTOR(3 downto 0));
endmodule end;

Em SystemVerilog, expresses como ~s so permitidas na lista de architecture struct of mux2 is


portos para uma instncia. Expresses arbitrariamente complicadas component tristate
so permitidas, mas desencorajadas, pois elas deixam o cdigo difcil port(a: in STD_LOGIC_VECTOR(3 downto 0);
de ler. en: in STD_LOGIC;
y: out STD_LOGIC_VECTOR(3 downto 0));
end component;
signal sbar: STD_LOGIC;
begin
sbar <= not s;
t0: tristate port map(d0, sbar, y);
t1: tristate port map(d1, s, y);
end;

Em VHDL, expresses como not s no so permitidas no mapa de


portos para uma instncia. Portanto, sbar deve ser definido como um
sinal separado.

Figura 4.12 Circuito mux2 sintetizado

260
Captulo quatro Linguagens de Descrio de Hardware

O Exemplo HDL 4.16 mostra como mdulos podem acessar parte de um barramento. Um
multiplexador de 8-bits construdo utilizando-se dois multiplexadores 2:1 de 4-bits j definidos,
operando cada um deles os 4-bits mais e menos significativos, respectivamente.
Em geral, os sistemas complexos so projetados hierarquicamente. O sistema como um todo
descrito estruturalmente instanciando-se os seus componentes principais. Cada um destes
componentes descrito estruturalmente a partir dos seus blocos lgicos, e assim por diante,
recursivamente, at que as partes sejam simples o suficiente para serem descritas de modo
comportamental. Este um bom estilo para se evitar (ou ao menos, minimizar) a confuso entre
descries estruturais e comportamentais dentro de um mesmo mdulo.

Exemplo HDL 4.16 ACESSANDO PARTES DE BARRAMENTOS

SystemVerilog VHDL

module mux2_8(input logic [7:0] d0, d1, library IEEE; use IEEE.STD_LOGIC_1164.all;
input logic s,
output logic [7:0] y); entity mux2_8 is
port(d0, d1: in STD_LOGIC_VECTOR(7 downto 0);
mux2 lsbmux(d0[3:0], d1[3:0], s, y[3:0]); s: in STD_LOGIC;
mux2 msbmux(d0[7:4], d1[7:4], s, y[7:4]); y: out STD_LOGIC_VECTOR(7 downto 0));
endmodule end;
architecture struct of mux2_8 is
component mux2
port(d0, d1: in STD_LOGIC_VECTOR(3 downto 0);
s: in STD_LOGIC;
y: out STD_LOGIC_VECTOR(3 downto 0));
end component;
begin
lsbmux: mux2
port map(d0(3 downto 0), d1(3 downto 0),
s, y(3 downto 0));
msbmux: mux2
port map(d0(7 downto 4), d1(7 downto 4),

261
Captulo quatro Linguagens de Descrio de Hardware

s, y(7 downto 4));


end;

Figura 4.13 Circuito mux2_8 sintetizado

4.4. LGICA SEQUENCIAL


Os sintetizadores de HDL reconhecem certas linguagens e as transformam em circuitos sequenciais.
Outros estilos de cdigo podem simular corretamente os circuitos, porm com erros flagrantes ou sutis.
Esta seo apresenta as linguagens apropriadas para descrever registradores e bsculas.
4.4.1. Registradores
A grande maioria dos sistemas comerciais modernos so construdos com registradores utilizando flip-
flops D com disparo na borda positiva. O Exemplo HDL 4.17 mostra como escrever tais flip-flops.

262
Captulo quatro Linguagens de Descrio de Hardware

Nas declaraes always em SystemVerilog, e process, em VHDL, os sinais mantm o seu valor
antigo at que um evento na lista de sensibilidade acontea e, explicitamente, causem a sua mudana.
Consequentemente, tais cdigos, com apropriadas listas de sensibilidade, podem ser utilizados para
descrever circuitos sequenciais com memria. Por exemplo, o flip-flop possui apenas clk na sua lista de
sensibilidade. Ele guarda o ltimo valor de q at prxima borda de subida de clk, mesmo se d muda
temporariamente.

Em contraste, declaraes de atribuio contnua (assign) em SystemVerilog, e declaraes de


atribuio simultnea (<=) em VHDL so reavaliadas a todo momento em que qualquer uma das
entradas do lado direito muda. Portanto, seu cdigo necessariamente descreve lgica combinatria.

Exemplo HDL 4.17 REGISTRADOR

SystemVerilog VHDL

module flop(input logic clk, library IEEE; use IEEE.STD_LOGIC_1164.all;


input logic [3:0] d,
output logic [3:0] q); entity flop is
port(clk: in STD_LOGIC;
always_ff @(posedge clk) d: in STD_LOGIC_VECTOR(3 downto 0);
q <= d; q: out STD_LOGIC_VECTOR(3 downto 0));
endmodule end;

Em geral , uma declarao always em SystemVerilog escrita da architecture synth of flop is


seguinte foma: begin
process(clk) begin
always @(lista de sensibilidade) if rising_edge(clk) then
declarao; q <= d;
end if;
A declarao executada apenas quando algum evento especificado end process;
na lista de sensibilidade ocorre. Nesse exemplo, a declaracao q <= end;
d. Consequentemente, o flip-flop copia d para q na borda de subida
Uma declarao process, em VHDL, escrita na forma:

263
Captulo quatro Linguagens de Descrio de Hardware

do clock e, em outro caso, guarda o valor antigo de q. Note que a lista


de sensibilidade tambm referida como lista de estmulos. process(lista de sensibilidade) begin
<= chamado de declarao nonblocking. Pense nela como sendo um declarao;
sinal = comum por enquanto; ns retornaremos aos pontos mais sutis end process
na Seo 4.5.4. Note que <= usada ao invs de uma declarao
assign dentro de uma always. A declarao statement executada quando qualquer uma das
variveis na lista de sensibilidade muda. Neste exemplo, a declarao
Assim como veremos nas sees subsequentes, declaraes always
podem ser usadas para indicar flip-flops, bsculas ou lgica if verifica se a mudana ocorre no flanco ascendente do clk. Se sim,
combinatria, dependendo da lista de sensibilidade e das declaraes. ento q <= d. Consequentemente, o flip-flop copia d para q na borda
Devido a essa sensibilidade, fcil produzir, inadvertidamente, positiva do clock e, noutro caso, guarda o estado anterior de q.
hardware errado. SystemVerilog introduz as declaraes Uma alternativa em VHDL para declarar flip-flops :
always_ff, always_bscula e always_comb a fim de reduzir
process(clk) begin
o risco de erros comuns. always_ff se comporta como uma
if clk'event and clk = '1' then
always, mas utilizada exclusivamente para indicar flip-flops, e q <= d;
permite s ferramentas produzirem mensagens de advertncia se end if;
alguma outra coisa for indicada. end process;

rising_edge(clk) sinnimo de clkevent and clk =


1

Figura 4.14 Circuito flop sintetizado

4.4.2. Registradores Resettable


Quando a simulao iniciada, ou quando o circuito alimentado, a sada de um flop ou registrador
desconhecida. Isso indicado por um x em SystemVerilog e por u em VHDL. Geralmente, uma boa

264
Captulo quatro Linguagens de Descrio de Hardware

prtica utilizar registradores resettable de modo que, quando alimentado, o leitor possa colocar o seu
sistema num estado conhecido. O reset pode ser tanto assncrono como sncrono. Lembre-se que o reset
assncrono ocorre imediatamente, enquanto o reset sncrono zera a sada apenas na borda de subida
seguinte do clock. O Exemplo HDL 4.18 demonstra o cdigo para flip-flops com resets assncronos e
sncronos. Observe que distinguir um reset sncrono ou assncrono num esquemtico pode ser difcil. O
esquemtico produzido pelo Synplify Premier coloca o reset assncrono abaixo do flip-flop, e o reset
sncrono no lado esquerdo.

Exemplo HDL 4.18 REGISTRADOR RESETTABLE

SystemVerilog VHDL

module flopr(input logic clk, library IEEE; use IEEE.STD_LOGIC_1164.all;


input logic reset,
input logic [3:0] d, entity flopr is
output logic [3:0] q); port(clk, reset: in STD_LOGIC;
d: in STD_LOGIC_VECTOR(3 downto 0);
// asynchronous reset q: out STD_LOGIC_VECTOR(3 downto 0));
always_ff @(posedge clk, posedge reset) end;
if (reset) q <= 4'b0;
else q <= d; architecture asynchronous of flopr is
endmodule begin
process(clk, reset) begin
module flopr(input logic clk, if reset then
input logic reset, q <= "0000";
input logic [3:0] d, elsif rising_edge(clk) then
output logic [3:0] q); q <= d;
end if;
// synchronous reset end process;
always_ff @(posedge clk) end;
if (reset) q <= 4'b0;
else q <= d; library IEEE; use IEEE.STD_LOGIC_1164.all;
endmodule

265
Captulo quatro Linguagens de Descrio de Hardware

Sinais mltiplos numa lista de sensibilidade de declarao always entity flopr is


so separados por uma vrgula ou pela palavra or. Note que port(clk, reset: in STD_LOGIC;
posedge reset est na lista de sensibilidade do flop resettable d: in STD_LOGIC_VECTOR(3 downto 0);
assincronamente, mas no na lista do flop resettable de modo q: out STD_LOGIC_VECTOR(3 downto 0));
end;
sncrono. Portanto, o flop resettable de modo assncrono responde,
imediatamente, ao flanco de subida em reset, mas o flop resettable de architecture synchronous of flopr is
modo sncrono responde a reset apenas no flanco de subida do clock. begin
Devido aos mdulos terem o mesmo nome, flopr, o leitor pode process(clk) begin
incluir apenas um ou outro no seu projeto. if rising_edge(clk) then
if reset then q <= "0000";
else q <= d;
end if;
end if;
end process;
end;

Mltiplos sinais numa lista de sensibilidade process so separados


por vrgula. Note que o reset est dentro da lista de sensisbilidade
no flop resettable assincronamente, mas no na do flop resettable
sincronamente. Portanto, o flop resettable assincronamente responde
imediatamente no flanco ascendente do reset, mas o flop resettable
sincronamente responde ao reset apenas no flanco de subida do
clock.
Lembre-se que o estado do flop inicializado com u durante a
simulao VHDL.
Como mencionado anteriormente, o nome da arquitetura (assncrona
ou sncrona, nesse exemplo) ignorado pelas ferramentas VHDL, mas
podem ser teis para o humano lendo o cdigo. Devido a ambas as
arquiteturas descreverem a entidade flopr, o leitor pode incluir
apenas uma ou outra no seu projeto.

266
Captulo quatro Linguagens de Descrio de Hardware

Figura 4.15 Circuito flopr sintetizado: (a) reset assncrono, (b) reset sncrono

4.4.3. Registradores Enabled


Registradores enabled respondem ao clock apenas quando a liberao (enable) confirmada. O
Exemplo HDL 4.19 mostra um registrador ativado enabled assincronamente que retm seu valor antigo
se tanto reset quanto en so FALSE.

Exemplo HDL 4.19 REGISTRADOR REINICIVEL ENABLED

SystemVerilog VHDL

module flopenr(input logic clk, library IEEE; use IEEE.STD_LOGIC_1164.all;


input logic reset,
input logic en, entity flopenr is
input logic [3:0] d, port(clk,
output logic [3:0] q); reset,
en: in STD_LOGIC;
d: in STD_LOGIC_VECTOR(3 downto 0);
267
Captulo quatro Linguagens de Descrio de Hardware

// asynchronous reset q: out STD_LOGIC_VECTOR(3 downto 0));


always_ff @(posedge clk, posedge reset) end;
if (reset) q <= 4'b0;
else if (en) q <= d; architecture asynchronous of flopenr is
endmodule asynchronous reset
begin
process(clk, reset) begin
if reset then
q <= "0000";
elsif rising_edge(clk) then
if en then
q <= d;
end if;
end if;
end process;
end;

Figura 4.16 Circuito flopenr sintetizado

268
Captulo quatro Linguagens de Descrio de Hardware

4.4.4. Registradores Mltiplos


Uma nica declarao always/process pode ser utilizada para descrever mltiplas partes de
hardware. Por exemplo, considere o sincronizador da Seo 3.5.5, feito a partir de dois flip-flops back-to-
back, como mostrado na Figura 4.17. O Exemplo HDL 4.20 descreve o sincronizador. No flanco ascendente
clk, d copiado para n1. Ao mesmo tempo, n1 copiado para q.

Figura 4.17 Circuito sincronizador

Exemplo HDL 4.20 SINCRONIZADOR

SystemVerilog VHDL

module sync(input logic clk, library IEEE; use IEEE.STD_LOGIC_1164.all;


input logic d,
output logic q); entity sync is
logic n1; port(clk: in STD_LOGIC;
d: in STD_LOGIC;
always_ff @(posedge clk) q: out STD_LOGIC);
begin end;
n1 <= d; // nonblocking
q <= n1; // nonblocking architecture good of sync is
end signal n1: STD_LOGIC;
endmodule begin
process(clk) begin
Note que o construtor begin/end necessrio pois declaraes if rising_edge(clk) then
mltiplas aparecem na declarao always. Isso anlogo s chaves n1 <= d;
q <= n1;

269
Captulo quatro Linguagens de Descrio de Hardware

{ } em C ou Java. O begin/end no seria necessrio no exemplo end if;


flopr pois if/else contam como apenas uma declarao. end process;
end;

n1 deve ser declarado como signal pois ele um sinal interno


utilizado no mdulo.

Figura 4.18 Circuito sync sintetizado

4.4.5. Bsculas
Lembre-se, da Seo 3.2.2, que uma bscula D est transparente quando o clock est a HIGH,
permitindo ao dado fluir da entrada para a sada. A bscula se torna opaca quando o clock est a LOW,
retendo o seu estado antigo. O Exemplo HDL 4.21 mostra o cdigo para uma bscula D.
Nem todas as ferramentas de sntese aceitam as bsculas convenientemente. A no ser que o leitor
saiba que a sua ferramenta aceita bsculas, e que tenha uma boa razo para us-las, evite-as, e, ao invs
deles, utilize flip-flops com disparo pelo flanco. Alm disso, tome cuidado para que a sua HDL no recorra
a uma bscula intencional, algo que fcil de ocorrer se caso o leitor no estiver atento. Muitas
ferramentas de sntese o advertem quando uma bscula criada; se voc no esperava uma, localize o
bug na sua HDL. E se o leitor no sabe se quer uma bscula ou no, provavelmente est aproximando a
HDL de uma linguagem de programao, e, nesse caso, existem grandes problemas espreita.

270
Captulo quatro Linguagens de Descrio de Hardware

4.5. MAIS LGICA COMBINATRIA


Na Seo 4.2, utilizamos declaraes de atribuio para descrever lgica combinatria de modo
comportamental. As declaraes always, em SystemVerilog, e process, em VHDL, so utilizadas para
descrever circuitos sequenciais, pois retm o estado antigo quando nenhum estado novo estabelecido.
No entanto, as declaraes always/process tambm podem ser usadas para descrever lgica
combinatria de modo comportamental, se a lista de sensibilidade for escrita para responder a mudanas
em todas as entradas, e o corpo estabelecer o valor da sada para cada possvel combinao na entrada.
O Exemplo HDL 4.22 utiliza declaraes always/process para descrever um banco de quatro
inversores (veja a Figura 4.3 para o circuito sintetizado).

Exemplo HDL 4.21 BSCULA D

SystemVerilog VHDL

module bscula(input logic clk, library IEEE; use IEEE.STD_LOGIC_1164.all;


input logic [3:0] d,
output logic [3:0] q); entity bscula is
always_bscula port(clk: in STD_LOGIC;
if (clk) q <= d; d: in STD_LOGIC_VECTOR(3 downto 0);
endmodule q: out STD_LOGIC_VECTOR(3 downto 0));
end;
always_latch equivalente a always@(clk,d), e o modo
preferido para se descrever uma bscula em SystemVerilog. Ele architecture synth of bscula is
avaliado todas as vezes em que clk ou d muda de valor. Se clk begin
est HIGH, d flui atravs de q. Ento, este cdigo descreve uma process(clk, d) begin
if clk = '1' then
bscula sensvel a um nvel positivo. De outro modo, q mantm o seu
q <= d;
valor anterior. A SystemVerilog pode gerar uma advertncia se o bloco end if;
always_latch no indicar uma bscula. end process;
end;

271
Captulo quatro Linguagens de Descrio de Hardware

A lista de sensibilidade contm ambos, clk e d, ento, process


avaliado a qualquer momento em que clk ou d mudam de valor. Se
clk est HIGH, d flui para q.

Figura 4.19 Circuito bscula sintetizado

Exemplo HDL 4.22 INVERSOR UTILIZANDO ALWAYS/PROCESS

SystemVerilog VHDL

module inv(input logic [3:0] a, library IEEE; use IEEE.STD_LOGIC_1164.all;


output logic [3:0] y);
always_comb entity inv is
y = ~a; port(a: in STD_LOGIC_VECTOR(3 downto 0);
endmodule y: out STD_LOGIC_VECTOR(3 downto 0));
end;
always_comb reavalia as declaraes dentro da declarao
always a qualquer momento que os sinais do lado direito de <=, ou architecture proc of inv is
de =, mudem. Nesse caso, ele equivalente a always @(a), mas begin
melhor, pois evita erros se os sinais da declarao always forem process(all) begin
y <= not a;
renomeados ou adicionados. Se o cdigo dentro do bloco always
end process;
no de lgica combinatria, a SystemVerilog gera uma advertncia. end;

272
Captulo quatro Linguagens de Descrio de Hardware

always_comb equivalente a always @(*), mas prefervel em process(all) reavalia as declaraes dentro de process a
SystemVerilog. qualquer momento em que algum dos sinais em process mude de
O sinal = dentro da declarao always chamado atribuio valor. equivalente a process(a), mas melhor, pois evita erros
blocking, em contraste com a atribuio <=. Em SystemVerilog uma se os sinais em process forem renomeados ou adicionados.
boa prtica utilizar atribuies blocking para logica combinatrio e As declaraes begin e end so exigidas em VHDL, apesar de
atribuies nonblocking para lgica sequencial. Isso ser discutido de process conter apenas uma declarao.
forma detalhada na Seo 4.5.4.
As HDL aceitam declaraes blocking e nonblocking numa declarao always/process. Um grupo
de declaraes blocking avaliado na ordem em que aparecem no cdigo, do mesmo modo em que numa
linguagem de programao padro. Um grupo de declaraes nonblocking avaliado simultaneamente;
todas as declaraes so avaliadas antes de qualquer sinal do lado esquerdo seja atualizado.

O Exemplo HDL 4.23 define um full adder utilizando os sinais intermedirios p e g para computar s e
cout. Ele produz o mesmo circuito da Figura 4.8, mas utiliza declaraes always/process no lugar
de declaraes de atribuio.

Estes dois exemplos so aplicaes ruins das declaraes always/process para a modelagem de
logica combinatria, pois eles requerem mais linhas do que suas aproximaes equivalentes com
declaraes de atribuio, dos Exemplo HDL 4.2 e Exemplo HDL 4.7. No entanto, as declaraes case e
if so convenientes para modelar lgica combinatria mais complexa. Declaraes case e if devem
aparecer dentro de uma declarao always/process, e sero examinadas nas prximas sees.

SystemVerilog VHDL

Numa declarao always em SystemVerilog = indica uma Numa declarao process, em VHDL, := indica uma declarao
atribuio blocking e <= indica uma declarao nonblocking (tambm blocking, e <= indica uma declarao nonblocking (tambm chamada
chamada de declarao concorrente). declarao simultnea). Esta a primeira seo onde :=
No confunda nenhum tipo com atribuio contnua utilizando a introduzido.
declarao assign. A declarao assign deve ser utilizada fora Declaraes nonblocking so feitas para sadas e para sinais.
das declaraes always e tambm so avaliadas simultaneamente. Declaraes blocking so feitas para variveis, as quais so declaradas
na declarao process (veja Exemplo HDL 4.23). <= tambm pode

273
Captulo quatro Linguagens de Descrio de Hardware

aparecer fora de declaraes process, onde tambm avaliado


simultaneamente.

Exemplo HDL 4.23 FULL ADDER UTILIZANDO ALWAYS/PROCESS

SystemVerilog VHDL

module fulladder(input logic a, b, cin, library IEEE; use IEEE.STD_LOGIC_1164.all;


output logic s, cout);
logic p, g; entity fulladder is
port(a, b, cin: in STD_LOGIC;
always_comb s, cout: out STD_LOGIC);
begin end;
p = a ^ b; // blocking
g = a & b; // blocking architecture synth of fulladder is
begin
s = p ^ cin; // blocking process(all)
cout = g | (p & cin); // blocking variable p, g: STD_LOGIC;
end begin
endmodule p := a xor b; blocking
g := a and b; blocking
Nesse caso, always @(a, b, cin) poderia ser equivalente a s <= p xor cin;
always_comb. No entanto, always_comb melhor pois evita cout <= g or (p and cin);
erros comuns, como o esquecimento de sinais na lista de end process;
sensibilidade. end;
Por razes que sero discutidas na Seo 4.5.4 melhor utilizar
declaraes blocking para lgica combinatria. Esse exemplo utiliza Nesse caso, process(a, b, cin) poderia ser equivalente a
declaraes blocking, primeiro computando p, depois g, depois s, e process(all). No entanto, process(all) melhor pois evita
finalmente, cout. erros comuns, como o esquecimento de sinais na lista de
sensibilidade.

274
Captulo quatro Linguagens de Descrio de Hardware

Por razes que sero discutidas na Seo 4.5.4, melhor utilizar


declaraes blocking para a lgica combinatria. Este exemplo utiliza
declaraes blocking para p e g para que eles adquiram novos valores
antes de serem utilizados para computar s e cout, que dependem
deles.
Devido a p e g aparecerem do lado esquerdo da declarao blocking
(:=) em process, eles devem ser declarados como sendo
variable, ao invs de signal. A declarao de variveis aparece
antes de begin no processo onde a varivel usada.

4.5.1. Declaraes Case


Uma boa aplicao do uso das declaraes always/process para lgica combinatria o
decodificador de display de sete segmentos, que tira vantagem da declarao case, que, por sua vez,
deve aparecer dentro da declarao always/process.
Como o leitor deve ter notado no decodificador de display de sete segmentos do exemplo 2.10, o
processo de projeto para grandes blocos de lgica combinatria tedioso e passvel de erros. As HDL
oferecem uma grande melhora, permitindo ao leitor especificar a funo num nvel de abstrao maior,
e ento, automaticamente, sintetizar a funo em portas. O Exemplo HDL 4.24 usa declaraes case
para descrever um decodificador de display de sete segmentos baseado em sua tabela verdade. A
declarao case realiza diferentes aes, dependendo do valor de sua entrada. Uma declarao case
indica lgica combinatria se todas as possveis combinaes de entrada so definidas; de outro modo,
ela indica lgica sequencial, pois, nos casos indefinidos, a sada ir manter o seu antigo valor.

Exemplo HDL 4.24 DECODIFICADOR DE DISPLAY DE SETE SEGMENTOS

SystemVerilog VHDL

module sevenseg(input logic [3:0] data, library IEEE; use IEEE.STD_LOGIC_1164.all;


output logic [6:0] segments);
entity seven_seg_decoder is
port(data: in STD_LOGIC_VECTOR(3 downto 0);
275
Captulo quatro Linguagens de Descrio de Hardware

always_comb segments: out STD_LOGIC_VECTOR(6 downto


case(data) 0));
// abc_defg end;
0: segments = 7'b111_1110;
1: segments = 7'b011_0000; architecture synth of seven_seg_decoder is
2: segments = 7'b110_1101; begin
3: segments = 7'b111_1001; process(all) begin
4: segments = 7'b011_0011; case data is
5: segments = 7'b101_1011; abcdefg
6: segments = 7'b101_1111; when X"0" => segments <= "1111110";
7: segments = 7'b111_0000; when X"1" => segments <= "0110000";
8: segments = 7'b111_1111; when X"2" => segments <= "1101101";
9: segments = 7'b111_0011; when X"3" => segments <= "1111001";
default: segments = 7'b000_0000; when X"4" => segments <= "0110011";
endcase when X"5" => segments <= "1011011";
endmodule when X"6" => segments <= "1011111";
when X"7" => segments <= "1110000";
A declarao case verifica o valor de data. Quando data 0, a when X"8" => segments <= "1111111";
declarao realiza a ao depois da vrgula, activando segments when X"9" => segments <= "1110011";
para 1111110. A declarao case similarmente verifica outros when others => segments <= "0000000";
valores de dados maiores do que 9 (sem uso para a base padro, 10). end case;
end process;
A clusula default um modo conveniente de definir as sadas para
end;
todos os casos no listados explicitamente, garantindo combinao
lgica. A declarao case verifica o valor de data. Quando data 0, a
Em SystemVerilog, declaraes case devem aparecer dentro de
declarao realiza a ao aps >=, activando segments para
declaraes always.
1111110. A declarao case similarmente verifica outros valores de
dados maiores do que 9 (note o uso de X para nmeros hexadecimais).
A clusula others um modo conveniente de definir a sada para
todos os casos no listados explicitamente, garantindo a lgica
combinatria.
Diferente de SystemVerilog, VHDL suporta declaraes de atribuies
de sinais selecionados (veja o exemplo 4.6), as quais se parecem muito
com declaraes case, mas podem aparecer fora dos processos.
276
Captulo quatro Linguagens de Descrio de Hardware

Portanto, existem menos razes para se utilizar processos para


descrever lgica combinatria.

Figura 4.20 Circuito sevenseg sintetizado

O software Synplify Premier sintetiza o decodificador de display de sete segmentos numa read-only
memory (ROM) contendo 7 sadas para cada uma das 16 entradas possveis. As ROM so discutidas melhor
na Seo 5.5.6.

Se as clusulas default ou others estiverem fora da declarao case, o decodificador deveria


lembrar o seu valor anterior de sada a qualquer momento em que o dado estiver na faixa de 10-15. Isso
um comportamento estranho para um hardware.

Os decodificadores ordinrios tambm so comumente escritos com declaraes case. O Exemplo


HDL 4.25 descreve um decodificador 3:8.

Exemplo HDL 4.25 DECODIFICADOR 3:8

SystemVerilog VHDL

module decoder3_8(input logic [2:0] a, library IEEE; use IEEE.STD_LOGIC_1164.all;


output logic [7:0] y);
always_comb entity decoder3_8 is
case(a) port(a: in STD_LOGIC_VECTOR(2 downto 0);
3'b000: y = 8'b00000001; y: out STD_LOGIC_VECTOR(7 downto 0));
3'b001: y = 8'b00000010; end;
3'b010: y = 8'b00000100;

277
Captulo quatro Linguagens de Descrio de Hardware

3'b011: y = 8'b00001000; architecture synth of decoder3_8 is


3'b100: y = 8'b00010000; begin
3'b101: y = 8'b00100000; process(all) begin
3'b110: y = 8'b01000000; case a is
3'b111: y = 8'b10000000; when "000" => y <= "00000001";
default: y = 8'bxxxxxxxx; when "001" => y <= "00000010";
endcase when "010" => y <= "00000100";
endmodule when "011" => y <= "00001000";
when "100" => y <= "00010000";
A declarao default no estritamente necessria, neste caso, when "101" => y <= "00100000";
para a sntese lgica, pois todas as possveis combinaes da entrada when "110" => y <= "01000000";
so definidas, mas prudente para a simulao, no caso de uma das when "111" => y <= "10000000";
entradas ser x ou z. when others => y <= "XXXXXXXX";
end case;
end process;
end;

A declarao others no estritamente necessria, neste caso, para


a sntese lgica, pois todas as possveis combinaes da entrada so
definidas, mas prudente para a simulao, no caso de uma das
entradas ser x , z ou u.

278
Captulo quatro Linguagens de Descrio de Hardware

Figura 4.21 Circuito decoder3_8 sintetizado

279
Captulo quatro Linguagens de Descrio de Hardware

4.5.2. Declaraes If
Declaraes always/process podem conter declaraes if. A declarao if pode ser seguida
por uma declarao else. Se todas as possveis combinaes de entrada esto cobertas, a declarao
indica lgica combinatria; de outro modo, ela produz lgica sequencial (da mesma forma que a bscula
na Seo 4.4.5).

O Exemplo HDL 4.26 utiliza declaraes if para descrever um circuito de prioridade, definido na Seo
2.4. Lembre-se que um circuito prioridade de N-entradas ativa a sada que corresponde entrada mais
significativa que est no nvel TRUE.

Exemplo HDL 4.26 CIRCUITO PRIORIDADE

SystemVerilog VHDL

module priorityckt(input logic [3:0] a, library IEEE; use IEEE.STD_LOGIC_1164.all;


output logic [3:0] y);
entity priorityckt is
always_comb port(a: in STD_LOGIC_VECTOR(3 downto 0);
if (a[3]) y <= 4'b1000; y: out STD_LOGIC_VECTOR(3 downto 0));
else if (a[2]) y <= 4'b0100; end;
else if (a[1]) y <= 4'b0010;
else if (a[0]) y <= 4'b0001; architecture synth of priorityckt is
else y <= 4'b0000; begin
endmodule process(all) begin
if a(3) then y <= "1000";
Em SystemVerilog, declaraes if devem aparecer dentro de elsif a(2) then y <= "0100";
declaraes always elsif a(1) then y <= "0010";
elsif a(0) then y <= "0001";
else y <= "0000";
end if;
end process;
end;

280
Captulo quatro Linguagens de Descrio de Hardware

Ao contrrio de SystemVerilog, VHDL aceita declaraes de atribuio


de sinais condicionais (vide exemplo HDL 4.6), onde h muito mais
declaraes if, mas podem aparecer fora dos processos. Portanto,
existem menos razes para se usar processos para descrever lgica
combinatria.

Figura 4.22 Circuito priorityckt sintetizado

4.5.3. Tabelas Verdade com Dont Cares


Como examinado na Seo 2.7.3, as tabelas verdade podem incluir dont cares, permitindo assim uma
maior simplificao da lgica. O Exemplo HDL 4.27 mostra como descrever um circuito prioridade com
dont cares.

281
Captulo quatro Linguagens de Descrio de Hardware

O sintetizador Synplify Premier gera um circuito um pouco diferente para esse mdulo (mostrado na
Figura 4.23), do que o circuito prioridade da Figura 4.22. No entanto, os circuitos so logicamente
equivalentes.

Exemplo HDL 4.27 CIRCUITO PRIORIDADE UTILIZANDO DONT CARES

SystemVerilog VHDL

module priority_casez(input logic [3:0] a, library IEEE; use IEEE.STD_LOGIC_1164.all;


output logic [3:0] y);
entity priority_casez is
always_comb port(a: in STD_LOGIC_VECTOR(3 downto 0);
casez(a) y: out STD_LOGIC_VECTOR(3 downto 0));
4'b1???: y <= 4'b1000; end;
4'b01??: y <= 4'b0100;
4'b001?: y <= 4'b0010; architecture dontcare of priority_casez is
4'b0001: y <= 4'b0001; begin
default: y <= 4'b0000; process(all) begin
endcase case? a is
endmodule when "1---" => y <= "1000";
when "01--" => y <= "0100";
A declarao casez age como uma declarao case, exceto pelo when "001-" => y <= "0010";
fato de que tambm reconhece ? como dont care when "0001"=> y <= "0001";
when others=> y <= "0000";
end case?;
end process;
end;

A declarao case? age como uma declarao case, exceto pelo


fato de que tambm reconhece como dont care.

282
Captulo quatro Linguagens de Descrio de Hardware

Figura 4.23 Circuito priority_casez sintetizado

4.5.4. Atribuies Blocking e Nonblocking


As orientaes abaixo explicam quando e como utilizar cada tipo de atribuio. Se essas orientaes
no forem seguidas, possvel que o leitor escreva um cdigo que aparentemente funciona na simulao,
mas sintetiza o hardware incorretamente. O restante opcional desta seo explica os princpios por trs
dessas orientaes.

283
Captulo quatro Linguagens de Descrio de Hardware

ORIENTAES PARA ATRIBUIES BLOCKING E NONBLOCKING

SystemVerilog VHDL

1. Use always_ff @(posedge clk) e atribuies 1. Utilize process(clk) e atribuies nonblocking para a
nonblocking para a modelagem de lgicas sequenciais modelagem de lgicas sequenciais sncronas.
sncronas.
process(clk) begin
always_ff @(posedge clk) if rising_edge(clk) then
begin n1 <= d; nonblocking
n1 <= d; // nonblocking q <= n1; nonblocking
q <= n1; // nonblocking end if;
end end process;

2. Utilize atribuies contnuas para a modelagem de lgicas 2. Utilize atribuies concorrentes do lado de fora das
combinatrias simples. declaraes process para a modelagem de lgicas
combinatrias simples.
assign y = s ? d1 : d0;
y <= d0 when s = '0' else d1;
3. Utilize always_comb e atribuies blocking para a
modelagem de lgicas combinatrias mais complicadas onde a 3. Utilize process(all) para a modelagem de lgicas
declarao always til. combinatrias mais complicadas, onde process til. Utilize
atribuies blocking para variveis internas.
always_comb
begin process(all)
p = a ^ b; // blocking variable p, g: STD_LOGIC;
g = a & b; // blocking begin
s = p ^ cin; p := a xor b; blocking
cout = g | (p & cin); g := a and b; blocking
end s <= p xor cin;
cout <= g or (p and cin);
end process;
284
Captulo quatro Linguagens de Descrio de Hardware

4. No faa atribuies para o mesmo sinal em mais de uma


declarao always ou em declaraes de atribuio 4. No faa atribuies para a mesma varivel em mais de um
contnua. process ou em declaraes de atribuies concorrentes.

Lgica Combinatria*
O full adder do Figura 4.23 corretamente modelado utilizando-se atribuies blocking. Esta seo
explora como funciona, e como seria diferente se as atribuies nonblocking fossem utilizadas.

Imagine que a, b, e c possuem todos o valor inicial de 0. p, g, s e cout possuem, ento, tambm o
valor 0. Em algum momento, a muda para 1, disparando a declarao always/process. As quatro
atribuies blocking so avaliadas na ordem mostrada aqui (No cdigo VHDL, s e cout so declaradas
concorrentemente). Note que p e g recebem seus novos valores antes que s e cout sejam computados
devido s atribuies blocking. Isso importante pois ns queremos computar s e cout utilizando os
novos valores de p e g.
1. 10= 1
2. 10= 0
3. 10= 1
4. 0 + 1 0 = 0
Em contraste, a Figura 4.28 ilustra o uso de atribuies nonblocking.

Agora, considere o mesmo caso de uma mudana de 0 para 1 enquanto b e cin so 0. As quatro
atribuies nonblocking so computadas concorrentemente.
1 0 = 1; 1 0 = 0; 0 0 = 0; 0 + 0 0 = 0

285
Captulo quatro Linguagens de Descrio de Hardware

Exemplo HDL 4.28 FULL ADDER UTILIZANDO ATRIBUIES NONBLOCKING

SystemVerilog VHDL

// nonblocking assignments (not recommended) nonblocking assignments (not recommended)


module fulladder(input logic a, b, cin, library IEEE; use IEEE.STD_LOGIC_1164.all;
output logic s, cout);
logic p, g; entity fulladder is
port(a, b, cin: in STD_LOGIC;
always_comb s, cout: out STD_LOGIC);
begin end;
p <= a ^ b; // nonblocking
g <= a & b; // nonblocking architecture nonblocking of fulladder is
s <= p ^ cin; signal p, g: STD_LOGIC;
cout <= g | (p & cin); begin
end process(all) begin
endmodule p <= a xor b; nonblocking
g <= a and b; nonblocking
s <= p xor cin;
cout <= g or (p and cin);
end process;
end;

Devido a p e g aparecerem do lado esquerdo de uma atribuio


nonblocking numa declarao process, eles devem ser declarados
como signal ao invs de variable. A declarao signal
aparece antes de begin em architecture, no o process.

286
Captulo quatro Linguagens de Descrio de Hardware

Observe que s computado concorrentemente com p e, consequentemente, utiliza o valor antigo de p,


no o novo. Portanto, s continua 0 ao invs de se tornar 1. No entanto, p muda de 0 para 1. Essa mudana
dispara a declarao always/process para computar uma segunda vez, como se segue:

1 0 = 1; 1 0 = 0; 1 0 = 1; 0 + 1 0 = 0
Desta vez, p j est com valor 1, ento s muda corretamente para 1. As atribuies nonblocking
eventualmente alcanam a resposta correta, mas a declarao always/process tem de ser
computada duas vezes. Isso torna a simulao lenta, embora ela sintetize o mesmo hardware.
Outra desvantagem das atribuies nonblocking na modelagem de lgica combinatria que o cdigo
HDL ir produzir o resultado errado se o leitor se esquecer de incluir as variveis intermedirias na lista
de sensibilidade.
Pior ainda, algumas ferramentas de sntese iro sintetizar corretamente o hardware mesmo quando
uma lista de sensibilidade falsa causar uma simulao incorreta. Isso leva a uma confuso entre os
resultados da simulao e o que o harware verdadeiramente faz.

SystemVerilog VHDL

Se a lista de sensibilidade da declarao always na Figura 4.28 fosse Se a lista de sensibilidade de process na Figura 4.28 fosse escrita
escrita como always @(a,b,cin) ao invs de always_comb, ento como process(a,b,cin) ao invs de process(all), ento a
a declarao poderia no computar novamente quando p ou g declarao poderia no computar novamente quando p ou g
mudassem de valor. Nesse caso, s poderia ser deixado incorreto como mudassem de valor. Nesse caso, s poderia ser deixado incorreto como
0, e no 1. 0, e no 1.

Lgica Sequencial*
O sincronizador da Figura 4.20 modelado corretamente utilizando declaraes nonblocking. Na
borda de subida do clock, d copiado para n1 ao mesmo tempo em que n1 copiado para q, ento o

287
Captulo quatro Linguagens de Descrio de Hardware

cdigo descreve, apropriadamente, dois registradores. Por exemplo, suponha inicialmente que d = 0,
n1 = 1 e q = 0. Na borda de subida do clock, as duas atribuies seguintes ocorrem concorrentemente,
de modo que, aps a borda de clock, n1 = 0 e q = 1.

1 = 0; 1 = 1
O Figura 4.29 tenta descrever o mesmo mdulo utilizando atribuies nonblocking. No flanco
asncendente do clock, d copiado para n1. Ento o novo valor de n1 copiado para q, resultando em d
aparecendo, impropriamente, tanto em n1 como em q. As atribuies ocorrem uma aps a outra de
modo que, aps o flanco do clock, q=n1=0.
1. 1 = 0
2. 1 = 0

Exemplo HDL 4.29 MAU SINCRONIZADOR COM ATRIBUIES BLOCKING

SystemVerilog VHDL

// Bad implementation of a synchronizer using Bad implementation of a synchronizer using


blocking blocking
// assignments assignment

module syncbad(input logic clk, library IEEE; use IEEE.STD_LOGIC_1164.all;


input logic d,
output logic q); entity syncbad is
port(clk: in STD_LOGIC;
logic n1; d: in STD_LOGIC;
q: out STD_LOGIC);
always_ff @(posedge clk) end;
begin
n1 = d; // blocking architecture bad of syncbad is
q = n1; // blocking begin
end process(clk)
endmodule variable n1: STD_LOGIC;
begin
288
Captulo quatro Linguagens de Descrio de Hardware

if rising_edge(clk) then
n1 := d; -- blocking
q <= n1;
end if;
end process;
end;

Figura 4.24 Circuito syncbad sintetizado

Devido a n1 ser invisvel para o mundo externo e no ter influncia no comportamento de q, o


sintetizador o otimiza inteiramente, como mostrado na Figura 4.24.
A moral dessa ilustrao a de utilizar atribuies nonblocking exclusivamente em declaraes
always/process quando modelar lgica sequencial. Com habilidade suficiente, com a inverso da
ordem das atribuies, voc pode fazer atribuies blocking funcionarem corretamente, mas atribuies
blocking no oferecem vantagens e apenas introduzem o risco de um comportamento incompreensvel.
Certos circuitos sequenciais no iro funcionar corretamente com atribuies blocking, no importa a
ordem.

4.6. MQUINAS DE ESTADOS FINITOS


Lembre-se que uma mquina de estados finitos (FSM) consiste num registrador de estado e dois blocos
de lgica combinatria para computar o prximo estgio e a sada, dados o estado atual e a entrada, como
mostrado na Figura 4.22. As descries HDL da mquinas de estado so correspondentemente divididas
em trs partes: a modelagem do registrador de estado, o prximo estado lgico, e a sada lgica.
289
Captulo quatro Linguagens de Descrio de Hardware

Exemplo HDL 4.30 MQUINA DE ESTADO FINITA DIVIDIR POR 3

SystemVerilog VHDL

module divideby3FSM(input logic clk, library IEEE; use IEEE.STD_LOGIC_1164.all;


input logic reset,
output logic y); entity divideby3FSM is
typedef enum logic [1:0] {S0, S1, S2} port(clk, reset: in STD_LOGIC;
statetype; y: out STD_LOGIC);
statetype [1:0] state, nextstate; end;

// state register architecture synth of divideby3FSM is


always_ff @(posedge clk, posedge reset) type statetype is (S0, S1, S2);
if (reset) state <= S0; signal state, nextstate: statetype;
else state <= nextstate; begin
state register
// next state logic process(clk, reset) begin
always_comb if reset then state <= S0;
case (state) elsif rising_edge(clk) then
S0: nextstate <= S1; state <= nextstate;
S1: nextstate <= S2; end if;
S2: nextstate <= S0; end process;
default: nextstate <= S0;
endcase next state logic
nextstate <= S1 when state = S0 else
// output logic S2 when state = S1 else
assign y = (state = = S0); S0;
endmodule output logic
y <= '1' when state = S0 else '0';
A declarao typedef define statetype como sendo um valor do end;
tipo logic de dois bits com trs possibilidades: S0, S1 ou S2.
state e nexstate so sinais statetype. Este exemplo define um novo tipo de dado de enumerao, statetype,
com trs possiblidades: S0, S1 e S2. state e nextstate so
290
Captulo quatro Linguagens de Descrio de Hardware

As codificaes padro enumeram a ordem numrica: S0=00, sinais statetype. Utilizando a enumerao ao invs de escolher a
S1=01, S2=10. As codificaes podem ser explicitamente definidas codificao do estado, a VHDL d liberdade ao sintetizador para
pelo usurio, no entanto, a ferramenta de sntese os vem como explorar vrias codificaes de estado at encontrar a melhor.
sugestes, no como requerimentos. Por exemplo, a parte de cdigo A sada, y, 1 quando o estado S0. A comparao de desigualdade
abaixo codifica os estados como valores de 3-bits one-hot: utiliza /=. Para produzir uma sada 1 quando o estado for qualquer
um, exceto S0, mude a comparao para state /= S0.
typedef enum logic [2:0] {S0 = 3'b001, S1 =
3'b010, S2 = 3'b100}
statetype;

Note como a declarao case utilizada para definir a tabela de


transio de estados. Como o prximo estado lgico deve ser
combinatrio, default necessrio, embora o estado 2b11
nunca deva mudar.
A sada, y, 1 quando o estado S0. A comparao de igualdade
a==b muda o valor para 1 se a igual a b, e 0 em qualquer outro
caso.
A comparao de desigualdade a!=b realiza o inverso, dando o valor
de 1 se a for diferente de b.

O Exemplo HDL 4.30 descreve a FMS diviso por 3 da Seo 3.4.2. Ela fornece um reset assncrono
para a inicializao da FSM. O registrador de estado utiliza a linguagem padro para flip-flops. O prximo
estado e a sada so combinatrios.
A ferramenta de sntese Synplify Premier apenas produz um diagrama de blocos e um diagrama de
transio de estados para mquinas de estado; ela no mostra as portas lgicas ou as entradas nos arcos
e estados. Portanto, tenha o cuidado de especificar corretamente a FSM no seu cdigo HDL. O diagrama
de transio de estados na Figura 4.25 para a FSM de diviso por 3 anlogo ao diagrama da Figura 3.28
(b). O crculo duplo indica que S0 o estado de reset. As implementaes a nvel de porta para a FSM de
diviso por 3 foram mostradas na Seo 3.4.2.

291
Captulo quatro Linguagens de Descrio de Hardware

Figura 4.25 Circuito divideby3fsm sintetizado

Note que os estados so nomeados com um tipo de dado de enumerao, ao invs de nos referirmos
a eles em valores binrios. Isso deixa o cdigo mais legvel e mais fcil de mudar.
Se, por alguma razo, quisssemos que a sada fosse HIGH nos estados S0 e S1, a sada lgica seria
modificada como se segue.

SystemVerilog VHDL

// output logic output logic


assign y = (state = = S0 | state = = S1); y <= '1' when (state = S0 or state = S1) else
'0';

Os dois prximos exemplos de cdigo descrevem a FSM reconhecedora de padro de caracol,


mostrada na Seo 3.4.3. O cdigo mostra como utilizar declaraes case e if para lidar com prximos
estados e sadas lgicas que dependem tanto das entradas como dos estados atuais. Mostramos tanto

292
Captulo quatro Linguagens de Descrio de Hardware

os mdulos de Mealey como de Moore. Na mquina de Moore (Exemplo HDL 4.31), a sada depende
apenas do estado atual, enquanto a mquina de Mealy (Exemplo HDL 4.32), a sada lgica depende tanto
dos estados atuais como das entradas.

Exemplo HDL 4.31 FSM DE MOORE RECONHECEDORA DE PADRO

SystemVerilog VHDL

module patternMoore(input logic clk, library IEEE; use IEEE.STD_LOGIC_1164.all;


input logic reset,
input logic a, entity patternMoore is
output logic y); port(clk, reset: in STD_LOGIC;
typedef enum logic [1:0] {S0, S1, S2} a: in STD_LOGIC;
statetype; y: out STD_LOGIC);
statetype state, nextstate; end;

// state register architecture synth of patternMoore is


always_ff @(posedge clk, posedge reset) type statetype is (S0, S1, S2);
if (reset) state <= S0; signal state, nextstate: statetype;
else state <= nextstate; begin
state register
// next state logic process(clk, reset) begin
always_comb if reset then state <= S0;
case (state) elsif rising_edge(clk) then state <=
S0: if (a) nextstate = S0; nextstate;
else nextstate = S1; end if;
S1: if (a) nextstate = S2; end process;
else nextstate = S1;
S2: if (a) nextstate = S0; next state logic
else nextstate = S1; process(all) begin
default: nextstate = S0; case state is
endcase when S0 =>
if a then nextstate <= S0;
else nextstate <= S1;

293
Captulo quatro Linguagens de Descrio de Hardware

// output logic end if;


assign y = (state = = S2); when S1 =>
endmodule if a then nextstate <= S2;
else nextstate <= S1;
Note como as atribuies nonblocking (<=) so utilizadas nos end if;
registradores de estados para descrever lgica sequencial, enquanto when S2 =>
as atribuies blocking (=) so utilizadas no estado lgico seguinte if a then nextstate <= S0;
para descrever lgica combinatria. else nextstate <= S1;
end if;
when others =>
nextstate <= S0;
end case;
end process;

output logic
y <= '1' when state = S2 else '0';
end;

Figura 4.26 Circuito patternMoore sintetizado

294
Captulo quatro Linguagens de Descrio de Hardware

Exemplo HDL 4.32 FSM DE MEALY RECONHECEDORA DE PADRO

SystemVerilog VHDL

module patternMealy(input logic clk, library IEEE; use IEEE.STD_LOGIC_1164.all;


input logic reset,
input logic a, entity patternMealy is
output logic y); port(clk, reset: in STD_LOGIC;
a: in STD_LOGIC;
typedef enum logic {S0, S1} statetype; y: out STD_LOGIC);
statetype state, nextstate; end;

// state register architecture synth of patternMealy is


always_ff @(posedge clk, posedge reset) type statetype is (S0, S1);
if (reset) state <= S0; signal state, nextstate: statetype;
else state <= nextstate; begin
state register
// next state logic process(clk, reset) begin
always_comb if reset then state <= S0;
case (state) elsif rising_edge(clk) then state <=
S0: if (a) nextstate = S0; nextstate;
else nextstate = S1; end if;
S1: if (a) nextstate = S0; end process;
else nextstate = S1;
default: nextstate = S0; next state logic
endcase process(all) begin
case state is
// output logic when S0 =>
assign y = (a & state = = S1); if a then nextstate <= S0;
endmodule else nextstate <= S1;
end if;
when S1 =>
if a then nextstate <= S0;
295
Captulo quatro Linguagens de Descrio de Hardware

else nextstate <= S1;


end if;
when others =>
nextstate <= S0;
end case;
end process;
output logic
y <= '1' when (a = '1' and state = S1) else
'0';
end;

Figura 4.27 Circuito patternMealy sintetizado

296
Captulo quatro Linguagens de Descrio de Hardware

4.7. TIPOS DE DADOS*


Esta seo explica mais a fundo algumas sutilezas a respeito dos tipos de dados em VHDL e
SystemVerilog.
4.7.1. SystemVerilog
Anteriormente ao SystemVerilog, a Verilog primeiramente utilizava dois tipos: reg e wire. Apesar do
nome, um sinal reg pode ser ou no associado a um registrador. Isso era uma grande fonte de confuso
para aqueles que estavam aprendendo a linguagem.

SystemVerilog introduziu o tipo logic para eliminar a confuso; consequentemente, este livro
enfatiza o tipo logic. Esta seo explica os tipos reg e wire com mais detalhes para aqueles que
precisam ler algum velho cdigo Verilog.

Em Verilog, se um sinal aparece esquerda de <= ou = num bloco always, deve ser declarado como
reg. De outra forma, deveria ser declarado como wire. Consequentemente, um sinal reg pode ser a
sada de um flip-flop, bscula, ou lgica combinatria, dependendo da lista de sensibilidade e da declarao
de um bloco always.

Por padro, portas de entrada e de sada so do tipo wire, a no ser que sejam explicitamente
definidos como reg. O exemplo seguinte mostra como um flip-flop descrito em Verilog convencional.
Note que clk e d so, por padro, wire, enquanto q explicitamente definido como reg, pois aparece
esquerda de <= no bloco always.
module flop(input clk,
input [3:0] d,
output reg [3:0] q);
always @(posedge clk)
q <= d;
endmodule

297
Captulo quatro Linguagens de Descrio de Hardware

A linguagem SystemVerilog introduz o tipo logc. logic um sinnimo para reg e evita enganos
sobre qual verdadeiramente um flip-flop. Mais ainda, SystemVerilog diminui as regras em declaraes
assign e em instanciaes hierrquicas de porta, de modo que logic pode ser utilizada fora de um
bloco always onde um wire tradicionalmente seria requerido. Assim, quase todos os sinais
SystemVerilog podem ser logic. A exceo que sinais com drivers mltiplos (por exemplo, um buffer
tristate) devem ser declarados como net, como descrito no Exemplo HDL 4.10. Essa regra permite
SystemVerilog gerar uma mensagem de erro ao invs de um valor x quando um sinal logic
acidentalmente conectado a mltiplos drivers.

O tipo mais comum de net chamado de wire ou tri. Estes dois tipos so sinnimos, mas wire
utilizado, convencionalmente, quando um nico driver est presente, e tri utilizado quando mltiplos
drivers esto presentes. Ento, wire est obsoleto em SystemVerilog, pois logic prefervel para sinais
com um nico driver.

Quando uma net tri levada a um mesmo valor por um ou mais drivers, ela assume aquele valor.
Quando no levada, ela flutua (z). Quando levada a um valor diferente (0, 1 ou x) por mltiplos drivers,
fica em conteno (x).
Existem outros tipos de nets que atuam de forma diferente quando no guiadas ou guiadas por
mltiplas fontes. Estes outros tipos so raramente utilizados, mas podem ser substituidos em qualquer
lugar em que uma net tri normalmente apareceria (por exemplo, para sinais com mltiplos drivers). Cada
um deles descrito na Tabela 4.7.

298
Captulo quatro Linguagens de Descrio de Hardware

Tabela 4.7 Resolues de Nets

4.7.2. VHDL
Ao contrrio da SystemVerilog, a VHDL faz cumprir um rigoroso sistema de tipo de dados, que podem
proteger o usurio de alguns erros, mas que tambm desajeitado algumas vezes.

Apesar de ser de fundamental importncia, o tipo STD_LOGIG no construdo dentro da VHDL. Ao


invs disso, ele parte da biblioteca IEEE.STD_LOGIC_1164. Ento, todos os arquivos devem conter
as declaraes da biblioteca mostradas nos exemplos anteriores.

Mais ainda, a biblioteca IEEE.STD_LOGIC_1164 carece de operaes bsicas, como adio,


comparao, deslocamentos, e converso para dados inteiros STD_LOGIC_VECTOR. Eles foram
adicionados, finalmente, ao padro VHDL 2008, na biblioteca IEEE.NUMERIC_STD_UNSIGNED.

A linguagem VHDL tambm possui um tipo BOOLEAN com dois valores: true e false. Valores
BOOLEAN so retornados de comparaes (tais como comparaes de igualdade, s = 0) e so utilizados
em declaraes condicionais, tais como when e if. Apesar da tentao em acreditar que um valor
BOOLEAN true deve ser equivalente a um valor STD_LOGIC 1, e um BOOLEAN FALSE deve ser
equivalente a um STD_LOGIC 0, esses tipos no eram intercambiveis antes de VHDL 2008. Por exemplo,
num cdigo VHDL antigo, devemos escrever:
y <= d1 when (s = '1') else d0;

299
Captulo quatro Linguagens de Descrio de Hardware

enquanto no VHDL 2008, a declarao when automaticamente converte s de STD_LOGIC para


BOOLEAN. Ento podemos escrever simplesmente:
y <= d1 when s else d0;
Mesmo no VHDL 2008, ainda necessrio escrever
q <= '1' when (state = S2) else '0';
ao invs de
q <= (state = S2);

pois (state = S2) retorna um resultado BOOLEAN, o qual no pode ser atribudo diretamente ao sinal
STD_LOGIC y.

Apesar de no declararmos quaisquer sinais para serem BOOLEAN, eles so automaticamente


indicados por comparaes e utilizados por declaraes condicionais. Similarmente, a VHDL tem um
tipo INTEGER que representa inteiros tanto positivos quanto negativos. Sinais do tipo INTEGER
abrangem os valores (231 1) a 231 1, pelo menos. Valores inteiros so utilizados como ndices de
barramentos. Por exemplo, na declarao:
y <= a(3) and a(2) and a(1) and a(0);

Os valores 0, 1, 2 e 3 so inteiros servindo como um ndice para a escolha de bits no sinal a. No


podemos indexar diretamente um barramento com um sinal STD_LOGIC ou STD_LOGIC_VECTOR.
Ao invs disso, devemos converter o sinal para um INTEGER. Isso demonstrado no exemplo abaixo
para um multiplexador 8:1 que seleciona um bit de um vetor utilizando um ndice de 3-bits. A funo
T0_INTEGER definida na biblioteca IEEE.NUMERIC_STD_UNSIGNED e realiza a converso de
valores positivos (sem sinal) de STD_LOGIC_VECTOR para INTEGER.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_STD_UNSIGNED.all;

300
Captulo quatro Linguagens de Descrio de Hardware

entity mux8 is
port(d: in STD_LOGIC_VECTOR(7 downto 0);
s: in STD_LOGIC_VECTOR(2 downto 0);
y: out STD_LOGIC);
end;

architecture synth of mux8 is


begin
y <= d(TO_INTEGER(s));
end;

A VHDL tambm rigorosa a respeito das portas out sendo utilizadas exclusivamente para sada. Por
exemplo, o seguinte cdigo para portas AND de duas e trs entradas ilegal em VHDL, pois v uma sada
e tambm utilizada para computar w.
library IEEE; use IEEE.STD_LOGIC_1164.all;

entity and23 is
port(a, b, c: in STD_LOGIC;
v, w: out STD_LOGIC);
end;

architecture synth of and23 is


begin
v <= a and b;
w <= v and c;
end;

A VHDL define um tipo especial de porta, buffer, que resolve esse problema. Um sinal conectado a
uma porta buffer se comporta como uma sada, mas tambm pode ser utilizado dentro do mdulo. A
definio correta da entidade como se segue. Verilog e SystemVerilog no possuem essa limitao e

301
Captulo quatro Linguagens de Descrio de Hardware

no necessitam de portas buffer. A VHDL 2008 eliminou essa restrio permitindo a portas out serem
legveis, mas essa mudana no suportada pela ferramenta CAD Synplify at ao momento da escrita deste
livro.
entity and23 is
port(a, b, c: in STD_LOGIC;
v: buffer STD_LOGIC;
w: out STD_LOGIC);
end;

Figura 4.28 Circuito and23 sintetizado

A maioria das operaes, como adio, subtrao e lgica Booleana so idnticas se um nmero possui
ou no sinal. No entanto, a comparao de magnitude, a multiplicao e deslocamentos aritmticos
direita so executadas de forma diferente em nmeros com sinal em complemento-2. Estas operaes
sero examinadas no Captulo 5. O Exemplo HDL 4.33 descreve como indicar que um nmero possui sinal.

Exemplo HDL 4.33 (A) MULTIPLICADOR SEM SINAL (B) MULTIPLICADOR COM SINAL

SystemVerilog VHDL

// 4.33(a): unsigned multiplier 4.33(a): unsigned multiplier


module multiplier(input logic [3:0] a, b, library IEEE; use IEEE.STD_LOGIC_1164.all;
output logic [7:0] y); use IEEE.NUMERIC_STD_UNSIGNED.all;
assign y = a * b;

302
Captulo quatro Linguagens de Descrio de Hardware

endmodule entity multiplier is


port(a, b: in STD_LOGIC_VECTOR(3 downto 0);
// 4.33(b): signed multiplier y: out STD_LOGIC_VECTOR(7 downto 0));
module multiplier(input logic signed [3:0]
a,b, end;
output logic signed [7:0]
y); architecture synth of multiplier is
begin
assign y = a * b; y <= a * b;
endmodule end;

Em SystemVerilog, os sinais so considerados sem sinal por padro. A VHDL utiliza a biblioteca NUMERIC_STD_UNSIGNED para realizar
Adicionando o modificador signed (logic signed [3:0] a), operaes aritmticas e de comparao em STD_LOGIC_VECTOR.
o sinal ento tratado como possuindo sinal. Os vetores so tratados como no possuindo sinal.

use IEEE.NUMERIC_STD_UNSIGNED.all;

A VHDL tambem define os tipos de dados UNSIGNED e SIGNED na


biblioteca IEEE.NUMERIC_STD, mas isso envolve converses de
tipos de dados que esto alm do escopo deste Captulo.

303
Captulo quatro Linguagens de Descrio de Hardware

4.8. MDULOS PARAMETRIZADOS*


At agora, todos os nossos mdulos tiveram entradas e sadas de tamanho fixo. Por exemplo,
tivemos de definir mdulos separados para multiplexadores 2:1 de 4-bits e 8-bits de largura. As HDL
permitem a utilizao de bits de tamanhos variveis utilizando-se mdulos parametrizados.
O Exemplo HDL 4.34 declara um multiplexador 2:1 parametrizado com um tamanho padro de 8,
ento utiliza-o para criar multiplexadores 4:1 de 8- e 12-bits.

Exemplo HDL 4.34 MULTIPLEXADORES 2:1 PARAMETRIZADOS DE N-BITS

SystemVerilog VHDL

module mux2 library IEEE; use IEEE.STD_LOGIC_1164.all;


#(parameter width = 8)
(input logic [width1:0] d0, d1, entity mux2 is
input logic s, generic(width: integer := 8);
output logic [width1:0] y); port(d0,
d1: in STD_LOGIC_VECTOR(width1 downto 0);
assign y = s ? d1 : d0; s: in STD_LOGIC;
endmodule y: out STD_LOGIC_VECTOR(width1 downto 0));
end;
A SystemVerilog permite uma declarao #(parameter...) antes
das entadas e sadas para definir parmetros. A declarao architecture synth of mux2 is
parameter inclui um valor padro (8) do parmetro, nesse caso, begin
chamado width. O nmero de bits nas entradas e nas sadas y <= d1 when s else d0;
end;
dependem desse parmetro.
A declarao generic inclui um valor padro (8) para width. Esse
module mux4_8(input logic [7:0] d0, d1, d2,
d3, valor um inteiro.
304
Captulo quatro Linguagens de Descrio de Hardware

input logic [1:0] s,


output logic [7:0] y); library IEEE; use IEEE.STD_LOGIC_1164.all;
logic [7:0] low, hi; entity mux4_8 is
mux2 lowmux(d0, d1, s[0], low); port(d0, d1, d2,
mux2 himux(d2, d3, s[0], hi); d3: in STD_LOGIC_VECTOR(7 downto 0);
mux2 outmux(low, hi, s[1], y); s: in STD_LOGIC_VECTOR(1 downto 0);
endmodule y: out STD_LOGIC_VECTOR(7 downto 0));
end;
O multiplexador 4:1 de 8-bits instancia trs multiplexadores 2:1
utilzando seus tamanhos padro. architecture struct of mux4_8 is
Em contraste, um multiplexador 4:1 de 12-bits, mux4_12, necessitaria component mux2
sobrepor o tamanho padro utilizando #() antes do nome da generic(width: integer := 8);
instncia, como mostrado abaixo. port(d0,
d1: in STD_LOGIC_VECTOR(width-1 downto
module mux4_12(input logic [11:0] d0, d1, d2, 0);
d3, s: in STD_LOGIC;
input logic [1:0] s, y: out STD_LOGIC_VECTOR(width-1 downto
output logic [11:0] y); 0));
logic [11:0] low, hi; end component;
signal low, hi: STD_LOGIC_VECTOR(7 downto 0);
mux2 #(12) lowmux(d0, d1, s[0], low); begin
mux2 #(12) himux(d2, d3, s[0], hi); lowmux: mux2 port map(d0, d1, s(0), low);
mux2 #(12) outmux(low, hi, s[1], y); himux: mux2 port map(d2, d3, s(0), hi);
endmodule outmux: mux2 port map(low, hi, s(1), y);
end;
No confunda o uso de #sinal indicando atrasos, com o uso de
O multiplexador 4:1 de 8-bits, mux4_8, instancia trs multiplexadores
#(...) na definio de sobreposio de parmetros.
2:1 utilizando seus tamanhos padro.
Em contraste, um multiplexador 4:1 de 12 bits, mux4_12, necessitaria
da sobreposio do tamanho padro utilizando-se generic map,
como mostrado abaixo.

lowmux: mux2 generic map(12)


port map(d0, d1, s(0), low);

305
Captulo quatro Linguagens de Descrio de Hardware

himux: mux2 generic map(12)


port map(d2, d3, s(0), hi);
outmux: mux2 generic map(12)
port map(low, hi, s(1), y);

Figura 4.29 Circuito mux4_12 sintetizado

Exemplo HDL 4.35 DECODIFICADOR PARAMETRIZADO : 2

SystemVerilog VHDL

module decoder library IEEE; use IEEE.STD_LOGIC_1164.all;


#(parameter N = 3) use IEEE. NUMERIC_STD_UNSIGNED.all;
(input logic [N1:0] a,

306
Captulo quatro Linguagens de Descrio de Hardware

output logic [2**N1:0] y); entity decoder is


generic(N: integer := 3);
always_comb port(a: in STD_LOGIC_VECTOR(N1 downto 0);
begin y: out STD_LOGIC_VECTOR(2**N1 downto
y = 0; 0));
y[a] = 1; end;
end
endmodule architecture synth of decoder is
begin
2**N indica 2 . process(all)
begin
y <= (OTHERS => '0');
y(TO_INTEGER(a)) <= '1';
end process;
end;

2**N indica 2 .

307
Captulo quatro Linguagens de Descrio de Hardware

O Exemplo HDL 4.35 mostra um decodificador , o qual uma aplicao ainda melhor dos mdulos
parametrizados. Um grande decodificador : 2 complicado de se especificar em declaraes case,
mas simples utilizando-se um cdigo parametrizado que simplesmente leve o bit de sada apropriado
para 1. Especificamente, o decodificador utiliza atribuies blocking para colocar todos os bits a 0, e de
seguida muda os bits apropriados para 1.

As HDL tambm fornecem declaraes generate para produzir uma quantidade varivel de
hardware, dependendo do valor de um parmetro. generate suporta loops for e declaraes if
para determinar quantos de quais tipos de hardware produzir. O Exemplo HDL 4.36 demonstra como
utilizar declaraes generate para produzir uma funo AND de N entradas a partir de portas AND de
duas entradas em cascata. claro, um operador de reduo seria mais limpo e mais simples para essa
aplicao, mas o exemplo ilustra o princpio geral dos geradores de hardware.

Use declaraes generate com cautela; fcil produzir uma grande quantidade de hardware
involuntariamente!

Exemplo HDL 4.36 PORTA AND PARAMETRIZADA DE N ENTRADAS

SystemVerilog VHDL

module andN library IEEE; use IEEE.STD_LOGIC_1164.all;


#(parameter width = 8)
(input logic [width1:0] a, entity andN is
output logic y); generic(width: integer := 8);
port(a: in STD_LOGIC_VECTOR(width1 downto
genvar i; 0);
logic [width1:0] x; y: out STD_LOGIC);
end;
generate
assign x[0] = a[0]; architecture synth of andN is
for(i=1; i<width; i=i+1) begin: forloop signal x: STD_LOGIC_VECTOR(width1 downto 0);
assign x[i] = a[i] & x[i1]; begin
308
Captulo quatro Linguagens de Descrio de Hardware

end x(0) <= a(0);


gen: for i in 1 to width-1 generate
endgenerate x(i) <= a(i) and x(i-1);
assign y = x[width1]; end generate;
endmodule y <= x(width1);
end;
A declarao for se repete atravs de i = 1, 2, ..., width
1 para produzir muitas portas AND consecutivas. O begin num A varivel geradora de loop, i, no precisa ser declarada.
loop for generate deve ser seguido por um : e um rtulo
arbitrrio (forloop, nesse caso).

Figura 4.30 Circuito andN sintetizado

309
Captulo quatro Linguagens de Descrio de Hardware

4.9. TESTBENCHES
Um testbench (bancada de testes, em portugus) um mdulo que utilizado para testar outro
Algumas ferramentas tambm mdulo, chamado de dispositivo sob teste (device under test, DUT). O testbench contm declaraes
chamam o mdulo a ser testado a para aplicar entradas ao DUT e, idealmente, verificar se as sadas corretas so produzidas. Os padres
unidade em ensaio ou unit under test de entrada e de sada desejados so chamados de vetores de teste.
(UUT).
Considere o teste do mdulo sillyfunction, da Seo 4.1.1, que computa a equao = +
+ . Esse um mdulo simples, ento ns podemos realizar testes exaustivos aplicando-se oito
possveis vetores de teste.

Exemplo HDL 4.37 TESTBENCH

SystemVerilog VHDL

module testbench1(); library IEEE; use IEEE.STD_LOGIC_1164.all;


logic a, b, c, y; entity testbench1 is -- no inputs or outputs
end;
// instantiate device under test
sillyfunction dut(a, b, c, y); architecture sim of testbench1 is
component sillyfunction
// apply inputs one at a time port(a, b, c: in STD_LOGIC;
initial begin y: out STD_LOGIC);
a = 0; b = 0; c = 0; #10; end component;
c = 1; #10; signal a, b, c, y: STD_LOGIC;
b = 1; c = 0; #10; begin
c = 1; #10; instantiate device under test
a = 1; b = 0; c = 0; #10; dut: sillyfunction port map(a, b, c, y);
c = 1; #10; apply inputs one at a time
b = 1; c = 0; #10; process begin
c = 1; #10; a <= '0'; b <= '0'; c <= '0'; wait for 10
end ns;
endmodule c <= '1'; wait for 10 ns;
b <= '1'; c <= '0'; wait for 10 ns;
310
Captulo quatro Linguagens de Descrio de Hardware

A declarao initial executa a declarao em seu corpo no incio c <= '1'; wait for 10 ns;
da simulao. Nesse caso, ela aplica o padro de entrada 000 e a <= '1'; b <= '0'; c <= '0'; wait for 10
aguarda 10 unidades de tempo. Ela ento aplica 001 e aguarda mais ns;
10 unidades, e assim por diante, at todas as oito possveis entradas c <= '1'; wait for 10 ns;
b <= '1'; c <= '0'; wait for 10 ns;
terem sido aplicadas. Declaraes initial devem ser utilizadas
c <= '1'; wait for 10 ns;
apenas em testbenchs para simulao, no em mdulos que sero
wait; wait forever
sintetizados em hardware de verdade. O hardware no possui um end process;
modo mgico de executar uma sequncia de passos especiais quando end;
ligado.
A declarao process aplica, primeiramente, o padro de entrada
000 e, ento, aguarda 10 ns. Ela ento aplica 001 e aguarda por mais
10 ns, e assim sucessivamente at que todas as oito possveis entradas
tenham sido aplicadas.
No final, o processo aguarda indefinidamente. De outro modo, ele
comearia novamente, aplicando repetidamente o padro de vetores
de teste.

Exemplo HDL 4.38 TESTBENCH AUTO-VERIFICVEL


SystemVerilog VHDL

module testbench2(); library IEEE; use IEEE.STD_LOGIC_1164.all;


logic a, b, c, y;
// instantiate device under test entity testbench2 is no inputs or outputs
sillyfunction dut(a, b, c, y); end;
// apply inputs one at a time
// checking results architecture sim of testbench2 is
initial begin component sillyfunction
a = 0; b = 0; c = 0; #10; port(a, b, c: in STD_LOGIC;
311
Captulo quatro Linguagens de Descrio de Hardware

assert (y === 1) else $error("000 failed."); y: out STD_LOGIC);


c = 1; #10; end component;
assert (y === 0) else $error("001 failed."); signal a, b, c, y: STD_LOGIC;
b = 1; c = 0; #10; begin
assert (y === 0) else $error("010 failed."); instantiate device under test
c = 1; #10; dut: sillyfunction port map(a, b, c, y);
assert (y === 0) else $error("011 failed."); apply inputs one at a time
a = 1; b = 0; c = 0; #10; checking results
assert (y === 1) else $error("100 failed."); process begin
c = 1; #10; a <= '0'; b <= '0'; c <= '0'; wait for 10 ns;
assert (y === 1) else $error("101 failed."); assert y = '1' report "000 failed.";
b = 1; c = 0; #10; c <= '1'; wait for 10 ns;
assert (y === 0) else $error("110 failed."); assert y = '0' report "001 failed.";
c = 1; #10; b <= '1'; c <= '0'; wait for 10 ns;
assert (y === 0) else $error("111 failed."); assert y = '0' report "010 failed.";
end c <= '1'; wait for 10 ns;
endmodule assert y = '0' report "011 failed.";
a <= '1'; b <= '0'; c <= '0'; wait for 10 ns;
A instruo assert do SystemVerilog verifica se uma condio assert y = '1' report "100 failed.";
especificada verdadeira. Se no for, ele executa a instruo else. A c <= '1'; wait for 10 ns;
tarefa do $error na declarao else imprime uma mensagem de assert y = '1' report "101 failed.";
erro que descreve a falha de declarao. Durante a sntese assert b <= '1'; c <= '0'; wait for 10 ns;
assert y = '0' report "110 failed.";
ignorada. Em SystemVerilog, a comparao com == ou!= eficaz
c <= '1'; wait for 10 ns;
entre os sinais que no tomam valores de x e z. Testbenches usam os assert y = '0' report "111 failed.";
operadores === e !== para comparar igualdade e desigualdade, wait; wait forever
respectivamente, dado que esses operadores funcionam end process;
corretamente com operandos que podem ser x ou z. end;

A instruo assert verifica uma condio e imprime a mensagem


dada na clusula report se a condio no for satisfeita. assert
significativa apenas na simulao, e no na sntese.

312
Captulo quatro Linguagens de Descrio de Hardware

O Exemplo HDL 4.37 demonstra um testbench simples. Ela instancia o DUT, ento aplica as entradas.
Atribuies blocking e delays so utilizadas para aplicar as entradas na ordem apropriada. O usurio deve
visualizar os resultados da simulao e verificar, por inspeo, se a sada correta foi produzida. Testbenches
so simuladas da mesma forma em outros mdulos HDL. No entando, elas no so sintetizveis.
Verificar as sadas corretas um trabalho tedioso e propenso a erros. Mais ainda, determinar as sadas
corretas muito mais fcil quando o projeto est ainda fresco na sua mente. Se voc fizer pequenas
mudanas e precisar testar o projeto novamente semanas depois, determinar as sadas corretas se torna
um aborrecimento. Uma abordagem muito melhor escrever um testbench auto-checvel, mostrado no
Exemplo HDL 4.38.
Escrever um cdigo para cada vetor de testes tambm se torna tedioso, especialmente para mdulos
que requerem um nmero muito grande de vetores. Uma abordagem melhor colocar os vetores num
arquivo separado. O testbench l os vetores de teste do arquivo, aplica o vetor de teste de entrada ao DUT,
espera, verifica se os valores de sada do DUT so iguais aos do vetor de sada, e repete o processo at
alcanar o fim do arquivo de vetores de teste.
O Exemplo HDL 4.39 demonstra tal testbench. O testbench gera um clock utilizando uma declarao
always/process sem lista de sensibilidade, ento continuamente reavaliada. Ao incio da simulao,
ela l os vetores de teste a partir de um arquivo texto e pulsa o reset por dois ciclos. Apesar de o clock e do
reset no serem necessrios para testar a lgica combinatria, eles so includos, pois podem ser
importantes para testar um DUT sequencial. O example.tv um arquivo texto que contm as entradas
e os valores esperados de sada, em binrio:
000_1
001_0
010_0
011_0
100_1
101_1
110_0
111_0
313
Captulo quatro Linguagens de Descrio de Hardware

Exemplo HDL 4.39 TESTBENCH COM ARQUIVO DE VETOR DE TESTES

SystemVerilog VHDL

module testbench3(); library IEEE; use IEEE.STD_LOGIC_1164.all;


logic clk, reset; use IEEE.STD_LOGIC_TEXTIO.ALL; use
logic a, b, c, y, yexpected; STD.TEXTIO.all;
logic [31:0] vectornum, errors;
logic [3:0] testvectors[10000:0]; entity testbench3 is no inputs or outputs
end;
// instantiate device under test
sillyfunction dut(a, b, c, y); architecture sim of testbench3 is
// generate clock component sillyfunction
always port(a, b, c: in STD_LOGIC;
begin y: out STD_LOGIC);
clk = 1; #5; clk = 0; #5; end component;
end signal a, b, c, y: STD_LOGIC;
signal y_expected: STD_LOGIC;
// at start of test, load vectors signal clk, reset: STD_LOGIC;
// and pulse reset begin
initial instantiate device under test
begin dut: sillyfunction port map(a, b, c, y);
$readmemb("example.tv", testvectors);
vectornum = 0; errors = 0; generate clock
reset = 1; #27; reset = 0; process begin
end clk <= '1'; wait for 5 ns;
clk <= '0'; wait for 5 ns;
// apply test vectors on rising edge of clk end process;
always @(posedge clk)
begin at start of test, pulse reset
#1; {a, b, c, yexpected} = process begin
testvectors[vectornum]; reset <= '1'; wait for 27 ns; reset <= '0';
wait;
314
Captulo quatro Linguagens de Descrio de Hardware

end end process;

// check results on falling edge of clk run tests


always @(negedge clk) process is
if (~reset) begin // skip during reset file tv: text;
if (y ! == yexpected) begin // check result variable L: line;
$display("Error: inputs = %b", {a, b, c}); variable vector_in: std_logic_vector(2
$display(" outputs = %b (%b expected)", y,
yexpected);
downto 0);
errors = errors + 1; variable dummy: character;
end variable vector_out: std_logic;
vectornum = vectornum + 1; variable vectornum: integer := 0;
if (testvectors[vectornum] === 4'bx) begin variable errors: integer := 0;
$display("%d tests completed with %d begin
errors", FILE_OPEN(tv, "example.tv", READ_MODE);
vectornum, errors); while not endfile(tv) loop
$finish;
end change vectors on rising edge
end
wait until rising_edge(clk);
endmodule
read the next line of testvectors and
$readmemb carrega um arquivo de nmeros binrios num array de split into pieces
testvectors. $readmemh tem uma funo similar, mas para readline(tv, L);
nmeros hexadecimais. read(L, vector_in);
O bloco seguinte de cdigo espera uma unidade de tempo aps o read(L, dummy); skip over underscore
flanco ascendente do relgio (para evitar qualquer confuso se o clock read(L, vector_out);
e os dados mudarem simultaneamente), ento as trs entradas (a, b (a, b, c) <= vector_in(2 downto 0) after 1
e c) so activas e a sada esperada (yexpected), baseado nos quatro ns;
bits do vetor de testes atual. y_expected <= vector_out after 1 ns;
O tesbench compara a sada gerada, y, com a sada esperada,
check results on falling edge
yexpected, e imprime um erro se eles no forem iguais. %b e %d
wait until falling_edge(clk);
indicam se o valor impresso em binrio e hexadecimal,
respectivamente. $display uma tarefa do sistema para imprimir if y /= y_expected then
o valor na tela do simulador. Por exemplo, $display(%b %b, report "Error: y = " & std_logic'image(y);
errors := errors + 1;
315
Captulo quatro Linguagens de Descrio de Hardware

y, yexpected) imprime os dois valores, y e yexpected, em end if;


binrio. %h imprime o valor em hexadecimal.
Este processo repetido at no haver mais vetores de teste vlidos vectornum := vectornum + 1;
no array testvectors. $finish encerra a simulao. end loop;
Note que, mesmo que o SystemVerilog suporte at 10.001 vetores de
summarize results at end of simulation
teste, ele encerra a simulao depois de ter executado os oito vetores if (errors = 0) then
no arquivo. report "NO ERRORS -- " &
integer'image(vectornum) &
" tests completed successfully."
severity failure;
else
report integer'image(vectornum) &
" tests completed, errors = " &
integer'image(errors)
severity failure;
end if;
end process;
end;

O cdigo VHDL utiliza comandos de leitura de arquivos que vo alm


do escopo desse Captulo, mas esse exemplo d a sensao do que
um tesbench auto-verificvel parece em VHDL.

Novas entradas so aplicadas no flanco ascendente do relgo, e a sada verificada no flanco


descendente. Os erros so reportados assim que ocorrem. Ao fim da simulao, o testbench imprime o
nmero total de vetores de teste aplicados e o nmero de erros detectados.
O testbench do Exemplo HDL 4.39 exagerada para um circuito to simples. No entanto, ele pode
ser facilmente modificado para testar circuitos mais complexos mudando o arquivo example.tv,
instanciando o novo DUT, e mudando algumas linhas de cdigo para ativar as entradas e verificar as
sadas.

316
Captulo quatro Linguagens de Descrio de Hardware

4.10. SUMRIO
Linguagens de descrio de hardware (HDL) so ferramentas extremamente importantes para
projetistas de sistemas digitais modernos. Uma vez que o leitor tenha aprendido SystemVerilog ou VHDL,
ser capaz de especificar sistemas digitais muito mais rpido do que se tivesse que desenhar os
esquemticos completos. O ciclo de debug tambm muito mais rpido, pois as modificaes requerem
mudanas de cdigo, ao invs de tediosas religaes no esquemtico. No entanto, o ciclo de debug pode
ser muito mais longo utilizando-se HDL, se o leitor no tiver uma boa ideia a respeito do hardware que o
seu cdigo implica.
As HDL so utilizadas tanto para simulao quanto para sntese. A simulao lgica um modo poderoso
de testar um sistema num computador antes de transform-lo em hardware. Os simuladores permitem ao
leitor verificar os valores dos sinais internos ao seu sistema, que seriam impossveis de medir numa
implementao fsica de hardware. A sntese lgica converte cdigo em circuitos lgicos digitais.
A coisa mais importante a lembrar quando se est escrevendo um cdigo HDL que o leitor est
descrevendo hardware real, e no escrevendo um programa de computador. O erro mais comum de
iniciantes escrever o cdigo HDL sem pensar direito a respeito do hardware que se quer produzir. Se voc
no conhece o hardware que est pretendendo ter, esteja quase certo de no conseguir o que quer. Ao
invs disso, comee esboando um diagrama de blocos do seu sistema, identificando quais pores so de
lgica combinatria, quais pores so circuitos sequenciais ou mquinas de estado finitas, e assim por
diante. Ento, escreva o cdigo HDL para cada poro, utilizando as linguagens corretas para indicar o tipo
de hardware que o leitor precisa.

317
Captulo quatro Linguagens de Descrio de Hardware

Exerccios
Os exerccios seguintes podem ser feitos utilizando a sua HDL favorita. Se o leitor tem um simulador
disponvel, teste o seu projeto. Imprima as formas de onda e explique como pode provar que o circuito
funciona. Se possuir um sintetizador disponvel, sintetize o cdigo. Imprima o diagrama do circuito
gerado, e explique porque ele atende s suas expectativas.

Exerccio 4.1 Esboce o esquemtico do circuito descrito pelo seguinte cdigo HDL. Simplifique o
esquemtico para que ele tenha um nmero mnimo de portas lgicas.

SystemVerilog VHDL

module exercise1(input logic a, b, c, library IEEE; use IEEE.STD_LOGIC_1164.all;


output logic y, z);
assign y = a & b & c | a & b & ~c | a & ~b & entity exercise1 is
c; port(a, b, c: in STD_LOGIC;
assign z = a & b | ~a & ~b; y, z: out STD_LOGIC);
endmodule end;

architecture synth of exercise1 is


begin
y <= (a and b and c) or (a and b and not c)
or (a and not b and c);
z <= (a and b) or (not a and not b);
end;

Exerccio 4.2 Esboce o esquemtico do circuito descrito pelo seguinte cdigo HDL. Simplifique o
esquemtico para que ele tenha um nmero mnimo de portas lgicas.

318
Captulo quatro Linguagens de Descrio de Hardware

SystemVerilog VHDL

module exercise2(input logic [3:0] a, library IEEE; use IEEE.STD_LOGIC_1164.all;


output logic [1:0] y);
always_comb entity exercise2 is
if (a[0]) y = 2'b11; port(a: in STD_LOGIC_VECTOR(3 downto 0);
else if (a[1]) y = 2'b10; y: out STD_LOGIC_VECTOR(1 downto 0));
else if (a[2]) y = 2'b01; end;
else if (a[3]) y = 2'b00;
else y = a[1:0]; architecture synth of exercise2 is
endmodule begin
process(all) begin
if a(0) then y <= "11";
elsif a(1) then y <= "10";
elsif a(2) then y <= "01";
elsif a(3) then y <= "00";
else y <= a(1 downto 0);
end if;
end process;
end;

Exerccio 4.3 Escreva um mdulo HDL que compute uma funo XOR de quatro entradas. A entrada
3:0 , e a sada .

Exerccio 4.4 Escreva um tesbench auto-verificvel para o Exerccio 4.3. Crie um arquivo vetor de testes
contendo todos os 16 casos de teste. Simule o circuito e mostre que ele funciona. Introduza um erro
no arquivo de vetor de testes e mostre que o tesbench reporta uma incompatibilidade.

319
Captulo quatro Linguagens de Descrio de Hardware

Exerccio 4.5 Escreva um mdulo HDL chamado minority. Ele recebe trs entradas, a, b e c, e
produz uma sada, y, que TRUE se ao menos duas das entradas so FALSE.

Exerccio 4.6 Escreva um mdulo HDL para um decodificador de display de sete segmentos
hexadecimal. O decodificador deve lidar com os dgitos A, B, C, D, E e F, assim como de 0 a 9.

Exerccio 4.7 Escreva um tesbench auto-verificvel para o Exerccio 4.6. Crie um arquivo vetor de testes
contendo todos os 16 casos de teste. Simule o circuito e mostre que ele funciona. Introduza um erro no
arquivo de vetor de testes e mostre que a tesbench reporta uma incompatibilidade.

Exerccio 4.8 Escreva um mdulo multiplexador 8:1 chamado mux8 com entradas
2:0 , 0, 1, 2, 3, 4, 5, 6, 7, e a sada .

Exerccio 4.9 Escreva um mdulo estrutural para computar a funo lgica = + + ,


utilizando lgica de multiplexadores. Utilize o multiplexador do Exerccio 4.8.

Exerccio 4.10 Repita o Exerccio 4.9 utilizando um multiplexador 4:1 e quantas portas NOT forem
necessrias.

Exerccio 4.11 Na Seo 4.5.4 foi mostrado que um sincronizador pode ser descrito corretamente com
atribuies blocking, se as atribuies forem dadas na ordem apropriada. Pense num circuito sequencial
simples que no possa ser descrito corretamente com atribuies blocking, independentemente da
ordem.

320
Captulo quatro Linguagens de Descrio de Hardware

Exerccio 4.12 Escreva um mdulo HDL para um circuito prioridade de oito entradas.

Exerccio 4.13 Escreva um mdulo HDL para um decodificador 2:4.

Exerccio 4.14 Escreva um mdulo HDL para um decodificador 6:64 utilizando trs instncias de
decodificadores 2:4 do Exerccio 4.13 e um grupo de portas AND de trs entradas.

Exerccio 4.15 Escreva um mdulo HDL que implemente as equaes Booleanas do Exerccio 2.13.

Exerccio 4.16 Escreva um mdulo HDL que implemente o circuito do Exerccio 2.26.

Exerccio 4.17 Escreva um mdulo HDL que implemente o circuito do Exerccio 2.27.

Exerccio 4.18 Escreva um mduo HDL que implemente a funo lgica do Exerccio 2.28. Preste muita
ateno no modo como lida com os dont cares.

Exerccio 4.19 Escreva um mdulo HDL que implemente as funes do Exerccio 2.35.

Exerccio 4.20 Escreva um mdulo HDL que implemente o codificador de prioridade do Exerccio 2.36.

321
Captulo quatro Linguagens de Descrio de Hardware

Exerccio 4.21 Escreva um mdulo HDL que implemente o codificador de prioridade modificado do
Exerccio 2.37.

Exerccio 4.22 Escreva um mdulo HDL que implemente o cdigo binrio para termmetro do Exerccio
2.38.

Exerccio 4.23 Escreva um mdulo HDL implementando a funo dias no ms da questo 2.2.

Exerccio 4.24 Esboce o diagrama de transio de estados para a FSM descrita pelo cdigo abaixo.

SystemVerilog VHDL

module fsm2(input logic clk, reset, library IEEE; use IEEE.STD_LOGIC_1164.all;


input logic a, b,
output logic y); entity fsm2 is
logic [1:0] state, nextstate; port(clk, reset: in STD_LOGIC;
a, b: in STD_LOGIC;
parameter S0 = 2'b00; y: out STD_LOGIC);
parameter S1 = 2'b01; end;
parameter S2 = 2'b10;
parameter S3 = 2'b11; architecture synth of fsm2 is
type statetype is (S0, S1, S2, S3);
always_ff @(posedge clk, posedge reset) signal state, nextstate: statetype;
if (reset) state <= S0; begin
else state <= nextstate; process(clk, reset) begin
if reset then state <= S0;
always_comb elsif rising_edge(clk) then
case (state) state <= nextstate;
S0: if (a ^ b) nextstate = S1; end if;
else nextstate = SO;
322
Captulo quatro Linguagens de Descrio de Hardware

S1: if (a & b) nextstate = S2; end process;


else nextstate = SO;
S2: if (a | b) nextstate = S3; process(all) begin
else nextstate = SO; case state is
S3: if (a | b) nextstate = S3; when S0 => if (a xor b) then
else nextstate = SO; nextstate <= S1;
endcase else nextstate <= S0;
assign y = (state = = S1) | (state = = S2); end if;
endmodule when S1 => if (a and b) then
nextstate <= S2;
else nextstate <= S0;
end if;
when S2 => if (a or b) then
nextstate <= S3;
else nextstate <= S0;
end if;
when S3 => if (a or b) then
nextstate <= S3;
else nextstate <= S0;
end if;
end case;
end process;

y <= '1' when ((state = S1) or (state = S2))


else '0';
end;

Exerccio 4.25 Esboce o diagrama de transio de estados para a FSM descrita pelo seguinte cdigo
HDL. Uma FSM desta natureza utilizada num ramo preditor em alguns microprocessadores.

323
Captulo quatro Linguagens de Descrio de Hardware

SystemVerilog VHDL

module fsm1(input logic clk, reset, library IEEE; use IEEE.STD_LOGIC_1164. all;
input logic taken, back,
output logic predicttaken); entity fsm1 is
port(clk, reset: in STD_LOGIC;
logic [4:0] state, nextstate; taken, back: in STD_LOGIC;
predicttaken: out STD_LOGIC);
parameter S0 = 5'b00001; end;
parameter SI = 5'b00010;
parameter S2 = 5'b00100; architecture synth of fsm1 is
parameter S3 = 5'b01000; type statetype is (S0, S1, S2, S3, S4);
parameter S4 = 5'b10000; signal state, nextstate: statetype;
begin
always_ff @(posedge clk, posedge reset) process(clk, reset) begin
if (reset) state <= S2; if reset then state <= S2;
else state <= nextstate; elsif rising_edge(clk) then
state <= nextstate;
always_comb end if;
case (state) end process;
S0: if (taken) nextstate = S1; process(all) begin
else nextstate = S0; case state is
S1: if (taken) nextstate = S2; when S0 => if taken then
else nextstate = S0; nextstate <= S1;
S2: if (taken) nextstate = S3; else nextstate <= S0;
else nextstate = S1; end if;
S3: if (taken) nextstate = S4; when S1 => if taken then
else nextstate = S2; nextstate => S2;
S4: if (taken) nextstate = S4; else nextstate <= S0;
else nextstate = S3; end if;
default: nextstate = S2; when S2 => if taken then
endcase nextstate <= S3;
else nextstate <= S1;
assign predicttaken = (state = = S4) | end if;
(state = = S3) | when S3 => if taken then
324
Captulo quatro Linguagens de Descrio de Hardware

(state = = S2 && back); nextstate <= S4;


endmodule else nextstate <= S2;
end if;
when S4 => if taken then
nextstate <= S4;
else nextstate <= S3;
end if;
when others => nextstate <= S2;
end case;
end process;

output logic
predicttaken <= '1' when
((state = S4) or (state = S3) or
(state = S2 and back = '1'))
else '0';
end;

Exerccio 4.26 Escreva um mdulo HDL para uma bscula SR.

Exerccio 4.27 Escreva um mdulo HDL para um flip-flop JK. O flip-flop possui entradas, clk, J, K, e a
sada Q. No flanco ascendente do relgio, Q mantm o antigo valor se J=K=0. Ele ativa 1 em Q se J=1,
limpa Q para 0 se K=1, e inverte Q se J=K=1.

Exerccio 4.28 Escreva um mdulo HDL para a bscula da Figura 3.18. Utilize uma declarao de
atribuio para cada porta. Especifique atrasos de 1 unidade de tempo ou 1 ns por porta. Simule a bscula

325
Captulo quatro Linguagens de Descrio de Hardware

e mostra que ela opera corretamente. Em seguida, aumente o atraso do inversor. O quo grande o atraso
necessita ser, antes que uma condio de corrida cause o mau funcionamento da bscula?

Exerccio 4.29 Escreva um mdulo HDL para o controlador do semforo da Seo 3.4.1

Exerccio 4.30 Escreva trs mdulos HDL para o factoring do controlador de semforo em modo de
parada do exemplo 3.8. Os mdulos podem ser chamados de controlador, modo e luzes, e eles devem
ter as entradas e as sadas como mostrado na Figura 3.33 (b).

Exerccio 4.31 Escreva um mdulo HDL descrevendo o circuito na Figura 3.42.

Exerccio 4.32 Escreva um mdulo HDL para a FSM com o diagrama de transio de estados dado na
Figura 3.69 do Exerccio 3.22.

Exerccio 4.33 Escreva um mdulo HDL para a FSM com o diagrama de transio de estados dado na
Figura 3.70 do Exerccio 3.23.

Exerccio 4.34 Escreva um mdulo HDL para o controlador melhorado do semforo do Exerccio 3.24.

Exerccio 4.35 Escreva um mdulo HDL para o caracol do Exerccio 3.25.

Exerccio 4.36 Escreva um mdulo HDL para a mquina de refrigerantes do Exerccio 3.26
326
Captulo quatro Linguagens de Descrio de Hardware

Exerccio 4.37 Escreva um mdulo HDL para o contador de cdigo Gray do Exerccio 3.27.

Exerccio 4.38 Escreva um mdulo HDL para o contador de cdigo Gray UP/DOWN do Exerccio 3.28.

Exerccio 4.39 Escreva um mdulo HDL para a FSM do Exerccio 3.29.

Exerccio 4.40 Escreva um mdulo HDL para a FSM do Exerccio 3.30.

Exerccio 4.41 Escreva um mdulo HDL para a srie complemento-2 da questo 3.2.

Exerccio 4.42 Escreva um mdulo HDL para o circuito do Exerccio 3.31.

Exerccio 4.43 Escreva um mdulo HDL para o circuito do Exerccio 3.32.

Exerccio 4.44 Escreva um mdulo HDL para o circuito do Exerccio 3.33.

Exerccio 4.45 Escreva um mdulo HDL para o circuito do Exerccio 4.34. O leitor poder utilizar o full
adder da Seo 4.2.5.

327
Captulo quatro Linguagens de Descrio de Hardware

Exerccios de SystemVerilog
Os exerccios a seguir so especficos para SystemVerilog.

Exerccio 4.46 Qual o significado para um sinal declarado tri em SystemVerilog?

Exerccio 4.47 Reescreva o mdulo syncbad do Exemplo HDL 4.29. Utilize atribuies nonblocking,
mas faa mudanas no cdigo a fim de produzir um sincronizador correto com dois flip-flops.

Exerccio 4.48 Considere os dois mdulos SystemVerilog abaixo. Eles tm a mesma funo? Esboce
o hardware que cada um desenvolve.
module code1(input logic clk, a, b, c,
output logic y);
logic x;
always_ff @(posedge clk) begin
x <= a & b;
y <= x | c;
end
endmodule

module code2 (input logic a, b, c, clk,


output logic y);
logic x;
always_ff @(posedge clk) begin
y <= x | c;
x <= a & b;

328
Captulo quatro Linguagens de Descrio de Hardware

end
endmodule

Exerccio 4.49 Repita o Exerccio 4.48, substituindo <= por = em cada atribuio.

Exerccio 4.50 Os mdulos SystemVerilog abaixo mostram erros que os estudantes cometem em
laboratrio. Explique os erros em cada mdulo e mostre como consert-los.
(a) module bscula(input logic clk,
input logic [3:0] d,
output reg [3:0] q);
always @(clk)
if (clk) q <= d;
endmodule

(b) module gates(input logic [3:0] a, b,


output logic [3:0] y1, y2, y3, y4, y5);
always @(a)
begin
y1 = a & b;
y2 = a | b;
y3 = a ^ b;
y4 = ~(a & b);
y5 = ~(a | b);
end
endmodule

(c) module mux2(input logic [3:0] d0, d1,


input logic s,

329
Captulo quatro Linguagens de Descrio de Hardware

output logic [3:0] y);


always @(posedge s)
if (s) y <= d1;
else y <= d0;
endmodule

(d) module twoflops(input logic clk,


input logic d0, d1,
output logic q0, q1);
always @(posedge clk)
q1 = d1;
q0 = d0;
endmodule

(e) module FSM(input logic clk,


input logic a,
output logic out1, out2);
logic state;
// next state logic and register (sequential)
always_ff @(posedge clk)
if (state == 0) begin
if (a) state <= 1;
end else begin
if (~a) state <= 0;
end
always_comb // output logic (combinational)
if (state == 0) out1 = 1;
else out2 = 1;
endmodule

330
Captulo quatro Linguagens de Descrio de Hardware

(f) module priority(input logic [3:0] a,


output logic [3:0] y);
always_comb
if (a[3]) y = 4'b1000;
else if (a[2]) y = 4'b0100;
else if (a[1]) y = 4'b0010;
else if (a[0]) y = 4'b0001;
endmodule

(g) module divideby3FSM(input logic clk,


input logic reset,
output logic out);
logic [1:0] state, nextstate;
parameter S0 = 2'b00;
parameter S1 = 2'b01;
parameter S2 = 2'b10;

// State Register
always_ff @(posedge clk, posedge reset)
if (reset) state <= S0;
else state <= nextstate;

// Next State Logic


always @(state)
case (state)
S0: nextstate = S1;
S1: nextstate = S2;
S2: nextstate = S0;
endcase

// Output Logic

331
Captulo quatro Linguagens de Descrio de Hardware

assign out = (state == S2);


endmodule

(h) module mux2tri(input logic [3:0] d0, d1,


input logic s,
output tri [3:0] y);
tristate t0(d0, s, y);
tristate t1(d1, s, y);
endmodule

(i) module floprsen(input logic clk,


input logic reset,
input logic set,
input logic [3:0] d,
output logic [3:0] q);
always_ff @(posedge clk, posedge reset)
if (reset) q <= 0;
else q <= d;
always @(set)
if (set) q <= 1;
endmodule

(j) module and3(input logic a, b, c,


output logic y);

logic tmp;
always @(a, b, c)
begin
tmp <= a & b;
y <= tmp & c;

332
Captulo quatro Linguagens de Descrio de Hardware

end
endmodule

Exerccios de VHDL
Os exerccios seguintes so especficos para VHDL.

Exerccio 4.51 Em VHDL, por que necessrio escrever


q <= '1' when state = S0 else '0';
ao invs de simplesmente
q <= (state = S0);

Exerccio 4.52 Cada um dos mdulos VHDL abaixo contm um erro. Por brevidade, apenas a arquitetura
mostrada. Assuma que a clusula de uso library e a declarao entity esto corretas. Explique os
erros e mostre como consert-los.
(a) architecture synth of bscula is
begin
process(clk) begin
if clk = '1' then q <= d;
end if;
end process;
end;

(b) architecture proc of gates is


begin
process(a) begin
Y1 <= a and b;

333
Captulo quatro Linguagens de Descrio de Hardware

y2 <= a or b;
y3 <= a xor b;
y4 <= a nand b;
y5 <= a nor b;
end process;
end;

(c) architecture synth of flop is


begin
process(clk)
if rising_edge(clk) then
q <= d;
end;

(d) architecture synth of priority is


begin
process(all) begin
if a(3) then y <= "1000";
elsif a(2) then y <= "0100";
elsif a(1) then y <= "0010";
elsif a(0) then y <= "0001";
end if;
end process;
end;

(e) architecture synth of divideby3FSM is


type statetype is (S0, S1, S2);
signal state, nextstate: statetype;
begin
process(clk, reset) begin
if reset then state <= S0;

334
Captulo quatro Linguagens de Descrio de Hardware

elsif rising_edge(clk) then


state <= nextstate;
end if;
end process;

process(state) begin
case state is
when S0 => nextstate <= S1;
when S1 => nextstate <= S2;
when S2 => nextstate <= S0;
end case;
end process

q <= '1' when state = S0 else '0';


end;

(f) architecture struct of mux2 is


component tristate
port(a: in STD_LOGIC_VECTOR(3 downto 0);
en: in STD_LOGIC;
y: out STD_LOGIC_VECTOR(3 downto 0));
end component;

begin
t0: tristate port map(d0, s, y);
t1: tristate port map(d1, s, y);
end;

(g) architecture asynchronous of floprs is


begin
process(clk, reset) begin

335
Captulo quatro Linguagens de Descrio de Hardware

if reset then
q <= '0';
elsif rising_edge(clk) then
q <= d;
end if;
end process;

process(set) begin
if set then
q <= '1';
end if;
end process;
end;

336
Captulo quatro Linguagens de Descrio de Hardware

Questes de Entrevista

Os exerccios abaixo apresentam questes que tm sido perguntadas em entrevistas de empregos para
vagas em projetos digitais.

Pergunta 4.1 Escreva uma linha de cdigo HDL que obtenha um barramento de 32-bits chamado data,
com outro sinal chamado sel, para produzir um resultado result de 32-bits. Se sel TRUE,
result=data. De outro modo, result deve ser sempre 0.

Pergunta 4.2 Explique a diferena entre declaraes blocking e nonblocking em SystemVerilog. D


exemplos.

Pergunta 4.3 O que a seguinte declarao em SystemVerilog faz?


result = | (data[15:0] & 16'hC820);

337
Captulo quatro Linguagens de Descrio de Hardware

338
5. Blocos de Construo Digital
5.1. INTRODUO
At este momento, examinmos o projeto de circuitos combinatrios e sequenciais utilizando
equaes Booleanas, esquemticos e HDL. Este Captulo apresenta blocos de construo
sequenciais e combinatrios mais elaborados utilizados em sistemas digitais. Esses blocos incluem
circuitos aritmticos, contadores, registradores de deslocamento, matrizes de memria e matrizes
lgicas. Esses blocos de construo no so teis apenas por direito prprio, mas tambm
demonstram os princpios da hierarquia, modularidade e regularidade. Os blocos de construo
so hierarquicamente montados a partir de componentes mais simples, tais como portas lgicas,
multiplexadores e decodificadores. Cada bloco de construo tem uma interface bem definida e
pode ser tratado como uma caixa preta quando a implementao subjacente no importante. A
estrutura regular de cada bloco de construo facilmente estendida para diferentes tamanhos.
No Captulo 7, usamos muitos desses blocos de construo para construir um microprocessador.

5.2. CIRCUITOS ARITMTICOS


Os circuitos aritmticos so os blocos de construo centrais dos computadores. Computadores
e lgica digital executam vrias funes aritmticas: adio, subtrao, comparaes,
deslocamentos, multiplicao e diviso. Esta Seo descreve as implementaes de hardware para
todas estas operaes.

339
Captulo cinco Blocos de Construo Digital

5.2.1. Adio
A adio uma das operaes mais comuns em sistemas digitais. Vamos primeiro considerar como
adicionar dois nmeros binrios de 1-bit. Ento, vamos estender a nmeros binrios de N-bits. Os
somadores tambm ilustram compromisso entre velocidade e complexidade.
Half Adder
Comeamos por construir um half adder de 1-bit. Como mostrado na Figura 5.1, o half adder tem
duas entradas, A e B, e duas sadas, S e Cout. S representa a soma de A e B. Se A e B so ambos 1, S
2, o que no pode ser representado com um nico dgito binrio. Em vez disso, indicado com um
transporte (carry) Cout na prxima coluna. Este somador parcial pode ser construdo a partir de uma
porta XOR e uma porta AND.
Figura 5.1 Half adder de 1-bit Num somador multi-bit, Cout adicionado ou transportado para o prximo bit mais significativo.
Por exemplo, na Figura 5.2, o bit de transporte mostrado em azul a sada Cout da primeira coluna da
adio de 1-bit e a entrada Cin para a segunda coluna de adio. No entanto, o half adder carece de
uma entrada Cin para aceitar o Cout da coluna anterior. O full adder, descrito na prxima seo, resolve
este problema.
Figura 5.2 Bit de transporte (carry)
Full Adder
O full adder, introduzido na Seo 2.1, aceita o transporte de entrada em Cin como mostrado na
Figura 5.3. A figura tambm mostra as equaes de sada para S e Cout.
Somador Carry Propagate
Um somador de N-bits soma duas entradas de N-bits, A e B, e um transporte de entrada Cin para
produzir um resultado S de N-bits e um transporte de sada Cout. normalmente designado de
somador carry propagate (CPA - carry propagate adder) porque o transporte de sada de um bit se
propaga para o prximo bit. O smbolo de um CPA mostrado na Figura 5.4; ele desenhado como
um somador completo exceto que A, B, e S so barramentos, em vez de bits nicos. Trs
Figura 5.3 Full adder de 1-bit
implementaes CPA comuns so chamadas de somadores ripple-carry, carry-lookahead, e prefix.

340
Captulo cinco Blocos de Construo Digital

Somador Ripple-Carry
A maneira mais simples de construir um somador de N-bits com propagao do transporte Os esquemas tipicamente mostram sinais
encadear N full adders. O Cout de um estgio atua como o Cin do estgio seguinte, como mostrado que fluem da esquerda para a direita. Os
na Figura 5.5 para uma adio de 32-bits. Isso chamado de somador ripple carry. uma boa circuitos aritmticos quebram esta regra,
aplicao da modularidade e regularidade: o mdulo full adder reutilizado vrias vezes para pois o transporte flui da direita para a
formar um sistema maior. O somador ripple carry tem a desvantagem de ser muito lento quando esquerda (da coluna menos significativa
N elevado. S31 depende de C30, que depende de C29, que depende de C28, e assim por diante todo para a coluna mais significativa).
o caminho at Cin, como mostrado em azul na Figura 5.5. Dizemos que h um ripple do transporte
ao longo da cadeia de transporte. O atraso do circuito somador, tripple, aumenta diretamente com
o nmero de bits, conforme indicado na Equao 5.1, onde tFA o atraso de um full adder.

Figura 5.4 Somador carry propagate


Ao longo dos sculos, as pessoas tm
usado muitos dispositivos para realizar
aritmtica. As crianas contam pelos
dedos (e alguns adultos furtivamente
tambm o fazem). Os chineses e os
Figura 5.5 Somador ripple-carry de 32-bits babilnios inventaram o baco to cedo
quanto 2400 AC. As rguas de clculo,
= (5.1) inventadas em 1630, ainda eram usadas
at dcada de 1970, quando as
Somador Carry-Lookahead
calculadoras de mo cientficas se
A razo fundamental pela qual os somadores ripple-carry de dimenso elevada so lentos que tornaram predominantes. Os
os sinais de transporte devem-se propagar atravs de cada bit no somador. O somador carry computadores e as calculadoras digitais
so hoje omnipresentes. Qual ser o
lookahead (CLA carry lookahead adder) outro tipo de somador com transporte que resolve este
prximo mtodo?
341
Captulo cinco Blocos de Construo Digital

problema dividindo o somador em blocos e fornecendo circuitos para determinar rapidamente o


transporte de sada de um bloco assim que o transporte de entrada conhecido. Assim, diz-se que
antecipa os blocos ao invs de esperar a propagao atravs de todos os full adders dentro de um
bloco. Por exemplo, um somador de 32-bits pode ser dividido em oito blocos de 4-bits.
O CLA usa sinais de gerar (G) e propagar (P) que descrevem como uma coluna ou bloco determina
o transporte de sada. A coluna i de um somador dito gerar um transporte se produz um transporte
de sada independente do transporte de entrada. A coluna i de um somador garante a gerao de um
transporte Ci se Ai e Bi so ambos 1. Assim Gi, o sinal gerar da coluna i, calculado como Gi = AiBi. A
coluna dita propagar um transporte se produz um transporte de sada sempre que h um transporte
de entrada. A coluna i ir propagar um transporte de entrada, Ci-1, se Ai ou Bi 1. Assim, Pi = Ai + Bi.
Com base nestas definies, podemos reescrever a lgica de transporte para uma determinada
coluna do somador. A coluna i de um somador ir gerar um transporte de sada Ci se gerar um
transporte, Gi, ou se propagar um transporte de entrada, PiCi-1. Na forma de equao,
= + ( + )1 = + 1 (5.2)
As definies de gerar e propagar estendem-se a blocos de mltiplos bits. Um bloco dito gerar
um transporte de sada se produz um transporte de sada independente do transporte de entrada no
bloco. O bloco dito propagar um transporte se produz um transporte de sada sempre que h um
transporte de entrada no bloco. Podemos definir Gij e Pij como sinais de gerar e propagar de blocos
abrangendo as colunas i at j.
Um bloco gera um transporte se a coluna mais significativa gera um transporte, ou se a coluna
mais significativa propaga um transporte e a coluna anterior gera um transporte, e assim por diante.
Por exemplo, a lgica de gerao para um bloco que se estende pelas colunas 3 at 0
3:0 = 3 + 3 (2 + 2 (1 + 1 0 ) (5.3)
Um bloco propaga um transporte se todas as colunas do bloco propagam o transporte. Por
exemplo, a lgica de propagao para um bloco que se estende pelas colunas de 3 at 0

342
Captulo cinco Blocos de Construo Digital

3:0 = 3 2 1 0 (5.4)
Usando os sinais de gerar e propagar do bloco, podemos rapidamente calcular o transporte de sada
do bloco, Ci, usando o transporte no bloco, Cj.
= : + : (5.5)

A Figura 5.6 (a) mostra um somador de 32-bits carry-lookahead composto por oito blocos de 4-bits.
Cada bloco contm um somador ripple-carry de 4-bits e alguma lgica lookahead para determinar o
transporte de sada do bloco, dado o transporte de entrada, como mostrado na Figura 5.6 (b). As portas
AND e OR necessrias para determinar os sinais gerar e propagar dos bits individuais, Gi e Pi, de Ai e Bi
so deixadas de fora por questes de simplicidade. Mais uma vez, o somador carry-lookahead
demonstra modularidade e regularidade.
Todos os blocos do CLA determinam os sinais gerar e propagar dos bits individuais e do bloco em
simultneo. O caminho crtico comea com a computao de G0 e G3:0 no primeiro bloco do CLA. Cin,
em seguida, avana diretamente para Cout atravs das portas AND/OR em cada bloco at o ltimo. Para
um somador grande, isto muito mais rpido do que esperar que o transporta se propague atravs de
cada bit consecutivo do somador. Finalmente, o caminho crtico atravs do ltimo bloco contm um
pequeno somador ripple-carry. Assim, um somador de N-bits dividido em blocos de k-bits tem um
atraso

= + _ + ( 1) _ + , (5.6)

onde tpg o atraso das portas indivduo gerar/propagar (uma porta AND ou OR) para gerar Pi e Gi,
tpg_block o atraso para encontrar sinais de gerar/propagar Pi:j e Gi:j para um bloco de k-bits, e tAND-OR
o atraso de Cin at Cout atravs da lgica final AND/OR do bloco de k-bits do CLA. Para N > 16, o somador
carry-lookahead geralmente muito mais rpido do que o somador ripple-carry. No entanto, o atraso
do somador ainda aumenta linearmente com N.

343
Captulo cinco Blocos de Construo Digital

Figura 5.6 (a) Somador de 32-bits carry-lookahead (CLA), (b) bloco CLA de 4-bits

Exemplo 5.1 ATRASO DO SOMADOR RIPPLE-CARRY E DO SOMADOR CARRY-LOOKAHEAD


Compare os atrasos de um somador ripple-carry de 32-bits e um somador carry-lookahead de 32-
bits com blocos de 4-bits. Suponha que o atraso de uma porta de duas entradas de 100 ps e que o
atraso do full adder de 300 ps.
Soluo: De acordo com a Equao 5.1, o atraso de propagao do somador ripple carry de 32
300 ps = 9,6 ns.

344
Captulo cinco Blocos de Construo Digital

O CLA tem tpg = 100 ps, tpg_block = 6 100 ps = 600 ps, e tAND_OR = 2 100 ps = 200 ps. De acordo com
a Equao 5.6, o atraso de propagao do somador carry-lookahead de 32-bits com blocos de 4-bits , Os primeiros computadores usavam
somadores ripple carry, porque os
assim, 100 ps + 600 ps (32/4 - 1) x 200 ps + (4 300 ps) = 3,3 ns, quase trs vezes mais rpido do que o
componentes eram caros e os somadores
somador ripple-carry.
ripple-carry utilizavam menos hardware.
Somadores Prefix* Praticamente todos os PC modernos
usam somadores prefix em caminhos
Os somadores prefix estendem a lgica de gerar e propagar do somador carry lookahead para crticos, porque os transstores so agora
executar ainda mais rpido. Primeiro calculam G e P para pares de colunas, em seguida, para blocos de baratos e a velocidade de grande
4, em seguida, para os blocos de 8, em seguida, 16, e assim por diante at que o sinal de gerar para importncia.
cada coluna conhecido. As somas so calculadas a partir destes sinais.
Por outras palavras, a estratgia do somador prefix calcular o transporte
em Ci-1 para cada coluna i to rapidamente quanto possvel, em seguida, calcular a soma, utilizando
= ( ) 1 (5.7)
Define a coluna i = -1 para manter Cin, ento G-1 = Cin e P-1 = 0. Em seguida, Ci-1 = Gi-1:-1, porque haver
um transporte de sada da coluna i-1 se o bloco abrangendo i-1 a -1 gerar um transporte. O transporte
produzido pode ser gerado na coluna de i-1 ou gerada numa das colunas anteriores e propagado.
Assim, reescrevemos a Equao 5.7 como
= ( ) 1:1 (5.8)
Por isso, o principal desafio calcular rapidamente para todos os blocos os sinais gerar G-1:-1, G0:-1,
G1:-1, G2:-1,. . . , GN-2:-1. Estes sinais, juntamente com P-1:-1, P0:-1, P1:-1, P2:-1,. . . , PN-2:-1, so chamados
prefixos.
A Figura 5.7 mostra um somador prefix de N = 16-bits. O somador comea com uma pre-computao
para formar Pi e Gi para cada coluna de Ai e Bi usando portas AND e OR. Em seguida, usa log2N = 4 nveis
de clulas negras para formar os prefixos de Gi:j e Pi:j. Uma clula negra aceita as entradas da parte
superior de um bloco que abrange os bits i:k e da parte inferior abrangendo bits k-1:j. Combina estas
partes para formar sinais gerar e propagar para todo o bloco que abrange os bits i:j utilizando as
equaes
345
Captulo cinco Blocos de Construo Digital

: = : + : 1: (5.9)

: = : 1: (5.10)

Por outras palavras, um bloco abrangendo os bits i:j ir gerar um transporte, se a parte superior
gerar um transporte ou se a parte superior propagar um transporte gerado na parte inferior. O bloco
ir propagar um transporte se ambas as partes, superior e inferior, propagarem o transporte.
Finalmente, o somador prefix calcula as somas usando a equao 5.8.
Em resumo, o somador prefix atinge um atraso que tem um crescimento logartmico em vez de
linear com o nmero de colunas do somador. Esta acelerao significativa, especialmente para
somadores com 32 ou mais bits, mas obtida custa de mais hardware do que um simples somador
de carry-lookahead. A rede de clulas negras chamada de prefix tree.
O princpio geral da utilizao de prefix trees para realizar computaes em que o tempo tem um
crescimento logartmico com o nmero de entradas uma tcnica poderosa. Com alguma habilidade,
ela pode ser aplicada a muitos outros tipos de circuitos (ver, por exemplo, o Exerccio 5.7).
O caminho crtico para um somador prefix de N-bits envolve a pre-computao de Pi e Gi seguido
por log2N estgios de clulas negras prefix para obter todos os prefixos. Gi-1:-1, prossegue ento
atravs da porta XOR final em baixo para calcular Si. Matematicamente, o atraso de um somador
prefix de N-bits

= + log 2 ( ) + , (5.11)

onde tpg-prefix o atraso de uma clula negra prefix.

346
Captulo cinco Blocos de Construo Digital

Figura 5.7 Somador prefix de 16-bits

Exemplo 5.2 ATRASO DE UM SOMADOR PREFIX


Calcule o atraso de um somador prefix de 32-bits. Suponha que o atraso de cada porta de duas
entradas de 100 ps.

347
Captulo cinco Blocos de Construo Digital

Soluo: O atraso de propagao de cada clula prefix negra tpg_prefix de 200 ps (ou seja, dois atrasos de
porta). Assim, usando a Equao 5.11, o atraso de propagao do circuito somador prefix de 32-bits de
100 ps + log2(32) 200 ps + 100 ps = 1,2 ns, que cerca de trs vezes mais rpido do que o somador
carry-lookahead e oito vezes mais rpido que o somador ripple-carry do Exemplo 5.1. Na prtica, os
benefcios no so assim to grandes, mas os somadores prefix ainda so substancialmente mais rpidos
do que as alternativas.

Colocando Tudo Junto


Esta Seo apresenta o half adder, full adder, e trs tipos de somadores por propagao do transporte:
ripple-carry, carry-lookahead, e somadores prefix. Os somadores mais rpidos exigem mais hardware e,
portanto, so mais caros e apresentam um consumo energtico maior. Estes compromissos devem ser
considerados ao escolher um somador apropriado para um projeto.
As linguagens de descrio de hardware fornecem a operao + para especificar um CPA. As
ferramentas de sntese modernas selecionam entre muitas implementaes possveis, escolhendo o
projeto mais barato (menor) que atende aos requisitos de velocidade. Isso simplifica muito o trabalho do
projetista. O Exemplo HDL 5.1 descreve um CPA com transportes de entrada e de sada.

Exemplo HDL 5.1 SOMADOR

SystemVerilog VHDL

module adder #(parameter N = 8) library IEEE; use IEEE.STD_LOGIC_1164.ALL;


(input logic [N1:0] a, b, use IEEE.NUMERIC_STD_UNSIGNED.ALL;
input logic cin,
output logic [N1:0] s, entity adder is
output logic cout); generic(N: integer := 8);
assign {cout, s} = a + b + cin; port(a, b: in STD_LOGIC_VECTOR(N1 downto 0);
endmodule cin: in STD_LOGIC;
s: out STD_LOGIC_VECTOR(N1 downto 0);

348
Captulo cinco Blocos de Construo Digital

cout: out STD_LOGIC);


end;

architecture synth of adder is


signal result: STD_LOGIC_VECTOR(N downto 0);
begin
result <= ("0" & a) + ("0" & b) + cin;
s <= result(N1 downto 0);
cout
end;

Figura 5.8 Somador sintetizado

5.2.2. Subtraco
Lembre-se da Seo 1.4.6 em os que somadores podiam adicionar nmeros positivos e negativos
utilizando a representao numrica de complemento-2. A subtrao quase to fcil: inverter o
sinal do segundo nmero, em seguida adicionam-se. Inverter o sinal de um nmero em
complemento-2 realizado invertendo os bits e adicionando 1.

Para calcular Y = A - B, primeiro produza o complemento-2 de B: Inverta os bits de B para obter


Figura 5.9 Subtrator: (a) smbolo, (b)
e adicione 1 para obter -B = + 1. Adicione esta quantidade a A para obter Y = A + + 1 = A - B. Esta
implementao
soma pode ser realizada com um nico CPA atravs da adio de A + , com Cin = 1. A Figura 5.9
mostra o smbolo para um subtrator e o hardware para efetuar Y = A - B. O Exemplo HDL 5.2 descreve
um subtrator.

349
Captulo cinco Blocos de Construo Digital

Exemplo HDL 5.2 SUBTRATOR

SystemVerilog VHDL

module subtractor #(parameter N = 8) library IEEE; use IEEE.STD_LOGIC_1164.ALL;


(input logic [N1:0] a, b, use IEEE.NUMERIC_STD_UNSIGNED.ALL;
output logic [N1:0] y);
assign y = a b; entity subtractor is
endmodule generic(N: integer := 8);
port(a, b: in STD_LOGIC_VECTOR(N1 downto 0);
y: out STD_LOGIC_VECTOR(N1 downto 0));
end;

architecture synth of subtractor is


begin
y <= a b;
end;

Figura 5.10 Subtrator sintetizado

5.2.3. Comparadores
Um comparador determina se dois nmeros binrios so iguais ou se um maior ou menor do que
o outro. Um comparador recebe dois nmeros binrios A e B de N-bits. H dois tipos comuns de
comparadores.

350
Captulo cinco Blocos de Construo Digital

Figura 5.11 Comparador de 4-bits igualdade: (a) smbolo, (b) implementao

Um comparador de igualdade produz uma sada que indica se A igual a B (A == B). Um comparador
de magnitude produz uma ou mais sadas, indicando os valores relativos de A e B.
O comparador de igualdade a pea mais simples de hardware. A Figura 5.12 mostra o smbolo e a
implementao de um comparador de igualdade de 4-bits. Primeiro verifica para determinar se os bits
correspondentes em cada coluna de A e B so iguais usando portas XNOR. Os nmeros so iguais se
todas as colunas forem iguais.
A comparao de magnitude geralmente feita atravs da computao de A - B e olhando para o
sinal (bit mais significativo) do resultado como mostrado na Figura 5.11. Se o resultado for negativo Figura 5.12 Comparador de
(isto , o bit de sinal um), ento A inferior a B. Caso contrrio A maior do que ou igual a B. magnitude de 4-bits

O Exemplo HDL 5.3 mostra como utilizar as vrias operaes de comparao.

Exemplo HDL 5.3 COMPARADORES

SystemVerilog VHDL

module comparator #(parameter N = 8) library IEEE; use IEEE.STD_LOGIC_1164.ALL;


input logic [N1:0] a, b,
output logic eq, neq, lt, lte, gt, gte); entity comparators is
generic(N: integer : = 8);
assign eq = (a == b); port(a, b: in STD_LOGIC_VECTOR(N1 downto 0);
assign neq = (a != b); eq, neq, lt, lte, gt, gte: out STD_LOGIC);
351
Captulo cinco Blocos de Construo Digital

assign lt = (a < b); end;


assign lte = (a <= b);
assign gt = (a > b); architecture synth of comparator is
assign gte = (a >= b); begin
endmodule eq <= '1' when (a = b) else '0';
neq <= '1' when (a /= b) else '0';
lt <= '1' when (a < b) else '0';
lte <= '1' when (a <= b) else '0';
gt <= '1' when (a > b) else '0';
gte <= '1' when (a >= b) else '0';
end;

Figura 5.13 Comparadores sintetizado

352
Captulo cinco Blocos de Construo Digital

5.2.4. ALU
Uma unidade aritmtica/lgica (ALU) combina uma variedade de operaes matemticas e lgicas
numa nica unidade. Por exemplo, uma ALU tpica pode realizar operaes de adio, subtrao,
comparao de magnitude, e operaes AND e OR. A ALU forma o corao da maioria dos sistemas de
computadores.
A Figura 5.14 mostra o smbolo para uma ALU de N-bits com entradas e sadas de N-bit. A ALU
recebe um sinal F de controle que especifica qual a funo a ser executada. Os sinais de controle iro
geralmente ser mostrados a azul para distingui-los dos sinais de dados. A Tabela 5.1 lista as funes
tpicas que a ALU pode executar. A funo SLT usada para a comparao de magnitude e ser
discutida mais adiante nesta seo.
Figura 5.14 Smbolo de uma ALU
Tabela 5.1 Operaes da ALU

A Figura 5.15 mostra uma implementao da ALU. A ALU contm um somador de N-bits e N portas
AND e OR de N entradas. Ela tambm possui inversores e um multiplexador para inverter a entrada B
quando o sinal de controlo F2 ativado. Um multiplexador 4:1 escolhe a funo desejada com base
nos sinais de controlo F1:0.

353
Captulo cinco Blocos de Construo Digital

Mais especificamente, os blocos lgicos e aritmticos na ALU operam em A e BB. BB B ou ,


dependendo de F2. Se F1:0 = 00, o multiplexador de sada escolhe A AND BB. Se F1:0 = 01, a ALU
determina A OR BB. Se F1:0 = 10, a ALU executa adio ou subtrao. Note-se que F2 tambm o
transporte para o somador. Tambm devemos relembrar que + 1 = -B na aritmtica complemento-
2. Se F2 = 0, a ALU calcula A + B. Se F2 = 1, a ALU calcula A + + 1 = A - B.
Quando F2:0 = 111, a ALU executa a operao ativa se menor que (SLT - set if less than). Quando A
< B, Y = 1. Caso contrrio, o Y = 0. Por outras palavras, Y ativado a 1 se A for inferior a B.
A SLT realizada atravs do clculo de S = A - B. Se S negativo (isto , o bit de sinal est ativo), A
inferior a B. A unidade de extenso do zero (zero extend unit) produz uma sada de N-bits,
concatenando a sua entrada de 1-bit com zeros nos bits mais significativos. O bit de sinal (o bit N - 1)
de S a entrada para a unidade de extenso de zero.

Exemplo 5.3 ATIVA SE MENOR QUE


Configure uma ALU de 32-bits para a operao SLT. Suponha que A = 2510 e B = 3210. Mostre os
sinais de controlo e de sada, Y.
Soluo: Por causa de A < B, esperamos que Y seja 1. Para SLT, F2:0 = 111. Com F2 = 1, isto configura a
Figura 5.15 ALU de N-bits
unidade somador como um subtrator com uma sada S de 2510 - 3210 = -710 = 1111. . . 10012. Com F1:0
= 11, o multiplexador final estabelece Y = S31 = 1.

Algumas ALU produzem sadas extras, chamadas de flags, que fornecem informaes sobre a sada
da ALU. Por exemplo, uma flag de transbordo (overflow) indica que o resultado do somador
transbordou. Uma flag de zero indica que a sada da ALU 0.
O HDL para uma ALU de N-bits deixado para o Exerccio 5.9. Existem muitas variaes sobre esta
ALU bsica que suportam outras funes, tais como XOR ou a comparao de igualdade.

354
Captulo cinco Blocos de Construo Digital

5.2.5. Shifters e Rotators


Os shifters e rotators deslocam os bits e multiplicam ou dividem por potncias de 2. Como o nome
indica, um shifter desloca um nmero binrio para a esquerda ou para a direita um nmero
especificado de posies. Existem vrios tipos de shifters normalmente utilizados:
O shifter lgico - desloca o nmero esquerda (LSL) ou direita (LSR) e preenche os lugares
vazios com 0.
Ex: 11001 LSR 2 = 00110; 11001 LSL 2 = 00100
O shifter aritmtico - o mesmo que um shifter lgico, mas nos deslocamentos para a direita
preenche os bits mais significativos, com uma cpia do bit mais significativo (msb). Isso til para
multiplicar e dividir nmeros com sinal (ver Sees 5.2.6 e 5.2.7). Nos deslocamentos aritmticos
para a esquerda (ASL) o mesmo que o shift lgico para a esquerda (LSV).
Ex: 11001 ASR 2 = 11110; 11001 ASL 2 = 00100
O rotator circula o nmero tal que os lugares vazios so preenchidos com os bits que saem da
outra extremidade.
Ex: 11001 ROR 2 = 01110; 11001 ROL 2 = 00111
Um shifter de N-bits pode ser construdo a partir de N multiplexadores N:1. A entrada deslocada
por 0 a N - 1 bits, dependendo do valor das log2N bits linhas de seleo. A Figura 5.16 apresenta o
smbolo e o hardware de shifter de 4-bits. Os operadores <<, >> e >>> normalmente indicam shift
esquerda, shift lgico direita e shift aritmtico direita, respectivamente. Dependendo do valor de
2-bits da quantidade de deslocamento shamt1:0, a sada Y recebe a entrada A deslocada por 0 a 3
bits. Para todos os shifter, quando shmt1:0 = 00, Y = A. O Exerccio 5.14 aborda o projeto de rotators.
Um shift esquerda um caso especial da multiplicao. Um shift esquerda de N bits multiplica
o nmero por 2N. Por exemplo, 0000112 << 4 = 1100002 equivalente a 310 x 24 = 4810.

355
Captulo cinco Blocos de Construo Digital

Figura 5.16 Shifters de 4-bit: (a) shift esquerda, (b) shift lgico direita, (c) shift aritmtico
direita

Um shift aritmtico direita um caso especial de diviso. Um shift aritmtico direita por N bits
divide o nmero por 2N. Por exemplo, 111002 >>> 2 = 111112 equivalente a -410 / 22 = -110.
5.2.6. Multiplicao*
A multiplicao de nmeros binrios sem sinal semelhante multiplicao decimal, mas envolve
apenas 1 e 0. A Figura 5.17 compara a multiplicao em decimal e binrio. Em ambos os casos, os
produtos parciais so formados pela multiplicao de um nico dgito do multiplicador com todo o
multiplicando. Os produtos parciais so deslocados e somados para formar o resultado.
Em geral, um multiplicador N N multiplica dois nmeros de N-bits e produz um resultado de 2N
bits. Os produtos parciais da multiplicao binria so ou o multiplicando ou 0. A multiplicao de

356
Captulo cinco Blocos de Construo Digital

nmeros binrios de 1-bit equivalente operao AND, de modo que portas AND so utilizadas para
formar os produtos parciais.
A Figura 5.18 mostra o smbolo, a funo e a implementao de um multiplicador 4 4. O
multiplicador recebe o multiplicando e o multiplicador, A e B, e produz o produto P. A Figura 5.18 (b)
mostra como os produtos parciais so formados. Cada produto parcial um nico bit do multiplicador
(B3, B2, B1, ou B0) AND os bits do multiplicando (A3, A2, A1, A0). Com operandos de N-bits, existem N
produtos parciais e N - 1 estgio somadores de 1-bit. Por exemplo, para um multiplicador 4 4, o
produto parcial da primeira linha B0 AND (A3, A2, A1, A0). Este produto parcial adicionado ao segundo
produto parcial deslocado, B1 e (A3, A2, A1, A0). As linhas subsequentes de portas AND e somadores
produzem e adicionam os produtos parciais restantes.
O HDL para um multiplicador fornecido no Exemplo HDL 5.4. Tal como acontece com os
somadores, muitos projetos diferentes de multiplicadores, com diferentes solues de compromisso
velocidade/custo existem. As ferramentas de sntese podem escolher o projeto mais adequado tendo
em conta as restries de tempo.

Figura 5.17 Multiplicao: (a) decimal, (b) binria

357
Captulo cinco Blocos de Construo Digital

Figura 5.18 Multiplicador 4 4: (a) smbolo, (b) funo, (c) implementao

Exemplo HDL 5.4 MULTIPLICADOR

SystemVerilog VHDL

module multiplier #(parameter N = 8) library IEEE; use IEEE.STD_LOGIC_1164.ALL;


(input logic [N1:0] a, b, use IEEE.NUMERIC_STD_UNSIGNED.ALL;
output logic [2*N1:0] y);
assign y = a * b; entity multiplier is
endmodule generic(N: integer := 8);
port(a, b: in STD_LOGIC_VECTOR(N1 downto 0);
y: out STD_LOGIC_VECTOR(2*N1 downto 0));
end;

architecture synth of multiplier is


begin
y <= a
end;

358
Captulo cinco Blocos de Construo Digital

Figura 5.19 Multiplicador sintetizado

5.2.7. Diviso
A diviso binria pode ser realizada utilizando o seguinte algoritmo para nmeros sem sinal de N-
bits no intervalo [0, 2N-1]:
R = 0
for i = N1 to 0
R = {R << 1, Ai}
D = R B
if D < 0 then Qi = 0, R =R // R < B
else Qi = 1, R =D //R B
R = R

O resto parcial R inicializado a 0. O bit mais significativo do dividendo A torna-se ento o bit menos
significativo de R. O divisor B repetidamente subtrado deste resto parcial para determinar se se
encaixa. Se a diferena D negativa (isto , o bit de sinal de D 1), ento o bit quociente Qi 0 e a
diferena descartada. Caso contrrio, Qi 1, e o resto parcial atualizado para ser a diferena. Em
qualquer caso, o resto parcial , ento, dobrado (shift esquerda por uma coluna), o prximo bit mais
significativo de A torna-se o bit menos significativo de R, e o processo repete-se. O resultado satisfaz
= + .

A Figura 5.20 apresenta um esquema de uma matriz divisora de 4 bits. O divisor calcula A/B e
produz um quociente Q e um resto R. A legenda mostra o smbolo e o esquema para cada bloco na
matriz divisora. O sinal N indica se R - B negativo. Sendo obtido a partir da sada D do bloco mais
esquerda na fila, que o sinal da diferena.
O atraso de uma matriz divisora de N-bits aumenta proporcionalmente com N2 porque o transporte
deve-se propagar ao longo de todos os N estgios numa linha antes do sinal ser determinado e o

359
Captulo cinco Blocos de Construo Digital

multiplexador selecionar R ou D. Isso se repete para todas as N linhas. A diviso uma operao
lenta e dispendiosa em hardware e, portanto, deve ser usada o menos frequentemente possvel.

Figura 5.20 Matriz divisora

5.2.8. Leituras Adicionais


A aritmtica computacional poderia ser objeto de um texto inteiro. Digital Arithmetic, de
Ercegovac e Lang, uma excelente viso geral desta temtica. CMOS VLSI Design, de Weste e Harris,
abrange o projeto de circuitos de alto desempenho para operaes aritmticas.

360
Captulo cinco Blocos de Construo Digital

5.3. SISTEMAS NUMRICOS


Os computadores operam nmeros inteiros e fraces. At agora, s foi considerada a
representao de inteiros com e sem sinal, introduzida na Seo 1.4. Esta Seo apresenta os sistemas
numricos de vrgula fixa e de vrgula flutuante que podem representar nmeros racionais. Os nmeros
de vrgula fixa so anlogos aos decimais; alguns dos bits representam a parte inteira, e o resto
representa a fraco. Os nmeros de vrgula flutuante so anlogos notao cientfica, com uma
mantissa e um expoente.
5.3.1. Sistema Numrico de Vrgula Fixa
A notao de vrgula fixa possui uma vrgula binria implcita entre os bits do nmero inteiro e a
parte fraccionria, anlogo vrgula decimal entre os dgitos inteiros e fraccionrios de um nmero Figura 5.21 Notao de vrgula fixa
decimal ordinrio. Por exemplo, a Figura 5.21 (a) mostra um nmero de vrgula fixa com quatro bits de 6,75 com quatro bits inteiros e
quatro bits de fraccionrios
inteiros e quatro bits de fraccionrios. A Figura 5.21 (b) mostra a vrgula binria implcita em azul, e a
Figura 5.21 (c) mostra o valor decimal equivalente.
Os nmeros de vrgula fixa com sinal podem usar a notao de complemento-2 ou a notao
sinal/magnitude. A Figura 5.22 mostra a representao de vrgula fixa de -2,375 usando ambas as
notaes com quatro bits inteiros e quatro bits fraccionrios. A vrgula binria implcita mostrada em
azul para maior clareza. Na forma sinal/magnitude, o bit mais significativo usado para indicar o sinal.
A representao de complemento-2 formada invertendo os bits do valor absoluto e adicionando 1 ao Figura 5.22 Representao de vrgula
bit menos significativo. Neste caso, a posio do bit menos significativo na coluna 2-4. fixa de -2,375: (a) valor absoluto, (b)
sinal e magnitude, (c) complemento-
Como todas as representaes de nmeros binrios, os nmeros de vrgula fixa so apenas uma 2
coleo de bits. No h nenhuma maneira de saber da existncia da vrgula binria, exceto por acordo
das pessoas que interpretam o nmero.

Exemplo 5.4 ARITMTICA COM NMEROS DE VRGULA FIXA


Calcule 0,75 + -0,625 usando nmeros de vrgula fixa.
Soluo: Primeiro convertemos 0,625, a magnitude do segundo nmero, para a notao binria de
vrgula fixa. 0,625 2-1, por isso h um 1 na coluna 2-1, resultando 0,625-0,5 = 0,125. Porque 0,125 < 2-2,
361
Captulo cinco Blocos de Construo Digital

h um 0 na coluna 2-2. Porque 0,125 2-3, existir um 1 na coluna 2-3, deixando 0,125-0,125 = 0.
Assim, deve existir um 0 na coluna 2-4. Colocando tudo isto junto, 0,62510 = 000,10102.
Os sistemas de nmeros de vrgula fixa
so comumente usados em aplicaes Usamos a representao de complemento-2 para nmeros com sinal para que a adio
bancrias e financeiras que necessitem de funcione corretamente. A Figura 5.23 mostra a converso de -0,625 para a notao de vrgula
preciso, mas no um grande intervalo de fixa de complemento-2.
representao.
A Figura 5.24 mostra a adio binria de vrgula fixa e o equivalente decimal para comparao.
Note-se que o primeiro 1 na adio de vrgula fixa da Figura 5.24 (a) ignorado a partir do
resultado de 8-bits.

Figura 5.23 Converso de vrgula fixa em complemento-2

Figura 5.24 Adio: (a) vrgula fixa binria, (b) equivalente decimal

5.3.2. Sistemas Numricos de Virgula Flutuante


Os nmeros de vrgula flutuante so anlogos notao cientfica. Eles contornam a limitao
de ter um nmero constante de bits inteiros e fraccionrios, permitindo a representao de
nmeros muito grandes ou muito pequenos. Tal como a notao cientfica, os nmeros de vrgula
flutuante tm um sinal, uma mantissa (M), uma base (B) e um expoente (E), como se mostra na
Figura 5.25. Por exemplo, o nmero 4.1 103 a notao cientfica do decimal 4100. Ele tem
uma mantissa de 4,1, uma base de 10, e um expoente 3. A vrgula decimal flutua para a posio
logo aps o dgito mais significativo. Os nmeros de vrgula flutuante tm base 2 com uma

362
Captulo cinco Blocos de Construo Digital

mantissa binria. Os 32 bits so usados para representar um bit de sinal, 8 bits de expoente e 23 bits
mantissa.

Exemplo 5.5 NMEROS DE VRGULA FLUTUANTE DE 32-BITS
Figura 5.25 Nmero de vrgula
Apresente a representao de vrgula flutuante do nmero 228. flutuante
Soluo: Primeiro convertemos o nmero decimal para binrio: 22810 = 111001002 = 1,110012 27. A
Figura 5.26 apresenta a codificao de 32 bits, que ser mais tarde modificado para eficincia. O bit
de sinal positivo (0), os 8 bits de expoente tomam o valor 7, e os restantes 23-bits esto a mantissa.

Figura 5.26 Vrgula flutuante de 32-bits, verso 1

No sistema binrio de vrgula flutuante, o primeiro bit da mantissa ( esquerda da vrgula binria)
sempre igual a 1 e, portanto, no precisa ser armazenado. chamado de implicit leading one. A
Figura 5.27 mostra a representao de vrgula flutuante modificada de 228 10 = 111001002 20 =
1,110012 27. O implicit leading one no est includo na mantissa de 23-bits por motivos de
eficincia. Apenas os bits fraccionrios so armazenados. Isso liberta um bit extra para os dados teis.

Figura 5.27 Vrgula flutuante de 32-bits, verso 2

Figura 5.28 Notao vrgula flutuante IEEE 754

363
Captulo cinco Blocos de Construo Digital

Fazemos uma modificao final no campo do expoente. O expoente deve representar valores
positivos e negativos. Para faz-lo, a vrgula flutuante utiliza um expoente biased, que o expoente
original mais um valor constante. A vrgula flutuante de 32-bits utiliza um valor constante de 127.
Por exemplo, para o expoente 7, o expoente biased 7 + 127 = 134 = 100001102. Para o expoente
-4, o expoente biased: -4 + 127 = 123 = 011110112. A Figura 5.28 mostra 1,110012 27 representado
na notao de vrgula flutuante com implicit leading one e expoente biased de 134 (7 + 127). Esta
notao obedece ao standard de vrgula flutuante IEEE 754.
Casos Especiais: 0, , NaN

Como pode ser aparente, h muitas O standard de vrgula flutuante IEEE tem casos especiais para representar nmeros, como zero,
maneiras razoveis para representar o infinito, e os resultados ilegais. Por exemplo, a representao do nmero zero problemtica em
nmeros de vrgula flutuante. Por muitos notao de vrgula flutuante, devido ao implicit leading one. Cdigos especiais com expoentes todos
anos, os fabricantes de computadores a 0 ou todos a 1 so reservados para estes casos especiais. A Tabela 5.2 mostra as representaes
usaram formatos incompatveis de de vrgula flutuante de 0, , e NaN. Tal como acontece com nmeros de sinal/ magnitude, a vrgula
vrgula flutuante. Os resultados de um flutuante tem representao positiva e negativa para o valor 0. O NaN utilizado para nmeros que
computador no podiam ser diretamente no existem, como 1 ou log2(-5).
interpretado por um outro computador. O
Institut of Electrical and Electronics Tabela 5.2 Notao IEEE 754 de vrgula flutuante para 0, , e NaN
Engineers resolveu este problema criando
o padro de vrgula flutuante IEEE 754 em
1985, que define os nmeros de vrgula
flutuante. Este formato de vrgula
flutuante agora utilizado quase
universalmente e discutido nesta seo.

Formatos de Preciso Simples e Dupla


At agora, examinamos nmeros de vrgula flutuante de 32-bits. Este formato tambm
chamado de preciso simples (single precision), single, ou float. O Standard IEEE 754 tambm define

364
Captulo cinco Blocos de Construo Digital

os nmeros de dupla preciso de 64-bits (tambm chamados de doubles) que proporcionam maior
preciso e maior alcance. A Tabela 5.3 mostra o nmero de bits utilizados para os campos em cada
um dos formatos. A aritmtica de vrgula flutuante
geralmente realizada em hardware para
Excluindo os casos especiais mencionados anteriormente, os nmeros normais de preciso torna-la mais rpida. Este hardware,
simples abrangem uma gama de 1.175494 10-38 a 3,402824 1038. Eles tm uma preciso de chamado de unidade de vrgula flutuante
cerca de sete dgitos significativos decimais (porque 2-24 10-7). Da mesma forma, os nmeros (FPU - floating-point unit), tipicamente
normais de preciso dupla abrangem uma gama de 2,22507385850720 10-308 a distinto da unidade de processamento
1,79769313486232 10308 e tm uma preciso de cerca de 15 dgitos significativos decimais. central (CPU). O infame bug de diviso de
vrgula flutuante (FDIV) no Pentium FPU
Tabela 5.3 Formatos de preciso simples e dupla custou Intel $ 475 milhes para chamar
e substituir os chips defeituosos. O erro
ocorreu simplesmente porque uma tabela
de pesquisa no foi carregado
corretamente.

Arredondamento
Os resultados aritmticos que caem fora da preciso disponvel so arredondados para um
nmero vizinho. Os modos de arredondamento so: arredondar para baixo, arredondar para cima,
arredondar em direo a zero, e arredondar para o mais prximo. O modo de arredondamento
normal arredondar para o mais prximo. No modo de arredondamento para o prximo, se dois
nmeros esto igualmente perto, o que tiver um 0 na posio menos significativa da parte
fraccionria o escolhido.
Recorde-se que um nmero transborda (overflows) quando a sua magnitude demasiado grande
para ser representada. Da mesma forma, pode ocorrer um underflow quando o nmero demasiado
pequeno para ser representado. No modo de arredondamento para o mais prximo, os overflows
so arredondados at e os underflows so arredondados para baixo a 0.

365
Captulo cinco Blocos de Construo Digital

Adio de Vrgula Flutuante


A adio de nmeros de vrgula flutuante no to simples como a adio de dois nmeros de
complemento-2. As etapas para adicionar os nmeros de vrgula flutuante com o mesmo sinal so
A vrgula flutuante no pode representar as seguintes:
alguns nmeros com exatido, como por
exemplo o 1,7. No entanto, quando o 1. Extrair os bits de expoente e fraccionrios.
leitor digita 1,7 na calculadora, vai ver
2. Acrescente o 1 para formar a mantissa.
exatamente 1,7, no 1,69999... . Para lidar
com isso, alguns aplicativos, como 3. Comparar os expoentes.
calculadoras e softwares financeiros,
usam o formato BCD (binary coded 4. Desloque a mantissa menor se for necessrio.
decimal) ou formatos com um expoente 5. Some as mantissas.
de base 10. Os nmeros BCD codificam
cada dgito decimal usando quatro bits 6. Normalize a mantissa e ajuste o expoente, se necessrio.
com um intervalo de 0 a 9. Por exemplo, a
notao BCD em vrgula fixa de 1,7 com 7. Arredonde o resultado.
quatro bits inteiros e quatro bits 8. Construa o expoente e o fraccionrio novamente num nmero de vrgula flutuante.
fraccionrios seria 0.001,0111. Claro,
nada gratuito. O custo seria o de uma A Figura 5.29 mostra a adio de vrgula flutuante de 7,875 (1,11111 22) com 0,1875 (1,1 2-
maior complexidade no hardware da 3). O resultado 8,0625 (1,0000001 23).

aritmtica e desperdcios na codificao


(codificaes A-F no seriam utilizadas), e, Aps a extrao dos bits de expoente e fraccionrios o implicit leading one includo nos passos
portanto, uma diminuio no 1 e 2, os expoentes so comparados subtraindo o expoente menor do expoente maior. O resultado
desempenho. Assim, para aplicaes de o nmero de bits, pelo qual, no passo 4, o menor nmero deslocado para a direita para alinhar
computao intensiva, a vrgula flutuante a vrgula binria implcita (isto , para tornar os expoentes iguais). Os nmeros alinhados so
muito mais rpida. adicionados. Uma vez que a soma tem uma mantissa que maior do que ou igual a 2,0, o resultado
normalizado, deslocando-o para a direita 1-bit e incrementando o expoente. Neste exemplo, o
resultado exato, assim, no necessrio fazer o arredondamento. O resultado armazenado na
notao de vrgula flutuante, removendo o implicit leading one da mantissa e acrescentando o bit
de sinal

366
Captulo cinco Blocos de Construo Digital

Figura 5.29 Adio em vrgula flutuante

367
Captulo cinco Blocos de Construo Digital

5.4. BLOCOS DE CONSTRUO SEQUENCIAIS No confunda registros de deslocamento


com os shifters da Seo 5.2.5.
Esta Seo examina blocos sequenciais, incluindo contadores e registros de deslocamento. registradores de deslocamento so blocos
lgicos sequenciais que deslocam um
5.4.1. Contadores novo bit de entrada em cada flanco do
Um contador binrio de N-bits, mostrado na Figura 5.30, um circuito aritmtico sequencial com relgio. Shifters so blocos lgicos
entradas de relgio e de reset e uma sada Q de N-bits. O reset repe a sada a 0. O contador avana combinacionais sem sinal de relgio que
ento ao longo de todas as 2N sadas possveis numa ordem binria, incremento no flanco ascendente deslocam uma entrada uma quantidade
do relgio. de vezes especificada.

A Figura 5.31 mostra um contador de N-bits composto por um somador e um registro resettable.
Em cada ciclo, o contador adiciona 1 ao valor armazenado no registrador. O Exemplo HDL 5.5 descreve
um contador binrio com reset assncrono.
Outros tipos de contadores, tais como contadores para cima/baixo, so explorados do Exerccio
5.4