You are on page 1of 16

Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

PRÁCTICA No. 7

LÓGICA COMBINATORIA USANDO PLD’s


(INTERFAZ DE PROGRAMACION WARP)

OBJETIVOS:

 Familiarizar al alumno con la interfaz del software Warp 6.3 para el diseño digital
con lógica programable.

 Describir los procedimientos en Warp 6.3 para crear, compilar y simular un


proyecto desarrollado en VHDL.

INTRODUCCIÓN

Warp R6.3 de Cypress Semiconductor es una de las tantas herramientas existentes para
el diseño con lógica programable la cual permite procesar varios tipos de entrada de datos
(esquemática y compilador estándar de VHDL y la combinación de ambas) lo cual la hace
muy funcional.

En la actualidad es uno de estándares más usados en la industria, ya que presenta la


característica de optimizar los diseños con rapidez y precisión utilizando muy poca área
del circuito.

Warp R6.3 permite la grabación de distintas familias de dispositivos lógicos programables,


como pueden ser: PLD, CPLD y FPGA. Así durante el curso se utilizará el SPLD
PALCE22V10 el cual esta construido internamente con flip-flops, además de un arreglo
AND-OR. Cada sección de un SPLD se denomina macrocelda, que es un circuito que
contiene una función de lógica combinacional de suma de productos y un flip-flop
opcional.

MATERIAL Y EQUIPO EMPLEADO

 Laboratorio equipado con computadoras donde se encuentre instalado el paquete


computacional Warp R6.3.

Pre-reporte:

 Leer previamente la práctica.

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I


Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

DESARROLLO

I. Crear un Proyecto en VHDL

1.1.- Una vez dentro de Windows hacer click en el botón de Inicio, seleccionar Programas
> Cypress > Warp R6.3 > Galaxy. Después de abrir este programa se procederá a
realizar un proyecto nuevo.

Figura 1.1: Inicio de Programa Galaxy

1.2.- Después de abrir el programa Galaxy, seleccionar File > New (figura 1.2).

Figura 1.2: Opción New del menú File

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I


Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

1.3. Luego aparecerá otra ventana como la que se muestra en la figura 1.3. Esta ventana
permitirá crear un proyecto con el que se podrá programar un dispositivo y se deberá
seleccionar la segunda opción Project [Target – Device].

Figura 1.3: Opción Project [Target-Device] del menú New

1.4.- Después de seleccionar la opción (Project [Target – Device] ) aparecerá otra ventana
(figura 1.4), aquí se deberá de seleccionar en Project Type la opción de VHDL; a
continuación se tiene que asignar un nombre al proyecto, por ejemplo el nombre de
practica1. En el segundo cuadro de texto se selecciona el directorio donde se guardará el
proyecto, se puede hacer un directorio nuevo desde esa misma ventana con solo escribir
el nombre, por ejemplo a:\practica1, o también se tiene la opción de buscar una carpeta
ya existente en la opción Browse. Cuando se termina de especificar los nombres y el lugar
donde se guardará, hacer click en el botón de Siguiente.

Figura 1.4: Ventana Project Information

1.5.- Al hacer esto, aparecerá una ventana nueva con el título Add Files to Project
(figura1.5), ésta se usa cuando ya se tienen archivos que se quieran agregar al proyecto
nuevo. Como esta es la primer practica no es necesario especificar nada en esta ventana,
solo se debe hacer click en el botón Siguiente.

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I


Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

Figura 1.5: Ventana Add Files to Project

1.6.- La siguiente ventana (figura 1.6) tiene el título de Select Target Device, esta ventana
es muy importante ya que en esta se selecciona el PLD en el que se va a trabajar. Los
PLD’s mas usuales son los mas pequeños (16V8, 22V8 ó 22V10), los cuales aparecen en
la ventana como SPLD; seleccionar C22V10. Para observar la siguiente opción se hace
doble click sobre este texto, a continuación aparece una lista de los SPLD´s más
comunes, se selecciona el SPLD que se desee e inmediatamente aparecerá una lista
donde hay varios tipos del mismo SPLD. Aquí es muy importante que se seleccione un
SPLD que tenga un encapsulado tipo PDIP para que luego de programarlo se pueda
montar sobre un protoboard; seleccionar PALCE22V10-10PC/PI. En la parte de abajo de
esta misma ventana aparece información del SPLD que se selecciona; después de
seleccionar el SPLD adecuado hacer click en Finalizar.

