0% acharam este documento útil (0 voto)
25 visualizações41 páginas

Cap 4

Enviado por

Guilherme
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
25 visualizações41 páginas

Cap 4

Enviado por

Guilherme
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 41

Sistemas Digitais

Capítulo 4:
Componentes de Caminhos de
Dados
Material traduzido e adaptado para o Português
pelo Prof. Ricardo O. Duarte e revisado pelos
Profs. Luciano Pimenta, Hermes Magalhães,
Vitor Torres e Luciano de Errico
DELT – EEUFMG
(240229)

Slides to accompany the textbook Digital Design, First Edition,


by Frank Vahid, John Wiley and Sons Publishers, 2007.
http://www.ddvahid.com

Copyright © 2007 Frank Vahid


Instructors of courses requiring Vahid's Digital Design textbook (published by John Wiley and Sons) have permission to modify and use these slides for customary course-related activities,
Digital
subject to keeping Design
this copyright notice in place and unmodified. These slides may be posted as unanimated pdf versions on publicly-accessible course websites.. PowerPoint source (or pdf
with animations) may not be posted to publicly-accessible websites, but may be posted for students on internal protected sites or distributed directly to students by other electronic means.
Instructors may make printouts of 2006
Copyright © 1
the slides available to students for a reasonable photocopying charge, without incurring royalties. Any other use requires explicit permission. Instructors
Frank source
may obtain PowerPoint Vahidor obtain special use permissions from Wiley – see http://www.ddvahid.com for information.

4.1

Introdução
• Capítulos 2 e 3: Projeto de circuitos combinacionais e sequenciais
– Portas lógicas, multiplexadores, decodificadores, registradores, e
controladores
• Nesse capítulo: circuitos mais complexos que poderão ser integrados
na formação de microprocessadores, microcontroladores (dedicados
ou não).
– Componentes de um Caminho de Dados, componentes responsáveis
por proporcionar modificações (transformações) de dados em mais alto
nível (não apenas transformações booleanas), e ou armazená-los de
diversas formas.
• Poderemos combinar tais blocos operacionais de forma a montar um datapath
(caminho de dados).
• No próximo capítulo combinaremos controladores e datapaths para
construir pequenos processadores, seguindo uma forma de projeto
conhecida como metodologia de projeto RTL – Register Transfer
Level.

Digital Design
Copyright © 2006 2
Frank Vahid
4.2

Registradores
• Armazenam dados. Encontrados em qualquer caminho b x
Combinationaln1
de dados. logic
n0
• Registrador do Cap. 3: Carregados a cada ciclo de CLK s1 s0

– Úteis na implementação de FSM – armazenam o estado clk State register

codificado
– Outros usos: podemos querer que ele carregue somente
em certos ciclos.

carga I3 I2 I1 I0
I3 I2 I1 I0
4-bit register
reg(4)
D D D D
Q Q Q Q Q3 Q2 Q1 Q0

clk

Q3 Q2 Q1 Q0

Registrador simples faz a carga a cada ciclo de Clk


Digital Design Como modificá-lo para fazer a carga
Copyright © 2006 3
Frank Vahid somente em certos Ciclos de Clk?

Registrador com Carga Paralela


• Adicione MUXs 2:1 antes de cada entrada D de cada Flip-flop do
registrador
• A entrada Load do Registrador seleciona qual a entrada do MUX.
– O próximo estado receberá o estado atual ou então uma nova palavra
(nova carga)
I3 I2 I1 I0

1 0 1 0 1 0 1 0
load 2×1 I3 I2 I1 I0
load
D D D D
Q3 Q2 Q1 Q0
Q Q Q Q

Q3 Q2 Q1 Q0
(a) (c)

I3 I2 I1 I0 I3 I2 I1 I0
load = 0

load = 1

10 10 10 10 10 10 10 10

D D D D D D D D

Q Q Q Q Q Q Q Q
Digital Design Q3 Q2 Q1 Q0 Q3 Q2 Q1 Q0
Copyright © 2006 4
(b)
Frank Vahid
Exemplo de uso de Registradores
a3 a2 a1 a0

ld I3 I2 I1 I0
• Esse exemplo mostra como 1
R0
clk
registradores carregam Q3 Q2 Q1 Q0

dados simultaneamente em
um mesmo ciclo de clock.
– Observe que todas entradas de
carga (ld) estão em “1” (não 1 ld I3 I2 I1 I0 1 ld I3 I2 I1 I0
necessariamente deveriam R1 R2
estar – isso é só um exemplo!!) Q3 Q2 Q1 Q0 Q3 Q2 Q1 Q0

O atraso dos inversores não Se as especificações dos registradores


poderia ser um problema? forem respeitadas (p. ex. tempos de
setup e hold), não há problema (todos
usam o mesmo sinal de clock).
Digital Design
Copyright © 2006 5
Frank Vahid

Exemplo do uso de Registradores

Note como o atraso dos inversores não


afeta o funcionamento do circuito uma
vez que os sinais invertidos são definidos
muito antes da próxima borda de clock.
Digital Design
Copyright © 2006 6
Frank Vahid
Exemplo de uso de Registradores com Entrada
Load: Balança Eletrônica
• A balança tem dois mostradores
– Peso atual
– Peso gravado Balança Armazenador
– Útil para se comparar o peso de um 0 0 1 10 de pesos

item com o peso de outro item


• Usaremos o registrador para Armazenar
b 1 I3 I2 I1 I0
3 pounds
2 load
armazenar o peso clk
0011
Peso atual Q3 Q2 Q1 Q0
– Pressionar o botão faz com que o
peso atual seja gravado no
registrador (carga ou “load”)
3 pounds
– O peso armazenado fica sempre
Peso gravado
mostrado no display "peso gravado",
mesmo quando peso novo aparece
no display “peso atual”, a menos que
façamos uma nova “carga”,
pressionando o botão novamente
Digital Design
Copyright © 2006 7
Frank Vahid

Exemplo de uso de registrador: Display de


histórico de temperaturas
• Exemplo dado no capítulo 3
– Um temporizador gera um pulso a cada hora
– Anteriormente usado com um clock. Uma melhor alternativa de
projeto seria usar um oscilador como sinal de clock e usar
registradores com entradas Load (= ld), ligados a um circuito
gerador de pulsos temporizadores.

a4 a3 a2 a1 a0 b4 b3 b2 b1 b0 c4 c3 c2 c1 c0
a4 a3 a2 a1 a0 b4 b3 b2 b1 b0 c4 c3 c2 c1 c0
I4 Q4 I4 Q4 I4 Q4
t4 I4 Q4 I4 Q4 I4 Q4
x4 I3 Q3 I3 Q3 I3 Q3
t3 I3 Q3 I3 Q3 I3 Q3
x3 I2 Q2 I2 Q2 I2 Q2
t2 I2 Ra Q2 I2 RbQ2 I2 RcQ2
x2 I1 Q1 I1 Q1 I1 Q1
t1 I1 Q1 I1 Q1 I1 Q1
x1 I0 Q0 I0 Q0 I0 Q0
t0 I0 Q0 I0 Q0 I0 Q0
x0
ld ld ld
Clk Ra Rb Rc
osc C
C TemperatureHistoryStorage
timer Nova linha Histórico de Temperaturas

Digital Design
Copyright © 2006
Frank Vahid 8
Exemplo de uso de Registrador: Display de painel
de carro
8

Notação simplificada

00001010
C 8 Carregada no evento
• Exemplo apresentado no
d0 load reg0 T de Clock
Cap.2: Quatro funções
(valores) diferentes… 2× 4 i0
• 8
Para reduzir o no de fios: 1 1 8-bit
d1 load reg1 A
Computador de bordo a0 00001010 4× 1
escreve somente 1 valor por i0
i1
vez (endereçado) e o dado i1 8
“C” está ligado à entrada dos 0 a1 d2 load reg2 d D
I 8
4 registradores i2
– No cap. 2 precisávamos de: 8
8+8+8+8 = 32 fios d3 load reg3
e M
– Agora: 8+2+1+clock = 12 fios
1 i3 s1s0
load
Digital Design 8
Copyright © 2006 x y 9
Frank Vahid

