Вы находитесь на странице: 1из 15

4.

Introdução
• Capítulos 2 e 3: Projeto de circuitos combinacionais e sequenciais
– Portas lógicas, multiplexadores, decodificadores, registradores, e
controladores
Sistemas Digitais • Nesse capítulo: circuitos mais complexos que poderão ser integrados
na formação de microprocessadores, microcontroladores dedicados
Capítulo 4: ou não.
– Componentes de um Caminho de Dados, componentes responsáveis
Componentes de Caminhos de por modificar (transformar) dados, ou então armázena-los de diversas
Dados formas.
Slides to accompany the textbook Digital Design, First Edition, • Poderemos combinar tais blocos operacionais de forma a montar um datapath
by Frank Vahid, John Wiley and Sons Publishers, 2007. (caminho de dados).
http://www.ddvahid.com
• No próximo capítulo combinaremos controladores e datapaths para
Prof. Luciano C. A. Pimenta construir pequenos processadores, seguindo uma forma de projeto
Tradução e Adaptação para o Português conhecida como projeto RTL.
Prof. Ricardo de Oliveira Duarte
Copyright © 2007 Frank Vahid DELT – EE – UFMG
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,
subject to keepingDigital
this copyright
Design notice in place and unmodified. These slides may be posted as unanimated pdf versions on publicly-accessible course websites.. PowerPoint source (or pdf Digital Design
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.
Copyright © 2006 1
Instructors may make printouts of the slides available to students for a reasonable photocopying charge, without incurring royalties. Any other use requires explicit permission. Instructors
Copyright © 2006 2
Franksource
may obtain PowerPoint Vahid or obtain special use permissions from Wiley – see http://www.ddvahid.com for information. Frank Vahid Note: Slides with animation are denoted with a small red "a" near the animated items

4.2

Registradores Registrador com Carga Paralela


• Armazenam dados. Encontrados em qualquer caminho b
Combinational n1
x
• Adicione MUXs 2:1 antes de cada entrada D de cada Flip-flop do
de dados. logic
registrador
n0
• Registrador do Cap. 3: Carregados a cada ciclo de CLK s1 s0 • A entrada Load do Registrador seleciona qual a entrada do MUX.
State register
– Úteis na implementação de FSM – armazena o estado clk – O próximo estado receberá o estado atual ou então uma nova palavra
codificado (nova carga) I3 I2 I1 I0
a – Outros usos: podemos querer que ele carregue somente 1 0 1 0 1 0 1 0
em certos ciclos. load 2⋅ 1 I3 I2 I1 I0
load
D D D D
carga I3 I2 I1 I0 Q3 Q2 Q1 Q0
I3 I2 I1 I0 Q Q Q Q
4-bit register
reg(4) Q3 Q2 Q1 Q0
D D D D (a) (c)
Q Q Q Q Q3 Q2 Q1 Q0
clk I3 I2 I1 I0 I3 I2 I1 I0
load = 0

load = 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
Q3 Q2 Q1 Q0

Registrador simples faz a carga a cada ciclo de Clk D D D D D D D D

Q Q Q Q Q Q Q Q
Digital Design Como modificá-lo para fazer a carga somente em certos Digital Design Q3 Q2 Q1 Q0 Q3 Q2 Q1 Q0
Copyright © 2006 3 Copyright © 2006 4
Frank Vahid Ciclos de Clk? Frank Vahid
(b)

Exemplo de uso de Registradores Exemplo do uso de Registradores


a3 a2 a1 a0
clk
1 2 3 4 5
given

(a)
1 ld I3 I2 I1 I0
• Esse exemplo mostra como clk R0
a3..a0 1111 0001 1010

registradores carregam Q3 Q2 Q1 Q0
R0 ???? 1111 0001 1010 1010 1010
dados simultaneamente em
um mesmo ciclo de clock. R1 ???? ???? 1111 0001 1010 1010

– Observe que todas entradas de R2 ???? ???? 0000 1110 0101 0101
carga (ld) estão em “1” (não 1 ld I3 I2 I1 I0 1 ld I3 I2 I1 I0 a3 a2 a1 a0
–>1111 1111–>0001 0001–>1010 1010 1010 1010
necessariamente deveriam R1 R2
1 ld I3 I2 I1 I0
???? R0 1111 R0 0001 R0 1010 R0 1010 R0 1010 R0
estar – isso é só um exemplo!!) Q3 Q2 Q1 Q0 Q3 Q2 Q1 Q0 clk R0
Q3 Q2 Q1 Q0 (b)

???? ???? ???? ???? 1111 0000 0001 1110 1010 0101 1010 0101
R1 R2 R1 R2 R1 R2 R1 R2 R1 R2 R1 R2
1 ld I3 I2 I1 I0 1 ld I3 I2 I1 I0
R1 R2
Q3 Q2 Q1 Q0 Q3 Q2 Q1 Q0

Digital Design Digital Design


Copyright © 2006 5 Copyright © 2006 6
Frank Vahid Frank Vahid
Exemplo de uso de Registradores com Entrada Exemplo de uso de registrador: Display de
Load: Balança Eletrônica histórico de temperaturas
• A balança tem dois mostradores • Exemplo dado no capítulo 3
– Peso atual – Um temporizador gera um pulso a cada hora
– Peso gravado Balança Armazenador – Anteriormente usado com um clock. Uma melhor alternativa de
de pesos
– Útil para se comparar o peso de 0 0 1 01 projeto seria usar um oscilador como sinal de clock e usar
um item com o peso de outro registradores com entradas ld, ligados a um circuito gerador de
item Armazenar
b 1 I3 I2 I1 I0 a
pulsos temporizadores.
3 pounds
2 load
• Usaremos o registrador para Peso atual clk
00 1 1
Q3 Q2 Q1 Q0
armazenar o peso 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
– Pressionando o botão faz com I4 Q4 I4 Q4 I4 Q4
t4 I4 Q4 I4 Q4 I4 Q4
que o peso atual seja gravado no x4
t3
I3
I3
Q3
Q3
I3
I3
Q3
Q3
I3
I3
Q3
Q3
3 pounds I2 Q2 I2 Q2 I2 Q2
registrador Peso gravado
x3
t2 I2 Ra Q2 I2 Rb Q2 I2 RcQ2
x2 I1 Q1 I1 Q1 I1 Q1
t1 I1 Q1 I1 Q1 I1 Q1
– O peso armazenado fica sempre x1
t0
I0
I0
Q0
Q0
I0
I0
Q0
Q0
I0
I0
Q0
Q0
mostrado no display "peso x0
ld ld ld
Clk Ra Rb Rc
gravado", mesmo quando osc C
C TemperatureHistoryStorage
apresentam peso novo aparece a timer Nova linha TemperatureHistoryStorage
no display “peso atual”.
Digital Design Digital Design
Copyright © 2006 7 Copyright © 2006
Frank Vahid Frank Vahid 8

Exemplo de uso de Registrador: Display de painel Exemplo de uso de Registradores: Tabuleiro de


de carro Damas Computadorizado
• Cada registrador LED lit LED
8 retém valores para
1
uma coluna de
0
a
Notação simplificada LEDs.
1
00001010 – Nível lógico 1
C 8 Carregada no evento acende o LED 0
d0 load reg0 T De Clock • Um Microprocessor 0
• Exemplo apresentado no carrega um
2⋅ 4 i0
cap.2: Quatro funções 8 0
(valores) diferentes… 0 1 8-bit registrador por vez.
d1 load reg1 A 1
a0 4×1
• Para reduzir o no de fios: i0 00001010 – Ocorre rápido o
i1 suficiente que um 0
Computador de bordo 1 i1 8
escreve somente 1 valor por a1
d2 load reg2 d D ser humano vê o R7 R6 R5 R4 R3 R2 R1 R0 Q
R0 10100010
I 8
cada vez, (carregado) de uma tabuleiro se I load
só vez nos 4 registradores i2
modificando por d7 d6 d5 d4 d3 d2 d1 d0
8 3⋅ 8 decoder from from
– No cap. 2 precisávamos de: inteiro como se 8 e i2 i1 i0
d3 load reg3 M microprocessor decoder
8+8+8+8 = 32 fios e D
1 fosse de uma só (b)
– Agora: 8 +2+1 = 11 fios load i3 s1 s0 microprocessor
8 vez
Digital Design Digital Design (a)
Copyright © 2006 x y 9 Copyright © 2006 10
Frank Vahid Frank Vahid

Exemplo de uso de Registradores: Tabuleiro de


Registradores de Deslocamento (Shift Registers)
Damas Computadorizado Conteúdo do Registrador

LED
• Deslocamento para a Direita (Shift right) 1 1 0 1 Antes do deslocamento
Para a direita
0
lit LED
– Move cada bit uma posição para a direita. a

Conteúdo do
0 1 1 0
– Introduz um “0” no bit (Flip-Flop) mais a Registrador
esquerda – mesmo que o bit mais significativo Depois do deslocamento
Para a direita

Q: Faça um shift para a direita em 1001, mostrando o valor no


registrador após a cada shift. a

A: 1001 (original) • Implementação: Conecte cada


R7 R6 R5 R4 R3 R2 R1 R0
10100010 10100010 10100010 10100010 0100 saída de um flip-flop a entrada do
01000101 01000101 01000101 01000101 flip-flop vizinho
0010 a
D 10100010 010000101 10100010 010000101 10100010 010000101 10100010 010000101 shr_in
i2,i1,i0 000 (R0) 001 (R1) 010 (R2) 011 (R3) 100 (R4) 101 (R5) 110 (R6) 111 (R7) 0001
e
0000
clk

Digital Design Digital Design Shift Lógico para


Copyright © 2006
Frank Vahid
11 Copyright © 2006
Frank Vahid a Direita 12
Registradores de Deslocamento (Shift Registers) Registradores Circulares (Rotate Shifters)
• Para permitir que um registrador desloque (shift) ou não
(retenha o dado armazenado) necessitamos de MUXs 2:1 1 1 0 1
Conteudo do registrador
Antes do shift para a direita
– shr: igual a “0” significa reter, “1”significa deslocar (shift) • Rotação para a direita:
Conteudo do registrador
– shr_in: valor a ser deslocado (shift in) Assim como o 1 1 1 0
Após o shift para a direita
• Pode ser 0, ou 1 deslocamento para a direita,
• Obs.: Poderíamos facilmente projetar registradores de deslocamento entretanto o bit mais a
capazes de deslocarem um bit para esquerda. esquerda passará a ser o bit
shr_in

shr 1 0 1 0 1 0 1 0
shr=1
10 10 10 10
mais a direita no evento de
2⋅ 1 2⋅ 1
clock.
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 Digital Design
Copyright © 2006 Q3 Q2 Q1 Q0 13 Copyright © 2006 14
Frank Vahid Frank Vahid
(c)

Exemplo de aplicação do Registrador de


Deslocamento: Display de Carros Registradores Multifuncionais
es

C
central computer

8
From the car's

• Exemplo anterior : 8 d0 load


• Registradores podem ser projetados
w ir

reg0 T
mirror display
To the above

2⋅ 4 i0
8

+2+1 = 11 fios da a0
d1 load reg1 A
8-bit
4⋅ 1
para serem multifuncionais
11

i0
i1

CPU do carro para os a1


i1
d2 load reg2 I
8
d
8
D
– Carregar, Deslocar, Zerar (Carregar com 0s) Funções:
4 registradores 8
i2

– E reter os valores armazenados.


e
d3 load reg3 M
s1 s0 Operação
responsáveis por load i3 s1 s0

• Facilmente projetados com o auxílio de 0 0 Manter o valor atual


8

exibir os valores no
x y

0 1 Carga paralela
display
Obs.: essa linha é 1 bit, rao invés de 8 bits como antes
x y
MUXs 1 0 Deslocar para a direita
c
– Queremos um shr_in – Conecte cada entrada do MUX de forma 1 1 Carga 0 no registrador
d0 shr reg0
número menor de
T
s1 s0 adequada para implementar a função
fios. 2⋅ 4
8
i0 desejada.
shr_in 4×1 shr_in I3 I2 I1 I0
shr reg1
• Usamos shift registers d1 A
a0 i0 0 0 0 0
i1
– Fios: 1+2+1=4 a1 i1 8 s1 3 2 1 0 3210 3210 3210
shr_in d D I3 I2 I1 I0
– A CPU do carro d2 shr reg2 I 8 s0 4⋅ 1 shr_in
s1
envia um valor (bit) i2 D D D D s0
a cada período de 8 Q3 Q2 Q1 Q0
shr_in
shr reg3 Q Q Q Q
clock e d3 M
Digital Design shift i3 Digital Design (b)
Copyright © 2006 Copyright © 2006 Q3 Q2 Q1 Q0
8 15 16
Frank Vahid Frank Vahid (a)

Registradores Multifuncionais com Entradas de


Registradores Multifuncionais
Controle Separadas
ld shr shl Operação s1 s0 Operação
0 0 0 Manter o valor atual 0 0 Manter o valor atual
s1 s0 Operação 0 0 1 Shift left 0 1 Carga paralela
0 0 Manter o valor atual 0 1 0 Shift right 1 0 Desloca para a Direita
0 1 Carga paralela 0 1 1 Shift right – shr has priority over shl
1 1 Desloca para a Esquerda
1 0 0 Carga paralela
1 0 Desloca para a Direita 1 0 1 Carga paralela – ld tem prioridade
1 1 Desloca para a Esquerda 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 I3 I2 I1 I0
shr_in combi- s1 shl_in
Entradas Saídas s0 shl_in

3210 3210 3210 3210


shl_in

shl_in
shr_in
I3 I2 I1 I0
ld
0
0
shr
0
0
shl
0
1
s1
0
1
s0
0
1
Operação
Manter o valor
Shift left
shr

shl ?
national
circuit Q3 Q2 Q1 Q0

Q3 Q2 Q1 Q0
0 1 0 1 0 Shift right
D D D D s1 0 1 1 1 0 Shift right
s0
1 0 0 0 1 Carga paralela a

Q Q Q Q Q3 Q2 Q1 Q0 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
Q3 Q2 Q1 Q0 a
(a) (b) s0 = ld’*shr’*shl + ld
a
Digital Design Digital Design
Copyright © 2006 17 Copyright © 2006 18
Frank Vahid Frank Vahid
Tabela de Operações de Registradores Processo de Projeto de Registradores
• As operações que um Registrador é capaz de executar são usualmente • Podemos projetar registradores multifuncionais com as
exibidas na forma de uma tabela compacta.
– X significa mesma operação se o valor é 0 ou 1
operações desejadas executando somente 4 passos:
• 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 Shift left
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 Digital Design


Copyright © 2006 19 Copyright © 2006 20
Frank Vahid Frank Vahid

Exemplo de Projeto de Registradores Exemplo de Projeto de Registradores


s2 s1 s0 Operação
• Projetar registrador com as operações: 0
0
0
0
0
1
Manter o valor
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 I3 I2 I1 I0
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 shl I3 I2 I1 I0
s2
1 1 1 Manter o valor s1 shl_in
ld circuito s0 shl_in
5 operações: → Necessitamos de um In Combina-
1 0 Da saída
set
cional Q3 Q2 Q1 Q0
a MUX 8:1 clr
s2 Qn-1
s1 7 6 5 4 3 2 1 0 Q3 Q2 Q1 Q0
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 Passo 4: Mapeamos as entradas de


Entradas Saídas Entradas Saídas
controle clr set ld shl s2 s1 s0 Operação
controle clr set ld shl s2 s1 s0 Operação
s2 = clr’*set 0 0 0 0 0 0 0 Manter o valor
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 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 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 0 1 X X 1 0 0 Set to all 1s
Digital Design 1 X X X 0 1 1 Clear to all 0s Digital Design 1 X X X 0 1 1 Clear to all 0s
Copyright © 2006 21 Copyright © 2006 22
a a
Frank Vahid Frank Vahid

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


Somadores o processo de projeto de circ. Combinacionais?
• Tabelas verdade gigantes
• Soma dois números binários de N-bits Entradas Saídas
a1
Inputs
a0 b1 b0 c
Outputs
s1 s0
a1 a0 b1 b0 c s1 s0 – Um somador de 2-bits apresenta a tabela 0 0 0 0 0 0 0
– Um somador de 2-bits: soma dois 0 0 0 0 0 0 0 verdade mostrada ao lado 0 0 0 1 0 0 1
0 0 0 1 0 0 1 0 0 1 0 0 1 0
números de 2-bits, produzindo como 0 0 1 0 0 1 0 • Possui 2(2+2) = 16 linhas 0 0 1 1 0 1 1
0 1 0 0 0 0 1
saída um resultado com 3-bits 0 0 1 1 0 1 1 – Um somador de 8-bits: 2(8+8) = 65,536 linhas 0
0
1
1
0
1
1
0
0
0
1
1
0
1
0 1 0 0 0 0 1
– Ex.: 01 + 11 = 100 (1 + 3 = 4) 0 1 0 1 0 1 0 – 16-bits: 2(16+16) = ~4 bilhões de linhas 0
1
1
0
1
0
1
0
1
0
0
1
0
0
0 1 1 0 0 1 1 • Tabelas verdade enormes com vários 1s/0s 1 0 0 1 0 1 1
• Podemos projetá-lo usando o 0 1 1 1 1 0 0
produzem circuitos enormes.
1
1
0
0
1
1
0
1
1
1
0
0
0
1
1 0 0 0 0 1 0 1 1 0 0 0 1 1
processo de projeto de circuitos 1 0 0 1 0 1 1 – O gráfico mostra o crescimento do número 1
1
1
1
0
1
1
0
1
1
0
0
0
1
combinacionais (cap. 2), entretanto 1 0 1 0 1 0 0 de transistores para um somador de N-bits 1 1 1 1 1 1 0
1 0 1 1 1 0 1 implementado em uma ferramenta de 10000
torna-se ineficiente para um número 1 1 0 0 0 1 1 síntese (Ex.: Quartus II)
Transistores

8000
elevado de bits. 1 1 0 1 1 0 0 Q: Qual seria o número de transistores para um 6000
1 1 1 0 1 0 1
– Por que? 1 1 1 1 1 1 0
somador de 16 bits? t 4000
a A: 1000 transistores para N=5, para cada incremento de
N em uma unidade. Logo: transistores = 1000*2(N-5). 2000
Portanto, para N=16, transistores = 1000*2(16-5) = 0
1 2 3 4 5 6 7 8
1000*2048 = 2,048,000 !!!
Digital Design Digital Design N
Copyright © 2006 23 Copyright © 2006 24
Frank Vahid Frank Vahid
Método alternativo de se projetar um Somador Método alternativo de se projetar um Somador
• Reproduzir como • Projete um 1 1 0
faríamos uma soma componente para A: 1 1 1 1
com lápis e papel. B: + 0 1 1 0
0 1 0 1 1 1 cada coluna
• Somamos uma A: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 – Um componente que
coluna por vez, B: + 0 1 1 0 + 0 1 1 0 + 0 1 1 0 + 0 1 1 0
a
some os bits
a

começando da daquela coluna e que


1 0 1 0 1

coluna mais a gere um bit (carry 1 1 0

direita. 1 0 1 1 0 1 1 0 1 0 1
bit) para a coluna
A: 1 1 1 1
– Fazemos a soma dos seguinte.
elementos da coluna + B: 0 1 1 0
e produzimos (ou
não) um transporte b a ci b a ci b a ci b a
(carry bit) para a co s co s co s co s
coluna seguinte. 1
0 1 0 1 SOMA

Digital Design Digital Design


Full-adders Half-adder
Copyright © 2006 25 Copyright © 2006 26
Frank Vahid Frank Vahid

Half-Adder (Meio Somador) Full-Adder (Somador Completo)


1 1 0 1 1 0
• Half-adder: Soma 2 bits, produz como • Full-adder: Soma 3 bits, produz 2
sinais de saída a soma e o carry bit A: 1 1 1 1
saídas: Soma e o Carry-bit A: 1 1 1 1

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

projeto de circuitos combinacionais b a ci b a ci b a ci b a no capítulo 2 b a ci b a ci b a ci b a


co s co s co s co s co s co s co s co s
Entradas
I Saídas Passo1: Identifique a função
1 1
a b co s 0 1 0 1 SOMA 0 1 0 1 SOMA
Passo1: Identifique a função 0 0 0 0 Inputs Outputs
0 1 0 1 a b ci co s
Passo 2: Converta em equações
1 0 0 1
0 0 0 0 0 co = a’bc + ab’c + abc’ + abc
1 1 1 0 Passo 3: Implemente o circuito
0 0 1 0 1 co = a’bc +abc +ab’c +abc +abc’ +abc a b ci
Passo 2: Converta em equações 0 1 0 0 1 co = (a’+a)bc + (b’+b)ac + (c’+c)ab
0 1 1 1 0 co = bc + ac + ab
co = ab
1 0 0 0 1
s = a’b + ab’ (mesmo que s = a xor b) a b
1 0 1 1 0
s = a’b’c + a’bc’ + ab’c’ + abc
1 1 0 1 0
a b s = a’(b’c + bc’) + a(b’c’ + bc)
1 1 1 1 1
s = a’(b xor c)’ + a(b xor c)
Passo 3: Implemente o circuito Half-adder s = a xor b xor c
co s Full
Digital Design Digital Design adder
Copyright © 2006 co s 27 Copyright © 2006 28
Frank Vahid Frank Vahid co s

Ripple-Carry Adder Ripple-Carry Adder


• Usando como elementos base o meio somador (half-adder) e o • Usando um full-adder ao invés de um half-hadder para
somador completo (full-adder), podemos construir um somador de N produzir o bit menos significativo da soma, nos proporcionará
bits como se estivéssemos fazendo uma soma com lápis e papel.
incluir mais um sinal de entrada o bit “carry in”
• Esse circuito é chamado ripple-carry adder
– Será útil futuramante quando conectarmos pequenos somadores para
– 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.
formar somadores maiores.
• 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 a esquerda da figura abaixo.
a3 b3 a2 b2 a1 b1 a0 b0 ci
– Pode ser facilmente estendido para qualquer tamanho (qualquer número de
bits)
a b ci a b ci a b ci a b ci a3 a2 a1 a0 b3 b2 b1 b0
a3 b3 a2 b2 a1 b1 a0 b0
FA FA FA FA 4-bit adder ci

a b ci a b ci a b ci a b a3 a2 a1 a0 b3 b2 b1 b0 co s co s co s co s co s3 s2 s1 s0

FA FA FA HA 4-bit adder
co s3 s2 s1 s0 co s3 s2 s1 s0
co s co s co s co s (b)
(a)

co s3 s2 s1 s0
Digital Design (a) (b) Digital Design
Copyright © 2006 29 Copyright © 2006 30
Frank Vahid Frank Vahid
Funcionamento do Ripple-Carry Adder Funcionamento do Ripple-Carry Adder
0 00 1 0 0 101 1 1
0 0111+0001
000 00 0 000 0 0 (a resposta deverá ser 01000)
0 a b ci a b ci a b ci a b ci
FA FA FA FA
a b ci a b ci a b ci a b ci co s co s co s co s
FA FA FA FA Considere que todas as entradas 0 1 1
co1 Saídas após 4ns (2 FA delays)
Inicialmente são todas iguais a 0 0 0 1 0 0
co s co s co s co s (b)
0 0 0 0 00 1 01
0 101 1 1
0
0 0 0 0 0 a b ci a b ci a b ci a b ci
FA FA FA FA
000 100 100 1 1 co s co s co s co s
0 0111+0001 1 1 1 a
(a resposta deverá ser 01000) co2 Saídas após 6ns (3 FA delays)
0 0 0 0 0
a b ci a b ci a b ci a b ci (c)
0 00
1 1 0 1 101 1 1
a
FA FA FA FA 0

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

Digital Design
Resposta Errada! A soma só fica pronta após o último carry-bit Digital Design
0 1 0
(d)
0 0 Saídas após 8ns (4 FA delays)
Copyright © 2006 propagar-se através do FA (Full-Adder) mais à esquerda! 31 Copyright © 2006 A saída correta só fica pronta após um tempo de propagação de 32
Frank Vahid Frank Vahid
Tempo de soma proporcional ao número de FAs. 4 FA delays

Cascateando Somadores para produzir Exemplo de uso de um Somador: Uma calculadora que
só faz somas construída com dois DIP-Switchs e LEDs
Somadores maiores
• Objetivo: Projetar uma unidade somadora, capaz de somar dois
números de 8 bits, gerados a partir de DIP-Switchs.
– DIP switch: chave que permite a passagem de corrente (1) ou não (0).
– Solução: Um somador ripple-carry de 8-bits
a7a6a5a4 b7b6b5b4 a3a2a1a0 b3b2b1b0
DIP switches

1
a3a2a1a0 b3b2b1b0 a3a2a1a0 b3b2b1b0 a7.. a0 b7.. b0 0

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

co s3s2s1s0 co s3s2 s1s0 co s7.. s0 a


a7..a0 b7..b0

8-bit carry-ripple adder ci 0


co s7s6s5s4 s3s2 s1s0
co s7..s0
(a) (b)

CALC

Digital Design Digital Design LEDs


Copyright © 2006 33 Copyright © 2006 34
Frank Vahid Frank Vahid

Exemplo de uso de um Somador: Uma calculadora que Exemplo de aplicação de um Somador:


só faz somas construída com dois DIP-Switchs e LEDs Balança com compensação de peso (pino de tara)
• A fim de evitar que valores intermediários possam provocar saídas • Valores para compensação variando de 0-7 Kg
incorretas, devemos incluir um registrador na saída do somador. – Para compensar balanças desreguladas (pino de tara).
– Na realidade o que acontece é que os LEDs piscariam muito rapidamente
– Usaremos um somador ripple-carry de 8-bits
(imperceptível para o ser humano detectar) -- mas o princípio de armazenar as
saídas para evitar que valores espúrios sejam lidos por dispositivos externos (que 7
0
1
Sensor de
normalmente perceberão essas mudanças) se aplica a essa situação.
peso 6 2
DIP switches
5 3
4
1
0 01000010 0 0 0 0 0 010
000

a7..a0 b7..b0

Somador de 8 bits ci 0 a
a7..a0 b7..b0

8-bit adder ci 0 co s7..s0

co s7..s0

1 ld
e
ld clk
01000010
display register
01000100 Ajuste de
Pesos
8-bit register
clk
CALC
Digital Design Digital Design
Copyright © 2006 35 Copyright © 2006 Para o display 36
Frank Vahid LEDs Frank Vahid
4.4 Exemplo de Aplicação com Shifter: Um conversor de
Deslocadores (Shifters) temperaturas (de graus Celsius para Fahrenheit) Aproximado
• Deslocamentos (por ex.: deslocando 0011 para a esquerda resulta em
0110) , Isso é útil para:
– Manipular bits • Faça um circuito que converta uma temperatura representada com 8-bits
– Converter dados da forma serial para paralelo (lembre do exemplo do em graus Celsius em uma temperatura com 8-bits em Fahrenheit
circuito de exibição de funções de um carro no painel do veículo) – F = C * 9/5 + 32
– 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)) – Approximate: F = C*2 + 32
– Shift right once mesmo que dividir por 2 i3 i2 i1 i0 – Usaremos um deslocador para esquerda: F = left_shift(C) + 32

