
En electrónica digital , un contador es un circuito lógico secuencial que cuenta y almacena el número de transiciones positivas o negativas de una señal de reloj . [ 1 ] Un contador generalmente consta de biestables , que almacenan un valor que representa el conteo actual, y en muchos casos, lógica adicional para efectuar secuencias de conteo específicas, calificar relojes y realizar otras funciones. Cada transición de reloj relevante provoca que el conteo actual aumente o disminuya (aumente o disminuya en uno).
Un contador digital es una máquina de estados finitos [ 2 ] con una señal de entrada de reloj y múltiples señales de salida que, en conjunto , representan el estado. El estado indica el conteo actual, codificado directamente como un número binario o decimal codificado en binario (BCD), o mediante codificaciones como el código one-hot o el código Gray . La mayoría de los contadores tienen una entrada de reinicio que se utiliza para inicializar el conteo. Según el diseño, un contador puede tener entradas adicionales para controlar funciones como la habilitación del conteo y la carga de datos en paralelo.
Los contadores digitales se clasifican de diversas maneras, incluyendo atributos como el módulo y la codificación de salida, y capacidades adicionales como la precarga de datos y el conteo bidireccional (ascendente y descendente). Cada contador se clasifica como síncrono o asíncrono. Algunos contadores, en particular los de anillo y los de Johnson, se clasifican según sus arquitecturas únicas.
Los contadores son los circuitos secuenciales más utilizados [ 2 ] y se emplean ampliamente en computadoras, sistemas de medición y control, interfaces de dispositivos y otras aplicaciones. Se implementan como circuitos integrados independientes y como componentes de circuitos integrados más grandes, como microcontroladores y FPGA.
Características
Un contador electrónico es un circuito lógico secuencial que tiene una señal de reloj de entrada y un grupo de señales de salida que representan un valor entero de "conteo". Con cada flanco de reloj válido, el circuito incrementa (o decrementa, según el diseño del circuito ) el conteo almacenado. Cuando el conteo llega al final de la secuencia (conteo máximo al incrementar; conteo cero al decrementar), el siguiente reloj provoca un desbordamiento o subdesbordamiento del conteo y la secuencia de conteo se reinicia, un evento comúnmente conocido como desbordamiento .
Señales