Exemplo de uso de Registradores: Tabuleiro de


Damas Computadorizado
• Cada registrador LED lit LED
retém valores para
1
uma coluna de LEDs.
0
– Nível lógico 1
acende o LED 1

• Um processador 0

carrega um 0
registrador por vez. 0
– Ocorre rápido o
1
suficiente que um
ser humano vê o 0

tabuleiro se R7 R6 R5 R4 R3 R2 R1 R0 Q
R0 10100010
modificando por I load

inteiro como se d7 d6 d5 d4 d3 d2 d1 d0
fosse de uma só 8 e i2 i1 i0 3×8 decoder from
microprocessor
from
decoder
vez D (b)
microprocessor
Digital Design (a)
Copyright © 2006 10
Frank Vahid
Exemplo de uso de Registradores: Tabuleiro de
Damas Computadorizado
LED apagado
Importante: as
LED acesso
mudanças nos sinais
de enable assim como
nos índices (i) e dados
(D) ocorrem longe das
bordas de clock e já
estão estabilizadas
quando as bordas
ocorrem.

R7 R6 R5 R4 R3 R2 R1 R0
10100010101000101010001010100010
01000101 010001010100010101000101

D 10100010 01000101 10100010 010000101 10100010 010000101 10100010 010000101

i2,i1,i0 000 (R0) 001 (R1) 010 (R2) 011 (R3) 100 (R4) 101 (R5) 110 (R6) 111 (R7)

e
clk

Digital Design
Copyright © 2006 11
Frank Vahid

Registradores de Deslocamento (Shift Registers)


Conteúdo do Registrador
• Deslocamento para a Direita (Shift right) 1 1 0 1 Antes do deslocamento
0 Para a direita
– Move cada bit uma posição para a direita.
Conteúdo do
– Neste exemplo, introduz um “0” no bit (Flip-Flop) 0 1 1 0
Registrador
mais à esquerda – (convencionado aqui como bit Depois do deslocamento
Para a direita
mais significativo). “Perde-se” o bit mais à direita.
Q: Faça um shift para a direita em 1001, mostrando o valor no
registrador após a cada shift.
A: 1001 (original) • Implementação: Conecte cada
0100 saída de um flip-flop à entrada do
flip-flop vizinho
0010
shr_in
0001
0000
Digital Design Shift Lógico
Copyright © 2006
Frank Vahid para a Direita 12
Registradores de Deslocamento (Shift Registers)
• Para permitir que um registrador desloque (shift) ou não
(retenha o dado armazenado) necessitamos de MUXs 2:1
– shr: igual a “0” significa reter, “1” significa deslocar (shift)
– shr_in: valor (bit) a ser deslocado (shift in)
• Pode ser 0 ou 1
• Obs.: Poderíamos facilmente projetar registradores de deslocamento
capazes de deslocarem um bit para esquerda.
shr_in

shr=1
shr 1 0 1 0 1 0 1 0 10 10 10 10
2×1 2×1
D D D D
D D D D
Q Q Q Q
Q Q Q Q
Q3 Q2 Q1 Q0
Q3 Q2 Q1 Q0 (b)
(a)
shr_in
shr
Digital Design
Copyright © 2006 Q3 Q2 Q1 Q0 13
Frank Vahid
(c)

Registradores Circulares (Rotate Shifters)

Conteúdo do registrador
1 1 0 1
Antes do shift para a direita
• Rotação para a direita:
Conteúdo do registrador
Funciona como o 1 1 1 0
Após o shift para a direita

deslocamento para a direita,


entretanto o bit mais à
direita não será “perdido”,
pois no evento de clock ele
será trazido de volta para a
posição mais à esquerda.

Digital Design
Copyright © 2006 14
Frank Vahid
Exemplo de aplicação do Registrador de
Deslocamento: Display de Carros

Fro m th e car's

ires
centralco m pter
C

u
8

• Exemplo anterior : 8 d0 load reg0 T

m riro r d isp
To th e ab
2×4 i0

11 w
8

+2+1+clock = 12 fios a0
d1 load reg1 A
8-bit
4×1

ove
i0

ayl
i1

da CPU do carro para a1


i1
d2 load reg2 I
8
d
8
D

os 4 registradores
i2
8
d3 load reg3 M
e

responsáveis por load


8
i3 s1 s0

x y

exibir os valores no
Obs.: essa linha é de 1 bit, e não de 8 bits como antes
display x y
c
– Queremos um shr_in
d0 shr reg0 T
número menor de s1 s0
2× 4 i0
fios. 8
shr_in 4×1
• Usamos shift registers d1 shr reg1 A
a0 i0
– Fios: 1+2+1+clk = 5 i1
a1 i1 8
– A CPU do carro shr_in d D
d2 shr reg2 I 8
envia um valor (bit) i2
a cada período de shr_in
8
clock e d3
shr reg3
M
Digital Design shift i3
Copyright © 2006 8 15
Frank Vahid

Registradores Multifuncionais
• Registradores podem ser projetados
para serem multifuncionais
– Carregar, Deslocar, Zerar (Carregar com 0s) Funções:
– E reter os valores armazenados. s1 s0 Operação
• Facilmente projetados com o auxílio de 0 0 Manter o valor atual
0 1 Carga paralela
MUXs 1 0 Deslocar para a direita
– Conecte cada entrada do MUX de forma 1 1 Carga 0 no registrador
adequada para implementar a função
desejada.
shr_in I3 I2 I1 I0
0 0 0 0
s1 3 2 1 0 3210 3210 3210
s0 4×1 shr_in I3 I2 I1 I0
s1
D D D D s0
Q3 Q2 Q1 Q0
Q Q Q Q
Digital Design (b)
Copyright © 2006 Q3 Q2 Q1 Q0 16
Frank Vahid (a)
Registradores Multifuncionais

s1 s0 Operação
0 0 Manter o valor atual
0 1 Carga paralela
1 0 Desloca para a Direita
1 1 Desloca para a Esquerda

I3 I2 I1 I0

shr_in
shl_in

s1 3210 3210 3210 3210


shl_in I3 I2 I1 I0
s0
shr_in
D D D D s1
s0

Q Q Q Q Q3 Q2 Q1 Q0

Q3 Q2 Q1 Q0
(a) (b)
Digital Design
Copyright © 2006 17
Frank Vahid

Registradores Multifuncionais com Entradas de


Controle Individualizadas
ld shr shl Operação s1 s0 Operação
0 0 0 Manter o valor atual 0 0 Manter o valor atual
0 0 1 Shift left 0 1 Carga paralela
0 1 0 Shift right 1 0 Desloca para a Direita
0 1 1 Shift right – shr has priority over shl
1 1 Desloca para a Esquerda
1 0 0 Carga paralela
1 0 1 Carga paralela – ld tem prioridade
1 1 0 Carga paralela – ld tem prioridade
1 1 1 Carga paralela – ld tem prioridade I3 I2 I1 I0
shr_in
I3 I2 I1 I0
Tabela verdade do circuito combinacional ld shr_in
s1 shl_in

?
combi- shl_in
Entradas Saídas shr s0
national
ld shr shl s1 s0 Operação circuit
shl Q3 Q2 Q1 Q0
0 0 0 0 0 Manter o valor
0 0 1 1 1 Shift left
0 1 0 1 0 Shift right Q3 Q2 Q1 Q0
0 1 1 1 0 Shift right
1 0 0 0 1 Carga paralela
1 0 1 0 1 Carga paralela
1 1 0 0 1 Carga paralela
1 1 1 0 1 Carga paralela
s1 = ld’*shr’*shl + ld’*shr*shl’ + ld’*shr*shl
s0 = ld’*shr’*shl + ld
Digital Design
Copyright © 2006 18
Frank Vahid
Tabela de Operações de Registradores
• As operações que um Registrador é capaz de executar são
usualmente exibidas na forma de uma tabela compacta.
– X significa mesma operação se o valor é 0 ou 1
• Um X expande a duas linhas
• Dois Xs expande a quatro linhas
– Coloque a entrada de controle de maior prioridade à esquerda de forma a
se obter uma tabela de operação compacta e simples.
Entradas Saídas
ld shr shl s1 s0 Operação ld shr shl Operação
r
0 0 0 0 0 Mantém o valor 0 0 0 Mantém o valor
0 0 1 1 1 Shift left 0 0 1 Shi f t lef t
0 1 0 1 0 Shift right 0 1 X Shift right
0 1 1 1 0 Shift right 1 X X Carga paralela
1 0 0 0 1 Carga paralela
1 0 1 0 1 Carga paralela
1 1 0 0 1 Carga paralela
1 1 1 0 1 Carga paralela

