Anda di halaman 1dari 9

DISEO LGICO

Prctica 1



Software Xilinx WP 8.2:
Principios bsicos de funcionamiento para
el diseo de circuitos en VHDL


1
Prctica 1
Software Xilinx WP 8.2: Principios bsicos de
funcionamiento para el diseo de circuitos en
VHDL
1.1 Objetivos
En esta practica se pretende que el alumno aprenda a usar el programa Xilinx
ISE Webpack, entorno con el que se realizaran todas las practicas del curso. Para
ello, vamos a ir describiendo como se hace el diseo de un circuito con un caso
real. El ejemplo que tomamos para el desarrollo de la practica es un circuito que
realiza la Iuncion de un contador sincrono de 16 bits ascendente y descendente. En
primer lugar realizaremos el diseo del circuito y, posteriormente, veremos como
se realiza la simulacion del mismo para comprobar su Iuncionamiento.
Tras esta practica el alumno debe tener claros los pasos necesarios para, en
primer lugar, introducir un diseo en el lenguaje VHDL y, en segundo lugar, como
realizar su simulacion para comprobar su Iuncionamiento. Asimismo, y en paralelo
con el tema de VHDL que se explica en el aula, debe entender el ejemplo en el que
se basa esta practica, comprendiendo la Iorma en la que se describen circuitos en
VHDL.
1.2 Material
El unico material necesario para la realizacion de esta practica es el paquete de
software ISE Webpack 8.2 de Xilinx, instalado en el ordenador del laboratorio. La
ultima version del programa puede descargarse gratuitamente en www.xilinx.com
registrandose previamente.
1.3 Ejercicio propuesto
Disee un contador sincrono de 16 bits ascendente y descendente en VHDL y
compruebe, mediante simulacion, que su Iuncionamiento es correcto. Este conta-
dor tendra las siguientes lineas de entrada y salida:
2 PRCTICAS DE DISEO LGICOPE
DISCA U. P. Valencia
CLOCK: sera la seal de reloj que determine la Irecuencia de cuenta
del contador.
DIRECTION: sera una seal de control que, cuando valga 1`, indicara
que el contador cuente ascendentemente y, en caso contrario, descen-
dentemente.
COUNTOUT: sera la salida (4 bits) del contador.
1.4 Desarrollo de la prctica
A continuacion se van a describir los pasos que se deben seguir para realizar un
diseo en VHDL, lo que servira de base para el resto de las practicas. Para empe-
zar, arrancaremos el soItware de practicas mediante el icono situado en el escrito-
rio de trabajo (o en el menu de Windows):
Xilinx !SE 8.2i.lnk

y tendremos una ventana con aspecto similar a este:

Figura 1.1: Entorno de trabajo de la herramienta de prcticas.

PRCTICA 1 3
DISCA U. P. Valencia
1.4.1 Definicin de un proyecto HDL
El primer paso es deIinir un nuevo proyecto, indicando que es de tipo HDL. Pa-
ra ello realizaremos lo siguiente:
1. Seleccionamos File > New Project, con lo que nos aparecera el asistente
para nuevo proyecto (Figura 1.2).
2. En la ventana del asistente escribiremos un nombre para el proyecto en Pro-
ject Name (por ejemplo tutorial).
3. Asimismo, escribiremos una ruta para albergar el proyecto. Tambien se pue-
de buscar una ubicacion concreta haciendo click en el boton de la derecha. Como
se puede comprobar, automaticamente se crea un subdirectorio con el nombre que
se haya dado al proyecto, el cual albergara todos sus archivos.

Figura 1.2: Definicin de un proyecto HDL.
4. Hay que comprobar que HDL esta seleccionado en la lista Top-Level
Source File (esta herramienta permite introducir los diseos, ademas de en
VHDL, de otras Iormas, como se explica en el tema 1 de la asignatura).
5. Haremos click en Next para pasar a la siguiente pantalla (Device Proper-
ties)
6. Rellenaremos los campos como detallamos a continuacion:
Product Category: All
4 PRCTICAS DE DISEO LGICOPE
DISCA U. P. Valencia
Family: Spartan3
Device: XC3S200
Package: FT256
Speed Grade: -4
Top-Level Module Type: HDL
Synthesis Tool: XST (VHDL/Verilog)
Simulator: ISE Simulator (VHDL/Verilog)
Compruebe que la opcion Enable Enhanced Design Summary este se-
leccionada
Deje los campos restantes con sus valores por deIecto. Cuando haya terminado,
debera quedar algo como lo siguiente:

Figura 1.3: Cuadro de dialogo 'HYLFH3URSHUWLHV correctamente configurado.
Que hemos hecho con este ultimo paso? Basicamente, lo que hemos hecho es
indicarle a la herramienta que, en caso de llegar a implementar el circuito en un
dispositivo programable real (en deIinitiva el objetivo Iinal del uso de este tipo de
herramientas), este sera el circuito de Xilinx que pertenece a su Iamilia de disposi-
tivos programables SPARTAN3 y, concretamente, sera el modelo XC3S200 con
un encapsulado FT256 y un indice de velocidad -4. Por ultimo le indicamos que,

PRCTICA 1 5
DISCA U. P. Valencia
para implementar el diseo en un dispositivo programable, la sintesis del diseo la
eIectuaremos con este soItware y lo simularemos con su simulador integrado (en
lugar de con algun otro que pudieramos tener).
Al hacer click en Next, pasaremos a la ventana Create New Source, con lo que
la deIinicion del proyecto estara completada.
1.4.1 Introduccin del cdigo VHDL
A continuacion empezaremos a generar el codigo VHDL del contador. Para ello
tenemos que crear un Iichero que contenga el codigo de este componente. Ahora
bien, en lugar de tener que teclear cada vez que generemos codigo para algun
componente que sea comun a todos los diseos y, por tanto, automati:ables (como
por ejemplo la inclusion de algunas librerias y la Iorma en la que se deIinen los
componentes), la herramienta nos permite generar automaticamente un esqueleto
del codigo. Para ello seguiremos los siguientes pasos:
1. Haremos click en el boton New Source en la pantalla Create New Sour-
ce.
2. Seleccionaremos VHDL Module.
3. Le damos un nombre a la entidad, en este caso contador.
4. Comprobaremos que la casilla Add to project este marcada.
5. Haremos click en Next.
6. Ahora declararemos las lineas de entrada y salida (puertos) para el diseo del
contador como se muestra a continuacion (Figura 1.4). Notese como se deIinen
buses (en la seal COUNTOUT y como se indica su numero de lineas):
6 PRCTICAS DE DISEO LGICOPE
DISCA U. P. Valencia

Figura 1.4: Definicin de los puertos del contador.
7. Haremos click en Next, y luego Finish en la ventana New Source Infor-
mation para completar la plantilla.
8. Haremos click en Next, luego Next de nuevo y Finish para terminar.
Ahora veremos como aparece en pantalla el codigo correspondiente a la entidad
contador, asi como parte de la arquitectura a partir de la deIinicion de las entradas
y salida que acabamos de realizar. Nuestro cometido ahora sera escribir el codigo
correspondiente al cuerpo de la arquitectura, el cual ha de determinar como se
comportara el contador. Para ello realizaremos una descripcion comportamental
(ya estudiaremos en clase que tipo de descripciones se pueden realizar en VHDL).

PRCTICA 1 7
DISCA U. P. Valencia

Figura 1.5: Esqueleto del cdigo VHDL a completar.
Ahora es el momento de completar el codigo del cuerpo de la arquitectura de
manera comportamental (behavioural), la cual describira el Iuncionamiento del
contador. Para hacerlo (en este y otros muchos casos) podemos ayudarnos de plan-
tillas (templates) que el programa pone a nuestra disposicion en el menu Edit >
Language Templates. Alli, dentro de la carpeta VHDL podremos encontrar
desde construcciones y palabras reservadas del lenguaje hasta plantillas personali-
zables de los componentes mas comunes que necesitamos para hacer otros diseos.
En este caso mostramos a continuacion el esqueleto que propone la herramienta
para realizar el l contador que nos ocupa (Iigura 1.6). Este codigo se puede copiar
(y adaptarlo o completarlo convenientemente) o tomarlo simplemente como reIe-
rencia.
8 PRCTICAS DE DISEO LGICOPE
DISCA U. P. Valencia

Figura 1.6: En el men /DQJXDJH7HPSODWHV podemos encontrar plantillas tiles.
Cuando hayamos terminado, el codigo del contador deberia ser algo como esto
(al que hemos aadido para Iacilitar su comprension algunos comentarios):

PRCTICA 1 9
DISCA U. P. Valencia
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- este es el smbolo (--) que indica que es un comentario.

entity contador is
Port ( CLOCK : in STD_LOGIC;
DIRECTION : in STD_LOGIC;
COUNT_OUT : out STD_LOGIC_VECTOR (3 downto 0));
end contador;

architecture Behavioral of contador is
signal count_int: std_logic_vector (3 downto 0) := "0000";
begin
process(CLOCK)
begin
if CLOCK='1' and CLOCK'event then
if DIRECTION='1' then
count_int <= count_int + 1;
else
count_int <= count_int - 1;
end if;
end if;
end process;
COUNT_OUT <= count_int;
end Behavioral;
Cada ve: que la linea clock cambie de valor se efecuta este
proceso
Cuando ocurra un evento (cambio) en la linea
de relof v valga 1 (por tanto, un flanco de subida)
se entra en el iI.
Como COUNTOUT se ha definido de VDOLGD,
necesitaremos una seal interna para almacenar
el valor de las salidas del contador v que poda-
mos OHHU v HVFULELU.
Simbolo de DVLJQDFLyQ.
Se vuelca el valor de countint a las salidas
del contador (countout). Notese que se reali:a
fuera del proceso v se efecuta de forma concu-
rrente con este. Cualquier cambio en countint
llega, en cuanto se actualice, a las salidas.
10 PRCTICAS DE DISEO LGICOPE
DISCA U. P. Valencia
1.4.1 Comprobacin del cdigo VHDL
Cuando el codigo este terminado, hay que comprobar la sintaxis en busca de
errores en el codigo.
1. Compruebe que Synthesis/Implementation este seleccionado en la pes-
taa Sources for de la ventana Sources.
2. Seleccione contador en la ventana Sources a Iin de que se muestren sus
procesos relacionados en la ventana Processes (la que esta situada justo debajo)
3. Haz click en '+' en Synthesize-XST para desplegar el grupo de procesos y haz
doble click en Check Syntax.
1RWDEs necesario corregir siempre la sintaxis del codigo JHDL, de lo contrario no se
podra sinteti:ar el provecto ni llevar a cabo una simulacion.

Figura 1.7 Ventana para comprobar la sintaxis (Check Syntax).
1.4.1 Simulacin del diseo
Para simular el circuito, hemos de crear un Iichero en el que indiquemos el va-
lor de las entradas del circuito (lo que tambien se llaman estimulos) y las salidas
que deseamos observar. A partir de este Iichero, el simulador nos mostrara el valor
de las salidas para el conjunto de valores de entrada que indiquemos. Para ello,
crearemos un Iichero de ondas de prueba (lo que en la herramienta llaman Test
Bench Waveform) de la siguiente Iorma:
1. Seleccionaremos el archivo contador en la ventana Sources.

PRCTICA 1 11
DISCA U. P. Valencia
2. Seleccionaremos Project > New Source, y luego la opcion Test Bench
Waveform.
3. Ahora hay que darle un nombre al archivo. Lo llamaremos, por ejemplo,
contador_tbw.
4. Haga click en Next.
5. En la pagina Associated Source se nos mostrara que estamos asociando el
archivo de ondas con el archivo contador y haremos click en Next. En caso de que
tuvieramos mas Iicheros en nuestro proyecto, aqui le indicariamos para que Iichero
de todos estamos haciendo el test.
6. La pagina Summary nos mostrara que hemos aadido el archivo al proyecto.
Por ultimo haremos click en Finish.
7. En la siguiente ventana tendremos que ajustar algunos parametros del simu-
lador. En esta practica los ajustaremos de la siguiente manera:
Queremos que el contador Iuncione a una Irecuencia de reloj de 25 MHz. Por
lo tanto, su periodo sera de 40 nanosegundos y haremos que la seal de reloj sea
simetrica, es decir, 20 ns de nivel alto y 20 ns de nivel bajo.
La entrada DIRECTION sera valida 10 ns antes del Ilanco de subida de
CLOCK (lo que conoceis como tiempo de set-up).
La salida del contador (COUNTOUT) debe ser valida 10 ns despues del
Ilanco de subida de CLOCK.
Estos requisitos se corresponden con los siguientes valores:
Clock High Time: 20 ns
Clock Low Time: 20 ns
Input Setup Time: 10 ns
Output Valid Delay: 10 ns
Global signals: GSR (FPGA) Es una seal interna del dispositivo programa-
ble que se conecta tipicamente a la seal de reset de los componentes internos.
1RWDAl activar esta ultima opcion, el valor del campo Offset pasara a ser 100 ns.
Initial Lenght oI Test Bench: 1500 ns
Le indicaremos que la seal que hemos llamado CLOCK es la unica seal de
reloj del sistema. (Si el circuito Iuera combinacional, y por tanto, no tuviera seal
de reloj, asi se lo indicariamos) (Figura 1.8).
12 PRCTICAS DE DISEO LGICOPE
DISCA U. P. Valencia
Dejaremos los campos restantes con sus valores predeterminados.

Figura 1.8: Configuracin de la simulacin.
8. Haremos click en Finish para terminar.
9. En el Iichero de Iormas de ondas (Figura 1.9) las areas sombreadas en azul
que preceden a cada Ilanco de subida de la seal de reloj CLOCK corresponden al
parametro Input Setup Time que has introducido en la ventana anterior. Ahora
introduciremos los estimulos necesarios a la seal DIRECTION. Para ello, hare-
mos doble click en la area azul alrededor de los 300 ns para que en este punto el
valor de DIRECTION cambie a 1` (nivel alto), y haremos lo propio alrededor de

