Programacion en FPGA

Descripción completa

Views 97 Downloads 3 File size 3MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

 

UNIVERSIDAD DE COLIMA FACULTAD DE INGENIERÍA MECÁNICA Y ELÉCTRICA 

Taller de Programación en FPGA Objetivo:

Diseñar circuitos digitales programando dispositivos FPGA Contenido temático: Dispositivos lógicos programables. Introducción a las herramientas de Xilinx para el diseño y la simulación de circuitos digitales. Herramientas de Xilinx para la programación de dispositivos lógico programables Principios de circuitos secuenciales y latches. Flip-flops, circuitos secuenciales activados por reloj. Creación de símbolos y manejo de buses en el editor de Esquemáticos del ISE.

Instructor

Jesús Uriel Mora Quiñones Se desempeña actualmente como profesor por asignatura en la Facultad de Ingeniería Mecánica y Eléctrica dependiente de la Universidad de Colima. Estudió Ingeniería en Comunicaciones y Electrónica en la Universidad de Colima en la Facultad de Ingeniería Mecánica y Eléctrica

Duración: 20 horas Dirigido a: Egresado de la Carrera de Ingeniería en comunicaciones y Electrónica Fechas y horarios: Sábados del 5 de mayo al 2 de junio de 2012 de 8:00-12:00hrs. Lugar: Laboratorio de Microelectróncia-FIME

ÍNDICE

Actividad 1: Dispositivos lógicos programables…………………………… Memorias prom para diseñar circuitos lógicos……………………. PLA (Programmable Logic Array)………………………………... PAL (Programmable Array Logic)………………………………... CPLD (Complex Programmable Logic Device)…………………..

4 4 4 5 6

Actividad 2: Introducción a las herramientas de Xilinx para el diseño y la simulación de circuitos digitales……………………….............................. 8 Actividad 3: Herramientas de Xilinx para la programación de dispositivos lógicos programables………………………………………… 23 Actividad 4: principios de circuitos secuenciales y latches………………... Circuitos lógicos realimentados (secuenciales)…………………… Circuito latch SR………………………………………………….. Actividad 5: Flip-flops, circuitos secuenciales activados por reloj……..… Señal de reloj (clock)……………………………………………… Flip-flop tipo D……………………………………………………. Descripción formal de un flip-flop………………………………... Flip-flop JK………………………………………………………... Flip-flop tipo T……………………………………………………. Actividad 6 : Creación de símbolos y manejo de buses en el editor de esquemáticos del ise………………………………………………………… Creación de símbolos en el ISE…………………………………… Uso de buses en el ISE…………………………………………….

31 31 33 38 38 38 41 42 45

48 48 50

Actividad 1: Dispositivos Lógicos Programables Profesor: Jesús Uriel Mora Quiñones Módulo: Taller de programación en FPGA.

Abstract Esta actividad es una introducción a los dispositivos lógicos programables. La actividad está planeada con un enfoque de aprendizaje colaborativo.

I. DISPOSITIVOS LÓGICOS PROGRAMABLES

• • • • •

Un dispositivo lógico programable, o PLD (Programmable Logic Device), es un dispositivo cuyas características pueden ser modificadas y almacenadas mediante programación. El principio de síntesis de cualquier dispositivo lógico programable se fundamenta en el hecho de que cualquier función booleana puede ser expresada como una suma de productos. Un PLD contiene una arquitectura general predefinida en la que el usuario puede programar el diseño final del dispositivo empleando un conjunto de herramientas de desarrollo. La síntesis de un diseño lógico en un PLD es la generación de una lista de conexiones, con las cuales se configurará el dispositivo para que realice la función lógica deseada. La síntesis no suele ser tarea del diseñador, ya que los entornos de desarrollo para PLD ya incluyen este tipo de herramientas computacionales. Los dispositivos PLD más comunes son: PROM (Programmable Read Only Memory). PLA (Programmable Logic Array). PAL (Programmable Array Logic). CPLD (Complex Programmable Logic Device). FPGA (Field Programmable Gate Array).



Ventajas: La programación del dispositivo se hace desde una computadora, usualmente a través del puerto paralelo. El tiempo de desarrollo es mucho menor a las anteriores opciones de diseño. La fundidora sólo provee el chip, el software de desarrollo y las librerías. La realización y verificación del diseño, así como la programación del dispositivo se pueden hacer sin necesidad de equipo sofisticado. Una gran gama de dispositivos de distintas capacidades y costos.

• • •

Desventajas: Tiene el costo por chip más alto. La velocidad del chip es limitada en comparación con las otras tecnologías. Se desperdicia más semiconductor que otras tecnologías ASIC.

• • • •

II. MEMORIAS PROM PARA DISEÑAR CIRCUITOS LÓGICOS. Las memorias son usadas para almacenar datos binarios, estos datos pueden ser interpretados como la implementación de un circuito combinacional, expresados como una función Booleana en forma canónica como suma de productos. Las memorias PROM sólo pueden ser programadas una sola vez. Para entender como una memoria puede funcionar como un circuito combinacional, es necesario analizar la implementación de funciones lógicas usando arreglos de conexiones. La Figura 5.1 muestra los símbolos para las compuertas AND y OR usando un arreglo de conexiones, en lugar de usar varias líneas hacia las compuertas, se emplea una sola línea como estrada, se dibujan varias líneas perpendiculares a ésta con las posibles señales de entrada. Para indicar una conexión hacia la compuerta se pone punto (), la intersección entre la línea que va a compuerta y la línea de la señal que se desea conectar a la entrada de la compuerta.

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 1