i3 i2 i1 i0 inR
i3 i2 i1 i0 inL
201 201 201 201 C
in *2
shL s0 00001100 (12) 8 a

01 01 01 01 shR s1
in
sh
a <<1 0 (shift in 0)
<<1
q3 q2 q1 q0 q3 q2 q1 q0 8 00100000 (32)
00011000 (24) 8
Símbolo Deslocador Shifter with left
q3 q2 q1 q0
Para Esquerda shift, right shift, 8-bit adder
Shifter with left and no shift
Digital Design
shift or no shift
Digital Design 8
Copyright © 2006
(a)
37 Copyright © 2006 00111000 (56) 38
Frank Vahid Frank Vahid F

Exemplo de Shifters: Circuito que calcula média de


Barrel Shifter i3 i2 i1 i0

temperaturas 01 01 01 01
in
• Um deslocador que pode deslocar os
• Quatro registradores bits de entrada de qualquer quantidade.
sh
0000111 (7) 001000 (8) 001100 (12) 001111 (15)
armazenam um histórico de T – 4-bit barrel left shift pode deslocar para a q3 q2 q1 q0
Ra Rb Rc Rd
temperaturas clk
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 Uma solução com MUXs 8:1 para
• Queremos como saída a ld
ld
para a esquerda de 0, 1, 2, 3, 4, 5, 6, ou implementar um Barrel Shifter de 8-
média dessas temperaturas + + 7 posições bits, necessitaria de muitos fios.
• (Deslocar um número de 8-bits, 8 Q: xyz=??? Para
• Adicionaremos, em I
+
posições não tem nenhuma utilidade) deslocar 5 bits? 8 00000110
seguida, dividiremos por shift in 0 0101010 (42) divido por 4 • Poderíamos projetá-lo com MUXs 8:1 e 1
fios x sh <<4 in 0
quatro 0 >>2
– Geraria um número muito grande de 8 01100000 (por 4)
– Mesmo que deslocar para a 0001010 (10)
a fios. 0 a