PRCTICA 1 13
DISCA U. P. Valencia
los 900 ns para que vuelva a ser 0`. Como se puede ver hacer doble click en un
area azul hace que la seal cambie su valor (toggle). Tambien se puede hacer uso
de la herramienta Zoom para Iacilitar las cosas. El resultado es el siguiente:

Figura 1.9: Introduciendo estmulos a la entrada DIRECTION del contador.
10. Ahora salvaremos el archivo de ondas (File > Save).
11. En la ventana Sources, pestaa Sources for, seleccionaremos Behavio-
ral Simulation a Iin de ver como el archivo de ondas de prueba se ha aadido al
proyecto.

Figura 1.10: Comprobamos que el archivo de ondas se ha aadido al proyecto.
Ahora podemos aadir al archivo de ondas de prueba los resultados esperados,
con lo que se transIormara nuestro archivo de ondas de prueba en un archivo de
ondas de prueba con comprobacion. La diIerencia es que este ultimo al realizar la
simulacion comparara entre los valores obtenidos y los valores que le hemos indi-
cado previamente (valores esperados), ayudandonos a detectar errores en nuestro
diseo.
Para transIormar el archivo de ondas de prueba en un archivo de ondas con
comprobacion, haremos uso del proceso Generate Expected Results, seguire-
mos los siguientes pasos:

14 PRCTICAS DE DISEO LGICOPE
DISCA U. P. Valencia
Comprobaremos que en la pestaa Sources for de la ventana Sources esta
seleccionada la opcion Behavioral Simulation.
Seleccionaremos el archivo contador_tbw que hemos creado anteriormente
en la ventana Sources.
Desplegaremos el menu Xilinx ISE Simulator en la ventana Processes, y
haremos doble click en el proceso Generate Expected Simulation Results.
Este proceso simulara nuestro diseo en un proceso en background.
Ahora saltara la ventana Expected Results, selecciona la opcion Yes para
anotar los resultados en el archivo de ondas de prueba.


Figura 1.11: Seleccionaremos la opcin Yes en el cuadro de dilogo ([SHFWHG5HVXOWV.

Si hacemos click en el ' en el bus COUNTOUT para que se muestren todas
sus seales, se puede ver en amarillo el retraso de las salidas que habiamos especi-
Iicado anteriormente en el cuadro de dialogo Initialize Timing. Si se ha hecho
todo correctamente deberiamos tener en pantalla algo asi:

Figura 1.12: Archivo de ondas de prueba con los resultados.

1. Salvaremos el archivo de ondas y lo cerraremos, con lo que el archivo de on-
das de prueba con comprobacion ha sido creado.
Finalmente comprobaremos que el contador Iunciona segun lo esperado llevando
a cabo una simulacion comportamental del diseo de la siguiente manera:

PRCTICA 1 15
DISCA U. P. Valencia
Comprobaremos de nuevo que la opcion Behavioral Simulation y el archivo
contador_tbw esten seleccionados.
Expandiremos el menu Xilinx ISE Simulator de la ventana Processes hacien-
do clic en el ' y haz doble clic sobre la opcion Simulate Behavioral Model.
Ahora el Simulador ISE realizara la simulacion del diseo siguiendo el archivo de
ondas de prueba.


1. Los resultados de la simulacion deberian ser algo como lo siguiente:

Figura 1.13: Resultado de la simulacin del diseo.
2. Comprobaremos que el contador cuenta ascendente y descendentemente de
manera correcta.

1.5 Ejercicio propuesto
En primer curso habeis estudiado la Iorma de realizar un sencillo sumador de 1
bit que tenga en cuenta, ademas, el acarreo. Si llamamos a las entradas del suma-
dor A, B (los dos operandos de un bit) y Cin (acarreo de entrada), y a las salidas S
(la suma) y Cout (el acarreo de salida), recordareis que las ecuaciones de S y Cout
son:

S = ((not A) AND (not B) AND Cin) OR ((not A) and B
and (not Cin)) OR (A AND (not B) AND (not Cin)) OR (A
and B and Cin);
Cout = (A and B) or (A and Cin) or (B and Cin);

A partir de estas ecuaciones, realice el codigo VHDL que implementa el circui-
to sumador de 1 bit y simule, dando todas las posibles combinaciones a las entra-
das, su comportamiento.
16 PRCTICAS DE DISEO LGICOPE
DISCA U. P. Valencia
1.6 Bibliografa
Xilinx - ISE 8.2i Quick Start Tutorial. www.xilinx.com