Está en la página 1de 66

B

Fundamentos do Projeto Lgico


Eu sempre gostei dessa palavra: Boolean.
Claude Shannon IEEE Spectrum, abril de 1992 (A tese do professor Shannon mostrou que a lgebra inventada por George Boole no sculo XIX poderia representar o funcionamento das chaves eltricas.)

B.1 B.2 B.3 B.4 B.5 B.6 B.7 B.8 B.9 B.10 B.11 B.12 B.13 B.14

Introduo

B-2 B-3

Portas, tabelas verdade e equaes lgicas Lgica combinacional B-6

Usando uma linguagem de descrio de hardware Construindo uma unidade lgica e aritmtica Adio mais rpida: Carry Lookahead Clocks B-37 B-29 B-20

B-15

Elementos de memria: flip-flops, latches e registradores Elementos de memria: SRAMs e DRAMs B-45 Mquinas de estados finitos B-52 Metodologias de temporizao B-56 B-60

B-39

Dispositivos programveis em campo Comentrios finais Exerccios B-62 B-61

B.1

Introduo

Este apndice oferece uma rpida discusso sobre os fundamentos do projeto lgico. Ele no substitui um curso sobre projeto lgico nem permitir projetar sistemas lgicos funcionais significativos. Contudo, se voc tiver pouca ou nenhuma experincia com projeto lgico, este apndice oferecer uma base suficiente para entender todo o material deste livro. Alm disso, se voc quiser entender parte da motivao por trs da forma como os computadores so implementados, este material servir como uma introduo til. Se a sua curiosidade for aumentada, mas no saciada com este apndice, as referncias ao final oferecem fontes de informao adicionais. A Seo B.2 introduz os blocos de montagem bsicos da lgica, a saber, portas lgicas. A Seo B.3 utiliza esses blocos de montagem para construir sistemas lgicos combinacionais simples, que no contm memria. Se voc j teve alguma experincia com sistemas lgicos ou digitais, provavelmente estar acostumado com o material dessas duas primeiras sees. A Seo B.5 mostra como usar os conceitos das Sees B.2 e B.3 para projetar uma ALU para o processador MIPS. A Seo B.6 mostra como criar um somador rpido e pode ser pulada sem problemas se voc no estiver interessado nesse assunto. A Seo B.7 uma introduo rpida ao assunto de clocking, necessrio para discutirmos como funcionam os elementos de memria. A Seo B.8 introduz os elementos de memria, e a Seo B.9 a estende para focalizar memrias de acesso aleatrio; ele descreve as caractersticas importantes de entender e como elas so usadas nos Captulos 5 e 6, e a base que motiva muitos dos aspectos do projeto de hierarquia de memria no Captulo 7. A Seo B.10 descreve o projeto e o uso das mquinas de estados finitos, que so blocos lgicos seqenciais. Se voc pretende ler o Apndice C, dever entender totalmente o material das Sees de B.2 a B.10. No entanto, se voc pretende ler apenas o material sobre controle, nos Captulos 5 e 6, poder passar superficialmente pelos apndices, mas dever ter alguma familiaridade com todo o material, exceto a Seo B.11. A Seo B.11 serve para aqueles que desejam ter um conhecimento mais profundo das metodologias de clocking e temporizao. Ele explica os fundamentos de como funciona o clock acionado por transio, introduz outro esquema de clocking e descreve rapidamente o problema de sincronizar entradas assncronas. Ao longo do apndice, onde for apropriado, tambm inclumos segmentos em Verilog para demonstrar como a lgica pode ser representada em Verilog, que apresentaremos na Seo B.4.

B-3

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

B.2

Portas, tabelas verdade e equaes lgicas

A eletrnica dentro de um computador moderno digital e opera apenas com dois nveis de voltagem: alta e baixa. Todos os outros valores de voltagem so temporrios e ocorrem na transio entre os valores. (Conforme discutimos mais adiante nesta seo, uma armadilha possvel no projeto digital a amostragem de um sinal quando ele no nitidamente alto ou baixo.) O fato de que os computadores so digitais sinal ativo Um sinal tambm um motivo fundamental para eles usarem nmeros binrios, pois um sistema binrio corresque (logicamente) ponde abstrao bsica inerente eletrnica. Em diversas famlias lgicas, os valores e os relacionaverdadeiro, ou 1. mentos entre os dois valores de voltagem diferem. Assim, em vez de se referir aos nveis de voltagem, fasinal inativo Um sinal lamos sobre sinais que so (logicamente) verdadeiros, ou so 1, ou so ativos; ou sinais que so (logicaque (logicamente) mente) falsos, ou 0, ou inativos. Os valores 0 e 1 so chamados complementos ou inversos um do outro. falso, ou 0. Os blocos lgicos so categorizados como um dentre dois tipos, dependendo se contm memria lgica combinacional ou no. Os blocos sem memria so chamados combinacionais; a sada de um bloco combinacional Um sistema lgico cujos depende apenas da entrada atual. Nos blocos com memria, as sadas podem depender das entradas e blocos no contm do valor armazenado na memria, chamado estado do bloco lgico. Nesta seo e na seguinte, focamemria e, portanto, lizaremos apenas a lgica combinacional. Depois de introduzir diferentes elementos de memria na calculam a mesma sada dada mesma Seo B.8, descreveremos como projetada a lgica seqencial, que a lgica que inclui estado.
entrada. lgica seqencial Um grupo de elementos lgicos que contm memria e, portanto, cujo valor depende das entradas e tambm do contedo atual da memria.

Tabelas verdade
Como um bloco lgico combinacional no contm memria, ele pode ser especificado completamente definindo os valores das sadas para cada conjunto de valores de entrada possveis. Essa descrio normalmente dada como uma tabela verdade. Para um bloco lgico com n entradas, existem 2n entradas na tabela verdade, pois existem todas essas combinaes possveis de valores de entrada. Cada entrada especifica o valor de todas as sadas para essa combinao de entrada em particular.

TABELAS VERDADE EXEMPLO Considere uma funo lgica com trs entradas, A, B e C, e trs sadas, D, E e F. A funo definida da seguinte maneira: D verdadeiro se pelo menos uma entrada for verdadeira, E verdadeiro se exatamente duas entradas forem verdadeiras, e F verdadeiro somente se todas as trs entradas forem verdadeiras. Mostre a tabela verdade para essa funo. A tabela verdade ter 2n = 8 entradas. Aqui est ela:
Entradas A 0 0 0 0 1 1 1 1 B 0 0 1 1 0 0 1 1 C 0 1 0 1 0 1 0 1 D 0 1 1 1 1 1 1 1 Sadas E 0 0 0 1 0 1 1 0 F 0 0 0 0 0 0 0 1

RESPOSTA

As tabelas verdade podem descrever qualquer funo lgica combinacional; porm, elas aumentam de tamanho rapidamente e podem no ser fceis de entender. s vezes, queremos construir uma

B.2

Portas, tabelas verdade e equaes lgicas

B-4

funo lgica que ser 0 para muitas combinaes de entrada e usamos um atalho para especificar apenas as entradas da tabela verdade para as sadas diferentes de zero. Essa tcnica usada no Captulo 5 e no Apndice C.

lgebra Booleana
Outra tcnica expressar a funo lgica com equaes lgicas. Isso feito com o uso da lgebra Booleana (que tem o nome de Boole, um matemtico do sculo XIX). Em lgebra Booleana, todas as variveis possuem os valores 0 ou 1 e, nas formulaes tpicas, existem trs operadores:
n

O operador OR escrito como +, como em A + B. O resultado de um operador OR 1 se uma das variveis for 1. A operao OR tambm chamada soma lgica, pois seu resultado 1 se um dos operandos for 1. O operador AND escrito como ., como em A . B. O resultado de um operador AND 1 somente se as duas entradas forem 1. A operao AND tambm chamada de produto lgico, pois seu resultado 1 apenas se os dois operandos forem 1. O operador unrio NOT escrito como A. O resultado de um operador NOT 1 somente se a entrada for 0. A aplicao do operador NOT a um valor lgico resulta em uma inverso ou negao do valor (ou seja, se a entrada for 0, a sada ser 1, e vice-versa).

Existem sete leis da lgebra Booleana teis na manipulao de equaes lgicas:


n n n n n n

Lei da identidade: A + 0 = A e A . 1 = A. Leis de zero e um: A + 1 = 1 e A . 0 = 0. Leis inversas: A + A = 1 e A . A = 0. Leis comutativas: A + B = B + A e A . B = B . A. Leis associativas: A + (B + C) = (A + B) + C e A . (B . C) = (A . B) . C. Leis distributivas: A . (B + C) = (A . B) + (A . C) e A + (B . C) = (A + B) . (A + C).

Alm disso, existem dois outros teoremas teis, chamados leis de DeMorgan, que so discutidos com mais profundidade nos exerccios. Qualquer conjunto de funes lgicas pode ser escrito como uma srie de equaes com uma sada no lado esquerdo de cada equao e, no lado direito, uma frmula consistindo em variveis e os trs operadores anteriores.

EQUAES LGICAS Mostre as equaes lgicas para as funes lgicas, D, E e F, descritas no exemplo anterior. Aqui est a equao para D: D=A+B+C F igualmente simples: F=A.B.C EXEMPLO RESPOSTA

B-5

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

E um pouco complicada. Pense nela em duas partes: o que precisa ser verdadeiro para E ser verdadeiro (duas das trs entradas precisam ser verdadeiras) e o que no pode ser verdadeiro (todas as trs no podem ser verdadeiras). Assim, podemos escrever E como E = ((A . B) + (A . C) + (B . C)) . (A . B . C) Tambm podemos derivar E observando que E verdadeiro apenas se exatamente duas das entradas forem verdadeiras. Ento, podemos escrever E como um OR dos trs termos possveis que possuem duas entradas verdadeiras e uma entrada falsa: E = (A . B . C) + (A . C . B) + (B . C . A) A prova de que essas duas expresses so equivalentes explorada nos exerccios.

Em Verilog, descrevemos a lgica combinacional sempre que possvel usando a instruo assign, descrita a partir da pgina B-18. Podemos escrever uma definio para E usando o operador OR exclusivo da Verilog, como em assign E = A ^ B ^ C, D e F possuem representaes ainda mais simples, que so exatamente como o cdigo C correspondente: D = A | B | C e F = A & B & C.

Portas lgicas
Blocos lgicos so criados a partir de portas lgicas que implementam as funes lgicas bsicas. Por exemplo, uma porta AND implementa a funo AND, e uma porta OR implementa a funo OR. Como AND e OR so comutativos e associativos, uma porta AND ou OR pode ter vrias entradas, com a sada igual ao AND ou OR de todas as entradas. A funo lgica NOT implementada com um inversor que sempre possui uma nica entrada. A representao padro desses trs blocos de montagem lgicos aparece na Figura B.2.1. Em vez de desenhar inversores explicitamente, uma prtica comum acrescentar bolhas s entradas ou sada de uma porta lgica para fazer com que o valor lgico nessa linha de entrada ou de sada seja invertida. Por exemplo, a Figura B.2.2 mostra o diagrama lgico para a funo A + B, usando inversores explcitos esquerda e usando as entradas e a sada em bolha direita. Qualquer funo lgica pode ser construda usando portas AND, portas OR e inverso; vrios dos exerccios do a oportunidade de tentar implementar algumas funes lgicas comuns com portas. Porta NOR Uma porta Na prxima seo, veremos como uma implementao de qualquer funo lgica pode ser construOR invertida. da usando esse conhecimento. Porta NAND Uma porta De fato, todas as funes lgicas podem ser construdas com apenas um nico tipo de porta, se AND invertida. essa porta for inversora. As duas portas inversoras so chamadas NOR e NAND e correspondem s
porta lgica Um dispositivo que implementa funes lgicas bsicas, como AND ou OR.

FIGURA B. 2.1 Desenho padro para uma porta AND, uma porta OR e um inversor, mostrados da esquerda para a direita. Os sinais esquerda de cada smbolo so as entradas, enquanto a sada aparece direita. As portas AND e OR possuem duas entradas. Os inversores possuem uma nica entrada.

A B FIGURA B. 2.2

A B

Implementao da porta lgica usando inverses explcitas esquerda e usando entradas e sada em bolha direita. Essa funo lgica pode ser simplificada para A . B ou, em Verilog, A & ~ B.

B.3

Lgica combinacional

B-6

portas OR e AND invertidas, respectivamente. Portas NOR e NAND so chamadas universais, pois qualquer funo lgica pode ser construda por meio desse tipo de porta. Os exerccios exploram melhor esse conceito. As duas expresses lgicas a seguir so equivalentes? Se no, encontre valores para as variveis para Verifique mostrar que no so: voc mesmo
n n

(A . B . C) + (A . C . B) + (B . C . A) B . (A . C + C . A)

B.3

Lgica combinacional

Nesta seo, examinamos alguns dos maiores blocos de montagem lgicos mais utilizados e discutimos o projeto da lgica estruturada que pode ser implementado automaticamente a partir de uma equao lgica ou tabela verdade por um programa de traduo. Por fim, discutimos a noo de um array de blocos lgicos.

Decodificadores

decodificador Um

Um bloco lgico que usaremos na montagem de componentes maiores um decodificador. O tipo bloco lgico que possui mais comum de decodificador possui uma entrada de n bits e 2n sadas, onde somente uma sada ati- uma entrada de n bits e n vada para cada combinao de entradas. Esse decodificador traduz a entrada de n bits para um sinal 2 sadas, onde somente uma sada ativada que corresponde ao valor binrio da entrada de n bits. As sadas, portanto, so numeradas como, di- para cada combinao gamos, Out0, Out1, ..., Out2n-1. Se o valor da entrada for i, ento Outi ser verdadeiro e todas as oude entradas. tras sadas sero falsas. A Figura B.3.1 mostra um decodificador de 3 bits e a tabela verdade. Esse decodificador chamado decodificador 3 para 8, pois existem 3 entradas e 8 (23) sadas. H tambm um elemento lgico chamado de codificador, que realiza a funo inversa de um decodificador, exigindo 2n entradas e produzindo uma sada de n bits.

Out0 Out1 Out2 3 Out3 Decodificador Out4 Out5 Out6 Out7 a. Um decodificador de 3 bits I2 0 0 0 0 1 1 1 1

Entradas

Sadas I0 0 1 0 1 0 1 0 1 Out7 0 0 0 0 0 0 0 1 Out6 0 0 0 0 0 0 1 0 Out5 0 0 0 0 0 1 0 0 Out4 0 0 0 0 1 0 0 0 Out3 0 0 0 1 0 0 0 0 Out2 0 0 1 0 0 0 0 0 Out1 0 1 0 0 0 0 0 0 Out0 1 0 0 0 0 0 0 0

I1 0 0 1 1 0 0 1 1

b. A tabela verdade para um decodificador de 3 bits


3

FIGURA B. 3.1 Decodificador de 3 bits possui 3 entradas, chamadas 12, 11 e 10, e 8 (2 ) sadas, chamadas de Out0 a Out7. Somente a sada correspondente ao valor binrio da entrada verdadeira, como mostra a tabela verdade. O rtulo 3 na entrada do decodificador diz que o sinal de entrada possui 3 bits de largura.

B-7

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

valor seletor Tambm chamado valor de controle. O sinal de controle usado para selecionar um dos valores de entrada de um multiplexador como a sada do multiplexador.

Multiplexadores
Uma funo lgica bsica que usamos com muita freqncia nos Captulos 5 e 6 o multiplexador. Um multiplexador poderia ser mais corretamente chamado de seletor, pois sua sada uma das entradas selecionada por um controle. Considere o multiplexador de duas entradas. O lado esquerdo da Figura B.3.2 mostra que esse multiplexador tem trs entradas: dois valores de dados e um valor seletor (ou de controle). O valor seletor determina qual das entradas se torna a sada. Podemos representar a funo lgica calculada por um multiplexador de duas entradas, mostrado em forma de portas lgicas no lado direito da Figura B.3.2, como C = (A . S) + (B . S). Os multiplexadores podem ser criados com qualquer quantidade de entradas de dados. Quando existem apenas duas entradas, o seletor um nico sinal que seleciona uma das entradas se ela for verdadeira (1) e a outra se ela for falsa (0). Se houver n entradas de dados, ter de haver log2n entradas seletoras. Nesse caso, o multiplexador basicamente consiste em trs partes: 1. Um decodificador que gera n sinais, cada um indicando um valor de entrada diferente 2. Um array de n portas AND, cada uma combinando com uma das entradas com um sinal do decodificador 3. Uma nica porta OR grande, que incorpora as sadas das portas AND Para associar as entradas com valores do seletor, rotulamos as entradas de dados numericamente (ou seja, 0, 1, 2, 3, ..., n 1) e interpretamos as entradas do seletor de dados como um nmero binrio. s vezes, utilizamos um multiplexador com sinais de seletor no decodificados. Os multiplexadores so representados combinacionalmente em Verilog usando expresses if. Para multiplexadores maiores, instrues case so mais convenientes, mas deve-se ter cuidado ao sintetizar a lgica combinacional.

Lgica de dois nveis e PLAs


Conforme indicado na seo anterior, qualquer funo lgica pode ser implementada apenas com as funes AND, OR e NOT. Na verdade, um resultado muito mais forte verdadeiro. Qualquer funo lgica pode ser escrita em um formato cannico, no qual cada entrada verdadeira ou uma varivel complementada e existem apenas dois nveis de portas um sendo AND e o outro OR com uma possvel inverso na sada final. Essa representao chamada de representao de dois nveis e existem duas formas, chamadas soma de produtos e produto de somas. Uma representao da soma de produtos uma soma lgica (OR) de produtos (termos usando o operador AND); um produto de somas exatamente o oposto. Em nosso exemplo anterior, tnhamos duas equaes para a sada E: E = ((A . B) + (A . C) + (B . C)) . (A . B . C)

soma de produtos Uma forma de representao lgica que emprega uma soma lgica (OR) de produtos (termos unidos usando o operador AND).

A A 0 M u x 1

C B S

FIGURA B. 3.2 Um multiplexador de duas entradas, esquerda, e sua implementao com portas lgicas, direita. O multiplexador tem duas entradas de dados (A e B), que so rotuladas com 0 e 1, e uma entrada seletora (S), alm de uma sada C. A implementao de multiplexadores em Verilog exige um pouco mais de trabalho, especialmente quando eles possuem mais de duas entradas. Mostramos como fazer isso a partir da pgina B.18.

B.3

Lgica combinacional

B-8

e E = (A . B . C) + (A . C . B) + (B . C . A)

Esta segunda equao est na forma de soma de produtos: ela possui dois nveis de lgica e as nicas inverses esto em variveis individuais. A primeira equao possui trs nveis de lgica. Detalhamento: tambm podemos escrever E como um produto de somas:
E = ( A + B + C ).( A + C + B ).( B + C + A) Para derivar esse formato, voc precisa usar os teoremas de DeMorgan, discutidos nos exerccios.

Neste texto, usamos o formato da soma de produtos. fcil ver que qualquer funo lgica pode ser representada como uma soma de produtos, construindo tal representao a partir da tabela verdade para a funo. Cada entrada da tabela verdade para a qual a funo verdadeira corresponde a um termo do produto. O termo do produto consiste em um produto lgico de todas as entradas ou os complementos das entradas, dependendo se a entrada na tabela verdade possui um 0 ou 1 correspondente a essa varivel. A funo lgica a soma lgica dos termos do produto onde a funo verdadeira. Isso pode ser visto mais facilmente com um exemplo.

SOMA DE PRODUTOS Mostre a representao da soma dos produtos para a seguinte tabela verdade para D.
Entradas A 0 0 0 0 1 1 1 1 B 0 0 1 1 0 0 1 1 C 0 1 0 1 0 1 0 1 Sada D 0 1 1 0 1 0 0 1

EXEMPLO

Existem quatro termos no produto, pois a funo verdadeira (1) para quatro combinaes de entrada diferentes. So estes A.B.C A.B.C A.B.C A.B.C Assim, podemos escrever a funo para D como a soma destes termos: D = (A . B . C) + (A . B . C) + (A . B . C) + (A . B . C) Observe que somente as entradas da tabela verdade para as quais a funo verdadeira geram os termos na equao.

RESPOSTA

B-9

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

array lgico programvel (PLA) Um elemento lgico estruturado composto de um conjunto de entradas e complementos de entrada correspondentes e dois estgios de lgica: o primeiro gerando termos do produto das entradas e complementos da entrada e o segundo gerando termos da soma dos termos do produto. Logo, PLAs implementam funes lgicas como uma soma de produtos. mintermos Tambm chamados termos do produto. Um conjunto de entradas lgicas unidas por conjuno (operaes AND); os termos do produto formam o primeiro estgio lgico do array lgico programvel (PLA).

