You are on page 1of 49

Sistemas Digitais

Aula 20
Registradores e Contadores

Eduardo Peixoto

Departamento de Engenharia Elétrica


Faculdade de Tecnologia
Universidade de Brası́lia

1 / 49
Sumário

Aula 20
Flip-Flops e Registradores
Registradores de Deslocamento
Contadores
Circuitos com Contadores

2 / 49
Flip-Flops e Registradores

Flip-Flops e Registradores

3 / 49
Flip-Flops

Comercialmente, o CI mais conhecido que contém flip-flops D é o 74x74, que contém


dois flip-flops D independentes com PRESET e CLEAR, ativo na borda de subida do
clock. As funcionalidades de PRESET e CLEAR são assı́ncronas, isto é, independente do
clock do flip-flop.

74LS74
74x74 CP1
PR
D1 Q1
__
D Q S1 Q1
R1
CLK
Q CP2
CLR
D2 Q2
__
S2 Q2
R2

4 / 49
Flip-Flops

Para o flip-flop JK, existem vários tipos de encapsulamento: 74x76 (flip-flop JK


mestre-escravo, com transferência por pulso), 74x112 (flip-flop JK gatilhado pela borda)
e 74x109 (flip-flop JK gatilhado pela borda, com entrada K negada). Todos eles tem
funções assı́ncronas de PRESET e CLEAR.

74LS76 74LS112
J1 Q1
__ J1 Q1
__ 74LS109
K1 Q1 K1 Q1 CP1 CP2
CP1 CP1 S1 S2 S
SD1 SD1 R1 R2 J Q
RD1 RD1 J1 J2 CP _
J2 Q2
__ J2 Q2
__ K1 K2 K Q
K2 Q2 K2 Q2 R
CP2 CP2

Q1Q1
SD2 SD2 Q2
__

__
RD2 RD2 Q2

5 / 49
Latch D

Para os latches, temos o 74x375, que possui quatro latches D com apenas dois enables
(cada enable controla dois latches).

74x375

1,2C
1Q
1D
1Q
2Q
2D
2Q
3,4C
3Q
3D
3Q
4Q
4D
4Q

6 / 49
Registradores

Uma coleção de dois ou mais flip-flops D que compartilham o mesmo clock é chamada de
registrador. Um exemplo é o 74x175, que contém quatro flip-flops D.
(4) (2)
1D D Q 1Q
(3)
CLK Q 1Q_L
CLR (a)

(5) (7)
2D D Q 2Q
(6)
CLK Q 2Q_L
CLR
74x175
(b) 9
CLK
(12) (10) 1
3D D Q 3Q CLR
2
(11) 4 1Q
CLK Q 3Q_L 1D 3
1Q
CLR 7
5 2Q
2D 6
2Q
10
12 3Q
(13) (15) 3D 11
4D D Q 4Q 3Q
15
(14) 13 4Q
(9) CLK Q 4Q_L 4D 14
CLK 4Q
CLR
(1)
CLR_L

7 / 49
Registradores

Outro registrador interessante é o 74x374, que tem oito flip-flops D com uma saı́da de 3
estados, de forma que podemos “desocupar” o barramento de saı́da.
(1)
OE_L
(a)
(3)
1D D
(2)
CLK Q 1Q

(4)
2D D
(5)
CLK Q 2Q

(7)
3D D
(6)
CLK Q 3Q

(8)
4D D
(b) (9)
CLK Q 4Q
74x374
11 (13)
CLK 5D D
1 (12)
OE CLK Q 5Q
3 2
1D 1Q
4 5 (14)
2D 2Q 6D D
7 6 (15)
3D 3Q CLK Q 6Q
8 9
4D 4Q
13 12
5D 5Q (17)
14 15 7D D
6D 6Q
17 16 (16)
7D 7Q CLK Q 7Q
18 19
8D 8Q
(18)
8D D
(19)
(11)
CLK Q 8Q
CLK

8 / 49
Registradores

Outro registrador interessante é o 74x373, que tem 8 latches D.

74x373
11
C
1
OE
3 2
1D 1Q
4 5
2D 2Q
7 6
3D 3Q
8 9
4D 4Q
13 12
5D 5Q
14 15
6D 6Q
17 16
7D 7Q
18 19
8D 8Q

9 / 49
Registradores

Finalmente, o 74x377 é um registrador tem oito flip-flops D.


(a) (b)
7
11
CLK
1
 (19)
3 2 D Q 8Q
1D 1Q
4 5 (18) CK
2D 2Q 8D
7 6
3D 3Q
8 9
4D 4Q
13 12
5D 5Q (1)
14 15 E 
6D 6Q
17 16
7D 7Q
18 19 (11)
8D 8Q CLK