Cada contador tiene un grupo fundamental de señales comunes a las máquinas de estados:
- Reloj (entrada): activa el cambio de estado en el flanco ascendente o descendente (conocido como flanco activo [ 3 ] ).
- Reinicio (entrada): pone el contador a cero. Algunos fabricantes de circuitos integrados denominan a esta señal "borrar" o "reinicio maestro (MR)". Según el diseño del contador, esta señal puede ser asíncrona o síncrona.
- Contador (salida): vector de bits que representa el conteo acumulado. Según el diseño del contador, este puede ser el estado actual (salidas de biestables) o una codificación del estado actual.
Además de las señales de reloj y reinicio, muchos contadores proporcionan otras señales de entrada, tales como:
- Habilitar: permite o inhibe el conteo. A veces se le denomina CE (habilitar conteo).
- Dirección: determina si el contador aumentará o disminuirá.
- Datos: datos de entrada paralelos que representan un valor de conteo particular.
- Cargar: copia los datos de entrada paralelos al contador. Normalmente, esto tiene prioridad sobre Habilitar si tanto Cargar como Habilitar están activados. [ 2 ]
En muchos casos, las entradas de los contadores son síncronas, lo que significa que solo afectan al funcionamiento del contador durante los flancos activos del reloj. Para cualquier contador en particular, cada señal de entrada síncrona debe cumplir con los tiempos de establecimiento y retención necesarios para su correcto funcionamiento (es decir, debe ser estable antes y después de cada flanco activo del reloj durante los tiempos mínimos especificados). [ 3 ]
Algunos contadores proporcionan una salida de conteo terminal que indica que el siguiente reloj provocará un desbordamiento o un subdesbordamiento. Esto se utiliza de diversas maneras, entre ellas:
- para implementar la conexión en cascada de contadores (combinar dos o más contadores para crear un único contador de mayor tamaño) conectando la salida de Conteo Terminal de un contador a la entrada de Habilitación del siguiente contador.
- Para cambiar el módulo del contador, conecte la entrada Terminal Count a la entrada Load del contador y aplique un valor apropiado a las entradas Data.
Codificación de salida
Al realizar el conteo, cada contador produce una secuencia de códigos de salida (patrones de bits) en sus salidas de conteo. Muchas de estas secuencias de códigos, ya sea por diseño o por la naturaleza del contador, se ajustan a sistemas de codificación ampliamente utilizados. En los contadores se emplean comúnmente varios tipos de codificación de salida, como binario, BCD, código Gray y one-hot.
Módulo
El módulo de un contador es el número de estados en su secuencia de conteo. [ 2 ] Un contador con valor de módulo m se conoce comúnmente como contador módulo m o MOD-m . Por ejemplo, un contador de décadas es un contador digital que tiene diez estados y, por lo tanto, es un contador MOD-10. [ 4 ]
El módulo máximo posible de un contador está determinado por el número de flip-flops. Más específicamente, un contador con n flip-flops tiene un módulo máximo posible de 2 n . [ 4 ] Por ejemplo, un contador de cuatro bits puede tener un módulo de hasta 16 ( 2 4 ).
Algunos contadores (por ejemplo, los binarios) incluyen todos los estados posibles en sus secuencias de conteo. Otros omiten uno o más estados posibles. Por ejemplo, un contador MOD-10 (de década) con cuatro biestables solo utiliza diez de los dieciséis estados posibles.
Método de cronometraje
Los contadores se clasifican generalmente en síncronos o asíncronos, dependiendo de si sus biestables se activan simultáneamente o en momentos diferentes.
Sincrónico
Un contador síncrono es un contador digital en el que todos los flip-flops comparten un reloj común y cambian de estado al mismo tiempo. [ 3 ]
Asíncrono (onda)
En un contador asíncrono , también conocido como contador de rizado , [ 4 ] cada flip-flop tiene un reloj único. Los flip-flops están dispuestos en una "cadena", con el reloj de entrada del contador conectado al primer flip-flop y la salida de cada flip-flop sincronizando el siguiente flip-flop de la cadena. La secuencia de conteo natural de estos circuitos es binaria y, por consiguiente, la mayoría de los contadores asíncronos son binarios, almacenando cada flip-flop un bit del valor de conteo binario. [ 5 ]
Dado que cada flip-flop introduce un retardo entre el flanco activo del reloj y la conmutación de la salida, los bits del contador cambian de estado en momentos diferentes, produciendo un efecto de propagación que provoca inestabilidad en el conteo mientras el reloj de entrada se propaga a través de los flip-flops. Durante esta inestabilidad, el conteo transitará brevemente por uno o más valores inválidos. La duración de esta inestabilidad (el tiempo de estabilización ) depende de varios factores, incluyendo el retardo entre el reloj y la salida para cada flip-flop y, para cualquier transición de conteo particular, la cantidad de bits que cambian de estado. El tiempo de estabilización máximo se produce cuando todos los bits del contador cambian de estado (es decir, cuando el contador se desborda o se queda sin saldo) y, por lo tanto, es proporcional a la cantidad de flip-flops.
Esto hace que los contadores de rizado no sean adecuados para su uso en circuitos síncronos que requieren que el contador tenga un tiempo de estabilización de salida rápido. [ 6 ] Además, a menudo es poco práctico usar los bits de salida de los contadores de rizado como relojes para circuitos externos porque el efecto de rizado causa un desfase temporal entre los bits. Los contadores de rizado se usan comúnmente como contadores de propósito general y divisores de frecuencia de reloj en aplicaciones donde el conteo instantáneo y el desfase temporal no son importantes. Los contadores asíncronos no se suelen usar en circuitos integrados VLSI debido a las dificultades para simularlos y probarlos, y porque requieren un esfuerzo de diseño mucho mayor para garantizar un funcionamiento fiable. [ 3 ]
Dirección de conteo
Muchos contadores están diseñados para contar en una sola dirección, lo que significa que cuentan hacia arriba o hacia abajo, pero no en ambas. Un contador que solo cuenta hacia arriba se denomina generalmente contador ascendente , y uno que solo cuenta hacia abajo, contador descendente . [ 6 ]
Un contador bidireccional , o contador ascendente/descendente, es un contador digital que cuenta hacia arriba o hacia abajo según lo indique una señal de control de dirección. En los contadores ascendentes/descendentes síncronos, la señal de control es una única entrada digital cuyo estado indica la dirección del conteo (por ejemplo, '1' = cuenta hacia arriba; '0' = cuenta hacia abajo). En los contadores ascendentes/descendentes asíncronos, el control de dirección puede consistir en entradas de reloj separadas para "ascender" y "descender".
Tipos comunes
Contador binario
Un contador binario es un contador digital que representa directamente el conteo como un número binario. Un contador binario es un contador MOD- 2n , donde n es el número de biestables utilizados para almacenar el conteo. Por ejemplo, las siguientes ilustraciones muestran el comportamiento de un contador binario de 5 bits, que tiene 32 ( 2⁵ ) estados y, por lo tanto , es un contador MOD-32:
Secuencia de conteo de un contador ascendente binario de 5 bits.
Cambios de voltaje en las salidas de un contador binario de 5 bits a medida que cuenta de 0 a 31 (de izquierda a derecha), con el bit más significativo en la fila superior y los bits sucesivamente menos significativos en las filas inferiores.
contador binario asíncrono
Un contador binario asíncrono, o contador de rizado binario, es una "cadena" de biestables de conmutación (T) (o equivalentes) en la que el biestable menos significativo (bit 0) es sincronizado por la señal de reloj de entrada del contador, y todos los demás biestables son sincronizados por la salida del biestable más cercano y menos significativo (por ejemplo, el bit 0 sincroniza el biestable bit 1, el bit 1 sincroniza el bit 2, etc.). Cuando se implementa con biestables JK o D , cada biestable se configura para conmutar cuando recibe una señal de reloj (es decir, J y K conectados a un nivel lógico alto; D conectado a Q ).
Diagrama esquemático de un contador de rizado de n bits construido con biestables JK . En este contador, el primer biestable se activa con los flancos ascendentes; los demás se activan con los flancos descendentes.
Diagrama de temporización de un contador binario de rizado de 4 bits durante un desbordamiento, que ilustra cómo se viola la secuencia de conteo normal mientras el reloj de entrada se propaga a través del circuito del contador.
Cada flip-flop funciona como un contador de un bit que incrementa su valor (al conmutar su salida) una vez por ciclo de reloj. Cuenta de cero a uno y, al llegar el siguiente reloj, se desborda y reinicia la secuencia de conteo desde cero. Cada estado de salida se mantiene durante un ciclo de reloj completo, por lo que la frecuencia de la señal de salida de cada flip-flop es exactamente la mitad de la de su reloj de entrada. Se pueden añadir flip-flops adicionales a la cadena para formar un contador de cualquier tamaño de palabra (número de bits), con una frecuencia de salida para cada bit igual a la mitad de la frecuencia de su bit menos significativo más cercano.
Diagrama funcional de un circuito integrado contador de rizado CMOS 4020 de 14 bits.
Fotografía de un circuito integrado contador de rizado CMOS 4020 de 14 bits ( RCA CD74HC4020E).
Contador binario síncrono
Un contador binario síncrono es un contador síncrono que genera el conteo como un número binario. El circuito que se muestra a continuación es un contador binario síncrono de cuatro bits con conteo ascendente, implementado con biestables JK. En el flanco ascendente del reloj, el bit menos significativo (Q₀ ) siempre cambia de estado, mientras que los demás bits solo cambian cuando todos los bits menos significativos están en estado lógico alto (es decir, Q₁ cambia si Q₀ está en estado lógico alto; Q₂ cambia si Q₀ y Q₁ están ambos en estado alto; y Q₃ cambia si Q₀ , Q₁ y Q₂ están todos en estado alto).
![]()
Al igual que en los contadores asíncronos, cada biestable introduce un retardo desde el flanco del reloj de entrada hasta la conmutación de la salida, pero en este caso todos los biestables cambian de estado simultáneamente y, en consecuencia, la salida del contador se estabilizará después de un solo retardo de biestable, independientemente del número de bits.
Contador de décadas BCD
Un contador de década BCD ( decimal codificado en binario ) es un contador MOD-10 que representa directamente el conteo como un número binario en el rango de 0 a 9. Normalmente, un contador de década BCD cuenta de 0 a 9 y luego se desborda. Debido a que su rango de valores de salida es idéntico al de un dígito decimal, los contadores de década BCD se utilizan comúnmente para representar dígitos decimales.
Contador de décadas BCD asíncrono
El circuito que se muestra a continuación es un contador de década BCD asíncrono. En esencia, se trata de un contador binario de rizado de 4 bits que utiliza una puerta AND para reiniciar el conteo a cero (reiniciando todos los flip-flops) cuando el conteo binario alcanza el valor decimal 10 (binario 1010), lo que resulta en 10 estados de salida. Como en todos los contadores asíncronos, el conteo almacenado es inestable mientras el reloj externo se propaga a través de la cadena de flip-flops (incluido el reinicio al alcanzar el conteo 10).
Diagrama esquemático de un contador de décadas BCD asíncrono de 4 bits construido con biestables de conmutación.
Diagrama de temporización de un contador de década BCD asíncrono de 4 bits durante un desbordamiento, que ilustra cómo la salida pasa por estados no válidos a medida que el conteo pasa del decimal 9 al 0.
Contador de décadas BCD síncrono
El circuito que se muestra a continuación es un contador de décadas BCD síncrono. Se utilizan cinco puertas lógicas para implementar la lógica del siguiente estado, lo que permite un funcionamiento más rápido que un contador asíncrono, aunque a costa de un circuito adicional.
![]()
Contador de anillos
Un contador de anillo es un registro de desplazamiento circular que se inicializa (mediante su señal de reinicio) de manera que un flip-flop (normalmente el bit 0) almacena un '1' y todos los demás flip-flops almacenan un '0'. Cada pulso de reloj hace que el '1' se desplace al siguiente flip-flop. Cuando el '1' llega al último flip-flop del registro de desplazamiento, el siguiente pulso de reloj hace que se desplace al primer flip-flop, reiniciando así la secuencia de conteo y produciendo un desbordamiento del contador. En cualquier momento dado, solo un bit de salida del contador es lógico '1', por lo que un contador de anillo es, en efecto, una máquina de estados one-hot .
Un contador de anillo es MOD-n, donde n es el número de biestables. Por ejemplo, el contador de anillo que se muestra a continuación tiene cuatro biestables y, por lo tanto, es un contador MOD-4. En este contador, el bit 0 se activa inicialmente y todos los demás bits se desactivan.
![]()
Johnson contrarreloj
Un contador Johnson es un registro de desplazamiento circular en el que la salida de la última etapa se invierte y se conecta a la entrada de datos de la primera etapa, [ 7 ] [ 8 ] [ 9 ] y todos los bits se inicializan a cero, produciendo así una secuencia de salida de código Gray . Puede funcionar a frecuencias relativamente altas porque no hay compuertas lógicas intermedias y, por consiguiente, el retardo de propagación en el peor de los casos es desde el reloj hasta la salida del flip-flop. Un contador Johnson es MOD-2n, donde n es el número de flip-flops. Por ejemplo, el contador Johnson que se muestra a continuación tiene cuatro flip-flops y, por lo tanto, es un contador MOD-8.
![]()
Los contadores Johnson se utilizan comúnmente como secuenciadores de máquinas de estados, como preescaladores en aplicaciones de conteo de alta frecuencia y en aplicaciones especializadas como la generación de formas de onda analógicas (por ejemplo, el generador sinusoidal de Davies). [ 10 ]
atributos de la máquina de estados
Registro estatal
Un contador digital es una máquina de estados finitos en la que los biestables del contador funcionan como registro de estado . El valor almacenado en el registro de estado es un vector de bits que representa el estado actual del contador.
secuenciación de estados
Cuando no recibe ninguna otra influencia de sus señales de entrada, un contador recorrerá cíclicamente una secuencia fija de estados. [ 2 ] En consecuencia, el diagrama de estados de un contador tiene la apariencia de un bucle. Por ejemplo, un contador MOD-8 recorrerá repetidamente ocho estados:
- Diagramas de estados de varios contadores MOD-8
Contador ascendente binario básico de 3 bits
Contador binario bidireccional de 3 bits. La dirección del conteo se controla mediante la entrada dir : 1=arriba, 0=abajo.
Contador binario ascendente de 3 bits con entrada de habilitación de conteo (CE).
Contador de código Gray de 3 bits
Contador Johnson de 4 bits
Contador de anillo de 8 bits
estados ilegales

