Você está na página 1de 17

INSTITUTO TECNOLGICO DE CD.

GUZMN

INGENIERIA ELECTRONICA ESPECIALIDAD EN INSTRUMENTACION Y CONTROL

DISEO DIGITAL CON VHDL


Actividad 2. Uso de Variables y Seales. Baltazar Larios Jos Mara. N/C.- 10290233. Nombre del Profesor MIE. Hugo Antonio Mndez.

Fecha: Cd. Guzmn, Jal., 24 de Octubre del 2012

Actividad 2: Uso de Variables y seales. Introduccin: Los simuladores de VHDL usan seales de reloj para evaluar segmentos de cdigo y determinar condiciones de ejecucin. El uso de variables y seales permiten al diseador controlar las condiciones de actualizacin de informacin. La diferencia del uso de una variable y una seal principalmente radica en el tiempo que le toma adquirir una seal nueva, siendo para una variable un cambio instantneo. En cuanto al cdigo fuente, podemos encontrar diferencias en la sintaxis entre la declaracin de las seales y variables, ya que mientras la seal se declara entre la arquitectura y la funcin begin, la variable es declara despus de begin, otra diferencia importante a destacar es la manera de asignar un valor, por ejemplo: a:=10 para asignar un valor a una variable y a<=10 para una seal. Procedimiento: Demostrar el uso de una variable y una seal a travs de Active-HDL. En esta actividad se demostrara como realizar un proyecto a travs del software ActiveHdl, adems de comprobar el uso de variables y seales. 1.-Cmo realizar un proyecto el Active-HDL? a) Seleccionamos el programa y lo abrimos:

b) Una vez abierto el programa, nos mostrar la siguiente ventana, en la cual decidiremos entre abrir un proyecto anteriormente realziado o bien realizar uno nuevo.

-Crearemos un nuevo proyecto.

c) Ahora en la siguiente ventana denominada New Workspace, introduciremos el nombre que se asignar a nuestro espacio de trabajo o workspace, as como la direccin dentro de nuestro equipo en donde ser guardada. Por defecto cada uno de nuestros diseos se guardara en una carpeta denominada mydesigns dentro de nuestro disco C.

d) En la ventana denominada Nez Desing Wizard, seleccionaremos los recursos con los que contar nuestro diseo, en nuestro caso seleccionaremos la opcin Create an Empty Design, a partir de la cual obtendremos,un diseo vaco, sin sntesis.

e) Ahora en la ventana Property Page especificaremos, cual es el lenguaje de programacin que se utilizar para nuestro diseo, as como las especificaciones de la tarjeta a implementar.

f) Ahora, asignaremos un nuestro diseo, es recomendable utilizar nombre de una extensin corta y significativa, que represente la funcionalidad de nuestro cdigo, la corta extensin del nombre es recomendable, ya que al momento de compilar esto nos puede provocar un error.

-De esta manera hemos realizado las primeras especificaciones de nombre y caractersticas de nuestro diseo, por lo que seleccionamos el icono finalizar.

g) Ahora procederemos a abrir nuestro espacio de trabajo para realizar nuestro cdigo, as que seleccionamos la opcin Add New File> New> VHDL Source, para de esta manera comenzar con el diseo de nuestro cdigo.

h) Ahora nos encontramos con la ventana New Source File Wizard, a travs de la cual generaremos las especificaciones de nuestro cdigo. -Seleccionamos el icono Siguiente, y aparecer la siguiente ventana. En el primer espacio escribiremos el nombre de nuestro cdigo fuente, en el segundo espacio ingresaremos el nombre de la entidad, y por ltimo el nombre de la arquitectura, cabe mencionar que los dos ltimos son espacios opcionales, ya que podemos declarar el nombre de estas unidades dentro de nuestro cdigo fuente.

De igual manera es necesario destacar la importancia del nombre asignado, el cual no debe coincidir con ninguna de las palabras clave del lenguaje VHDL. Adems de respetar ciertas reglas como lo son el evitar comenzar el nombre de cualquier entidad o arquitectura con un numero, evitar los espacios en blanco entre los nombres, si es necesario separar es recomendable el utilizar el guin bajo como auxiliar. Una vez ingresados los nombres, nuevamente presionamos siguiente.

-Ahora es momento de seleccionar bien adherir las seales de entrada y salida denominadas puertos travs de los cuales funcionara nuestra entidad. Existen cuatro modos(direccin en la cual un dato es transferido a travs de un puerto) posibles a seleccionar los cuales son: In: Seales de entrada a la entidad, es unidireccional. Out: Indica las seales de salida de la entidad. Inout: Permite declarar un puerto en forma bidireccional, es decir entrada y salida, adems permite la retroalimentacin de las seales dentro y fuera de la entidad. Buffer: Permite hacer retroalimentaciones internas dentro de la entidad, pero l puerto declarado se comporta como salida.