10 / 49
Registradores de Deslocamento

Registradores de Deslocamento

11 / 49
Registradores de Deslocamento

Um registrador de deslocamento (shift register ) é um registrador com n bits com a


funcionalidade de deslocar o dado armazenado por uma posição a cada batida do clock.

12 / 49
Registradores de Deslocamento

O exemplo abaixo é um serial-in serial-out shift register.

SERIN D Q

C
CK

D Q

CK

D Q SEROUT

CK

13 / 49
Registradores de Deslocamento

O exemplo abaixo é um serial-in parallel-out shift register.

SERIN D Q 1Q

 CK

D Q 2Q

CK

D Q NQ

CK

14 / 49
Registradores de Deslocamento

O exemplo abaixo é um parallel-in serial-out shift register.


CLOCK

LOAD/SHIFT

SERIN
D Q

1D CK

D Q

2D CK

D Q SEROUT

ND CK

15 / 49
Registradores de Deslocamento

O exemplo abaixo é um parallel-in parallel-out shift register.


CLOCK
LOAD/SHIFT

SERIN
D Q 1Q

1D CK

D Q 2Q

2D CK

D Q NQ

ND CK

16 / 49
Registradores de Deslocamento

Um registrador de deslocamento bastante importante na famı́lia MSI é o 74194.


Este CI é um registrador de deslocamento completo, que pode deslocar bits nas duas
direções, carregar um bit especı́fico, ou apenas manter o estado atual a cada batida de
clock.
Seletores Próximo Estado
Função S1 S0 QA∗ QB∗ QC∗ QD∗
Hold 0 0 QA QB QC QD
Shift Right 0 1 RIN QA QB QC
Shift Left 1 0 QB QC QD LIN
Load 1 1 A B C D

17 / 49
Registradores de Deslocamento

74x194
11
CLK
1
CLR
10
S1
9
S0
7
LIN
6 12
D QD
5 13
C QC
4 14
B QB
3 15
A QA
2
RIN