Figura 1.6: Ventana para seleccionar el tipo de dispositivo

1.7.- Al realizar lo anterior, aparecerá una ventana donde se pregunta si se quiere guardar
el nuevo proyecto, aquí solo se deberá hacer click en Sí.

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I


Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

1.8.- Al terminar de hacer esto ya se tiene un nuevo proyecto donde se encuentra


suficiente información para que el compilador pueda generar el archivo *.jed. Ahora se
debe agregar el código que se compilará, para esto seleccionar File > New > Text File

también se puede agregar al hacer click sobre el icono de New Text File.

Se deberá escribir lo siguiente dentro de este archivo:

library ieee;

A continuación seleccionar File > Save As, elige el nombre del directorio que se usó en el
paso 4 (a:\practica1), ya que se elige el mismo directorio, escribir el nombre del archivo,
se sugiere que sea el nombre de practica1 con la extensión .vhd (es necesario
asegurarse de poner la extensión .vhd), de esta manera se está especificando que es un
archivo que contiene código en VHDL, después de hacer esto se procede a guardar el
archivo.

1.9.- Después de guardarse, el siguiente paso es cerrar el archivo de texto seleccionando


en la barra de menús File > Close.

1.10.- De la barra de menús seleccionar Project > Add Files, aparecerá una ventana
nueva con el título Add Files to Project (figura 1.7) y deberá aparecer el archivo creado
anteriormente practica1.vhd, luego hacer click en Add y después en OK.

Figura 1.7: Ventana para agregar archivos existentes al proyecto

1.11.- Al hacer esto, el archivo de texto se ha convertido en un archivo de VHDL y está


dentro del proyecto, ahora todo lo que se programe será compilado en el dispositivo que
se especificó anteriormente. En la ventana de proyecto (si no está abierta, se puede ver
haciendo click en la barra de menús View > Project Window) aparece un icono en forma
de hoja, el cual tiene el nombre del proyecto creado, hacer doble click en este icono y
luego aparecerá un archivo con la instrucción: library ieee; la palabra library aparece en
color azul porque es una palabra reservada; esto indica que se ha hecho correctamente el
procedimiento de crear un proyecto nuevo (figura 1.8).

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I


Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

Figura 1.8: Ventana de proyecto

1.12.- A continuación todas las palabras reservadas aparecerán en color azul y los
comentarios en color rojo, solamente que para empezar los comentarios se ponen dos
guiones seguidos (--). Después de esto ya se puede comenzar a hacer el código en
VHDL.

1.13.- Por último, se procede a escribir este código en VHDL como ejemplo para observar
las palabras reservadas y los comentarios. La línea de código library ieee; solo se escribe
una vez.

Código en VHDL:

library ieee; --Librería


use IEEE.STD_LOGIC_1164.ALL; --Empaquetamiento

entity practica1 is --Entity


port ( --Declaración de puertos
A : in std_logic; --Dirección: in, out, inout
B : in std_logic; --Tipo de dato: std_logic
X : out std_logic);
end practica1;

architecture Behavioral of practica1 is --Arquitectura


begin --Inicio del comportamiento
X <= A or B; --or (palabra reservada)
end Behavioral; --Final del comportamiento

Nota: Este ejemplo será usado posteriormente en las fases de compilación y simulación.

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I


Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

II. Compilación de un Proyecto

2.1.- Para la compilación de un proyecto es necesario tener el código en VHDL del


programa deseado. Un archivo vhd debe tener una estructura básica para su correcta
compilación, así las partes que la componen se describen a continuación.

Librerías.- Contienen componentes compilados.

Entity.- Sentencia que define la especificación de un componente, para ello contiene los
siguientes elementos:
Nombre de la entity.
Puertos de entrada y salida.
Modos de los puertos
in: entrada al componente, sólo puede ser leído.
out: salida del componente, sólo se le puede asignar valor.
inout: señal bidireccional, se puede leer o asignar valor.
buffer: registro asociado a una salida.

Tipos definidos para los puertos:

Boolean Integer
Bit Real
Bit_vector Time
Character Std_logic
String Std_logic_vector

Arquitectura.- Especifica la funcionalidad del componente definido en la entity.

Del código en VHDL expuesto en el punto 1.13 se pueden hacer los siguientes
comentarios:

