CONTADORES CONTADORES ASINCRONOS … muestra el circuito de un contador ascendente de 4 bit, (de la...
Transcript of CONTADORES CONTADORES ASINCRONOS … muestra el circuito de un contador ascendente de 4 bit, (de la...
CONTADORES
Ck 1 2 3 4 5 6 7 8 9 10 11 12
Q0
Q1
Q2
CONTADORES ASINCRONOS ASCENDENTE
SQ2 J
ckQ2 K
R
SQ1 J
ckQ1 K
R
SQ0 J
ckQ0 K
R
Vdd Vdd Vdd
Las entradas asincronas S y R estan desactivadas -- CI : 0 0 0
CONTADOR ASINCRONO DESCENDENTE
Ck 1 2 3 4 5 6 7 8 9 10 11 12
Q0
Q1
Q2
SQ2 J
ckQ2 K
R
SQ1 J
ckQ1 K
R
SQ0 J
ckQ0 K
R
Vdd Vdd Vdd
Las entradas asincronas S y R estan desactivadas -- CI : 0 0 0
CONTADORES SINCRONOS 1(CONECTAR LAS ENTRADAS ASINCRONAS)
Ck 1 2 3 4 5 6 7 8 9 10 11 12
Q0
Q1
Q2
Q3
SQ3 J
Ck
----Q3 K
R
SQ2 J
Ck
----Q2 K
R
SQ1 J
Ck
----Q1 K
R
SQ0 J
Ck
----Q0 K
R
0
1
MODELO VHDL – CONTADOR – ARQUITECTURA
ARCHITECTURE Behavior OF upcount ISSIGNAL Count : STD_LOGIC_VECTOR (3 DOWNTO 0) ;
BEGINPROCESS ( Clock, Resetn )BEGIN
IF Resetn = ´0´ THENCount <= “0000” ;
ELSIF (Clock’EVENT AND Clock = ´1´) THENIF E = ´1´ THEN
Count <= Count + 1;ELSE
Count <= Count ;END IF ;
END IF ;END PROCESS ;Q <= Count ;
END Behavoir ;
LIBRARY ieee ;USE ieee.std_logic_1164.all ;USE ieee.std_logic_unsigned.all ;
ENTITY upcount IS PORT ( Clock, Resetn, E : IN STD_LOGIC ;
Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) ;END upcount ;
MODELO VHDL - CONTADOR
J
Q
Q
K
SET
CLR
J
Q
Q
K
SET
CLR
J
Q
Q
K
SET
CLR
J
Q
Q
K
SET
CLR
E
Clock
Resetn
Este contador es identico al anteriormente visto, solo que hemos agregado unacompuerta adicional con la funcion de establecer una entrada de habilitacion E. Se muestra el circuito de un contador ascendente de 4 bit, (de la diapositivaanterior) con una entrada reset Resetn , y una entrada de habilitación, E . En el cuerpo de la arquitectura los FFs en el contador estan representados por una señal denominada Count (recordemos que una señal puede almacenar información y representan conexiones o terminales físicos en el circuito) La sentencia processespecifica un reset asíncrono de Count si Resten = 0 . La clausula ELSIF especifica que en el flanco positivo del Clock, si E = 1, la cuenta es incrementada .. Si E = 0 , el código explícitamente asigna Count <= Count. Las salidas Q estanasignadas al valor de Count al final del código
Figure 7.55 Code for a down-counter
LIBRARY ieee ;USE ieee.std_logic_1164.all ;ENTITY downcnt IS
GENERIC ( modulus : INTEGER := 8 ) ;PORT ( Clock, L, E : IN STD_LOGIC ;
Q : OUT INTEGER RANGE 0 TO modulus-1 ) ;END downcnt ;
ARCHITECTURE Behavior OF downcnt ISSIGNAL Count : INTEGER RANGE 0 TO modulus-1 ;
BEGINPROCESSBEGIN
WAIT UNTIL (Clock'EVENT AND Clock = '1') ;IF E = '1' THEN
IF L = '1' THENCount <= modulus-1 ;
ELSECount <= Count-1 ;
END IF ;END IF ;
END PROCESS;Q <= Count ;
END Behavior ;
MODULO PROGRAMABLE
Figure 7.54 A four-bit counter with parallel load, using INTEGER signals
LIBRARY ieee ;USE ieee.std_logic_1164.all ;
ENTITY upcount ISPORT ( R : IN INTEGER RANGE 0 TO 15 ;
Clock, Resetn, L : IN STD_LOGIC ;Q : BUFFER INTEGER RANGE 0 TO 15 ) ;
END upcount ;
ARCHITECTURE Behavior OF upcount ISBEGIN
PROCESS ( Clock, Resetn )BEGIN
IF Resetn = '0' THENQ <= 0 ;
ELSIF (Clock'EVENT AND Clock = '1') THENIF L = '1' THEN
Q <= R ;ELSE
Q <= Q + 1 ;END IF;
END IF;END PROCESS;
END Behavior;
PROGRAMABLE
CONTADORES SINCRONOS 2 - UP
D Q
Ck
Q
D Q
Ck
Q
D Q
Ck
Q
D Q
Ck
Q
ENABLE
CLOCK
Q0
Q1
Q2
Q3
CARRY
SI enable =1
D0 = Q0 = 1 Q0
D1 = Q1 Q0
D2 = Q2 Q1 . Q0
D3 = Q3 Q2 . Q1 . Q0
CONTADOR DE CARGA PARALELA
D Q
Ck
Q
D Q
Ck
Q
D Q
Ck
Q
D Q
Ck
Q
ENABLE
CLOCK
Q0
Q1
Q2
Q3
CARRY
LOAD
D0
D1
D2
D3
CONTADOR MODULO 6 – M : 6
Enable
D0 Q0D1D2 Q1
Load Q2Clock
1
00
0
Clock
Cuando comienza el Ck – 5 si bien es cierto que en Load hay un 1, dichacarga no se hace efectiva hasta que ingresa el Ck – 6. Alli los Qi = 0
Ck 1 2 3 4 5 6 7 8 9 10 11 12
Q0
Q1
Q2
DISEÑO CONTADOR CRECIENTE M=5MODULO: N DE ESTADOS POR LOS QUE ATRAVIESA EL CONTADOR
n = CANTIDAD DE FLIP-FLOP NECESARIOS PARA EL DISEÑO
1) CANTIDAD DE FLIP-FLOP n = 3
2) DIAGRAMA DE ESTADOS 2exp (n) > M
ESTPRES
Qt
EST. FUT
Qt + 1
ENT
J K
0 0 0 X
0 1 1 X
1 0 X 1
1 1 X 0
TABLA DE ESTADOS
TABLA DE ESTADOS
ESTADO PRESENTE
ESTADO FUTURO
ENTRADAS DE LOS FLIP-FLOP
FUNCION DE
RESET
Q2 Q1 Q0 Q2 Q1 Q0 J2 K2 J1 K1 J0 K0 fu
00001111
00110011
01010101
00010XXX
01100XXX
10100XXX
0001XXXX
XXXX1XXX
01XX0XXX
XX01XXXX
1X1X0XXX
X1X1XXXX
00000111
ESTPRES
Qt
EST. FUT
Qt + 1
ENT
J K
0 0 0 X
0 1 1 X
1 0 X 1
1 1 X 0
TABLA DE ESTADOS
IMPLEMENTACION4) SIMPLIFICACION: UN DIAGRAMA PARA CADA ENTRADA JK DE TODOS LOS
F/F, MAS UNA FUNCION RESET (fu).
RESULTADO DE LA SIMPLIFICACIÓN
ALTERNATIVA PARA ESTADOS NO USADOSLA ALTERNATIVA CONSISTE EN FORZAR AL CONTADOR CUANDO ENTRE EN UN ESTADO NO USADO A IR POR EJEMPLO AL ESTADO 000 U OTRO
ESTADO PRESENTE
ESTADO FUTURO
ENTRADAS DE LOS FLIP-FLOP
Q2 Q1 Q0 Q2 Q1 Q0 J2 K2 J1 K1 J0 K0
00001111
00110011
01010101
00010000
01100000
10100000
0001XXXX
XXXX1111
01XX00XX
XX01XX11
1X1X0X0X
X1X1X1X1
CONTADOR UP/DW - M = 5DIAGRAMA DE ESTADOS
000 001 010 011
111 110 101 100
X = 0
X = 1X = 0, UP
X = 1, DW
XXXX1 X 0 X 0 X1 0 00 0 010 X 0 X 1 X0 0 00 0 110 X X 1 1 X0 0 10 1 010 X X 0 X 10 1 00 1 11X 1 1 X 1 X0 1 11 0 01X 1 0 X 0 X0 0 01 0 001 X X 1 X 11 0 00 1 100 X X 0 1 X0 1 10 1 000 X 1 X X 10 1 00 0 100 X 0 X 1 X0 0 00
J2 K2 J1 K1 J0 K0Q2 Q1 Q0Q2 Q1 Q0X
ENTRADASFUTUROPRESENTECONTROL
0 0 1
CONTADOR UP/DW – MAPA K
000110
XXXX11
XXXX01
010000
10110100XQ2Q1Q0
J2 = XQ1Q0 + XQ1Q0
CONSTRUYENDO EL RESTO DE LOS MAPAS, ENCONTRAMOS:
J1 = XQ2 + XQ0 ; J0 = XQ2 +XQ2 + Q1
K2 = 1; K1 = XQ0 + XQ0 ; K0 = 1
SIGUIENTE PASO LA IMPLEMENTACION Y PRUEBA DE FUNCIONAMIENTO
CONTADOR ANILLO
D Q
Q
D Q
Q
D Q
Q
Start
Clock
Q0 Q1 Qn-1Set
Reset
N bits
ClockQ1
Q0Clear
W0 y0 y1y2
W1 y3
Q0Q1Q2Q3Start
Clock
Contador 2 bits Decodificador 2:4
4 bits
CONTADOR JOHNSON
D Q
Q
D Q
Q
D Q
Q
Clock
Q0 Q1 Qn-1
Reset
N bits
Ck
Q0
Q1
Q2
Q3
CONTADOR JOHNSON - 4 BITS
EJERCICIOS – 1
EJERCICIO - 2
Figure 7.55 Code for a down-counter
LIBRARY ieee ;USE ieee.std_logic_1164.all ;ENTITY downcnt IS
GENERIC ( modulus : INTEGER := 8 ) ;PORT ( Clock, L, E : IN STD_LOGIC ;
Q : OUT INTEGER RANGE 0 TO modulus-1 ) ;END downcnt ;
ARCHITECTURE Behavior OF downcnt ISSIGNAL Count : INTEGER RANGE 0 TO modulus-1 ;
BEGINPROCESSBEGIN
WAIT UNTIL (Clock'EVENT AND Clock = '1') ;IF E = '1' THEN
IF L = '1' THENCount <= modulus-1 ;
ELSECount <= Count-1 ;
END IF ;END IF ;
END PROCESS;Q <= Count ;
END Behavior ;
Figure 7.53 Code for a four-bit up-counter
LIBRARY ieee ;USE ieee.std_logic_1164.all ;USE ieee.std_logic_unsigned.all ;ENTITY upcount IS
PORT ( Clock, Resetn, E : IN STD_LOGIC ;Q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0)) ;
END upcount ;
ARCHITECTURE Behavior OF upcount ISSIGNAL Count : STD_LOGIC_VECTOR (3 DOWNTO 0) ;
BEGINPROCESS ( Clock, Resetn )BEGIN
IF Resetn = '0' THENCount <= "0000" ;
ELSIF (Clock'EVENT AND Clock = '1') THENIF E = '1' THEN
Count <= Count + 1 ;ELSE
Count <= Count ;END IF ;
END IF ;END PROCESS ;Q <= Count ;
END Behavior ;
Figure 7.78a Code for a two-digit BCD counter
LIBRARY ieee ;USE ieee.std_logic_1164.all ;USE ieee.std_logic_unsigned.all ;
ENTITY BCDcount ISPORT ( Clock : IN STD_LOGIC ;
Clear, E : IN STD_LOGIC ;BCD1, BCD0 : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) ) ;
END BCDcount ;
ARCHITECTURE Behavior OF BCDcount ISBEGIN
PROCESS ( Clock )BEGIN
IF Clock'EVENT AND Clock = '1' THENIF Clear = '1' THEN
BCD1 <= "0000" ; BCD0 <= "0000" ;… con’t
Figure 7.78b Code for a two-digit BCD counter (con’t)
ELSIF E = '1' THENIF BCD0 = "1001" THEN
BCD0 <= "0000" ;IF BCD1 = "1001" THEN
BCD1 <= "0000";ELSE
BCD1 <= BCD1 + '1' ;END IF ;
ELSEBCD0 <= BCD0 + '1' ;
END IF ;END IF ;
END IF;END PROCESS;
END Behavior ;
Figure 7.73 Code for a two-bit up-counter with asynchronous reset
LIBRARY ieee ;USE ieee.std_logic_1164.all ;USE ieee.std_logic_unsigned.all ;ENTITY upcount IS
PORT ( Clear, Clock : IN STD_LOGIC ;Q : BUFFER STD_LOGIC_VECTOR(1 DOWNTO 0) ) ;
END upcount ;
ARCHITECTURE Behavior OF upcount ISBEGIN
upcount: PROCESS ( Clock )BEGIN
IF (Clock'EVENT AND Clock = '1') THENIF Clear = '1' THEN
Q <= "00" ;ELSE
Q <= Q + '1' ;END IF ;
END IF;END PROCESS;
END Behavior ;