You are on page 1of 45

SUMADOR 1 BIT – EJEMPLO

PROCESO DE DISEÑO

Ejercicio

1 EJEMPLO DE PROCESO DE DISEÑO

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’.

1
SUMADOR 1 BIT – ENUNCIADO
PROCESO DE DISEÑO
EN
E UN
NU AD
CIIA
NC DO
O
Implementar en el CPLD XC9572 un sumador completo de 1 bit.

AN
A SIIS
ÁLLIIS
NÁ S
Su tabla de verdad es la siguiente:

A B
Cin A B S Cout Cin 00 01 11 10

0 0 0 0 0 0 0 1 0 1
1 1 0 1 0
0 0 1 1 0
0 1 0 1 0 Tabla 5: Karnaugh ‘S’

0 1 1 0 1
1 0 0 1 0
A B
1 0 1 0 1 Cin
00 01 11 10
1 1 0 0 1 0 0 0 1 0
1 1 1 1 1 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, Cout = AB + Cin( A ⊕ B) y así nos ahorramos una puerta OR
adicional.

2
SUMADOR 1 BIT – ESPECIFICACIÓN
PROCESO DE DISEÑO

1º FRONT-END
ES
E PE
SP EC CA
FIIC
CIIF ÓN
CIIÓ
AC N
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:

ES
E QU
SQ EM
UE MA
A

Fig. 61: Sumador completo de 1 Bit

3
SUMADOR 1 BIT – ESPECIFICACIÓN
PROCESO DE DISEÑO

AB
11..-- A RP
RIIR
BR RO
PR EC
OJJE TN
CT AV
NA GA
VIIG TO
AT OR
R
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.

4
SUMADOR 1 BIT – ESPECIFICACIÓN
PROCESO DE DISEÑO

CR
22..-- C EA
RE RN
AR UE
NU VO
EV PR
OP OY
RO EC
YE TO
CT O
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

5
SUMADOR 1 BIT – ESPECIFICACIÓN
PROCESO DE DISEÑO
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).


33..-- A AD
ÑA RF
DIIR UE
FU NT
EN TE
E

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

6
SUMADOR 1 BIT – ESPECIFICACIÓN
PROCESO DE DISEÑO
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

7
SUMADOR 1 BIT – ESPECIFICACIÓN
PROCESO DE DISEÑO
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

8
SUMADOR 1 BIT – ESPECIFICACIÓN
PROCESO DE DISEÑO
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’

9
SUMADOR 1 BIT – ESPECIFICACIÓN
PROCESO DE DISEÑO
SE
DIIS
44..-- D ÑA
EÑ RE
AR SQ
ES UE
QU MA
EM DE
AD LS
EL UM
SU AD
MA OR
DO R
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.

10
SUMADOR 1 BIT – ESPECIFICACIÓN
PROCESO DE DISEÑO

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

11
SUMADOR 1 BIT – ESPECIFICACIÓN
PROCESO DE DISEÑO
BU
DIIB
44..11..-- D AN
UJJA DO
ND NE
O LLÍÍN AS
EA DE
SD CO
EC NE
ON EX ÓN
XIIÓ N
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. 20: Conexión de componentes.

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.

12
SUMADOR 1 BIT – ESPECIFICACIÓN
PROCESO DE DISEÑO
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


44..22..-- A AD
ÑA EN
DIIE DO
ND MA
OM RC
AR AS
CA S II//O OM
Addddiinngg II//O
O ((A Maarrkkeerrss))
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.

13
SUMADOR 1 BIT – ESPECIFICACIÓN
PROCESO DE DISEÑO
El esquema quedará como el de la Figura 86.

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

14
SUMADOR 1 BIT – SIMULACIÓN FUNCIONAL (Pre-Layout)
PROCESO DE DISEÑO


MU
SIIM
S LA
UL AC ÓN
CIIÓ NF UN
FU NC ON
CIIO NAAL L
ou
Laayyo
Prree--L
((P utt))
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.

CR
11..-- C EA
RE RE
AR LF
EL CH
FIIC ER
HE OD
RO ET
DE ES
TE TB
ST EN
BE CH
NC WA
HW VE
AV FO
EF RM
OR M
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

15
SUMADOR 1 BIT – SIMULACIÓN FUNCIONAL (Pre-Layout)
PROCESO DE DISEÑO
A continuación asociamos el fichero de test bench al fichero de ‘sumador1bit’.