La entidad (entity) tiene el nombre de practica1, la cual contiene los siguientes puertos
con el nombre de A, B y X, a su vez estos puertos tienen su modo de in y out y el tipo de
dato es std_logic, por último se agrega la palabra reservada end junto con el nombre de
la entity.

En la declaración de la arquitectura podemos observar que se hace referencia al


comportamiento que tendrá este programa, es por ello que se agrega otra vez practica1,
a continuación se empieza a describir el comportamiento en el cual a la salida X se le
asignará el valor de A or B y por último se termina la arquitectura con la palabra
reservada end agregándole el comportamiento.

2.2. Una vez escrito el código en el programa Galaxy, los pasos para la compilación son
sencillos y se describen a continuación.

2.2.1. Ver en la barra de menús la opción de Project > Compiler Options, al hacer esto se
abrirá una ventana nueva (figura 1.9), en la parte de Synthesis se tiene que asegurar que
la opción de Simulation > Timing Model este seleccionada Active-HDLSim / Active-VHDL y
luego hacer click en Aceptar, esto es necesario para el momento de la simulación.

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I


Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

Figura 1.9: Opciones del compilador

2.2.2. Lo siguiente es ir a la barra de menús y hacer click en Compile > Project. Después
de hacer esto, en la ventana Output Window aparece el resultado de la compilación (sí la
ventana antes mencionada no esta a la vista, se debe ir a la barra de menús y hacer click
en View > Output Window), en caso de que la compilación tenga errores, estos pueden
ser observados dentro de la pestaña de Errors & Warnings de esta misma ventana, en
esta parte aparecen los Errors & Warnings y el posible número de la línea de código
donde puede estar el error (figura 1.10).

Figura 1.10: Ventana de estado de compilación

2.2.3.- Al terminar la compilación correcta del proyecto se generan una serie de archivos,
estos se pueden observar en la ventana Project Window (si no esta a la vista, hacer click
en la barra de menús y luego en View > Project Window) este archivo es: practica1.rpt, el
cual contiene las ecuaciones, los pines de entrada y salida, así como también la
utilización del SPLD (Small PLD) seleccionado; este archivo se puede ver al hacer click en
la pestaña de Output Files View dentro de la misma ventana de Project Window (figura
1.11).

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I


Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

Figura 1.11: Archivos de salida

2.3.- Salir del programa Galaxy haciendo click en la barra de menús sobre File > Exit o
simplemente cerrando la ventana de programa.

III. Simulación

3.1.- Después de crear un proyecto nuevo y su correcta compilación, ya es posible


realizar una Simulación adecuada, para esto comenzamos por abrir el programa para la
simulación, el cual se encuentra en Inicio > Programas > Cypress > Warp R6.3 > Active-
HDL Sim con este simulador comprobaremos el correcto funcionamiento de nuestro
código realizado.

Figura 1.12: Inicio de programa Active-HDL Sim

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I


Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

3.2. El proceso de simulación es posible realizarse en los siguientes pasos:

3.2.1. Cargar un archivo con el formato de simulación adecuado (Active-HDLSim / Active-


VHDL; visto en el punto 2.2.1).

Abrir el archivo deseado para la simulación, para hacer esto se tiene que ir a la barra de
menús del Active-HDL Sim y en la opción de File > Open VHDL hacer clic (figura 1.13).
El archivo que se tiene que cargar deberá tener el formato apropiado para la simulación
(Active-HDLSim / Active-VHDL), este se crea en el subdirectorio vhd dentro del directorio
de trabajo anteriormente seleccionado. Se debe seleccionar el archivo correcto, de otra
forma la simulación no podrá llevarse a cabo.

Figura 1.13: Ventana para abrir archivo VDHL para simulación

Sí el archivo es el correcto se desplegarán una serie de mensajes en la ventana de


compilación (figura 1.14). Uno de ellos es:

Compile success 0 Errors 0 Warnings Analysis time : 0.4 [s]


ELBREAD: Elaboration process.
ELBREAD: Elaboration time 0.2 [s].

Figura 1.14: Ventana para la opción console

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I


Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

3.2.2.- Iniciar una Simulación.