Podemos usar esse relacionamento entre uma tabela verdade e uma representao bidimensional para gerar uma implementao no nvel de portas lgicas de qualquer conjunto de funes lgicas. Um conjunto de funes lgicas corresponde a uma tabela verdade com vrias colunas de sada, como vimos no exemplo da pgina B.3. Cada coluna de sada representa uma funo lgica diferente, que pode ser construda diretamente a partir da tabela verdade. A representao da soma dos produtos corresponde a uma implementao lgica estruturada comum, chamada array lgico programvel (PLA Programmable Logic Array). Uma PLA possui um conjunto de entradas e complementos de entrada correspondentes (que podem ser implementados com um conjunto de inversores) e dois estgios de lgica. O primeiro estgio um array de portas AND que formam um conjunto de termos do produto (s vezes chamados mintermos); cada termo do produto pode consistir em qualquer uma das entradas ou seus complementos. O segundo estgio um array de portas OR, cada uma das quais formando uma soma lgica de qualquer quantidade de termos do produto. A Figura B.3.3 mostra a forma bsica de uma PLA. Uma PLA pode implementar diretamente a tabela verdade de um conjunto de funes lgicas com vrias entradas e sadas. Como cada entrada onde a tabela verdade verdadeira exige um termo do produto, haver uma linha correspondente na PLA. Cada sada corresponde a uma linha em potencial das portas OR no segundo estgio. O nmero de portas OR corresponde ao nmero de entradas da tabela verdade para as quais a sada verdadeira. O tamanho total de uma PLA, como aquela mostrada na Figura B.3.3, igual soma do tamanho do array de portas AND (chamado plano AND) e o tamanho do array de portas OR (chamado plano OR). Examinando a Figura B.3.3, podemos ver que o tamanho do array de portas AND igual ao nmero de entradas vezes o nmero de termos do produto diferentes, e o tamanho do array de portas OR o nmero de sadas vezes o nmero de termos do produto. Uma PLA possui duas caractersticas que a ajudam a se tornar um meio eficiente de implementar um conjunto de funes lgicas. Primeiro, somente as entradas da tabela verdade que produzem um valor verdadeiro para pelo menos uma sada possuem quaisquer portas lgicas associadas a elas. Segundo, cada termo do produto diferente ter apenas uma entrada na PLA, mesmo que o termo do produto seja usado em vrias sadas. Vamos examinar um exemplo.

Entradas

Portas AND

Termos do produto

Portas OR

Sadas

FIGURA B. 3.3 O formato bsico de uma PLA consiste em um array de portas AND seguido por um array de portas OR. Cada entrada no array de portas AND um termo do produto consistindo em qualquer quantidade de entradas ou entradas invertidas. Cada entrada no array de portas OR um termo da soma consistindo em qualquer quantidade desses termos do produto.

B.3

Lgica combinacional

B-10

PLAS Considere o conjunto de funes lgicas definido no exemplo da pgina B-3. Mostre uma implementao em PLA desse exemplo para D, E e F. Aqui est a tabela verdade construda anteriormente:
Entradas A 0 0 0 0 1 1 1 1 B 0 0 1 1 0 0 1 1 C 0 1 0 1 0 1 0 1 D 0 1 1 1 1 1 1 1 E 0 0 0 1 0 1 1 0 Sadas F 0 0 0 0 0 0 0 1

EXEMPLO

RESPOSTA

Como existem sete termos do produto exclusivos com pelo menos um valor verdadeiro na seo de sada, haver sete colunas no plano AND. O nmero de linhas no plano AND trs (pois existem trs entradas) e tambm haver trs linhas no plano OR (pois existem trs sadas). A Figura B.3.4 mostra a PLA resultante, com os termos do produto correspondendo s entradas da tabela verdade de cima para baixo.

Em vez de desenhar todas as portas, como fizemos na Figura B.3.4, os projetistas normalmente mostram apenas a posio das portas AND ou das portas OR. Os pontos so usados na interseo de uma linha de sinal do termo do produto e uma linha de entrada ou uma linha de sada quando uma porta AND ou OR correspondente exigida. A Figura B.3.5 mostra como a PLA da Figura B.3.4 ficaria quando desenhada dessa maneira. O contedo de uma PLA fixo quando a PLA criado, embora tambm existam formas de estruturas tipo PLA, chamadas PALs, que podem ser programadas eletronicamente quando um projetista est pronto para us-las.

Entradas A B C

Sadas D

E F FIGURA B. 3.4

A PLA para implementar a funo lgica descrita anteriormente.

B-11

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

Entradas A

B Plano OR C

Sadas D Plano AND E F

FIGURA B. 3.5

Uma PLA desenhada usando pontos para indicar os componentes dos termos do produto e os termos da soma no array. Em vez de usar inversores nas portas lgicas, normalmente todas as entradas percorrem a largura do plano AND nas formas original e complemento. Um ponto no plano AND indica que a entrada, ou seu inverso, ocorre no termo do produto. Um ponto no plano OR indica que o termo do produto correspondente aparece na sada correspondente.

ROMs
Outra forma de lgica estruturada que pode ser usada para implementar um conjunto de funes lgicas uma memria somente de leitura (ROM Read-Only Memory). Uma ROM chamada de memria porque possui um conjunto de locais que podem ser lidos; porm, o contedo desses locais fixo, normalmente no momento em que a ROM fabricada. H tambm ROMs programveis (PROMs Programmable ROMs), que podem ser programadas eletronicamente, quando um projetista conhece seu contedo. H tambm PROMs apagveis; esses dispositivos exigem um processo de apagamento lento usando luz ultravioleta, e assim so usados como memrias somente de leitura, exceto durante o processo de projeto e depurao. Uma ROM possui um conjunto de linhas de endereo de entrada e um conjunto de sadas. O nmero de entradas endereveis na ROM determina o nmero de linhas de endereo: se a ROM contm 2m entradas endereveis, chamadas de altura, ento existem m linhas de entrada. O nmero de bits em cada entrada enderevel igual ao nmero de bits de sada e s vezes chamado de largura da ROM. O nmero total de bits na ROM igual altura vezes a largura. A altura e a largura s vezes so chamadas coletivamente como o formato da ROM. Uma ROM pode codificar uma coleo de funes lgicas diretamente a partir da tabela verdade. ROM programvel Por exemplo, se houver n funes com m entradas, precisamos de uma ROM com m linhas de ende(PROM) Uma forma de reo (e 2m entradas), com cada entrada sendo de n bits de largura. O contedo na parte de entrada da memria somente de tabela verdade representa os endereos do contedo na ROM, enquanto o contedo da parte de sada leitura que pode ser programada quando um da tabela verdade constitui o contedo da ROM. Se a tabela verdade for organizada de modo que a projetista conhece seu seqncia de entradas na parte da entrada constitua uma seqncia de nmeros binrios (como todas contedo. as tabelas verdade mostradas at aqui), ento a parte de sada tambm indica o contedo da ROM em ordem. No exemplo anterior, a partir da pgina B-10, havia trs entradas e trs sadas. Isso equivale a uma ROM com 23 = 8 entradas, cada uma com 3 bits de largura. O contedo dessas entradas em ordem crescente por endereo dado diretamente pela parte de sada da tabela verdade que aparece na pgina B-10. ROMs e PLAs esto bastante relacionadas. Uma ROM totalmente decodificada: ela contm uma word de sada completa para cada combinao de entrada possvel. Uma PLA decodificada apenas parcialmente. Isso significa que uma ROM sempre ter mais contedo. Para a tabela verdade
memria somente de leitura (ROM) Uma memria cujo contedo definido no momento da criao, aps o qual o contedo s pode ser lido. A ROM usada como lgica estruturada para implementar um conjunto de funes lgicas usando os termos das funes lgicas como entradas de endereo e as sadas como bits em cada word da memria.

B.3

Lgica combinacional

B-12

anterior, a ROM contm itens para todas as oito entradas possveis, enquanto a PLA contm apenas os sete termos de produto ativos. medida que o nmero de entradas cresce, o nmero de entradas na ROM cresce exponencialmente. Ao contrrio, para a maioria das funes lgicas reais, o nmero de termos de produto cresce muito mais lentamente (ver os exemplos no Apndice C). Essa diferena torna as PLAs geralmente mais eficientes para implementar as funes lgicas combinacionais. As ROMs possuem a vantagem de serem capazes de implementar qualquer funo lgica com o seu nmero de entradas e sadas. Essa vantagem facilita mudar o contedo da ROM se a funo lgica mudar, pois o tamanho da ROM no precisa mudar. Alm de ROMs e PLAs, os sistemas de sntese de lgica modernos tambm traduziro pequenos blocos de lgica combinacional em uma coleo de portas que podem ser colocadas e ligadas automaticamente. Embora algumas pequenas colees de portas no faam uso eficiente da rea, para pequenas funes lgicas elas possuem menos overhead do que a estrutura rgida de uma ROM ou PLA e, por isso, so preferidas. Para projetar a lgica fora de um circuito integrado personalizado ou semipersonalizado, uma opo comum um dispositivo programvel em campo; descrevemos esses dispositivos na Seo B.12.

Dont Cares
Normalmente, na implementao de alguma lgica combinacional, existem situaes em que no nos importamos com o valor de alguma sada, seja porque outra sada verdadeira ou porque um subconjunto de combinaes de entrada determina os valores das sadas. Essas situaes so conhecidas como dont cares. Dont cares so importantes porque facilitam a otimizao da implementao de uma funo lgica. Existem dois tipos de dont cares: dont cares de sada e dont cares de entrada, ambos podendo ser representados em uma tabela verdade. Os dont cares de sada surgem quando no nos importamos com o valor de uma sada para alguma combinao de entrada. Eles aparecem como X na parte de sada de uma tabela verdade. Quando uma sada um dont care para alguma combinao de entrada, o projetista ou o programa de otimizao da lgica livre para tornar a sada verdadeira ou falsa para essa combinao de entrada. Dont cares de entrada surgem quando uma sada depende apenas de algumas das entradas, e tambm so mostradas como X, embora na parte de entrada da tabela verdade.

DONT CARES Considere uma funo lgica com entradas A, B e C definidas da seguinte maneira:
n n n

EXEMPLO

Se A ou C verdadeira, ento a sada D verdadeira, qualquer que seja o valor de B. Se A ou B verdadeira, ento a sada E verdadeira, qualquer que seja o valor de C. A sada F verdadeira se exatamente uma das entradas for verdadeira, embora no nos importemos com o valor de F, sempre que D e E so verdadeiras.

Mostre a tabela verdade completa para essa funo e a tabela verdade usando dont cares. Quantos termos do produto so exigidos em uma PLA para cada uma delas?

B-13

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

RESPOSTA

Aqui est a tabela verdade completa, sem os dont cares:


Entradas A 0 0 0 0 1 1 1 1 B 0 0 1 1 0 0 1 1 C 0 1 0 1 0 1 0 1 D 0 1 0 1 1 1 1 1 Sadas E 0 0 1 1 1 1 1 1 F 0 1 1 0 1 0 0 1

Isso exige sete termos do produto sem otimizao. A tabela verdade escrita com dont cares de sada se parece com esta:
Entradas A 0 0 0 0 1 1 1 1 B 0 0 1 1 0 0 1 1 C 0 1 0 1 0 1 0 1 D 0 1 0 1 1 1 1 1 Sadas E 0 0 1 1 1 1 1 1 F 0 1 1 X X X X X

Se tambm usarmos os dont cares de entrada, essa tabela verdade pode ser simplificada ainda mais, para gerar:
Entradas A 0 0 0 X 1 B 0 0 1 1 X C 0 1 0 1 X D 0 1 0 1 1 Sadas E 0 0 1 1 1 F 0 1 1 X X

Essa tabela verdade simplificada exige uma PLA com quatro mintermos ou pode ser implementada em portas discretas com uma porta AND de duas entradas e trs portas OR (duas com trs entradas e uma com duas entradas). Isso confronta a tabela verdade original, que tinha sete mintermos e exigiria quatro portas AND.

A minimizao lgica crtica para conseguir implementaes eficientes. Uma ferramenta til para a minimizao manual da lgica aleatria so os mapas de Karnaugh. Os mapas de Karnaugh representam a tabela verdade graficamente, de modo que os termos do produto que podem ser combinados so facilmente vistos. Apesar disso, a otimizao manual das funes lgicas significativas usando os mapas de Karnaugh no prtica, tanto devido ao tamanho dos mapas quanto pela sua complexidade. Felizmente, o processo de minimizao lgica muito mecnico e pode ser realizado por ferramentas de projeto. No processo de minimizao, as ferramentas tiram proveito dos dont ca-

B.3

Lgica combinacional

B-14

res, de modo que sua especificao importante. As referncias do livro-texto ao final deste apndice oferecem uma discusso mais profunda sobre minimizao lgica, mapas de Karnaugh e a teoria por trs de tais algoritmos de minimizao.

Arrays de elementos lgicos


Muitas das operaes combinacionais a serem realizadas sobre os dados precisam ser feitas em uma word inteira (32 bits) de dados. Assim, normalmente queremos montar um array de elementos lgicos, que podemos representar apenas mostrando que determinada operao acontecer a uma coleo inteira de entradas. Por exemplo, vimos na pgina B-7 a aparncia de um multiplexador de 1 bit, barramento No projeto mas, dentro de uma mquina, em grande parte do tempo queremos selecionar entre um par de barra- lgico, uma coleo de mentos. Um barramento uma coleo de linhas de dados tratada em conjunto como um nico sinal linhas de dados que tratada em conjunto lgico. (O termo barramento tambm usado para indicar uma coleo compartilhada de linhas com como um nico sinal vrias fontes e usos, especialmente no Captulo 8, onde discutimos sobre os barramentos de E/S.) lgico; tambm uma Por exemplo, no conjunto de instrues MIPS, o resultado de uma instruo escrita em um regis- coleo compartilhada trador pode vir de uma dentre duas fontes. Um multiplexador usado para escolher qual dos dois de linhas com vrias fontes e usos. barramentos (cada um com 32 bits de largura) ser escrito no registrador destino. O multiplexador de 1 bit, que mostramos anteriormente, precisar ser replicado 32 vezes. Indicamos que um sinal um barramento em vez de uma nica linha de 1 bit representando-o com uma linha mais grossa em uma figura. A maioria dos barramentos possui 32 bits de largura; os que no possuem so rotulados explicitamente com sua largura. Quando mostramos uma unidade lgica cujas entradas e sadas so barramentos, isso significa que a unidade precisa ser replicada por um nmero de vezes suficiente para acomodar a largura da entrada. A Figura B.3.6 mostra como desenhamos um multiplexador que seleciona entre um par de barramentos de 32 bits e como isso se expande em termos de multiplexadores de 1 bit de largura. s vezes, precisamos construir um array de elementos lgicos onde as entradas para alguns elementos no array so sadas de elementos anteriores. Por exemplo, assim que construda uma ALU de mltiplos bits de largura. Nesses casos, temos de
Select Select

32 M u x 32 C

A31 M u x C31

32

B31

A30 M u x . . . A0 M u x C0 C30 . . .

B30

B0 a. Um multiplexador 2 para 1 com 32 bits de largura FIGURA B. 3.6

b. O multiplexador de 32 bits na realidade um array de 32 multiplexadores de 1 bit

Um multiplexador duplicado 32 vezes para realizar uma seleo entre duas entradas de 32 bits. Observe que ainda existe apenas um sinal de seleo de dados usado para todos os 32 multiplexadores de 1 bit.

B-15

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

mostrar explicitamente como criar arrays mais largos, pois os elementos individuais do array no so mais independentes, como acontece no caso de um multiplexador de 32 bits de largura. Verifique A paridade uma funo na qual a sada depende do nmero de 1s na entrada. Para uma funo de voc mesmo paridade par, a sada 1 se a entrada tiver um nmero par de uns. Suponha que uma ROM seja usada para implementar uma funo de paridade par com uma entrada de 4 bits. Qual dentre A, B, C ou D representa o contedo da ROM?
Endereo 0 1 2 3 4 5 6 7 8 9 10 11 A 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 B 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 C 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 D 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

linguagem de descrio de hardware Uma linguagem de programao para descrever o hardware utilizado para gerar simulaes de um projeto de hardware e tambm como entrada para ferramentas de sntese que podem gerar hardware real. Verilog Uma das duas linguagens de descrio de hardware mais comuns.

12 13 14 15

B.4

Usando uma linguagem de descrio de hardware

Hoje, a maior parte do projeto digital dos processadores e sistemas de hardware relacionados feita por meio de uma linguagem de descrio de hardware. Essa linguagem tem duas finalidades. Primeiro, ela oferece uma descrio abstrata do hardware para simular e depurar o projeto. Segundo, com o uso da sntese lgica e ferramentas de compilao de hardware, essa descrio pode ser compilada para a implementao do hardware. Nesta seo, introduzimos a linguagem de descrio de VHDL Uma das duas linguagens de descrio hardware Verilog e mostramos como ela pode ser usada para o projeto combinacional. No restante de hardware mais do apndice, expandimos o uso da Verilog para incluir o projeto da lgica seqencial. Em sees opcomuns. cionais dos Captulos 5 e 6, que aparecem no CD, usamos Verilog para descrever implementaes de processador. especificao Verilog uma das duas principais linguagens de descrio de hardware; a outra VHDL. Verilog comportamental Descreve como um um pouco mais utilizada no setor e baseada em C, ao contrrio de VHDL, que baseada em Ada. sistema digital opera O leitor um pouco mais familiarizado com C achar mais fcil acompanhar os fundamentos da Verifuncionalmente. log, que utilizamos neste apndice. Os leitores j acostumados com VHDL devero achar os conceitos simples, desde que j conheam um pouco da sintaxe da linguagem C. especificao estrutural Descreve Verilog pode especificar uma definio comportamental e uma estrutural de um sistema digital. como um sistema digital Uma especificao comportamental descreve como um sistema digital opera funcionalmente. organizado em termos Uma especificao estrutural descreve a organizao detalhada de um sistema digital normalmente de uma conexo utilizando uma descrio hierrquica. Uma especificao estrutural pode ser usada para descrever hierrquica de elementos. um sistema de hardware em termos de uma hierarquia de elementos bsicos, como portas lgicas e

B.4

Usando uma linguagem de descrio de hardware

B-16

chaves. Assim, poderamos usar a Verilog para descrever o contedo exato das tabelas verdade e o caminho de dados da seo anterior. Com o surgimento das ferramentas de sntese de hardware, a maioria dos projetistas agora utili- ferramentas de sntese za Verilog ou VHDL para descrever estruturalmente apenas o caminho de dados, contando com a de hardware Software sntese lgica para gerar o controle a partir da descrio comportamental. Alm disso, a maioria dos de projeto auxiliado por que pode sistemas de CAD oferece grandes bibliotecas de peas padronizadas, como ALUs, multiplexadores, computadorprojeto no gerar um bancos de registradores, memrias, blocos lgicos programveis, alm de portas bsicas. nvel de portas lgicas A obteno de um resultado aceitvel usando bibliotecas e sntese de lgica exige que a especificao seja escrita vigiando a sntese eventual e o resultado desejado. Para nossos projetos simples, isso significa principalmente deixar claro o que esperamos que seja implementado na lgica combinacional e o que esperamos exigir da lgica seqencial. Na maior parte dos exemplos que usamos nesta seo, e no restante deste apndice, escrevemos em Verilog visando sntese eventual.
baseado em descries comportamentais de um sistema digital.

Tipos de dados e operadores em Verilog


Existem dois tipos de dados principais em Verilog: 1. Um wire especifica um sinal combinacional. 2. Um reg (registrador) mantm um valor, que pode variar com o tempo. Um reg no precisa corresponder necessariamente a um registrador real em uma implementao, embora isso normalmente acontea. Um registrador ou wire, chamado X, que possui 32 bits de largura, declarado como um array:
reg [31:0] X ou wire [31:0] X, que tambm define o ndice de 0 para designar o bit menos significawire Em Verilog, especifica um sinal combinacional. reg Em Verilog, um registrador.

tivo do registrador. Como normalmente queremos acessar um subcampo de um registrador ou wire, podemos nos referir ao conjunto contguo de bits de um registrador ou wire com a notao [bit inicial: bit final], onde os dois ndices devem ser valores constantes. Um array de registradores usado para uma estrutura como um banco de registradores ou memria. Assim, a declarao
reg [31:0] registerfile[0:31]

especifica uma varivel register file que equivalente a um banco de registradores MIPS, onde o registrador 0 o primeiro. Ao acessar um array, podemos nos referir a um nico elemento, como em C, usando a notao registerfile[numreg]. Os valores possveis para um registrador ou wire em Verilog so
n n n

0 ou 1, representando o falso ou verdadeiro lgico x, representando desconhecido, o valor inicial dado a todos os registradores e a qualquer wire no conectado a algo z, representando o estado de impedncia alta para portas tristate, que no discutiremos neste apndice

Valores constantes podem ser especificados como nmeros decimais e tambm como binrio, octal ou hexadecimal. Normalmente, queremos dizer o tamanho de um campo constante em bits. Isso feito prefixando o valor com um nmero decimal que especifica seu tamanho em bits. Por exemplo:
n 4b0100 n 8 h4

especifica uma constante binria de 4 bits com o valor 4, assim como 4d4 especifica uma constante de 8 bits com o valor 4 (na representao complemento a

dois)

B-17

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

Os valores tambm podem ser concatenados colocando-os dentro de { } separados por vrgulas. A notao {x {bit field}} replica bit field x vezes. Por exemplo:
n {16{2b01}}

cria um valor de 32 bits com o padro 0101 ... 01.

n {A[31:16],B[15:0]}

cria um valor cujos 16 bits mais significativos vm de A e cujos 16 bits menos significativos vm de B.

