Instituto Polit�cnico Nacional
Instituto Politécnico Nacional
"La Técnica al Servicio de la Patria"

Boletín No. 63
1o. de noviembre de 2017

 

 

MÉTODO DE CONVERSIÓN DE BINARIO A BCD CON VHDL

 

 

Dr. Juan Antonio Jaramillo Gómez,
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. ,
M. en C. Mirna Salmerón Guzmán,
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. , Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Dr. Brahim El Filali,
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Instituto Politécnico Nacional (IPN)
Unidad Profesional Interdisciplinaria en Ingeniería
y Tecnologías Avanzadas (UPIITA)

 

Resumen

La necesidad de comunicar un dato que todo mundo entienda lleva a los sistemas digitales a presentar la información a través del uso de convertidores de datos binarios al formato de representación decimal. En este artículo se presentan algunas metodologías de conversión para display de 7 u 8 segmentos de una cantidad de dígitos específica. Cabe resaltar que una metodología comúnmente utilizada es la conocida como corre y suma 3 (shift-add 3), implementada en una tarjeta de desarrollo con un FPGA y lenguaje de VHDL en el programa ISE de Xilinx.

Abstract

The need to communicate information that everyone understands leads digital systems to present the information through the use of binary data converters to the decimal representation format. In this article we present some conversion methodologies for 7 or 8 segment display of a specific number of digits. It should be noted that a methodology commonly used is known as shift and sum 3 (shift-add 3), implemented in a development card with an FPGA and VHDL language in the Xilinx ISE program.

 

I. Introducción

La conversión de números entre sus distintas bases y formatos es aplicable día con día no solo en los sistemas digitales para saber las equivalencias de un número binario a decimal o de decimal a binario o de hexadecimal a decimal, etc., sino que también permite saber el estado de un sistema, ya sea como medidores o indicadores en algún proceso o sistema controlado.

Todas las conversiones llevan una metodología para poderlas realizar, dependiendo del número a convertir, se busca la que sea más fácil y rápida. La conversión más básica es la de comparación, siendo aplicable cuando la cantidad de números a convertir no es tan grande. Esta metodología se muestra en la tabla 1, para realizar la conversión entre sí, de los primeros 16 números decimales a binarios y a hexadecimales.

Tabla 1. Conversión entre decimal, binario y hexadecimal.
conversion1

Cuando el valor del número a convertir crece, no es tan fácil hacer una tabla de 1000 o más datos, por lo que se recurre a otras metodologías o artilugios lógico-matemáticos como de restas sucesivas (ver figura 1) o la de desplazar y sumar 3, que es la que se abarca aquí y se explica un poco más adelante.

conversion2
Figura 1. Diagrama de flujo de la metodología de restas..

El presente artículo mostrará cómo realizar la conversión de un número de 4 dígitos (9,999) dentro de una aplicación de medidor de milisegundos colocando un led testigo para ver su funcionamiento con una señal PWM. La medición de la variable tiempo es de gran potencial porque a partir de esta metodología se pueden realizar distintos medidores de velocidad, distanca, aceleración, tiempo de caída libre, etc., además de que las partes del código es reutilizable para hacer indicadores de posición, ángulos, llenado, etc.

Desarrollo

Para mostrar la utilidad de la conversión de un número binario a BCD, primero se establece el uso de la metodología de desplazar y añadir 3 (shift and add 3) para convertir el número binario de 14 bits “10_0111_0000_1111” a decimal 9,999 para los 4 display (UM-C-D-U) de 7 segmentos de la tarjeta nexys 2 (ó 3 ó 4), en una aplicación de medidor de tiempo en base de milisegundos (9,999 ms). A partir de estos datos se implementa en la tabla 2 el llenado con la metodología mencionada, resaltando el número binario se desplaza hacia la izquierda hasta que cualquiera de las posiciones en unidades (U), decenas (D), centenas (C) o unidad de millar (UM) tengan un valor mayor o igual a 5, para lo cual se le sumará 3 y se continuará con el bucle de desplazamiento y suma.

En la tabla 2, el primer renglón es el título de las columnas de conversión (UM-C-D-U), los siguientes dos renglones son la representación hexadecimal (Hex) y binaria (bin) del número 9,999, a partir del cuarto renglón es la aplicación de la metodología de conversión (shift1, shift2,…add3,… etc.) acabado en shift14. Enseguida se pone el resultado de las columnas de conversión en decimal (9999) y el último renglón representa el tamaño del vector a utilizar para dicha conversión que es de 14 bits, así como los lugares del vector para asignar desde las unidades (bits 14 a 17) hasta la unidad de millar (bits 26 a 29).

