Cap 4
Cap 4
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)
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
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
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
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
• 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
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
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)
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
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
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
os 4 registradores
i2
8
d3 load reg3 M
e
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
Q Q Q Q Q3 Q2 Q1 Q0
Q3 Q2 Q1 Q0
(a) (b)
Digital Design
Copyright © 2006 17
Frank Vahid
?
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
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
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
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
Digital Design
Copyright © 2006 23
Frank Vahid
Digital Design
Copyright © 2006 25
Frank Vahid
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
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.
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
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.
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
co s7s6s5s4 s3s2s1s0
(a) (b)
Digital Design
Copyright © 2006 33
Frank Vahid
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
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
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
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
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
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
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
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
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
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
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
- - -
8 8 8 8
C2 M2 Y2 K
Digital Design
Copyright © 2006 65
Frank Vahid
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
Digital Design
Copyright © 2006 67
Frank Vahid
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
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
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
Digital Design
Copyright © 2006 73
Frank Vahid
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
• 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
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
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
Digital Design
Copyright © 2006 81
Frank Vahid