18 / 49
Registradores de Deslocamento
 (
CLR_L

LIN
!" S1 S0

10


00

#$% D Q QD
D
11 &') CLR

01
RIGHT

10

*+,-
00

./0 D Q QC
C
11 123 CLR

01

10

4568
00

9:; D Q QB
B
11 <=> CLR

S1
KLMN 01
LEFT

S0
OPQ
10

?@AB
00

DFG D Q QA
A
11 RST
HIJ
CLR

RIN
01
19 / 49
Contadores

Contadores

20 / 49
Decompondo Máquinas de Estado

Para alguns problemas, o número de estados cresce de forma muito grande.

Para simplificar o problema, o projetista deve tentar organizar o problema de uma forma
hierárquica, de forma que os usos e funções de suas sub-máquinas sejam mais simples de
se descrever.

21 / 49
Decompondo Máquinas de Estado

_`abcdefgh i
START1
DONE1
UVWX
Inputs mYZ[\]^ {|}~€
START2
vwxyz
jklnopqrst u

22 / 49
Decompondo Máquinas de Estado

Máquina principal: provê as entradas e saı́das primárias e faz o controle das demais
máquinas (top-level)
Sub Máquinas: Realizam os passos de baixo nı́vel (low level) sob o controle da
máquina principal. Em alguns casos, podem lidar com algumas entradas e saı́das.

23 / 49
Contadores

Provavelmente, a mais utilizada sub-máquina é o contador.


A máquina principal pode inicializar um contador quando ela deseja permanecer em um
estado por n batidas do clock (ticks).
O contador fica encarregado de avisar a máquina principal que esses n ticks se passaram
via um sinal de controle.
Isso adiciona dois sinais à máquina principal (start e done, por exemplo), mas economiza
n − 1 estados na máquina principal.

24 / 49
Contadores

Chamamos de contadores qualquer circuito sequencial cujo diagrama de estados


contenha um único ciclo.

O módulo do contador é o número de estados em um ciclo. Um contador de m estados é


chamado de “modulo-m counter ” (ou de “divide-by-m counter ”). Note que se m não for
uma potência de 2, temos estados extras que não são utilizados.

S2
S1
S3

Sm

S4
S5

25 / 49
Ripple Counters

Podemos construir um contador de m estados usando apenas flip-flops T, sem lógica


adicional! Este contador é chamado de ripple counter porque a contagem se propaga
(ripples) pelos flip-flops.

Q Q0
CLK T
Q

Q Q1
T
Q

Q Q2
T
Q

Q Q3
T
Q

26 / 49
Synchronous Counters

Embora o ripple counter use poucos componentes, o circuito apresenta muito atraso, pois
temos que esperar a contagem se propagar até os últimos flip-flops. Além disso, os
flip-flops transitam em momentos diferentes, o que é muitas vezes indesejável..

Por isso, o mais comum é utilizar contadores sı́ncronos, que são máquinas de estado
projetadas para mudar todos os bits ao mesmo tempo (isto é, sincronizados).

27 / 49
Synchronous Counters

Uma forma de fazer isso é utilizando um flip-flop T com enable. Dizemos que esse
circuito tem uma lógica de enable em série (serial enable logic).

CNTEN EN Q Q0

CLK T

EN Q Q1
T

EN Q Q2

EN Q Q3

28 / 49
Synchronous Counters

Outra forma melhor é utilizando a lógica de enable em paralelo (parallel enable logic)
(por que?).

CNTEN EN Q Q0

CLK T

EN Q Q1

EN Q Q2
T

EN Q Q3
T

29 / 49
Synchronous Counters

O CI mais popular é o 74x163, que é um contador módulo-16 que apresenta funções de


CLEAR, LOAD e ENABLES sı́ncronos.

Entradas Estado Atual Próximo Estado


CLR L LD L EN T EN P QD QC QB QA QD∗ QC∗ QB∗ QA∗
0 x x x x x x x 0 0 0 0
1 0 x x x x x x D C B A
1 1 0 x x x x x QD QC QB QA
1 1 x 0 x x x x QD QC QB QA
1 1 1 1 0 0 0 0 0 0 0 1
1 1 1 1 0 0 0 1 0 0 1 0
1 1 1 1 0 0 1 0 0 0 1 1
1 1 1 1 0 0 1 1 0 1 0 0
1 1 1 1 0 1 0 0 0 1 0 1
1 1 1 1 0 1 0 1 0 1 1 0
1 1 1 1 0 1 1 0 0 1 1 1
1 1 1 1 0 1 1 1 1 0 0 0
1 1 1 1 1 0 0 0 1 0 0 1
1 1 1 1 1 0 0 1 1 0 1 0
1 1 1 1 1 0 1 0 1 0 1 1
1 1 1 1 1 0 1 1 1 1 0 0
1 1 1 1 1 1 0 0 1 1 0 1
1 1 1 1 1 1 0 1 1 1 1 0
1 1 1 1 1 1 1 0 1 1 1 1
1 1 1 1 1 1 1 1 0 0 0 0

30 / 49
Synchronous Counters
ÑÒÓ
ÔÕÖ× ÎÏÐ
CLK

ÉÊËÌÍ ÆÇÈ
ÃÄÅ
A
D Q
‚ƒ„… QA
CK Q

 ¿ÀÁ
D † ŒŽ Š‹
ˆ‰ ‡

¾ »¼½
D  –—˜™ ”•
’“ ‘

«¬­
š  ¡¢£ žŸ
D
D

œ ›

§¨©ª ¤¥¦
±²³ ´µ¶·®¯°
¸¹º

31 / 49
Circuitos com Contadores

Circuitos com Contadores

32 / 49
Free Running 74x163

Podemos usar o 74x163 em modo free running (ou loop infinito).

ØÙÚÛÜÝ
2
C áâã
1
Þßà
æ
LD
+  í
R çèé
R 10
êëì
ó äå
A QA QA
ô 1
B QB QB
ö 12
õ ÷ø îï
6 11
D QD QD
ùú
ûüý ðñò
þÿ

33 / 49
Free Running 74x163

É interessante observar a saı́da do contador nesse modo:

CLK

QA

QB

QC

QD


COUNT 0 1 2 3 4 5 6 7 8 9 10 11 12 13
0

34 / 49
Decodificando as saı́das do 74x163

Podemos colocar as saı́das do 74x163 em um decodificador 3-para-8 74x138.

() *
%&'
74x163
R WXYZ[\
2
!"#$ CLK ef
1 6 ]^ S,-.
CLR G1 gh
9 j _` /023
LD G2A 13
 k ab 6:;<
E G2B 12
10 cd =>?@
 11
3 14 Q1 1 mn ABDF
A QA A 10
 13 Q2 2 op GHIJ
B QB B u
 12 Q3 3 qr KLMN
 Q l i
6 11 st OPTV
D QD
 vw

U

35 / 49
Decodificando as saı́das do 74x163

É importante observar que, nessa configuração, a saı́da mostra glitches.

CLOCK_L

S0_L

S1_L

S2_L

S3_L

S4_L

S5_L

S6_L

S7_L

COUNT 0 1 2 3 4 5 6 7 0 1 2

36 / 49
Decodificando as saı́das do 74x163

Podemos contornar os glitches utilizando um registrador 74x374.

‘’ “” • 7 
11
C
74x163
R Þßàáâã 1
O
‹ŒŽ 2
CLK
äå ìí –—˜™ 3
1D 1Q
2
»¼½¾¿
1
CLR
6
ñ G2A æç
G1 îï š›œ 4
2D 2Q
5
ÀÁÂÃÄ
žŸ ¡
9

ò G2B èé ÅÆÇÈÉ
LD
~ xyz 13
3D 3Q
6

êë 12 ¢£¤¥ 8


9
ÊËÌÍÎ
10
{|} ôõ 11 ¦§¨© 13

12
ÏÐÑÒÓ
Q1
ª«¬­
3 14 1
1 
A
 B
QA A
ö÷ 10
6D 6Q ÔÕÖ×Ø
 €
QB
13 Q2 2
B
øù ü ®¯°± 
 
16
ÙÚÛÜÝ
‚ƒ 12 Q3 3
ó úû ð ²³´µ 
 !

¶·¸¹º
6 11
D QD
ýþ ÿU
†‡ˆ „…
‰Š

37 / 49
Usando o 74x163

Como contar até 10 usando o 74x163?

Para isso, precisamos resetar a contagem quando chegarmos no décimo estado (de 0 a
9). A função CLEAR do 74x163 é sı́ncrona, isto é, só vai ser ativada quando na borda de
ativação do clock, e portanto isso pode ser feito facilmente.

38 / 49
Usando o 74x163

QD QC QB QA

+V

74LS163
CLOCK CEP MR
CET
CP1 Q1 CP
CP2 Q2 PE TC
D3 Q3
D2 Q2
D1 Q1
D0 Q0

39 / 49
Usando o 74x163

Como contar até 20 usando o 74x163?

Para isso, precisamos de dois contadores. Podemos pensar que o primeiro conta até 10 e
o segundo conta 2 vezes o primeiro. Assim, o segundo contador só conta quando o
primeiro estoura!

40 / 49
Usando o 74x163

DEZ UNI

4321 4321

UU UU
+V QQ QQ +V
DC BA DDDD
BUNI QQQQ
DCBA
BDEZ
U4
74LS163 74LS163
CLOCK CEP MR CEP MR
CET CET
CP1 Q1 CP CP
CP2 Q2 PE TC PE TC
D3 Q3 D3 Q3
D2 Q2 D2 Q2
D1 Q1 D1 Q1
D0 Q0 D0 Q0
U U U U
Q Q Q Q D D DD
D C B A Q Q QQ
BUNI D C BA
BDEZ

41 / 49
Usando o 74x163

DEZ UNI

4321 4321

UUUU
+V QQQQ +V
DCBA DDDD
BUNI QQQQ
DCBA
BDEZ
U4
74LS163 74LS163
CLOCK CEP MR CEP MR
CET CET
CP1 Q1 CP CP
CP2 Q2 PE TC PE TC
D3 Q3 D3 Q3
D2 Q2 D2 Q2
D1 Q1 D1 Q1
D0 Q0 D0 Q0
U U U U
Q Q Q Q D D DD
D C B A Q Q QQ
BUNI D C BA
BDEZ

42 / 49
Usando o 74x163

Usando o 74x163 como um divisor de frequências.

f16 f8 f4 f2 f

+V
TP2
TP3
74LS163 TP4
CLOCK CEP MR
CET TP5
CP1 Q1 CP
CP2 Q2 PE TC
D3 Q3
D2 Q2
D1 Q1
D0 Q0
TP1

frequencia f

43 / 49
Usando o 74x163

E se eu quiser dividir uma frequência base por 10?

44 / 49
Exercı́cios

Exercı́cio
Projete um divisor de frequências que divida a frequência base por:
10 (apenas a borda de subida).
12 (apenas a borda de subida).
10 com um duty cycle igual.

45 / 49
Exercı́cios

Exercı́cio
Projete um relógio que conte minutos e horas (24 horas). Considere que você tem
disponı́vel um sinal de clock com frequência de 1 minuto.

46 / 49
Exercı́cios

Exercı́cio
Utilizando apenas Flip-Flops D, projete um LFSR (Linear Feedback Shift Register) que
realimenta o bit mais significativo com a equação X1 ⊕ X0 .

47 / 49
Exercı́cios

Exercı́cio
Utilizando um Registrador de Deslocamento 74194, projete um LFSR (Linear Feedback
Shift Register) que realimenta o bit mais significativo com a equação X1 ⊕ X0 .

48 / 49
Referências

Referências
Wakerly, Seções 8.2, 8.4 e 8.5
Wakerly, Exercı́cios 8.13, 8.14 e 8.35

49 / 49