Tabla 2. Conversión de binario a decimal para el número 9,999.
conversion3

En la tabla 3 se resaltan los dos datos importantes de la conversión para realizar el programa en el lenguaje VHDL, el primero es que se necesitan hacer 14 pasos para convertir este dato a BCD, y el segundo es el tamaño del vector de conversión de 30 bits. Con estos dos datos se realiza un código en VHDL para implementar la aplicación, disponible en la liga código VHDL y la liga del archivo de restricciones código UCF.

Tabla 3. Datos importantes de la conversión.
conversion4

Al utilizar una FPGA que trabaja bajo arquitectura concurrente, el código está implementado en procesos, mostrados como bloques en la figura 2 y descritos a continuación.

conversion5
Figura 2. Diagrama a bloques de los procesos implementados

Divisor de 1ms: en este proceso se genera una señal "SAL_1ms" de 1ms de periodo.

Conteo: contador cuya señal de reloj es SAL_1ms y con entradas Up para incrementar el conteo y Down decrementa el conteo en el rango 0<CONT<9999.

PWM controlado por el contador de ms: se genera una señal PWM que se observa en la salida hacia un led.

Convertidor de binario a BCD: este proceso contiene un algoritmo recorre y suma 3 para convertir un número binario a bcd, y que se manda a los displays. El algoritmo consiste en desplazar (shift) el vector inicial (en binario) el número de veces según sea el número de bits, y cuando alguno de los bloques de 4 bits (U-D-C-UM, que es el número de bits necesarios para que cuente de 0 a 9 por cifra) sea igual o mayor a 5 (por eso el >4) se le debe sumar 3 a ese bloque, después se continua desplazando hasta que otro (o el mismo) bloque cumpla con esa condición y se le sumen 3. Inicialmente se rota 3 veces porque es el número mínimo de bits que debe tener para que sea igual o mayor a 5. Finalmente se asigna a otro vector, el vector ya convertido, que cuenta con 4 bloques para las 4 cifras de 4 bits cada una.

Divisor ánodos: este proceso sirve para hacer un reloj que permita barrer o visualizar los datos del display con el control de los ánodos.

Multiplexor: aquí se van barriendo los valores a mostrar en el display en base a la velocidad del divisor ánodos.

Display: envía los datos decimales codificados para display de 7 segmentos.

El código ya escrito y sintetizado es implementado en la tarjeta de desarrollo Nexys 2 como se muestra en las fotos siguientes (ver figuras 3 y 4). También se muestra en la liga de un vídeo (contador_ms.mp4) del funcionamiento del sistema, resaltando por último que a partir de este medidor de milisegundos es posible realizar varias aplicaciones, como las que se muestran en seguida:

 

• Medidor de tiempo en alto de una señal

• Medidor de caída libre

• Medidor de distancia con el sensor SRF-05 (SRF-XX)

• Sistema de frenado automático

• Sistema de caracterización de servomotores

• Sistemas de control de velocidad, sentido de giro de servos

• Sistemas de control de posición de servos

• Sistemas de control de velocidad para motores de CD con y sin engranes

• Generadores de señales PWM

conversion6
Figura 3. Foto del funcionamiento. (a) se muestra el reset, (b) inicio del conteo ascendente.

 

conversion7
Figura 3. Foto del funcionamiento. (a) se muestra el conteo descendente, (b) máximo valor del contador y led de pwm encendido.

Conclusiones

Se ha presentado la implementación de una aplicación de medidor de milisegundos con un código en VHDL y en UCF, partiendo de una metodología de conversión de datos binarios a BCD conocida como desplaza y suma 3 (shift + add 3). Las fotos y los videos son la evidencia demostrativa de cómo es su funcionamiento, y también se han mostrado algunos alcances posibles en un pequeño listado de aplicaciones.

Referencias

  1. Haskell, Richard E. y Hanna, Darrin M., Digital Design using FPGA Boards VHDL, LBE Books pp. 93-108, 203-209.

  2. Haskell, Richard E. y Hanna, Darrin M., Digital Design using FPGA Boards VHDL, LBE Books pp. Título del artículo/libro/revista/web pp. 109-119, 185-190.

  3. Binary to BCD converter, (octubre 2017) disponible en: http://www.tkt.cs.tut.fi/kurssit/1426/S12/Ex/ex4/Binary2BCD.pdf

  4. Binario a BCD recorre y suma+3, (octubre 2017) disponible en: http://www.circuitoselectronicos.org/2011/04/binario-bcd-recorre-y-suma3.html

  5. Ramos Carlos, (octubre 2017) De binario a siete segmentos: la conversión, recuperado en octubre 2017, disponible en: http://www.estadofinito.com/binario-bcd-7seg/