-En esta actividad, declaramos dos puertos de entrada, uno denominado C, el cual va de uno a cero, lo cual nos indica que es un vector con dos componentes o bits, mientras que CLK es la entrada designada para el pulso de reloj, por ltimo se declaro Q como salida, el cual es un vector de cuatro bits a travs del cual observaremos la salida de nuestro diseo.

-Por ultimo presionamos Finalizar, de esta mera ahora obtenemos una base de cdigo en el cual trabajaremos, dicho cdigo consta de dos partes fundamentales que son llaentidad y la arquitectura.

2) Demostracin del uso de variables: A continuacin se describir el funcionamiento y estructura de un programa el cual a travs de variables realiza la funcin de un contador de 0 a 15, as como su la comprobacin de su salida a travs de una simulacin.

La imagen anterior es una captura de pantalla del cdigo fuente utilizado para la demostracin del uso de variables, para su explicacin divid el cdigo en tres bloques los cuales dan cuerpo a nuestro cdigo, el primero las libreras, el segundo la entidad y por ltimo la arquitectura. Libreras o paquetes:

El uso de estas nos permite declarar y almacenar estructuras lgicas, seleccionadas o completas que facilitan el diseo. En este cdigo llamamos a la librera IEE a partir de la palabra reservada library, dentro de la cual encontramos

distintos paquetes. En nuestro programa llamamos dos paquetes a travs de las expresiones: use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_ARITH.all; Donde (use) hace referencia al uso de estos paquetes, IEEE nos indica la librera donde estn localizados, std_logic_1164 o bien std_logic_arith son los nombres de los paquetes y por ltimo la palabra reservada all indica que se pueden usar todos los componentes almacenados en el paquete. -Qu contiene cada paquete? El paquete std_logic_1164 contiene todos los tipos de datos que suelen emplearse en VHDL (std_logic_vector, std_logic, entre otros). El paquete std_logic_arith define funciones y operadores aritmticos, como igual(=), mayor que(>) entre otros. Entidad (entity) del proyecto:

La entidad son todos los elementos electrnicos que conforman de manera individual o en conjunto el sistema digital, la declaracin de la entidad consiste en la descripcin de las entradas y salidas den circuito identificado como Pines. A travs de la palabra clave port y dentro de sus parntesis hacemos referencia a cada una de las entradas y salidas que sern tomadas en cuenta para el funcionamiento y salida del circuito. Mostrando la siguiente estructura para cada entrada o salida: Nombre: modo tipo de dato; En nuestro programa hemos declarado dos entradas denominadas CLK utilizada para la seal de entrada del clock y C utilizada como entrada del circuito, cabe mencionar que C es un dato de tipo std_logic_vector, lo cual nos indica que es un conjunto de palabras los cuales se consideran como grupo, ahora el parntesis (1 downto 0) define el numero de vectores (dos C1 y C0) as como el orden descendente a travs de la palabra clave downto. Por ltimo definimos una salida Q que tambin es un vector pero ahora con cuatro componentes igualmente en orden descendente. Una vez definidas las entradas y salidas de la entidad dentro de port, terminamos o concluimos la declaracin de la entidad a travs de la palabra clave end seguida de el nombre de la entidad.

Arquitectura (architecture) del proyecto:

La arquitectura de cualquier proyecto se define como la estructura que define el funcionamiento de una entidad, de tal forma que permita el desarrollo de los procedimientos que se llevarn a cabo con el fin de que la entidad cumpla las condiciones de funcionamiento deseadas, en otras palabras es la parte donde se lleva a cabo el verdadero trabajo de programacin. A partir de la palabra clave architecture establecemos el nombre de nuestra arquitectura, adems de escribir con que entidad se relaciona nuestra arquitectura, en nuestro caso el nombre de la arquitectura es Conteo, mientras que la entidad se denomino Pines. Enseguida observamos el inicio (begin) de la seccin donde se comienzan a declarar los procesos que rigen el comportamiento del sistema. Ahora nos encontramos con la declaracin process(C,CLK) que se utiliza para hacer referencia a las seales que determinan el funcionamiento de nuestro sistema, si nos damos cuenta no se est incluyendo Q, debido a que esta es la salida, por lo cual no influye en el funcionamiento del sistema. Como podemos ver, ahora se declara una variable de nombre var, la cual es de tipo entero y se inicializa a 0, para declarar variables se utiliza la siguiente estructura: variable nombre: tipo de la variable; Siguiendo nuestro cdigo observamos la palabra clave begin, la cual nos indica el inicio de las declaraciones o proceso que regirn el funcionamiento de la entidad. Ahora bien podemos notar que nuestro programa de contador se rige mediante declaraciones secuenciales if-then-else (si-entonces-si no). En el primer if declaramos si hay un cambio de 0 a 1, declaracin a travs de la cual estamos expresando que ocurrir un cambio solo cuando se presenta un flanco de pendiente positivo, pero solamente si el vector de entrada C tiene el