Verilog oferece o conjunto completo de operadores unrios e binrios de C, incluindo os operadores aritmticos (+, , *, /), os operadores lgicos (&, |, ~), os operadores de comparao (==, !=, >, <, <=, >=), os operadores de deslocamento (<<, >>) e o operador condicional de C (?, que usado na forma condio ? expr1 :expr2 e retorna expr1 se a condio for verdadeira e expr2 se ela for falsa). Verilog acrescenta um conjunto de operadores unrios de reduo lgica (&, |, ^) que geram um nico bit aplicando o operador lgico a todos os bits de um operando. Por exemplo, &A retorna o valor obtido pelo AND de todos os bits de A, e ^A retorna a reduo obtida pelo uso do OR exclusivo em todos os bits de A. Verifique Quais dos seguintes itens definem exatamente o mesmo valor? voc mesmo 1. 8b11110000 2. 8hF0 3. 8d240 4. {{4{1b1}},{4{1b0}}} 5. {4b1,4b0}

Estrutura de um programa em Verilog


Um programa em Verilog estruturado como um conjunto de mdulos, que podem representar qualquer coisa desde uma coleo de portas lgicas at um sistema completo. Os mdulos so semelhantes s classes em C++, embora no to poderosas. Um mdulo especifica suas portas de entrada e sada, que descrevem as conexes de entrada e sada de um mdulo. Um mdulo tambm pode declarar variveis adicionais. O corpo de um mdulo consiste em
n n n n

Construes initial, que podem inicializar variveis reg Atribuies contnuas, que definem apenas lgica combinacional Construes always, que podem definir a lgica seqencial ou combinacional Instncias de outros mdulos, usadas para implementar o mdulo sendo definido

Representando lgica combinacional complexa em Verilog


Uma atribuio contnua, indicada com a palavra-chave assign, atua como uma funo lgica combinacional: a sada atribuda continuamente ao valor, e uma mudana nos valores de entrada refletida imediatamente no valor da sada. Os wires s podem receber valores com atribuies contnuas. Usando a atribuio contnua, podemos definir um mdulo que implementa um meio-somador, como mostra a Figura B.4.1. As instrues de atribuio so um modo seguro de escrever Verilog que gera lgica combinacional. Entretanto, para estruturas mais complexas, as instrues de atribuio podem ser esquisitas ou

B.4

Usando uma linguagem de descrio de hardware

B-18

module half_adder (A,B,Sum,Carry); input A,B; // duas entradas de 1 bit output Sum, Carry; // duas sadas de 1 bit assign Sum = A ^ B; // soma A xor B assign Carry = A & B; // Carry A and B endmodule
FIGURA B. 4.1

Um mdulo em Verilog que define um meio-somador usando atribuies contnuas.

tediosas de usar. Tambm possvel usar o bloco always de um mdulo para descrever um elemento lgico combinacional, embora com muito cuidado. O uso de um bloco always permite a incluso de construes de controle da Verilog, como if-then-else, instrues case, instrues for e instrues repeat. Essas instrues so semelhantes s que existem em C, com pequenas mudanas. Um bloco always especifica uma lista opcional de sinais aos quais o bloco sensitivo (em uma lista comeando com @). O bloco always reavaliado se qualquer um dos sinais listados mudar de valor; se a lista for omitida, o bloco always constantemente reavaliado. Quando um bloco always est especificando a lgica combinacional, a lista de sensitividade dever incluir todos os sinais de entrada. Se houver vrias instrues Verilog a serem executadas em um bloco always, elas esto cercadas pelas palavras-chave begin e end, que tomam o lugar de { e } em C. Um bloco always, portanto, se parece com
always @(lista de sinais que causam reavaliao) begin Instrues Verilog incluindo atribuies e outras instrues de controle end

lista de sensitividade A lista de sinais que especifica quando um bloco always deve ser reavaliado.

Variveis reg s podem ser atribudas dentro de um bloco always, usando uma instruo de atribuio procedural (distinguida da atribuio contnua vista anteriormente). Contudo, existem dois tipos diferentes de atribuies procedurais. O operador de atribuio = executado como em C; o lado direito avaliado e o lado esquerdo recebe o valor. Alm do mais, ele executado como uma instruatribuio no bloqueante Uma o de atribuio C normal: ou seja, completado antes que a prxima instruo seja executada. Logo, o operador de atribuio = tem o nome atribuio bloqueante. Esse bloqueio pode ser til na atribuio que continua aps a avaliao do gerao da lgica seqencial, e voltaremos a esse assunto em breve. A outra forma de atribuio lado direito, atribuindo (no bloqueante) indicada por <=. Na atribuio no bloqueante, todo o lado direito das atribui- o valor ao lado esquerdo somente depois que es em um grupo always avaliado, e as atribuies so feitas simultaneamente. Como um primeiro exemplo da lgica combinacional implementada usando um bloco always, a Figura B.4.2 mostra a todo o lado direito for avaliado. implementao de um multiplexador 4-para-1, que usa uma construo case para facilitar a escrita.

atribuio bloqueante Em Verilog, uma atribuio que completa antes da execuo da prxima instruo.

module Mult4to1 (In1,In2,In3,In4,Sel,Out); input [31:0] In1, In2, In3, In4; // quatro entradas de 32 bits input [1:0] Sel; // sinal do seletor output reg [31:0] Out;// sada de 32 bits always @(In1, In2, In3, In4, Sel) case (Sel) // um multiplexador 4 por 1 0: Out <= In1; 1: Out <= In2; 2: Out <= In3; default: Out <= In4; endcase endmodule
FIGURA B. 4.2 Uma definio Verilog de um multiplexador 4-para-1 com entradas de 32 bits, usando uma instruo case. Uma instruo case atua como uma instruo switch do C, exceto que, em Verilog, somente o cdigo associado ao case selecionado executado (como se cada estado de case tivesse um break no final) e no existe passagem direta para a instruo seguinte.

B-19

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

module MIPSALU (ALUctl, A, B, ALUOut, Zero); input [3:0] ALUctl; input [31:0] A,B; output reg [31:0] ALUOut; output Zero; assign Zero = (ALUOut==0); // Zero verdadeiro se ALUOut 0; vai para algum lugar always @(ALUctl, A, B) // reavalia se estes mudarem case (ALUctl) 0: ALUOut <= A & B; 1: ALUOut <= A | B; 2: ALUOut <= A + B; 6: ALUOut <= A B; 7: ALUOut <= A < B ? 1:0; 12: ALUOut <= ~(A | B); // resultado nor default: ALUOut <= 0; // default 0, no dever acontecer; endcase endmodule
FIGURA B. 4.3 Uma definio comportamental em Verilog de uma ALU MIPS. Isso poderia ser sintetizado por meio de uma biblioteca de mdulos contendo operaes aritmticas e lgicas bsicas.

A construo case se parece com uma instruo switch do C. A Figura B.4.3 mostra uma definio de uma ALU MIPS, que tambm usa uma instruo case. Como apenas variveis reg podem ser atribudas dentro de blocos always, quando queremos descrever a lgica combinacional usando um bloco always, devemos ter o cuidado de garantir que o reg no seja sintetizado como um registrador. Diversas armadilhas so descritas na Seo Detalhamento a seguir. Detalhamento: instrues de atribuio contnua sempre geram lgica combinacional, mas outras estruturas Verilog, mesmo quando em blocos always, podem gerar resultados inesperados durante a sntese lgica. O problema mais comum a criao de lgica seqencial implicando a existncia de um latch ou registrador, o que resulta em uma implementao mais lenta e mais dispendiosa do que talvez pretendido. Para garantir que a lgica que dever ser combinacional seja sintetizada dessa maneira, faa o seguinte:
1. Coloque toda a lgica combinacional em uma atribuio contnua ou em um bloco always. 2. Verifique se todos os sinais usados como entradas aparecem na lista de sensitividade de um bloco always. 3. Garanta que cada caminho dentro de um bloco always atribui um valor ao mesmo conjunto exato de bits. O ltimo deles o mais fcil de se deixar de lado; examine o exemplo da Figura B.5.15 para convencer-se de que essa propriedade foi respeitada.

Verifique Supondo que todos os valores sejam inicialmente zero, quais so os valores de A e B depois de execuvoc mesmo tar este cdigo Verilog dentro de um bloco always?
C=1; A <= C; B = C;

B.5

Construindo uma unidade lgica e aritmtica

B-20

B.5

Construindo uma unidade lgica e aritmtica

A unidade lgica e aritmtica (ALU Arithmetic Logic Unit) o msculo do computador, o dispositivo que realiza as operaes aritmticas, como adio e subtrao, ou as operaes lgicas, como AND e OR. Esta seo constri uma ALU a partir de quatro blocos de montagem do hardware (portas AND e OR, inversores e multiplexadores) e ilustra como funciona a lgica combinacional. Na prxima seo, veremos como a adio pode ser agilizada por meio de projetos mais inteligentes. Como a word do MIP tem 32 bits de largura, precisamos de uma ALU de 32 bits. Vamos supor que iremos conectar 32 ALUs de 1 bit para criar a ALU desejada. Portanto, vamos comear constru- Stan Kelly-Bootle, indo uma ALU de 1 bit. The Devils DP

ALU n. [Arthritic Logic Unit ou (raro) Arithmetic Logic Unit] Um gerador de nmeros aleatrios fornecido por padro com todos os sistemas computacionais.

Dictionary, 1981

Uma ALU de 1 bit


As operaes lgicas so as mais fceis, pois so mapeadas diretamente nos componentes de hardware da Figura B.2.1. A unidade lgica de 1 bit para AND e OR se parece com a Figura B.5.1. O multiplexador direita, ento, seleciona a AND b ou a OR b, dependendo se o valor de Operao 0 ou 1. A linha que controla o multiplexador aparece em destaque para distingui-la das linhas com dados. Observe que renomeamos as linhas de controle e a sada do multiplexador para lhes dar nomes que refletem a funo da ALU. A prxima funo a incluir a adio. Um somador precisa ter duas entradas para os operandos e uma sada de nico bit para a soma. preciso haver uma segunda sada para o carry, chamada CarryOut. Como o CarryOut do somador vizinho precisa ser includo como uma entrada, precisamos de uma terceira entrada. Essa entrada chamada CarryIn. A Figura B.5.2 mostra as entradas e as sadas de um somador de 1 bit. Como sabemos o que a adio precisa fazer, podemos especificar as sadas dessa caixa preta com base em suas entradas, como a Figura B.5.3 demonstra.
Operao a 0 Resultado b FIGURA B. 5.1 1

A unidade lgica de 1 bit para AND e OR.


CarryIn

A + B Soma

CarryOut FIGURA B. 5.2 Um somador de 1 bit. Esse somador chamado de somador completo; ele tambm chamado somador (3,2), pois tem 3 entradas e 2 sadas. Um somador com apenas as entradas a e b chamado somador (2,2) ou meio somador.

B-21

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

Entradas a 0 0 0 0 1 1 1 1 FIGURA B. 5.3 B 0 0 1 1 0 0 1 1 CarryIn 0 1 0 1 0 1 0 1 CarryOut 0 0 0 1 0 1 1 1

Sadas

Soma 0 1 1 0 1 0 0 1

Comentrios 0 + 0 + 0 = 00bin 0 + 0 + 1 = 01bin 0 + 1 + 0 = 01bin 0 + 1 + 1 = 10bin 1 + 0 + 0 = 01bin 1 + 0 + 1 = 10bin 1 + 1 + 0 = 10bin 1 + 1 + 1 = 11bin

Especificao de entrada e sada para um somador de 1 bit.

Podemos expressar as funes de sada CarryOut e Soma como equaes lgicas, e essas equaes, por sua vez, podem ser implementadas com portas lgicas. Vamos realizar um CarryOut. A Figura B.5.4 mostra os valores das entradas quando CarryOut 1. Podemos transformar essa tabela verdade em uma equao lgica. CarryOut = (b . CarryIn) + (a . CarryIn) + (a . b) + (a . b . CarryIn)
Entradas a 0 1 1 1 FIGURA B. 5.4 b 1 0 1 1 CarryIn 1 1 0 1

Valores das entradas quando CarryOut 1.

Se a . b. CarryIn for verdadeiro, ento todos os outros trs termos tambm precisam ser verdadeiros, de modo que podemos omitir esse ltimo termo correspondente quarta linha da tabela. Assim, podemos simplificar a equao para CarryOut = (b . CarryIn) + (a . CarryIn) + (a . b) A Figura B.5.5 mostra que o hardware dentro da caixa preta do somador para CarryOut consiste em trs portas AND e uma porta OR. As trs portas AND correspondem exatamente aos trs termos entre parnteses da frmula anterior para CarryOut, e a porta OR soma os trs termos.

O bit Soma ligado quando exatamente uma entrada 1 ou quando todas as trs entradas so 1. A Soma resulta em uma equao Booleana complexa (lembre-se de que a significa NOT a): Soma = (a . b . CarryIn) + (a . b . CarryIn) + (a . b . CarryIn) + (a . b . CarryIn) O desenho da lgica para o bit Soma na caixa preta do somador fica como um exerccio. A Figura B.5.6 mostra uma ALU e 1 bit derivada da combinao do somador com os componentes anteriores. s vezes, os projetistas tambm querem que a ALU realize mais algumas operaes simples, como gerar 0. O modo mais fcil de somar uma operao expandir o multiplexador controlado pela linha Operao e, para este exemplo, conectar 0 diretamente nova entrada desse multiplexador expandido.

B.5

Construindo uma unidade lgica e aritmtica

B-22

CarryIn

CarryOut FIGURA B. 5.5 Hardware do somador para o sinal CarryOut. O restante do hardware do somador a lgica para a sada de Soma dada na equao da pgina B-30.

Operao CarryIn a 0

Resultado

CarryOut FIGURA B. 5.6

Uma ALU de 1 bit realiza AND, OR e adio (ver Figura B.5.5).

Uma ALU de 32 bits


Agora que completamos a ALU de 1 bit, a ALU completa de 32 bits criada conectando caixas pretas adjacentes. Usando xi para indicar o i-simo bit de x, a Figura B.5.7 mostra uma ALU de 32 bits. Assim como uma nica pedra pode causar ondulaes partido da costa de um lago tranqilo, um nico carry do bit menos significativo (Result0) pode causar ondulaes por todo o somador, levando a uma carry do bit mais significativo (Result31). Logo, o somador criado ligando diretamente os carries de somadores de 1 bit chamado de somador de carry por ondulao. Veremos um modo rpido de conectar os somadores de 1 bit a partir da pgina B-30. A subtrao o mesmo que a adio da verso negativa de um operando, e assim que os somadores realizam a subtrao. Lembre-se de que o atalho para negar um nmero em complemento a dois inverter cada bit (s vezes chamado de complemento a um) e depois somar 1. Para inverter cada bit, simplesmente acrescentamos um multiplexador 2:1 que escolhe entre b e b, como mostra a Figura B.5.8. Suponha que conectemos 32 dessas ALUs de 1 bit, como fizemos na Figura B.5.7. O multiplexador adicionado d a opo de b ou seu valor invertido, dependendo de Binvert, mas essa apenas uma etapa na negao de um nmero em complemento a dois. Observe que o bit menos significativo ainda possui um sinal CarryIn, embora seja desnecessrio para a adio. O que acontece se definir-

B-23

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

Operao CarryIn

a0 b0

CarryIn ALU0 CarryOut

Result0

a1 b1

CarryIn ALU1 CarryOut

Result1

a2 b2

CarryIn ALU2 CarryOut . . . . . . . . .

Result2

a31 b31

CarryIn ALU31

Result31

FIGURA B. 5.7 Uma ALU de 32 bits construda a partir de 32 ALUs de 1 bit. O CarryOut de um bit conectado ao CarryIn do prximo bit mais significativo. Essa organizao chamada de carry por ondulao.

mos esse CarryIn como 1 em vez de 0? O somador, ento, calcular a + b + 1. Selecionando a verso invertida de b, obtemos exatamente o que queremos: a + b + 1 = a + (b + 1) = a + (b) = a b A simplicidade do projeto de hardware de um somador em complemento a dois ajuda a explicar por que a representao em complemento a dois tornou-se um padro universal para a aritmtica computacional com inteiros. Uma ALU no MIPS tambm precisa de uma funo NOR. Em vez de acrescentar uma porta separada para NOR, podemos reutilizar grande parte do hardware j existente na ALU, como fizemos para a subtrao. A idia vem da seguinte tabela verdade sobre NOR: (a + b) = a . b Ou seja, NOT (a OR b) equivalente a NOT a AND NOT b. Esse fato chamado de teorema de DeMorgan e explorado nos exerccios com mais profundidade. Como temos AND e NOT b, s precisamos acrescentar NOT a ALU. A Figura B.5.9 mostra essa mudana.

B.5

Construindo uma unidade lgica e aritmtica

B-24

Binvert

Operao CarryIn

a 0

Resultado

0 1

CarryOut FIGURA B. 5.8 Uma ALU de 1 bit que realiza AND, OR e adio entre a e b ou a e b. Selecionando b (Binvert = 1) e definindo CarryIn como 1 no bit menos significativo da ALU, obtemos a subtrao em complemento a dois de b a partir de a, em vez da adio de b e a.
Ainvert Binvert Operao CarryIn

0 1 0

Resultado

0 1

CarryOut

FIGURA B. 5.9 Uma ALU de 1 bit que realiza AND, OR e adio entre a e b ou a e b. Selecionando a (Ainvert = 1) e b (Binvert = 1), obtemos a NOR b, em vez de a AND b.

Ajustando a ALU de 32 bits ao MIPS


Essas quatro operaes adio, subtrao, AND, OR so encontradas na ALU de quase todo computador, e as operaes da maioria das instrues MIPS podem ser realizadas por essa ALU. Mas o projeto da ALU est incompleto. Uma instruo que ainda precisa de suporte a instruo set on less than (slt). Lembre-se de que a operao produz 1 se rs < rt, ou 0 em caso contrrio. Conseqentemente, slt colocar todos os bits, menos o bit menos significativo, em 0, com o valor do bit menos significativo definido de acordo com a comparao. Para a ALU realizar slt, primeiro precisamos expandir o multiplexador de trs entradas da Figura B.5.8 para acrescentar uma entrada para o resultado de slt. Chamamos essa nova entrada de Less e a usamos apenas para slt. O desenho superior da Figura B.5.10 mostra a nova ALU de 1 bit com o multiplexador expandido. A partir da descrio de slt anterior, temos de conectar 0 entrada Less para os 31 bits superiores da

B-25

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

ALU, pois esses bits sempre sero 0. O que falta considerar como comparar e definir o valor do bit menos significativo para instrues set on less than. O que acontece se subtrairmos b de a? Se a diferena for negativa, ento a < b, pois (a b) < 0 ((a b) + b) < (0 + b) a<b Queremos que o bit menos significativo de uma operao set on less than seja 1 se a < b; ou seja, 1 se a b for negativo e 0 se for positivo. Esse resultado desejado corresponde exatamente aos valores do bit de sinal: 1 significa negativo e 0 significa positivo. Seguindo essa linha de argumento, s precisamos conectar o bit de sinal da sada do somador ao bit menos significativo para obter set on less than. Infelizmente, a sada Result do bit da ALU mais significativo no topo da Figura B.5.10 para a operao slt no a sada do somador; a sada da ALU para a operao slt obviamente o valor de entrada Less.
Ainvert Binvert a Operao CarryIn

0 1

1 Resultado b 0 1 Less 3 + 2

CarryOut Operao Binvert a CarryIn

Ainvert

0 1

1 Resultado b 0 1 Less 3 Set Deteco de overflow Overflow + 2

FIGURA B. 5.10 (Superior) Uma ALU de 1 bit que realiza AND, OR e adio entre a e b ou b, e (inferior) uma ALU de 1 bit para o bit mais significativo. O desenho superior inclui uma entrada direta que est conectada para realizar a operao set on less than (ver Figura B.5.11); o desenho inferior possui uma sada direta do somador para a comparao less than, chamada Set. (Veja, no Exerccio 3.24, como calcular o overflow com menos entradas.)

B.5

Construindo uma unidade lgica e aritmtica

B-26

Assim, precisamos de uma nova ALU de 1 bit, para o bit mais significativo, a qual possui um bit de sada extra: a sada do somador. O desenho inferior da Figura B.5.10 mostra o projeto, com essa nova linha de sada do somador chamada Set, e usada apenas para slt. Como precisamos de uma ALU especial para o bit mais significativo, acrescentamos a lgica de deteco de overflow, pois tambm est associada a esse bit. Infelizmente, o teste de less than um pouco mais complicado do que acabamos de descrever, devido ao overflow, conforme exploramos nos exerccios. A Figura B.5.11 mostra a ALU de 32 bits. Observe que toda vez que quisermos que a ALU subtraia, colocamos CarryIn e Binvert em 1. Para adies ou operaes lgicas, queremos que as duas linhas de controle sejam 0. Portanto, podemos simplificar o controle da ALU combinando CarryIn e Binvert a uma nica linha de controle, chamada Bnegate. Para ajustar ainda mais a ALU ao conjunto de instrues do MIPS, temos de dar suporte a instrues de desvio condicional. Essas instrues desviam se dois registradores forem iguais ou se forem diferentes. O modo mais fcil de testar a igualdade com a ALU subtrair b de a e depois testar se o resultado zero, pois (A B = 0) a = b

Binvert Ainvert CarryIn

Operao

a0 b0

CarryIn ALU0 Less CarryOut

Result0

a1 b1 0

CarryIn ALU1 Less CarryOut

Result1

a2 b2 0

CarryIn ALU2 Less CarryOut . . . . . . . . .

Result2

. . .

. . . . . . a31 b31 0