direita 2 posições ld
Ravg
• Um projeto mais eficiente: y sh <<2 in 0
– Usaremos 3 somadores e um Tavg – Uma cadeia de 3 shifters: 4, 2, e 1 8 01100000
shift right de 2 posições. 1
– Poderíamos deslocar 0..7 posições
selecionando as entradas corretas dos z sh <<1 in 0
MUXs. Resultado: desloc. 5: 8
Digital Design Digital Design 11000000 (por 1)
Copyright © 2006 39 Copyright © 2006 Q 40
Frank Vahid Frank Vahid

4.5

Comparadores Comparador de Magnitude


• Um comparador de N-bits: Produz em sua única saída, o nível lógico • Comparador de Magnitude de N-
1 se dois números de N-bits forem idênticos. A=1011 B=1001
bits: Indica se A>B, A=B, ou A<B,
– Um comparador de igualdade de 4-bits, cujas entradas são A e B
para as suas entradas A e B de N- 1011 1001 Igual
• a3 deverá que 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 bits 1011 1001 Igual
– eq = (a3b3 + a3’b3’) * (a2b2 + a2’b2’) * (a1b1 + a1’b1’) * (a0b0 + a0’b0’) – Como projetar? Como você compararia 1011 1001 Diferente
• Lembre que as saídas de uma XNOR de 2 entradas é igual a 1 se suas usando lápis e papel? Primeiro
entradas forem iguais = (a3 xnor b3) * (a2 xnor b2) * (a1 xnor b1) * (a0 xnor b0)
a3 b3 a2 b2 a1 b1 a0 b0
comparo a3 e b3. Se forem iguais, Logo A > B
0110 = 0111 ? 0 0 1 1 1 1 0 1 comparo a2 e b2. E assim por diante.
Paro se a comparação der diferente –
a3 a2 a1 a0 b3 b2 b1 b0 a
independentemente de qual bit seja, o a
1 1 1 0 que for igual a 1 é o maior operando.
Comparador de 4 bits
eq
Caso não haja nenhuma desigualdade,
conclui-se que A = B
(b)
0 eq
(a)
Digital Design Digital Design
Copyright © 2006 41 Copyright © 2006 42
Frank Vahid Frank Vahid
Comparador de Magnitude Comparador de Magnitude
• Exemplo de execução no lápis e papel, segue o mesmo princípio do a3 b3 a2 b2 a1 b1 a0 b0
projeto desse bloco operativo.
– Comece pela esquerda, compare cada par de bits, passe o resultado para a b a b a b a b
a direita Igt in_gt out_gt in_gt out_gt in_gt out_gt in_gt out_gt AgtB
– O circuito para cada par de bits, chamaremos de estágio. 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
– Cada estágio tem 3 entradas indicando resultados dos estados de maior
ordem, passando-os para os de mais baixa ordem Estágio 3 Estágio 2 Estágio 1 Estágio 0
a3 b3 a2 b2 a1 b1 a0 b0 • Cada estágio:
– out_gt = in_gt + (in_eq * a * b’)
a b a b a b a b
• A>B se já foi determinado em um estágio de maior ordem, ou se estágio de
Igt in_gt out_gt in_gt out_gt in_gt out_gt in_gt out_gt AgtB maior ordem for igual e nesse estágio a=1 e b=0
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
– 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
Estágio 3 Estágio 2 Estágio 1 Estágio 0 maior ordem for igual e nesse estágio a=0 e b=1
(a)
– out_eq = in_eq * (a XNOR b)
• A=B se já foi determinado em um estágio de maior ordem e nesse estágio a=b
a3a2a1a0 b3b2b1b0
também.
0 Igt AgtB
1 Ieq
– O circuito que implementa cada estágio é simples (algumas portas lógicas)
Digital Design Comparador de Magnitude AeqB Digital Design
Copyright © 2006 0 Ilt de 4 bits AltB 43 Copyright © 2006 44
Frank Vahid Frank Vahid
(b)

