Download - Programación de circuitos lógicos en VHDL
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ
CENTRO REGIONAL DE AZUERO
FACULTAD DE INGENIERÍA ELÉCTRICA
LICENCIATURA EN INGENIERÍA ELECTROMECÁNICA
Circuitos Lógicos Electrónicos
Programación de Circuitos en VHDL
Preparado por:
Baule R; Edison 6-714-1956
Rodríguez F; Cheyn 6-714-364
Profesora:
Dayra Peña
Grupo
7IE141
Año Lectivo
2012
INTRODUCCIÓN
Los circuitos lógicos electrónicos son aquellos que solo funcionan con 0 y 1, es decir en
notación binaria, en otras palabras los circuitos lógicos o digitales solo encienden si están
en 1, eléctricamente hablando cuando se alimenta con 5 V y apagados en 0 cuando no
están alimentados y van a tierra o ground.
En la clase de circuitos lógicos hemos aprendido a utilizar muchas herramientas teóricas,
empezando por los sistemas de numeración que nos permiten reescribir los bits ya sea en
hexadecimal, octal, entre otros. De igual manera hemos visto códigos como gray, ASCII,
etc.
Por otro lado hemos aprendido a utilizar las compuertas lógicas AND, OR, NOT, etc., que
nos permiten desarrollar los problemas planteados y obviamente son muy necesarias a la
hora de diseñar cualquier dispositivo en la vida real.
Una parte esencial del curso fue lo planteado anteriormente, el diseño de los mismos, con
herramientas como el mapa K, llevábamos cualquiera situación y con la numeración
binaria diseñábamos un circuito cualquiera que podría ser una alarma, un sumador.
En este laboratorio, hacemos una compilación de algunos circuitos simulados en clases
con la ayuda de un programa llamado Xilinx. Son tres los circuitos simulados, el caso de
una compuerta OR, la situación de un granjero y un BCD de 7 segmentos.
En todos debimos utilizar conceptos aprendidos en clases, mapa K, compuertas y sobre
todo lo aprendido en el laboratorio, la programación VHDL que es la que nos permite
hacer estas situaciones teóricas y poder llevarlas a la vida real.
OBJETIVOS
Aprender el lenguaje VHDL, y así poder familiarizarse y utilizarlo como material de apoyo en la elaboración de circuitos lógicos que se puedan aplicar a cualquier aplicación en la vida real.
Implementar lo aprendido teóricamente en clases, y verlo experimentalmente con la ayuda de la programación en VHDL.
MARCO TEÓRICO
Existe un lenguaje definido por IEEE (Institute of Electrical and Electronics Engineers) que ayuda a los ingenieros para elaborar y describir de mejor forma los tan difíciles circuitos digitales y para estos utilizamos el VHDL.
VHDL significa (very-high-speed integrated circuits hardware description language) o lenguaje de descripción de hardware de circuitos integrados de muy alta velocidad.
Como indica su denominación es un lenguaje similar a ADHL o Verilog usado para describir circuitos internos y la programación de FPGAs. Estos lenguajes presentan un mismo objetivo y se diferencia del clásico C (o cualquiera parecido a este) por ser un lenguaje paralelo no secuencial.
El lenguaje se encuentra definido bloques también. Cada función que deseamos, es a nivel superior definida por una “entidad” donde se especifica las entradas y salidas del bloque.
Un FPGA no es como un microcontrolador, en realidad es un conjunto masivo de celdas o bloques lógicos programables. Estas celdas son programadas individualmente para convertirse en pequeños bloques de construcción. Pueden ser compuertas simples (AND, OR y NOT, etc) o flip-flops.
Dentro del VHDL hay varias formas con las que podemos diseñar el mismo circuito y es tarea del diseñador elegir la más apropiada.
Funcional: Describimos la forma en que se comporta el circuito. Esta es la forma que más se parece a los lenguajes de software ya que la descripción es secuencial. Estas sentencias secuenciales se encuentran dentro de los llamados procesos en VHDL. Los procesos son ejecutados en paralelo entre sí, y en paralelo con asignaciones concurrentes de señales y con las instancias a otros componentes.
Flujo de datos: describe asignaciones concurrentes (en paralelo) de señales.
Estructural: se describe el circuito con instancias de componentes. Estas instancias forman un diseño de jerarquía superior, al conectar los puertos de estas instancias con las señales internas del circuito, o con puertos del circuito de jerarquía superior.
Mixta: combinación de todas o algunas de las anteriores.
ESTRUCTURA DEL PROGRAMA
VHDL fue diseñado en base a los principios de la programación estructurada. La idea es definir la interfaz de un módulo de hardware mientras deja invisible sus detalles internos. La entidad (ENTITY) en VHDL es simplemente la declaración de las entradas y salidas de un módulo mientras que la arquitectura (ARCHITECTURE) es la descripción detallada de la
estructura interna del módulo o de su comportamiento. En la siguiente figura se ilustra el concepto anterior. Muchos diseñadores conciben la Entity como una funda de la arquitectura dejando invisible los detalles de lo que hay dentro (architecture). Esto forma la base de un sistema de diseño jerárquico, la arquitectura de la entidad de más nivel (top level) puede usar otras entidades dejando invisible los detalles de la arquitectura de la identidad de menos nivel. En la figura las entidades B, E y F no utilizan a otras entidades. Mientras que la entidad A utiliza a todas las demás. A la pareja entidad - arquitectura se le llama modelo. En un fichero texto VHDL la entidad y la arquitectura se escriben separadas, por ejemplo a continuación se muestra un programa muy simple en VHDL de una compuerta de 2 entradas. Como en otros programas VHDL ignora los espacios y saltos de líneas. Los comentarios se escriben con 2 guiones (--) y termina al final de la línea. En la figura siguiente se muestra la estructura de un modelo en VHDL. SINTAXIS PARA LA DECLARACION DE LA ENTIDAD VHDL define muchos caracteres especiales llamados “palabras reservadas”. Aunque las palabras reservadas no son sensibles a las mayúsculas o minúsculas, el ejemplo que sigue las utilizaremos en mayúsculas y negritas para identificarlas.
Ventajas:
Además de las ventajas ya reseñadas también es destacada por la capacidad del lenguaje para el manejo de proyectos de grandes dimensiones, las garantías que comporta su uso cuando, durante el ciclo de mantenimiento del proyecto, hay que sustituir componentes o realizar modificaciones en los circuitos, y el hecho de que, para muchas organizaciones contratantes, sea parte indispensable de la documentación delos sistemas.
Bibliotecas en este tipo de lenguajes
Una biblioteca en VHDL es un lugar en donde se guarda la información relacionada con un diseño determinado. Al comienzo de cada diseño el compilador crea automáticamente una biblioteca llamada WORK con este objetivo. Además de esta biblioteca particular existen otras bibliotecas de tipo general que contienen un conjunto de definiciones que pueden utilizarse en cualquier diseño. Un ejemplo de biblioteca general es la llamada Library IEEE, que contiene definiciones estándar para VHDL. Para utilizar una biblioteca general es necesario escribir su nombre al inicio del programa, por eso es muy común que en la primera línea de un diseño en VHDL aparezca escrito "Library IEEE", de ésta forma dicha biblioteca se hace visible para el diseño.
Historia Los estudios para la creación del lenguaje VHDL (VHSIC HDL) comenzaron en el año 1981, bajo la cobertura de un programa para el desarrollo de Circuitos Integrados de Muy Alta Velocidad (VHSIC), del Departamento de Defensa de los Estados Unidos. En 1983 las compañías Intermetrics, IBM y Texas Instruments obtuvieron la concesión de un proyecto para la realización del mismo.
MATERIALES
Programa XILINX.
Placa Spartan 3E con su cable USB.
PROCEDIMIENTO
Pasos para Programar en VHDL
1. Iniciar el programa de Xilinx 2. Una vez se inicia el programa, dar click en la herramienta File (new project). 3. En la ventana que se abre se debe colocar el nombre apropiado al proyecto y
seleccionar la ubicación donde guardar dicho proyecto. Verificar donde dice top-level source type aparezca HDL, luego presione NEXT.
4. En el cuadro que sigue debe llenar los campos tal y como se muestra. Luego dar click en NEXT.
5. Se muestra un resumen del proyecto dar click en FINISH.
6. Llegamos finalmente a la ventana principal del programa, donde procederemos a incluir nuestra primera fuente, es decir el código VHDL.
7. Haga click derecho sobre xc3s500e-4fg320 y seleccione new source.
8. Aparece este cuadro. En el mismo se debe escoger el tipo de archivo fuente, en este caso VHDL MODULE y ponerle un nombre apropiado, presionar next.
9. En el cuadro que aparece ahora se debe especificar los puertos del dispositivo así como la dirección del mismo ya sea entrada (in) o salidas (out).
10. Aparece un cuadro de resumen del cual no hay nada que hacer solo dar click en FINISH.
11. A continuación obtendremos la pantalla siguiente en el cual ya hemos colocado los códigos.
12. Una hemos escrito el código VHDL para esta entidad, procedemos a realizar algunas operaciones sobre dicho código. 12.1 Verificar la sintaxis para ver si no hay errores de escritura. Damos doble click
donde dice check syntax en la ventana de process a la izquierda de nuestra pantalla
12.2 Podemos ver el esquema del circuito sintetizado por la herramienta xilix. Para esto hacemos doble click donde dice VIEW RTL SCHEMATIC O VIEW TECNOLOGY SCHEMATIC.
12.3 Si el circuito es sintetizable entonces pasamos a simular el circuito. Esto se logra incluyendo una nueva fuente (source), en nuestro diseño. Hacer click derecho en el nombre de la fuente actual, (comp1) para que aparesca un menú abreviado (new source).
12.4 En la ventana que aparece que aparece a continuación escogemos VHDL test bench a la derecha le ponemos un nombre a la fuente y damos click en nexs.
Sale otra ventana le damos nexs. La pantalla siguiente simplemente es un resumen del archivo fuente, solo dar en finish.
12.5 Se muestra en pantalla un código VHDL. Ese código hay que modificarlo de tal modo que quede igual o parecido al siguiente código.
12.6 Una vez que su código VHDL de simulación ha sido salvado seleccionamos la opción de simulation y damos doble click en SIMULATE BEHAVIORAL MODEL.
A continuación se puede ver una gráfica con los resultados de la simulación.
12.7 El siguiente paso será asignar los puertos de entrada y salida del proyecto a los pines de la Spartan 3E que estén disponibles. Esto se logra haciendo doble clic sobre FloorplanArea/IO/Logic (PlanAhead) tal y como se muestra abajo.
Se muestra la siguiente ventana en la cual presionamos el botón Yes.
Se iniciará el programa Plan Ahead 13.1 pero antes se mostrarán algunos mensajes como el mostrado abajo. Tan solo debe cerrar estos cuadros.
Se iniciará el programa Plan Ahead 13.1 pero antes se mostrarán algunos mensajes como
el mostrado abajo. Tan solo debe cerrar estos cuadros.
Ahora estamos en la ventana principal del programa Plan Ahead. En la parte inferior de
dicho programa haga clic en la pestaña IO/Ports, ver figura a continuación.
Se mostrará entonces la ventana de los puertos. Esta ventana le debe quedar de la
siguiente manera:
Para asignar los pines de forma adecuada, debemos conocer bien nuestra Spartan3E, en
este caso la Nexys 2 que es la que estamos usando en este proyecto. En la siguiente
página se muestra una imagen de esta placa. Observe que consta de siete Interruptores,
cuatro PushButtons, siete LEDs, cuatro 7-segmentos y varios conectores y pines para
conectarse con el mundo exterior.
Si tiene la Nexys2 a mano podrá observar que cada interruptor, pushbutton,LED, etc.,
tiene un nombre y una asignación de pin. Por ejemplo el interruptor SW0 es G18, el LED
LD0 es J14 y así sucesivamente. La siguiente figura nos puede ayudar a identificar estos
pines si no tenemos la Spartan a manos.
Con esta información ya podemos asignar los pines de la siguiente manera. Ver la figura
siguiente.
A continuación cerramos el programa Plan Ahead. Ver figura siguiente.
El programa le pedirá salvar los cambios, presione el botón Save. Ver siguiente figura.
En la ventana siguiente presione el botón OK para salir de plan Ahead. Ver siguiente
figura.
Ya es hora de generar el archivo de programación que enviaremos a la Spartan mediante
un cable USB. Hacer doble clic en Generate Programming File. Esperar a que termine el
proceso.
Si todo va bien debe aparecer debajo el siguiente mensaje:
Se debe haber creado el archivo ffd.bit que es el que necesitamos para programar la
Spartan.
La Alarma
Figura 1. Simulación del circuito de la alarma.
Figura 2. Circuito de la alarma sintetizado.
Figura 3. Simulación en el test bench.
CONCLUSIONES
Luego de elaborado este informe, llegamos a las siguientes conclusiones:
1. Es a través de un lenguaje de programación VHDL que podemos llevar a la vida
real todas aquellas situaciones teóricas que vemos en nuestro diario vivir, es decir
una persona que tenga una idea por ejemplo de hacer una alarma que esté sujeta
a condiciones, es a través del conocimiento de circuitos digitales y electrónicos
que se puede llevar a la realidad, no sin antes programarlos a través de programas
informáticos, en nuestro caso Xilinx.
2. Para programar en Xilinx con lenguaje VHDL, no solo se debe tener
conocimientos informáticos, sino también de compuertas lógicas, sistemas de
numeración, mapa K, etc. Además es necesario saber circuitos electrónicos para
luego acoplar este circuito a transistores que amplifiquen la señal y pueda ser más
eficiente el diseño que se requiere.
3. Fueron tres los circuitos simulados en clases, el caso de una compuerta OR, el caso
de un jardinero y la alarma, ambos los diseñamos con las herramientas aprendidas
en clases, sin embargo fue en el laboratorio donde hicimos la práctica y con el uso
de la Spartan 3E pudimos ver su funcionamiento.
4. En el informe presentado, hacemos captura de pantalla del caso de la alarma, este
circuito fue diseñado en base a tres condiciones, el motor, la puerta y la lámpara.
Para diseñar circuitos digitales, siempre se necesita una variable sujeta a
condiciones para que la salida establecida cumpla con ciertos parámetros y
funcione de la manera que el diseñador desee para su futuro funcionamiento.
5. En VHDL podemos programar, ya sea con lógica negativa o con lógica positiva,
ambos resultados deben dar lo mismo, depende de la persona que programe el
circuito, sin embargo en nuestro caso, la mayoría de los diseños se hacen
habilitando el 1 o con lógica positiva.
6. La Spartan 3E es el dispositivo que tenemos a nuestra disposición para comprobar
lo que hemos hecho en el proceso de programación. En el caso de la alarma,
cuando se cumplía la condición el LED de la salida debía encender, la ubicación de
los LED (salida) y los interruptores (entrada) se programa con la ayuda del
FloorPlan, para establecer la posición de los mismos y luego se genera un .bit para
luego pasarlo a la Spartan.
BIBLIOGRAFÍA
Material de apoyo dado en clases (Tutorial de VHDL).