Figura 5.1: Implementación de compuertas con arreglos de conexiones.

El diagrama de la Figura 5.2a representa una memoria PROM 16×4 (16 localidades de 4 bits cada una), Un decoder es usado decodificar las 4 líneas de direcciones (A3, A2, A1, A0) hacia alguna de las 16 localidades, cada salida del decodificador es una localidad de memoria. Recuerde el funcionamiento del decoder, cuando cierta dirección esté presente en la entrada, la salida Y que tenga ese índice tendrá un valor de '1' y las demás salidas permanecerán en '0'. Por ejemplo si A3A2A1A0="0011", entonces la línea de salida 3 tendrá un '1', y las demás se quedarán en '0'.

Figura 5.2: Memorias PROM usadas como PLD.

La siguiente es la tabla de verdad de dicho decodificador.

A3A2A1A 0

"0000" "0001" "0010" "0011" "0100" "0101" "0110" "0111" "1000" "1001" "1010" "1011" "1100" "1101" "1110" "1111"

Y 0 '1' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0'

Y 1 '0' '1' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0'

Y 2 '0' '0' '1' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0'

Y 3 '0' '0' '0' '1' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0'

Y 4 '0' '0' '0' '0' '1' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0'

Y 4 '0' '0' '0' '0' '0' '1' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0'

Copyright 2007. Universidad de Colima

Y 6 '0' '0' '0' '0' '0' '0' '1' '0' '0' '0' '0' '0' '0' '0' '0' '0'

Y 7 '0' '0' '0' '0' '0' '0' '0' '1' '0' '0' '0' '0' '0' '0' '0' '0'

Y 8 '0' '0' '0' '0' '0' '0' '0' '0' '1' '0' '0' '0' '0' '0' '0' '0'

Y 9 '0' '0' '0' '0' '0' '0' '0' '0' '0' '1' '0' '0' '0' '0' '0' '0'

Y1 0 '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '1' '0' '0' '0' '0' '0'

Y1 1 '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '1' '0' '0' '0' '0'

Y1 2 '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '1' '0' '0' '0'

Y1 3 '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '1' '0' '0'

Y1 4 '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '1' '0'

Y1 5 '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '1'

Dr. Ramón António Félix Cuadras 2

Cuatro compuertas OR proveen los cuatro bits de salida. El área para hacer conexiones entre las salidas del decoder y las entradas de las OR se llama arreglo de compuertas OR (OR array). Cuando no hay conexiones (Figura 5.2a), las salidas de las OR serán '0', sin importar los valores de las líneas de direcciones. Con conexiones como en la Figura 5.2b, las salidas de memoria dependerán del dato que este almacenado en la dirección seleccionada. Si la dirección seleccionada es A3A2A1A0="0000", entonces la línea 0 será igual a '1'. Debido a que ninguna conexión se hizo entre esa línea y las compuertas OR, las cuatro salidas tendrán un '0'. Así en la localidad 1 de la memoria el dato almacenado es D3D2D1D0="0000". Si la entrada es A3A2A1A0="0001", entonces la línea 1 tendrá un '1', la cual está conectada a las compuertas OR de las salidas D1 y D0, por lo tanto D1='1'y D0='1', y el dato almacenado en la localidad 1 será "0011". Por último, el dato de la localidad 3 es "1101", y el dato almacenado en resto de las localidades es "0000". Una memoria PROM 16×4 puede usarse para sintetizar hasta 4 funciones Booleanas de 4 variables de entrada, las cuales son las líneas de dirección (A3, A2, A1, A0) de la PROM. Las 16 localidades de memoria son 16 posibles minitérminos para las 4 funciones lógicas, que son las salidas del arreglo OR (D3, D2, D1, D0). Para incluir un minitérmino en una función de salida, se hace una conexión entre la salida del decoder que corresponda al minitérmino con la entrada de la compuerta OR, cuya salida será la función lógica. En la Figura 5.2b se puede preciar que la función Booleana asociada con la salida D0 es D0= A3’A2’A1’A0 + ’ ’ A3 A2 A1A0’, y para las otras salidas son D1= A3’A2’A1’A0, D2 = D3 = A3’A2’A1A0’. Problema 5.1: Diseño lógico con memorias PROM. En la Figura 5.3, se muestra la síntesis de 2 funciones lógicas, F1 y F2, por medio de una memoria PROM 16×4, donde: D2 = w'x'yz + w'xyz' + w'xyz + wx'y'z' + wx'yz' + wxyz' D3 = w'x'y'z' + w'xy'z' + w'xy'z + w'xyz' + w'xyz

(5.1) (5.2)

Figura 5.3: Ejemplo del uso de memorias PROM para el diseño lógico.

Usando las 2 salidas disponibles de una memoria PROM 16×4 de la Figura 5.3, sintetice las funciones lógicas F3 = w'x'yz + wx'yz' + wx'yz + xyz (5.3) F4 = wx'y' + w'z (5.4) Llame al instructor para registrar el avance. (20 puntos).

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 3