Fig. 90: Asociando Test Bench

Fig. 91: Asociando Test Bench

16
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

17
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’

18
SUMADOR 1 BIT – SIMULACIÓN FUNCIONAL (Pre-Layout)
PROCESO DE DISEÑO

22..-- S MU
SIIM LA
UL AC ÓN
CIIÓ FU
NF NC
UN ON
CIIO AL
NA CO
LC NM
ON OD
MO EL
DE SIIM
LS M
M d li
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’

19
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’.

F
i
g
.

9
9
:

Configuración de ‘ModelSim’ en ‘Project Navigator’

20
SUMADOR 1 BIT – SIMULACIÓN FUNCIONAL (Pre-Layout)
PROCESO DE DISEÑO
CO
22..11..-- C ON RO
NTTR DE
OLL D AS
E LLA MU
SIIM AC
ULLA ÓN
CIIÓ N
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’.

CU
22..22..-- C RS
UR OR
SO ES
RE S
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.

OR
22..33..-- FFO MA
RM OY
ATTO BA
YB SE
AS DE
ED RE
ER PR
EP ES
RE EN
SE AC
NTTA ÓN
CIIÓ N
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.

21
SUMADOR 1 BIT – SIMULACIÓN FUNCIONAL (Pre-Layout)
PROCESO DE DISEÑO
AN
22..44..-- A ÁLLIIS
NÁ SIIS
SD E LLA
DE ASSIIM
MU AC
ULLA CIIÓ
ÓNN
Sólo queda efectuar el análisis de la simulación.

Fig. 110: Simulación funcional de la ‘uut’ ‘sumador1bit’

22
SUMADOR 1 BIT – SÍNTESIS
PROCESO DE DISEÑO


S NT
SÍÍN ES
TE SIIS
S
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.

DE
11..-- D SC
ES CR PC
RIIP ÓN
CIIÓ DE
ND LF
EL LU
FL OD
UJJO ED
DE SE
DIIS ÑO
EÑ DE
OD LX
EL ST
XS T
La Figura 107 muestra los ficheros de entrada y salida del sintetizador XST.

Fig. 111: Flujo del XST

CH
FIIC
22..-- F ER
HE OS
RO DE
SD EN
EE TR
NT AD
RA DA SA
A//S AL DA
LIID A
EN
22..11..-- E RA
NTTR DA
AD A
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.

23
SUMADOR 1 BIT – SÍNTESIS
PROCESO DE DISEÑO
SA
22..22..-- S DA
ALLIID A
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.

NT
SÍÍN
33..-- S ES
TE SD
SIIS EL
DE SU
LS MA
UM DO
AD RD
OR DE BIIT
E 11 B T
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

24
SUMADOR 1 BIT – IMPLEMENTACIÓN
PROCESO DE DISEÑO

4º BACK-END
MP
IIM LE
PL ME
EM NT
EN AC
TA ÓN
CIIÓ N

CR
11..-- C EA
RE ND
AN OR
DO ES
RE TR
ST CC
RIIC ON
CIIO ES
NE UC
S ((**..U F))
CF
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

25
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

26
SUMADOR 1 BIT – IMPLEMENTACIÓN
PROCESO DE DISEÑO
SE
11..11..-- S EC
ELLE ÓN
CIIÓ
CC DE
ND NE
PIIN
EP SE
ES N LLA
EN AD
A ‘‘TTA XC
D--X C99557722’’
La ‘TAD-XC9572’ tiene pines dedicados a los siguientes dispositivos:

LCD (Empleados como uso exclusivo del LCD)


U4

7 1
MÓDULO
Pin 63 D0 VSS
Pin 69 8 D1 VCC 2
Pin 67 9 D2 VEE 3
Pin 68
Pin 70
10
11
D3
LCD
D4
2X16
Pin 71 12 D5 RS 4 Pin 79
Pin 72 13 D6 R/W 5 Pin 80
Pin 75 14 D7 E 6 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

7 a 6 7 a 6
Pin 25 Pin 17 Pin 26 Pin 40
Pin 34 9 f b Pin 36 9 f b

3 GND 10 Pin 35 3 GND 10 Pin 37