Comparador de Magnitude Comparador de Magnitude


1 1 0 0 1 > 0 1 1
• Como funciona? 1011 = 1001 ? 1011 = 1001 ? a3 b3 a2 b2 a1 b1 a0 b0 • O resultado final
1 = 1 0 0 1 0 1 1 aparecerá na
a3 b3 a2 b2 a1 b1 a0 b0 a b a b a b a b saída do bloco
0 1
Igt
1
in_gt out_gt in_gt out_gt in_gt out_gt in_gt out_gt AgtB mais a direita.
a b a b a b a b 0
Ieq in_eq out_eq in_eq out_eq in_eq out_eq in_eq out_eq AeqB
0 0 0 0
Igt in_gt out_gt in_gt out_gt in_gt out_gt in_gt out_gt AgtB Ilt in_lt out_lt in_lt out_lt in_lt out_lt in_lt out_lt AltB
1
Ieq=1 força esse
0
1
Ieq in_eq out_eq in_eq out_eq
0
in_eq out_eq in_eq out_eq AeqB • O resultado
estágio a fazer Ilt in_lt out_lt in_lt out_lt in_lt out_lt in_lt out_lt AltB Stage3 Stage2 Stage1 Stage0 ficará pronto
uma comparação Stage3 Stage2 Stage1 Stage0
(c) depois do atraso
(a)
a
a 1 1 0 0 1 0 1 1 de propagação
1 1 0 = 0 1 0 1 1
a3 b3 a2 b2 a1 b1 a0 b0 dos 4 blocos.
a3 b3 a2 b2 a1 b1 a0 b0
a b a b a b a b
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
0 0 1 0
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
1 1 0 0
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
0 0
Ilt in_lt out_lt in_lt out_lt in_lt out_lt in_lt out_lt AltB
Stage3 Stage2 Stage1 Stage0
Stage3 Stage2 Stage1 Stage0 (d)
Digital Design (b) Digital Design
Copyright © 2006 45 Copyright © 2006 46
Frank Vahid Frank Vahid

