Computing">
Slides 165 186
Slides 165 186
Slides 165 186
00 09052003
Contadores
• Um contador é um circuito sequencial que conta...
– em binário, decimal ou segundo outras sequências
– podem ser assíncronos ou síncronos (máquinas de estados)
• Aplicações
– contar coisas...
• por exemplo, os carros que entram num parque de estacionamento
– certas máquinas de estados podem ser projectadas
facilmente recorrendo a contadores e circuitos adicionais
• Disponíveis como circuitos da série 74xxx
– binários, decimais ou up/down
Contador assíncrono
• Com FFs tipo T:
flip-flop tipo T
EN T Q Q0 T CLK Q
0 Q ant.
CLK CLK QN 1 Q ant.
T Q Q1
CLK QN
T Q Q2
CLK
CLK QN
Q0
Contador síncrono
• Com FFs tipo T:
EN T Q Q0
CLK CLK
T Q Q1
CLK
T Q Q2
CLK
Contador síncrono
• Com FFs tipo D:
D Q Q0
EN A B XOR
CLK
0 0 0
CLK
0 1 1
1 0 1
1 1 0
D Q Q1
CLK
D Q Q2
CLK
CLK CLK
0 Q Q1
D
D1 1
CLK
0 Q Q2
D
D2 1
CLK
load
Quando load está activo, o contador é “carregado” com o que está nas entradas Di (Qi* = Di)
Como acrescentar uma entrada de reset (síncrono) ?
FEUP/DEEC - Sistemas Digitais 169
http://www.fe.up.pt/~jca/feup/sd
74x163
clock
CLK
RCO=0 quando QD~QA=1111 e ENT=1
CLR
LD
ENP
ENT
D QD
C QC
B QB
A QA
RCO
74x163 – exemplo 1
Vcc (5V)
Estado
74x163
QD QC QB QA CLR LD
CLK
valor carregado 0 0 0 0 1 1
CLR 0 0 0 1 1 1
LD quando LD 0 0 1 0 1 1
ENP é activado 0 0 1 1 1 1
ENT 0 1 0 0 1 1
A
0 1 0 1 1 1
QD
B QC
0 1 1 0 1 1
C QB 0 1 1 1 1 0
D QA 1 0 1 0 1 1
RCO 1 0 1 1 1 1
1 1 0 0 0 1
0 0 0 0 1 1
. . .
Gnd
(0V) CLR é activado quando
o estado actual é 1100
LD é activado quando
o estado actual é 0111
FEUP/DEEC - Sistemas Digitais 172
http://www.fe.up.pt/~jca/feup/sd
74x163 – exemplo 3
Vcc (5V)
74x163
clock
CLK
CLR
74x138 LD
G1 Y0 Gnd ENP
G2A Y1 ENT
G2B Y2 QD
D QD
Y3 C QC
QC
Y4 B QB
C QB
Y5 A QA QA
B Y6 RCO
A Y7
G1 Y0 S0
sequência de estados:
74x163
G2A Y1 S1
CLK CLK G2B
S2 S0 S1 S2 S3 S4 S5 S6 S7
CLRL CLR Y2
LD 0 1 1 1 1 1 1 1
Y3 S3 1 0 1 1 1 1 1 1
EN ENP QD
ENT Y4 S4 1 1 0 1 1 1 1 1
QC C 1 1 1 0 1 1 1 1
D
QB B Y5 S5 1 1 1 1 0 1 1 1
C 1 1 1 1 1 0 1 1
B
QA A Y6 S6
1 1 1 1 1 1 0 1
A RCO Y7 S7 1 1 1 1 1 1 1 0
0 1 1 1 1 1 1 1
. . .
Divisor de frequência
Vcc=+5V
CLK 74x163
CLK
(frequência f)
CLRL CLR
LD
EN ENP QD CLK2 (f/2)
ENT
QC CLK4 (f/4) DC=50%
D
QB CLK8 (f/8)
C
QA CLK16 (f/16)
B
A RCO PULSE16 (f/16) DC=6.25% (1/16)
CLK (f)
CLK2 (f/2)
CLK4 (f/4)
CLK8 (f/8)
CLK16 (f/16)
PULSE16 (f/16)
74x169 – exemplo 1
Vcc (5V)
74x169
CLK
UP/DWN
LD
ENP
ENT
D QD
C QC
B QB
A QA
RCO
Gnd
(0V)
74x163
CLK
CLR Este só conta quando o contador
LD menos significativo atingir o estado 1111
ENP QD Q7
ENT
QC Q6
D7 D bits mais significativos
QB Q5
D6 C
QA Q4
D5 B RCO vale 1 quando for atingido
D4 A RCO RCO o valor máximo 11111111
• 74x160
– igual ao 74x161 mas apenas conta de 0 a 9 (decade counter)
• 74x162
– igual ao 74x163 mas apenas conta de 0 a 9 (decade counter)
Problema
Construir uma máquina Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
de estados com 16 saídas 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Y0, Y1, ... Y15 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
que produza ciclicamente 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
a sequência de valores seguinte: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
sugestão 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
usar um 74x169 (up/down) 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
para gerar a sequência 0..15..0, 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
e um descodificador 4÷16 para 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
produzir as 16 saídas... 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Registo de deslocamento
(shift-register)
SERIAL_IN D Q Q0
CLK CLK
D Q Q1 saída paralela
CLK
D Q Q2
CLK
SERIAL_OUT
CLK
SERIAL_IN 0 1 0 0 1 1 0 1 0
Q0 0 1 0 0 1 1 0 1
Q1 0 0 1 0 0 1 1 0
Q2 0 0 0 1 0 0 1 1
Registo de deslocamento
com carregamento paralelo
carregamento paralelo: Qi* = D i (LOAD/SHIFT=1)
SERIAL_IN 0
D0 1 D Q Q0
CLK CLK
0
D2 1 D Q Q2
CLK
LOAD/SHIFT SERIAL_OUT
Shift-register 74x194
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
CLK
CLR LIN é a entrada série quando é feito um
deslocamento para a esquerda (de QD para QA)
S1
S0
LIN
D QD
C QC
B QB
A QA
RIN RIN é a entrada série quando é feito um
deslocamento para a direita (de QA para QD)
CLK
CLK
CLR
S1
S0
S
LIN
D QD
C QC
Z
B QB
A QA
RIN
CLK
CLK
CLR
S1
S0
S
LIN
D QD
C QC
Z
B QB
A QA
RIN
Quando é detectada a sequência as saídas são “estragadas” (é carregado S000 para Q DQCQ BQ A)
Apenas são detectadas sequências não sobrepostas
Exemplo 3: contador
Vcc=+5V
CLK
CLK
CLR
S1
S0
LIN
D QD QD
C QC QC
B QB QB
A QA QA
RIN