Está en la página 1de 16

DISEÑO VLSI

DEPARTAMENTO DE ELÉCTRICA Y ELECTRÓNICA


CARRERAS DE:
INGENIERÍA ELECTRÓNICA EN TELECOMUNICACIONES
INGENIERÍA ELECTRÓNICA, AUTOMATIZACIÓN Y CONTROL.

IMPLEMENTACIÓN CRÓNOMETRO EN VHDL

INTEGRANTES:
Anthony Chicaiza
César Palacios
Francisco Salazar

NRC:
2097

Enero - 2018

1|Página
Tabla de Contenidos

TEMA: Implementación de Cronómetro en VHDL..........................................................3


1. OBJETIVOS........................................................................................................................3
2. PROCESO DE REALIZACIÓN DEL CRONÓMETRO EN XILINX...............................................3
3. CONCLUSIONES..............................................................................................................15
4. BIBLIOGRAFÍA.................................................................................................................16

2|Página
TEMA: Implementación de Cronómetro en VHDL

1. OBJETIVOS
 Diseñar el programa en el software XILINX en lenguaje VHDL de un
cronómetro implementando todas los conocimientos adquiridos de este lenguaje,
mediante las respectivas simulaciones que nos ofrece este software.

 Dar a conocer las diferentes aplicaciones y usos que se ofrece con XILINX,
además de reconocer cada comando ejecutado para comprender más a fondo el
funcionamiento y comportamiento de las máquinas secuenciales.

2. PROCESO DE REALIZACIÓN DEL CRONÓMETRO EN XILINX

Se desea implementar un cronómetro digital utilizando 5 displays como muestra la


ilustración 1:

Ilustración 1 Esquema demostrativo de los displays

El sistema dispone de 4 switchs, cada uno con la siguiente funcionalidad:


1. Resetea la cuenta
2. Iniciar la cuenta
3. Parar la cuenta
4. Reiniciar la cuenta

3|Página
Ilustración 2 Diagrama esquemático funcional del cronómetro

Entonces, se procede a la explicación de la implementación del cronómetro en VHDL:


“Crono_top” es el programa principal, el cual abarca a todos los “COMPONENTS”,
que se los detallará a debidamente, van desde el “U0” hasta el “U7” como se aprecia en
la ilustración 3.

Ilustración 3 Componentes del programa principal "Cronómetro"

4|Página
Se inicia la explicación de cada uno de los “COMPONETS” con “U1”, el cual está
especificado como un decodificador, posee una entrada BCD y la transforma a una
salida de 7 segmentos, entonces se debe trabajar con “process” ya que se usará un
“case” para los posibles casos de decodificador. Entonces se procede a formar los
números desde el 0 hasta el 9 en el display de siete segmentos como se muestra en la
ilustración 4:

Ilustración 4 Combinaciones para el display de 7 segmentos

En la programación de la asignación de los displays de 7 segmentos la podemos apreciar


en la ilustración5:

Ilustración 5 Asignación de los números en el display de 7 segmentos

5|Página
Para el siguiente caso se tiene al siguiente “COMPONENT”, “U0” que hace la función
del contador de 0 a 9:

Ilustración 6 Contenido del component U0

En el COMPONENT U0 se encuentran los programas del mismo, como lo son