Un contador que tienebiestables y móduloutiliza solo una fracción de sus posibles estados. Los estados no utilizados se denominan típicamente estados ilegales , [ 2 ] ya que están prohibidos durante el funcionamiento normal. En general, un MOD-mostrador conlas chanclas tienenestados ilegales. Por ejemplo, un contador de décadas BCD MOD-10 con cuatro flip-flops tiene seis () estados ilegales. Un contador de Johnson tieney un contador de anillos tieneestados ilegales.
Durante su funcionamiento normal, un contador nunca entrará en un estado no válido. Sin embargo, en algunos casos, una anomalía (por ejemplo, debido al ruido en la fuente de alimentación o a la exposición a la radiación) puede provocar que un contador entre erróneamente en un estado no válido. Para prever esta posibilidad, los contadores suelen diseñarse para recuperarse automáticamente de los estados no válidos, pasando a un estado válido en el siguiente flanco de reloj activo.
Modelo general
Los contadores digitales se implementan típicamente como máquinas de Moore porque sus salidas están determinadas únicamente por el estado actual. [ 11 ] Esto hace que los contadores se adapten naturalmente a las máquinas de Moore, lo que a su vez simplifica el diseño y promueve un funcionamiento fiable. [ 1 ]
Más concretamente, los contadores se implementan con mayor frecuencia como máquinas de estados de Medvedev, una subclase de máquinas de Moore que generan directamente el estado actual, donde cada estado codifica un valor de conteo específico. [ 12 ] Dado que el registro de estado de dichas máquinas está conectado directamente a las salidas del contador, no se requiere lógica de codificación y se minimizan los retrasos de salida.
Algunos contadores emplean lógica combinacional entre el registro de estado y las salidas del contador para transformar el estado a una codificación de salida específica, por lo que se clasifican como máquinas de Moore completas. Por ejemplo, el circuito integrado CMOS 4017 codifica la salida de un contador de década Johnson en formato one-hot, aprovechando la salida de código Gray inherente del contador Johnson para evitar fallos en las salidas one-hot.
Diagrama funcional de un circuito integrado CMOS 4017, que combina un contador Johnson de 5 bits y lógica de decodificación de salida para implementar un contador de década one-hot en cascada.
Lógica interna de un circuito integrado CMOS 4017; una salida está activa por estado. Las dos compuertas superiores facilitan la recuperación automática de estados no válidos.
Implementación
Los contadores se implementan de diversas maneras, incluyendo como circuitos integrados MSI y LSI dedicados , como contadores embebidos en ASIC , como periféricos de contador y temporizador de propósito general en microcontroladores y como bloques IP en FPGA . En este último caso, un contador se instancia típicamente sintetizándolo a partir de una descripción escrita en VHDL , Verilog u otro lenguaje de descripción de hardware . Por ejemplo, el siguiente código VHDL describe un contador binario ascendente/descendente de 32 bits con habilitación de conteo y capacidad de precarga:
entity bidirectional_counter is port ( -- señales de entrada/salida del contador: CLK : in std_logic ; -- reloj RESET : in std_logic ; -- reinicio asíncrono ENABLE : in std_logic ; -- habilitación de conteo LOAD_ENABLE : in std_logic ; -- habilitación de carga COUNT_UP : in std_logic ; -- '1' para conteo ascendente, '0' para conteo descendente DATA_IN : in unsigned ( 31 downto 0 ); -- valor para cargar en el contador DATA_OUT : out unsigned ( 31 downto 0 ) -- valor actual del contador ); end bidirectional_counter ;arquitectura comportamiento de bidirectional_counter es señal contador : unsigned ( 31 downto 0 ) := ( others => '0' ); -- registro contador inicio proceso ( CLK , RESET ) inicio si RESET = '1' entonces -- si se solicita el reinicio del contador contador <= ( others => '0' ); -- reiniciar el contador elsif rising_edge ( CLK ) entonces -- si no en el flanco ascendente del reloj si LOAD_ENABLE = '1' entonces -- si se solicita la carga contador <= DATA_IN ; -- insertar nuevo valor en el contador elsif ENABLE = '0' entonces -- si no si el conteo está deshabilitado null ; -- no hacer nada elsif COUNT_UP = '1' entonces -- si no si se está contando hacia arriba contador <= contador + 1 ; -- incrementar contador elsif -- si no, se está contando hacia abajo, por lo que contador <= contador - 1 ; -- decrementar contador fin si ; fin si ; fin proceso ; DATA_OUT <= contador ; -- mostrar el valor actual del contador fin comportamiento ;En los circuitos integrados MSI y LSI, un contador se implementa como un chip semiconductor que se une y encapsula en un paquete semiconductor .
Chip semiconductor de un contador binario síncrono de 4 bits
Contador binario síncrono de 4 bits ensamblado en un paquete de plástico de doble línea.
Cascada
Algunos contadores son en cascada , lo que significa que se pueden conectar varias instancias de dichos contadores para formar un contador extendido más grande con un módulo mayor. Para facilitar la conexión en cascada, un contador en cascada suele tener una entrada de habilitación que permite el conteo y una salida que propaga los desbordamientos o subdesbordamientos a la entrada de habilitación del siguiente contador en la cascada. [ 2 ]
El primer contador (el menos significativo) en una cascada puede habilitarse permanentemente conectando su entrada de habilitación a un nivel lógico fijo , o bien su entrada de habilitación puede controlarse dinámicamente. En ambos casos, la entrada de habilitación del primer contador sirve como habilitación de conteo para todo el contador extendido.
Los contadores binarios en cascada suelen generar una señal de acarreo en cascada para notificar al siguiente contador de la cascada sobre un desbordamiento o subdesbordamiento inminente. Por ejemplo, en el contador ascendente en cascada de cuatro bits que se muestra a continuación, una puerta AND activa la salida de acarreo en cascada (RCO) cuando se espera que el siguiente reloj provoque un desbordamiento (es decir, cuando el conteo es binario 1111 y el conteo está habilitado):
Contador ascendente binario de 4 bits en cascada
Una cascada de contadores ascendentes binarios de 4 bits se utiliza para implementar un contador ascendente de n bits, donde n es un múltiplo de cuatro.
Aplicaciones
Los contadores binarios se utilizan ampliamente como temporizadores y contadores de eventos.
En un temporizador digital, el contador se sincroniza mediante una señal digital periódica que sirve como referencia de tiempo y provoca que el conteo cambie a una velocidad constante. La señal de reloj suele provenir de una fuente de frecuencia estable, como un oscilador de cristal , ya sea directamente o a través de un divisor de frecuencia. Según la aplicación, un temporizador puede generar una señal que indique el estado de temporización, el conteo actual o ambos. En este último caso, el conteo suele indicar el tiempo transcurrido o el tiempo restante.
Los contadores de eventos se utilizan normalmente para contabilizar eventos asíncronos que pueden ocurrir con frecuencia variable. En cualquier momento dado, el recuento actual indica el número de eventos que han ocurrido desde que comenzó el conteo.
Direccionamiento de memoria
Los contadores binarios se utilizan ampliamente en computadoras para generar direcciones de memoria. En estas aplicaciones, la salida del contador se conecta normalmente a un bus de direcciones y se utiliza para seleccionar secuencialmente ubicaciones de memoria contiguas a medida que el contador aumenta o disminuye. Ejemplos comunes de esto incluyen contadores de programa, controladores de acceso directo a memoria (DMA) y búferes FIFO. Cuando se utiliza para almacenar direcciones de datos durante operaciones de transferencia de datos, un contador se conoce comúnmente como registro de direcciones de memoria (MAR). [ 13 ] [ 14 ]
Contador de programa
El contador de programa (PC) en una unidad central de procesamiento generalmente consta de un contador binario como se muestra en el siguiente ejemplo:
![]()
En el PC anterior, el contador actual es la dirección de memoria de la siguiente instrucción a ejecutar. Al reiniciarse el procesador, el contador se pone a cero para que la ejecución comience en la dirección cero. Cuando se obtiene una instrucción de la memoria, se activa CE (habilitación del contador) para permitir que el contador se incremente y avance a la siguiente dirección de instrucción secuencial. Si es necesario cambiar la ejecución a una secuencia de instrucciones diferente (por ejemplo, debido a la ejecución de una instrucción de salto, una llamada a una subrutina, una interrupción o el retorno de una subrutina o interrupción), la dirección de la primera instrucción de la nueva secuencia se aplica a las entradas de datos y se activa Load; esto anula CE (si está activada) y copia los datos al contador.
FIFO
Los búferes electrónicos FIFO (primero en entrar, primero en salir) se utilizan habitualmente para conectar dispositivos productores de datos con consumidores de datos que operan en diferentes dominios de reloj o que, en intervalos finitos, no pueden consumir datos lo suficientemente rápido como para evitar la pérdida de datos .
La FIFO que se muestra a continuación utiliza dos contadores binarios como registros de direcciones de memoria (MAR) para una RAM de doble puerto . Al escribir en la FIFO, la palabra de datos WDATA se escribe en la dirección de RAM WADDR y el MAR de escritura se incrementa para preparar la siguiente escritura. Al leer en la FIFO, RDATA recibe la palabra de datos almacenada en la dirección de RAM RADDR y el MAR de lectura se incrementa. Excepto en el caso especial de que la FIFO esté llena, el nivel de la FIFO (número de palabras sin leer) es igual a WADDR-RADDR.
![]()
Esta FIFO puede ser asíncrona o síncrona, lo que significa que las operaciones de lectura y escritura pueden realizarse en dominios de reloj diferentes o en un único dominio de reloj común. En este último caso, RCLK y WCLK están conectados entre sí. En las FIFO asíncronas, los MAR suelen emitir código Gray (en lugar de binario) para permitir su uso seguro en la detección del nivel de la FIFO en ambos dominios de reloj.
Controlador DMA
Los contadores binarios se utilizan de diversas maneras en los controladores de acceso directo a memoria (DMA). Por ejemplo, se emplean contadores similares a los que se muestran a continuación al copiar un búfer de memoria mediante DMA. Dos contadores funcionan como registros de direcciones de memoria (MAR) para generar las direcciones de origen y destino de los datos que se van a copiar. Los MAR suelen ser bidireccionales para permitir que las transferencias de datos comiencen en la dirección base o final del búfer. Un tercer contador lleva la cuenta de las palabras restantes que quedan por transferir.
![]()
![]()
Para preparar la operación DMA, las direcciones iniciales se cargan en los MAR, el tamaño del búfer se carga en el contador de transferencia de datos y la dirección de conteo (normalmente almacenada en un flip-flop) se programa para cada MAR.
Cuando se completa la transferencia de cada palabra, se activa la señal CE (habilitación de conteo) en todos los contadores, lo que provoca que los registros MAR avancen a su siguiente dirección y que el conteo de palabras restante disminuya. Cuando el conteo restante llega a cero, la compuerta lógica NOR de sus bits cambia a nivel alto, lo que indica que la operación DMA ha finalizado.
Temporizadores
Temporizador de un solo disparo
En electrónica digital, un temporizador monoestable (o simplemente monoestable ) es un circuito que produce un único pulso de salida con una sincronización precisa en respuesta a una señal de entrada. El diseño digital permite un ajuste sencillo de la duración del pulso y proporciona una alta precisión y repetibilidad en comparación con sus homólogos analógicos, lo que hace que los temporizadores monoestables digitales sean preferibles para aplicaciones donde la precisión de la sincronización es fundamental. [ 15 ]
El temporizador monoestable que se muestra a continuación utiliza un contador binario descendente para generar un pulso de salida de duración controlada con precisión. La salida del temporizador es la operación OR lógica de todos los bits del conteo actual; por lo tanto, el pulso de salida está activo mientras el temporizador está en funcionamiento (es decir, cuando el conteo no es cero). Cuando el conteo llega a cero, el pulso de salida finaliza y el conteo se detiene.
![]()
Para poner en marcha el temporizador, se aplica un valor que representa el ancho de pulso deseado a las entradas de datos del contador y se activa la carga para generar el pulso. El ancho de pulso se especifica en ciclos de reloj. Por ejemplo, en el caso de un reloj de 1 MHz, un pulso de salida de 100 microsegundos tiene una duración de 100 ciclos de reloj, como se muestra a continuación:
![]()
El pulso único que se muestra arriba es reactivable , lo que significa que puede reiniciarse mediante un disparo posterior mientras está en funcionamiento, extendiendo así la duración del pulso de salida. Por el contrario, el pulso único que se muestra abajo no es reactivable , lo que significa que ignorará los disparos entrantes mientras el pulso de salida esté activo.
![]()
Temporizador de intervalo periódico
Los contadores binarios se utilizan comúnmente como temporizadores de intervalo periódico (PIT), que generan pulsos periódicos a una fracción entera de la frecuencia del reloj. Los PIT se emplean para generar interrupciones del reloj del sistema en ordenadores, como divisores de reloj en bucles de enganche de fase y sintetizadores de frecuencia, y en muchas otras aplicaciones.
En el circuito que se muestra a continuación, se utiliza un contador binario descendente para implementar un PIT. El intervalo entre pulsos de salida, medido en ciclos de reloj, se almacena en el registro de intervalo, lo que da como resultado la frecuencia de salida.Cuando el contador llega a cero, la compuerta NOR emite un pulso en la salida del temporizador. Este pulso se utiliza internamente para recargar el contador y reiniciar el temporizador. Cada pulso tiene una duración de un ciclo de reloj.
![]()
Por ejemplo, para obtener una frecuencia de salida de 1 MHz a partir de un reloj de 6 MHz, el intervalo se establecería en 5, como se muestra en el siguiente diagrama de temporización:
![]()
En aplicaciones que requieren salidas de onda cuadrada, normalmente se utiliza un PIT para conmutar un flip-flop, lo que da como resultado una frecuencia de salida igual a la mitad de la frecuencia de salida del PIT:
![]()
Sintetizador de frecuencia
Los temporizadores de intervalo periódico se utilizan como divisores de reloj en sintetizadores de frecuencia de bucle de enganche de fase (PLL) [ 16 ] , que generan una frecuencia de salida precisa sincronizando un oscilador controlado por voltaje (VCO) con un reloj de referencia. A continuación se muestra una implementación típica que genera una frecuencia de salida.como un múltiplo racional de la frecuencia del reloj de entradaSe utilizan dos divisores de reloj para la escala.ypor divisores enterosy, respectivamente.