Digital Design
Copyright © 2006 19
Frank Vahid

Processo de Projeto de Registradores


• Podemos projetar registradores multifuncionais com as
operações desejadas executando somente 4 passos:

Digital Design
Copyright © 2006 20
Frank Vahid
Exemplo de Projeto de Registradores
s2 s1 s0 Operação
• Projetar registrador com as operações: 0 0 0 Manter o valor
0 0 1 Carga Paralela
– Carga, shift left, Limpar (Zerar) síncrono, 0 1 0 Shift left
Setar (colocar em 1) síncrono, Manter. 0 1 1 Limpar síncrono
1 0 0 Setar síncrono
1 0 1 Manter o valor
Passo 1: Determinar o tamanho do MUX 1 1 0 Manter o valor
1 1 1 Manter o valor
5 operações: → Necessitamos de um In
1 0 Da saída
MUX 8:1
s2 Qn-1
s1 7 6 5 4 3 2 1 0
s0
Passo 2: Montamos a tabela de operações
D
Passo 3: Conectamos as entradas dos MUXs Q

Passo 4: Mapeamos as entradas de Qn


Entradas Saídas
controle clr set ld shl s2 s1 s0 Operação
s2 = clr’*set 0 0 0 0 0 0 0 Manter o valor
s1 = clr’*set’*ld’*shl + clr 0 0 0 1 0 1 0 Shift left
s0 = clr’*set’*ld + clr 0 0 1 X 0 0 1 Carga Paralela
0 1 X X 1 0 0 Set to all 1s
Digital Design 1 X X X 0 1 1 Clear to all 0s
Copyright © 2006 21
Frank Vahid

Exemplo de Projeto de Registradores

I3 I2 I1 I0

shl I3 I2 I1 I0
s2
Circuito s1 shl_in
ld s0 shl_in
Combina-
set
cional Q3 Q2 Q1 Q0
clr
Q3 Q2 Q1 Q0

Passo 4: Mapeamos as entradas de


Entradas Saídas
controle clr set ld shl s2 s1 s0 Operação
s2 = clr’*set 0 0 0 0 0 0 0 Manter o valor
s1 = clr’*set’*ld’*shl + clr 0 0 0 1 0 1 0 Shift left
s0 = clr’*set’*ld + clr 0 0 1 X 0 0 1 Carga Paralela
0 1 X X 1 0 0 Set to all 1s
Digital Design 1 X X X 0 1 1 Clear to all 0s
Copyright © 2006 22
Frank Vahid
4.3

Somadores
• Soma dois números binários de N-bits Entradas Saídas
a1 a0 b1 b0 c s1 s0
– Um somador de 2-bits: soma dois 0 0 0 0 0 0 0
0 0 0 1 0 0 1
números de 2-bits, produzindo como 0 0 1 0 0 1 0
saída um resultado com 3-bits 0 0 1 1 0 1 1
0 1 0 0 0 0 1
– Ex.: 01 + 11 = 100 (1 + 3 = 4) 0 1 0 1 0 1 0
0 1 1 0 0 1 1
• Podemos projetá-lo usando o 0 1 1 1 1 0 0

processo de projeto de circuitos 1


1
0
0
0
0
0
1
0
0
1
1
0
1
combinacionais (cap. 2), entretanto 1 0 1 0 1 0 0
1 0 1 1 1 0 1
torna-se ineficiente para um número 1 1 0 0 0 1 1
elevado de bits. 1 1 0 1 1 0 0
1 1 1 0 1 0 1
– Por que? 1 1 1 1 1 1 0

Digital Design
Copyright © 2006 23
Frank Vahid

Porque Somadores não são projetados usando-se 4.3


o processo de projeto de circ. Combinacionais?
• Tabelas verdade gigantes Inputs Outputs
– Um somador de 2-bits apresenta a tabela a1 a0 b1 b0 c s1 s0
0 0 0 0 0 0 0
verdade (ao lado) de 2(2+2) = 16 linhas 0 0 0 1 0 0 1
0 0 1 0 0 1 0
– Um somador de 8-bits: 2(8+8) = 65,536 linhas 0 0 1 1 0 1 1
0 1 0 0 0 0 1
– 16-bits: 2(16+16) = ~4 bilhões de linhas 0 1 0 1 0 1 0
0 1 1 0 0 1 1
• Tabelas verdade enormes com vários 1s/0s 0 1 1 1 1 0 0
1 0 0 0 0 1 0
produzem circuitos enormes. 1
1
0
0
0
1
1
0
0
1
1
0
1
0
– O gráfico mostra o crescimento do número 1 0 1 1 1 0 1
1 1 0 0 0 1 1
de transistores para um somador de N-bits 1 1 0 1 1 0 0
1 1 1 0 1 0 1
implementado em uma ferramenta de 1 1 1 1 1 1 0
Transistores

síntese (Ex.: Altera Quartus II) 10000


Q: Qual seria o número de transistores para um 8000
somador de 16 bits? 6000
R: Pela figura, o número de transistores duplica a cada t 4000
aumento de N para N>5. Logo, transistores = 1000*2 (N-5).
Portanto, para N=16, transistores = 1000*2(16-5) = 2000
1000*2048 = 2.048.000 !!! 0
1 2 3 4 5 6 7 8
Digital Design N
Copyright © 2006 24
Frank Vahid
Método alternativo de se projetar um Somador
• Reproduzir como
faríamos uma soma
com lápis e papel.
• Somamos uma 0 1 0 1 1 1
A: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
coluna por vez, B: + 0 1 1 0 + 0 1 1 0 + 0 1 1 0 + 0 1 1 0
começando da
coluna mais à
direita. 1 0 1 1 0 1 1 0 1 0 1
– Fazemos a soma dos
elementos da coluna
e produzimos (ou
não) um transporte
(carry bit) para a
coluna seguinte.

Digital Design
Copyright © 2006 25
Frank Vahid

Método alternativo de se projetar um Somador


• Projete um 1 1 1 0
componente para A: 1 1 1 1
B: + 0 1 1 0
cada coluna
– Um componente que 1 0 1 0 1
some os bits
daquela coluna e que
1 1 0
gere um bit (carry
bit) para a coluna
A: 1 1 1 1
seguinte.
+ B: 0 1 1 0

b a ci b a ci b a ci b a
co s co s co s co s
1
0 1 0 1 SOMA

Digital Design
Full-adders Half-adder
Copyright © 2006 26
Frank Vahid
Half-Adder (Meio Somador)
1 1 0
• Half-adder: Soma 2 bits, produz como
sinais de saída a soma e o carry bit A: 1 1 1 1

• Projete-o usando o processo de + B: 0 1 1 0

projeto de circuitos combinacionais b a ci b a ci b a ci b a


Entradas Saídas co s co s co s co s
I
1
a b co s 0 1 0 1 SOMA
Passo1: Identifique a função 0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0

Passo 2: Converta em equações


co = ab
a b
s = a’b + ab’ (mesmo que s = a xor b)
a b

Passo 3: Implemente o circuito Half-adder


co s
Digital Design
Copyright © 2006 co s 27
Frank Vahid

Full-Adder (Somador Completo)


1 1 0
• Full-adder: Soma 3 bits, produz 2
saídas: Soma e o Carry-bit A: 1 1 1 1