Exemplo do Comparador de Magnitude:


4.6

Contadores
Mínimo de dois números
• Projete um componente operacional (circuito • Contador ascendente de N-bits:
combinacional) que aponte o menor de dois números de 8 Registrador de N-bits capaz de ser 01 Contador ascendente
cnt
incrementado de uma unidade ao seu de 4 bits
bits.
a
tc C
próprio valor em cada evento de clock 4
– Solução: Precisaremos de um comparador de magnitude de 8-bits e – 0000, 0001, 0010, 0011, ...., 1110, 1111,
8 MUXs 2:1 0000 100 0000
0101
0100
0011
0010
0001
1110
1111
0001
0000
...
• Se A<B, faça passar A através do mux. Caso contrário, passe B. – Observe o que acontece com a contagem
na passagem de 1111 para 0000
11000000 01111111 Contador ascendente
MIN A B
• Uma saída chamada de Terminal count, (tc),
8 8 de 4 bits
fica igual a 1 enquanto 1111 logo antes da cnt
8 8 8 8 “virada” para 0000 ld
a A B Registrador de 4 bits
A B 1 I1 I0 Min • Projeto interno
0 Igt AgtB s a
C
1 Ieq Comparador de Magnitude AeqB 0 8-bit – Registrador, somador de uma unidade 4 4
0 Ilt de 8 bits 2:1 mux 8
AltB
0 (incrementador), e uma porta AND de N- 4 +1
4
8 (b) entradas para sinalizar tc
C tc C
(a)
Digital Design 01111111 Digital Design
Copyright © 2006 47 Copyright © 2006 48
Frank Vahid Frank Vahid
Incrementador Incrementador
Inputs Outputs
• Projeto do Incrementador • Podemos construir a3 a2 a1 a0 c0 s3 s2 s1 s0
– Poderíamos usar um somador ripple-carry com a entrada B incrementadores muito mais 0 0 0 0 0 0 0 0 1
0 0 0 1 0 0 0 1 0
inicializada com 00...001 rápidos usando o processo de 0 0 1 0 0 0 0 1 1
• Mas quando somamos 00...001 a outro número, os zeros a projeto de circuitos 0 0 1 1 0 0 1 0 0
esquerda não são levados em consideração – portanto só 0 1 0 0 0 0 1 0 1
necessitamos de somar 2 bits por coluna. combinacionais 0 1 0 1 0 0 1 1 0