Cuando el PLL está sincronizado, las salidas del divisor de reloj tienen frecuencias idénticas con solo una diferencia de fase. [ 17 ] Se genera una tensión de error proporcional a la diferencia de fase y se utiliza para ajustar la frecuencia del VCO de manera que la diferencia de fase se mantenga pequeña y, por lo tanto, se mantenga una señal exacta.relación entrey.
Modulador de ancho de pulso
Los contadores binarios son un componente esencial en los moduladores de ancho de pulso digitales , que se utilizan comúnmente para controlar la velocidad de los motores, la temperatura, el brillo de los LED y otros procesos físicos. Estos se pueden implementar de diversas maneras. Por ejemplo, el modulador de ancho de pulso que se muestra a continuación utiliza un único contador binario ascendente con reinicio síncrono para controlar tanto el ancho como la frecuencia de los pulsos de salida:
![]()
El valor almacenado en el registro de período PWM () determina la frecuencia de salida.incrementos a la frecuencia del relojhasta que coincida, lo que provoca que el comparador de identidad active la señal EndCycle, reiniciando así el contador e iniciando el siguiente ciclo de salida. En consecuencia, el módulo del contador esy la frecuencia del pulso de salida.
especifica el ancho del pulso de salida en períodos de reloj. El comparador de magnitud afirmamientras Count es menor que, produciendo así un pulso que comienza al inicio del ciclo de salida y termina cuando el conteo alcanza. Un buffer de flip-floppara evitar que aparezcan fallos en la salida PWM debido a riesgos estáticos .
El ciclo de trabajo es el porcentaje del tiempo del ciclo PWM en el que el pulso está activo:Por ejemplo, el siguiente diagrama muestra la sincronización de la señal paray, lo que resulta en un ciclo de trabajo del 25 por ciento enHertz.
![]()
Medición del ancho del pulso
La medición del ancho de pulso es una aplicación común de contadores que se utiliza en una amplia variedad de equipos, como radares y sonares , sistemas de automatización industrial y sistemas de imágenes médicas . A continuación se muestra un circuito típico que utiliza un contador binario ascendente para medir el ancho de pulsos positivos asíncronos (con respecto al reloj del contador).
![]()
La señal medida se sincroniza primero con el dominio de reloj del contador, generando así la señal de entrada sincronizada Clock gate . Esto se hace para evitar errores de medición debidos a la metaestabilidad o a la violación de los tiempos mínimos de configuración o retención en los biestables del contador y del detector de flanco.
Cuando comienza un pulso de puerta de reloj , el detector de flanco ascendente activa el inicio para poner a cero el conteo, y el contador procede a contar los pulsos de reloj mientras la puerta de reloj permanece activa. Cuando finaliza el pulso, el contador deja de contar y el conteo acumulado indica el ancho de pulso medido en unidades de períodos de reloj. El ancho de pulso essegundos, dondees la frecuencia del reloj en Hertz.
Un detector de flanco descendente emite una señal estroboscópica de "Fin" para indicar el final de la medición, que puede utilizarse para enviar una señal a circuitos externos o transferir el conteo a un almacenamiento externo, o ambas cosas, antes de que comience la siguiente medición.
Contador de frecuencia
Algunas aplicaciones de contadores utilizan varios contadores. Un ejemplo de ello es el contador de frecuencia que se muestra a continuación, el cual utiliza dos contadores para medir la frecuencia de una señal digital. Un contador, configurado como monoestable, genera un pulso de ancho controlado con precisión, conocido como puerta de tiempo . La puerta de tiempo se utiliza para activar un contador de eventos, que a su vez se sincroniza con la señal cuya frecuencia se desea medir.
![]()
Cuando comienza una medición (al activar Start ), el contador de eventos se pone a cero y, a continuación, se procede a contar los flancos ascendentes de la señal de frecuencia desconocida mientras la ventana de tiempo permanece activa. Cuando la ventana de tiempo finaliza, el conteo de flancos se detiene y el conteo acumulado indica la frecuencia medida. El conteo indica directamente la frecuencia medida en Hz cuando el tiempo de la ventana es de un segundo; para otros tiempos de ventana, el conteo debe escalarse para obtener Hz.
Conversión analógica a digital
Los contadores se emplean de diversas maneras en los circuitos convertidores analógico-digitales (ADC). Por ejemplo, en un ADC de seguimiento, se utiliza un contador binario bidireccional para controlar la tensión de salida () de un convertidor digital-analógico .es proporcional al recuento y, por lo tanto, aumenta o disminuye, respectivamente, cuando el recuento se incrementa o se decrementa.
![]()
Un comparador de voltaje emite un bit que indica sies mayor que el voltaje de entrada del ADCEste bit controla la dirección del conteo de tal manera que el conteo —y el voltaje del DAC— aumentarán o disminuirán, respectivamente, cuando eles menor que o mayor que, causando asípara rastrearDado que el conteo sigueEn tiempo casi real, se utiliza directamente como datos de salida del convertidor analógico-digital (ADC).
Seguimiento de posición
Los contadores binarios bidireccionales se utilizan comúnmente para rastrear la posición física de objetos en movimiento que son monitoreados por codificadores incrementales , como se muestra en el circuito de ejemplo a continuación. Un cambio de posición se indica mediante un flanco ascendente o descendente en la señal de salida A o B del codificador. Cada cambio de posición está asociado con una distancia bien definida.La diferencia de fase entre A y B indica la dirección del movimiento (por ejemplo, "hacia adelante" o "hacia atrás"). El contador se incrementa o decrementa cuando el objeto se mueve hacia adelante o hacia atrás, respectivamente.
![]()
Para comenzar el seguimiento, el objeto monitoreado se ubica en una posición de referencia () y el contador se pone a cero. A partir de ese momento, el contador indica la posición actual en términos de desplazamiento desde la posición de referencia, medida enunidades de distancia:. El contador es efectivamente un número entero con signo en los casos en que el objeto puede moverse a cualquiera de los lados de la posición de referencia.
Generador de forma de onda sinusoidal escalonada
Una forma de onda de voltaje sinusoidal se puede aproximar recorriendo los estados de salida de un contador Johnson y sumando los voltajes de salida a través de una red de resistencias que están ponderadas para mapear cada estado del contador a un punto en la función coseno: [ 10 ]
![]()
La forma de onda sinusoidal resultante tiene frecuenciaparabiestables y una frecuencia de reloj deEn consecuencia, la frecuencia de la onda sinusoidal se puede cambiar simplemente modificando la frecuencia del reloj.
La distorsión armónica se reduce aumentando, lo que proporciona más pasos y tamaños de paso más pequeños en la onda sinusoidal; aumentando la precisión de la resistencia; y agregando un condensador o filtro activo para filtrar de paso bajo los bordes de los pasos de voltaje.
Véase también
Referencias
- 1 2 Mano, M. Morris; Ciletti, Michael D. (2012). Diseño digital (5.ª ed.). Prentice Hall. ISBN 0132774208.
- 1 2 3 4 5 6 7 "Diseño lógico registrado" (PDF) . Advanced Micro Devices. 1996. Consultado el 9 de mayo de 2025 .
- 1 2 3 4 Keslin, Hubert (2014). Diseño VLSI digital descendente: De arquitecturas a circuitos a nivel de compuertas y FPGAs . Morgan Kaufmann. ISBN 0128007729.
- 1 2 3 Maini, Anil K. (2007). Electrónica digital: principios, dispositivos y aplicaciones (PDF) . John Wiley & Sons, Ltd. ISBN 978-0-470-03214-5Consultado el 1 de mayo de 2025 .
- ↑ Mano, Morris. Lógica digital y diseño de computadoras (1.ª ed.). Pearson. ISBN 978-0132145107.
- 1 2 Gorla, Raju. "Contadores - Circuitos digitales" . VLSI Web . Recuperado el 9 de mayo de 2025 .
- ↑ Singh, Arun Kumar (2006). Principios digitales: fundamentos del diseño y la aplicación de circuitos . New Age Publishers. ISBN 81-224-1759-0.
- ↑ Horowitz, Paul; Hill, Winfield (1989). El arte de la electrónica . Cambridge University Press. ISBN 0-521-37095-7.
- ↑ Graf, Rudolf F (1999). Diccionario moderno de electrónica . Newnes. ISBN 0-7506-9866-7.
- 1 2 Dunbar, Steven. "El generador sinusoidal de Davies" (PDF) . Texas Instruments . Consultado el 27 de marzo de 2025 .
- ↑ Mano, M. Morris; Kime, Charles R. (2007). Fundamentos de lógica y diseño de computadoras . Prentice Hall. ISBN 978-0131989269.
- 1 2 Khoussainov; Nerode (2001). Teoría de autómatas y sus aplicaciones . Springer. ISBN 978-0-8176-4207-5.
- ↑ Stallings, William (2012). Organización y arquitectura de computadoras (9.ª ed.). Pearson. ISBN 978-0132936330.
- ↑ Harris, David; Harris, Sarah (2012). Diseño digital y arquitectura informática (2.ª ed.). Morgan Kaufmann. ISBN 978-0123838728.
- ↑ Sidney, M. (2014). Electrónica digital y diseño lógico . McGraw-Hill. ISBN 978-9351640936.
- ↑ Razavi, Behzad. Microelectrónica de RF . Pearson. ISBN 978-0137134731.
- ↑ Morgan, David (2003). "CD4046B Phase-Locked Loop: A Versatile Building Block for Micropower Digital and Analog Applications" (PDF) . Texas Instruments . Consultado el 18 de enero de 2026 .
Enlaces externos
Contenido multimedia relacionado con los circuitos de contadores en Wikimedia Commons.
- Sistemas numéricos
- circuitos digitales
- operaciones unarias