div_frec_gen y contgen, en el programa “contgen” se añade una librería llamada
“IEEE.std_logic_arith.all” en la cual sirve para realizar operaciones aritméticas.
Con una entrada de reloj, una entrada de reset, la salida se tiene la cuenta de bits,
“contgen” es un programa “Generic” es decir, se puede utilizar para cualquier programa
realizado, poniendo MAX_CUENTA: integer :=60, se especifica que la primera cuenta
se la realizará hasta 60 segundos y se tiene la cantidad de bits de salida con N_bits:
integer := 4); que conjuntamente con el anterior comando, funcionan conjuntamente
para accionar lo mencionado.
Para la cuenta se tiene cuenta : out STD_LOGIC_VECTOR ((N_bits-1) downto 0, por
ejemplo si son 4 bits, sería desde 3 hasta 0.
A continuación, se viene el proceso de conteo, en primer lugar se toma un PROCESS
con las entradas RST, CLK y AUXCONT con el comando CONTADOR: PROCESS
(RST, CLK, AUXCONT), si está en 1 significa que se va a resetear o encerar, y en caso
de que no suceda, el CLK va a permanecer siempre activado. Lo especificado se puede
apreciar en la ilustración 7:

6|Página
Ilustración 7 Inicialización del proceso de conteo

Hay que tener en cuenta que las salidas no pueden ser tomadas en cuenta en la
declaración como entradas, ya que se mrcará como error.

Ahora se verá en U0 la parte del divisor de frecuencia, primero se observa que se tiene
el comando Generic (DIV_VAL: integer := 250000000); el cual es un genérico para
asignar la frecuencia que uno desee, que está denotado como “div_frec_gen”, en este
programa se añade una librería llamada IEEE.STD_LOGIC_UNSIGNED.ALL;
La temporización está especificada con 50 Ms, entonces para obtener un segundo, se
debe dividir para 50 Ms, pero se necesita para un flanco ascendente y un flanco
descendente, entonces se divide para 25 Ms, pero como se va a realizar el divisor de
frecuencia de las décimas de segundo, se necesita 250 Ms por los dos flancos.

7|Página
A continuación se procede a unir los programas entre sí, copiando cierta parte del
código en el mismo código tal como se especificó en clase como se aprecia en la
lustración 8:

Ilustración 8 Emparejamiento de los programas

Lo mismo se realiza con los demás sub programas, entonces al momento de guardar el
último código, automáticamente se crea las respetivas librerías, para que en los demás
sub programas solamente se los llame por las respectivas librerías.

Para emplear las conexiones de las señales de reloj, se implementa mediante los
comandos:
port map(clk => clk_top, rst => rst_top, clk_out => clk_aux);
el cual tiene como función unir las señales de reloj de forma asíncrona. El código
especificado se puede observar en la ilustración 9:

8|Página
Ilustración 9 Unión de las señales de reloj

En el caso del reset, se tiene una misma señal para cada uno como se indica en la
ilustración 10:

Ilustración 10 Reset como señal para cada uno

9|Página
Para el contador de 0 a 59, es muy parecido al contador de 0 a 9, excepto en los
nombres de las variables, por lo que vamos a hacer énfasis en el “Con_top60” , como se
muestra en la ilustración 11:

Ilustración 11 Determinación de la frecuencia del contador de 0 a 59

A diferencia del anterior contador, se tiene que ahora va a existir dos conteos, el
contador menos significativo para después pasar al contador mas significativo.
Para asignar la frecuencia en los otros contadores, se debe colocar el tiempo de 833333
el cual sale de la operación:
50 Ms
T= =60 s
x
Es decir:
50 Ms
=60 s
x
En donde se despeja la variable x:
5
x= Ms
6
Que quiere decir 5/6 de millones de segundos que en otras palabras es igual a 833333
segundos aproximadamente.

En la ilustración 12 se tiene el esquema del contador de minutos:

10 | P á g i n a
Ilustración 12 Ilustración del contador de minutos

Es muy parecido al contador de 0 a 9, lo que cambia es en el divisor de frecuencia por


los tiempos dados a marcar.
Para unir todos los sub programas entre sí, se observa el esquema en la ilustración 13 y
14:

Ilustración 13 Unión de todos los sub programas

11 | P á g i n a
Ilustración 14 Unión de todos los sub programas

Para acotar las entradas y salidas de la caja negra, se tiene la ilustración 15, en la cual se
verá con mayor detalle las entradas y las salidas a los displays:

Ilustración 15 Caja negra con entradas y salidas

Las salidas a los displays de 7 segmentos deben ser salidas vectoriales como se puede
observar:

12 | P á g i n a
Ilustración 16 Salidas vectoriales a los displays

Entonces para tener en claro el esquema general, se observa en la ilustración 17, los dos
contadores, es decir el de 0 a 9 y el de 0 a 59, además de los displays como salidas:

Ilustración 17 Esquema general del cronómetro

Para asignar las funciones de los decodificadores BCD a 7 segmentos en el programa


principal, se procede a llamar a la función COMPONENT, como se indica en la
ilustración 18:

13 | P á g i n a
Ilustración 18 COMPONENT para asignar en los contadores

Entonces se sigue copiando y pegando en los diferentes contadores, 0 a 9, BCD, 0 a 59


y del contador de 0 a 59 en minutos:

Ilustración 19 Asignación de los contadores

14 | P á g i n a
Para la instanciación de todas las variables, se usa el código especificado en la
ilustración 20:

Ilustración 20 Instanciación de todas las variables

Para realizar las demás uniones vistas en el diagrama general, se implementa el


siguiente código:

Ilustración 21 Unión de los relojes, reset y contadores

3. CONCLUSIONES

15 | P á g i n a
 En el presente trabajo se apreció de mejor manera el concepto y aplicación de
los diferentes problemas propuestos, además se pudo verificar el significado de
cada contador para su correcta implementación.

 Para la implementación de la presente cronómetro, se tuvo que concurrir a un


diseño principal en el cual se especifica la función de cada uno con su respectiva
señal de reloj y otros componentes.

4. BIBLIOGRAFÍA

[1] Mig. (s f). tutorial contador en VHDL. Disponible en:


https://www.youtube.com/watch?v=wTBzzTgm8-c

[2] Lara, J. (2014, agosto 24). Como simular un programa en VHDL con Test Bench.
[Video file]. Recuperado de https://www.youtube.com/watch?v=7OgJyqdd8wU

16 | P á g i n a

También podría gustarte