valor 00 ( if(C=00) ), si se cumplen estas dos condiciones entonces (then) var nuestra variable de contador aumentara de uno en uno (var<=var+1), ahora bien si el contador llega a 15 ( if (var=15)) entonces (then) asignaremos el valor de nuestro contador nuevamente a 0 (var<=0). Ahora cerramos cada uno de los if que fueron necesarios a partir de la sentencia end if; y de igual manera el proceso a travs de end process. Finalmente es necesario mandar el valor del contador a la salida Q, pero debido a que var es una variable entera de 32 bits y nuestra salida es de solo 4 bits es necesario realizar una conversin para que nuestra salida sea de 4 bits (igual que Q) accin realizada a travs de la sentencia Q<=CONV_STD_LOGIC_VECTOR(var,4) donde Q es nuestra salida y a partir de la funcin CONV_STD_LOGIC_VECTOR(variable, salida) en la cual dentro del parntesis especificamos la variable a transformar y la salida deseada. Y por ultimo cerramos mediante end contador nuestra arquitectura. Compilamos para verificar que nuestro programa es funcional, y si detecta algn error, a partir de la compilacin observamos en que lnea se encuentra y corregimos. Es importante destacar algunos aspectos de la sintaxis del programa anterior como el uso de (;) al final de cada una de las sentencias al igual que en la programacin en C, adems es importante mencionar el modo de asignacin de valores para una variable realizado a travs de (:=). Comprobacin y simulacin: A continuacin se presentar la metodologa para simular el comportamiento de un programa o entidad a travs del software Active-HDL, y al mismo tiempo comprobaremos el funcionamiento del programa explicado anteriormente.

1.-Ubicamos en la barra superior horizontal la opcin Simulation, damos click, y se desplegaran las siguientes opciones en nuestra pantalla, seleccionaremos la primera denominada Initialize Simulation.

2.-Una vez seleccionada la opcin Initialize Simulation, aparecer la siguiente ventana Design Settings, expandimos el nombre de nuestro proyecto y seleccionamos el icono rojo, que tiene el nombre de nuestra entidad y conteo, y pulsamos OK.

3.-Ahora en la barra lateral izquierda aparecer cada una de nuestras entradas y salidas, acto seguido seleccionaremos todas a partir del comando Ctrl+A.

4.-Una vez seleccionadas nuestras entradas y salidas, pulsamos click izquierdo y seleccionamos Add to Waveform.

5.-Ahora en nuestro espacio de trabajo podremos apreciar que han aparecido nuestras entradas y salidas, por lo que es momento de asignar a cada una de ellas una seal y de esta manera comprobar el funcionamiento de nuestro cdigo, por lo que pulsamos el botn izquierdo del ratn y seleccionamos la opcin Stimulators.

6.-Ahora dentro de la ventana Stimulators, asignaremos una seal predefinida de reloj a nuestra entrada CLK, mientras que a C asignaremos un contador de tipo binario ascendente que nos muestre su resultado en decimal. Damos clik en aplicar y procedemos a arrancar la simulacin de nuestro cdigo, a partir de el botn de play localizado en la barra horizontal superior.

Dejamos pasar algunos segundos y detenemos la simulacin, ahora a partir de los iconos de lupa, nos acercamos para poder observar el comportamiento de nuestras entradas y salida.

Como podemos observar en la imagen nuestra salida aumenta solamente cuando se detecta un flanco de transicin positiva y se tiene una entrada 00 en C, dichas condiciones que fueron establecidas a travs de las sentencias if en la arquitectura de nuestra entidad.

En esta imagen podemos apreciar nuestro tercer if, el cual indica que si nuestro contador llega a 5 automticamente se le asigna nuevamente 0 para volver de esta manera a establecer el conteo.

2) Demostracin del uso de seales: A continuacin se presenta el mismo cdigo para realizar un contador pero ahora utilizando una seal. Al observarlo podremos darnos cuenta que la sintaxis cambia un poco respecto la asignacin de valores y al lugar donde se declara la seal, adems es importante mencionar que la arquitectura tiene el mismo orden secuencial que el usado en ejemplo anterior con variables, por lo cual se omitir su explicacin detallada, en esta ocasin nos guiaremos a partir de los comentarios dentro del cdigo fuente.

Es importante resaltar la ubicacin de la declaracin de una seal, ubicada entre el nombre de la arquitectura y el begin de la misma, ademas de el uso de <= para la asiganacin de un valor a la seal, siendo el resto del codigo fuente identico al utilizado para una variable.

Ahora observemos la respuesta de este codigo utilizando seales.

De igual manera se cumplen las condiciones de cambio apra el contador , pero algo que es importante destacar es que esta vez, el contador logra llegar hasta 15 siendo que deberia de llegar hasta 14 y despues volver a 0.Esto debido al tiempo de respuesta, es necesario mencionar que solo se stablece en 15 por un periodo muy corto de tiempo, despues de esto continua regresa a cero tal y como fue programado.

Você também pode gostar