III. PLA (Programmable Logic Array) Cuando las memorias PROM son usadas para sintetizar funciones lógicas, es muy común que varias localidades se queden sin usar (vea la Figura 5.3). Además para sintetizar un minitérmino con un número de variables menor al número de líneas de direcciones, es necesario agregar los minitérminos con todas las combinaciones de las variables no incluidas en el minitérmino deseado, lo cual implica más desperdicio de semiconductor. En la Figura 5.4 se muestra una PLA de 4×8×4. Las PLA fueron diseñadas para sintetizar exclusivamente circuitos combinacionales, pero con un menor desperdicio, en comparación de las PROM. Debido a que las PLA poseen un arreglo de compuertas AND (AND array) en lugar del decoder de las memorias PROM, el diseñador tiene la opción de especificar solamente los minitérminos que necesite. El arreglo de compuertas OR es similar al de las PROM, permitiendo al diseñador que especifique cuales minitérminos se sumarán en una salida.

Figura 5.4: Diagrama de una PLA de 4×8×4.

Además, las PLA tienen la capacidad de invertir ó no la salida de la OR, conectando una entrada de una compuerta XOR a '1' ó '0', y la otra entrada a la salida de la OR. Cuando la entrada se conecte a '1', la salida de la XOR será igual al negado de la salida de la OR, y cuando se conecte a '0', la salida de XOR será igual a la salida de OR. Problema 5.2: Diseño lógico con PLA. En la Figura 5.5, se muestra la síntesis de una función lógica, F=w'y' + x'z + w'xz' + wyz + wx'y, en una PLA 4×8×4,

Figura 5.5: Ejemplo del uso de PLA para el diseño lógico.

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 4

Usando las 3 salidas disponibles de una PLA de la Figura 5.4, sintetice las siguientes funciones lógicas, pero sin afectar la función lógica de la salida F. G = w'x'yz + wx'yz' + wxyz + xyz H = wx'yz' + x'z I = w'xz' + wx'y + wxyz

(5.5) (5.6) (5.7)

Llame al instructor para registrar el avance. (20 puntos). IV. PAL (Programmable Array Logic) Los dispositivos PAL son muy similares a los PLA, excepto que el arreglo OR no es programable. Por lo que los hace menos flexible que los PLA, pero más fáciles de programar y su velocidad de operación es mayor. En la Figura 5.6 se muestra una PAL 4×3×4, con 4 entradas y 4 salidas, cada salida acepta sólo 3 minitérminos.

Figura 5.6: Dispositivo PAL.

Problema 5.3: Diseño lógico con dispositivos PAL. En la Figura 5.7, se muestra la síntesis de una función lógica, F0=w'x'yz + wx'yz', en un PAL. En el mismo dispositivo sintetice las funciones: F1=wxyz + wx'yz', F2 = w'x'yz + wx'yz' + wxyz y F3 = wx'yz' + wx'yz

Figura 5.7: Ejemplo del uso de PLA para el diseño lógico. Llame al instructor para registrar el avance. (20 puntos).

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 5

V. CPLD (Complex Programmable Logic Device) Las memorias PROM, los PLA y los PAL sirven únicamente para sintetizar circuitos combinacionales de baja densidad de compuertas. Los dispositivos CPLD se especializan en sinterizar circuitos secuenciales de mediana densidad de compuertas. Un CPLD está formado por Bloques Funciones Lógicas (BF, Block Function) interconectados globalmente por una Matriz Avanzada de Interconexión (AIM, Advanced interconect Matrix). Los BF se componen de cierto número de Macro-Celdas lógicas (MC, Macrocell), y usan un PAL para implementar las funciones lógicas que comparten todas las macroceldas del BF, que van se conectan a los bloques Entrada-Salida (I/O Blocks) y éstos se conectan a los pines del circuito integrado. Las macroceldas se componen de flip-flop, en muchas ocasiones configurables, pero en la mayoría de los casos son flip-flops tipo D. En la Figura 5.8 se muestra un diagrama a bloques de un CPLD CoolRunner2 de Xilinx.

Figura 5.8: Arquitectura de la familia de CPLD CoolRunner2 de Xilinx.

Problema 5.4: Diseño lógico con dispositivos CPLD. En la Figura 5.9, se muestran 2 macroceldas pertenecientes al mismo BF. Sintetice en este circuito un flipflop tipo T y otro tipo JK, configurando la PAL del BF.

Figura 5.9: Dos Macroceldas simplificadas de un mismo FB de un CPLD.

Llame al instructor para registrar el avance. (40 puntos).

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 6

VI. FPGA (Field Programmable Gate Array) Esta arquitectura son celdas lógicas que se comunican unas con otras a través de celdas de interconexión • • • • •

IOB: Input-Output Block CLB: Configurable logic Block CDM: Digital Clock Manager Multiplicadores de 18 bits Bloques de 18 Kbits de Memoria RAM

Figura 5.10: Arquitectura de la Familia de FPGA Spartan 3 de Xilinx

The logic array consists of logic array blocks (LABs). Each LAB contains eight logic elements (LE) and a local interconnect. The LE shown in Figure 25 is the smallest logical unit in the FLEX 10K architecture. Each LE consists of a 4-input look-up table (LUT) and a programmable flip-flop. The 4-input LUT is a function generator made from a 16-to-1 multiplexer that can quickly compute any function of four variables. Refer to section 4.8 on how multiplexers are used to implement Boolean functions. The four input variables are connected to the four select lines

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 7