8 g 4 8 g 4
Pin 31 Pin 33
GND 5 Pin 21
GND 5 Pin 45
1 e c 2 1 e c 2
Pin19 Pin 32 Pin 43 Pin 41
d d

SC52-11HWA SC52-11HWA
display cc display cc
Selector Selector
I/O - Dispaly 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 10 11 L1

Pin 46 9 12 L2

Pin 44 8 13 L3

Pin 51 7 14 L4

Pin 52 6 15 L5

Pin 47 5 16 L6

Pin 54 4 17 L7

Pin 55 3 18 L8

Pin 48 2 19 L9

Pin 50 1 20 L10
D1
LN10204

Selector
I/O – LED’s

Fig. 122: Pines dedicados en la barra de LED’s

27
SUMADOR 1 BIT – IMPLEMENTACIÓN
PROCESO DE DISEÑO
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

28
SUMADOR 1 BIT – IMPLEMENTACIÓN
PROCESO DE DISEÑO

CO
22..-- C LO
OL CA
OC ÓN
CIIÓ
AC nssllaattee))
Trraan
N ((T
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’

CO
33..-- C NE
ON ON
XIIO
EX AD
NA Fiitt))
O ((F
DO
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’


29
SUMADOR 1 BIT – PROGRAMACIÓN
PROCESO DE DISEÑO


PR
P OG
RO RA
GR MA
AM ÓN
CIIÓ
AC N
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

CA
11..-- C BL
AB ED
LE ED
DE ES
DE CA
SC RG
AR GA
A
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’

30
SUMADOR 1 BIT – PROGRAMACIÓN
PROCESO DE DISEÑO
CA
11..11..-- C RA
AR AC ER
CTTE RÍÍS CA
STTIIC AS
S

• 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éreos.

AÉREO

RIBBON
Fig. 150: Adaptador aéreo y tipo 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’

31
SUMADOR 1 BIT – PROGRAMACIÓN
PROCESO DE DISEÑO
CA
11..22..-- C RA
AR AC ER
CTTE CA
STTIIC
RÍÍS SE
AS ÉC
ELLÉ CA
RIIC
CTTR SD
AS DE CA
ELL C EH
BLLE
AB HW US
W--U SB
B

Tabla 7: Condiciones de operación DC recomendadas

11..33..-- P NE
PIIN SD
ES CA
ELL C
DE AB EH
BLLE US
W--U
HW SB
B

Ribbon JTAG
Cable Configuration Type Description
Number Mode
Voltaje de referencia.
2 VREF IN Nota.- El VREF debe estar ajustado y no debe de tener una resistencia limitadora de corriente
en serie.
Esta es la señal de modo JTAG que establece la transición de estado apropiado en el
4 TMS OUT
dispositivo ISP (In System Programmable).
6 TCK OUT Es la señal de reloj para las operaciones JTAG.
Por aquí se recibe el stream de datos serie desde el pin TDO del último dispositivo de la
8 TDO IN
cadena JTAG.
Este pin transmite el stream de datos serie al pin TDI del primer dispositivo de la cadena
10 TDI OUT
JTAG.
1,3,5,7
Ground digital.
9,11,13

Tabla 8: Descripción de los pines implicados en el modo JTAG

32
SUMADOR 1 BIT – PROGRAMACIÓN
PROCESO DE DISEÑO

MO
22..-- M DO
OD DE
OD CO
EC NF
ON GU
FIIG RA
UR ÓN
CIIÓ
AC BO
NB UN
OU DA
ND RY
AR SC
YS AN
CA N
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).

33
SUMADOR 1 BIT – PROGRAMACIÓN
PROCESO DE DISEÑO
22..11..-- E CO
ELL C RO
NTTR
ON AD
OLLA OR
DO AP
R TTA P
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.

RE
ELL R
22..22..-- E EG RO
STTR
GIIS DE
OD NS
E IIN RU
STTR CC
UC ON
CIIO ES
NE S
Es un registro de desplazamiento al se le cargan las instrucciones, que seleccionan las operaciones a ejecutar, en
modo serie.

22..33..-- E RE
ELL R RO
STTR
GIIS
EG DE
OD DA
ED OS
ATTO S
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.

PU
ELL P
22..44..-- E ER
UE OD
RTTO EA
DE CC
AC ES
CE OD
SO ES
E TTE
DE AG
STT JJTTA G
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.

CO
22..55..-- C ON RO
NTTR AD
OLLA OR
DO AP
R TTA AG
P JJTTA G
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.

34
SUMADOR 1 BIT – PROGRAMACIÓN
PROCESO DE DISEÑO

Fig. 153: Diagrama de estados del controlador TAP

CA
22..66..-- C DE
AD NA
EN AG
A JJTTA G

Fig. 154: Topología de cadena JTAG

35
SUMADOR 1 BIT – PROGRAMACIÓN
PROCESO DE DISEÑO

NS
33..-- IIN TA
ST LA
AL ÓN
CIIÓ
AC DE
ND LC
EL AB
CA LE
BL DE
ED DE
ED SC
ES AR
CA GA
RG HW
AH US
W--U SB
B
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

36
SUMADOR 1 BIT – PROGRAMACIÓN
PROCESO DE DISEÑO
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

37
SUMADOR 1 BIT – PROGRAMACIÓN
PROCESO DE DISEÑO
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

38
SUMADOR 1 BIT – PROGRAMACIÓN
PROCESO DE DISEÑO
7. Si todo ha ido bien en el Administrador de Dispositivos aparecerá la entrada ‘Programming cables’.

Fig. 161: Administrador de Dispositivos

39
SUMADOR 1 BIT – PROGRAMACIÓN
PROCESO DE DISEÑO

PR
44..-- P OC
RO ES
CE OD
SO ED
DE ES
DE CA
SC RG
AR AE
GA NE
EN LC
EL PL
CP LD
D
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.

CO
44..11..-- C GU
NFFIIG
ON RA
UR AC ÓN
CIIÓ DE
ND HA
ELL H RD
AR WA
DW RE
AR E
44..11..11..-- TTA
ADD--X
XCC99557722
CO
44..11..11..11..-- C ON ÓN
NEEXXIIÓ DEE LLA
ND AA NTTA
MEEN
ALLIIM AC ÓN
CIIÓ N

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

CC
44..11..11..22..-- SSEELLEEC ÓN
CIIÓ CU
N EEJJEEC AR
UTTA CO
R//C ON GU
NFFIIG RA
UR AR
R

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. Fig. 155: Selector CONFIGURAR/EJECUTAR

CC
44..11..11..33..-- SSEELLEEC ÓN
CIIÓ DEE VVOOUUTT
ND

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

40
SUMADOR 1 BIT – PROGRAMACIÓN
PROCESO DE DISEÑO
44..11..22..-- H
HWW--U
USSB
B
CO
44..11..22..11..-- C ON ÓN
NEEXXIIÓ DEE LLA
ND AA NTTA
MEEN
ALLIIM AC ÓN
CIIÓ ND CA
DEELL C BLLEE H
AB HW USSB
W--U B

El cable HW-USB toma alimentación, directamente, desde el puerto USB del PC.

Fig. 165: Selector del nivel lógico de salida

CO
44..11..22..22..-- C ON ÓN
NEEXXIIÓ DEE LLO
ND NEESS D
OSS PPIIN CO
DEE C NFFIIG
ON GU RA
UR AC ÓN
CIIÓ N

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.

41
SUMADOR 1 BIT – PROGRAMACIÓN
PROCESO DE DISEÑO
GE
44..22..-- G NE
EN RA
ER ÓN
CIIÓ
AC DE
ND CH
ELL FFIIC ER
HE ED
O ((**..JJE
RO D))
Ejecutamos ‘Generate Programming File’ para generar el fichero ‘sumador1bit.jed’.

Fig. 167: Generando el fichero


‘sumador1bit.jed’

DE
44..33..-- D SC
ES AR
CA GA
RG DE
AD CH
ELL FFIIC ER
HE ED
O ((**..JJE
RO D))
‘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.

42
SUMADOR 1 BIT – PROGRAMACIÓN
PROCESO DE DISEÑO
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

43
SUMADOR 1 BIT – VERIFICACIÓN EN CIRCUITO
PROCESO DE DISEÑO


VE
V CA
FIIC
RIIF
ER AC ÓN
CIIÓ EN
NE RC
CIIR
NC CU TO
UIIT O
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

44
SUMADOR 1 BIT – VERIFICACIÓN EN CIRCUITO
PROCESO DE DISEÑO

45