Sumador 1bit
-
Upload
jftrujilloa -
Category
Documents
-
view
597 -
download
3
Transcript of Sumador 1bit
SUMADOR 1 BIT – EJEMPLO PROCESO DE DISEÑO
EEEjjjeeerrrccciiiccciiiooo
1
111 EEEJJJEEEMMMPPPLLLOOO DDDEEE PPPRRROOOCCCEEESSSOOO DDDEEE DDDIIISSSEEEÑÑÑOOO
A lo largo del libro se van a resolver varios ejercicios prácticos con los siguientes objetivos:
Realizar un estudio exhaustivo del dispositivo lógico programable complejo XC9572 de XILINX.
Utilizar muchos de los recursos del entorno ‘ISE v7.1i de XILINX’.
Manejar adecuadamente el simulador ‘ModelSim XE III v6.0a’ integrado en ‘ISE’.
Dar una visión del gran espectro de posibilidades teórico/prácticas que la tarjeta de aplicación didáctica ‘TAD-XC9572’ pone a nuestra disposición.
Las fases que se seguirán en el proceso de diseño de cada uno de los ejercicios propuestos son las siguientes::
FRONT-END
1. ESPECIFICACIÓN
2. SIMULACIÓN FUNCIONAL (Pre-Layout)
3. SÍNTESIS
BACK-END
4. IMPLEMENTACIÓN
1. COLOCACIÓN (Translate) 2. CONEXIÓN (Fit)
5. VERIFICACIÓN (Post-Layout)
6. PROGRAMACIÓN
7. VERIFICACIÓN EN CIRCUITO
Para la elección de este primer ejercicio se ha tenido en cuenta su simplicidad, de manera que podamos centrar toda nuestra atención en el aprendizaje del entorno ‘ISE’ y del ‘ModelSim’.
SUMADOR 1 BIT – ENUNCIADO PROCESO DE DISEÑO
2
Cin A B S Cout
0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1
EEENNNUUUNNNCCCIIIAAADDDOOO
Implementar en el CPLD XC9572 un sumador completo de 1 bit. AAANNNÁÁÁLLLIIISSSIIISSS
Su tabla de verdad es la siguiente:
A B Cin 00 01 11 10
0 0 1 0 1 1 1 0 1 0
Tabla 5: Karnaugh ‘S’
A B Cin
00 01 11 10
0 0 0 1 0 1 0 1 1 1
Tabla 6: Karnaugh ‘Cout’
Tabla 4: Tabla de la verdad
Empleando Karnaugh obtenemos:
S = A ⊕ B ⊕ Cin
Cout = AB + Cin( A + B)
Otra manera de expresar el acarreo de salida es, adicional.
Cout = AB + Cin( A ⊕ B) y así nos ahorramos una puerta OR
SUMADOR 1 BIT – ESPECIFICACIÓN PROCESO DE DISEÑO
3
111ººº FFFRRROOONNNTTT---EEENNNDDD
EEESSSPPPEEECCCIIIFFFIIICCCAAACCCIIIÓÓÓNNN
La especificación de este ejemplo se va a realizar empleando un lenguaje formal de representación gráfico, apoyado en la herramienta gráfica de captura de esquemáticos integrada en el entorno ‘ISE’ llamada ‘ECS’ (System Capture Engineering).
El proceso de diseño parte con la creación de un proyecto y este proyecto lo generaremos con la herramienta ‘Project Navigator/Design Manager’ (Gestor de diseños).
El ‘ISE’ contiene el ‘Project Navigator’, que se encarga de gestionar todas las etapas del flujo de diseño. Esta utilidad es una interfaz que se monta sobre todo el conjunto de programas que participan en el diseño. Cada uno de estos programas actúa sobre un etapa concreta del diseño.
El ‘Project Navigator’:
Conecta los programas entre sí de manera coherente siguiendo el flujo de diseño.
Homogeneiza las llamadas a los programas utilizando una misma interfaz independiente de si el proveedor del programa es Xilinx o una empresa externa.
Mantiene un control de versiones del proyecto.
El esquema a diseñar es el siguiente: EEESSSQQQUUUEEEMMMAAA
Fig. 61: Sumador completo de 1 Bit
SUMADOR 1 BIT – ESPECIFICACIÓN PROCESO DE DISEÑO
4
111...--- AAABBBRRRIIIRRR PPPRRROOOJJJEEECCCTTT NNNAAAVVVIIIGGGAAATTTOOORRR
En el escritorio encontramos el icono del ‘Project Navigator’, hacemos doble clic y se abre.
Fig. 62: Interfaz gráfica del ‘Project Navigator’
El ‘Project Navigator’ se divide en cuatro ventanas:
1. En la esquina superior izquierda se muestran las distintas fuentes de diseño, que pertenecen al proyecto organizadas jerárquicamente.
2. Debajo de las fuentes se encuentra la ventana de Procesos. En esta ventana se mostrará la lista de
procesos disponibles para la fuente seleccionada en la ventana superior. Para cada proceso se muestra el estado del mismo, si ha sido ejecutado y, en caso afirmativo, si el resultado ha sido correcto.
Dependiendo de la fuente de diseño los procesos disponibles son distintos.
3. La tercera ventana está situada en la parte inferior de la pantalla. Ésta es la consola de Mensajes, que se
actualiza con mensajes informativos y de advertencia a medida que se activan los distintos procesos.
4. La última ventana se sitúa a la derecha y es un editor de HDL, entre otras muchas cosas.
SUMADOR 1 BIT – ESPECIFICACIÓN PROCESO DE DISEÑO
5
222...--- CCCRRREEEAAARRR NNNUUUEEEVVVOOO PPPRRROOOYYYEEECCCTTTOOO
Desde ‘File->New Project’ desplegamos la ventana de la Figura 63, donde configuramos los primeros parámetros del proyecto.
Fig. 63: Pantalla de ‘New Project’
Primero, localizamos el directorio donde vamos a ubicar el proyecto ‘C:\Xilinx71i_WEBPACK\bin\Projects’; luego, escribimos el nombre del proyecto ‘Sumador1bit’ y al mismo tiempo, se nos crea una carpeta en el directorio anteriormente elegido ‘C:\Xilinx71i_WEBPACK\bin\Projects\Sumador1bit’; y por último, seleccionamos el tipo de entrada del proyecto, en nuestro caso será gráfico.
Hacemos clic en siguiente y se nos abrirá la ventana de la Figura 64.
Fig. 64: Selección de dispositivo y flujo de diseño
SUMADOR 1 BIT – ESPECIFICACIÓN PROCESO DE DISEÑO
6
Las opciones son las:
Device Family: Nos permite elegir la familia del CPLD a utilizar. Seleccionamos XC9500 CPLD’s.
Device: Selecciona el CPLD en concreto de la familia elegida. En nuestro ejemplo ‘XC9572’.
Package: Permite seleccionar el tipo de encapsulado. Elegimos el ‘PC84’. Speed Grade: Selecciona la velocidad de trabajo del CPLD. El dato viene en nano segundos y se refiere al retardo pin a pin. La selección depende del dispositivo que dispongamos, en nuestro caso elegimos ‘-7’.
Design Flow: En este apartado seleccionamos el tipo de entrada (Schematic), el sintetizador (XST para VHDL), el simulador (ModelSim) y el lenguaje de simulación utilizado (VHDL).
333...--- AAAÑÑÑAAADDDIIIRRR FFFUUUEEENNNTTTEEE
Tras esta configuración se nos abre la ventana de la Figura 70, donde se nos pide que creemos, o añadamos, el fichero fuente. Hacemos clic en ‘New Source’.
Fig. 70: Selección fichero fuente
SUMADOR 1 BIT – ESPECIFICACIÓN PROCESO DE DISEÑO
7
Vamos a añadir una fuente a nuestro proyecto para especificar los requerimientos del sistema utilizando un lenguaje formal de presentación gráfico.
En la ventana que se nos despliega, seleccionamos la plantilla ‘Schematic’ y asignamos un nombre a la fuente, en nuestro caso pondremos ‘sumador1bit’. La opción de ‘Add to project’ deberá estar activada.
Fig. 71: Selección de plantilla de la nueva fuente
Se crea el siguiente informe:
Fig. 72: Informe del nuevo fichero fuente
SUMADOR 1 BIT – ESPECIFICACIÓN PROCESO DE DISEÑO
8
En esta ventana hacemos clic en ‘Siguiente’.
Fig. 73: Selección fichero fuente
Se nos da la posibilidad de añadir más ficheros fuentes. En nuestro caso no añadiremos más.
Fig. 74: Opción de añadir más ficheros fuente
SUMADOR 1 BIT – ESPECIFICACIÓN PROCESO DE DISEÑO
9
Se nos crea el siguiente informe con las especificaciones del nuevo proyecto:
Fig. 75: Informe del nuevo proyecto
Si todo está correcto, aparecerán dos nuevas entradas dentro de la ventana de ‘Fuentes de Diseño’ del proyecto. Una con el nombre del proyecto ‘sumador1bit.ise’, y la otra con el nombre del dispositivo CPLD ‘XC9572-7pc84’. Además, el editor de esquemas ‘ECS’ queda abierto dentro del ‘Project Navigator’.
Ahora estamos listos para realizar y añadir nuestros diseños al proyecto.
Fig. 76: Vista del ‘Project Navigator’
SUMADOR 1 BIT – ESPECIFICACIÓN PROCESO DE DISEÑO
10
444...--- DDDIIISSSEEEÑÑÑAAARRR EEESSSQQQUUUEEEMMMAAA DDDEEELLL SSSUUUMMMAAADDDOOORRR
Hacemos clic en la pestaña ‘Symbols’ y se nos abre la ventana de símbolos, mostrándonos las librerías y sus componentes correspondientes.
Fig. 78: Ventana de selección de componentes
El primer componente que vamos a colocar es una puerta xor de 2 entradas ‘xor2’. Para ello, tenemos dos formas de hacerlo:
Seleccionando ‘All Symbols’ y escribiendo ‘xor2’ en ‘Symbol Name Filter’. Posteriormente arrastramos el símbolo con el ratón hasta colocarlo en el lugar deseado dentro del esquemático.
La otra manera, es seleccionando la categoría ‘Logic’ y escribiendo ‘xor2’ en ‘Symbol Name Filter’ o buscando directamente dentro de la librería. Posteriormente, arrastramos el símbolo con el ratón hasta colocarlo en el lugar deseado dentro del esquemático.
Ver Figura 79.
SUMADOR 1 BIT – ESPECIFICACIÓN PROCESO DE DISEÑO
11
Fig. 79: Selección y colocación del símbolo ‘xor2’
El resto de componentes los colocamos tal y como muestra la Figura 80.
Fig. 80: Colocación de componentes
SUMADOR 1 BIT – ESPECIFICACIÓN PROCESO DE DISEÑO
12
Fig. 20: Conexión de componentes.
444...111...--- DDDIIIBBBUUUJJJAAANNNDDDOOO LLLÍÍÍNNNEEEAAASSS DDDEEE CCCOOONNNEEEXXXIIIÓÓÓNNN
Desde la barra de menús, seleccionamos ‘Add->Wire’ o hacemos clic en el icono de la barra de herramientas.
Fig. 81: Icono para añadir líneas de conexión
Si la línea a dibujar va de un pin hasta otro, haremos clic en el pin fuente y, llevando el ratón hasta el pin de destino, volveremos a hacer clic en este pin.
Si la línea a dibujar comienza en un pin pero no llega a otro, apretaremos el botón izquierdo del ratón en el pin fuente y nos moveremos hasta el lugar de destino elegido, donde soltaremos el botón.
La Figura 82 nos muestra las conexiones a realizar.
Fig. 82: Conexión de componentes
Desde la barra de menús, seleccionamos ‘Add->Net Name’ o hacemos clic en el icono de la barra de herramientas.
Fig. 83: Icono para añadir nombres de net
Escriba el nombre ‘A’ en la caja de ‘Name’ tal y como señala la Figura 84. Notará cómo en el cursor del ratón se añade el nombre ‘A’ y haciendo clic en la línea que se quiera nombrar, esta tomará el nombre.
SUMADOR 1 BIT – ESPECIFICACIÓN PROCESO DE DISEÑO
13
La Figura 84 también nos muestra el resto de los nombres del diseño (B, Cin, S y Cout)
Fig. 84: Nombres de net 444...222...--- AAAÑÑÑAAADDDIIIEEENNNDDDOOO MMMAAARRRCCCAAASSS III///OOO (((AAAddddddiiinnnggg III///OOO MMMaaarrrkkkeeerrrsss)))
Todas las líneas que vayan a tener conexión con el exterior del CPLD, deben ser marcadas.
Nota.- En el diseño de una macro el ‘I/O Marker’ determina los puertos del diseño interno.
Desde la barra de menús, seleccionamos ‘Add->I/O Marker’ o hacemos clic en el icono de la barra de herramientas.
Fig. 85: Icono para añadir ‘I/O Markers’
Las ‘I/O Markers’ pueden ser de entrada, salida o bidireccionales, por lo que deberemos elegir el tipo de marca antes de proceder a su colocación.
Para colocar una marca basta con situarse encima del nombre de la net y hacer clic. En el caso de no haber sido nombrada la net, el ‘ECS’ pondrá un nombre tomando como referencia parámetros internos.
SUMADOR 1 BIT – ESPECIFICACIÓN PROCESO DE DISEÑO
El esquema quedará como el de la Figura 86.
14
Fig. 86: Esquema completo
Antes de seguir con el proceso, es recomendable verificar los errores que hayamos podido cometer en el diseño a nivel de conexionado. Hacemos clic en el icono de la barra de herramientas.
Fig. 87: Icono para detección de errores
Si todo es correcto, el resultado será el de la Figura 88.
Fig. 88: Informe sobre el chequeo de errores
SUMADOR 1 BIT – SIMULACIÓN FUNCIONAL (Pre-Layout) PROCESO DE DISEÑO
15
222ººº SSSIIIMMMUUULLLAAACCCIIIÓÓÓNNN FFFUUUNNNCCCIIIOOONNNAAALLL
(((PPPrrreee---LLLaaayyyooouuuttt))) Una vez especificado el diseño (gráfico o textual), se debe realizar una simulación funcional o de comportamiento (Pre-layout) para comprobar el comportamiento del circuito (sin retardos).
Para verificar nuestro diseño, se va a utilizar la herramienta de simulación ‘ModelSim’, la cual necesita un fichero fuente de texto de entrada, escrito en un Lenguaje Descriptivo de Hardware (HDL) que contenga los vectores de prueba para poder realizar la simulación a la entidad creada. Para la obtención de este fichero ‘ISE’ dispone de una herramienta llamada ‘HDL Bencher’.
Una vez abierta la herramienta, tenemos dos posibilidades para generar el fichero de test ‘test bench’:
Empleando el formato gráfico que se nos brinda tras la apertura del programa. De manera que los estímulos los podremos meter gráficamente haciendo clic en las señales de entrada y salida. Este estilo recibe el nombre de ‘test bench waveform’. Antes de abrir el ‘ModelSim’ el test creado gráficamente será compilado y convertido a un formato HDL, en nuestro caso VHDL.
Si cerramos el formato gráfico, podremos escribir directamente el fichero de texto en lenguaje HDL, concretamente en nuestro caso VHDL, utilizando una plantilla genérica a la cual se le debe de añadir a mano los vectores de prueba.
En nuestro ejemplo vamos a emplear el formato gráfico.
111...--- CCCRRREEEAAARRR EEELLL FFFIIICCCHHHEEERRROOO DDDEEE TTTEEESSSTTT BBBEEENNNCCCHHH WWWAAAVVVEEEFFFOOORRRMMM
El test bench es un fichero VHDL en el que se instancia la entidad que se desea probar ‘uut’ (unit under test).
A esta unidad se le aplican un conjunto de vectores de prueba (estímulos), en modo texto o gráfico, de los cuales se conoce la salida esperada. Posteriormente, desde el ‘ModelSim’, se compara la salida que ofrece la ‘uut’ con la salida esperada, y si no son iguales es que ha habido algún error.
Por tanto, el primer paso es crear el fichero de test bench. Pulsando el botón derecho sobre el fichero ‘sumador1bit.sch’ seleccionamos la opción de ‘New Source’. En la siguiente pantalla elegimos la opción de ‘New->Test Bench Waveform’, y le llamamos ‘tb_sumador1bit’.
Fig. 89: Seleccionando Test Bench Waveform
SUMADOR 1 BIT – SIMULACIÓN FUNCIONAL (Pre-Layout) PROCESO DE DISEÑO
16
A continuación asociamos el fichero de test bench al fichero de ‘sumador1bit’.
Fig. 90: Asociando Test Bench
Fig. 91: Asociando Test Bench
17
SUMADOR 1 BIT – SIMULACIÓN FUNCIONAL (Pre-Layout) PROCESO DE DISEÑO
Hecho esto, se nos lanza una ventana desde la que podemos configurar los parámetros temporales de la simulación.
Nuestro diseño no dispone de reloj por lo que seleccionaremos una entrada combinacional para realizar la simulación ‘Combinatorial (or internal clock)’.
Los tiempos de retardo los dejamos por defecto, es decir, chequearemos las salidas 50ns después de ser asignadas las entradas y asignaremos nuevas entradas 50ns después de ser chequeadas las salidas.
Fig. 92: Configurando tiempos de simulación del TestBench
Ahora ‘HDL Bencher’ se nos abre dentro del entorno ‘ISE’ mostrándonos las formas de onda.
Fig. 93: Ventana de Test Bench
18
SUMADOR 1 BIT – SIMULACIÓN FUNCIONAL (Pre-Layout) PROCESO DE DISEÑO
En nuestro caso, vamos a comprobar la tabla de verdad del sumador completo de un bit. Para ello, meteremos los estímulos haciendo clic con el botón izquierdo del ratón encima del fondo azul de las entradas, hasta realizar todas las combinaciones de la tabla en la línea de tiempo horizontal, tal como muestra la Figura 94.
Fig. 94: Entrada de estímulos y respuestas esperadas en el ‘HDL Bencher’
En las salidas, de fondo amarillo, podríamos poner el valor esperado en cada una de las combinaciones o, por el contrario, esperar a que el propio simulador nos dé la respuesta adecuada. Nosotros no pondremos el valor.
Seguidamente salvamos las formas de onda y cerramos el ‘HDL Bencher’.
Podemos observar cómo se nos ha asociado el fichero de test ‘tb_sumador1bit’ al fichero ‘sumador1bit.sch’; además, el fichero de test bench lleva consigo asociados un conjunto de procesos.
Fig. 95: Nuevo fichero de test en ‘Project Navigator’
19
SUMADOR 1 BIT – SIMULACIÓN FUNCIONAL (Pre-Layout) PROCESO DE DISEÑO
222...--- SSSIIIMMMUUULLLAAACCCIIIÓÓÓNNN FFFUUUNNNCCCIIIOOONNNAAALLL CCCOOONNN MMMOOODDDEEELLLSSSIIIMMM M d l i
Antes de arrancar la utilidad de simulación ‘ModelSim’, añadimos el fichero test bench al proyecto haciendo clic en ‘Add Test Bench to Project’. Esto genera un nuevo fichero en formato HDL, en nuestro caso VHDL, denominado ‘tb_sumador1bit_tb.vhd’, que será utilizado por ‘ModelSim’ para realizar la simulación.
Fig. 96: Añadiendo test bench al proyecto
En la siguiente figura podemos ver como queda el ‘Project Navigator’ y parte del contenido del fichero ‘tb_sumador1bit_tb.vhd’.
Fig. 97: Parte del contenido del fichero ‘tb_sumador1bit_tb.vhd’
20
SUMADOR 1 BIT – SIMULACIÓN FUNCIONAL (Pre-Layout) PROCESO DE DISEÑO
Teniendo seleccionada la fuente ‘tb_sumador1bit-testbench_arch [tb_sumador1bit_tb.vhd]’, pulsamos dos veces seguidas sobre el proceso ‘Simulate Behavioral VHDL Model’. De esta forma se lanzará la aplicación de simulación asociada al ‘Project Navigator’, en nuestro caso ‘ModelSim XE III v6.0a’. La simulación se ejecutará automáticamente dando como resultado la consola de ‘ModelSim’:
Fig. 98: Entorno de trabajo de ‘ModelSim’
Nota.- Si no se nos abre el entorno, pudiera ser que no estuviera configurado el ‘Project Navigator’ para poder utilizar el simulador ‘ModelSim’. Si nos dirigimos a ‘Edit->Preferences…’, podremos configurar la ruta donde tengamos instalado el fichero ‘modelsim.exe’.
Fig. 99: Configuración de ‘ModelSim’ en ‘Project Navigator’
21
SUMADOR 1 BIT – SIMULACIÓN FUNCIONAL (Pre-Layout) PROCESO DE DISEÑO
222...111...--- CCCOOONNNTTTRRROOOLLL DDDEEE LLLAAA SSSIIIMMMUUULLLAAACCCIIIÓÓÓNNN
Se puede controlar la ejecución de la simulación mediante los siguientes botones:
STOP RESTART BREAK
RUN CONTINUE RUN RUN ALL
Fig. 107: Barra de herramientas.
Stop Wave Drawing.- Para la simulación.
Restart.- Inicializa la simulación para poder realizar una nueva ejecución.
Run.- Simula durante un tiempo igual al tiempo de simulación.
Continue Run.- Realiza una simulación de forma indefinida.
Run All.- Realiza una simulación por el tiempo establecido en el fichero HDL construido a partir del ‘test bench’.
222...222...--- CCCUUURRRSSSOOORRREEESSS
La herramienta permite grabar la situación del cursor en diferentes puntos, mostrando diferencia de tiempos entre cada marca. Para ello se utilizan los botones del cursor:
Fig. 108: Barra de herramientas. 222...333...--- FFFOOORRRMMMAAATTTOOO YYY BBBAAASSSEEE DDDEEE RRREEEPPPRRREEESSSEEENNNTTTAAACCCIIIÓÓÓNNN
Se puede cambiar tanto el formato como la base de representación de las señales. Para ello deberemos de seleccionar una o más señales y, si queremos cambiar el formato de representación, con el botón derecho del ratón elegiremos ‘Format’.
Se pueden elegir tres opciones:
Literal.- Se utiliza una representación numérica en la base elegida. En el caso de que el formato elegido sea literal se puede elegir la base de representación mediante ‘Format->Radix’.
Logic.- Muestra la forma de onda.
Event.- Muestra únicamente las transiciones de la señales.
SUMADOR 1 BIT – SIMULACIÓN FUNCIONAL (Pre-Layout) PROCESO DE DISEÑO
222...444...--- AAANNNÁÁÁLLLIIISSSIIISSS DDDEEE LLLAAA SSSIIIMMMUUULLLAAACCCIIIÓÓÓNNN
22
Sólo queda efectuar el análisis de la simulación.
Fig. 110: Simulación funcional de la ‘uut’ ‘sumador1bit’
23
SUMADOR 1 BIT – SÍNTESIS PROCESO DE DISEÑO
333ººº SSSÍÍÍNNNTTTEEESSSIIISSS
El ‘ISE’ incluye Xilinx® Synthesis Technology (XST), el cual sintetiza VHDL, Verilog, o diseños con mezcla de lenguajes para crear un fichero netlist específico de Xilinx conocido como fichero NGC.
Nota.- El fichero NGC es un netlist que contiene datos de diseño lógico y restricciones. Este fichero reemplaza al EDIF y NCF.
XST coloca el fichero NGC en el directorio del proyecto y el fichero es aceptado como entrada para efectuar el Translate (NGDBuild), paso que daremos durante la Implementación.
111...--- DDDEEESSSCCCRRRIIIPPPCCCIIIÓÓÓNNN DDDEEELLL FFFLLLUUUJJJOOO DDDEEE DDDIIISSSEEEÑÑÑOOO DDDEEELLL XXXSSSTTT
La Figura 107 muestra los ficheros de entrada y salida del sintetizador XST.
Fig. 111: Flujo del XST 222...--- FFFIIICCCHHHEEERRROOOSSS DDDEEE EEENNNTTTRRRAAADDDAAA///SSSAAALLLIIIDDDAAA
222...111...--- EEENNNTTTRRRAAADDDAAA
VHDL: IEEE 1076-1987, IEEE 1076-1993, incluyendo IEEE standard y Synopsys®
Verilog: IEEE 1364-1995, IEEE 1364-2001
XCF: (Xilinx Constraints File) este fichero puede contener especificaciones de tiempo y restricciones de diseño que se propagarán al fichero NGC.
Core files: Estos ficheros no son soportados por el CPLD.
24
SUMADOR 1 BIT – SÍNTESIS PROCESO DE DISEÑO
222...222...--- SSSAAALLLIIIDDDAAA
Synthesis Report: Contiene los resultados del proceso de síntesis, incluyendo área y estimación de tiempos.
RTL Schematic: Es una representación esquemática del diseño pre-optimizado mostrado como RTL (Register Transfer Level). Esta representación esta hecha con símbolos genéricos tal como, sumadores, multiplexores, contadores, puertas AND, puertas OR, etc..
Fig. 112: Representación RTL del Sumador de 1 bit
Technology schematic: Es la representación esquemática de un fichero NGC mostrado en términos de elementos lógicos optimizados para la tecnología específica a utilizar como por ejemplo, LUTs, acarreos, buffers I/O, etc..
Fig. 113: Representación del fichero NGC del Sumador de 1 bit
En este esquema podemos observar como el ‘ISE’, automáticamente, ha añadido unos IBUF’s y OBUF’s que no habíamos diseñado. Debido a esta automatización prescindiremos, en adelante, de introducirlos manualmente.
333...--- SSSÍÍÍNNNTTTEEESSSIIISSS DDDEEELLL SSSUUUMMMAAADDDOOORRR DDDEEE 111 BBBIIITTT
Hacemos doble clic en el proceso ‘Synthesize-XST’ situado en la ventana de procesos y se nos efectúa la síntesis del sumador.
Fig. 114: Síntesis del sumador de 1 bit
25
SUMADOR 1 BIT – IMPLEMENTACIÓN PROCESO DE DISEÑO
444ººº BBBAAACCCKKK---EEENNNDDD
IIIMMMPPPLLLEEEMMMEEENNNTTTAAACCCIIIÓÓÓNNN 111...--- CCCRRREEEAAANNNDDDOOO RRREEESSSTTTRRRIIICCCCCCIIIOOONNNEEESSS (((***...UUUCCCFFF)))
Antes de realizar el ‘Translate’, vamos a crear un fichero de restricciones (.ucf) en el cual podremos asignar periodos y retardos de tiempo a los distintos elementos del diseño, así como asignar localizaciones de pin y configurar los IOB’s, los bloques de RAM, BUFG’s, y demás recursos del CPLD que hayan sido utilizados.
A modo de ejercicio, vamos a crear un fichero de restricciones para la localización de pines. Para ello, dentro de la ventana de procesos, abrimos la utilidad ‘Assign Package Pins’.
Nota.- La localización de los pines, si no se indica lo contrario, es automatizada durante la implementación.
Fig. 115: Agregar fichero .ucf
Fig. 116: Observar fichero .ucf
26
SUMADOR 1 BIT – IMPLEMENTACIÓN PROCESO DE DISEÑO
Asignación de pines con PACE (Pin-out Area Constraints Editor), proceso asociado al fichero de restricciones ‘add1bit.ucf’.
Fig. 117: PACE (Pin-out Area Constraints Editor)
Una vez dentro del programa ‘PACE’ podemos realizar la localización de dos maneras:
1. En modo texto, escribiendo el nº del pin en su correspondiente ventana.
Fig. 118: Asignando pines
2. En modo gráfico, arrastrando el pin tal como muestra la Figura 119.
Fig. 119: Asignando pines
27
SUMADOR 1 BIT – IMPLEMENTACIÓN PROCESO DE DISEÑO
D0 VSS D1 MÓDULO VCC D2 VEE D3 LCD D5 RS D6 2X16 R/W D7 E
8 2 9 3
10 4 11
12 13 5 14 6
D1
LN10204
111...111...--- SSSEEELLLEEECCCCCCIIIÓÓÓNNN DDDEEE PPPIIINNNEEESSS EEENNN LLLAAA ‘‘‘TTTAAADDD---XXXCCC999555777222’’’
La ‘TAD-XC9572’ tiene pines dedicados a los siguientes dispositivos:
LCD (Empleados como uso exclusivo del LCD) U4
Pin 63 7 Pin 69 Pin 67 Pin 68 Pin 70 D4 Pin 71 Pin 72 Pin 75
1
Pin 79 Pin 80 Pin 81
LCD 2X16
Fig. 120: Pines dedicados en el LCD
Display’s (Tienen doble función: como I/O o de uso del Display respectivo) U2 U3
Pin 25 Pin 34
Pin19
7 a 9 f b 3 GND 8 g
GND 1 e c
d
6 Pin 17 Pin 26 Pin 36
10 Pin 35 4 5 Pin 31
Pin 21 2 Pin 32 Pin 43
7 a 9 f b 3 GND 8 g
GND 1 e c
d
6 Pin 40
10 Pin 37 4 5 Pin 33
Pin 45 2 Pin 41
SC52-11HWA
display cc SC52-11HWA
display cc
Selector I/O - Dispaly
Selector
I/O - Dispaly
Fig. 121: Pines dedicados en los Display’s
Barra de LED’s (Tienen doble función: como I/O o de uso de la Barra de LED’s)
Pin 39
Pin 46
Pin 44
Pin 51
Pin 52
Pin 47
Pin 54
Pin 55
Pin 48
Pin 50
10 11
9 12
8 13
7 14
6 15
5 16
4 17
3 18
2 19
1 20
L1 L2 L3 L4 L5 L6 L7 L8 L9 L10
Selector I/O – LED’s
Fig. 122: Pines dedicados en la barra de LED’s
SUMADOR 1 BIT – IMPLEMENTACIÓN PROCESO DE DISEÑO
28
El circuito a implementar, como ya sabemos, es:
Fig. 123: Diseño a implementar
Y para su análisis en la ‘TAD-XC9572’ hemos decidido utilizar, de forma aleatoria, la siguiente configuración de pines entrada/salida.
Pin 25 Pin 17 Pin 31
Pin 44
LED 3
LED 2
Pin 46
Fig. 124: Asignación de pines en el diseño a implementar
SUMADOR 1 BIT – IMPLEMENTACIÓN PROCESO DE DISEÑO
29
222...--- CCCOOOLLLOOOCCCAAACCCIIIÓÓÓNNN (((TTTrrraaannnssslllaaattteee)))
Realiza todos los pasos necesarios para convertir los ficheros netlist de entrada, en un formato propietario NGD que utiliza una representación interna de la tecnología que se está empleando. Este fichero describe el diseño en términos lógicos (puertas lógicas, decodificadores, RAM’s, flip-flop’s, etc).
Para ejecutar la utilidad nos ponemos encima de ‘Translate’ y hacemos doble clic.
Fig. 125: Run ‘Translate’ 333...--- CCCOOONNNEEEXXXIIIOOONNNAAADDDOOO (((FFFiiittt)))
Fit mapea la lógica definida por el fichero NGD dentro de los recursos del CPLD, tal como células lógicas, I/OB’s y otros componentes. La salida del proceso es un fichero VM6 que representa físicamente el conexionado de los componentes en el CPLD.
Para ejecutar la utilidad nos ponemos encima de ‘Fit’ y hacemos doble clic.
Fig. 126: Run ‘Fit’
30
SUMADOR 1 BIT – PROGRAMACIÓN PROCESO DE DISEÑO
555ººº PPPRRROOOGGGRRRAAAMMMAAACCCIIIÓÓÓNNN
Para realizar la programación del dispositivo vamos a necesitar de las herramientas Hard y Soft siguientes:
Un PC con el entorno ‘ISE’ instalado y que disponga de un puerto USB. Un cable de descarga. Una F.A. ATX. La tarjeta de aplicación didáctica ‘TAD-XC9572’.
Fig. 147: Configuración física 111...--- CCCAAABBBLLLEEE DDDEEE DDDEEESSSCCCAAARRRGGGAAA
Para realizar la descarga del diseño, Xilinx nos ofrece varios tipos de cables con distintos recursos y precios.
HW-USB HW-PC4 HW-MULTILINX HW-MULTIPRO
Fig. 148: Distintos tipos de cable de descarga
Entre todos ellos nosotros hemos seleccionado, por tecnología y precio, el cable ‘HW-USB. Ver Figura 149.
Fig. 149: Cable de descarga ‘HW-USB’
SUMADOR 1 BIT – PROGRAMACIÓN PROCESO DE DISEÑO
31
aéreos.
111...111...--- CCCAAARRRAAACCCTTTEEERRRÍÍÍSSSTTTIIICCCAAASSS
• Supported on Windows • Automatically senses and adapts to target I/O voltage • Interfaces to devices operating at 5V (TTL), 3.3V
(LVCMOS), 2.5V, 1.8V, and 1.5V • Configures all Xilinx devices
- Virtex™ / Virtex-E / Virtex-II™ / Virtex-II Pro™ / Virtex-4™ - Spartan™ / Spartan-XL™ / Spartan-II™ / Spartan-IIE / Spartan-3™ / Spartan-3L - XC9500 / XC9500XL / XC9500XV - CoolRunner™ XPLA3 / CoolRunner-II™ - XC18V00 ISP PROM - XCF00S / XCF00P Platform Flash PROM - XC4000XL / XV / EX / E
• LED Status Indicator • CE, USB-IF, and FCC compliant
Para realizar la descarga en el CPLD con este cable podemos utilizar un cable tipo Ribbon o un adaptador de cables
AÉREO
Fig. 150: Adaptador aéreo y tipo ribbon
RIBBON
Tal y como se ve en la Figura 151, el cable HW-USB soporta JTAG (IEEE 1149.1) y el modo Serial Slave.
Fig. 151: Parte superior del ‘HW-USB’
32
SUMADOR 1 BIT – PROGRAMACIÓN PROCESO DE DISEÑO
111...222...--- CCCAAARRRAAACCCTTTEEERRRÍÍÍSSSTTTIIICCCAAASSS EEELLLÉÉÉCCCTTTRRRIIICCCAAASSS DDDEEELLL CCCAAABBBLLLEEE HHHWWW---UUUSSSBBB
Tabla 7: Condiciones de operación DC recomendadas
111...333...--- PPPIIINNNEEESSS DDDEEELLL CCCAAABBBLLLEEE HHHWWW---UUUSSSBBB
Ribbon Cable
Number
JTAG Configuration
Mode
Type
Description
2
VREF
IN
Voltaje de referencia. Nota.- El VREF debe estar ajustado y no debe de tener una resistencia limitadora de corriente en serie.
4 TMS OUT Esta es la señal de modo JTAG que establece la transición de estado apropiado en el dispositivo ISP (In System Programmable).
6 TCK OUT Es la señal de reloj para las operaciones JTAG. 8 TDO IN Por aquí se recibe el stream de datos serie desde el pin TDO del último dispositivo de la
cadena JTAG. 10 TDI OUT Este pin transmite el stream de datos serie al pin TDI del primer dispositivo de la cadena
JTAG. 1,3,5,7 9,11,13 Ground digital.
Tabla 8: Descripción de los pines implicados en el modo JTAG
33
SUMADOR 1 BIT – PROGRAMACIÓN PROCESO DE DISEÑO
222...--- MMMOOODDDOOO DDDEEE CCCOOONNNFFFIIIGGGUUURRRAAACCCIIIÓÓÓNNN BBBOOOUUUNNNDDDAAARRRYYY SSSCCCAAANNN
La familia XC9500 de Xilinx sólo soporta el modo BOUNDARY SCAN (JTAG).
En este modo, el CPLD se configura a través del IEEE 1149.1 Test Access Port (TAP). El IEEE 1149.1 Test Acces Port (TAP) y el Boundary Scan, comúnmente conocido como JTAG, es un método de testeo ampliamente extendido.
JTAG es el acrónimo de Joint Test Action Group. Este estándar proporciona un método para asegurar la integridad de los componentes, a nivel de placa, y demás interconexiones. También ofrece la flexibilidad de utilizar instrucciones propias, para un dispositivo, definidas por el usuario.
La arquitectura interna de la familia XC9500 incluye todos los elementos necesarios definidos en el estándar IEEE 1149.1, tal como:
EL TAP El controlador del TAP El registro de instrucciones El decodificador de instrucciones El registro de Boundary Scan Y el registro de Bypass
La familia XC9500 también soporta opcionalmente:
El registro de identificación de 32 bits Y el registro de configuración
Todo ello totalmente compatible con el estándar.
Fig. 152: Arquitectura del Boundary Scan
El modo JTAG nos permite verificar el CPLD tras su configuración (Readback).
34
SUMADOR 1 BIT – PROGRAMACIÓN PROCESO DE DISEÑO
222...111...--- EEELLL CCCOOONNNTTTRRROOOLLLAAADDDOOORRR TTTAAAPPP
Responde a la alimentación de las secuencias de control a través del puerto de acceso de test (TAP) y, genera las señales de reloj y control requeridas por otros bloques del circuito.
222...222...--- EEELLL RRREEEGGGIIISSSTTTRRROOO DDDEEE IIINNNSSSTTTRRRUUUCCCCCCIIIOOONNNEEESSS
Es un registro de desplazamiento al se le cargan las instrucciones, que seleccionan las operaciones a ejecutar, en modo serie.
222...333...--- EEELLL RRREEEGGGIIISSSTTTRRROOO DDDEEE DDDAAATTTOOOSSS
El registro de datos es un banco de registros de desplazamiento. El estímulo requerido por una operación es cargado en serie dentro del registro de datos, seleccionado por la instrucción en uso. Tras la ejecución de la operación, el resultado puede ser registrado para su examen.
222...444...--- EEELLL PPPUUUEEERRRTTTOOO DDDEEE AAACCCCCCEEESSSOOO DDDEEE TTTEEESSSTTT JJJTTTAAAGGG
El TAP tiene cuatro pines que manejan los bloques del circuito y las operaciones específicas de control. El TAP carga y descarga instrucciones y datos. Los cuatro pines del TAP son:
TMS - Test Mode Select selecciona el modo de la señal de entrada del controlador TAP. El controlador TAP es una máquina finita de 16-estados que controla el motor del JTAG. En el flanco de subida del pin TCK, TMS determina la secuencia de estado. TMS tiene una resistencia interna pull-up que proporciona un 1 lógico en el sistema si TMS está inactivo.
TCK - JTAG Test Clock secuencia el controlador TAP así como todos los registros del JTAG.
TDI -Test Data Input es la entrada serie de datos para todas las instrucciones JTAG y los registros de datos. El estado del controlador TAP y el contenido del registro de instrucción, determina que registro es alimentado por TDI en cualquier operación. TDI tiene una resistencia interna pull-up que proporciona un 1 lógico en el sistema si TDI está inactivo. TDI carga los registros del JTAG en los flancos de subida del TCK.
TDO - Test Data Out es la salida serie de datos para todas las instrucciones JTAG y los registros de datos. El estado del controlador TAP y el contenido del registro de instrucción, determina que registros alimenta TDO para una operación específica. Solamente un registro, de datos o de instrucción, es conectado entre TDI y TDO por cualquier operación JTAG. TDO cambia de estado en los flancos de bajada deTCK y está activo sólo durante el registrado de datos a través del dispositivo. TDO está en 3-estado en los demás momentos.
TRST - [Opcional] Asynchronous Test Reset para el TAP. El pin TRST trabaja en bajo activo. Cuando se produce un reset, la máquina de estados coloca, dentro, un estado de Test-Logic-Reset y, la instrucción IDCODE es cargada como la instrucción activa. Si el dispositivo no soporta la instrucción IDCODE el TAP toma por defecto la instrucción BYPASS.
222...555...--- CCCOOONNNTTTRRROOOLLLAAADDDOOORRR TTTAAAPPP JJJTTTAAAGGG
El controlador TAP es una máquina de 16-estados FSM, que controla la carga de datos dentro de algunos registros del JTAG. EL diagrama de estados del controlador TAP se muestra en la Figura 153.
El estado del pin TMS junto con el flanco de subida del TCK determina la secuencia de las transiciones de estado. Básicamente son dos transiciones de estado por cada muestra de la señal TDI: uno, por el registrado de la información en el registro de instrucción y, el otro, por el registrado de datos en el registro de datos.
35
SUMADOR 1 BIT – PROGRAMACIÓN PROCESO DE DISEÑO
Fig. 153: Diagrama de estados del controlador TAP 222...666...--- CCCAAADDDEEENNNAAA JJJTTTAAAGGG
Fig. 154: Topología de cadena JTAG
SUMADOR 1 BIT – PROGRAMACIÓN PROCESO DE DISEÑO
36
333...--- IIINNNSSSTTTAAALLLAAACCCIIIÓÓÓNNN DDDEEELLL CCCAAABBBLLLEEE DDDEEE DDDEEESSSCCCAAARRRGGGAAA HHHWWW---UUUSSSBBB
El cable HW-USB está diseñado para correr bajo Windows siempre y cuando haya sido instalado previamente el entorno de diseño ‘ISE’.
Debe ser conectado a un puerto USB 2.0 para operar con Hi-speed. (En un puerto USB 1.0 tiene limitada su velocidad máxima de trabajo)
El proceso de instalación es el siguiente:
1. Se conecta el HW-USB a un puerto USB del PC y el ordenador responde con la siguiente pantalla donde
seleccionamos ‘Sí, sólo esta vez’. Ver Figura 155.
Fig. 155: Nuevo hardware encontrado
2. Instalamos el Firmware del HW-USB seleccionando ‘Instalar automáticamente el software (recomendado)’.
Fig. 156: Instalación del Firmware del HW-USB
SUMADOR 1 BIT – PROGRAMACIÓN PROCESO DE DISEÑO
37
3. Veremos estas dos pantallas y daremos a ‘Finalizar’.
Fig. 157: Finalizando la instalación del Firmware del HW-USB
4. Automáticamente Windows detectará un nuevo Hardware para proceder a la instalación del Driver.
Fig. 158: Nuevo hardware encontrado
SUMADOR 1 BIT – PROGRAMACIÓN PROCESO DE DISEÑO
38
5. Instalamos el Driver del HW-USB seleccionando ‘Instalar automáticamente el software (recomendado)’.
Fig. 159: Instalación del Driver del HW-USB
6. Veremos estas dos pantallas y daremos a ‘Finalizar’.
Fig. 160: Finalizando la instalación del Driver del HW-USB
SUMADOR 1 BIT – PROGRAMACIÓN PROCESO DE DISEÑO
39
7. Si todo ha ido bien en el Administrador de Dispositivos aparecerá la entrada ‘Programming cables’.
Fig. 161: Administrador de Dispositivos
SUMADOR 1 BIT – PROGRAMACIÓN PROCESO DE DISEÑO
40
444...--- PPPRRROOOCCCEEESSSOOO DDDEEE DDDEEESSSCCCAAARRRGGGAAA EEENNN EEELLL CCCPPPLLLDDD
El último paso del proceso es la transformación del fichero (*.VM6), conseguido durante la implementación, en un fichero con un formato universal de programación física de PLD’s denominado JEDEC (*.JED), con el que realizaremos la descarga en el CPLD a través de un cable JTAG.
444...111...--- CCCOOONNNFFFIIIGGGUUURRRAAACCCIIIÓÓÓNNN DDDEEELLL HHHAAARRRDDDWWWAAARRREEE
444...111...111...--- TTTAAADDD---XXXCCC999555777222
444...111...111...111...--- CCCOOONNNEEEXXXIIIÓÓÓNNN DDDEEE LLLAAA AAALLLIIIMMMEEENNNTTTAAACCCIIIÓÓÓNNN
Para un correcto funcionamiento del entrenador ‘TAD-XC9572’, necesitamos tensiones de 5V y 3.3V. Esto lo podemos llevar a cabo a través de una F.A. ATX, o directamente desde nuestras fuentes del laboratorio, suministrando 5V y 3.3V en la regleta de alimentación.
Fig. 162: Conectores de alimentación
444...111...111...222...--- SSSEEELLLEEECCCCCCIIIÓÓÓNNN EEEJJJEEECCCUUUTTTAAARRR///CCCOOONNNFFFIIIGGGUUURRRAAARRR
El entrenador tiene un conmutador que selecciona entre EJECUTAR y CONFIGURAR, actuando del siguiente modo:
EJECUTAR (Modo normal de funcionamiento) La tensión de 5V llega a todos los dispositivos de la placa, menos al cable de descarga.
CONFIGURAR (Modo de descarga) La tensión de 5V solamente llega al cable de descarga.
Seleccionamos CONFIGURAR.
444...111...111...333...--- SSSEEELLLEEECCCCCCIIIÓÓÓNNN DDDEEE VVVOOUUTT
Fig. 155: Selector CONFIGURAR/EJECUTAR
La familia XC9500 puede trabajar con niveles lógicos de salida 5v TTL ó 3.3v, dependiendo de la tensión conectada al pin VCCIO.
Fig. 163: Selección del nivel lógico de salida en la familia XC9500
En la ‘TAD-XC9572’, esta selección del nivel lógico de salida la llevamos a efecto con el jumper mostrado en la Figura 164.
Fig. 164: Selector del nivel lógico de salida
SUMADOR 1 BIT – PROGRAMACIÓN PROCESO DE DISEÑO
41
444...111...222...--- HHHWWW---UUUSSSBBB
444...111...222...111...--- CCCOOONNNEEEXXXIIIÓÓÓNNN DDDEEE LLLAAA AAALLLIIIMMMEEENNNTTTAAACCCIIIÓÓÓNNN DDDEEELLL CCCAAABBBLLLEEE HHHWWW---UUUSSSBBB
El cable HW-USB toma alimentación, directamente, desde el puerto USB del PC.
Fig. 165: Selector del nivel lógico de salida
444...111...222...222...--- CCCOOONNNEEEXXXIIIÓÓÓNNN DDDEEE LLLOOOSSS PPPIIINNNEEESSS DDDEEE CCCOOONNNFFFIIIGGGUUURRRAAACCCIIIÓÓÓNNN
Conectar los cables desde el conector del cable HW-USB hasta los pines del entrenador, tal como muestra la figura 166.
Fig. 166: Conexión pines configuración
Nota.- Primero conectaremos la alimentación y luego los cables de configuración. La Vref es +5V.
SUMADOR 1 BIT – PROGRAMACIÓN PROCESO DE DISEÑO
42
444...222...--- GGGEEENNNEEERRRAAACCCIIIÓÓÓNNN DDDEEELLL FFFIIICCCHHHEEERRROOO (((***...JJJEEEDDD)))
Ejecutamos ‘Generate Programming File’ para generar el fichero ‘sumador1bit.jed’.
Fig. 167: Generando el fichero ‘sumador1bit.jed’
444...333...--- DDDEEESSSCCCAAARRRGGGAAA DDDEEELLL FFFIIICCCHHHEEERRROOO (((***...JJJEEEDDD)))
‘IMPACT’ es el programa, integrado en ‘ISE’, que vamos a utilizar para descargar el fichero JED dentro del CPLD.
Para abrir ‘IMPACT’ haremos doble clic en ‘Configure Device (iMPACT)’.
Fig. 168: Abriendo ‘IMPACT’
‘IMPACT’ nos responde con una ventana donde seleccionaremos el modo de trabajo JTAG.
SUMADOR 1 BIT – PROGRAMACIÓN PROCESO DE DISEÑO
43
Comienza la programación.
Fig. 183: Programando
Si todo ha ido bien la programación habrá finalizado de forma correcta.
Fig. 184: Programación finalizada
44
SUMADOR 1 BIT – VERIFICACIÓN EN CIRCUITO PROCESO DE DISEÑO
666ººº VVVEEERRRIIIFFFIIICCCAAACCCIIIÓÓÓNNN EEENNN CCCIIIRRRCCCUUUIIITTTOOO
En la Figura 185 podemos observar el correcto funcionamiento del diseño en circuito con la siguiente configuración de entrada/salida:
ENTRADAS
• A Æ ‘1’ • B Æ ‘1’ • Cin Æ ‘1’
SALIDAS
• S Æ ‘1’ • Cout Æ ‘1’
Fig. 185: Verificación en circuito S
45
SUMADOR 1 BIT – VERIFICACIÓN EN CIRCUITO PROCESO DE DISEÑO