ACTIVIDAD 2: Introducción a las Herramientas de XILINX para el Diseño y la Simulación de Circuitos Digitales Profesor: Jesús Uriel Mora Quiñones Módulo: Taller de programación en FPGA.

Abstract Esta actividad es una introducción al uso de las herramientas Xilinx para el diseño y la simulación de circuitos digitales. La actividad está planeada con un enfoque de aprendizaje colaborativo.

El hardware y el software utilizado son especiales para actividades de enseñanza y verificación de circuitos digitales usando dispositivos lógicos programables, en este caso FPGA (Field Programmable Gate Array). Equipo requerido por cada grupo es:  PC con el ISE WebPack versión 10.1. http://www.xilinx.com.  Sistema de desarrollo FPGA Basys2 de Digilent Inc. http://www.digilentinc.com.

Figura 1. Tarjeta Basys2 y su diagrama a bloques.

El objetivo de esta actividad es conocer paso a paso las herramientas de XILINX para el diseño y simulación de circuitos digitales. Como ejemplo se tomará el diseño de un simple multiplexor de 2 a 1 línea, como el que se aprecia en la Figura 2. Recuerde que un circuito multiplexor transfiere los datos de la entrada (A o B) seleccionada por las líneas de selección (SEL) a la salida del circuito (Z). A SEL

Z

B

Figura 2. Multiplexor de 2 a 1 línea con las entradas A y B y el selector SEL como puertos de entrada y Z como puerto de salida.

Las etapas de diseño que cubre esta actividad son: 1. La entrada del diseño usando diagramas esquemáticos. 2. La simulación del diseño (verificación en software) usando el ISE Simulator. Abra el programa Project Navigator en el Botón "Inicio", luego hay que ir a "Todos los Programas>Xilinx ISE Design Suite 10.1->ISE->Project Navigator", entonces aparecerá una pantalla como la siguiente:

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 8

Figura 3. Ventana principal del Project Navigator.

La ventana del Project Navigator consiste en: 1. 2. 3. 4. 5. 6.

El menú principal, donde podemos realizar todas las operaciones. La barra de herramientas donde están las tareas más comunes. Ventana de archivos fuente del proyecto, donde se administran los archivos que forman parte del proyecto. Ventana de procesos donde aparecen las acciones que se pueden realizar al archivo fuente que esté seleccionado. El espacio de trabajo, donde principalmente se realiza la edición de los archivos fuentes. La consola de mensajes, donde aparece el estatus de los procesos y los mensajes de error y de advertencia (warning).

Cree un nuevo proyecto seleccionando “File” del menú principal, luego en la pestaña haga clic en “New Proyect...”. Aparecerá la siguiente ventana:

Figura 4. Ventana para poner del proyecto y su localización.

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 9

Introduzca el nombre del proyecto en el cuadro de texto “Project Name” y la localización del proyecto en “Project Location”, si es necesario cree un fólder llamado “ProyectosISE”, u otro de su elección, donde se almacenarán los futuros proyectos, luego seleccione en la opción “Schematic” en el tipo de diseño principal del proyecto en menú pop-up “Top-Level Module Type”. Haga clic en el botón “Next”. Aparecerá la ventana:

Figura 5. Ventana para introducir los datos del chip.

En la primera parte se debe especificar el chip que se va programar; la categoría del producto es “General Purpose”, luego seleccione la familia a la que pertenece el dispositivo (Family), seleccione “Spartan 3E”; el chip en específico (Device) es “XC3S250E”; el encapsulado (Package) es “CP132” y su grado de velocidad (Speed) es “-4”. La segunda parte se definen las herramientas de síntesis y simulación que se van a utilizar, “ISE Simulator (VHDL/Verilog)” en la opción Simulator y “XST (VHDL/Verilog)” en Synthesis Tool y “VHDL” en Preferred Lenguage. Los datos deben corresponder con el FPGA de la tarjeta Basys2, ya que si no son correctos no será posible programarlo. Verifique que los datos correspondan con la Figura 5. Haga clic en el botón “Next”. Aparecerá la ventana:

Figura 7. Ventana para agregar una nueva fuente al proyecto.

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 10

En esta ventana se pueden ir creando los archivos fuente del proyecto, en este caso sólo va ser necesario crear un archivo de diagrama esquemático, para ello seleccione el botón “New Source” con lo cual aparecerá una nueva ventana como en la Figura 8. Del lado izquierdo están los tipos de archivos que podemos agregar al proyecto, asegúrese de seleccionar “Schematic”. En el lado derecho se introduce el nombre del archivo y su localización.

Figura 8. Ventana para definir el nombre y el tipo de una nueva fuente (diagrama de esquemáticos).

Haga clic en el botón “Next”, entonces aparecerá una ventana con información del archivo que se acaba de crear.

Figura 9. Ventana con información del la nueva fuente agregada al proyecto.

Haga clic en el botón “Finish” para terminar de agregar el archivo. Se regresará la ventana donde se comenzó a agregar la fuente, pero ahora se listará el archivo “mux2a1.sch” indicando que es del tipo esquemático, aquí se tiene la opción de seguir agregando diseños al proyecto, pero por el momento esto no es necesario.