• Projete usando o processo aprendido + B: 0 1 1 0

no capítulo 2 b a ci b a ci b a ci b a
co s co s co s co s
Passo1: Identifique a função 1
0 1 0 1 SOMA
Inputs Outputs
co s
Passo 2: Converta em equações
a b ci
0 0 0 0 0 co = a’bci + ab’ci + abci’ + abci Passo 3: Implemente o circuito
0 0 1 0 1 a b ci
co = a’bci +abci +ab’ci +abci +abci’
0 1 0 0 1
+abci
0 1 1 1 0
co = (a’+a)bci + (b’+b)aci + (ci’+ci)ab
1 0 0 0 1
1 0 1 1 0 co = bci + aci + ab
1 1 0 1 0
1 1 1 1 1 s = a’b’ci + a’bci’ + ab’ci’ + abci
s = a’(b’ci + bci’) + a(b’ci’ + bci)
s = a’(b xor ci) + a(b xor ci)’ Full
Digital Design
s = a xor b xor ci adder
Copyright © 2006 co s 28
Frank Vahid
Ripple-Carry Adder
• Usando como elementos base o meio somador (HA=half-adder) e o
somador completo (FA=full-adder), podemos construir um somador de
N bits como se estivéssemos fazendo uma soma com lápis e papel.
• Esse circuito é chamado ripple-carry adder
– Abaixo temos um ripple-carry adder de 4-bits: Soma dois números de 4-bits
gerando como saída um número binário de 5-bits.
• A saída em 5-bits é formada pelos 4-bits “soma” mais 1-bit “propagação ou
carry-out” gerado a partir do FA localizado mais à esquerda da figura abaixo.
– Pode ser facilmente estendido para qualquer tamanho (qualquer número de
bits)
a3b3 a2b2 a1b1 a0 b0

a b ci a b ci a b ci a b a3a2a1a0 b3b2b1b0

FA FA FA HA 4-bit adder

co s co s co s co s co s3s2 s1s0

co s3 s2 s1 s0
Digital Design (a) (b)
Copyright © 2006 29
Frank Vahid

Ripple-Carry Adder
• Usando um full-adder ao invés de um half-adder para
produzir o bit menos significativo da soma, nos proporcionará
incluir mais um sinal de entrada o bit “carry in”
– Será útil futuramente quando conectarmos pequenos somadores para
formar somadores maiores.

a3b3 a2b2 a1b1 a0 b0 ci

a b ci a b ci a b ci a b ci a3a2a1a0 b3b2b1b0
FA FA FA FA 4-bit adder ci
co s co s co s co s co s3s2 s1s0

co s3 s2 s1 s0
(a) (b)

Digital Design
Copyright © 2006 30
Frank Vahid
Funcionamento do Ripple-Carry Adder
000 000 000 00
0

a b ci a b ci a b ci a b ci
FA FA FA FA Considere que todas as entradas
co s co s co s co s inicialmente são iguais a 0
0 0 0
0 0 0 0 0

000 100 100 11 0111+0001


0
(a resposta deverá ser 01000)
a b ci a b ci a b ci a b ci
FA FA FA FA
co s co s co s co s
0 0 1
0
co2 co1 co0
0 0 1 1 0 Saída após 2 ns (1 Full-Adder)?

Digital Design
Resposta Errada! A soma só fica pronta após o último carry-bit
Copyright © 2006 propagar-se através do FA (Full-Adder) mais à esquerda! 31
Frank Vahid
Tempo de soma proporcional ao número de FAs.

Funcionamento do Ripple-Carry Adder


000 100 101 11
0 0111+0001
(a resposta deverá ser 01000)
a b ci a b ci a b ci a b ci
FA FA FA FA
co s co s co s co s
0 1 1
co1 Saídas após 4ns (2 FA delays)
0 0 1 0 0
(b)
000 1 01
0 101 11
0

a b ci a b ci a b ci a b ci
FA FA FA FA
co s co s co s co s
1 1 1
co2 Saídas após 6ns (3 FA delays)
0 0 0 0 0
(c)
0 01
0 101 101 11
0

a b ci a b ci a b ci a b ci
FA FA FA FA
co s co s co s co s
1 1 1
0 1 0 0 0 Saídas após 8ns (4 FA delays)
Digital Design (d)
Copyright © 2006 A saída correta só fica pronta após um tempo 32
Frank Vahid
de propagação de 4 FA delays
Cascateando Somadores para produzir
Somadores maiores

a7a6a5a4 b7b6b5b4 a3a2a1a0 b3b2b1b0

a3a2a1a0 b3b2b1b0 a3a2a1a0 b3b2b1b0 a7.. a0 b7.. b0

4-bit adder ci 4-bit adder ci 8-bit adder ci

co s3s2s1s0 co s3s2s1s0 co s7.. s0

co s7s6s5s4 s3s2s1s0
(a) (b)

Digital Design
Copyright © 2006 33
Frank Vahid

Exemplo de aplicação de um Somador:


Balança com compensação de peso
• Valores para compensação variando de -1 a -8 Kg
– Para ajustar o peso “zero” de balanças (eliminar efeito da base).
– Usaremos um somador ripple-carry de 8-bits
-8
Sensor de -7 -1
peso -6 -2
-5 -3
-4
66 = 01000010 11111 000
111
a7..a0 b7..b0

Somador de 8 bits ci 0

co s7..s0

1 ld 01000001 = 65
display register Ajuste de
clk 00111010 = 58 Pesos

Digital Design
Copyright © 2006 Para o display 34
Frank Vahid
4.4

Deslocadores (Shifters)
• Deslocamentos (por ex.: deslocando 0011 para a esquerda resulta em
0110) , Isso é útil para:
– Manipular bits
– Converter dados da forma paralelo para serial (lembre-se do exemplo do
circuito de exibição de funções de um carro no painel do veículo)
– Deslocar um bit para esquerda (Shift left once) é o mesmo que multiplicar
por 2 de forma rápida. (Ex.: 0011 (3) se tornará 0110 (6))
– Shift right once mesmo que dividir por 2 i3 i2 i1 i0

i3 i2 i1 i0 inR
i3 i2 i1 i0 inL

in 2 01 2 01 2 01 2 01
shL s0
01 01 01 01 shR s1
in
sh

<<1 q3 q2 q1 q0
q3 q2 q1 q0
Símbolo Deslocador Shifter with left
q3 q2 q1 q0
Para Esquerda shift, right shift,
Shifter with left and no shift
Digital Design
Copyright © 2006 shift or no shift 35
(a)
Frank Vahid

Exemplo de Shifters: Circuito que calcula média de


temperaturas
• Quatro registradores
0000111 (7) 001000 (8) 001100 (12) 001111 (15)
armazenam um histórico de T
Ra Rb Rc Rd
temperaturas clk
• Queremos como saída a ld
ld

média dessas temperaturas + +


• Adicionaremos, em seguida,
+
dividiremos por quatro shift in 0 0101010 (42) divido por 4
– Mesmo que deslocar para a 0 >>2
direita 2 posições 0001010 (10)
– Usaremos 3 somadores e um Ravg
ld
shift right de 2 posições.
Tavg

Digital Design
Copyright © 2006 36
Frank Vahid
Barrel Shifter i3 i2 i1 i0
in
• Um deslocador que pode deslocar os 01 01 01 01
sh
bits de entrada de qualquer quantidade.
– 4-bit barrel left shift pode deslocar para a
q3 q2 q1 q0
esquerda de 0, 1, 2, ou 3 posições Deslocador de 1 posição usa MUXs 2:1.
– 8-bit barrel left shifter pode deslocar para Uma solução com MUXs 8:1 para
a esquerda de 0, 1, 2, 3, 4, 5, 6, ou 7 implementar um Barrel Shifter de 8-bits,
posições necessitaria de muitos fios.
• (Deslocar 8 posições de um número de Q: xyz=??? Para
8 bits não tem nenhuma utilidade) I
deslocar 5 bits? 8 00000110
• Poderíamos projetá-lo com MUXs 8:1 e 1
fios x sh <<4 in 0
– Geraria um número muito grande de fios.
8 01100000 (por 4)
• Um projeto mais eficiente: 0
– Uma cadeia de 3 shifters: 4, 2, e 1 y sh <<2 in 0
– Poderíamos deslocar 0..7 posições 8 01100000
selecionando as entradas corretas dos 1
MUXs. z sh <<1 in 0
Digital Design Resultado: desloc. 5: 8 11000000 (por 1)
Copyright © 2006 Q 37
Frank Vahid