– Usamos half-adders (somam 2 bits) ao invés de full-adders – Monte uma tabela verdade 0 1 1 0 0 0 1 1 1
0 1 1 1 0 1 0 0 0
(somam 3 bits) – 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
1 0 1 0 0 1 0 1 1
a3 a2 a1 a0 1 • c0 = a3a2a1a0
1 0 1 1 0 1 1 0 0
carries: 011 • ...
a b a b a b a b a3 a2 a1 a0 1 1 0 0 0 1 1 0 1
0011
unused HA HA HA HA +1 • s0 = a0’ 1 1 0 1 0 1 1 1 0
+ 1 co s3 s2 s1 s0 1 1 1 0 0 1 1 1 1
co s co s co s co s – Resulta em um circuito menor e
0 010 0 1 1 1 1 1 0 0 0 0
co s3 s2 s1 s0 mais rápido
(b)
Digital Design (a) Digital Design
Copyright © 2006 49 Copyright © 2006 50
Frank Vahid Frank Vahid

Exemplo de aplicação do contador: Gerador de


Exemplo de uso de contadores clock de 1 Hz a partir de um Oscilador de 256 Hz
• Relembrando o exemplo do Capítulo 2
– Necessitávamos de um componente que incrementasse as • Suponha que temos um
entradas xy cada vez que o botão fosse pressionado: 00, 01, 10, oscilador de 256 Hz, mas
11, 00, 01, 10, 11, 00, ... queremos um sinal de
– Podemos usar um contador ascendente de 2-bits clock de 1 Hz
• Assuma mode=1 por somente um ciclo de clock durante cada
pressionar do botão – 1 Hz significa 1 pulso por 1 Contador ascendente
segundo cnt de 8 bits
• Lembre: “Sincronizador do Pressionar de Botões” exemplo do Cap. 3
– Podemos projetá-lo com tc C
osc
um contador ascendente (256 Hz) 8
de 8-bits, usaremos a p (não usado)
mode
cnt 2-bit upcounter (1 Hz)
saída tc como pulso
tc c1c0
clk
• Conta de 0 a 255 (256
vezes), logo pulsa tc a
x y
cada 256 ciclos

Digital Design Digital Design


Copyright © 2006 51 Copyright © 2006 52
Frank Vahid Frank Vahid

Contador Decrescente Contador Ascendente/Decrescente


• Contador decrescente de • Pode contar em 4-bit up/down counter
Contador decrescente de 4 bits
4 bits ambos os sentidos
– 1111, 1110, 1101, 1100, …, cnt – Possuí um dir
ld 1 4-bit 2 x1 0
0011, 0010, 0001, 0000, incrementador e um
Registrador de 4 bits 4
1111, … decrementador
clr clr
– Contagem final = 0000 – Use a entrada dir cnt
ld 4-bit register
• Use uma porta NOR para 4 4 para selecionar o
chegada a 0000 4 –1 sentido de
– Necessita de um contagem, 4 4 4 4
decrementador (-1) – tc C 4 selecionando dir=0
4 –1 +1
projeto semelhantre ao no MUX 2:1
significa ascendente 4 4
incrementador
1 2x1 0
tc C

Digital Design Digital Design


Copyright © 2006 53 Copyright © 2006 54
Frank Vahid Frank Vahid
Exemplo de aplicação do contador:
Sequenciador Luminoso Contador com Carga Paralela (L)
• Ilumina 8 leds da direita • Contador ascendente
para a esquerda, um por L 4
1 cnt 3-bit up-counter que pode ser carregado
vez, um por segundo clk com um valor externo ld
1 4-bit 2:1 0
tc c2 c1 c0
• Use um contador (1 Hz) – Projetado usando-se 4

ascendente de 3-bits para 00 10 010 MUXs 2:1 mux – entrada


unused cnt ld
contar de 0 a 7 ld seleciona entra valor 4-bit register
3x 8 dcd i2 i1 i0 incrementado ou valor
• Use um decodificador 3x8 d7 d6 d5 d4 d3 d2 d1 d0 externo (L)
4 4
para acender o led correto – Carrega o registrador
4 +1
• Obs.: Usamos um contador
a
interno, quando a carga
lights paralela ou a contagem
de 3-bits e um decodificador tc C
estiverem selecionadas
3x8
– Por quê não um contador de
8-bits?
Digital Design Digital Design
Copyright © 2006 55 Copyright © 2006 56
Frank Vahid Frank Vahid

Contador com Carga Paralela (L) Exemplo de aplicação de contadores


• Útil para gerar pulsos em tempos 1000 • No capítulo 2 usávamos um microprocessor para fazer a contagem
múltiplos de um sinal de clock 4 regressiva de 59 até 0 em binário.
• Exemplo: Gere um pulso a cada 9 • Podemos usar um contador descendente de 8-bits (ou de 7- ou 6-bits)
ciclos de clock no lugar do microcontrolador, inicialmente carregado com 59 em binário
ld L
• Precisaremos de um contador 1 Happy
cnt 4-bit down-counter 0 New
descendente de 4-bits com carga 59 8 L c0 i0
d0 Year
paralela tc C c1 i1
d1
1
clk d2
– Faça com a carga paralela seja 8 em c2 i2 2
4 ld c3 i3 d3 3
binário (1000)
reset c4 i4
– Use a saída tc (terminal count) para
recarregar c5 i5 d58
c6 d59
• Quando a contagem chegar a 0, no cnt
c7
próximo ciclo carregará 8. countdown d60
d61 58
– Por que carregar 8 e não 9? Porque o
clk 8-bit d62 59
0 esta incluso na sequencia de (1 Hz) down- 6x64
fireworks
contagem: counter tc dcd d63
Digital Design Digital Design
» 8,
Copyright © 2006
7, 6, 5, 4, 3, 2, 1, 0 9 vezes Copyright © 2006
57 58
Frank Vahid Frank Vahid

Exemplo de aplicação de contadores:


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

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

Digital Design Digital Design


Copyright © 2006 61 Copyright © 2006 62
Frank Vahid Frank Vahid

4.8

Multiplicador Subtrator
• Podemos construir subtratores assim como construímos somadores
• Projeto do multiplicador – um com o ripple-carry adder
array de portas lógicas AND – Imita o processo manual de subtração
a3 a2 a1 a0 – Empréstimo de colunas a esquerda
• Usaremos um componente chamado de full-subtractor
b0 • Te é o transporte vindo da coluna da direita; Ts é o sinal de pedido de
empréstimo feito para a coluna a esquerda
pp1

