Está en la página 1de 8

INSTITUTO TECNOLOGICO DE OAXACA DISEÑO DIGITAL CON FPGAs Y VHDL 

PRACTICA No.10 CONTADORES

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

Figura 9.1 Contador asíncrono de módulo 8 (23 estados de salida diferentes).

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.

ING MIGUEL ANGEL PEREZ SOLANO Página 19

 
INSTITUTO TECNOLOGICO DE OAXACA DISEÑO DIGITAL CON FPGAs Y VHDL 

Figura 9.2 Contador síncrono de 3 bits de módulo 8.

 
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; 
 
 

ING MIGUEL ANGEL PEREZ SOLANO Página 20

 
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. 
 
 

ING MIGUEL ANGEL PEREZ SOLANO Página 21

 
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) 

ING MIGUEL ANGEL PEREZ SOLANO Página 22

 
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. 
 
 

 
 

ING MIGUEL ANGEL PEREZ SOLANO Página 23

 
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
   

ING MIGUEL ANGEL PEREZ SOLANO Página 24

 
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. 
 

ING MIGUEL ANGEL PEREZ SOLANO Página 26

También podría gustarte