4.5

Comparadores
• Um comparador de N-bits: Produz em sua única saída o nível lógico
1 se dois números de N-bits forem idênticos.
– Um comparador de igualdade de 4-bits, cujas entradas são A e B
• a3 deverá ser igual a b3, a2 = b2, a1 = b1, a0 = b0
– Dois bits são iguais se ambos forem iguais a 1, ou ambos iguais a 0
– eq = (a3b3 + a3’b3’) * (a2b2 + a2’b2’) * (a1b1 + a1’b1’) * (a0b0 + a0’b0’)
• Lembre que as saídas de uma XNOR de 2 entradas é igual a 1 se suas entradas
forem iguais = (a3 xnor b3) * (a2 xnor b2) * (a1 xnor b1) * (a0 xnor b0)
a3b3 a2b2 a1b1 a0b0
0110 = 0111 ? 0 0 1 1 1 1 0 1

a3a2a1a0 b3b2b1b0
1 1 1 0
Comparador de 4 bits
eq

(b)
0 eq
(a)
Digital Design
Copyright © 2006 38
Frank Vahid
Comparador de Magnitude
• Comparador de Magnitude de N-
A=1011 B=1001
bits: Indica se A>B, A=B, ou A<B,
para as suas entradas A e B de N- 1011 1001 Igual
bits (sem sinal) 1011 1001 Igual
– Como projetar? Como você
1011 1001 Diferente
compararia usando lápis e papel?
Primeiro comparo a3 e b3. Se forem Logo A > B
iguais, comparo a2 e b2. E assim por
diante. Paro se a comparação der
diferente – independentemente de qual
bit seja, o que for igual a 1 é o maior
operando. Caso não haja nenhuma
desigualdade, conclui-se que A = B

Digital Design
Copyright © 2006 39
Frank Vahid

Comparador de Magnitude
• O projeto do bloco operacional abaixo segue o mesmo princípio de
execução do exemplo no lápis e papel.
– Comece pela esquerda, compare cada par de bits, passe o resultado para a direita
– Ao circuito para cada par de bits, chamaremos de estágio.
– Cada estágio tem 3 entradas indicando resultados dos estados de maior ordem,
passando-os para os de mais baixa ordem

a3 b3 a2 b2 a1 b1 a0 b0

a b a b a b a b
Igt in_gt out_gt in_gt out_gt in_gt out_gt in_gt out_gt AgtB
Ieq in_eq out_eq in_eq out_eq in_eq out_eq in_eq out_eq AeqB
Ilt in_lt out_lt in_lt out_lt in_lt out_lt in_lt out_lt AltB

Estágio 3 Estágio 2 Estágio 1 Estágio 0


(a)

0 Igt a3a2a1a0 b3b2b1b0


AgtB
Digital Design 1 Ieq Comparador de Magnitude AeqB
Copyright © 2006 0 Ilt de 4 bits AltB 40
Frank Vahid
(b)
Comparador de Magnitude
a3 b3 a2 b2 a1 b1 a0 b0

a b a b a b a b
Igt in_gt out_gt in_gt out_gt in_gt out_gt in_gt out_gt AgtB
Ieq in_eq out_eq in_eq out_eq in_eq out_eq in_eq out_eq AeqB
Ilt in_lt out_lt in_lt out_lt in_lt out_lt in_lt out_lt AltB

Estágio 3 Estágio 2 Estágio 1 Estágio 0


• Cada estágio:
– out_gt = in_gt + (in_eq * a * b’)
• A>B se já foi determinado em um estágio de maior ordem, ou se estágio de maior ordem
for igual e nesse estágio a=1 e b=0
– out_lt = in_lt + (in_eq * a’ * b)
• A<B se já foi determinado em um estágio de maior ordem, ou se estágio de maior ordem
for igual e nesse estágio a=0 e b=1
– out_eq = in_eq * (a XNOR b)
• A=B se isso já foi determinada nos estágios de maior ordem e nesse estágio a=b também.
– O circuito que implementa cada estágio é simples (algumas portas lógicas)

Digital Design
Copyright © 2006 41
Frank Vahid

Comparador de Magnitude
• Como funciona? 1011 = 1001 ?
1=1 0 0 1 0 1 1
a3 b3 a2 b2 a1 b1 a0 b0

a b a b a b a b
0 0
Igt in_gt out_gt in_gt out_gt in_gt out_gt in_gt out_gt AgtB
Ieq=1 força esse 1 1
Ieq in_eq out_eq in_eq out_eq in_eq out_eq in_eq out_eq AeqB
0 0
estágio a fazer Ilt in_lt out_lt in_lt out_lt in_lt out_lt in_lt out_lt AltB

uma comparação Estágio 3 Estágio 2 Estágio 1 Estágio 0


(a)

1 1 0=0 1 0 1 1
a3 b3 a2 b2 a1 b1 a0 b0

a b a b a b a b
0 0
Igt in_gt out_gt in_gt out_gt in_gt out_gt in_gt out_gt AgtB
1 1
Ieq in_eq out_eq in_eq out_eq in_eq out_eq in_eq out_eq AeqB
0 0
Ilt in_lt out_lt in_lt out_lt in_lt out_lt in_lt out_lt AltB

Estágio 3 Estágio 2 Estágio 1 Estágio 0


Digital Design (b)
Copyright © 2006 42
Frank Vahid
Comparador de Magnitude
1 1 0 0 1>0 1 1
1011 = 1001 ? a3 b3 a2 b2 a1 b1 a0 b0 • O resultado final
aparecerá na
a b a b a b a b saída do bloco
0 1
Igt in_gt out_gt in_gt out_gt in_gt out_gt in_gt out_gt AgtB mais a direita.
1 0
Ieq in_eq out_eq in_eq out_eq in_eq out_eq in_eq out_eq AeqB
0 0
Ilt in_lt out_lt in_lt out_lt in_lt out_lt in_lt out_lt AltB
• O resultado
Estágio 3 Estágio 2 Estágio 1 Estágio 0 ficará pronto
(c) depois do atraso
1 1 0 0 1 0 1 1 de propagação
a3 b3 a2 b2 a1 b1 a0 b0 dos 4 blocos.

a b a b a b a b
0 1
Igt in_gt out_gt in_gt out_gt in_gt out_gt in_gt out_gt AgtB
1 0
Ieq in_eq out_eq in_eq out_eq in_eq out_eq in_eq out_eq AeqB
0 0
Ilt in_lt out_lt in_lt out_lt in_lt out_lt in_lt out_lt AltB

Estágio 3 Estágio 2 Estágio 1 Estágio 0


Digital Design (d)
Copyright © 2006 43
Frank Vahid

Exemplo do Comparador de Magnitude:


Mínimo de dois números
• Projete um componente operacional (circuito
combinacional) que aponte o menor de dois números de 8
bits.
– Solução: Precisaremos de um comparador de magnitude de 8-bits
e 8 MUXs 2:1
• Se A<B, faça passar A através do mux. Caso contrário, passe B.

11000000 01111111
MIN A B 8 8

8 8 8 8
A B

0 Igt
A B
AgtB
1 s
I1 I0 Min
C
1 Ieq Comparador de Magnitude AeqB 0 8-bit
0 Ilt de 8 bits AltB 2:1 mux 8
0
8 (b)
C
(a)
Digital Design 01111111
Copyright © 2006 44
Frank Vahid
4.6