CarryIn

CarryIn ALU31 Less

Result31 Set Overflow

FIGURA B. 5.11 Uma ALU de 32 bits construda a partir de 31 cpias da ALU de 1 bit na parte superior da Figura B.5.10 e uma ALU de 1 bit na parte inferior dessa figura. As entradas Less so conectadas a 0, exceto para o bit menos significativo, que est conectado sada Set do bit mais significativo. Se a ALU realizar a b e selecionarmos a entrada 3 no multiplexador da Figura B.5.10, ento Result = 0 ... 001 se a < b, e Result = 0 ... 000 caso contrrio.

B-27

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

Assim, se acrescentarmos hardware para testar se o resultado 0, podemos testar a igualdade. O modo mais simples realizar um OR de todas as sadas juntas e depois enviar esse sinal por um inversor: Zero = (Result31 + Result30 + ... + Result2 + Result1 + Result0) A Figura B.5.12 mostra a ALU de 32 bits revisada. Podemos pensar na combinao da linha Ainvert de 1 bit, a linha Binvert de 1 bit, e as linhas de Operao de 2 bits como linhas de controle de 4 bits para a ALU, pedindo que realize soma, subtrao, AND, OR ou set on less than. A Figura B.5.13 mostra as linhas de controle da ALU e a operao ALU correspondente.

Bnegate Ainvert CarryIn ALU0 Less CarryOut

Operao

a0 b0

Result0

a1 b1 0

CarryIn ALU1 Less CarryOut

Result1 . . . Zero

a2 b2 0

CarryIn ALU2 Less CarryOut . . .

Result2

. . . . . . . . . a31 b31 0

. . . CarryIn CarryIn ALU31 Less Result31

. . .

. . .

Set Overflow

FIGURA B. 5.12

A ALU final de 32 bits. Isso acrescenta um detetor de zero Figura B.5.11.

Linhas de controle da ALU 0000 0001 0010 0110 0111 1100

Funo AND OR add subtract set on less than NOR

FIGURA B. 5.13 Os valores das trs linhas de controle ALU Bnegate e Operao e as operaes ALU correspondentes.

B.5

Construindo uma unidade lgica e aritmtica

B-28

Operao da ALU

a Zero ALU Result Overflow b

CarryOut FIGURA B. 5.14 O smbolo normalmente usado para representar uma ALU, como mostra a Figura B.5.12. Esse smbolo tambm usado para representar um somador, de modo que normalmente rotulado com ALU ou Adder (somador).

Finalmente, agora que vimos o que h dentro de uma ALU de 32 bits, usaremos o smbolo universal para uma ALU completa, como mostra a Figura B.5.14.

Definindo a ALU MIPS em Verilog


A Figura B.5.15 mostra como uma ALU combinacional do MIPS poderia ser especificada em Verilog; essa especificao provavelmente seria compilada com uma biblioteca de partes padro, que oferecesse um somador, que poderia ser instanciado. Para completar, mostramos o controle da ALU para o MIPS na Figura B.5.16, que usaremos mais adiante quando montarmos uma verso Verilog do caminho de dados do MIPS no Captulo 5.

module MIPSALU (ALUctl, A, B, ALUOut, Zero); input [3:0] ALUctl; input [31:0] A,B; output reg [31:0] ALUOut; output Zero; assign Zero = (ALUOut==0); // Zero true se ALUOut 0 always @(ALUctl, A, B) begin // reavalia se isso mudar case (ALUctl) 0: ALUOut <= A & B; 1: ALUOut <= A | B; 2: ALUOut <= A + B; 6: ALUOut <= A B; 7: ALUOut <= A < B ? 1 : 0; 12: ALUOut <= ~(A | B); // resultado nor default: ALUOut <= 0; endcase end endmodule
FIGURA B. 5.15

Definio comportamental em Verilog de uma ALU MIPS.

B-29

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

module ALUControl (ALUOp, FuncCode, ALUCtl); input [1:0] ALUOp; input [5:0] FuncCode; output [3:0] reg ALUCtl; always case (FuncCode) 32: ALUOp<=2; // soma 34: ALUOp<=6; // subtrai 36: ALUOP<=0; // and 37: ALUOp<=1; // or 39: ALUOp<=12; // nor 42: ALUOp<=7; // slt default: ALUOp<=15; // no dever acontecer endcase endmodule
FIGURA B. 5.16

O controle ALU do MIPS: um pea simples da lgica de controle combinacional.

A prxima pergunta : com que rapidez essa ALU pode somar dois operandos de 32 bits? Podemos determinar as entradas a e b, mas a entrada CarryIn depende da operao no somador de 1 bit adjacente. Se traarmos todo o caminho pela cadeia de dependncias, conectamos o bit mais significativo ao bit menos significativo, de modo que o bit mais significativo da soma precisa esperar pela avaliao seqencial de todos os 32 somadores de 1 bit. Essa reao em cadeia seqencial muito lenta para ser usada no hardware de tempo crtico. A prxima seo explora como agilizar a adio. Esse assunto no fundamental para a compreenso do restante do apndice e pode ser pulado. Verifique Suponha que voc queira acrescentar a operao NOT (a AND b), chamada NAND. Como a ALU voc mesmo poderia mudar para dar suporte a ela? 1. Nenhuma mudana. Voc pode calcular NAND rapidamente usando a ALU atual, pois (a . b) = (a + b) e j temos NOT a, NOT b, e OR. 2. Voc precisa expandir o multiplexador grande para acrescentar outra entrada e depois acrescentar nova lgica para calcular NAND.

B.6

Adio mais rpida: Carry Lookahead

A chave para agilizar a adio determinar o carry in para os bits mais significativos mais cedo. Existem diversos esquemas para antecipar o carry, de modo que o cenrio de pior caso uma funo do log2 do nmero de bits do somador. Esses sinais antecipatrios so mais rpidos porque passam por menos portas em seqncia, mas so necessrias muito mais portas para antecipar o carry apropriado. Uma chave para entender os esquemas de carry rpido lembrar que, diferente do software, o hardware executa em paralelo sempre que as entradas mudam.

B.6

Adio mais rpida: Carry Lookahead

B-30

Carry rpido usando hardware infinito


Conforme mencionamos anteriormente, qualquer equao pode ser representada em dois nveis de lgica. Como as nicas entradas externas so os dois operandos e o CarryIn para o bit menos significativo do somador, em teoria, poderamos calcular os valores de CarryIn para todos os bits restantes do somador com apenas dois nveis de lgica. Por exemplo, o CarryIn para o bit 2 do somador exatamente o CarryOut do bit 1, de modo que a frmula CarryIn2 = (b1 . CarryIn1) + (a1 . CarryIn1) + (a1 . b1) De modo semelhante, CarryIn1 definido como CarryIn1 = (b0 . CarryIn0) + (a0 . CarryIn0) + (a0 . b0) Usando a abreviao mais curta e mais tradicional de ci para CarryIni, podemos reescrever as frmulas como c2 = (b1 . c1) + (a1 . c1) + (a1 . b1) c1 = (b0 . c0) + (a0 . c0) + (a0 . b0) Substituindo a definio de c1 para a primeira equao, o resultado esta frmula: c2 = (a1 . a0 . b0) + (a1 . a0 . c0) + (a1 . b0 . c0) + (b1 . a0 . b0) + (b1 . a0 . c0) + (b1 . b0 . c0) + (a1 . b1) Voc pode imaginar como a equao se expande medida que chegamos a bits mais significativos do somador; ela cresce rapidamente com o nmero de bits. Essa complexidade refletida no custo do hardware para o carry rpido, tornando esse esquema simples tremendamente dispendioso para somadores largos.

Carry rpido usando o primeiro nvel de abstrao: propagar e gerar