Figura 10. Ventana para agregar una nueva fuente al proyecto (re-visitada).

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 11

Haga clic en el botón “Next”. Aparecerá la ventana de la Figura 11. En esta ventana se pueden agregar archivos ya existentes al proyecto, en este caso no se agregarán, así que haga clic en el botón “Next”.

Figura 11. Ventana para agregar fuentes ya existentes al proyecto.

Aparecerá la siguiente ventana con información general del proyecto recién creado (Figura 12).

Figura 12. Ventana con información general del proyecto.

Haga clic en el botón “Finish” para regresar a la ventana del Project Navigator y empezar a trabajar en el proyecto. Una vez finalizado este proceso aparecerá la siguiente ventana:

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 12

Figura 13. Ventana del Project Navigator después de crear un proyecto nuevo.

Para facilitar la edición de este archivo es recomendable desincorporar el programa editor de esquemáticos de la ventana del Project Navigator, haciendo clic en el icono como se indica en la Figura 13 o seleccionando “Windows−>Float”. Al desincorporar el editor de esquemáticos del Project Navigator aparecerá la siguiente ventana del editor de esquemáticos.

Figura 14. Ventana del Editor de Esquemáticos.

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 13

La ventana de esquemáticos consiste básicamente de: 1. Un menú principal. 2. Una barra de herramientas con las tareas más comunes. 3. Una pestaña de opciones “Options”, para configurar las acciones elegidas. 4. Una pestaña de símbolos “Symbols”, donde están los diferentes componentes (compuertas lógicas, flipflops, registros latches, contadores, etc.) que se pueden utilizar para hacer los diseños de circuitos lógicos. 5. Una hoja de trabajo donde se colocarán y conectarán los componentes. Para empezar a trabajar se deben pegar los componentes lógicos en la hoja de trabajo, haciendo clic en la pestaña “Symbols”. Note que aparecen dos cuadros: “Categories” y “Symbols”, para denotar que todos los componentes o símbolos están clasificados en categorías, por ejemplo las compuertas AND, OR, INV, XOR, etc. están en la categoría “Logic”, por lo tanto si se desea agregar una compuerta lógica OR de 2 entradas se debe de seleccionar “Logic” del cuadro de categorías y luego buscar el símbolo “or2” del cuadro “Symbols”, para poder arrastrar dicha compuerta a la hoja de trabajo se debe tener seleccionado el botón de la barra de herramientas

, y hacer clic izquierdo donde se desea colocar, vea la Figura 15.

Figura 15. Introduciendo compuertas lógicas a la hoja de trabajo.