Contadores
• Contador ascendente de N-bits:
Registrador de N-bits capaz de ser 01 Contador ascendente
cnt
incrementado de uma unidade ao seu tc
de 4 bits
C
próprio valor em cada evento de clock 4
– 0000, 0001, 0010, 0011, ...., 1110, 1111,
010 0001
0000
0101
0100
0011
0010
1110
1111
0001
0000
...
0000
– Observe o que acontece com a contagem
na passagem de 1111 para 0000
• Uma saída chamada de Terminal count, (tc), Contador ascendente
de 4 bits
fica igual a 1 enquanto 1111 logo antes da
cnt
“virada” para 0000 ld
Registrador de 4 bits
• Projeto interno
– Registrador, somador de uma unidade
4 4
(incrementador), e uma porta AND de N- +1
4
entradas para sinalizar tc 4
tc C

Digital Design
Copyright © 2006 45
Frank Vahid

Incrementador
• Projeto do Incrementador
– Poderíamos usar um somador ripple-carry com a entrada B
inicializada com 00...001
• Mas quando somamos 00...001 a outro número, os zeros à
esquerda do número “1” nos garantem que só necessitaremos
somar 2 bits por coluna.
– Usamos half-adders (somam 2 bits)
e não full-adders (somam 3 bits)

a3 a2 a1 a0 1
carries:
011
a b a b a b a b a3 a2 a1 a0
0011
unused HA HA HA HA +1
+ 1 co s3s2 s1s0
co s co s co s co s
0 010 0
co s3 s2 s1 s0
(b)
Digital Design (a)
Copyright © 2006 46
Frank Vahid
Incrementador
• Podemos construir Inputs Outputs
a3 a2 a1 a0 c0 s3 s2 s1 s0
incrementadores muito mais 0 0 0 0 0 0 0 0 1
0 0 0 1 0 0 0 1 0
rápidos usando o processo de 0 0 1 0 0 0 0 1 1
projeto de circuitos 0 0 1 1 0 0 1 0 0
0 1 0 0 0 0 1 0 1
combinacionais 0 1 0 1 0 0 1 1 0
– Monte uma tabela verdade 0 1 1 0 0 0 1 1 1
0 1 1 1 0 1 0 0 0
– Encontre a equação para cada 1 0 0 0 0 1 0 0 1
saída 1 0 0 1 0 1 0 1 0
• c0 = a3a2a1a0 1 0 1 0 0 1 0 1 1
1 0 1 1 0 1 1 0 0
• ... 1 1 0 0 0 1 1 0 1
• s0 = a0’ 1 1 0 1 0 1 1 1 0
– Resulta em um circuito menor e 1 1 1 0 0 1 1 1 1
1 1 1 1 1 0 0 0 0
mais rápido

Digital Design
Copyright © 2006 47
Frank Vahid

Exemplo de uso de contadores


• Relembrando o exemplo do Capítulo 2
– Necessitávamos de um componente que incrementasse as entradas xy
cada vez que o botão fosse pressionado: 00, 01, 10, 11, 00, 01, 10, 11,
00, ...
– Podemos usar um contador ascendente de 2-bits
• Assuma mode=1 por somente um ciclo de clock durante cada pressionar do botão
• Lembre-se: “Sincronizador do Pressionar de Botões” é um exemplo do Cap. 3.

mode
cnt 2-bit upcounter
tc c1c0
clk

x y

Digital Design
Copyright © 2006 48
Frank Vahid
Exemplo de aplicação do contador: Gerador de
clock de 1 Hz a partir de um Oscilador de 256 Hz
• Suponha que temos um
oscilador de 256 Hz, mas
queremos um sinal de
clock de 1 Hz
– 1 Hz significa 1 pulso por Contador ascendente
1
segundo cnt de 8 bits
– Podemos projetá-lo com osc
tc C
um contador ascendente (256 Hz) 8
de 8-bits, usaremos a p (não usado)
(1 Hz)
saída tc como pulso
• Conta de 0 a 255 (256
vezes), logo pulsa tc a
cada 256 ciclos

Digital Design
Copyright © 2006 49
Frank Vahid

Contador Decrescente
• Contador decrescente de
Contador decrescente de 4 bits
4 bits
– 1111, 1110, 1101, 1100, cnt
…, 0011, 0010, 0001, ld
Registrador de 4 bits
0000, 1111, …
– Contagem final = 0000
• Use uma porta NOR para 4 4
chegada a 0000 –1
4
– Necessita de um
decrementador (-1) – tc C 4
projeto semelhante ao
incrementador

Digital Design
Copyright © 2006 50
Frank Vahid
Contador Ascendente/Decrescente
• Pode contar em 4-bit up/down counter
ambos os sentidos
– Possui um dir
1 4-bit 2x 1 0
incrementador e um
4
decrementador
clr
– Use a entrada dir clr
cnt ld 4-bit register
para selecionar o
sentido de
contagem, 4 4 4 4
selecionando dir=0
4 –1 +1
no MUX 2:1
significa ascendente 4 4
1 2x 1 0
tc C

Digital Design
Copyright © 2006 51
Frank Vahid

Exemplo de aplicação do contador:


Sequenciador Luminoso
• Ilumina 8 leds da direita
para a esquerda, um por 1 cnt 3-bit up-counter
vez, um por segundo clk tc c2 c1 c0
• Use um contador (1 Hz)
ascendente de 3-bits para 00 10 010
unused
contar de 0 a 7
3x8 dcd i2 i1 i0
• Use um decodificador 3x8
d7 d6 d5 d4 d3 d2 d1 d0
para acender o led correto
• Obs.: Usamos um contador
lights
de 3-bits e um decodificador
3x8
– Por quê não um contador de
8-bits?
Digital Design
Copyright © 2006 52
Frank Vahid
Contador com Carga Paralela (L)
• Contador ascendente que
pode ser carregado com
um valor externo L 4
– Projetado usando-se Load
1 4-bit 2:1 0
MUXs 2:1
4
– Entrada “Load” seleciona:
entra valor incrementado cnt ld
4-bit register
ou valor externo (L)
– Entrada “cnt” habilita a
carga do registrador 4 4
interno, tanto para a carga 4 +1
paralela (Load=1) quanto
para contagem (Load=0). tc C
– A carga acontece
efetivamente na borda do
clock
Digital Design
Copyright © 2006 53
Frank Vahid

Contador com Carga Paralela (L)


1000
• Útil para gerar pulsos em tempos
4
múltiplos de um sinal de clock
• Exemplo: Gere um pulso a cada 9 ciclos
de clock ld L
• Precisaremos de um contador 1
descendente de 4-bits com carga cnt 4-bit down-counter
paralela
tc C
– Faça com a carga paralela seja 8 em clk
binário (1000) 4
– Use a saída tc (terminal count) para
recarregar
• Quando a contagem chegar a 0, no
próximo ciclo carregará 8.
– Por que carregar 8 e não 9? Porque o 0
está incluso na sequencia de contagem:
» 8, 7, 6, 5, 4, 3, 2, 1, 0 = 9 vezes

Digital Design
Copyright © 2006 54
Frank Vahid
Exemplo de aplicação de contadores
• No capítulo 2 usávamos um microprocessor para fazer a contagem
regressiva de 59 até 0 em binário.
• Podemos usar um contador descendente de 8-bits (ou de 7- ou 6-bits)
no lugar do microcontrolador, inicialmente carregado com 59 em binário
Happy
0 New
8 d0 Year
59 L c0 i0
d1
c1 i1 1
c2 i2 d2
2
ld c3 i3 d3 3
reset c4 i4
c5 i5
d58
c6 d59
cnt
c7
countdown d60
d61 58
clk 8-bit d62 59 fireworks
(1 Hz) down- tc 6x64
counter dcd d63
Digital Design
Copyright © 2006 55
Frank Vahid

Exemplo de aplicação de contadores:


Gerador de pulsos de 1 Hz a partir de um clock de 60 Hz
• Padrão da rede elétrica no
clr
Brasil = 60 Hz Contador ascendente
1 cnt
– Um dispositivo deverá converter de 6 bits
para um sinal pulsado de 1 Hz osc tc C
(60 Hz)
para contar os segundos
p
• Use um contador ascendente
de 6-bits para contar de 0 a
63
– Monte um circuito lógico
simples para detectar a (1 Hz)
chegada a 59 (60 vezes)
• Use esse sinal para zerar o
contador (ou carregá-lo com 0)
Digital Design
Copyright © 2006 56
Frank Vahid
Timer (Temporizador)
• Um tipo de contador usado para medir tempo
– Se sabemos a frequência de relógio do contador e a contagem, nós
sabemos o tempo transcorrido de um instante a outro.
• Exemplo: Calcule a velocidade de um carro usando dois sensores
– O primeiro sensor (a) limpa e inicializa o timer
– O segundo sensor (b) para o timer
– Assumindo que o clock seja de 1kHz, a saída do timer representa o tempo
transcorrido para o carro percorrer o trecho entre os dois sensores.
Conhecendo a distância podemos calcular a velocidade média.

clr=0

cnt=0 clr=0

Digital Design
Copyright © 2006 57
Frank Vahid

4.7

Multiplicador
• Podemos construir multiplicadores que imitam o processo
de multiplicação que usamos com lápis e papel.
– Observe que multiplicar o multiplicando por 1 é o mesmo que fazer
um AND do multiplicando com 1.

Digital Design
Copyright © 2006 58
Frank Vahid
Multiplicador
• Representação generalizada do processo de multiplicação
manual.

Digital Design
Copyright © 2006 59
Frank Vahid

Multiplicador
• Projeto do multiplicador – um
array de portas lógicas AND
a3 a2 a1 a0

b0
pp1

b1
pp2

0 0

b2
+ (5-bit)
pp3

00
A B
b3
+ (6-bit) *
P
pp4

0 00

+ (7-bit) Multiplicador
Digital Design
Copyright © 2006 p7..p0 60
Frank Vahid
4.8

Subtrator
• Podemos construir subtratores assim como construímos
somadores com o ripple-carry adder
– Imita o processo manual de subtração
– Empréstimo de colunas à esquerda: Full-Subtractor
• Para cada coluna teremos:
– Ts: Saída - solicita empréstimo à coluna seguinte (à esquerda)
– Te: Entrada do pedido de empréstimo vindo da coluna anterior (à direita);
Coluna 1 Coluna 2 Coluna 3 Coluna 4
0 0 1 10 0 1 0 Entradas Saidas
1 0 1 10 1 10 1 0 1 10 1 0 1 0 1 0
a b Te Ts S
- 0 1 1 1 - 0 1 1 1 - 0 1 1 1 - 0 1 1 1
0 0 0 0 0
1 1 1 0 1 1 0 0 1 1 0 0 1 1 1
a3 b3 a2 b2 a1 b1 a0 b0 Te 0 1 0 1 1
0 1 1 1 0
a b Te a b Te a b Te a b Te a3a2a1a0 b3b2b1b0 1 0 0 0 1
FS FS FS FS Subtrator de 4 bitsTe 1 0 1 0 0
Ts s Ts s Ts s Ts s Ts s3s2s1s0 1 1 0 0 0
1 1 1 1 1
Ts s3 s2 s1 s0
(b) (c)
Digital Design
Copyright © 2006 61
Frank Vahid

Exemplo de aplicação de subtratores:


Conversor de RGB para CMY
Cores “ADITIVAS” (emissores de luz)
• Representada como uma combinação (pesos)
de três cores: red, green, and blue (RGB)
– Considerando 8 bits para cada, uma cor seria
representada com 24 bits
• Branco: R=11111111,G=11111111,B=11111111
• Preto: R=00000000, G=00000000, B=00000000
• Outras cores: valores intermediários, Ex.:,
R=00111111, G=00000000, B=00001111 poderia
ser um tom de vermelho.
– Ideal para monitores de
computadores, que misturam
• Impressoras adotam um esquema
vermelho, verde e o azul para formar de cores oposto: “SUBTRATIVAS”
todas as cores. • Porque as tintas absorvem a luz
• Use cores complementares de RGB:
Ciano (absorve vermelho), reflete o
verde e o azul, Magenta (absorve o
verde) e amarelo (absorve o azul)
Yellow
Digital Design
Copyright © 2006 62
Frank Vahid
Exemplo de Aplicação de Subtratores:
Conversor de Cores RGB para CMY

R G B
• Impressoras devem 255 255 255
8 8 8
converter rapidamente RGB 8 8 8

em CMY
– C=255-R, M=255-G, Y=255-B - - -
– Use subtratores como
mostrado na figura ao lado. 8 8 8
C M Y

Digital Design
Copyright © 2006 63
Frank Vahid

Exemplo de Aplicação de Subtratores:


Conversor de Cores RGB para CMY
• Tente armazenar padrões de tintas
coloridas
– Solução “cara” para o sistema
– Imperfeições – misturando C, M, Y não
produzem uma boa impressão do preto
• Solução: Excluir a porção de preto
(ou cinza) da cor e imprimir essa
parte usando o cartucho de tinta
preta.
– Ex.: CMY de (250,200,200)=
(200,200,200) + (50,0,0).
• (200,200,200) é um cinza escuro –
busque no cartucho de tinta preta!
Digital Design
Copyright © 2006 64
Frank Vahid
Exemplo de Aplicação de Subtratores:
Conversor de Cores RGB para CMY
• Chame a parte preta de K R G B
8 8 8
– (200,200,200): K=200
• Calcule o mínimo de C, M, Y R G B
R GB t o CMY
– Use o componente MIN C M Y
projetado anteriormente, um
comparador e mux, para 8 8 8 8
calcular o valor de K C M Y
– Subtraia K dos valores de C, MIN
M, e Y 8
– Ex: Entrada (250,200,200)
MIN
produz como saída (50,0,0)
8
K

- - -
8 8 8 8
C2 M2 Y2 K
Digital Design
Copyright © 2006 65
Frank Vahid

Representação de Números Negativos:


Complemento a Dois

• Tanto números sem sinal quanto os negativos são


normalmente usados por CPUs para realizar cálculos.

• Representação usada para números negativos:


complemento de 2

– Permite fazer subtração usando o circuito de adição, com o uso


de um único componente para fazer adição ou subtração e não
um componente específico para cada operação!

Digital Design
Copyright © 2006 66
Frank Vahid
Operações em Complemento a Dois:
É só complementar bit a bit o operando e somar 1
• Exemplo:
– O complemento a dois de 011 é 100+1 = 101

Q: Qual o complemento a dois de 0101? A: 1010+1=1011

Q: Qual o complemento a dois de 0011? A: 1100+1=1101

• Exceto para os valores fora da faixa de representação em


complemento de 2 (-8 a 7 para números inteiros com 4 bits), a
operação é reversível.

Digital Design
Copyright © 2006 67
Frank Vahid

Subtrator (usando complemento a dois)


construído com um Somador
• Usando complemento a dois
A B
A – B = A + (-B)
= A + (complemento a dois de B) N-bit
= A + inverte_bits(B) + 1
• Construímos um subtrator A B 1
Somador cin
usando um somador e
invertendo (complementando)
os bits de B e somando 1 ao S

bit menos significativo


(colocando o Cin = 1).

Digital Design
Copyright © 2006 68
Frank Vahid
Somador/Subtrator
• Somador/Subtrator: a
entrada de controle
determina se realizaremos
uma soma ou uma
subtração
– Podemos usar MUXs 2:1,
onde a entrada sub deixa
passar B ou B’
– De forma alternativa,
poderíamos usar portas
lógicas XOR – se a entrada
sub for igual a 0, os bits de B
serão as entradas de um dos
operandos do somador; caso
contrário B’
Digital Design
Copyright © 2006 69
Frank Vahid

Estouro dos Limites de Representação (Overflow)