1stcolumn 2nd column 3rd column 4th column


b1 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
pp2

0 0 - 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
b2
+ (5-bit) 0 1 0 1 1
a3 b3 a2 b2 a1 b1 a0 b0 Te
pp3

00 0 1 1 1 0
A B a b Te a b Te a b Te a b Te a3 a2 a1 a0 b3 b2 b1 b0 1 0 0 0 1
b3
+ (6-bit) * FS FS FS FS Subtrator de 4 bits Te 1 0 1 0 0
P
pp4

0 00 Ts s Ts s Ts s Ts s Ts s3s2s1s0 1 1 0 0 0 a

1 1 1 1 1
+ (7-bit) Multiplicador Ts s3 s2 s1 s0
(b) (c)
Digital Design Digital Design
Copyright © 2006 p7..p0 63 Copyright © 2006 64
Frank Vahid Frank Vahid

Exemplo de aplicação do subtrator: Calculadora que Exemplo de aplicação de subtratores:


soma/subtrai usando como entradas DIP-Switches Conversor de RGB para CMY
• Calculadora: DIP switches
• Cor
– Representada como uma
– Chave f indica se 1 combinação (pesos) de três cores:
desejamos somar 0 red, green, and blue (RGB)
(f=0) ou subtrair • Considerando 8 bits para cada,
8 8 8 8 uma cor seria representada com
(f=1)
0 0 24 bits
– Use além do A B ci A B wi
– Branco: R=11111111,
8-bit adder 8-bit subtractor G=11111111, B=11111111
somador, um
co S wo S – Preto: R=00000000,
subtrator e MUXs G=00000000, B=00000000
2:1 1 f 8 8 – Outras cores: valores
0 2x1 1 intermediários, Ex.:,
0 R=00111111, G=00000000,
8
e B=00001111 poderia ser um tom • Impressoras adotam um esquema
ld
clk
8-bit register de vermelho. de cores oposto
CALC – Ideal para monitores de • Porque as tintas absorvem a luz
8 computadores, que misturam • Use cores complementares de RGB:
vermelho, verde e o azul para Ciano (absorve vermelho), reflete o
LEDs
formar todas as cores. verde e o azul, Magenta (absorve o
Digital Design Digital Design verde) e amarelo (absorve o azul)
Copyright © 2006 65 Copyright © 2006 Yellow 66
Frank Vahid Frank Vahid
Exemplo de Aplicação de Subtratores: Exemplo de Aplicação de Subtratores:
Conversor de Cores RGB para CMY Conversor de Cores RGB para CMY
• Tente armazenar padrões de
R G B
• Impressoras devem 255 255 255 tintas coloridas
8 8 8
converter rapidamente RGB 8 8 8 – Solução “cara” para o sistema
em CMY – Imperfeições – misturando C, M, Y
– C=255-R, M=255-G, Y=255-B - - -
não produzem uma boa impressão
– Use subtratores como • Solução: Excluir a porção de
mostrado na figura ao lado. 8 8 8
preto (ou cinza) da cor e imprimir
C M Y
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 –
use tinta preta
Digital Design Digital Design
Copyright © 2006 67 Copyright © 2006 68
Frank Vahid Frank Vahid

Exemplo de Aplicação de Subtratores: Representação de Números Negativos:


Conversor de Cores RGB para CMY Complemento a Dois
• Chame a parte preta de K R G B
• Números negativos são normalmente usados por CPUs
8 8 8
– (200,200,200): K=200 para realizar cálculos.
• Calcule o mínimo de C, M, Y R G B
– Como representá-los no sistema binário?
R GB t o CMY
– Use o componente MIN
projetado anteriormente, um
C M Y
• Modo sinal e magnitude
comparador e mux, para 8 8 8 8 – Usamos o bit mais significativo para indicar o sinal
calcular o valor de K C M Y • Portanto, -5 seria representado:
– Subtraia K dos valores de C, MIN 1101 usando-se 4 bits
M, e Y 8 10000101 usando-se 8 bits
– Ex: Entrada (250,200,200) MIN • Uma maneira mais apropriada: Modo complemento a 2
produz como saída 8
(50,0,0,200) K – Maior vantagem: Nos permite fazer subtração usando a
operação de adição.
- - - – Portanto, precisaremos somente de um único componente para
8 8 8 8 fazer adição ou subtração e não mais um componente
C2 M2 Y2 K específico para cada operação!
Digital Design Digital Design
Copyright © 2006 69 Copyright © 2006 70
Frank Vahid Frank Vahid

Operações em Complemento a Dois: Subtrator (usando complemento a dois)


É só complementar bit a bit o operando e somar 1 construído com um Somador
• Exemplo: • Usando complemento a dois
A B
– O complemento a dois de 011 é 100+1 = 101 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).
Q: Qual o complemento a dois de 0101? A: 1010+1=1011 a

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


Digital Design Digital Design
Copyright © 2006 73 Copyright © 2006 74
Frank Vahid Frank Vahid
Somador/Subtrator Exemplo do uso do Somador/Subtrator: Calculadora
• Somador/Subtrator: a • Na versão anterior, DIP switches
entrada de controle necessitávamos de 1
determina se realizaremos um somador e um 0

uma soma ou uma subtrator em separado 8 8

subtração para realizar as 1 f A B


sub 8-bit adder/subtractor
– Podemos usar MUXs 2:1, operações. 0
S
onde a entrada sub deixa 8
• Usando o novo e ld
passar B ou B’ 8-bit register
componente clk
CALC
– De forma alternativa,
poderíamos usar portas conseguimos otimizar DIP swi
tches
8
1
lógicas XOR – se a entrada 0
LEDs
8 8 8 8
sub for igual a 0, os bits de B A B ci 0 A B wi 0
8-bit adder 8-bit subtractor
serão as entradas de um dos co S wo S

operandos do somador; caso


1 f 8 8
0 2x1 1
0
8
e
contrário B’
ld 8-bit register
clk CALC
8
Digital Design Digital Design
Copyright © 2006 75 Copyright © 2006 LEDs 76
Frank Vahid Frank Vahid

Estouro dos Limites de Representação (Overflow) Detectando Overflow: Método 1


• Em algumas situações o resultado não pode ser • Considere para efeito de exemplo que nossos números são
representados usando-se 4 bits.
representado com uma quantidade fixa de bits.
• Podemos detectar overflow quando o bit de sinal de dois numeros são
– Ex.: Sejam dois operandos de 4-bit representados em complemento a iguais e o resultado produz um operando com bit de sinal diferente.
dois. Suponha ainda que desejamos somá-los: 0111+0001 (7+1=8). – Se os bits de sinal dos operandos são diferentes, não ocorrerá overflow
Porém não conseguimos representar números maiores que 7 com 4 • Circuito combinacional muito simples
bits em complemento a dois. – overflow = a3’b3’s3 + a3b3s3’
• 0111+0001 = 1000 resposta errada, 1000 em complemento a dois é -8, e – Incluiremos uma nova saída: o bit de “overflow” no nosso componente.
não +8
Bit de sinal
– O nosso componente Somador/Subtrator deverá indicar se um
overflow ocorreu. Nesse caso o resultado produzido pelo componente 0 1 1 1 1 1 1 1 1 0 0 0

deverá ser descartado (ou não ser levado em consideração). +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 Digital Design


Copyright © 2006 77 Copyright © 2006 78
Frank Vahid Frank Vahid

4.9

Detectando overflow: Método 2 Unidade Lógica e Aritmética: ALU