También hay un cuadro de texto “Symbol Name Filter” para buscar rápidamente el símbolo deseado o filtrar alguna clase de componentes a partir del texto que introduzcamos, para las compuertas lógicas podemos seguir la siguiente nomenclatura: [Nombre de compuerta: and, or, inv, etc.][# de entradas][b][# de entradas negadas]

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 14

Donde el parámetro opcional [b] indica que la compuerta tiene al menos una entrada negada. Si deseamos encontrar una compuerta OR de dos entradas debemos teclear “or2” y para una AND de dos entradas con una de las entradas negada escribiremos “and2b1”. En la opción “Orientation” podemos girar, a nuestra conveniencia, el símbolo seleccionado. Haciendo clic el botón “Symbol Info” se abrirá un archivo de ayuda con información detallada sobre el símbolo seleccionado. Para tener una visión más clara de nuestro diseño en la hoja de trabajo, podemos pulsar varias veces en el botón de “Zoom agrandar” de la barra de botones, como se muestra en la figura de arriba, si es necesario ajuste a su conveniencia con el botón “Zoom achicar”. Seleccione y coloque las mismas compuertas con igual orientación como se muestra en la Figura 16.

Figura 16. Conectando las terminales de la compuertas lógicas.

Para conectar 2 terminales o pines entre componentes, es necesario un “Wire”, pulse el botón indicado en la figura, el cursor cambiará a una cruz cuando entre a la hoja de trabajo. Haga clic en el primer pin, sin soltar el botón del Mouse, arrastre el cursor hasta el otro pin, suelte el botón del Mouse cuando aparezcan 4 cuadros pequeños alrededor de la terminal, que indican que la conexión es permitida en ese pin; en caso contrario no aparecerán. Si desea borrar alguna conexión, compuerta u otro componente de la hoja de trabajo asegúrese de pulsar el botón de “seleccionar” y presione la tecla “Supr”.

de la barra de herramientas, haga clic con el Mouse en el objeto que desee borrar

Siguiendo con el diseño, conecte las salidas de las compuertas AND a las entradas de la compuerta OR2 y la entrada negada del componente AND2B1 a una entrada superior de la AND2.

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 15

En el editor de esquemáticos se definen los componentes (compuertas lógicas, flip-flops, contadores, registros, etc.), las conexiones internas y los puertos de entrada y salida; en que parte del chip se implementará y a que pines se conectarán los puertos. Sólo a través de los puertos de entrada y salida pueden hacerse conexiones hacia el exterior de nuestro diseño. Para agregar los puertos de entrada y salida a nuestro diseño pulse el botón indicado en la Figura 17.

Figura 17. Agregando puertos de entrada y salida a nuestro diseño.

Al pulsar el botón para agregar puertos aparecerá en la pestaña “Options” 5 opciones para configurar en puerto:  “Add an automatic marker”: automáticamente identifica si el puerto debe ser de entrada o salida dependiendo de la terminal a donde es conectado.  “Add an input marker”: el puerto es configurado como de entrada.  “Add an output marker”: el puerto es configurado como de salida.  “Add a bidirectional marker”: el puerto es configurado como bidireccional (alta impedancia).  “Remove the marker”: borra el puerto de salida. Una vez seleccionado el tipo de puerto que deseamos agregar, mueva el cursor hacia la hoja de trabajo y presione el botón izquierdo del Mouse en la terminal que desee conectar dicho puerto; cuando sea posible hacer la conexión aparecerán los cuatro cuadros pequeños como el caso de las conexiones internas. La siguiente tarea es renombrar los puertos de acuerdo con la Figura 2, A y B como las entradas, SEL como el selector y Z como la salida del multiplexor. Para empezar haga clic con el botón derecho del Mouse en el puerto de salida, con lo cual aparecerá un menú, seleccione la opción “Rename Port”, en el cuadro de diálogo “Rename Net”, sustituya el nombre que está en el cuadro de texto por el de “Z”, haga clic en el botón “OK”. Repita el mismo procedimiento con los demás puertos de entrada cambiando los nombres actuales a los que correspondan según la Figura 2. Se debe lograr que el diseño se vea como en la Figura 18.

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 16

Figura 18. Diseño terminado.

Para verificar que el diseño no contenga errores haga clic en el botón de la barra de herramientas o en el menú principal seleccione “Tools−>Check Schematic”, si hay algún error corríjalo, si no guarde el archivo pulsando el botón o en el menú principal seleccione “File−>Save”. Guardar es indispensable para que los cambios en el archivo se tomen en cuenta en los demás procesos del diseño.

LLAME AL INSTRUCTOR PARA REGISTRAR EL AVANCE. Una vez introducido el diseño lógico usando el editor de esquemáticos, el siguiente paso es la verificación de su funcionamiento a través de una simulación. Para iniciar este proceso regrese a la ventana del Project Navigator. Primeramente necesitamos agregar un archivo llamado cama de pruebas, en el cual estarán definidas las formas de onda de las señales que se conectarán a los puertos de entrada del diseño “mux2a1.sch”. Haga clic con el botón derecho del Mouse en la ventana de fuentes (sources for:) y seleccione “New Source…” o en el menú principal seleccione “Project−>New Source”. Aparecerá la ventana para definir el nombre y el tipo de la nueva fuente (Figura 20), en este caso seleccione la opción “ Test Bench WaveForm” e introduzca un nombre de archivo para identificar que se trata de una cama de pruebas, “test” es un nombre adecuado. Pulse “Next”.

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 17

Figura 19. Ventana para definir el nombre y el tipo de una nueva fuente (Cama de pruebas en forma de onda, Test Bench WaveForm).

Ahora aparecerá una ventana (Figura 20) para seleccionar a cuál de los diseños del proyecto se le asignará esta cama de pruebas, en este caso sólo hay uno “mux2a1”, pulse “Next”.

Figura 20. Ventana para asignarle la cama de pruebas a algún diseño. Por último aparecerá una ventana con la información sobre la fuente recién agregada, Figura 21.

Figura 21. Información del archivo “test.tbw” (cama de pruebas en forma de onda).

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 18

Figura 22. Ventana para inicializar los parámetros temporales del test bench.

El siguiente paso es definir las características temporales de la cama de pruebas en la ventana. En la Figura 22 podemos definir entradas de reloj y retrasos de retención entre otras cualidades para circuitos secuenciales, pero en este caso asegúrese de seleccionar en el cuadro “Clock Information” la opción “Combinational (or internal clock)”, debido a que nuestro diseño es puramente combinacional. Por omisión habrá un retardo de 50 ns entre los cambios en las entradas y su propagación en la salida y otro retardo de 50 ns entre la asignación de las salidas y las entradas. Pulse “Finish”.

Figura 23. Forma de onda del testbench.

En el espacio de trabajo del la ventana del Project Navigator aparecerá la forma de onda del testbench recién agregado. Desincorpore esta ventana para mayor comodidad. Haga doble clic en el cuadro “End Time: 1000 ns” en la esquina superior izquierda, aparecerá un cuadro de dialogo para cambiar el final de la simulación; cambie ese tiempo a 2000 ns pulse el botón “OK”. Para modificar el valor de las señales de entrada en el testbench hay que hacer clic en los cuadros azules; al hacer esto, si su valor es bajo ‘0’ cambiará a alto ‘1’ y viceversa. Asegúrese que el testbench se vea exactamente como en la Figura 23, guarde el archivo.

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 19

Figura 24. Testbench agregado y listo para ser simulado.

Como puede apreciar en la Figura 24, en la parte superior de la ventana de archivos fuentes está el texto “Sources for:”, seguido de un menú pop-up con las opciones:   

“Síntesis/Implementation”: Lista las fuentes que pueden ser sintetizadas y/o implementadas en un chip FPGA. “Behavioral Simulation”: Lista las testbench que pueden ser simulados de manera ideal (sin retrasos de tiempo), es decir sin considerar las características físicas del chip donde se implementarán los diseños. “Post-Route Simulation”: Lista las testbench que pueden ser simulados considerando las características físicas del chip donde se implementarán los diseños.

Al ser guardado el archivo test bench aparecerá debajo del multiplexor “mux2a1.sch” en la ventana de fuentes sólo si se selecciona enlistar las fuentes a ser simuladas (testbench), vea Figura 24. Seleccione con un clic la fuente “test.tbw”, en la ventana de procesos aparecerá la opción “Xilinx ISE Simulator”, expándala para que aparezca la opción: “Simulate Behavioral Model”, haga doble clic en esta segunda opción, entonces aparecerá una ventana del ISE Simulator (Figura 25).

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 20

Figura 25. Ventana principal con el ISE Simulator.

La ventana de simulación está compuesta por 3 áreas:  A la izquierda está la lista de las señales que se están visualizando, también se hace referencia al diseño que las contiene, en este caso son: “a”, “b”, “sel” y “z”.  Los valores de las señales según el cursor de tiempo que este activo, dicho cursor se puede arrastrar por toda la escala del tiempo.  Las gráficas de las señales donde se puede apreciar el comportamiento de las señales con respecto al tiempo. Un botón muy útil de la barra de herramientas es el “Full Zoom” ( ), que sirve para ajustar la escala completa de tiempo al área de visualización de las señales, vea Figura 25. En esta ventana podemos verificar que el comportamiento de nuestro diseño (mux2a1) es el correcto. Como la simulación resultó como se esperaba, en la siguiente actividad se programará el diseño (mux2a1) en el chip FPGA y se verificará con los periféricos de la tarjeta Basys2. Llame al instructor para registrar el avance. Regrese a la ventana del esquemático, y elimine el puerto “SEL”, los wires entre las salidas de las compuertas AND y las entradas de la compuerta OR. Ahora inserte nuevos wires cortos en pines que conectaban los wires borrados, así como se aprecia en la Figura 26.

Figura 26: Rediseño del multiplexor.

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 21

En la barra de herramientas haga clic en el botón para etiquetar una conexión wire ( ); en la mitad de la pestaña “Options” está un cuadro de texto donde se introduce el nombre con el cual queremos etiquetar el wire; haga clic ahí y teclee “X”, mueva el cursor hacia la hoja de trabajo, note que el cursor tiene forma de cruz y con el texto que acabamos de introducir a un lado. Posicione el cursor sobre la conexión que se desea etiquetar, en este caso el wire de la salida de la compuerta AND2B1, haga clic, ahora aparecerá el texto “X” a un lado del wire. Repita el procedimiento para la entrada superior de la compuerta OR2, con esto estamos indicando que existe una conexión entre la salida de AND2B1 y la entrada superior de OR2, sin hacer la conexión directa. En muchas ocasiones es conveniente etiquetar todos los wires para realizar conexiones con etiquetas en el futuro, ahorrando tiempo y componentes. Realice las conexiones faltantes usando etiquetas, como se ve en la Figura 27. Vuelva a correr la simulación con el mismo testbench para corroborar que las conexiones con etiquetas hacen la misma función que las conexiones con los wires.

Figura 27: Rediseño de conexiones del multiplexor.

LLAME AL INSTRUCTOR PARA REGISTRAR EL AVANCE.

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 22

ACTIVIDAD 3: Herramientas de XILINX para la Programación de Dispositivos Lógicos Programables Profesor: Jesús Uriel Mora Quiñones Módulo: Taller de programación en FPGA. Abstract Esta actividad es un tutorial para la programación de dispositivos lógicos programables con herramientas Xilinx. La actividad está planeada con un enfoque de aprendizaje colaborativo.

El hardware y el software utilizado son especiales para actividades de enseñanza y verificación de circuitos digitales usando dispositivos lógicos programables, en este caso FPGA (Field Programmable Gate Array). Equipo requerido por cada grupo es:  PC con el ISE WebPack versión 10.1. http://www.xilinx.com.  Sistema de desarrollo FPGA Basys 2 de Digilent Inc. http://www.digilentinc.com.

Figura 1. Tarjeta Basys 2 y su diagrama a bloques.

El objetivo de esta actividad es conocer paso a paso las herramientas de XILINX para la programación de dispositivos lógicos programables. Para realizar está actividad es necesario haber cumplido con lo requerido en la Actividad 1, en la cual se diseñó un multiplexor de 2 a 1 línea (ACTIVIDAD 1: Figura 2) por medio de captura de diagramas esquemáticos; ese circuito se simuló usando ISE Simulator (verificación en software). El siguiente paso es implementar el diseño en un dispositivo lógico programable (verificación en hardware), en este caso una FPGA Spartar3E de Xilinx, que es el chip usado en tarjeta Basys 2 de Digilent (Figura 1) y posteriormente verificarlo de la manera manual por medio de los periféricos de esta tarjeta. Las conexiones del FPGA que se van a utilizar y como se conectarán dentro del chip, se definen internamente por el software ISE WebPack 10.1, nosotros tenemos la posibilidad de configurar este proceso, pero por lo pronto lo dejaremos pendiente.

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 23

Conexión  interna  (Wire) 

mux2a1.sch

A SEL

Z

Pin del Chip  configurado  como salida 

B

Dispositivo Lógico  Programable

Pines del Chip  configurados  como entradas  

Puertos de  entrada   (input marker) 

Puerto de salida  (output marker) 

En el editor de esquemáticos se  definen la arquitectura interna y  los puertos del diseño  

Figura 2. Conexión entre el diseño lógico y los pines dispositivo lógico programable (CPLD, FPGA, etc).

En esta actividad la principal tarea es definir los pines a los que se conectarán a los puertos del diseño “mux2a1.sch”, vea Figura 2. Nota: La Figura 2 es una representación general, no tiene que ver específicamente con el FPGA que estamos usando. La configuración de pines de nuestro proyecto se declara en un archivo de texto con la extensión “.ucf”. Para crear este archivo vaya a la ventana del Project Navigator, seleccione con un clic el archivo fuente “mux2a1” en la ventana de fuentes del proyecto, en la ventana de procesos expanda la opción “User Constraints”, dentro de ella haga doble clic en “Floorplan IO – Pre-Synthesis”, vea Figura 4. Aparecerá un cuadro de diálogo diciendo que el proceso requiere un archivo UCF y que se desea crearlo en ese momento, pulse “Sí”, vea Figura 4a; si el archivo UCF ya existe este cuadro de diálogo no aparecerá, inmediatamente se abrirá la ventana del programa PACE. NOTA: En algunas ocasiones el ISE presenta problemas a abrir el PACE, cuando esto ocurra debe introducir la asignación en modo texto, como lo indica el documento “Tip 3: Asignación de Pines en Modo Texto”.

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 24

Figura 4. Forma para crear un archivo de configuración de pines.

Figura 4a. Confirmación de creación del archivo .UCF.

La ventana del PACE contiene 3 ventanas   

“Design Browser”: Muestra la lista de los puertos del diseño mux2a1. “Design Object List”: es la lista de los puertos de diseño mux2a1, en la columna “Loc” indicada en la Figura 5, se definen los pines que van conectados a cada puerto del diseño. “Package Pins for …”: Muestra una representación gráfica de los pines del chip a programar, en este caso el XC3S250E.

Seleccione “View−>Toolbars−>Legend” del menú principal para abrir la ventana “Package Pin Legend” donde se aprecia la descripción del código de colores en los pines.

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 25

Figura 5. Programa PACE para definir la configuración de pines del diseño.

Para configurar correctamente la conexión entre los puertos de nuestro diseño y los pines del chip, es necesario conocer perfectamente el hardware donde está empotrado, en este caso la tarjeta Basys 2. Tarjeta Basys 2 es una plataforma lista-para-usar, con un conjunto de periféricos de entrada y salida ideales para realizar pruebas (Figura 7). Los periféricos básicos de la Basys 2 son:  Un reloj ajustable con un potenciómetro de precisión.  Display con 4 dígitos de siete segmentos.  4 Botones y 8 switches de desplazamiento.  8 leds en 3 diferentes colores (verde, rojo y amarillo).

Figura 7. Diagrama de conexiones entre la FPGA y los periféricos de la Basys 2.

Copyright 2007. Universidad de Colima

Dr. Ramón António Félix Cuadras 26

Los cátodos de los leds de la Basys 2 están conectados a tierra a través de una resistencia de 240 Ohm y los ánodos se conectan directamente a los pines del FPGA, como se aprecia en la Figura 7. Por lo tanto, el led se encenderá con un ‘1’ en el pin del FPGA al que está conectado y con un ‘0’ se apagará. Los leds se identifican como LED0, LED1,…LED7. Los botones están conectados como indica la Figura 7, entonces al pulsar este botón será un ‘1’ lógico, y al no estar pulsado el botón la FPGA leerá un ‘0’. Las conexiones de los botones de la tarjeta Basys2 se identifican como BTN0, BTN1, BTN2, y BTN3. Como se puede apreciar en la Figura 7, los switches se conectarán a Vdd cuando estén hacia arriba y a Tierra si están hacia abajo, también tienen conectada una resistencia de 4.7KΩ para proteger a los pines del FPGA. Las conexiones de los leds al socket del Basys 2 se identifican como SW0, SW1,…SW7 (vea abajo de los switches en el Basys 2). En esta actividad designaremos los periféricos del Basys 2 a los puertos del mux2a1, de acuerdo con la Tabla II. Usaremos 2 botones para las entradas A y B, un switch para SEL y un led para la salida Z, vea la Figura 9 para clarificar. Lo que queremos es que al pulsar el botón BTN0 y estar el switch SW0 arriba, el led LED0 encienda, apagándose al liberar el botón y si el switch está hacía abajo el led se encenderá cuando se pulse el botón BTN1.

Tabla II. Relación entre los puertos de mux2a1, los periféricos de la Basys 2 y los pines del FPGA XC3250250

Puertos del diseño mux2a1.sch Z SEL A B

Periféricos de la tarjeta Basys 2 LED0 SW0 BTN0 BTN1

Pines del FPGA XC3250250

Podemos resumir las especificaciones dadas para nuestro diseño en el Basys2 en la Tabla III.

Tabla III. Tabla de verdad de las especificaciones de nuestro diseño SW0