A maior parte dos esquemas de carry rpido limita a complexidade das equaes para simplificar o hardware, enquanto ainda causa melhorias de velocidade substanciais em relao ao carry por ondulao. Um esquema desse tipo um somador carry lookahead. No Captulo 1, dissemos que os sistemas computacionais enfrentam a complexidade usando nveis de abstrao. Um somador carry lookahead conta com nveis de abstrao em sua implementao. Vamos fatorar a equao original como uma primeira etapa: ci+1 = (bi . ci) + (ai . ci) + (ai . bi) = (ai . bi) + (ai + bi) . ci Se tivssemos de reescrever a equao para c2 usando essa frmula, veramos alguns padres repetidos: c2 = (a1 . b1) + (a1 + b1) . ((a0 . b0) + (a0 + b0) . c0 Observe o surgimento repetido de (ai . bi) e (ai + bi) na frmula anterior. Esses dois fatores importantes so tradicionalmente chamados gerar (gi) e propagar (pi): gi = ai . bi pi = ai + bi

B-31

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

Usando-os para definir ci + 1, obtemos ci+1 = gi + pi . ci Para ver de onde os sinais recebem seus nomes, suponha que gi seja 1. Ento ci+1 = gi + pi . ci = 1 + pi . ci = 1 Ou seja, o somador gera um CarryOut (ci+1) independente do valor de CarryIn (ci). Agora, suponha que gi seja 0 e pi seja 1. Ento ci+1 = gi + pi . ci = 0 + 1 . ci = ci Ou seja, o somador propaga CarryIn para um CarryOut. Juntando os dois, CarryIni+1 1 se gi for 1 ou se pi for 1 e CarryIni for 1. Por analogia, imagine uma fileira de domins encostados um no outro. O domin da outra ponta pode ser empurrado para mais longe desde que no existam intervalos entre eles. De modo semelhante, um carry out pode se tornar verdadeiro por uma gerao distante desde que todas as propagaes entre eles sejam verdadeiras. Contando com as definies de propagar e gerar como nosso primeiro nvel de abstrao, podemos expressar o sinal CarryIn de forma mais econmica. Vamos mostr-lo para 4 bits: c1 = g0 + (p0 . c0) c2 = g1 + (p1 . g0) + (p1 . p0 . c0) c3 = g2 + (p2 . g1) + (p2 . p1 . g0) + (p2 . p1 . p0 . c0) c4 = g3 + (p3 . g2) + (p3 . p2 . g1) + (p3 . p2 . p1 . g0)
+ (p3 . p2 . p1 . p0 . c0)

Essas equaes representam apenas o bom senso: CarryIni 1 se algum somador anterior gerar um carry e todos os somadores intermedirios propagarem um carry. A Figura B.6.1 usa um encanamento para tentar explicar o carry lookahead. At mesmo essa forma simplificada leva a grandes equaes e, portanto, uma lgica considervel, mesmo para um somador de 16 bits. Vamos tentar prosseguir para dois nveis de abstrao.

Carry rpido usando o segundo nvel de abstrao


Primeiro, consideramos esse somador de 4 bits com sua lgica de carry lookahead como um nico bloco de montagem. Se os conectarmos no padro de carry por ondulao para formar um somador de 16 bits, a soma ser mais rpida do que a original, com um pouco mais de hardware. Para ir mais rpido, precisaremos do carry lookahead em um nvel mais alto. Para realizar o carry lookahead para somadores de 4 bits, precisamos propagar e gerar sinais nesse nvel mais alto. Aqui, eles so para os quatro blocos somadores de 4 bits: P0 = p3 . p2 . p1 . p0 P1 = p7 . p6 . p5 . p4 P2 = p11 . p10 . p9 . p8 P3 = p15 . p14 . p13 . p12 Ou seja, o sinal de super propagao para a abstrao de 4 bits (Pi) verdadeiro somente se cada um desses bits no grupo propagar um carry.

B.6

Adio mais rpida: Carry Lookahead

B-32

c0

g0 p0 c1 c0

g0 p0 g0 g1 p1 c2 g1 p1 p0

c0

g2 p2

g3 p3 c4 FIGURA B. 6.1 Uma analogia de encanamento para o carry lookahead para 1 bit, 2 bits e 4 bits, usando canos dgua e registros. As chaves so viradas para abrir e fechar os registros. A gua aparece em destaque. A sada do encanamento (ci+1) estar completa se o valor gerado mais prximo (gi) estiver aberto ou se o valor de propagao i (pi) estiver aberto e houver fluxo de gua acima, seja de um gerador anterior, ou propagado com gua por trs dele. O CarryIn (c0) pode resultar em um carry out sem a ajuda de quaisquer geraes, mas com a ajuda de todas as propagaes.

Para o sinal de super gerao (Gi), nos importamos apenas se houver um carry out do bit mais significativo do grupo de 4 bits. Isso obviamente ocorre se a gerao for verdadeira para esse bit mais significativo; ela tambm ocorre se uma gerao anterior for verdadeira e todas as propagaes intermedirias, incluindo aquela do bit mais significativo, tambm forem verdadeiras: G0 = g3+ (p3 . g2)+ (p3 . p2 . g1)+ (p3 . p2 . p1 . g0) G1 = g7 + (p7 . g6) + (p7 . p6 . g5) + (p7 . p6 . p5 . g4) G2 = g11 + (p11 . g10) + (p11 . p10 . g9) + (p11 . p10 . p9 . g8) G3 = g15 + (p15 . g14) + (p15 . p14 . g13) + (p15 . p14 . p13 . g12)

B-33

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

A Figura B.6.2 atualiza nossa analogia de encanamento para mostrar P0 e G0. Ento, as equaes nesse nvel de abstrao mais alto para o carry in para cada grupo de 4 bits do somador de 16 bits (C1, C2, C3, C4 na Figura B.6.3) so muito semelhantes s equaes de carry out para cada bit do somador de 4 bits (c1, c2, c3, c4) na pgina B-31: C1 = G0 + (P0 . c0) C2 = G1 + (P1 . G0) + (P1 . P0 . c0) C3 = G2 + (P2 . G1) + (P2 . P1 . G0) + (P2 . P1 . P0 . c0) C4 = G3 + (P3 . G2) + (P3 . P2 . G1) + (P3 . P2 . P1 . G0)
+ (P3 . P2 . P1 . P0 . c0)

p0

p1 g0 p2

p3 P0 g1 p1

g2 p2

g3 p3 G0 FIGURA B. 6.2 Uma analogia de encanamento para os sinais de carry lookahead de prximo nvel P0 e G0. P0 aberto apenas se todas as quatro propagaes (pi) estiverem abertas, enquanto a gua flui em G0 somente se pelo menos uma gerao (gi) estiver aberta e todas as propagaes de fluxo abaixo, a partir dessa gerao, estiverem abertas.

B.6

Adio mais rpida: Carry Lookahead

B-34

CarryIn

a0 b0 a1 b1 a2 b2 a3 b3

CarryIn

Result03

ALU0 P0 G0 C1

pi gi ci + 1 Unidade de carry lookahead

a4 b4 a5 b5 a6 b6 a7 b7

CarryIn

Result47

ALU1 P1 G1 C2

pi + 1 gi + 1 ci + 2

a8 b8 a9 b9 a10 b10 a11 b11

CarryIn

Result811

ALU2 P2 G2 C3

pi + 2 gi + 2 ci + 3

a12 b12 a13 b13 a14 b14 a15 b15

CarryIn

Result1215

ALU3 P3 G3 C4

pi + 3 gi + 3 ci + 4

CarryOut FIGURA B. 6.3 Quatro ALUs de 4 bits usando carry lookahead para formar um somador de 16 bits. Observe que os carries vm da unidade de carry lookahead, e no das ALUs de 4 bits.

A Figura B.6.3 mostra somadores de 4 bits conectados com tal unidade de carry-lookahead. Os exerccios exploram as diferenas de velocidade entre esses esquemas de carry, diferentes notaes para a propagao e gerao de sinais em mltiplos bits, e o projeto de um somador de 64 bits.

NVEIS DE PROPAGAO E GERAO Determine os valores de gi, pi, Pi e Gi destes dois nmeros de 16 bits:
a: 0001 1010 0011 0011bin b: 1110 0101 1110 1011bin

EXEMPLO

Alm disso, qual o CarryOut15 (C4)?

B-35

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

RESPOSTA

O alinhamento dos bits facilita ver os valores de gerao gi (ai . bi) e propagao pi (ai + bi):
a: b: gi: pi: 0001 1110 0000 1111 1010 0101 0000 1111 0011 1110 0010 1111 0011 1011 0011 1011

onde os bits so numerados de 15 a 0, da esquerda para a direita. Em seguida, as super propagaes (P3, P2, P1, P0) so simplesmente o AND das propagaes de nvel inferior: P3 = 1 . 1 . 1 . 1 = 1 P2 = 1 . 1 . 1 . 1 = 1 P1 = 1 . 1 . 1 . 1 = 1 P0 = 1 . 0 . 1 . 1 = 0 Os super geradores so mais complexos; portanto, use as seguintes equaes: G0 = g3 + (p3 . g2) + (p3 . p2 . g1) + (p3 . p2 . p1 . g0) = 0 + (1 . 0) + (1 . 0 . 1) + (1 . 0 . 1 . 1) = 0 + 0 + 0 + 0 = 0 G1 = g7 + (p7 . g6) + (p7 . p6 . g5) + (p7 . p6 . p5 . g4) = 0 + (1 . 0) + (1 . 1 . 1) + (1 . 1 . 1 . 0) = 0 + 0 + 1 + 0 = 1 G2 = g11 + (p11 . g10) + (p11 . p10 . g9) + (p11 . p10 . p9 . g8) = 0 + (1 . 0) + (1 . 1 . 0) + (1 . 1 . 1 . 0) = 0 + 0 + 0 + 0 = 0 G3 = g15 + (p15 . g14) + (p15 . p14 . g13) + (p15 . p14 . p13 . g12) = 0 + (1 . 0) + (1 . 1 . 0) + (1 . 1 . 1 . 0) = 0 + 0 + 0 + 0 = 0 Finalmente, CarryOut15 C4 = G3 + (P3 . G2) + (P3 . P2 . G1) + (P3 . P2 . P1. G0) + (P3 . P2 . P1 . P0 . c0) = 0 + (1 . 0) + (1 . 1 . 1) + (1 . 1 . 1 . 0) + (1 . 1 . 1 . 0 . 0) =0+0+1+0+0=1 Logo, existe um carry out quando se somam esses dois nmeros de 16 bits.

O motivo pelo qual o carry lookahead pode tornar os carries mais rpidos que toda a lgica comea a avaliao no momento em que o ciclo de clock comea, e o resultado no mudar quando a sada de cada porta deixar de mudar. Tomando um atalho de passar por menos portas para enviar o carry no sinal, a sada das portas deixar de mudar mais cedo, e, por isso, o tempo para o somador pode ser menor. Para apreciar a importncia do carry lookahead, precisamos calcular o desempenho relativo entre ele e os somadores de carry por ondulao.

B.6

Adio mais rpida: Carry Lookahead

B-36

VELOCIDADE DO CARRY POR ONDULAO VERSUS CARRY LOOKAHEAD Um modo simples de modelar o tempo para a lgica considerar que cada porta AND ou OR leva o mesmo tempo para um sinal passar por ela. O tempo estimado simplesmente contando-se o nmero de portas ao longo do caminho por uma parte da lgica. Compare o nmero de atrasos de porta para os caminhos de dois somadores de 16 bits, um usando o carry por ondulao e um usando o carry lookahead em dois nveis. A Figura B.5.5 mostra que o sinal carry out utiliza dois atrasos de porta por bit. Depois, o nmero de atrasos de porta entre um carry in para o bit menos significativo e o carry out do mais significativo 16 2 = 32. Para o carry lookahead, o carry out do bit mais significativo apenas C4, definido no exemplo. So necessrios dois nveis de lgica para especificar C4 em termos de Pi e Gi (o OR de vrios termos AND). Pi especificado em um nvel de lgica (AND) usando pi, e Gi especificado em dois nveis usando pi e gi, de modo que o pior caso para esse prximo nvel de abstrao so dois nveis de lgica. pi e gi so um nvel de lgica cada um, definido em termos de ai e bi. Se assumirmos que um atraso de porta para cada nvel de lgica nessas equaes, o pior caso 2 + 2 + 1 = 5 atrasos de porta. Logo, para o caminho de carry in para carry out, a adio de 16 bits por um somador carry lookahead seis vezes mais rpida, usando essa estimativa muito simples da velocidade do hardware. EXEMPLO

RESPOSTA

Resumo
O carry lookahead oferece um caminho mais rpido do que esperar que os carries ondulem por todos os 32 somadores de 1 bit. Esse caminho mais rpido pavimentado por dois sinais, gerar e propagar. O primeiro cria um carry independente da entrada do carry, e o outro passa um carry adiante. O carry lookahead tambm oferece outro exemplo de como a abstrao importante no projeto de computadores para lidar com a complexidade. Verifique Usando a estimativa simples da velocidade de hardware (que acabamos de ver) com atrasos de porta, qual o desempenho relativo de uma adio de 8 bits com carry por ondulao versus uma adio de voc mesmo 64 bits usando a lgica de carry lookahead? 1. Um somador de 64 bits com carry lookahead trs vezes mais rpido: adies de 8 bits possuem atrasos de 16 portas, e adies de 64 bits possuem atrasos de 7 portas. 2. Elas tm praticamente a mesma velocidade, pois adies de 64 bits precisam de mais nveis de lgica no somador de 16 bits. 3. Adies de 8 bits so mais rpidas do que 64 bits, mesmo com carry lookahead. Detalhamento: agora, consideramos todas menos uma das operaes lgicas e aritmtica para o conjunto de instrues principal do MIPS: a ALU na Figura B.5.14 omite o suporte s instrues de deslocamento. Seria possvel ampliar o multiplexador da ALU para incluir um deslocamento esquerda de 1 bit ou um deslocamento direita de 1 bit. Mas os projetistas de hardware criaram um circuito chamado barrel shifter, que pode deslocar de 1 a 32 bits no em mais tempo do que preciso para somar dois nmeros de 32 bits, de modo que o deslocamento normalmente feito fora da ALU. Detalhamento: a equao lgica para a sada de Sum do somador completo na pgina B-21 pode ser expressa de forma mais simples usando uma porta mais poderosa do que AND e OR. Uma porta OR exclusiva verdadeira se os dois operandos divergirem, ou seja,

x y 1 and x == y 0

B-37

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

Em algumas tecnologias, o OR exclusivo mais eficiente do que dois nveis de portas AND e OR. Usando o smbolo para representar o OR exclusivo, aqui est a nova equao: Sum = a b CarryIn Alm disso, desenhamos a ALU da maneira tradicional, usando portas. Os computadores so projetados hoje em transistores CMOS, que so basicamente chaves. A ALU CMOS e os barrel shifters tiram proveito dessas chaves e podem ter menos multiplexadores do que aparece em nossos projetos, mas os princpios de projeto so semelhantes.

Detalhamento: usar minsculas e maisculas para distinguir a hierarquia de smbolos de gerao e propagao no funciona quando voc tem mais de dois nveis. Uma notao alternativa que funciona gi..j e pi..j para os sinais de gerao e propagao para os bits i a j. Assim, g1..1 a gerao para o bit 1, g4..1 a gerao para os bits de 4 a 1, e g16..1 para os bits de 16 a 1.

B.7
clocking acionado por transio Um esquema de clocking em que todas as mudanas de estado ocorrem em uma transio do clock. metodologia de clocking A tcnica usada para determinar quando os dados so vlidos e estveis em relao ao clock.

Clocks

elementos de estado Um elemento de memria.

Antes de discutirmos sobre elementos de memria e lgica seqencial, til discutir brevemente o tpico de clocks. Esta seo curta introduz o assunto e semelhante discusso encontrada na Seo 5.2. Outros detalhes sobre metodologias de clock e temporizao so apresentados na Seo B.11. Clocks so necessrios na lgica seqencial para decidir quando um elemento que contm estado deve ser atualizado. Um clock simplesmente um sinal de execuo livre com um tempo de ciclo fixo; a freqncia de clock simplesmente o inverso do tempo de ciclo. Como vemos na Figura B.7.1, o tempo de ciclo de clock ou perodo de clock dividido em duas partes: quando o clock alto e quando o clock baixo. Neste texto, usamos apenas o clocking acionado por transio. Isso significa que todas as mudanas de estado ocorrem em uma transio do clock. Usamos uma metodologia acionada por transio porque mais simples de explicar. Dependendo da tecnologia, essa pode ou no ser a melhor escolha para uma metodologia de clocking. Em uma metodologia acionada por transio, a transio de subida ou a transio de descida do clock ativa e faz com que haja mudanas de estado. Como veremos na prxima seo, os elementos de estado em um projeto acionado por transio so implementados de modo que o contedo dos elementos de estado s mudem na transio de clock ativa. A escolha da transio que ser ativa influenciada pela tecnologia de implementao e no afeta os conceitos envolvidos no projeto da lgica. A transio do clock atua como uma amostra do sinal, fazendo com que o valor da entrada de dados para um elemento de estado seja amostrado e armazenado no elemento de estado. O uso de um acionador por transio significa que o processo de amostragem essencialmente instantneo, eliminando problemas que poderiam ocorrer se os sinais fossem amostrados em momentos ligeiramente diferentes.

Transio de descida

Perodo de clock

Transio de subida

FIGURA B. 7.1 Um sinal de clock oscila entre valores alto e baixo. O perodo de clock o tempo para um ciclo completo. Em um projeto acionado por transio, a transio de subida ou descida do clock ativa e faz com que o estado seja alterado.

B.7

Clocks

B-38

A principal restrio em um sistema com clock, tambm chamado de sistema sncrono, que os sinais escritos nos elementos de estado precisam ser vlidos quando ocorre a transio de clock ativa. Um sinal vlido se ele for estvel (ou seja, no muda), e o valor no mudar novamente at as entradas mudarem. Como os circuitos combinacionais no podem ter feedback, se as entradas de uma unidade lgica combinacional no forem alteradas, as sadas por fim se tornaro vlidas. A Figura B.7.2 mostra o relacionamento entre os elementos de estado e os blocos lgicos combinacionais em um projeto lgico sncrono, seqencial. Os elementos de estado, cujas sadas mudam apenas depois da transio do clock, oferecem entradas vlidas ao bloco lgico combinacional. Para garantir que os valores escritos nos elementos de estado na transio de clock ativa sejam vlidos, o clock precisa ter um perodo longo o suficiente para que todos os sinais no bloco lgico combinacional se estabilizem, depois a transio do clock pega esses valores para armazenar nos elementos de estado. Essa restrio define um limite inferior sobre o tamanho do perodo de clock, que precisa ser longo o suficiente para que todas as entradas de elementos de estado sejam vlidas. No restante desse apndice, bem como nos Captulos 5 e 6, normalmente omitimos o sinal de clock, pois estamos supondo que todos os elementos de estado so atualizados na mesma transio de clock. Alguns elementos de estado sero escritos em cada transio de clock, enquanto outros sero escritos apenas sob certas condies (como um registrador sendo atualizado). Nesses casos, teremos um sinal de escrita explcito para esse elemento de estado. O sinal de escrita ainda precisa ser disparado com o clock para que a atualizao ocorra apenas na transio do clock se o sinal de escrita estiver ativo. Uma outra vantagem de uma metodologia acionada por transio que possvel ter um elemento de estado utilizado como entrada e sada para o mesmo bloco lgico combinacional, como vemos na Figura B.7.3. Na prtica, deve-se ter o cuidado de impedir corridas em tais situaes e garantir que o perodo de clock seja longo o suficiente; esse tpico discutido ainda mais na Seo B.11. Agora que discutimos como o clocking utilizado para atualizar elementos de estado, podemos discutir como construir os elementos de estado.

sistema sncrono Um sistema de memria que emprega clocks e onde os sinais de dados so lidos apenas quando o clock indicar que os valores de sinal so estveis.

Elemento de estado 1

Lgica combinacional

Elemento de estado 2

Ciclo de clock FIGURA B. 7.2 As entradas de um bloco lgico combinacional vm de um elemento de estado, e as sadas so escritas em um elemento de estado. A transio do clock determina quando o contedo dos elementos de estado so atualizados.

Elemento de estado

Lgica combinacional

FIGURA B. 7.3 Uma metodologia acionada por transio permite que um elemento de estado seja lido e escrito no mesmo ciclo de clock sem criar uma corrida que pudesse levar a valores indeterminados nos dados. Naturalmente, o ciclo de clock ainda precisa ser grande o suficiente para que os valores de entrada sejam estveis quando ocorrer a transio de clock ativa.

B-39

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

Detalhamento: ocasionalmente, os projetistas acham til ter uma pequena quantidade de elementos de estado que mudam na transio de clock oposta a partir da maioria dos elementos de estado. Isso exige cuidado extremo, pois tal tcnica tem efeitos sobre as entradas e as sadas do elemento de estado. Por que, ento, os banco de registradores projetistas fariam isso? Considere o caso em que a quantidade de lgica combinacional antes e depois de um Um elemento de estado elemento de estado pequena o suficiente, de modo que cada uma poderia operar em meio ciclo de clock, em que consiste em um vez de um ciclo de clock completo, que mais comum. Ento, o elemento de estado pode ser escrito na transiconjunto de registradores que podem o de clock correspondente a meio ciclo de clock, pois as entradas e sadas sero utilizveis aps meio ciclo de clock. Um lugar comum onde essa tcnica usada em bancos de registradores, onde a simples leitura ou ser lidos e escritos fornecendo um nmero escrita do banco de registradores normalmente pode ser feita em metade do ciclo de clock normal. O Captulo 6 de registrador a ser utiliza essa idia para reduzir o overhead da tcnica de pipelining. acessado.

B.8

Elementos de memria: flip-flops, latches e registradores

Nesta seo e na seguinte, discutimos os princpios bsicos por trs dos elementos de memria, comeando com flip-flops e latches, passando para bancos de registradores e finalmente para as memrias. Todos os elementos de memria armazenam estado: a sada de qualquer elemento da memria depende das entradas e do valor armazenado dentro do elemento da memria. Assim, todos os blocos lgicos com um elemento da memria contm estado e so seqenciais. Os tipos mais simples de elementos de memria so sem clock; ou seja, eles no possuem qualquer entrada de clock. Embora s usemos elementos de memria com clock neste texto, um latch sem clock o elemento de memria mais simples, de modo que veremos esse circuito primeiro. A Figura B.8.1 mostra um latch S-R (latch set-reset), construdo a partir de um par de portas NOR (portas OR com sadas invertidas). As sadas Q e Q representam o valor do estado armazenado e seu complemento. Quando nem S nem R esto ativos, as portas NOR cruzadas atuam como inversores e armazenam os valores anteriores de Q e Q. Por exemplo, se a sada, Q, for verdadeira, ento o inversor de baixo produz uma sada falsa (que Q), que se torna a entrada para o inversor de cima, que produz uma sada verdadeira, que Q, e assim por diante. Se S estiver ativa, ento a sada Q estar ativa e Q estar inativa. Quando S e R estiverem inativas, os ltimos valores de Q e Q continuaro a ser armazenados na estrutura cruzada. A ativao de S e R simultaneamente pode levar a uma operao incorreta: dependendo de como S e R so desativadas, o latch pode oscilar ou tornar-se metaestvel (isso descrito com mais detalhes na Seo B.11). Essa estrutura cruzada a base para elementos de memria mais complexos, que nos permitem armazenar sinais de dados. Esses elementos contm portas adicionais, usadas para armazenar valores de sinal e fazem com que o estado seja atualizado apenas em conjunto com um clock. A prxima seo mostra como esses elementos so criados.

R Q

Q S FIGURA B. 8.1 Um par de portas NOR cruzadas pode armazenar um valor interno. O valor armazenado no Q de sada reciclado invertendo-o para obter Q e depois invertendo Q para obter Q. Se R ou Q estiverem ativos, Q ser desativado e vice-versa.

B.8

Elementos de memria: flip-flops, latches e registradores

B-40

Flip-flops e latches
Flip-flops e latches so os elementos de memria mais simples. Em flip-flops e latches, a sada igual ao valor do estado armazenado dentro do elemento. Alm do mais, diferente do latch S-R descrito anteriormente, todos os latches e flip-flops que usaremos deste ponto em diante so com clock, o que significa que eles tm uma entrada de clock e a mudana de estado acionada por esse clock. A diferena entre um flip-flop e um latch o ponto em que o clock faz com que o estado realmente mude. Em um latch com clock, o estado alterado sempre que as entradas apropriadas mudam e o clock est ativo, enquanto, em um flip-flop, o estado trocado somente em uma transio de clock. Como em todo este texto usamos uma metodologia de temporizao acionada por transio, onde o estado atualizado apenas em transies de clock, s precisamos usar flip-flops. Os flip-flops normalmente so criados a partir de latches, de modo que comeamos descrevendo a operao de um latch com clock simples e depois discutimos a operao de um flip-flop construdo a partir desse latch. Para aplicaes computacionais, a funo de flip-flops e latches armazenar um sinal. Um latch D ou flip-flop D armazena o valor de seu sinal de entrada de dados na memria interna. Embora existam muitos outros tipos de latches e flip-flops, o tipo D o nico bloco de montagem bsico de que precisaremos. Um latch D possui duas entradas e duas sadas. As entradas so o valor de dados a ser armazenado (chamado D) e um sinal de clock (chamado C) que indica quando o latch deve ler o valor na entrada D e armazen-lo. As sadas so simplesmente o valor do estado interno (Q) e seu complemento (Q). Quando a entrada de clock C est ativa, o latch considerado aberto, e o valor da sada (Q) torna-se o valor da entrada D. Quando a entrada do clock C est inativa, o latch considerado fechado, e o valor da sada (Q) qualquer valor que tenha sido armazenado pela ltima vez em que o latch foi aberto. A Figura B.8.2 mostra como um latch D pode ser implementado com duas portas adicionais acrescentadas s portas NOR cruzadas. Visto que, quando o latch aberto, o valor de Q muda quando D muda, essa estrutura s vezes chamada de latch transparente. A Figura B.8.3 mostra como esse latch D funciona, supondo que a sada Q seja inicialmente falsa e que D mude primeiro.

flip-flop Um elemento da memria para o qual a sada igual ao valor do estado armazenado dentro do elemento e para o qual o estado interno alterado apenas em uma transio do clock. latch Um elemento da memria em que a sada igual ao valor do estado armazenado dentro do elemento e o estado alterado sempre que as entradas apropriadas mudarem e o clock estiver ativo. flip-flop D Um flip-flop com uma entrada de dados que armazena o valor desse sinal de entrada na memria interna quando a transio do clock ocorre.

C Q

Q D FIGURA B. 8.2 Um latch D implementado com portas NOR. Uma porta NOR atua como um inversor se a outra entrada for 0. Assim, o par cruzado de portas NOR atua para armazenar o valor de estado, a menos que a entrada do clock, C, esteja ativa, quando o valor da entrada D substitui o valor de Q e armazenado. O valor da entrada D precisa ser estvel quando o sinal de clock C mudar de ativo para inativo.

FIGURA B. 8.3 Operao de um latch D, assumindo que a sada est inicialmente inativa. Quando o clock, C, est ativo, o latch aberto e a sada Q imediatamente assume o valor da entrada D.

B-41

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

D D latch C

D D latch C

Q Q

FIGURA B. 8.4 Um flip-flop D acionado na transio de descida. O primeiro latch, chamado de mestre, aberto e acompanha a entrada D quando a entrada de clock, C, ativada. Quando a entrada de clock C cai, o primeiro latch fechado, mas o segundo latch, chamado de escravo, aberto e recebe sua entrada da sada do latch mestre.

FIGURA B. 8.5 Operao de um flip-flop D acionado na transio de descida, assumindo que a sada est inicialmente inativa. Quando a entrada de clock (C) muda de ativa para inativa, a sada Q armazena o valor da entrada D. Compare esse comportamento com o do latch D com clock, mostrado na Figura B.8.3. Em um latch com clock, o valor armazenado e a sada, Q, mudam sempre que C est alto, ao contrrio de somente quando C realiza transies.

Como j dissemos, usamos flip-flops como bloco de montagem bsico, no lugar de latches. Os flip-flops no so transparentes: suas sadas s mudam na transio do clock. Um flip-flop pode ser construdo de modo que seja acionado na subida (positivo) ou descida (negativo) da transio do clock; para nossos projetos, podemos usar qualquer tipo. A Figura B.8.4 mostra como um flip-flop D de transio de descida construdo a partir de um par de latches D. Em um flip-flop D, a sada armazenada quando ocorre a transio do clock. A Figura B.8.5 mostra como opera esse flip-flop. Aqui est uma descrio em Verilog de um mdulo para um flip-flop D na transio de subida, assumindo que C a entrada de clock e D a entrada de dados:
module DFF(clock,D,Q,Qbar); input clock, D; output reg Q; // Q um reg, pois atribudo em um bloco always output Qbar; assign Qbar = ~ Q; // Qbar sempre exatamente o inverso de Q always @(posedge clock) // realiza aes sempre que o clock levanta Q = D; endmodule

tempo de preparao O tempo mnimo que a entrada para um dispositivo de memria precisa ser vlida antes da transio do clock.

Como a entrada D pega na transio do clock, ela precisa ser vlida por um perodo imediatamente antes e depois da transio do clock. O tempo mnimo que a entrada precisa ser vlida antes da transio do clock chamado tempo de preparao; o tempo mnimo durante o qual ela precisa ser vlida aps a transio do clock chamado tempo de suspenso. Assim, as entradas de qualquer tempo de suspenso O flip-flop (ou qualquer coisa construda usando flip-flops) precisam ser vlidas durante uma janela tempo mnimo durante o que comea no tempo de preparao antes da transio do clock e termina no tempo de suspenso qual a entrada precisa aps a transio do clock, como mostra a Figura B.8.6. A Seo B.11 fala sobre as restries de clocser vlida aps a transio do clock. king e temporizao, incluindo o atraso de propagao por um flip-flop, com mais detalhes.

B.8

Elementos de memria: flip-flops, latches e registradores

B-42

Tempo de preparao

Tempo de suspenso

C FIGURA B. 8.6 Requisitos de tempo de preparao e suspenso para um flip-flop D acionado na transio de descida. A entrada precisa ser estvel por um perodo antes da transio do clock, bem como aps a transio do clock. O tempo mnimo que o sinal precisa estar estvel antes da transio de clock chamado de tempo de preparao, enquanto o tempo mnimo que o sinal precisa estar estvel aps o clock chamado de tempo de suspenso. Deixar de atender a esses requisitos mnimos pode resultar em uma situao em que a sada do flip-flop pode nem sequer ser previsvel, conforme descrevemos na Seo B.11. Os tempos de suspenso normalmente so 0 ou muito pequenos e, portanto, no causam preocupao.

Podemos usar um array de flip-flops D para construir um registrador que possa manter um dado de mltiplos bits, como um byte ou uma word. Usamos registradores por todos os nossos caminhos de dados nos Captulos 5 e 6.

Bancos de registradores
Uma estrutura central no nosso caminho de dados um banco de registradores. Consiste em um conjunto de registradores que podem ser lidos e escritos fornecendo um nmero de registrador a ser acessado. Um banco de registradores pode ser implementado com um decodificador para cada porta de leitura ou escrita e um array de registradores construdos a partir de flip-flops D. Como a leitura de um registrador no muda qualquer estado, s precisamos fornecer um nmero de registrador como entrada, e a nica sada ser os dados contidos nesse registrador. Para escrever em um registrador, precisaremos de trs entradas: um nmero de registrador, os dados a escrever e um clock que controla a escrita no registrador. Nos Captulos 5 e 6, usamos um banco de registradores com duas portas de leitura e uma porta de escrita. Ele desenhado como mostra a Figura B.8.7. As portas de leitura podem ser implementadas com um par de multiplexadores, cada um to largo quanto o nmero de bits em cada registrador do banco de registradores. A Figura B.8.8 mostra a implementao de duas portas de leitura de registrador para um banco de registradores de 32 bits.

Registrador de leitura nmero 1

Dados da

leitura 1 Registrador de leitura nmero 2 Banco de registradores Registrador para escrita Dados para escrita Dados da leitura 2

Write

FIGURA B. 8.7 Um banco de registradores com duas portas de leitura e uma porta de escrita possui cinco entradas e duas sadas. A entrada de controle Write aparece em destaque na parte inferior.

B-43

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

Registrador de leitura nmero 1 Registrador 0 Registrador 1 ... Registrador n 2 Registrador n 1 M u x Dados da leitura 1

Registrador de leitura nmero 2

M u x

Dados da leitura 2

FIGURA B. 8.8 A implementao de duas portas de leitura para um banco de registradores com n registradores pode ser feita com um par de multiplexadores n-para-1, cada um com 32 bits de largura. O sinal do nmero do registrador de leitura usado como sinal seletor do multiplexador. A Figura B.8.9 mostra como a porta de escrita implementada.

A implementao da porta de escrita ligeiramente mais complexa, pois s podemos mudar o contedo do registrador designado. Podemos fazer isso usando um decodificador para gerar um sinal que possa ser usado para determinar qual registrador escrever. A Figura B.8.9 mostra como implementar a porta de escrita para um banco de registradores. importante lembrar que o flip-flop s muda de estado na transio do clock. Nos Captulos 5 e 6, conectamos sinais de escrita para o banco de registradores explicitamente e assumimos que o clock mostrado na Figura B.8.9 est anexado implicitamente. O que acontece se o mesmo registrador for lido e escrito durante um ciclo de clock? Como a escrita no banco de registradores ocorre na transio do clock, o registrador ser vlido durante o tempo em que for lido, como vimos anteriormente na Figura B.7.2. O valor retornado ser o valor escrito em um ciclo de clock anterior. Se quisermos que uma leitura retorne o valor atualmente sendo escrito, uma lgica adicional no banco de registradores ou fora dele ser necessria. O Captulo 6 utiliza muito dessa lgica.

Especificando a lgica seqencial em Verilog


Para especificar a lgica seqencial em Verilog, temos de entender como gerar um clock, como descrever quando um valor escrito em um registrador e como especificar o controle seqencial. Vamos comear especificando um clock. Um clock no um objeto predefinido em Verilog; em vez disso, geramos um clock usando a notao #n da Verilog antes de uma instruo; isso causa um atraso de n etapas de tempo de simulao antes da execuo da instruo. Na maioria dos simuladores Verilog, tambm possvel gerar um clock como uma entrada externa, permitindo que o usurio especifique em tempo de simulao o nmero de ciclos de clock para executar uma simulao.

B.8

Elementos de memria: flip-flops, latches e registradores

B-44

Write C Registrador 0 . . . D C Registrador 1 D . . .

0 1 Nmero do registrador Decodificador n-para-2n n 1 n

C Registrador n 2 D C Registrador n 1 Dados para o registrador D

FIGURA B. 8.9

A porta de escrita para um banco de registradores implementada com um decodificador que usado com o sinal de escrita (Write) para gerar a entrada C dos registradores. Todas as trs entradas (o nmero do registrador, os dados e o sinal de escrita) tero restries de tempo de preparao e suspenso que garantem que os dados corretos so escritos no banco de registradores.

O cdigo na Figura B.8.10 implementa um clock simples que alto ou baixo para uma unidade de simulao e depois muda de estado. Usamos a capacidade de atraso e atribuio bloqueante para implementar o clock.

reg clock; // clock um registrador always #1 clock = 1; #1 clock = 0;


FIGURA B. 8.10

Uma especificao de um clock.

Em seguida, precisamos ser capazes de especificar a operao de um registrador acionado por transio. Em Verilog, isso feito usando a lista de sensitividade em um bloco always e especificando como acionador a transio positiva ou negativa de uma varivel binria com a notao posedge ou negedge, respectivamente. Logo, o cdigo Verilog a seguir faz com que o registrador A seja escrito com o valor b na transio positiva do clock:
reg [31:0] A; wire [31:0] b; always @(posedge clock) A <= b;

No decorrer deste captulo e nas sees Verilog dos Captulos 5 e 6, consideraremos um projeto acionado por transio positiva. A Figura B.8.11 mostra uma especificao Verilog de um banco de registradores MIPS que considera duas leituras e uma escrita, com apenas a escrita possuindo clock.

B-45

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

module registerfile (Read1,Read2,WriteReg,WriteData,RegWrite,Data1,Data2,clock); input [5:0] Read1,Read2,WriteReg; // os nmeros dos registradores para leitura e escrita input [31:0] WriteData; // dados para escrever input RegWrite, // O controle de escrita clock; // o clock para acionar a escrita output [31:0] Data1, Data2; // os valores dos registradores lidos reg [31:0] RF [31:0]; // 32 registradores cada um com 32 bits assign Data1 = RF[Read1]; assign Data2 = RF[Read2]; always begin // escreve no registrador o novo valor se Regwrite for alto @(posedge clock) if (RegWrite) RF[WriteReg] <= WriteData; end endmodule
FIGURA B. 8.11 Um banco de registradores MIPS escrito em Verilog comportamental. Esse banco de registradores escreve na transio de subida do clock.

Verifique No cdigo Verilog para o banco de registradores da Figura B.8.11, as portas de sada correspondenvoc mesmo tes aos registradores lidos so atribudas por meio de uma atribuio contnua, mas o registrador sendo escrito atribudo em um bloco always. Qual dos seguintes o motivo? a. No existe um motivo especial. Isso simplesmente foi conveniente. b. Porque Data1 e Data2 so portas de sada e WriteData uma porta de entrada. c. Porque a leitura um evento combinacional, enquanto a escrita um evento seqencial.

B.9
SRAM (Static Random Access Memory) Uma memria na qual os dados so armazenados estaticamente (como nos flip-flops), e no dinamicamente (como na DRAM). SRAMs so mais rpidas do que as DRAMs, mas menos densas e mais caras por bit.

Elementos de memria: SRAMs e DRAMs

Registradores e bancos de registradores oferecem os blocos de montagem bsicos para pequenas memrias, mas quantidades maiores de memria so construdas usando SRAMs (Static Random Access Memories) ou DRAMs (Dynamic Random Access Memories). Primeiro, discutimos sobre SRAMs, que so mais simples, e depois passamos para DRAMs.

SRAMs
SRAMs so circuitos integrados que so arrays de memria com (normalmente) uma nica porta de acesso que pode ser de leitura ou escrita. SRAMs possuem um tempo de acesso fixo a qualquer dado, embora as caractersticas de leitura e escrita sejam diferentes. Um chip de SRAM possui uma configurao especfica em termos do nmero de locais endereveis, bem como a largura de cada local enderevel. Por exemplo, uma SRAM de 4M 8 oferece 4M entradas, cada uma com 8 bits. Assim, ela ter 22 linhas de entrada (pois 4M = 222), uma linha de sada de dados de 8 bits, e uma nica linha de entrada de dados de 8 bits. Assim como as ROMs, o nmero de locais endereveis chamado de altura, com o nmero de bits por unidade chamado de largura. Por diversos motivos tcnicos, as SRAMs mais novas e mais rpidas normalmente esto disponveis em configuraes estreitas: 1 e 4. A Figura B.9.1 mostra os sinais de entrada e sada para uma SRAM de 2M 16.

B.9

Elementos de memria: SRAMs e DRAMs

B-46

Endereo

21

Chip select Output enable Write enable 16 SRAM 2M 16 15 Dout[150]

Din[150]

Uma SRAM de 2M x 16 mostrando as 21 linhas de endereo (2MK = 2 ) e 16 entradas de dados, as trs linhas de controle e as 16 sadas de dados.

FIGURA B. 9.1

21

Para iniciar um acesso de leitura ou escrita, o sinal Chip select precisa ser ativado. Para leituras, tambm temos de ativar o sinal Output enable que controla se o dado selecionado pelo endereo foi levado para os pinos. O Output enable til para conectar vrias memrias a um barramento de sada nico e usar Output enable para determinar qual memria levada ao barramento. O tempo de acesso de leitura da SRAM costuma ser especificado como o espao de tempo entre o Output enable ser verdadeiro e as linhas de endereo estarem vlidas at o momento em que os dados esto nas linhas de sada. Os tempos de acesso de leitura tpicos para SRAMs em 2004 variavam desde 2-4ns para as partes mais rpidas da CMOS, que costumam ser um pouco menores e mais estreitas, at 8-20ns para as partes maiores tpicas, que em 2004 tinham mais de 32 milhes de bits de dados. A demanda por SRAMs de menor potncia para produtos eletrnicos e aparelhos digitais cresceu bastante nos ltimos cinco anos; essas SRAMs possuem potncias de stand-by e acesso muito menores, mas normalmente so de 5-10 vezes mais lentas. Mais recentemente, as SRAMs sncronas semelhantes s DRAMs sncronas, que discutimos na prxima seo tambm tm sido desenvolvidas. Para a escrita, temos de fornecer os dados a serem escrito e o endereo, alm dos prprios sinais que causaro a escrita. Quando Write enable e Chip select so verdadeiros, os dados nas linhas de entrada de dados so escritos na clula especificada pelo endereo. Existem requisitos de tempo de preparao e tempo de suspenso para as linhas de endereo e dados, assim como existiam para flip-flops D e latches. Alm disso, o sinal Write enable no uma transio de clock, mas um pulso com um requisito de largura mnima. O tempo para concluir uma escrita especificado pela combinao entre tempos de preparao, tempos de suspenso e a largura do pulso Write enable. SRAMs grandes no podem ser construdas da mesma maneira como construmos um banco de registradores porque, diferente de um banco de registradores, no qual um multiplexador 32 para 1 poderia ser prtico, o multiplexador de 64K para 1 que seria necessrio para uma SRAM de 64K 1 seria totalmente invivel. Em vez de usar um multiplexador gigante, memrias grandes so implementadas com uma linha de sada compartilhada, chamada linha de bit, que mltiplas clulas de memria no array de memria podem ativar. Para permitir que mltiplas origens possam colocar um sinal em uma nica linha, utilizado um buffer tristate. Um buffer tristate possui duas entradas um sinal de dados e um Output enable e uma nica sada que est em um dos trs estados: ativa, inativa ou alta impedncia. A sada de um buffer tristate igual ao sinal de entrada de dados, ativo ou inativo, se o Output enable estiver ativo; caso contrrio, est em um estado de alta impedncia, permitindo que outro buffer tristate cujo Output enable esteja ativo determine o valor de uma sada compartilhada. A Figura B.9.2 mostra um conjunto de buffers tristate ligados para formar um multiplexador com uma entrada decodificada. fundamental que o Output enable de no mximo um dos buffers tristate esteja ativo; caso contrrio, os buffers tristate podem tentar colocar valores diferentes na linha de sada. Usando buffers tristate nas clulas individuais da SRAM, cada clula que corresponde a uma sada em particular pode compartilhar a mesma linha de sada. O uso de um conjunto de buffers tristate incorporado nos flip-flops que formam as clulas bsicas da SRAM. A Figura B.9.3 mostra como

B-47

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

Select 0 Data 0 Select 1 Data 1 Select 2 Data 2 Select 3 Data 3 FIGURA B. 9.2 In In In In

Enable Out

Enable Out

Enable Out

Sada

Enable Out

Quatro buffers tristate so usados para formar um multiplexador. Somente uma das quatro entradas Select pode estar ativa. Um buffer tristate com um Output enable inativo possui uma sada de alta impedncia que permite um buffer tristate, cujo Output enable est ativo, ativar a linha de sada compartilhada.

uma SRAM pequena de 4 2 poderia ser criada, usando latches D com uma entrada chamada Enable, que controla a sada tristate. O projeto na Figura B.9.3 elimina a necessidade de um multiplexador enorme; porm, ainda exige um decodificador muito grande e um nmero correspondentemente grande de linhas de words. Por exemplo, em uma SRAM 4M 8, precisaramos de um decodificador de 2 para 4M e 4M linhas de words (que so as linhas usadas para habilitar os flip-flops individuais)! Para contornar esse problema, as memrias grandes so organizadas como arrays retangulares e utilizam um processo de decodificao em duas etapas. A Figura B.9.4 mostra como uma SRAM de 4M 8 poderia ser organizada internamente usando uma decodificao em duas etapas. Conforme veremos, o processo de decodificao em dois nveis muito importante para entender a operao das DRAMs. Recentemente, vimos o desenvolvimento de SRAMs sncronas (SSRAMs) e DRAMs sncronas (SDRAMs). A principal capacidade oferecida pelas RAMs sncronas a capacidade de transferir uma rajada de dados a partir de uma srie de endereos seqenciais dentro de um array ou linha. A rajada definida por um endereo inicial, fornecido no padro normal, e um tamanho de rajada. A vantagem de velocidade das RAMs sncronas vem da capacidade de transferir os bits na rajada sem ter de especificar bits de endereo adicionais. Em vez disso, um clock usado para transferir os bits sucessivos na rajada. A eliminao da necessidade de especificar o endereo para as transferncias dentro da rajada melhora bastante a taxa para transferir o bloco de dados. Devido a essa capacidade, as SRAMs e DRAMs sncronas esto rapidamente se tornando as RAMs preferidas para a criao de sistemas de memria nos computadores. Discutimos o uso de DRAMs sncronas em um sistema de memria com mais detalhes na prxima seo e no Captulo 7.

DRAMs
Em uma RAM esttica (SRAM), o valor armazenado em uma clula mantido em um par de portas inversoras, e desde que haja energia sendo aplicada, o valor pode ser mantido indefinidamente. Em uma RAM dinmica (DRAM), o valor mantido em uma clula armazenado como uma carga em um capacitor. Um nico transistor utilizado para acessar essa carga armazenada, ou para ler o valor ou para escrever sobre a carga armazenada l. Como as DRAMs utilizam apenas um nico transistor

B.9

Elementos de memria: SRAMs e DRAMs

B-48

Din[1]

Din[1]

D C Write enable 0

D latch Q

D C

D latch Q

Enable

Enable

Decodificador 2 para 4

D C

D latch Q

D C

D latch Q

Enable 1

Enable

D Endereo C

D latch Q

D C

D latch Q

Enable 2

Enable

D C

D latch Q

D C

D latch Q

Enable 3

Enable

Dout[1]

Dout[0]

FIGURA B. 9.3 A estrutura bsica de uma SRAM 4 2 consiste em um decodificador que seleciona qual par de clulas ativar. As clulas ativadas utilizam uma sada tristate conectada s linhas de bit verticais que fornecem os dados requisitados. O endereo que seleciona a clula enviado em um de um conjunto de linhas de endereo horizontais, chamadas linhas de words. Para simplificar, os sinais Output enable e Chip select foram omitidos, mas facilmente poderiam ser includos com algumas portas AND.

por bit de armazenamento, eles so muito mais densos e mais baratos por bit. Em comparao, as SRAMs exigem quatro a seis transistores por bit. Nas DRAMs, a carga armazenada em um capacitor, de modo que no pode ser mantida indefinidamente e precisa sofrer refresh periodicamente. por isso que essa estrutura de memria chamada de dinmica, ao contrrio do armazenamento esttico em uma clula de SRAM. Para renovar a clula, lemos seu contedo e o escrevemos de volta. A carga pode ser mantida por vrios milissegundos, o que poderia corresponder a algo perto de um milho de ciclos de clock. Hoje, controladores de memria de nico chip normalmente tratam da funo de refresh de modo independente do processador. Se cada bit tivesse de ser lido da DRAM e depois escrito de volta individualmente, com as DRAMs grandes contendo vrios megabytes, estaramos sempre realizando re-

B-49

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

Endereo [2110]

Decodificador 12 para 4096

4K 1024 SRAM 4096

4K 1024 SRAM

4K 1024 SRAM

4K 1024 SRAM

4K 1024 SRAM

4K 1024 SRAM

4K 1024 SRAM

4K 1024 SRAM

Endereo [90]

1024

Mux

Mux

Mux

Mux

Mux

Mux

Mux

Mux

Dout7

Dout6

Dout5

Dout4

Dout3

Dout2

Dout1

Dout0

FIGURA B. 9.4 Organizao tpica de uma SRAM 4M 8 como um array de arrays 4K 1024. O primeiro decodificador gera os endereos para oito arrays 4K 1.024; depois, um conjunto de multiplexadores utilizado para selecionar 1 bit de cada array de 1.024 bits de largura. Esse um projeto muito mais fcil do que um decodificador de nico nvel, que precisaria de um decodificador enorme ou de um multiplexador gigantesco. Na prtica, uma SRAM moderna desse tamanho provavelmente usaria um nmero ainda maior de blocos, cada um deles um pouco menor.

fresh na DRAM, sem deixar tempo para acess-la. Felizmente, as DRAMs tambm usam uma estrutura de decodificao de dois nveis, e isso nos permite realizar refresh em uma linha inteira (que compartilha uma linha de words) com um ciclo de leitura seguido por um ciclo de escrita. Em geral, as operaes de refresh consomem 1% a 2% dos ciclos ativos da DRAM, deixando os 98% a 99% restantes dos ciclos disponveis para leitura e escrita de dados. Detalhamento: como uma DRAM l e escreve o sinal armazenado em uma clula? O transistor dentro da clula uma chave, chamada transistor de passagem, que permite que o valor armazenado no capacitor seja acessado para leitura ou escrita. A Figura B.9.5 mostra como a clula de nico transistor. O transistor de passagem atua como uma chave: quando o sinal na linha de words est ativo, a chave fechada, conectando o capacitor linha de bits. Se a operao for de escrita, ento o valor a ser escrito colocado na linha de bits. Se o valor for 1, o capacitor ser carregado. Se o valor for 0, ento o capacitor ser descarregado. A leitura um pouco mais complexa, pois a DRAM precisa detectar uma carga muito pequena armazenada no capacitor. Antes de ativar a linha de words para uma leitura, a linha de bits carregada com uma voltagem que a metade entre a voltagem baixa e alta. Depois, ativando a linha de words, a carga no capacitor lida na linha de bits. Isso faz com que a linha de bits mude ligeiramente para a direo alta ou baixa, e essa mudana detectada com um amplificador de sensibilidade, que pode detectar pequenas mudanas na voltagem.

As DRAMs utilizam um decodificador de dois nveis consistindo em um acesso de linha seguido por um acesso de coluna, como mostra a Figura B.9.6. O acesso de linha escolhe uma dentre diversas linhas e ativa a linha de words correspondente. O contedo de todas as colunas na linha ativa armazenado em um conjunto de latches. O acesso coluna, ento, seleciona os dados dos latches de coluna. Para economizar pinos e reduzir o custo do pacote, as mesmas linhas de endereo so usadas para o endereo de linha e coluna; um par de sinais, chamados RAS (Row Access Strobe) e CAS (Column Access Strobe), utilizado para sinalizar a DRAM que um endereo de linha ou coluna est sendo fornecido. O refresh realizado simplesmente lendo as colunas nos latches de coluna e depois escrevendo os mesmos valores de volta. Assim, uma linha inteira sofre refresh em um ciclo. O esquema de endereamento de dois nveis, combinado com o circuito interno, torna os tempos de acesso tpicos da DRAM muito maiores (por um fator de 5-10) do que os tempos de acesso da SRAM. Em 2004, os

B.9

Elementos de memria: SRAMs e DRAMs

B-50

Linha de words

Transistor de passagem

Capacitor

Linha de bits FIGURA B. 9.5 Uma clula de DRAM com nico transistor contm um capacitor que armazena o contedo da clula e um transistor usado para acessar a clula.

Decodificador de linha 11 para 2048

Array 2048 2048

Endereo [100] Latches de coluna

Mux

Dout FIGURA B. 9.6 Uma DRAM de 4M 1 criada com um array de 2048 2048. O acesso linha usa 11 bits para selecionar uma linha, que ento guardada em 2048 latches de 1 bit. Um multiplexador escolhe o bit de sada a partir desses 2048 latches. Os sinais RAS e CAS controlam se as linhas de endereo so enviadas ao decodificador de linhas ou multiplexador de colunas.

tempos de acesso da DRAM tpicos variavam de 45 a 65ns; DRAMs de 256Mbits esto em plena produo, e as primeiras amostras ao cliente das DRAMs de 1GB estavam disponveis no primeiro trimestre de 2004. Um custo muito menor por bit torna a DRAM a melhor escolha para a memria principal, enquanto o tempo de acesso mais rpido torna a SRAM a melhor escolha para as caches. Voc poderia observar que uma DRAM de 64M 4 na realidade acessa 8Kbits em cada acesso de linha e depois joga fora tudo menos 4 deles durante um acesso de coluna. Os projetistas da DRAM utilizaram uma estrutura interna da DRAM como um meio de oferecer maior largura de banda a partir de uma DRAM. Isso feito permitindo que o endereo de coluna mude sem mudar o endereo de linha, resultando em um acesso a outros bits nos latches de coluna. Para tornar esse processo mais rpido e mais preciso, as entradas de endereo utilizam clocks, levando forma dominante de DRAM em uso atualmente: DRAM ou SDRAM sncrona. Desde 1999, mais ou menos, as SDRAMs so o chip de memria preferido da maioria dos sistemas de memria principal com cache. As SDRAMs oferecem acesso rpido a uma srie de bits dentro de uma linha, transferindo seqencialmente todos os bits em uma rajada sob o controle de um sinal de clock. Em 2004, as DDRRAMs (Double Data Rate RAMs), chamadas double data rate porque transferem dados nas transies de subida e descida de um clock fornecido externamente, eram a

B-51

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

forma mais utilizada das SDRAMs. Conforme discutimos no Captulo 7, essas transferncias de alta velocidade podem ser usadas para aumentar a largura de banda disponvel a partir da memria principal para corresponder s necessidades do processador e das caches.

Correo de erros
Devido ao potencial para adulterao de dados em memrias grandes, a maioria dos sistemas computacionais utiliza algum tipo de cdigo de verificao de erro para detectar a possvel adulterao de dados. Um cdigo simples bastante utilizado o cdigo de paridade. Em um cdigo de paridade, o nmero de 1s em uma word contado; a word tem paridade mpar se o nmero de 1s for mpar; caso contrrio, a paridade par. Quando uma word escrita na memria, o bit de paridade tambm escrito (1 para mpar, 0 para par). Depois, quando a word lida, o bit de paridade lido e verificado. Se a paridade da word da memria e o bit de paridade armazenado no combinarem, ento houve um erro. Um esquema de paridade de 1 bit pode detectar no mximo 1 bit de erro em um item de dados; se houve 2 bits de erro, ento um esquema de paridade de 1 bit no detectar qualquer erro, pois a paridade no combinar os dados com dois erros. (Na realidade, um esquema de paridade de 1 bit pode detectar qualquer nmero mpar de erros; porm, a probabilidade de ter trs erros muito menor do que a probabilidade de ter dois; portanto, na prtica, um cdigo de paridade de 1 bit limitado a decdigo de deteco de tectar um nico bit de erro.) Naturalmente, um cdigo de paridade no pode dizer qual bit em um erro Um cdigo que item de dados est errado. permite a deteco de Um esquema de paridade de 1 bit um cdigo de deteco de erro; h tambm cdigos de correum erro nos dados, mas o de erro (ECC) que detectaro e permitiro a correo de um erro. Para grandes memrias princino o local exato, e portanto nem a correo pais, muitos sistemas utilizam um cdigo que permite a deteco de at 2 bits de erro e a correo de do erro. um nico bit de erro. Esses cdigos funcionam usando mais bits para codificar os dados; por exemplo, os cdigos tpicos utilizados para as memrias principais exigem 7 ou 8 bits para cada 128 bits de dados. Detalhamento: um cdigo de paridade de 1 bit um cdigo de distncia 2, o que significa que, se olharmos para os dados mais o bit de paridade, nenhuma mudana de 1 bit suficiente para gerar outra combinao vlida dos dados mais a paridade. Por exemplo, se mudarmos um bit nos dados, a paridade estar errada, e vice-versa. Naturalmente, se mudarmos 2 bits (ou 2 bits de dados ou 1 bit de dados e o bit de paridade), a paridade corresponder aos dados e o erro no poder ser detectado. Logo, existe uma distncia de dois entre as combinaes vlidas da paridade e dos dados. Para detectar mais de um erro ou corrigir um erro, precisamos de um cdigo de distncia 3, que tem a propriedade de que qualquer combinao vlida dos bits no cdigo de correo de erro e os dados ter pelo menos 3 bits diferindo de qualquer outra combinao. Suponha que tenhamos tal cdigo e que tenhamos um erro nos dados. Nesse caso, o cdigo mais os dados ficar 1 bit de distncia de uma combinao vlida e podemos corrigir os dados para essa combinao vlida. Se tivermos dois erros, podemos reconhecer que existe um erro, mas no podemos corrigir os erros. Vejamos um exemplo. Aqui esto as words de dados e um cdigo de correo de erros de distncia 3 para um item de dados de 4 bits.
Dados 0000 0001 0010 0011 0100 0101 0110 0111 Bits de cdigo 000 011 101 110 110 101 011 000 Dados 1000 1001 1010 1011 1100 1101 1110 1111 Bits de cdigo 111 100 010 001 001 010 100 111

B.10

Mquinas de estados finitos

B-52

Para entender como isso funciona, vamos escolher uma word de dados, digamos, 0110, cujo cdigo de correo de erro 011. Aqui esto as quatro possibilidades de erro de 1 bit para esses dados: 1110, 0010, 0100 e 0111. Agora veja o item de dados com o mesmo cdigo (011), que a entrada com o valor 0001. Se o decodificador de correo de erro recebesse uma das quatro words de dados possveis com erro, ele teria de escolher entre corrigir para 0110 ou 0001. Embora essas quatro words com erro tenham apenas 1 bit trocado do padro correto, 0110, elas tm 2 bits diferentes da correo alternativa, 0001. Logo, o mecanismo de correo de erro pode facilmente escolher a correo para 0110, pois um nico erro uma probabilidade muito maior. Para ver se dois erros podem ser detectados, basta observar que todas as combinaes com 2 bits trocados possuem um cdigo diferente. A nica reutilizao do mesmo cdigo com 3 bits diferentes, mas, se corrigirmos um erro de 2 bits, corrigiremos para o valor errado, pois o decodificador ir supor que ocorreu apenas um nico erro. Se quisermos corrigir erros de 1 bit e detectar, mas no corrigir erroneamente os erros de 2 bits, precisamos de um cdigo com distncia 4. Embora distingussemos entre o cdigo e os dados em nossa explicao, na verdade, um cdigo de correo de erro trata a combinao de cdigo e dados como uma nica word em um cdigo maior (7 bits neste exemplo). Assim, ele lida com erros nos bits de cdigo da mesma forma como os erros nos bits de dados. Embora o exemplo anterior exija n 1 bits para n bits de dados, o nmero de bits exigido cresce lentamente, de modo que, para um cdigo de distncia 3, uma word de 64 bits precisa de 7 bits e uma word de 128 bits precisa de 8. Esse tipo de cdigo chamado de cdigo de Hamming, devido a R. Hamming, que descreveu um mtodo para a criao de tal cdigo.

B.10

Mquinas de estados finitos

Como vimos anteriormente, os sistemas lgicos digitais podem ser classificados como combinacionais ou seqenciais. Os sistemas seqenciais contm estado armazenado em elementos da memria internos ao sistema. Seu comportamento depende do conjunto de entradas fornecidas e do contedo funo de prximo estado Uma funo da memria interna, ou do estado do sistema. Assim, um sistema seqencial no pode ser descrito combinacional que, com uma tabela verdade. Em vez disso, um sistema seqencial descrito como uma mquina de esdadas as entradas e o tados finitos (ou, normalmente, apenas mquina de estados). Uma mquina de estados finitos pos- estado atual, determina sui um conjunto de estados e duas funes, chamadas funo de prximo estado e a funo de sao prximo estado de da. O conjunto de estados corresponde a todos os valores possveis do armazenamento interno. uma mquina de estados finitos. Assim, se houver n bits de armazenamento, haver 2n estados. A funo de prximo estado uma funo combinacional que, dadas as entradas e o estado atual, determina o prximo estado do siste-

mquina de estados finitos Uma funo lgica seqencial consistindo em um conjunto de entradas e sadas, uma funo de prximo estado que mapeia o estado atual e as entradas para um novo estado, e uma funo de sada que mapeia o estado atual e possivelmente as entradas para um conjunto de sadas ativas.

Prximo estado Estado atual Funo de prximo estado

Clock Entradas

Funo de sada

Sadas

FIGURA B. 10.1 Uma mquina de estados consiste em armazenamento interno que contm o estado e duas funes combinacionais: a funo de prximo estado e a funo de sada. Normalmente, a funo de sada restrita a usar apenas o estado atual como sua entrada; isso no muda a capacidade de uma mquina seqencial, mas afeta seu funcionamento interno.

B-53

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

ma. A funo de sada produz um conjunto de sadas a partir do estado atual e suas entradas. A Figura B.10.1 mostra isso em forma de diagrama. As mquinas de estados que discutimos aqui e nos Captulos 5 e 6 so sncronas. Isso significa que o estado muda junto com o ciclo de clock, e um novo estado calculado uma vez a cada clock. Assim, os elementos de estado so atualizados apenas na transio do clock. Usamos essa metodologia nesta seo e nos Captulos 5 e 6, e em geral no mostramos o clock explicitamente. Usamos mquinas de estados nos Captulos 5 e 6 para controlar a execuo do processador e as aes do caminho de dados. Para ilustrar como uma mquina de estados finitos opera e projetada, vejamos um exemplo simples e clssico: controlar um sinal de trnsito. (Os Captulos 5 e 6 contm exemplos mais detalhados do uso de mquinas de estados finitos para controlar a execuo do processador.) Quando uma mquina de estados finitos usada como controlador, a funo de sada normalmente restrita a depender apenas do estado atual. Essa mquina de estados finitos chamada de mquina de Moore. Esse o tipo de mquina de estados finitos usado em todo este livro. Se a funo de sada puder depender do estado atual e da entrada atual, a mquina chamada de mquina de Mealy. Essas duas mquinas so equivalentes em suas capacidades, e uma pode ser transformada na outra mecanicamente. A vantagem bsica de uma mquina de Moore que ela pode ser mais rpida, enquanto uma mquina de Mealy pode ser menor, pois pode precisar de menos estados do que uma mquina de Moore. No Captulo 5, discutimos as diferenas com mais detalhes e mostramos uma verso Verilog do controle de estados finitos usando uma mquina de Mealy. Nosso exemplo trata do controle de um sinal de trnsito em um cruzamento de uma rua norte-sul e uma rua leste-oeste. Para simplificar, vamos considerar apenas os sinais verde e vermelho; a incluso de um sinal amarelo fica como um exerccio. Queremos que os sinais alternem por no mais do que 30 segundos em cada direo, de modo que usaremos um clock de 0,033Hz para que a mquina alterne entre os estados com um tempo no superior a 30 segundos. Existem dois sinais de sada:
n n

NSlite: quando esse sinal est ativo, a luz na rua norte-sul est verde; quando esse sinal est inativo, a luz na rua norte-sul est vermelha. EWlite: quando esse sinal est ativo, a luz na rua leste-oeste est verde; quando esse sinal est inativo, a luz na rua leste-oeste est vermelha.

Alm disso, existem duas entradas: NScar e EWcar.


n n

NScar: indica que um carro est sobre o detector colocado na rua, na frente do sinal de trnsito da rua norte-sul (indo para o norte ou para o sul). EWcar: indica que um carro est sobre o detector colocado na rua, na frente do sinal de trnsito da rua leste-oeste (indo para o leste ou para o oeste).

O sinal de trnsito dever mudar de uma direo para a outra somente se um carro estiver esperando para seguir na outra direo; caso contrrio, o sinal dever continuar a mostrar verde na mesma direo do ltimo carro que cruzou a interseo. Para implementar esse sinal de trnsito simples, precisamos de dois estados:
n n

NSgreen: o sinal de trnsito verde na direo norte-sul. EWgreen: o sinal de trnsito verde na direo leste-oeste.

Tambm precisamos criar a funo de prximo estado, que pode ser especificada com uma tabela:

B.10

Mquinas de estados finitos

B-54

Entradas Estado atual Nsgreen Nsgreen Nsgreen Nsgreen Ewgreen Ewgreen Ewgreen Ewgreen NScar 0 0 1 1 0 0 1 1 EWcar 0 1 0 1 0 1 0 1 Estado seguinte NSgreen EWgreen NSgreen EWgreen EWgreen EWgreen NSgreen NSgreen

Observe que no especificamos no algoritmo o que acontece quando um carro se aproxima vindo das duas direes. Nesse caso, a funo do estado seguinte que apresentamos muda o estado para garantir que um fluxo constante de carros de uma direo no possa bloquear um carro na outra direo. A mquina de estados finitos concluda com a especificao da funo de sada:
Sadas Estado atual NSlite EWlite

NSgreen EWgreen

1 0

0 1

Antes de examinarmos como implementar essa mquina de estados finitos, vejamos uma representao grfica, muito utilizada para mquinas de estados finitos. Nessa representao, os ns so usados para indicar estados. Dentro do n, colocamos uma lista das sadas ativadas para esse estado. Os arcos direcionados so usados para mostrar a funo de prximo estado, com os rtulos nos arcos especificando a condio de entrada como funes lgicas. A Figura B.10.2 mostra a representao grfica para essa mquina de estados finitos. Uma mquina de estados finitos pode ser implementada com um registrador para manter o estado atual e um bloco de lgica combinacional que calcula a funo de prximo estado e a funo de sada. A Figura B.10.3 mostra uma mquina de estados finitos com 4 bits de estado e, portanto, at 16 estados. Para implementar a mquina de estados finitos dessa maneira, primeiro temos de atribuir nmeros de estado aos estados. Esse processo chamado de atribuio de estado. Por exemplo, poderamos atribuir NSgreen ao estado 0 e WEgreen ao estado 1. O registrador de estado teria um nico bit. A funo de prximo estado seria dada como PrximoEstado = (EstadoAtual . EWcar) + (EstadoAtual . NScar)
Ewcar

NSgreen NScar NSlite EWlite

EWgreen

Ewcar

Nscar

FIGURA B. 10.2 A representao grfica do controle de sinal de trnsito de dois estados. Simplificamos as funes lgicas nas transies de estado. Por exemplo, a transio de NSgreen para EWgreen na tabela de prximo estado (NScar . EWcar) + (NScar . EWcar), que equivalente a EWcar.

B-55

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

Entradas Lgica combinacional

Prximo estado

Registrador de estado

Sadas

FIGURA B. 10.3

Uma mquina de estados finitos implementada com um registrador de estado que mantm o estado atual e um bloco lgico combinacional para calcular as funes de prximo estado e de sada. As duas ltimas funes normalmente so separadas e implementadas com dois blocos de lgica separados, o que pode exigir menos portas.

onde EstadoAtual o contedo do registrador de estado (0 ou 1) e EstadoSeguinte a sada da funo de prximo estado, que ser escrita no registrador de estado ao final do ciclo de clock. A funo de sada tambm simples: NSlite = EstadoAtual EWlite = EstadoAtual O bloco lgico combinacional normalmente implementado por meio de lgica estruturada, como PLA. Uma PLA pode ser construda automaticamente a partir das tabelas de funo de prximo estado e sada. Na verdade, existem programas de CAD (Computer-Aided Design) que transformam uma representao grfica ou textual de uma mquina de estados finitos e produzem uma implementao otimizada. Nos Captulos 5 e 6, as mquinas de estados finitos foram usadas para controlar a execuo do processador. O Apndice C discute a implementao detalhada desses controladores com PLAs e ROMs. Para mostrar como poderamos escrever o controle em Verilog, a Figura B.10.4 mostra uma verso Verilog projetada para a sntese. Observe que, para essa funo de controle simples, uma mquina de Mealy no til, mas esse estilo de especificao utilizado no Captulo 5 para implementar uma funo de controle que uma mquina de Mealy e possui menos estados do que o controlador da mquina de Moore. Verifique Qual o menor nmero de estados em uma mquina de Moore para os quais uma mquina de Mealy voc mesmo poderia ter menos estados? a. Dois, pois poderia haver uma mquina de Mealy de um estado que poderia fazer a mesma coisa. b. Trs, pois poderia ser uma mquina de Moore simples, que fosse para um dentre dois estados diferentes e sempre retornasse para o estado original depois disso. Para uma mquina to simples, uma mquina de Mealy de dois estados possvel. c. Voc precisa de pelo menos quatro estados para explorar as vantagens de uma mquina de Mealy em relao a uma mquina de Moore.

B.11

Metodologias de temporizao

B-56

module TrafficLite (EWCar,NSCar,EWLite,NSLite,clock); input EWCar, NSCar,clock; output EWLite,NSLite; reg state; initial state=0; // define estado inicial // Duas atribuies seguintes definem sada, com base apenas no estado variable assign NSLite = ~ state; // NSLite ativo se estado = 0; assign EWLite = state; // EWLite ativo se estado = 1 always @(posedge clock) // todas atualizaes de estado em uma transio de clock positiva case (state) 0: state = EWCar; // muda de estado somente se EWCar 1: state = NSCar; // muda de estado somente se NSCar endcase endmodule
FIGURA B. 10.4

Uma verso Verilog do controlador de sinal de trnsito.

B.11

Metodologias de temporizao

No decorrer deste apndice e no restante do texto, usamos uma metodologia de temporizao acionada por transio. Essa metodologia de temporizao tem a vantagem de ser mais simples de explicar e entender do que uma metodologia acionada por nvel. Nesta seo, explicamos essa metodologia de temporizao com um pouco mais de detalhe e tambm apresentamos o clocking sensvel ao nvel. Conclumos esta seo discutindo rapidamente a questo dos sinais assncronos e sincronizadores, um problema importante para os projetistas digitais. A finalidade desta seo apresentar os principais conceitos da metodologia de clocking. A seo faz algumas suposies importantes para simplificar; se voc estiver interessado em entender a metodologia de temporizao com mais detalhes, consulte uma das referncias listadas ao final deste apndice. Usamos a metodologia de temporizao acionada por transio porque ela mais simples de explicar e tem menos regras exigidas para exatido. Em particular, se consideramos que todos os clocks chegam ao mesmo tempo, temos garantias de que um sistema com registradores acionados por transio entre os blocos de lgica combinacional pode operar corretamente, sem condies de corrida, se tornarmos o clock longo o suficiente. Uma condio de corrida ocorre quando o contedo de um elemento de estado depende da velocidade relativa de elementos lgicos diferentes. Em um projeto acionado por transio, o ciclo de clock precisa ser grande o suficiente para acomodar o caminho de um flip-flop, passando pela lgica combinacional, at chegar a outro flip-flop, onde precisa satisfazer ao requisito do tempo de preparao. A Figura B.11.1 mostra esse requisito para um sistema que usa flip-flops acionados por transio de subida. Em tal sistema, o perodo de clock (ou tempo de ciclo) precisa ser pelo menos to grande quanto tprop + tcombinacional + tpreparao para os valores de pior caso desses trs atrasos, que so definidos da seguinte maneira:

B-57

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

D Flip-flop C tprop

Q Bloco lgico combinacional

D Flip-flop C tcombinacional tpreparao

No projeto acionado por transio, o clock precisa ser grande o suficiente para permitir que os sinais sejam vlidos para o tempo de preparao exigido antes da prxima transio de clock. O tempo para uma entrada de flip-flop se propagar at as sadas do flip-flop tprop; o sinal leva ento tcombinacional para atravessar a lgica combinacional e precisa ser vlido por tpreparao antes da prxima transio de clock.

FIGURA B. 11.1

n tprop o tempo para um sinal se propagar por um flip-flop; s vezes, ele tambm chamado de

clock-para-Q.
n tcombinacional o maior atraso para qualquer lgica combinacional (que, por definio, cercada

por dois flip-flops).


n tpreparao o tempo antes da transio do clock de subida que a entrada para um flip-flop precisa

ser vlida. Fazemos uma suposio para simplificar: os requisitos do tempo de suspenso so satisfeitos, o que quase nunca um problema com a lgica moderna. inclinao do clock A Uma complicao adicional que precisa ser considerada nos projetos acionados por transio a diferena em tempo inclinao do clock. Inclinao do clock a diferena em tempo absoluto entre os instantes em que absoluto entre os tempos em que dois dois elementos de estado vem uma transio de clock. A inclinao do clock aumenta porque o sielementos de estado nal de clock normalmente usar dois caminhos diferentes, com atrasos um pouco diferentes, para alvem uma transio de canar dois elementos de estado diferentes. Se a inclinao do clock for grande o suficiente, pode ser clock. possvel que um elemento de estado mude e faa com que a entrada para outro flip-flop mude antes que a transio do clock seja vista pelo segundo flip-flop. A Figura B.11.2 ilustra esse problema, ignorando o tempo de preparao e o atraso de propagao do flip-flop. Para evitar operao incorreta, o perodo de clock aumentado para permitir a inclinao mxima do clock. Assim, o perodo do clock precisa ser maior do que tprop + tcombinacional + tpreparao + tinclinao Com essa restrio sobre o perodo de clock, os dois clocks tambm podem chegar na ordem contrria, com o segundo clock chegando tinclinao mais cedo, e o circuito funcionar corretamente. Os projetistas reduzem os problemas com inclinao do clock roteando o sinal do clock para minimizar a diferena nos tempos de chegada. Alm disso, projetistas inteligentes tambm oferecem alguma margem, tornando o clock um pouco maior do que o mnimo; isso permite a variao nos componentes e tambm na fonte de alimentao. Como a inclinao do clock tambm pode afetar os requisitos do tempo de suspenso, importante minimizar o tamanho da inclinao do clock. Os projetos acionados por transio possuem duas desvantagens: eles exigem uma lgica extra e s vezes podem ser mais lentos. Olhar apenas para o flip-flop D versus o latch sensvel no nvel que usamos para construir o flip-flop mostra que o projeto acionado por transio requer mais lgica. Uma alternativa usar o clocking sensvel ao nvel. Como as mudanas de estado em uma metodologia sensvel ao nvel no so instantneas, um esquema sensvel ao nvel ligeiramente mais complexo e exige cuidado adicional para fazer com que opere corretamente.

clocking sensvel ao nvel Uma metodologia de temporizao em que as mudanas de estado ocorrem em nveis de clock altos ou baixos, mas no so instantneas como so em projetos acionados por transio.

B.11

Metodologias de temporizao

B-58

D Flip-flop Clock chega no tempo t C

Q Bloco lgico combinacional com tempo de atraso D Clock chega aps t + D

D Flip-flop C

FIGURA B. 11.2 Ilustrao de como a inclinao do clock pode causar uma condio de corrida, levando operao incorreta. Devido diferena entre quando os dois flip-flops vem o clock, o sinal armazenado no primeiro flip-flop pode se adiantar e mudar a entrada para o segundo flip-flop antes que o clock chegue no segundo flip-flop.

F1 F2

Perodos no superpostos FIGURA B. 11.3 Um esquema de clocking de duas fases mostrando o ciclo de cada clock e os perodos no-superpostos.

Temporizao sensvel ao nvel


Em uma metodologia de temporizao sensvel ao nvel, as mudanas de estado ocorrem nos nveis alto ou baixo, mas no so instantneas, como acontece em uma metodologia acionada por transio. Devido mudana no instantnea no estado, condies de corrida podem ocorrer com facilidade. Para garantir que um projeto sensvel ao nvel tambm funcione corretamente se o clock for lento o suficiente, os projetistas utilizam o clocking em duas fases. O clocking em duas fases um esquema que utiliza dois sinais de clock no superpostos. Como os dois clocks, normalmente chamados de f1 e f2, no so superpostos, no mximo um dos sinais de clock alto em um momento determinado, como mostra a Figura B.11.3. Podemos usar esses clocks para criar um sistema que contenha latches sensveis ao nvel, mas que seja livre de quaisquer condies de corrida, como eram os projetos acionados por transio. Um modo simples de projetar tal sistema alternar o uso de latches abertos em f1 com os latches abertos em f2. Como os dois clocks no esto ativos ao mesmo tempo, uma condio de corrida no pode ocorrer. Se a entrada para um bloco combinacional for um clock f1, ento sua sada acionada por um clock f2, e s aberta durante f2, quando o latch de entrada estiver fechado e, portanto, tiver uma sada vlida. A Figura B.11.4 mostra como um sistema com temporizao de duas fases e latches alternados operado. Assim como em um projeto acionado por transio, temos de prestar ateno inclinao do clock, particularmente entre as duas fases do clock. Aumentando o intervalo de no superposio entre as duas fases, podemos reduzir a margem de erro em potencial. Assim, o sistema tem garantias de operar corretamente se cada fase for grande o suficiente e houver no sobreposio grande o suficiente entre as fases.

Entradas assncronas e sincronizadores


Usando um nico clock ou um clock de duas fases, podemos eliminar condies de corrida se os problemas de inclinao de clock forem evitados. Infelizmente, no prtico fazer um sistema inteiro funcionar com um nico clock e ainda reduzir a inclinao do clock. Embora a CPU possa usar um nico clock, os dispositivos de E/S provavelmente tero seu prprio clock. O Captulo 8 descreve como um dispositivo assncrono pode se comunicar com a CPU por uma srie de etapas de handshaking. Para traduzir a entrada assncrona para um sinal sncrono que pode ser usado para mudar o estado de um sistema, precisamos usar um sincronizador, cujas entradas so o sinal assncrono e um clock e cuja sada um sinal sncrono com o clock de entrada.

B-59

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

D Latch 01 C

Q Bloco lgico combinacional 02

D Latch C

Q Bloco lgico combinacional 01

D Latch C

FIGURA B. 11.4 Um esquema de temporizao de duas fases com latches alternados, mostrando como o sistema opera nas duas fases de clock. A sada de um latch estvel na fase oposta, a partir de sua entrada C. Assim, o primeiro bloco de entradas combinacionais possui uma entrada estvel durante f2, e sua sada guardada durante f2. O segundo bloco combinacional (mais direita) opera exatamente na forma oposta, com entradas estveis durante f1. Assim, os atrasos pelos blocos combinacionais determinam o tempo mnimo que os respectivos clocks precisam estar ativos. O tamanho do perodo no superposto determinado pela inclinao de clock mxima e pelo atraso mnimo de qualquer bloco lgico.

Nossa primeira tentativa de criar um sincronizador usa um flip-flop D acionado por transio, cuja entrada D o sinal assncrono, como mostra a Figura B.11.5. Como nos comunicamos com um protocolo de handshaking (conforme visto no Captulo 8), no importa se detectamos o estado ativo do sinal assncrono em um clock ou no seguinte, pois o sinal ser mantido ativo at que seja confirmado. Assim, voc poderia pensar que essa estrutura simples suficiente para examinar o sinal com preciso, o que aconteceria, exceto por um pequeno problema.
Entrada assncrona Clock

D C

Q Flip-flop

Sada sncrona

FIGURA B. 11.5 Um sincronizador construdo a partir de um flip-flop D usado para examinar um sinal assncrono para produzir uma sada que sncrona com o clock. Esse sincronizador no funcionar corretamente!

O problema uma situao chamada metaestabilidade. Suponha que o sinal assncrono esteja intercalando entre alto e baixo quando chega a transio do clock. Certamente, no possvel saber se o sinal ser mantido como alto ou baixo. Poderamos viver com esse problema. Infelizmente, a situao pior: quando o sinal examinado no estiver estvel pelos tempos de preparao e suspenso exigidos, o flip-flop poder entrar em um estado metaestvel. Nesse estado, a sada no ter um valor alto ou baixo legtimo, mas estar na regio indeterminada entre eles. Alm do mais, o flip-flop no tem garantias de sair desse estado em qualquer perodo determinado. Alguns blocos lgicos que examinam a sada do flip-flop podem ver sua sada como 0, enquanto outros podem v-la como 1. Essa situao chamada de falha do sincronizador. Em um sistema puramente sncrono, a falha do sincronizador pode ser evitada garantindo-se que os tempos de preparao e suspenso para um flip-flop ou latch sempre sejam atendidos, mas isso falha do sincronizador impossvel quando a entrada assncrona. Em vez disso, a nica soluo possvel esperar por um Uma situao em que um tempo suficiente antes de examinar a sada do flip-flop para garantir que sua sada seja estvel, e que flip-flop entra em um tenha sado do estado metaestvel, se tiver entrado nele. Qual o tempo suficiente? Bem, a probabiestado metaestvel e lidade de que o flip-flop permanea no estado metaestvel diminui exponencialmente, de modo que, onde alguns blocos lgicos lendo a sada do depois de um perodo muito curto, a probabilidade de que o flip-flop esteja no estado metaestvel flip-flop vem 0 enquanto muito baixa; porm, a probabilidade nunca chega a 0! Assim, os projetistas esperam por tempo sufioutros vem 1. ciente para que a probabilidade de uma falha do sincronizador seja muito baixa, e o tempo entre essas falhas ser de anos ou at mesmo milhares de anos. Para a maioria dos projetos de flip-flop, esperar por um perodo muitas vezes maior do que o tempo de preparao torna a probabilidade de falha de sincronismo muito baixa. Se a taxa de clock for maior do que o perodo de metaestabilidade em potencial (o que provvel), ento um sincronizador seguro poder ser criado com dois flip-flops D, como mostra a Figura B.11.6. Se voc estiver interessado em ler mais sobre esses problemas, consulte as referncias.
metaestabilidade Uma situao que ocorre se um sinal for examinado quando no estiver estvel pelos tempos de preparao e suspenso exigidos, possivelmente fazendo com que o valor examinado caia na regio indeterminada entre um valor alto e baixo.

B.12

Dispositivos programveis em campo

B-60

Entrada assncrona Clock

D C

Q Flip-flop

D C

Q Flip-flop

Sada sncrona

FIGURA B. 11.6

Este sincronizador funcionar corretamente se o perodo de metaestabilidade que desejamos evitar for menor que o perodo de clock. Embora a sada do primeiro flip-flop possa ser metaestvel, ela no ser vista por qualquer outro elemento lgico at o segundo clock, quando o segundo flip-flop D examina o sinal, que nesse momento no dever mais estar em um estado metaestvel.

Suponha que tenhamos um projeto com uma inclinao de clock muito grande maior do que o temVerifique po de propagao do registrador. Sempre ser possvel que esse projeto atrase o clock por tempo su- voc mesmo ficiente para garantir que a lgica opere corretamente? a. Sim, se o clock for lento o suficiente, os sinais sempre podem se propagar e o projeto funcionar, mesmo que a inclinao seja muito grande. b. No, pois possvel que dois registradores vejam a mesma transio de clock afastada o suficiente para que um registrador seja acionado, e suas sadas propagadas e vistas por um segundo registrador com a mesma transio de clock.
tempo de propagao O tempo necessrio para que uma entrada de um flip-flop se propague para as sadas do flip-flop.

B.12

Dispositivos programveis em campo

Dentro de um chip personalizado ou semipersonalizado, os projetistas podem utilizar a flexibilidade da estrutura bsica para facilmente implementar a lgica combinacional ou seqencial. Como um projetista que no quer usar um CI personalizado ou semipersonalizado implementa uma lgica complexa tirando proveito dos nveis de integrao muito altos sua disposio? Os componentes mais populares utilizados para o projeto lgico seqencial e combinacional fora de um CI personalizado ou semipersonalizado um dispositivo programvel em campo (FPD Field Programmable Device). Um FPD um circuito integrado contendo lgica combinacional, e possivelmente dispositivos de memria, configurvel pelo usurio final. Os FPDs em geral se encontram em dois campos: dispositivos lgicos programveis (PLDs Programmable Logic Devices), que so puramente combinacionais, e gate arrays programveis em campo (FPGAs Field Programmable Gate Arrays), que oferece lgica combinacional e flip-flops. Os PLDs consistem em duas formas: PLDs simples (SPLDs), que normalmente so uma PLA ou uma lgica de array programvel (PAL Programmable Array Logic), e PLDs complexos, que permitem mais de um bloco lgico e tambm interconexes configurveis entre os blocos. Quando falamos de uma PLA em um PLD, queremos dizer uma PLA com plano and e or programvel pelo usurio. Uma PAL como uma PLA, exceto que o plano or fixo. Antes de discutirmos sobre os FPGAs, til falarmos sobre como os FPDs so configurados. A configurao basicamente uma questo de onde fazer ou romper conexes. Estruturas de porta e de registrador so estticas, mas as conexes podem ser configuradas. Observe que, configurando as conexes, um usurio determina quais funes lgicas so implementadas. Considere uma PLA configurvel: determinando onde esto as conexes no plano and e no plano or, o usurio dita quais funes lgicas so computadas pela PLA. As conexes nos FPDs so permanentes ou reconfigurveis. As conexes permanentes envolvem a criao ou a destruio de uma conexo entre dois fios. FPLDs atuais utilizam uma tecnologia antifuse, que permite que uma conexo seja criada no momento da programao, que ser ento permanente. A outra maneira de configurar FPLDs CMOS por meio de uma SRAM. A SRAM baixada durante a inicializao, e o contedo controla a confi-

dispositivo programvel em campo (FPD) Um circuito integrado contendo lgica combinacional, e possivelmente dispositivos de memria, configurvel pelo usurio final dispositivo lgico programvel Um circuito integrado com lgica combinacional cuja funo configurada pelo usurio final. gate array programvel em campo Um circuito integrado configurvel contendo blocos lgicos combinacionais e flip-flops. dispositivo lgico programvel simples (SPLD) Dispositivo lgico programvel normalmente contendo uma nica PAL ou PLA. array lgico programvel (PAL) Contm um plano and programvel seguido por um plano or fixo. antifuse Uma estrutura de um circuito integrado que, quando programada, faz uma conexo permanente entre dois fios.

B-61

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

gurao das chaves, que, por sua vez, determinam quais linhas de metal esto conectadas. O uso do controle da SRAM tem a vantagem de que o FPD pode ser reconfigurado alterando-se o contedo da SRAM. As desvantagens do controle baseado em SRAM so duas: a configurao voltil e precisa ser recarregada a cada inicializao, e o uso de transistores ativos para as chaves aumenta um pouco a resistncia de tais conexes. FPGAs incluem dispositivos lgicos e de memria, normalmente estruturados em um array bidimensional, com os corredores dividindo as linhas e colunas usadas para a interconexo global entre as clulas do array. Cada clula uma combinao de portas e flip-flops que pode ser programada para realizar alguma funo especfica. Por serem basicamente RAMs pequenas e programveis, Look-Up Tables elas tambm so chamadas de Look-Up Tables. As FPGAs contm blocos de montagem mais sofis(LUTs) Em um dispositivo programvel ticados, como partes de somadores e blocos de RAM que podem ser usados para criar bancos de reem campo, o nome gistradores. Algumas FPGAs grandes contm at mesmo ncleos RISC de 32 bits! dado s clulas porque Alm de programar cada clula para realizar uma funo especfica, as interconexes entre as consistem em uma pequena quantidade de clulas tambm so programveis, permitindo que as FPGAs modernas, com centenas de blocos lgica e RAM. e centenas de milhares de portas, sejam utilizadas para funes lgicas complexas. A interconexo um desafio importante nos chips personalizados, e isso ainda mais verdadeiro para FPGAs, pois as clulas no representam unidades naturais de decomposio para o projeto estruturado. Em muitas FPGAs, 90% da rea reservada para a interconexo e apenas 10% so blocos lgicos e de memria. Assim como voc no pode projetar um chip personalizado ou semipersonalizado sem ferramentas CAD, tambm precisa delas para FPDs. Foram desenvolvidas ferramentas de sntese de lgica que visam s FPGAs, permitindo a gerao de um sistema usando FPGAs a partir da Verilog estrutural e comportamental.

B.13

Comentrios finais

Esse apndice introduz os fundamentos do projeto lgico. Se voc tiver compreendido o material deste apndice, estar pronto para pegar o material dos Captulos 5 e 6, ambos usando os conceitos discutidos extensivamente neste apndice.

Leitura adicional
Existem muitos textos bons sobre projeto lgico. Aqui esto alguns que voc poderia examinar. Ciletti, M. D. [2002] Advanced Digital Design with the Verilog HDL, Englewood Cliffs, NJ: Prentice-Hall. Um livro profundo sobre projeto lgico usando Verilog. Katz, R. H. [2004] Modern Logic Design, segunda edio, Reading, MA: Addison Wesley. Um texto geral sobre projeto lgico. Wakerly, J. F. [2000] Digital Design: Principles and Practices, terceira edio, Englewood Cliffs, NJ: Prentice-Hall. Um texto geral sobre projeto lgico.

B.14

Exerccios

B-62

B.14

Exerccios

B.1 [10] <B.2> Aprofundando o aprendizado: Tabelas verdade B.2 [10] <B.2> Aprofundando o aprendizado: Tabelas verdade B.3 [15] <B.2> Aprofundando o aprendizado: Criando portas lgicas B.4 [15] <B.2> Aprofundando o aprendizado: Criando portas lgicas B.5 [10] <B.2, B.3> Construa a tabela verdade para uma funo de paridade mpar com quatro

entradas (veja uma descrio de paridade na pgina B-51).


B.6 [10] <B.2, B.3> Implemente a funo de paridade mpar com quatro entradas com portas

AND e OR usando entradas e sadas em bolha.


B.7 [10] <B.2, B.3> Implemente a funo de paridade mpar com quatro entradas com uma PLA. B.8 [15] <B.2, B.3> Prove que um multiplexador de duas entradas tambm universal, mostrando como criar a porta NAND (ou NOR) usando um multiplexador. B.9 [5] <4.2, B.2, B.3> Suponha que X consiste em 3 bits, x2 x1 x0. Escreva quatro funes lgi-

cas que sejam verdadeiras se e somente se n X contm somente um 0 n X contm um nmero par de 0s n X, quando interpretado como um nmero binrio sem sinal, menor que 4 n X, quando interpretado como um nmero com sinal (complemento a dois), negativo B.10 [5] <4.2, B.2, B.3> Implemente as quatro funes descritas no Exerccio B.9 usando uma PLA.
B.11 [5] <4.2, B.2, B.3> Suponha que X consiste em 3 bits, x2 x1 x0, e Y consiste em 3 bits, y2

y1 y0. Escreva as funes lgicas que so verdadeiras se e somente se n X < Y, onde X e Y so considerados como nmeros binrios sem sinal n X < Y, onde X e Y so considerados nmeros com sinal (complemento a dois) n X=Y Use uma tcnica hierrquica que pode ser estendida para maiores nmeros de bits. Mostre como voc pode estend-la para a comparao de 6 bits. B.12 [5] <B.2, B.3> Implemente uma rede de comutao que tenha duas entradas de dados (A e B), duas sadas de dados (C e D) e uma entrada de controle (S). Se S igual a 1, a rede est no modo transparente, e C deve ser igual a A, e D deve ser igual a B. Se S igual a 0, a rede est no modo cruzado, e C deve ser igual a B, e D deve ser igual a A. B.13 [5] <B.2, B.3> Aprofundando o aprendizado: Multiplexadores B.14 [5] <5.9, B.3> Qual a funo implementada pelos mdulos Verilog a seguir?
module FUNC1 (I0, I1, S, out); input I0, I1; input S; output out; out = S? I1: I0; endmodule module FUNC2 (out,ctl,clk,reset); output [7:0] out; input ctl, clk, reset; reg [7:0] out; always @(posedge clk)

B-63

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

if (reset) begin out <= 8b0 ; end else if (ctl) begin out <= out + 1; end else begin out <= out 1; end endmodule B.15 [5] <B.4> O cdigo Verilog da pgina B-41 para um flip-flop D. Mostre o cdigo Verilog

para um latch D.
B.16 [10] <5.9, B.3, B.4> Escreva uma implementao de mdulo Verilog de um decodificador

(e/ou codificador) 2 para 4.


B.17 [10] <5.9, B.3, B.4> Dado o seguinte diagrama lgico para um acumulador, escreva sua

implementao em um mdulo Verilog. Considere um registrador acionado por transio positiva e Rst assncrono.
In +

Somador 16 Load Clk Rst Registrador Load 16 Out

B.18 [20] <4.5, B.3, B.4, B.5> A Seo 3.4 apresenta a operao bsica e possveis implementa-

es de multiplicadores. Uma unidade bsica para tais implementaes uma unidade de deslocamento-e-soma. Mostre uma implementao Verilog para essa unidade. Mostre como voc pode usar essa unidade para construir um multiplicador de 32 bits.
B.19 [20] <4.6, B.3, B.4, B.5> Repita o Exerccio B.18, mas para um divisor sem sinal, em vez

de um multiplicador.
B.20 [15] <B.5> A ALU aceitava set on less than (slt) usando apenas o bit de sinal do somador.

Vamos experimentar uma operao set on less than usando os valores 7dec e 6dec. Para simplificar o acompanhamento do exemplo, vamos limitar as representaes binrias para 4 bits: 1001bin e 0110bin.
1001bin 0110bin = 1001bin + 1010bin = 0011bin

Esse resultado sugeriria que 7 > 6, o que claramente est errado. Logo, devemos considerar o overflow na deciso. Modifique a ALU de 1 bit na Figura B.5.10 para tratar de slt corretamente. Faa suas mudanas em uma cpia dessa figura para ganhar tempo.
B.21 [20] <B.6> Uma simples verificao de overflow durante a adio ver se o CarryIn para o

bit mais significativo no o mesmo que o CarryOut do bit mais significativo. Prove que essa verificao a mesma que acontece na Figura 3.3.

B.14

Exerccios

B-64

B.22 [5] <B.6> Reescreva as equaes da pgina B-34 para uma lgica de carry-lookahead para

um somador de 16 bits usando uma nova notao. Primeiro, use os nomes para os sinais CarryIn dos bits individuais do somador. Ou seja, use c4, c8, c12, ... no lugar de C1, C2, C3, ... Alm disso, considere que Pi,j significa um sinal de propagao para os bits de i a j, e Gi,j significa um sinal de gerao para os bits de i a j. Por exemplo, a equao C2 = G1 + (P1 . G0) + (P1 . P0 . c0) pode ser reescrita como c8 = G7,4 + (P7,4 . G3,0) +(P7,4 . P3,0 . c0) Essa notao mais genrica til na criao de somadores mais largos.
B.23 [15] <B.6> Escreva as equaes para a lgica de carry-lookahead para um somador de 64 bits usando a nova notao do Exerccio B.22 e usando somadores de 16 bits como blocos de montagem. Inclua um desenho semelhante Figura B.6.3 em sua soluo. B.24 [10] <B.6> Agora calcule o desempenho relativo dos somadores. Considere que o hardware

correspondente a qualquer equao contendo apenas termos OR ou AND, como as equaes para pi e gi na pgina B-31, utilizem apenas uma unidade de tempo T. As equaes que consistem no OR de vrios termos AND, como as equaes para c1, c2, c3 e c4 na pgina B-33, precisariam de duas unidades de tempo, 2T. O motivo que seria necessrio T para produzir os termos AND e depois um T adicional para produzir o resultado do OR. Calcule os nmeros e a razo de desempenho para os somadores de 4 bits para o carry por ondulao e o carry lookahead. Se os termos nas equaes forem definidos ainda mais por outras equaes, ento acrescente os atrasos apropriados para essas equaes intermedirias e continue recursivamente at que os bits de entrada reais do somador sejam usados em uma equao. Inclua o desenho de cada somador, rotulado com os atrasos calculados, e destacando o caminho do atraso no pior caso.
B.25 [15] <B.6> Este exerccio semelhante ao Exerccio B.24, mas, desta vez, calcule as veloci-

dades relativas de um somador de 16 bits usando apenas o carry por ondulao, o carry por ondulao de grupos de 4 bits que usam o carry lookahead e o esquema de carry lookahead da pgina B-30.
B.26 [15] <B.6> Este exerccio semelhante aos Exerccios B.24 e B.25, mas, desta vez, calcule

as velocidades relativas de um somador de 64 bits usando apenas o carry por ondulao, o carry por ondulao de grupos de 4 bits que usam o carry lookahead e o esquema de carry lookahead do Exerccio B.23.
B.27 [10] <B.6> Existem ocasies em que queremos somar uma coleo de nmeros. Suponha

que voc quisesse somar quatro nmeros de 4 bits (A, B, E, F) usando somadores completos de 1 bit. Vamos ignorar o carry lookahead por enquanto. Voc provavelmente conectaria os somadores de 1 bit na organizao no topo da Figura B.14.1. Abaixo da organizao tradicional est uma nova organizao de somadores completos. Tente somar quatro nmeros usando as duas organizaes para convencer-se de que ter a mesma resposta.

B-65

Apndice B

Fundamentos do Projeto Lgico

ELSEVIER

FIGURA B. 14.1 Carry por ondulao tradicional e adio carry save de quatro nmeros de 4 bits. Os detalhes aparecem esquerda, com os sinais individuais em minsculas, e os blocos correspondentes de nvel superior esto direita, com sinais coletivos em maisculas. Observe que a soma de quatro nmeros de n bits pode gerar n + 2 bits.

B.28 [5] <B.6> Primeiro, mostre a organizao em bloco dos somadores carry save de 16 bits para

somar esses 16 termos, como mostra a Figura B.14.1. Considere que o atraso de tempo para cada somador de 1 bit de 2T. Calcule o tempo da soma de quatro nmeros de 4 bits para a organizao na parte superior versus a organizao na parte inferior da Figura B.14.1.
B.29 [5] <B.8> Aprofundando o aprendizado: Flip-flops e latches B.30 [5] <B.8> Aprofundando o aprendizado: Flip-flops e latches B.31 [10] <B.10> Aprofundando o aprendizado: Mquinas de estados finitos B.32 [10] <B.10> Aprofundando o aprendizado: Mquinas de estados finitos B.33 [15] <B.2, B.8, B.10> Aprofundando o aprendizado: Construindo um contador B.34 [20] <B.10> Aprofundando o aprendizado: Construindo um contador B.35 [25] <B.10> Aprofundando o aprendizado: Metodologias de temporizao B.36 [15] <B.10> Aprofundando o aprendizado: Metodologias de temporizao B.37 [15] <B.2, B.10> Aprofundando o aprendizado: Metodologias de temporizao B.38 [15] <B.3, B.10> Aprofundando o aprendizado: Metodologias de temporizao

B.14

Exerccios

B-66

B.2,: No. Se A = 1, C = 1, B = 0, o primeiro verdadeiro, mas o segundo falso. B.3: c. B.4: Todos so exatamente iguais. B.4: A = 0, B = 1. B.5: 2. B.6: 1. B.8: c. B.10: b. B.11: No.

Respostas das Sees Verifique voc mesmo