Para comenzar la simulación se debe ir a la barra de menús y dar click en Simulation >
Initialize Simulation. Después se procede a abrir una ventana para analizar las señales
requeridas dentro del diseño, a esta ventana (figura 1.15) se le llama Waveform Window
(si esta ventana no se encuentra abierta, se puede abrir una al hacer click sobre File >
New Waveform).

Figura 1.15: Ventana de simulación

3.2.3.- Agregar señales.

Para continuar con el proceso de Simulación se deberán agregar las señales a la ventana
Waveform, para realizar esto ir a la barra de menús y dar click en Waveform > Add
Signals (figura 1.16).

Figura 1.16: Opción para agregar señales para simulación

Después de realizar esto, se abrirá una ventana con la lista de todas las señales de
entrada, salida, entrada/salida y nodos internos de conexión que se hayan hecho en el
diseño (figura 1.17). Para agregar las señales deseadas se debe hacer doble click sobre
la señal deseada; se pueden agregar tantas señales como sean requeridas al mismo
tiempo, para ello se deberá presionar la tecla Control y hacer click sobre cada una de las
señales que se requieran e inmediatamente después hacer click sobre el botón Add.

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I


Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

Figura 1.17:Ventana para seleccionar señales a simulación

3.2.4.- Agregar señales de estimulación.

Estas señales de estimulación son utilizadas para definir el tipo de entrada que tendrá
cada una de las señales que fueron agregadas a la ventana Waveform, para seleccionar
el tipo que tendrá la señal primero se debe de hacer click sobre la señal deseada y luego
en Waveform > Stimulators (figura 1.18).

Figura 1.18: Ventana Stimulators

A continuación se hace una breve descripción de los tipos de señales de estimulación que
existen en Active-HDL Sim.

Clock
Una estimulación de reloj produce una señal rectangular definida por los siguientes
parámetros: Frecuencia, tiempo de inicio, ciclo de trabajo y valor inicial

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I


Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

Custom
Un estimulador personalizado es una señal definida gráficamente y se realiza definiendo
los valores deseados en la ventana de simulación.

Formula
Este tipo de estimulador produce una señal definida por medio de una formula de una
manera sencilla. La señal es definida con una secuencia pares de valor – tiempo. La
componente de tiempo indica el momento en el que la señal asume el valor especificado.
La unidad del tiempo es en picosegundos. Para repetir con un periodo especifico se debe
de agregar el modificador (–r).

La sintaxis de este tipo de estimulador es la siguiente:

<valor> <tiempo> [, <valor> <tiempo>... ] [-r <periodo>]

Ejemplo: ‘0000’ 0 ps, ‘1111’ 100000 ps, ‘0011’ 200000 ps -r 300000

0000 1111 0011

0 ps 100000 ps 200000 ps

Con la componente tiempo se especifica el momento en que la señal tomará el valor


especificado. Para repetir durante un periodo especificado se agrega el modificador –r.

Hotkey
Este tipo de estimulador es similar al de Valor, pero tiene un mecanismo más fácil para
cambiar el valor. Para realizar esto solamente se tendrá que presionar una tecla
específica. Se puede realizar una lista de valores para cambiar; cada que se presione la
tecla se estará cambiando entre los valores que se tienen en la lista.

Predefinidos
Estos tipos de estimuladores son una serie de señales de tipo reloj con distintas
frecuencias o señales del tipo formula que pueden ser asignados a las señales. Para
agregar un nuevo estimulador a la lista, se puede hacer en la misma ventana en la opción
Predefined.

Valor
Este estimulador se le asigna un valor constante a la señal deseada. Si se realiza una
simulación paso a paso, se podrá cambiar el valor entre cada uno de los pasos, para
hacer esto se tiene que volver a definir el valor en la ventana Stimulators.

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I


Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

Sí la estimulación requerida es de tipo Valor, existen varios valores a los que se podrá
forzar la señal deseada (figura 1.19); estos valores pueden ser:

‘0’ Cero Fuerte Otros Valores:


‘1’ Uno Fuerte ‘L’ Cero Débil ‘-‘ No importa
‘X’ Desconocido Fuerte ‘H’ Uno Débil
‘Z’ Alta Impedancia ‘W’ Desconocido Débil
‘U’ No Inicializado

Figura 1.19: Menú para asignar el tipo de valor a una señal

Si se requiere más información acerca de los tipos de estimuladores, consultar la sección


de ayuda en el Active-HDL Sim.

