Contador digital
¿Qué es?
Un contador digital es un circuito que realiza una cuenta ascendente o descendente entre un valor inicial y otro final.
Un contador es un circuito secuencial, es decir contiene elementos de memoria (FLIP-FLOPS) . Estos Flips-Flops almacenan el valor de la cuenta. Cada ciclo de reloj leemos el valor y lo incrementamos en uno, volviéndolo a guardar en el mismo registro.
Existen diferentes tipos de contadores y en cada aplicación debemos utilizar el que mas nos convenga.
Contador ascendente básico
El primer contador VHDL que veremos es un contador simple de 8 bits. Cuando se resetea pone el valor de la cuenta a 0 y cada ciclo de reloj la incrementa en uno. Al llegar al final de la cuenta, vuelve a cero y genera una señal de fin de cuenta.
El primer detalle es que la señal cuenta, que será donde se almacene el valor actual de la cuenta la declaramos como integer. Los integer en VHDL se utilizan para poder operar con ellos con facilidad. Con los std_logic_vector también se puede operar pero es mas lio. Si intentamos sumarle 1 nos dará un error. Para poder trabajar con los enteros utilizamos la librería numeric_std.
En el proceso, cada ciclo de reloj incrementamos en uno el valor de la cuenta y si hemos llegado al final volvemos a cero. La otra clave está en la asignación donde ponemos el valor de cuenta en la salida. Para ello tenemos que convertir el integer a un std_logic_vector. Eso lo haremos mediante la sentencia std_logic_vector. En esa linea usando la librería numeric, pasamos de entero a una representación de 8 bits sin signo y de ahi a std_logic_vector.
El resultado de la simulacion es el siguiente. El valor de la salida se incrementa de uno en uno (esta representado en hexadecimal) y al llegar a FF se activa la señal de fin de cuenta. Os recordamos que hemos usado edaplayground para la simulacion.
Contador ascendente con carga paralela
Otro ejemplo de contador es el contador con carga paralela. En este caso tenemos una señal de carga load y un valor que se cargará en el registro de cuenta cuando esa señal se active. Esto nos permite comenzar la cuenta en el valor que queramos.
Para ello añadiremos en el proceso una condición que mire si se ha activado la señal de carga y en ese caso mediante una nueva conversión de tipo almacenamos la entrada de datos en la señal de cuenta.

Comentarios
Publicar un comentario