• Em algumas situações o resultado não pode ser
representado com uma quantidade fixa de bits.
– Ex.: Sejam dois operandos de 4-bit representados em complemento a
dois. Suponha ainda que desejamos somá-los: 0111+0001 (7+1=8).
Porém não conseguimos representar números maiores que 7 com 4
bits em complemento a dois.
• 0111+0001 = 1000 resposta errada, 1000 em complemento a dois é -8, e
não +8
– O nosso componente Somador/Subtrator deverá indicar se um
overflow ocorreu. Nesse caso o resultado produzido pelo componente
deverá ser descartado (ou não ser levado em consideração).

Digital Design
Copyright © 2006 70
Frank Vahid
Detectando Overflow: Método 1
• Contexto: soma de números em complemento de 2
• Podemos detectar overflow quando dois números com mesmo sinal
produzem uma soma com sinal diferente
– Note que se os bits de sinal dos operandos são diferentes, nunca ocorre
overflow, pois o resultado é um valor entre eles!
• Circuito combinacional muito simples e pode ser feito “externamente”
– overflow = a3’b3’s3 + a3b3s3’

Bit de sinal

0 1 1 1 1 1 1 1 1 0 0 0

+0 0 0 1 +1 0 0 0 +0 1 1 1

1 0 0 0 0 1 1 1 1 1 1 1
overflow overflow no overflow
(a) (b) (c)

Digital Design
Copyright © 2006 71
Frank Vahid

Detectando Overflow: Método 2


• Método “interno”: comparar o carry-in com o carry-out do bit negativo
• Circuito combinacional mais simples: overflow = c(n-1) XOR c(n)
Mesmo Sinal Mesmo Sinal Sinais diferentes
com overflow sem overflow sem overflow

0 1 0 0
1 ? ? ? 0 ? ? ? 0 ? ? ? 1 ? ? ?

+1 ? ? ? +0 ? ? ? +0 ? ? ? +0 ? ? ?

10 ? ? ? 01 ? ? ? 00 ? ? ? 01 ? ? ?

1 1
Se os 2 bits de carry forem diferentes, 1 ? ? ? 1 ? ? ?
ocorreu um overflow.
+1 ? ? ? +0 ? ? ?

11 ? ? ? 10 ? ? ?
Digital Design
Copyright © 2006 72
Frank Vahid
4.9

Unidade Lógica e Aritmética: ALU


• ALU: Componente que pode
executar qualquer uma das
várias operações aritméticas
(somar, subtrair, incremento,
etc.) e lógicas (AND, OR, etc.)
As operações são realizadas
com base nas entradas de
controle do componente.

• Suponha que queremos uma


calculadora multi-função que
não só adiciona e subtrai, mas
também incrementa, faça
ANDs, ORs, XORs, etc

Digital Design
Copyright © 2006 73
Frank Vahid

Calculadora Multifuncional sem ALU


DIP switches

Calculadoras multifuncionais usando 1


componentes em separado para cada 0

operação, e muxes. Problemas: muitos fios, 8 8

desperdício de energia e poder de A B


processamento (de todas as operações
poderíamos usar somente uma por vez). + Ð +1 AND OR XOR NOT
Wasted
power
8 8
8
8
8 8 8
8
A lot of wires
Opção mais simples: 1 0
x
0 1 2 3 4 5 6 7
s2
y 8-bit 8× 1
s1
z s0
8
e
Id
8-bit register
clk
CALC
8

LEDs

Digital Design
Copyright © 2006 74
Frank Vahid
ALU – Aritmetic & Logic Unit
• Projetos mais eficientes usam a ALU como componente base.
– O projeto de uma ALU usa um único somador para realizar as operações aritméticas,
e lógica adicional à frente das entradas A e B para realizar as demais operações.
• Esse bloco operacional é um circuito combinacional chamado “arithmetic-logic extender”
– O bloco operacional AL-extender modifica as entradas “A” e “B” para valores
intermediários “IA” e “IB”, de forma que a operação desejada “xyz” apareça na saída
“S” do somador (que, em alguns casos, apenas “deixa passar” uma das entradas,
somando-a com zero).

Digital Design
Copyright © 2006 75
Frank Vahid

Arithmetic-Logic Extender de uma ALU

• xyz=000: Queremos S=A+B: faça passar A até IA, B até IB, e faça cin=0
• xyz=001: Queremos S=A-B: faça passar A até IA, B’ até IB, e faça cin=1
• xyz=010: Queremos S=A+1: faça passar A até IA, faça IB=0, e faça cin=1
• xyz=011: Queremos S=A: faça passar A até IA, faça IB=0, e faça cin=0
• xyz=100: Queremos S=A AND B: faça IA=A*B, B=0, e cin=0
• Demais operações: faça de forma semelhante
• Baseado no que foi dito acima: produza um circuito lógico para IA(x,y,z,A,B) e
IB(x,y,z,A,B) para cada caso, e produza outro circuito lógico para cin(x,y,z), para
completar o componente do bloco operacional (AL – Extender).
Digital Design
Copyright © 2006 76
Frank Vahid
AL-Extender com bits em paralelo (A, B...)

Digital Design
Copyright © 2006
Frank Vahid

4.10

Banco de Registradores (Register File)


• Banco de registradores 32
C
MxN esse componente C 8
d0 load reg0 Mux enorme
proporciona acesso d0 load reg0 T 32
i0
eficiente a M 4×× 16
24
8
i0 a

registradores de N-bits 4 d1
a0
Fanout
load reg1
alto A
32-bit
8-bit
1 x1
4×16
– Se temos muitos i0
i1
registradores, mas só a1
i3-i0
i1 8
dd DD
d2 load reg2
precisamos acessar um de I 8 32
cada vez, um banco de i2
8 congestão
registradores é mais eficiente d3 load
d15 loadreg3
reg15 M
– Ex: Display do carro com mais e
e
load i3i15
funções (M=16 funções) e load 32 8
s1s0
s3-s0
maior precisão (N=32 bits) x y

• Se seguirmos com o projeto como vimos até aqui, resulta um número muito
grande de fios, e um MUX muito grande (e lento!)
Digital Design
Copyright © 2006 78
Frank Vahid
Banco de Registradores
• Em vez disso, queremos um componente que tenha uma única entrada
de dados e uma única saída de dados, e nos permita especificar em
qual registrador desejamos escrever e/ou ler.
32 32
W_data R_data a

4 4
W_addr R_addr

W_en R_en
16×32
register file

Digital Design
Copyright © 2006 79
Frank Vahid

Diagrama de Tempo de um Banco de Registradores


• Pode escrever em cycle 1 cycle 2 cycle 3 cycle 4 cycle 5 cycle 6
clk
um registrador e 1 2 3 4 5 6

ler de um W_data 9 22 X X 177 555

registrador em W_addr 3 1 X X 2 3
cada período de
W_en
clock.
R_data Z Z Z 9 Z 22 9 555
– Pode ser o
mesmo R_addr X X 3 X 1 3
registrador R_en

0: ? 0: ? 0: ? 0: ? 0: ? 0: ? 0: ?
32 32
W_data R_data
1: ? 1: ? 1: 22 1: 22 1: 22 1: 22 1: 22
2: ? 2: ? 2: ? 2: ? 2: ? 2: 177 2: 177
2 2
W_addr R_addr 3: ? 3: 9 3: 9 3: 9 3: 9 3: 9 3: 555

W_en R_en
4x32
register file

Digital Design
Copyright © 2006 80
Frank Vahid
Exemplo de uso do Banco de Registradores:
Display de Funções de um Carro
• Usaremos um register 32
C OLD design
file com 16 registradores
d0 load reg0 huge mux
de 32-bit que pode ser 32
4× 16 i0
escrito pela CPU do

mirror display
32

To the above-
32

central computer
C o
t o much D

From the car′s


W_data
fanout R_data32-bit
carro e mostrado 4 WA 4
16x1
4
W_addr R_addr
simultaneamente no i3-i0
load
W_en R_en d D
display. 16×32 1 32
register file RA
o
c ngestion
d15 load reg15
e
i15
load 32 s3-s0

Digital Design
Copyright © 2006 81
Frank Vahid

Você também pode gostar