Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Los flip-flops J-K pueden conectarse entre sí para realizar la función de CONTEO. A esta
combinación de flip-flops se le denomina contador. El número de flip-flops que se utilizan y la
forma en que se conectan determinan el número de estados tienen en sus salidas (Q) (que recibe
el nombre de módulo del contador), también la secuencia específica de estados por los que pasa
el contador durante un ciclo completo. Dependiendo del modo en que se aplique la señal de reloj,
los contadores se clasifican en dos amplias categorías: asíncronos y síncronos. En los contadores
asíncronos, normalmente denominados contadores con propagación (ripple counters), se aplica
una señal de reloj externa a la entrada de reloj del primer flip-flop (el que lleva el bit menos
significativo de conteo) y luego a los siguientes flip-flops se les aplica la señal de reloj mediante
la salida del flip-flop anterior. En los contadores síncronos, la entrada de reloj se conecta a todos
los flip-flops, de forma que se les aplica la señal de reloj simultáneamente. Dentro de cada una de
estas dos categorías, los contadores se clasifican por el tipo de secuencia, el número de estados o
el número de flip-flops del contador.
Contador Asíncrono: El término asíncrono se refiere a los sucesos que no poseen una relación
temporal fija entre ellos y que, generalmente, no ocurren al mismo tiempo. Un contador asíncrono
es aquél en el que los flip-flops (FF) del contador no cambian de estado exactamente al mismo
tiempo, dado que no comparten el mismo pulso de reloj. Además, los flip-flops comparten la
conexión de J y K operando en modo toggle, como se muestra en la figura 9.1
Contador Síncrono: El término síncrono se refiere a que los eventos tienen una relación temporal
fija entre sí. Un contador síncrono es aquel en el que todos los flip-flops del contador reciben en
el mismo instante la señal de reloj. La Figura 9.2 muestra un contador binario síncrono de 3 bits.
Observe que debe utilizarse una disposición distinta a la del contador asíncrono para las entradas
J0 y K0 del FF0, J1 y K1 del FF1 y J2 y K2 del FF2, con el fin de poder conseguir una secuencia
binaria definida por su diseño booleano.
INSTITUTO TECNOLOGICO DE OAXACA DISEÑO DIGITAL CON FPGAs Y VHDL
EJERCICIOS RESUELTOS
ER10_1 Modelar (comportamental: if…then…else) un contador de 4 bits, con un clr (reset)
síncrono en ac vo alto, simularlo e implementarlo en la Nexys 3. El clk (sensible a la subida) y se
ac vará con un pushbu on, así también el clr y las salidas en los leds.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
en ty ER10_1 is
port (Clr, clock : in std_logic;
Q : out std_logic_vector(3 downto 0));
end ER10_1;
architecture archi of ER10_1 is
signal tmp: std_logic_vector(3 downto 0);
begin
process (clock)
begin
if (Clock'event and Clock='1') then
if (clr='1') then
tmp <= "0000";
else
tmp <= tmp + 1;
end if;
end if;
end process;
Q <= tmp;
end archi;
INSTITUTO TECNOLOGICO DE OAXACA DISEÑO DIGITAL CON FPGAs Y VHDL
ER10_2 Modelar (comportamental: if…then…..else) un contador de 8 bits descendente con un
una señal de preset síncrona en ac vo bajo y agregarle el divisor de clock del ER8_2 (sensible a
la subida). Simularlo e implementarlo en la nexys3. El clock se implementará con el divisor de
frecuencia del ER8_2
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
en ty ER10_2 is
port(Preset, clock : in std_logic;
Q : out std_logic_vector(7 downto 0));
end ER10_2;
architecture archi of ER10_2 is
signal tmp: std_logic_vector(7 downto 0);
begin
process (clock)
begin
if (Clock'event and Clock='1') then
if (preset='0') then
tmp <= x"FF";
else
tmp <= tmp-1;
end if;
end if;
end process;
Q <= tmp;
end archi;
ER10_3 Modelar (comportamental if….. then……. else) un contador de 8 bits ascendente cuando
UP = 1 y descendente cuando DOWN = 0, con entradas: UP_DOWN, RESET (asíncrono y en ac vo
bajo), clock (sensible a la bajada). Simularlo e implementarlo. El clock se le agregara del divisor
ER8_2.
INSTITUTO TECNOLOGICO DE OAXACA DISEÑO DIGITAL CON FPGAs Y VHDL
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
en ty ER10_3 is
port(Clock, reset, UP_DOWN : in std_logic;
Q : out std_logic_vector(7 downto 0));
end ER10_3;
architecture archi of ER10_3 is
signal tmp: std_logic_vector(7 downto 0);
begin
process (Clock, reset)
begin
if (reset='0') then
tmp <= x"00";
elsif (Clock'event and Clock='0') then
if (UP_DOWN='1') then
tmp <= tmp + 1;
else
tmp <= tmp - 1;
end if;
end if;
end process;
Q <= tmp;
end archi;
ER10_4 Modelar (comportamental: if…then….else) un contador de década con entrada reset
(asíncrono, en ac vo alto) y un clock sensible a la bajada obteniéndolo del ER8_2, así como una
variable de salida “conta”.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
en ty ER10_4 is port(
clock, reset:in std_logic;
CONTA: out std_logic_vector(3 downto 0));
end ER10_4;
architecture decada of ER10_4 is
signal temp: std_logic_vector (3 downto 0);
begin
process (clock,reset)
INSTITUTO TECNOLOGICO DE OAXACA DISEÑO DIGITAL CON FPGAs Y VHDL
begin
if reset = '1' then
temp <= "0000";
elsif (clock'event and clock= '0') then
if temp = "1001" then
temp <="0000”;
else
temp <= temp + 1;
end if;
end if;
end process;
conta <= temp;
end decada;
ER10_5 U lizando el código del divisor de frecuencia del ER8_2 y el del ER10_1 (ajustarlo a 8
bits), modelar un contador al cual en el clock se le está aplicando una señal de clock de 1 Hz,
siguiendo el siguiente diagrama esquemá co. U lizar las entradas y salidas del diagrama
esquemá co.
INSTITUTO TECNOLOGICO DE OAXACA DISEÑO DIGITAL CON FPGAs Y VHDL
MODELADO DE LOS 2 BLOQUES LOGICOS UTILIZANDO INSTANCIACIÓN
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
en ty TOP_ER10_5 is
Port ( MCLK : in STD_LOGIC;
BTN : in STD_LOGIC_VECTOR (0 downto 0);
LED : out STD_LOGIC_VECTOR (7 downto 0));
end TOP_ER10_5;
architecture Behavioral of TOP_ER10_5 is
SIGNAL aux: STD_LOGIC;
begin
DIVISOR_FREC: ENTITY WORK.ER10_5a PORT MAP(
clkin => MCLK,
reset => BTN(0),
clkout => AUX
);
contador_MOD256: en ty work.ER10_5b PORT MAP(
reset => btn(0) ,
clk => aux,
Q => led
);
end behavioral;
ER10_6 Modelar (comportamental: if…then…else) un contador de modulo 10K, teniendo una
entrada clr (btn), el clk mclk) de 1Hz tomado de ER8_2. Sinte zarlo e implementarlo en la Nexys4.
U lizar instanciación.
MODELADO DEL CONTADOR MODULO 10k MODELADO DEL TOP ER10_6
INSTITUTO TECNOLOGICO DE OAXACA DISEÑO DIGITAL CON FPGAs Y VHDL
library IEEE; library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_unsigned.all;
en ty TOP_ER10_6 is
Port ( mclk : in STD_LOGIC;
en ty ER10_6b is btn : in STD_LOGIC_VECTOR (0 downto 0);
Port ( clr : in STD_LOGIC; led : inout STD_LOGIC_VECTOR (13 downto
clk : in STD_LOGIC; 0));
Q : inout STD_LOGIC_VECTOR( 13 downto end TOP_ER10_6;
0));
end ER10_6b; architecture Behavioral of TOP_ER10_6 is
SIGNAL clkaux: std_logic;
architecture Behavioral of ER10_6b is begin
begin clk_divider: en ty work.ER10_6a PORT MAP(
process (clr, clk) clkin => mclk ,
begin reset => btn(0) ,
if clr= '1' then clkout => clkaux
Q <= (others => '0'); );
elsif clk'event and clk = '1' then
if conv_integer(Q) = 9999 contador_Mod10k: en ty work.ER10_6b PORT
then MAP(
Q <= (others => '0'); clr => btn(0) ,
else clk => clkaux,
Q <= Q + 1; Q => led
end if; );
end if;
end process;
end Behavioral; end Behavioral;
EJERCICIOS PROPUESTOS
EP10_1 Modelar (comportamental: if…then…else) un contador de módulo 16, con un clr (reset)
asíncrono en ac vo bajo y un clk_enable en ac vos bajo, simularlo e implementarlo en la Nexys
3. El clk (sensible a la subida) se ac vará con el divisor de frecuencia ER8_2.
EP10_2 Modelar (comportamental: if….. then……. else) un contador de 8 bits (ER10_3)
ascendente cuando UP =0 y descendente cuando DOWN = 1, con entradas: UP_DOWN, RESET
(asíncrono y en ac vo bajo), clock (sensible a la bajada). Simularlo e implementarlo. El clock del
ING MIGUEL ANGEL PEREZ SOLANO Página 25
INSTITUTO TECNOLOGICO DE OAXACA DISEÑO DIGITAL CON FPGAs Y VHDL
contador aplicárselo con una frecuencia de 2 Hz del divisor de frecuencia (ER8_2 ) y el UP_DOWN
con un swith en ac vo bajo.
EP10_3 Es fácil modificar el ER10_2 para que sea un contador de cualquier tamaño simplemente
el arreglo que limite la salida Q. Alterna vamente podemos modelar (comportamental:
if…then…..else) un contador de N-bits u lizando la declaración GENERIC ( GENERIC (N: integer :=
ancho del bus de salida del contador). En base a lo anterior, modelar un contador de 16 bits
descendente con una señal de preset asíncrona en ac vo bajo y clock (sensible a la subida)
u lizando el divisor de clock (ER8_2) de 1 Hz. Simularlo e implementarlo en la nexys4.
EP10_4 Modelar un contador de 28 bits (comportamental: if….then….else), con un clr asíncrono
en ac vo alto. Obtenga las señales del FF (1), del FF(18) del FF(24) y diga que frecuencias están
siendo obtenidas. Sinte zarlo, simularlo e implementarlo en la nexys3: Con un osciloscopio vea
la frecuencia en un Osciloscopio.