Al seleccionar el tipo de estimulador para una señal, aparecerá una lista de valores que se
pueden asignar a esa señal. En el caso del estimulador de tipo Valor, aparecen varios
tipos, después de seleccionar uno de los valores al cual será forzada la señal deseada, se
deberá de dar click en la palabra Apply, y asi sucesivamente con todas las señales, al
terminar con todas se debe de dar click en Close.

Para el ejemplo que se tiene en esta practica, las señales tendrán el tipo de estimulación
de Valor y el valor al que se forzará primeramente las señales A y B serán: A= ‘0’ y B= ‘0’.

3.2.5.- Ejecutar una Simulación.

Después de realizar los pasos anteriores se podrá iniciar la simulación al seleccionar de la


barra de menús Simulation > Run la simulación será terminada después del tiempo
predeterminado por el software, también se puede realizar una simulación hasta un
tiempo deseado, esto se puede hacer dando click en Simulation > Run Until o también con
la opción >Run For y a continuación se puede poner el tiempo hasta el cual se requiera
llegar la simulación después de esto hacer click en OK.

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I


Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

Figura 1.20: Cuadro de diálogo Run Until

Después de simular hasta los 100ns, se volverán a seleccionar las señales A y B y se


volverá a cambiar los valores de ellas para realizar todas las combinaciones posibles. A
continuación se puede observar en la tabla 1.1 como se irán agregando los valores a las
señales y el tiempo al que se deberán de simular una por una.

A B Tiempo
0 0 100 ns
0 1 200 ns
1 0 300 ns
1 1 400 ns

Tabla 1.1: Valores para simulación de ejemplo

3.2.6.-Guardar una Simulación.

Para poder guardar la grafica de las señales deseadas, hacer click sobre la barra de
menús y posteriormente en File > Save As, al realizar esto aparecerá una ventana para
dar nombre a la grafica que será guardada, esta simulación será guardada en la carpeta
de trabajo SRC.

3.3.- Terminar una Simulación

Después de observar el comportamiento de una simulación se deberá terminar la


simulación de una manera correcta al hacer click en la barra de menús sobre Simulation >
Stop Simulation.

3.4.- Salir de una Simulación.

Después de guardar una simulación, ya se puede salir del programa Active-HDL Sim, se
puede salir haciendo click en File > Exit o simplemente cerrando la ventana de programa.

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I


Lógica Combinatoria usando PLD’s (Interfaz de Programación WARP)

IV: EJERCICIO.

4.1. Tomando como ejemplo el ejercicio anterior, realice la descripción en VHDL del
circuito sumador completo mostrado en figura X.

Figura 1.21: Diagrama del ejercicio propuesto

4.2. Una vez que el proyecto en Warp con la descripción del circuito esté compilado y sin
errores, proceda a invocar el entorno de simulación Active-HDL Sim. Para comprobar el
funcionamiento del circuito para todas las combinaciones, usar el estimulador de señal de
tipo CLK.

ACTIVIDADES COMPLEMENTARIAS

1. Dentro del archivo *.rpt identificar las ecuaciones que se generan, el número de pines
utilizados (in y out) y la utilización de las macroceldas (dedicated inputs, clock/inputs y
I/O Macrocells).

2. Buscar dentro de la ayuda de Galaxy los distintos tipos de SPLD’s que se pueden
programar con esta herramienta. Observar las características principales de cada uno de
ellos.

3. Dentro del Language Reference Manual, buscar las características de cada tipo de dato
existente en VHDL. (integer, bolean, bit, character, string, bit_vector, std_logic,
std_logic_vector).

4.- Establecer las diferencias entre usar un tipo bit_vector y uno std_logic.

5. Investigue las diversas formas de describir un circuito en VHDL (comportamental, flujo


de datos y estructural). Con base en ello, diseñe el código, compile y simule alguno de
los siguientes circuitos (El profesor indicará cuál de todos).

a) Un sumador completo de dos números de 3 bits.


b) Un decodificador de binario a 7 segmentos.
c) Un circuito comparador de dos números (A y B) de 3 bits, que tendrá tres salidas
para indicar sí: A > B, A < B y A = B, respectivamente
d) Un circuito restador completo de dos números de 3 bits.
e) Un circuito multiplicador de 2 números de 3 bits.

Eduardo Romero A. – ITSON Laboratorio de Sistemas Digitales I