• Método ainda mais simples: Detecte a diferença entre o carry-in do bit • ALU: Componente que pode
de sinal com o carry-out do bit de sinal. executar qualquer uma das
• Produz um circuito combinacional mais simples para a detecção do várias operaçoes aritméticas
overflow: overflow = c3 xor c4 (somar, subtrair, incremento,
etc) e lógicas (AND, OR, etc)
As operações são realizadas,
1 1 1 0 0 0 0 0 0
com base nas entradas de
0 1 1 1 1 1 1 1 1 0 0 0
controle do componente.
+0 0 0 1 +1 0 0 0 +0 1 1 1

• Suponha que queremos uma


0 1 0 0 0 10 1 1 1 01 1 1 1
calculadora multi-função que
overflow overflow no overflow não só adiciona e subtrai,
(a) (b) (c)
mas também incrementa,
Se o carry in do bit de sinal diferir do carry out, um overflow ocorreu. faça ANDs, ORs, XORs, etc

Digital Design Digital Design


Copyright © 2006 79 Copyright © 2006 80
Frank Vahid Frank Vahid
Calculadora Multifuncional sem o componente
ALU
ALU
• Projetos mais eficiente usam a ALU como componente base.
• Podemos construir calculadoras
– O projeto de uma ALU usa um único somador para realizar as operações aritméticas,
multifuncionais usando e lógica adicional antes das entradas dos operandos A e B para realizar as demais
componentes em separado para DIP switches
operações.
cada operação, e muxes • Esse bloco operacional é um circuito combinacional chamado (arithmetic-logic extender)
1
0 – O bloco operacional modifica as entradas A e B de forma que a operação desejada
– Mas precisaríamos de muitos fios, apareça na saída do somador.
8 8
e um desperdício de poder de
processamento, pois de todas as A B

operações poderíamos usar Wasted


+ Ð +1 AND OR XOR NOT
somente uma por vez 8 8 8
power

8
8 8 8
8
1 0 A lot of wires
0 1 2 3 4 5 6 7
x
s2
y 8-bit 8⋅ 1
s1
z s0
8
e
Id
8-bit register
clk
CALC
8

Digital Design LEDs Digital Design


Copyright © 2006 81 Copyright © 2006 82
Frank Vahid Frank Vahid

Exemplo de uso de uma ALU:


Arithmetic-Logic Extender de uma ALU Calculadora Multifuncional
DIP swi t ches
1
0
8 8

A B

+ Ð +1 Wast ed
AND OR XOR NOT p o w er
8
8 8
8
8 8 8
DIP switches
8
1 0 0 1 2 3 4 5 6 7 A lot of wi res.
x
y
z
s2
s1
s0
8-bit 8 ⋅ 1
1 1
8

clk
e
Id
8-bit reg ist er 0 0
CA LC
8

LEDs
8 8
A B
A B
• xyz=000: Queremos S=A+B – faça passar a até ia, b até ib, e faça cin=0 • Projeto com o x
y
x
ALU
y
• xyz=001: Queremos S=A-B – faça passar a até ia, b’ até ib, e faça cin=1 componente ALU é z z S
• xyz=010: Queremos S=A+1 – faça passar a até ia, faça ib=0, e faça cin=1 mais eficiente: 8
e
• xyz=011: Queremos S=A – faça passar a até ia, faça ib=0, e faça cin=0 ld
– Sem muitos fios clk
8-bit register
• xyz=100: Queremos S=A AND B – faça ia=a*b, b=0, e cin=0
• outros: faça de forma semelhante – Sem desperdícios 8 CALC

• 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 LEDs
completar o componente do bloco operacional (AL – Extender).
Digital Design Digital Design
Copyright © 2006 83 Copyright © 2006 84
Frank Vahid Frank Vahid

4.10

Register Files Register File


• MxN register file esse • Em vez disso, queremos um componente que tenha uma única entrada
componente proporciona 32 de dados e uma única saída de dados, e nos permita especificar em
acesso eficiente a M er C C 8 a qual registrador desejamos escrever e/ou ler.
registradores de N-bits tompu er
t d0d0 load reg0
load reg0 T Mux enorme 32 32
32 W_data R_data a

– Se temos muitos omompu mi


i0 i0
cathe car Tr T
4⋅ 162⋅ 4 4 4
l 8-bit mi
8
com
arl trn the
W_addr R_addr
registradores, mas só car's 4×1 r
Fanout 32-bit
precisamos acessar um ou trnFe
d1 load reg1 A 16x1
e c 4 a0 i0 alto
o W_en R_en
c yDve
veDa
i1
dois de cada vez, um 8 o 16×32

dda
i1 i3-i0 register file
register file é mais eficiente a1
d2 load reg2 I y
328 -
– Ex: Suponha se no i2
exemplo do display do 8 congestão
d3 load reg3
carro tivéssemos mais e
d15
e load reg15 M
funções 16 registradores load i15i3 s1 s0
load 8
de 32-bits 32 s3-s0
x y
• Um número muito grande
de fios, e um MUX muito a

grande (e lento!)
Digital Design Digital Design
Copyright © 2006 85 Copyright © 2006 86
Frank Vahid Frank Vahid
Exemplo de uso do Register-File:
Diagrama de Tempo de um Register File Display de Funções de um Carro
• Pode escrever em clk
cycle 1 cycle 2 cycle 3 cycle 4 cycle 5 cycle 6
um registrador e 1 2 3 4 5 6
• Usaremos um register file 32
ler de um W_data 9 22 X X 177 555 C OLD design
registrador em
com 16 registradores de a

W_addr d0 load reg0 huge mux


cada período de
3 1 X X 2 3
32-bit que pode ser 32
i0
clock.
W_en
escrito pela CPU do carro 4⋅ 16

mirror display
To the above-
32too much 32

central computer
C D

From the car s


R_data Z Z Z 9 Z 22 9 555 W_data
fanout R_data32-bit
– Pode ser o e mostrado 4 WA 4
16x1
4
mesmo R_addr X X 3 X 1 3
simultaneamente no load
W_addr R_addr

registrador i3-i0
d D
R_en
display. W_en
16⋅ 32
R_en
1 32
0: ? 0: ? 0: ? 0: ? 0: ? 0: ? 0: ? register file RA
32 32 congestion
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 d15 load reg15
2 2 e
W_addr R_addr 3: ? 3: 9 3: 9 3: 9 3: 9 3: 9 3: 555
i15
load 32
W_en R_en s3-s0
4x32
register file

Digital Design Digital Design


Copyright © 2006 87 Copyright © 2006 88
Frank Vahid Frank Vahid

Resumo do Capítulo
• Componentes para armazenamento e transformação de dados são
necessários para implementar Caminhos de Dados de CPUs
– Também conhecidos por componentes RTL (register-transfer-level)
• Componentes desenvolvidos nesse capítulo
– Registradores
– Deslocadores (Shifters)
– Somadores
– Comparadores
– Contadores
– Multiplicadores
– Subtratores
– Unidades Lógicas e Aritméticas (Arithmetic-Logic Units – ALUs)
– Register Files
• No próximo capítulo combinaremos o conhecimento de projeto de
circuitos combinacionais, circuitos sequenciais e componentes de
caminhos de dados para projetar sistemas digitais que realizam
processamento de dados gerais ou específicos dependendo da aplicação.
Digital Design
Copyright © 2006 89
Frank Vahid

Вам также может понравиться