NRC2097 - Chicaiza Salazar Palacios - Unidad - 3 - Informe Cronometro - VHDL
NRC2097 - Chicaiza Salazar Palacios - Unidad - 3 - Informe Cronometro - VHDL
NRC2097 - Chicaiza Salazar Palacios - Unidad - 3 - Informe Cronometro - VHDL
INTEGRANTES:
Anthony Chicaiza
César Palacios
Francisco Salazar
NRC:
2097
Enero - 2018
1|Página
Tabla de Contenidos
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.
3|Página
Ilustración 2 Diagrama esquemático funcional del 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:
5|Página
Para el siguiente caso se tiene al siguiente “COMPONENT”, “U0” que hace la función
del contador de 0 a 9:
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:
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:
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:
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.
10 | P á g i n a
Ilustración 12 Ilustración del contador de minutos
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:
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:
13 | P á g i n a
Ilustración 18 COMPONENT para asignar en 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:
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.
4. BIBLIOGRAFÍA
[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