PRÁCTICA 4: INTRODUCCIÓN A LA SIMULACIÓN Y A LA IMPLANTACIÓN FÍSICA CON QUARTUS II V. 9.0 OBJETIVOS Al finalizar la práctica el alumno ha de ser capaz de:
− Simular un circuito usando la herramienta Quartus II , − Volcar el archivo de configuración en la FPGA y verificar su funcionamiento.
MATERIAL − Ordenador personal con Quartus II , − Tarjeta de desarrollo de lógica programable.
DURACIÓN 1 sesión.
TRABAJO PREVIO Leer el enunciado de la práctica y anotar las dudas. Llevar al laboratorio los esquemas de la práctica anterior.
INTRODUCCIÓN Aunque no se le vea utilidad a la fase de simulación del circuito capturado en la práctica anterior, es muy importante simular los sistemas que se desarrollen. En este caso tan simple se podría descargar el diseño en la tarjeta del laboratorio para comprobar su funcionamiento. Sin embargo, la simulación presenta varias ventajas:
− Permite seguir fácilmente la evolución temporal de todas las señales. Para conseguir ver el mismo número de señales en el circuito real necesitaríamos un analizador lógico, que es más caro, voluminoso y delicado.
− Además de las entradas y salidas del circuito se pueden analizar señales internas, lo que permite depurar el funcionamiento funci onamiento del circuito circui to más a fondo.
2 Práctica 4
− También se puede simular sólo una parte del circuito. Por ejemplo, se podría haber simulado el componente Bina7Seg sin necesidad de haber hecho el esquema superior (Pract3). Esto permite ir probando cada bloque jerárquico del circuito conforme se va construyendo, con lo que la depuración es mucho más fácil al tener que centrarse cada vez sólo en una pequeña parte del circuito, en lugar de enfrentarse al circuito completo.
− Permite corregir errores en el diseño y comprobar el funcionamiento del mismo sin necesidad de disponer del hardware. Sin embargo no son todo ventajas. Los principales inconvenientes de la simulación frente a la implantación física son:
− No se dispone de los elementos de salida. Por ejemplo, en esta práctica, se tendrán que analizar las siete señales que activan el display de siete segmentos y averiguar si el número que aparecería en dicho display es el correcto,
− La especificación de la evolución temporal de las señales de entrada puede ser tediosa, − En circuitos complejos, la simulación puede tardar demasiado tiempo en ejecutarse (aunque este caso no se da en este libro). La cuarta fase del desarrollo consiste en volcar el diseño realizado y simulado, en la FPGA. Este volcado no es más que la escritura del conexionado interno de los LAB ( Logic Array Block ) de la FPGA entre sí, y la configuración de las macroceldas vistas en la práctica anterior. Antes de comenzar a trabajar, no olvide crear el directorio de trabajo para la práctica de esta sesión y copiar los archivos generados en la práctica del otro día.
DESARROLLO PRÁCTICO ABRIR EL PROYECTO CREADO En primer lugar, hay que copiar todos los archivos generados en la práctica anterior al directorio de trabajo de esta práctica. Después hay que arrancar Quartus II . Para ello hay que elegir la opción Quartus II 9.0 (32-Bit) que está en la ruta Botón de Inicio -> Programas -> Ingeniería -> Altera -> Quartus II 9.0 . Si al arrancar aparece la ventana de la Figura 1, hay que pulsar el botón No, pues en la práctica anterior se creó el proyecto que se va a utilizar en esta práctica.
Figura 1.
Ventana al arrancar Quartus II .
3 Práctica 4
A continuación, hay que abrir el proyecto declarado en la práctica anterior (Pract3.qpf). Para ello, en el menú File, hay que escoger la opción Open Project… y seleccionar el archivo Pract3.qpf de la carpeta de trabajo de hoy.
SIMULAR EL PROYECTO COMPILADO Antes de implantar físicamente el circuito en la FPGA, se va a simular su funcionamiento con ayuda del entorno Quartus II .
ABRIR EL EDITOR DE FORMAS DE ONDA Antes de simular el circuito es necesario definir la variación temporal de las señales de entrada del circuito, es decir, los valores lógicos que supuestamente van a tener las entradas del circuito en función del tiempo, y especificar qué señales se desean visualizar. Para ello, el programa Quartus II , integra un editor de formas de onda conocido como Waveform Editor. Para crear un archivo de simulación hay que abrir, en primer lugar, una ventana del editor de formas de onda. Para ello hay que elegir la opción New… del menú File y en la ventana que aparece (ver Figura 2) hay que seleccionar Vector Waveform File .
Figura 2.
Apertura del archivo de formas de onda.
4 Práctica 4
VECTORES DE PRUEBA Una vez que se tiene abierto el editor de formas de onda (véase la Figura 3), lo primero que se tiene que hacer es guardar dicho editor con el nombre Pract3.vwf, para que el editor reconozca las señales de entrada y salida del proyecto. Para ello se escoge la opción Save As… del menú File (véase la Figura 4). Asegúrese de que la opción Add file to current project , que está en la parte inferior de la ventana, esté activada, para no tener problemas más adelante.
Figura 3.
Archivo de formas de onda recién abierto.
Figura 4.
Guardado del archivo de formas de onda.
A continuación hay que insertar los terminales de entrada y los de salida que se desean visualizar en la simulación, que para esta práctica son las entradas de la D3 a la D0 y las salidas de la ‘a’ a la ‘g’. Para ello hay que hacer clic con el botón derecho del ratón en la columna Name de la ventana del editor, para desplegar el menú pop-up, y seleccionar Insert Node or Bus… dentro de la opción Insert (véase la Figura 5).
5 Práctica 4
Figura 5.
Menú pop-up para insertar señales.
En la ventana llamada Insert Node or Bus (Figura 6) se pueden introducir los nombres de las señales de entrada o salida manualmente, escribiendo el nombre de la señal, el tipo, etc.., pero en la práctica se va a hacer con el buscador de nodos (Node Finder… ), pulsando en el botón con dicho nombre, que es más cómodo y rápido.
Figura 6.
Cuadro para insertar terminales manualmente.
En la ventana que aparece (Figura 7) primero hay que decir al programa que muestre todas las variables. Esto se hace eligiendo Pins:all en el cuadro Filter, y después pulsando el botón List, para que se genere un listado de todas las señales accesibles del diseño.
6 Práctica 4
Figura 7.
Ventana para seleccionar los terminales a visualizar.
A continuación, hay que seleccionar con el ratón, en la lista de la izquierda, las señales del D0 al D3 y pulsar el botón para que las señales seleccionadas pasen a la lista de la derecha (como se muestra en la Figura 7) y, posteriormente, se visualicen en el editor de formas de onda. Repetir la operación con los nodos del ‘a’ al ‘g’, para poder ver la evolución de las salidas. Por último pulsar el botón OK para volver a la ventana de la Figura 6, y volver a pulsar OK . En este caso, como queremos simular todas las señales del circuito, se puede hacer lo anterior de una vez pulsando directamente sobre el botón después de mostrar las señales en la lista de la izquierda.
AGRUPAR SEÑALES EN EL EDITOR DE FORMAS DE ONDAS En muchas ocasiones varias señales componen un bus de forma que los valores de estas señales, convenientemente ordenadas, representan un número binario. En estas ocasiones es muy cómodo formar un grupo de señales con todas ellas, para que tanto la visualización como la modificación de las señales se realice de forma numérica, pudiéndose elegir entre varias bases (BIN, OCT, DEC y HEX) para su representación. En esta práctica se pueden agrupar las señales de la D3 a la D0 y representar sus valores mediante un número en base hexadecimal. Para ello primero hay que asegurarse de que las señales están ordenadas, en la lista de la ventana, de la más significativa (arriba) a la menos significativa (abajo). Si no es así, se pueden arrastrar una a una hasta su posición correcta. Después hay que seleccionar con el ratón las cuatro señales, pulsar el botón derecho y seleccionar Group de la opción Grouping del menú pop-up (véase la Figura 8).
7 Práctica 4
Figura 8.
Opción para agrupar señales.
Aparecerá, entonces, la ventana de la Figura 9, donde se puede introducir el nombre del grupo y la base de representación de sus valores. Escriba Numero como nombre de grupo y seleccione la representación hexadecimal, tal como se muestra en la figura.
Figura 9.
Ventana para formar un grupo de señales.
SELECCIONAR EL TIEMPO FINAL DE LA SIMULACIÓN Una vez definidas las señales a visualizar es necesario indicar el tiempo final de la simulación del circuito, es decir, durante cuánto tiempo se quiere simular el funcionamiento del circuito. Para ello, mientras está activa la ventana del editor de formas de onda,1 hay que seleccionar la opción End Time… del menú Edit (véase la Figura 10), introducir el tiempo, que en esta práctica va a ser de dos microsegundos (2 us), y pulsar Ok.
1
Tenga presente que la barra de menús cambia según la ventana que esté activa en cada momento.
8 Práctica 4
Figura 10. Ventana para indicar el tiempo final de simulación.
SELECCIONAR LA REJILLA DE SIMULACIÓN El simulador sólo permite cambios de las señales de entrada en los bordes de la rejilla predefinida. En esta práctica se va a hacer que el número de entrada cambie cada 100 ns, por lo que habrá que seleccionar una rejilla con un espaciado de ese valor o múltiplo inferior (1, 2, 4, 5, 10, 20, 25 ó 50 ns). Para ello hay que elegir la opción Grid Size… del menú Edit (véase la Figura 11), mientras está activa la ventana del editor de formas de onda, introducir el valor de 100 ns y pulsar Ok.
Figura 11. Selección de la rejilla.
ASIGNAR VALORES A LAS ENTRADAS Una vez definidos el tiempo final y la rejilla de simulación se está en condiciones de dar valores a las entradas del circuito. En este caso interesa que el grupo formado por las entradas D3 a D0 varíe desde 0h hasta Fh, para comprobar que el decodificador muestra en el display el valor correcto PARA TODOS LOS VALORES POSIBLES DE LA ENTRADA .
9 Práctica 4
Para ello hay que seleccionar el grupo Numero y pulsar sobre el botón de cuenta , que se encuentra en la barra de botones de la izquierda. Aparecerá entonces la ventana de la Figura 12, que tiene dos pestañas: Counting y Timing. En la primera se puede seleccionar la base en la que se quiere contar, el valor inicial de la cuenta, cuánto se incrementa, y si se cuenta en código Gray o en Binario. En la pestaña Timing se puede indicar en qué momento de la simulación comienza la cuenta, hasta cuándo dura y cada cuánto se incrementa.
Figura 12. Ventana para definir una cuenta en un grupo de señales. Pestaña Counting .
En esta práctica hay que seleccionar la base o Radix en Hexadecimal; como valor inicial el cero (‘0’); el incremento de uno en uno (‘1’); y el tipo de cuenta en Binario, tal y como se muestra en la Figura 12. Y en la pestaña Timing hay que indicar 100 ns en Count Every (véase la Figura 13).
Figura 13. Ventana para definir una cuenta en un grupo de señales. Pestaña Timing .
10 Práctica 4
VISUALIZACIÓN Y ZOOM Para ver mejor la evolución de las señales se puede variar el nivel del zoom en el editor de formas de onda con las opciones Zoom In y Zoom Out del menú View, o pulsando sobre el icono , el cual con el botón izquierdo del ratón hace un Zoom In y con el derecho un Zoom Out. Antes de terminar hay que guardar en el disco todos los cambios realizados al archivo de simulación, eligiendo la opción Save del menú File.
SIMULAR EL DISEÑO Una vez definidos los valores de las entradas del circuito en función del tiempo de simulación, se puede simular el comportamiento del circuito. Para ello hay que arrancar el simulador eligiendo la opción Simulator Tool del menú Processing, con lo que aparece la ventana de la Figura 14.
Figura 14. Ventana del Simulador.
Ahora hay que activar la opción Overwrite simulation input file with simulation results , tal y como se muestra en la figura anterior. Por último, hay que pulsar el botón Start para ejecutar la simulación. Cuando termine, si todo ha ido correctamente, avisa con un mensaje como el de la Figura 15. Si se produce algún error o aviso (warning ), lo indica en el mensaje anterior y lo detalla en la ventana de mensajes, de forma similar a como se muestra en las Figuras 23 y 25 de la práctica 3.
11 Práctica 4
Figura 15. Aviso de finalización de la simulación.
Para observar la evolución de las salidas del circuito hay que abrir la ventana de simulación. Para ello hay que pulsar el botón Open de la ventana del Simulador, tras lo cual aparecerá una ventana de aviso en la que hay que pulsar el botón Sí. A continuación se verá una ventana similar a la de la Figura 16, donde se observa la evolución temporal de las salidas del circuito en función de los valores de las entradas.
Figura 16. Simulación obtenida.
Como puede observar, cuando la entrada vale ‘0’, todos los segmentos están activados salvo el ‘ g’, que es el del centro, con lo que en el display aparecerá un ‘0’.2 Cuando la entrada vale ‘1’, sólo se activan los segmentos ‘b’ y ‘c’, apareciendo por tanto un ‘1’ en el display. Verifique que, para el resto de valores de la entrada, el circuito funciona correctamente. Si se detecta algún error hay que corregir el esquema del circuito, guardar los cambios, compilar, volver a simular y verificar que el funcionamiento es correcto.
CONFIGURAR LA FPGA CON EL CIRCUITO COMPILADO Una vez que ha finalizado la simulación y que se ha comprobado que el circuito se comporta perfectamente, se puede pasar a su implantación física en la FPGA. En primer lugar es necesario conectar la tarjeta de desarrollo de lógica programable del laboratorio al ordenador mediante el cable USB. Después hay que asegurarse de que el interruptor RUN/PROG que hay a la izquierda de la tarjeta está en RUN (véase la Figura 17).
2
Tenga en cuenta el alumno que los displays de la tarjeta son activos a nivel bajo, por lo que, un segmento a ‘0’ hará que el segmento se encienda y a ‘1’ hará que se apague.
12 Práctica 4
Por último, hay que encender la tarjeta pulsando el interruptor rojo que hay en la parte superior izquierda (véase la Figura 17).
Figura 17. Tarjeta de lógica programable del laboratorio.
A continuación hay que arrancar el Programador de Quartus, que se encuentra en la opción Programmer del menú Tools, con lo que aparecerá la ventana de la Figura 18.
Figura 18. Ventana del programador.
13 Práctica 4
Antes de continuar hay que verificar que el programa ha reconocido el hardware de programación. Para ello hay que mirar si en la parte superior izquierda de la ventana del programador pone USB-Blaster [USB-0] o si pone otra cosa distinta, como No Hardware (tal y como se muestra en la figura anterior). En este último caso hay que configurar el hardware correcto, y para ello hay que pulsar en el botón Hardware Setup… , con lo que aparecerá la ventana de la Figura 19. A continuación hay que hacer doble clic en USB-Blaster de la lista Availabe Hardware items y comprobar que en el campo Currently selected hardware aparece USB-Blaster [USB-0] . Una vez hecho esto hay que pulsar el botón Close.
Figura 19. Ventana de configuración del hardware.
Por último, hay que seleccionar la casilla de la columna Program/Configure, tal y como se muestra en la Figura 18), y pulsar el botón Start para que se descargue el circuito diseñado en la FPGA. Si todo ha ido bien, en la ventana de mensajes se debe ver algo como lo mostrado en la Figura 20. Si ha habido algún error, lo muestra en la misma ventana.
Figura 20. Mensajes tras la programación.
Una vez configurado el circuito en la FPGA hay que probar TODAS las combinaciones posibles de las entradas para verificar si su funcionamiento es correcto. Si se detecta algún error hay que corregir el esquema capturado en la práctica anterior, guardar los cambios realizados, compilar, simular y volver a volcar a la placa, comprobando el correcto funcionamiento en cada paso del proceso. Una vez que el funcionamiento del circuito es correcto en todos los pasos, muestre el resultado al profesor.