Verilog Práctico

Capítulo 21.2. Contadores BCD

7 de mayo de 2023


En esta segunda parte dedicada a los contadores, veremos cómo describir contadores BCD. 

Un contador BDC es un contador tipo modulus, donde el valor final es 9.


1. Contador BCD


En este ejemplo vamos a modelar un contador BCD con reset y enable.

El pulsador de reset lo implementamos con el sw1 de la Alhambra FPGA y la señal enable la introducimos por el pin D12. El display de 7 segmentos lo conectamos en los pines D0 a D7. 

Código Verilog

El código es el mismo que para un contador modulus donde el valor final es 9. Sólo hay que añadir las funciones de reset y enable. Ver el Capítulo 21.1 - Contadores  para más info.

La salida del contador se conecta a un decodificador binario a hexadecimal para visualizar el funcionamiento del contador en un display de 7 segmentos. 

En el módulo superior realizamos las conexiones entre los módulos.

top module

Archivo .pcf 

2. Contador BCD de dos dígitos


En este ejemplo vamos a conectar en dos contadores BCD en cascada. Ambos funcionan como contadores 0-9, pero conectados en cascada uno mostrará las unidades y otro las decenas, de esa manera obtenemos un contador de 00 a 99.

Con la señal done (dn_0) del contador inicial y la señal enable habilitamos la cuenta del segundo contador. Cuando el contador de unidades llega a 9, se activa la señal dn_0 y se habilita durante un pulso de reloj el contador de las decenas, de manera que incrementa su valor por cada 10 cuentas del contador de unidades. 


Para mostrar el resultado, vamos a emplear un display de 7 segmentos x 4 dígitos.

Esquema

Código Verilog


El contador BCD es el mismo que el del ejemplo nº 1.

Con un multiplexor 2-1 sacamos alternativamente las señales para los displays de 7 segmentos que mostrarán las unidades y las decenas.

En el módulo superior instanciamos dos contadores BCD y realizamos las conexiones pertinentes entre los módulos multiplexor y decodificador para el display de 7 segmentos. 

Archivo .pcf 

3. Contador BCD de cuatro dígitos


En este ejemplo vamos a conectar cuatro contadores BCD en cascada, así obtenemos un contador de 0 a 9999.

Esquema

contador.v 

multiplexor 4-1 

top module 

archivo .pcf 

4. Contador de 4 bits como máquina de estado finito


En este ejemplo vamos a describir un contador como una máquina de estado finito. Esta forma de describir contadores es una herramienta muy potente; podemos describir cualquier tipo de contador. Implementar contadores empleando una FSM permite personalizar el contador cualesquiera que sean las características o requisitos que imponga nuestro diseño.

Esquema

Diagrama de estados


El diagrama de estados de un contador descrito como FSM, refleja cómo la fsm va cambiando cíclicamente del estado actual al siguiente con cada ciclo de reloj y en cada estado se actualiza el valor del contador. En el diagrama, la señal clk* es una señal de reloj customizada de 1 Hz. 

Código Verilog

Declaramos las entradas y salidas, los estados de la fsm y los registros cs y ns. 

Una señal de reloj de 1 Hz nos ayuda a visualizar mejor en el display de 7 segmentos el funcionamiento del contador. 

Para describir la FSM utilizamos el estilo de tres bloques always

Un bloque always para almacenar el estado actual. 

Un segundo bloque always para el circuito combinacional estado siguiente. 

Un tercer bloque always para el circuito que genera las salidas en función del estado actual. 

En el módulo superior conectamos la fsm con el convertidor binario a decimal 

El convertidor binario a decimal es el mismo que en ejemplos anteriores. No lo pego aquí para ahorrar espacio.

Archivo .pcf 

5. Contador de números impares como máquina de estado finito


Por último veamos otro contador modelado como fsm. Para ver un ejemplo de cómo se puede tunear un contador, vamos a diseñar un contador que muestre sólo los números impares.


Diagrama de estados

Código Verilog

Declaramos las entradas y salidas y una señal de reloj de 1 Hz.

Describimos la FSM empleando el estilo de tres bloques always.

Un bloque always para almacenar el estado actual y un segundo bloque always para el circuito combinacional estado siguiente.

El tercer bloque always describe el circuito que genera las salidas en función del estado actual. 

En el módulo superior conectamos la fsm con el convertidor binario a decimal

El convertidor binario a decimal es el mismo que en ejemplos anteriores. 

Archivo .pcf

Descargas

Puedes descargar el código verilog de los ejemplos vistos en este tutorial en el enlace de más abajo.