sexta-feira, 9 de maio de 2014

Ejemplo 4 : Push Button ( Debouncing )

El problema de usar los Push Buttons es el efecto rebote:

Al accionar el Push Button puede ocurrir muchos rebotes los cuales no queremos en nuestro diseño.

Por esto se realizo un algoritmo para eliminar este efecto.

Agreguen estos archivos a su proyecto.

Archivos .vhd

Cada programa tiene un codigo HDL que se obtiene dando doble click derecho sobre "View HDL Instantiation Template", que sirve para usarlo en cualquier otro programa, por ejemplo para el programa "debounce.vhd" el codigo HDL fue el siguiente :



Ahora el programa "debounce.vhd" será usado 2 veces en nuestro nuevo programa, porque queremos hacer debouncing a 2 botones que usaremos, el boton 0 será para desplazar los leds 1 espacio hacia la izquierda y el boton 1 será para desplazar 1 espacio hacia la derecha.

Todo el codigo COMPONENT copiarlo entre Architecture y begin (donde van las señales).
El codigo Port copiarlo en el cuerpo de nuestro programa, asi como esta acontinuación.


El codigo para rotar el led es el siguiente:


Si es apretado el Boton Up, entonces los leds serán rotados hacia la izquierda, si es apretado el Boton Left serán rotados hacia la derecha, si es apretado el boton central , reseteará el valor del led a "00000001".

Modifiquen el programa como ustedes deseen.

quinta-feira, 8 de maio de 2014

Ejemplo 3 : Uso de numeros con punto flotante (float)

Para usar numeros con punto flotante, usaremos una libreria creada por David Bishop, el link sigue a continuación:

http://www.vhdl.org/fphdl/Float_ug.pdf

Vamos a explicar el funcionamiendo de ese algoritmo.

Segun el padrón IEEE 754, existe unas reglas para representar numeros de punto flotante en bits.

SignoExponenteMantiza

Ejemplo1: Representar el valor de 1/3 usando 15 bits con signo.
La variable será almacenada en un vector como sigue:


Aplicando la formula de conversion para float será
Como vemos esta representación de bits del numero 1/3 es la correcta porque en el link de arriba se equivocaron de valor.

Ejemplo2: Representar el valor de 1/2 usando 15 bits con signo.

A simple vista para "n" igual a zero, "m" debe ser 14.

Si "n" es igual a zero entonces la mantiza debe ser : 0000000000

Si "m" es igual a 14 entonces exponente debe ser : 01110

Como es positivo el bit de signo es : 0

Contruyendo el vector  (5 downto -10) = [ 0 ] [ 01110 ] [ 0000000000 ]  = 0011100000000000

Usando programación VHDL para sumar dos numeros punto flotante

Como estaba en el link de arriba, descarguen la libreria de punto flotante de: 


Adicionar los archivos a la carpeta de su programa para que pueda reconocer el "package".

El siguiente programa suma los valores de 1/2  e 1/3



La simulacion sería : 


En la simulacion el resultado de la suma seria : 0011101010101010

Y sería correcto porque :