Tutorial Ise Isim 2014 2015
Tutorial Ise Isim 2014 2015
Tutorial Ise Isim 2014 2015
Curso 2014/15
1
Contenido
1.- Introduccin y objetivos. .................................................................................................................. 3
2.- Introduccin al flujo de diseo para las FPGAs de Xilinx ................................................................ 3
3.- Ejemplo de diseo. ........................................................................................................................... 9
3.1.- Modelo 1. Implementacin del diseo con un reloj derivado. ................................................ 12
3.2.- Modelo 2. Diseo sncrono. ..................................................................................................... 13
3.3.- Modelo 3: DCM. Digital Clock Manager. ............................................................................... 13
3.4.-Modelo 4. Prescaler implementado con el CORE-GENERATOR. ......................................... 14
4.- Flujo de diseo: Especificacin del modelo a travs de cdigo VHDL. ........................................ 14
4.1.- Estructura de directorios. ......................................................................................................... 15
4.2.- Herramientas dentro del entorno ISE Design Suite. ................................................................ 16
4.3.- Especificacin del diseo: ISE Project Navigator. ................................................................. 16
4.4.- Creacin de un proyecto nuevo. .............................................................................................. 20
4.5.- Creacin de un fichero fuente en VHDL. ................................................................................ 22
4.5.1.- Especificacin de modelos VHDL mediante el editor emacs. ......................................... 22
4.5.2.- Especificacin de un banco de pruebas (test bench). ....................................................... 29
4.6.- Chequear la sintaxis del modelo VHDL. ................................................................................. 31
4.7.- Entrada del diseo: cmo aadir ficheros ya creados.............................................................. 33
4.8.- Creacin de modelos basados en la herramienta CORE Generator Module. .......................... 34
5.- Flujo de Diseo: Simulacin. ......................................................................................................... 38
5.1.- Lanzar el simulador ISim. Ventana principal. ......................................................................... 38
5.2- Organizacin de las trazas. ....................................................................................................... 43
5.3.- Inicio de la simulacin. ............................................................................................................ 45
5.4.- Creacin de estmulos. ............................................................................................................. 47
5.5.- Creacin de un archivo de comandos tcl. ................................................................................ 49
5.6.-Especificacin de los estmulos en un banco de pruebas. ........................................................ 53
5.7.- Anlisis de los resultados de la simulacin. ........................................................................... 56
6.- Flujo de diseo: Sntesis. ................................................................................................................ 58
7.- Flujo de diseo: Implementacin. .................................................................................................. 61
8.- Flujo de diseo: simulacin temporal. ............................................................................................ 66
9.- Flujo de diseo: generacin del fichero de configuracin. ............................................................. 69
10.- Programacin de la FPGA. ........................................................................................................... 71
2
1.- Introduccin y objetivos.
El presente documento presenta un tutorial que tiene como objetivo guiar al alumno en el proceso de
diseo en VHDL para FPGAs. Para ello, se estudia mediante un ejemplo de modelado, el flujo de
diseo utilizando la herramienta ISE (Integrated Software Environment) de la firma comercial Xilinx.
En lneas generales el flujo de diseo (Figura 1) comienza con la creacin de cdigo VHDL que
modela el comportamiento del diseo. Una vez especificado el diseo en VHDL se procede a la
simulacin funcional del mismo. Cuando el diseo funciona segn las especificaciones, se puede
continuar con las siguientes fases que consisten la sntesis y la implementacin del modelo para
poder realizar la simulacin temporal. La simulacin temporal permitir comprobar que la
temporizacin del diseo cumple con las restricciones impuestas al mismo, fundamentalmente
relacionadas con la seal del reloj. Finalmente, se genera el fichero de descarga en placa llamado
bitstream y se configura la FPGA para verificar que el modelo funciona en la placa del laboratorio.
SIMULACIN FUNCIONAL.
.VHO VHDL
RTL VHDL
Simulacin RTL. UNISIM
Lista de conexiones
Restricciones SINTETIZADOR en formato EDIF Puertas
.EDN .NGC Lista de conexiones
de diseo. VHDL en formato nativo.
VITAL
SIMULACIN TEMPORAL.
de usuario. IMPLEMENTACIN
BIT Ficheros de
informes EDIF VHDL SDF
JEDEC SIMPRIM
Fichero de programacin
del dispositivo. VITAL, puertas
Ficheros de lista de conexiones
para simulacin post-implementacin
A travs de la herramienta ISE de Xilinx se pueden utilizar entre otros, dos mtodos para introducir el
diseo: esquemas o lenguajes de descripcin hardware (HDLs). El flujo basado en HDLs permite
describir la funcionalidad usando lenguajes como VHDL o Verilog para despus obtener un
descripcin estructural del mismo despus de un proceso de sntesis. El proceso termina con la
obtencin del diseo a nivel fsico, lo que en el punto anterior llamamos la generacin del bitstream.
Para ello, se utiliza el emplazamiento y ruteado. A diferencia del flujo basado en HDLs los esquemas
obligan a descomponer el diseo en componentes que se interconectan a travs de un editor de
esquemas.
Tambin existe la posibilidad de introducir los diseos a travs de diagramas de estados. Este tutorial
pondr especial nfasis en la especificacin del diseo a travs del lenguaje VHDL.
4
para transformar los modelos especificados en VHDL en una netlist especfica para una determinada
arquitectura. El entorno ISE soporta el uso de la tecnologa XST (Xilinx Synthesis Technology) que
no es ms que la herramienta de sntesis de Xilinx la cual est integrada en el entorno ISE. Tambin
se pueden utilizar herramientas de sntesis de terceras partes, es decir, de otros fabricantes
incluyendo Synplify, Synplify and Precision software. En el laboratorio se utilizar la herramienta
que viene integrada en el ISE y que se llama XST (Xilinx Synthesis Technology).
La herramienta de sntesis XST toma como entrada los modelos especificados en VHDL o Verilog.
Adicionalmente, la herramienta puede aceptar como entrada ficheros de restricciones de XST en los
cuales se puede especificar restricciones de sntesis, temporizacin e implementacin. Con los
ficheros de entrada mencionados anteriormente, la herramienta de sntesis realiza los siguientes
pasos:
- Anlisis sintctico del cdigo fuente.
- Compilacin que transforma el cdigo HDL en un conjunto de componentes genricos
que la herramienta puede reconocer y que se pueden ver como un esquema a nivel RTL.
- Mapeado tecnolgico que traslada los componentes anteriores en componentes de la
tecnologa destino.
Al aplicar los procesos anteriores la herramienta XST genera a su vez los siguientes ficheros de
salida:
- Informe de sntesis que contiene los resultados del proceso de sntesis incluyendo
estimaciones del rea y temporizacin.
- Esquemtico a nivel RTL que representa el diseo preoptimizado a nivel de transferencia
entre registros (RTL). Esta representacin es en trminos de smbolos genricos, tales
como sumadores, multiplicadores, contadores, puertas AND y OR.
- Esquemtico a nivel tecnolgico almacenado en un fichero con extensin NGC representa
el circuito en trminos de elementos lgicos optimizados para la arquitectura o tecnologa
destino. Se trata de modelo de circuito una vez realizado el mapeado tecnolgico. Los
elementos que constituyen el circuito son componentes especificados de la tecnologa
como por ejemplo LUTs, lgica de acarreo, buffers de entrada/salida y otros componentes.
Se trata de una representacin a nivel tecnolgico del cdigo HDL optimizado para la
tecnologa destino.
Despus de la sntesis se debe llevar a cabo el proceso de implementacin que consiste en tres fases:
- Translate: se trata de un proceso durante el cual en enlazan todos los ficheros de diseo
que se quieren implementar en uno con formato NGD. El fichero NGD (Native Generic
Database) representa una lista de conexiones (netlist) que describe el diseo a nivel
lgico en forma de primitivas de Xilinx. A veces recibe el nombre de fichero de diseo y
sirve como entrada al mapeador. (Figura 3)
5
B(3)
A(3) D Q S(3)
CE
C
CLR
B(2)
A(2) D Q S(2)
CE
C
CLR
B(1)
A(1) D Q S(1)
CE
C
CLR
B(0)
A(0) D Q S(0)
Cin CE
CLK C
CLR
RST
CE
CE
C
CLB 6 CLR
B(2)
A(2) CLB 5 D Q S(2)
CE
C
CLB 4 CLR
B(1)
A(1) CLB 3 D Q S(1)
CE
C
CLB 2 CLR
B(0)
A(0) CLB 1 D Q S(0)
Cin CE
CLK C
CLR
RST
CE
6
- Place & Route: este proceso toma como punto de partida el fichero mapeado NCD
emplazndolo y conectndolo fsicamente dentro de la FPGA. El resultado de este
proceso genera un fichero NCD que se utiliza para la generacin del fichero de
configuracin (bitstream). Finalmente la Figura 5 muestra un ejemplo de emplazamiento
y ruteado dentro de una FPGA.
B(3)
CLB 7 S(3)
A(3)
CLB 6
B(2)
A(2) CLB 5 S(2)
CLB 4
B(1)
A(1) CLB 3 S(1)
CLB 2
B(0)
A(0) CLB 1 S(0)
Cin
CLK
RST
CE
El proceso de simulacin (Figura 1) se lleva a cabo en dos fases distintas dentro de la etapa de diseo.
Por un lado, antes del proceso de sntesis se puede llevar a cabo una simulacin funcional o de
comportamiento. Este tipo de simulacin emplea modelos de diseo descritos en HDL con un nivel
de abstraccin alto. As, por ejemplo, el diseo podra incluir un operador suma sin especificar como
el circuito se implementa en la FPGA. La herramienta de sntesis extraer en el siguiente paso la
estructura de puertas y conexiones del sumador generando la correspondiente lista de conexiones.
La simulacin funcional por lo tanto es la ms rpida ya que no incluye en los modelos ningn tipo
de informacin temporal y se basa, en la mayora de los casos en la ejecucin del cdigo HDL. Por
ello es la simulacin que menos informacin proporciona. Sin embargo, permite verificar la
funcionalidad sin informacin temporal. Durante el proceso de diseo, la mayor parte de las
simulaciones son funcionales. Los errores que se detectan en esta fase de simulacin son menos
costosos de corregir, en trminos del tiempo utilizado para ello. Despus de que la funcionalidad
requerida se consigue, se pueden llevar a cabo simulaciones temporales para obtener mayor detalle
del comportamiento del circuito.
7
camino crtico, es decir en el peor escenario, hayan sido calculados para el diseo. Indicar que
solamente se tendr informacin temporal despus de que se haya llevado a cabo el proceso de place
and route (PAR). Durante este proceso, se genera una lista de conexiones de componentes con los
retardos anotados en formato SDF (Standard Delay Format). Las simulaciones temporales pueden
identificar condiciones de carrera, violaciones de tiempos de mantenimiento (hold) y de
configuracin (setup) de los elementos de almacenamiento basadas en las condiciones de operacin
para la funcionalidad especificada. Este tipo de simulacin es ms lenta pero proporciona mayor
informacin del comportamiento del circuito, no solamente funcional sino tambin temporal.
Las simulaciones se llevan al cabo mediante herramientas especficas como por ejemplo ModelSim.
En el laboratorio de diseo se emplear el simulador ISIM que viene integrado en el entorno ISE.
Como se puede observar en la Figura 6 los ficheros de entrada al simulador dependen del tipo de
simulacin.
Para la simulacin funcional se requieren los siguientes ficheros:
- Descripcin funcional del modelo a simular en forma de esquemtico o con un lenguaje
de descripcin hardware.
- Fichero de estmulos normalmente en forma de banco de pruebas (test bench) descrito en
HDL. Tambin se puede definir los estmulos en forma de comandos del simulador que se
est utilizando.
- Biblioteca con los modelos funcionales.
8
La herramienta de simulacin muestra los resultados como fichero de texto o como formas de ondas.
La simulacin temporal en comparacin con la funcional toma como entrada la descripcin lgica
del circuito que incluye los retardos anotados despus del proceso de Place and Route. Asmismo, los
componentes de las bibliotecas incluyen informacin temporal. Como en el caso anterior los
resultados se muestran mediante ficheros de texto o como formas de ondas.
Una vez que el diseo ha sido implementado, se genera por parte de la herramienta el fichero *.bit
(bitstream) para poder configurar la FPGA. El fichero *.bit contiene toda la informacin de
configuracin para definir la lgica interna y las conexiones dentro de la FPGA. Este fichero se
puede descargar de dos formas:
- Directamente a la FGPA usando un cable USB.
- A travs de una memoria externa que previamente debe programarse con el fichero de
configuracin bitstream.
Para poder generar el bitstream se requiere un fichero NCD totalmente ruteado.
Para guiar al alumno dentro del flujo de diseo de Xilinx y con el objetivo de facilitar la compresin
del mismo, se plantea un ejemplo sencillo basado en un registro de desplazamiento que se descargar
en la FPGA Spartan-6 ncleo central de la placa de laboratorio Atlys de Digilent.
La Figura 7 muestra la interface del diseo que consta de las siguientes entradas y salidas.
- Clk: entrada de reloj de 100 MHz procedente de un oscilador incluido en la placa de
pruebas.
- Rst: seal de inicializacin del proceso de representacin. Se implementa a travs del
pulsador 0 de la placa.
- Polarity: seal que cambia el nivel de polaridad de los leds en la representacin de la
salida del registro de desplazamiento. As, por ejemplo, cuando la entrada polarity toma el
valor 0 se desplaza un bit a nivel bajo, es decir, solamente un led estar en off y el resto en
on. Cuando la entrada polarity toma un 1 entonces se desplaza un nivel alto estando todos
los leds en off excepto uno.
- Direction: esta entrada se usa para definir la direccin de desplazamiento: con un cero en
esta entrada el desplazamiento es a derechas, es decir desde el LED de menor peso al
LED de mayor peso. Cuando la entrada toma el valor 1 el desplazamiento se lleva a cabo
en el sentido contrario.
9
Spartan-6 LX45
CSG-324-3
Oscilador clk L15
100MHz
N12 LED(7)
P16 LED(6)
3.3 V
LED(5)
D4
btn(0) rst M13 LED(4)
T15 L14 LED(3)
N14 LED(2)
3.3 V M14 LED(1)
btn(1) polarity LED(0)
N4 U18
btn(2) direction
P4
Para la implementacin del diseo del ejemplo se proponen cuatro modelos diferentes. El objetivo es
poner de manifiesto no solamente aspectos importantes de diseo sino tambin presentar
herramientas que facilitan considerablemente el desarrollo de mismo.
Todos los modelos comparten la estructura interna del desplazador basada en un contador binario de
3 bits y un decodificador 3 a 8. En general todos los modelos constan de los siguientes mdulos
VHDL que establecen la jerarqua de diseo (Figura 9):
- Decoder_3_8: se trata de un decodificador 3 a 8 con polaridad programable que se
implementa con la estructura de la Figura 8. El modelo del decodificador incluye dos
multiplexores: uno para definir el valor de salida activo controlado por la entrada dec_in y
otro para definir la polaridad, en este caso controlada por la seal polarity.
- Countermod8: se trata de un contador up/down de 3 bits o mdulo 8 (rango de cuenta de 0
a 7).
- Shifter8: este mdulo VHDL interconecta los dos anteriores para implementar el
desplazador.
- Prescaler: la frecuencia de desplazamiento ser de un Hz. Esto obliga a introducir un
prescaler para pasar de una frecuencia de 100 MHz a una frecuencia de 1 Hz.
- Top_system: se trata del mdulo VHDL sintetizable ms alto en la jerarqua de diseo.
Este mdulo interconecta el prescaler con el mdulo del desplazador (shifer8)
- Top_system_tb: este mdulo implementa el banco de pruebas (test bench) para poder
llevar a cabo la simulacin del modelo completo.
10
Figura 8.- Estructura del decodificador basada en dos multiplexores.
El cdigo VHDL del modelo del decodificador se muestra el siguiente listado 1.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity decoder_3_to_8 is
port (
polarity : in std_logic;
dec_in : in std_logic_vector(2 downto 0);
dec_out : out std_logic_vector(7 downto 0));
end decoder_3_to_8;
architecture for_decoder3_to_8 of decoder_3_to_8 is
signal dec_out_aux : std_logic_vector(7 downto 0);
begin -- for_decoder3_to_8
process (dec_in)
begin -- process
case dec_in is
when "000" => dec_out_aux <= "00000001";
when "001" => dec_out_aux <= "00000010";
when "010" => dec_out_aux <= "00000100";
when "011" => dec_out_aux <= "00001000";
when "100" => dec_out_aux <= "00010000";
when "101" => dec_out_aux <= "00100000";
when "110" => dec_out_aux <= "01000000";
when "111" => dec_out_aux <= "10000000";
when others => null;
end case;
end process;
process (polarity, dec_out_aux)
begin -- process
if polarity = '0' then dec_out <= dec_out_aux;
else dec_out <= not dec_out_aux;
end if;
end process;
end for_decoder3_to_8;
A continuacin se explican las diferencias entre los distintos modelos de implementacin del
ejemplo de diseo.
11
3.1.- Modelo 1. Implementacin del diseo con un reloj derivado.
La Figura 9 muestra la implementacin del desplazador con un reloj derivado. De acuerdo con la
metodologa de diseo de circuitos sncronos, todas las entradas de reloj de todos los dispositivos que
componen el diseo deber estar conectadas a la misma seal de reloj. En ejemplo del modelo 1, la
entrada de reloj de contador mdulo 8 es la salida combinacional del prescaler. En el ejemplo de la
Figura 9, la salida pre_out del prescaler se conecta con la entrada clk y el clock enable (ce) se
conecta nivel alto. Los relojes generados con lgica combinacional pueden introducir glitches que
crean problemas funcionales y de retardo. En un diseo sncrono, un glitch en la entrada de datos no
causa en principio ningn problema ya que es automticamente eliminado ya que los datos se
capturan en el flanco activo de la seal de reloj lo que permite bloquear el glitch. Sin embargo, un
glitch en la entrada de reloj o en la entrada asncrona de un registro, puede tener consecuencias
negativas que afecten al funcionamiento correcto del modelo. Un glitch con una anchura pequea
puede violar los requerimientos de anchura mnima de los pulsos de reloj. Asimismo, se pueden
violar los tiempos de setup y de hold si los datos de entrada del registro estn cambiando cuando el
glitch alcanza la entrada de reloj. Incluso si el diseo cumple todas las restricciones temporales, la
salida del registro puede cambiar de valor de forma inesperada y causar un fallo de funcionamiento
en otras partes del circuito.
12
3.2.- Modelo 2. Diseo sncrono.
La Figura 10 muestra el diseo del desplazador utilizando una estrategia totalmente sncrona sin
relojes derivados. En este caso la salida pre_out del prescaler se conecta a la entrada del clock
enable (ce) del contador mdulo 8 y la entrada de reloj del contador se conecta al reloj del sistema
(100 MHz). De esta forma, aunque el contador tiene una entrada de reloj de 100 MHz, solamente
cambiar de estado cuando la llegada del flanco activo de la seal de reloj coincida con un nivel alto
en el clock enable. El diseo es totalmente sncrono ya que todas las entradas de reloj de los
dispositivos sncronos que componen el circuito estn conectadas al mismo punto.
La Figura 11 muestra el tercer modelo del ejemplo de diseo basado en la utilizacin de un gestor de
reloj (DCM). El reloj maestro de la placa se conecta a la entrada de reloj del DCM y la salida de este
a las entradas de reloj de los elementos sncronos del circuito. El objetivo de este modelo es eliminar
el skew en la seal de reloj, es decir, el gestor de reloj compensa el retardo introducido en el
desplazamiento de la seal de reloj para que esta llegue a todos los elementos sncronos al mismo
tiempo.
Figura 11.- Modelo 3 del ejemplo de diseo con gestor de reloj (DCM)
13
3.4.-Modelo 4. Prescaler implementado con el CORE-GENERATOR.
Desde un punto de vista prctico, antes de afrontar el proceso de diseo se debe llevar a cabo una
planificacin de las etapas que entrarn en juego durante todo el proceso y del presupuesto
disponible para ello. Lgicamente, este aspecto aunque importante, no se trata en este tutorial. La
siguiente etapa en el proceso se centra en la especificacin del diseo (Figura 13). Para ello se hace
uso lenguajes de descripcin hardware como VHDL y de las herramientas que ayudarn a su
creacin, fundamentalmente un editor de texto. Alternativamente, se puede utilizar esquemas para
introducir el diseo aunque esto ltimo no se contempla en el tutorial.
14
Figura 13.- Flujo de diseo. Especificacin del modelo.
Antes de comenzar con la especificacin del cdigo, y con el objetivo de organizar los ficheros que
se irn generando a lo largo de proceso de diseo, es aconsejable crear la estructura de directorios
que se propone a continuacin (Figura 14), todos ellos localizados en el directorio TUTORIAL:
- Sources: este directorio alojar todos los ficheros VHDL que representan el diseo, junto
con los ficheros de comandos del simulador ISIM.
- Cores: este directorio se usa para almacenar los ficheros generados por la herramienta
Core Generator.
- IMP_nombre_del_proyecto: este directorio almacenar los ficheros generados por las
herramientas de sntesis e implementacin. Para el ejemplo del tutorial se puede crear el
directorio IMP_Tutorial.
15
Figura 14.- Estructura de directorios.
En entorno ISE Design Suite engloba distintas herramientas que se explicarn a continuacin y que
servirn para la cubrir todas las fases de diseo. Aunque hay distintas versiones, en general todas
ellas incluyen las siguientes herramientas:
- Project Navigator: se utiliza para gestionar los ficheros generados durante el proceso de
diseo y tambin permite ejecutar los distintos procesos que se llevan a cabo sobre los
mismos: desde simulacin, sntesis e implementacin hasta la generacin del fichero de
configuracin (bitstream).
- XST Synthesis: es la herramienta de sntesis que permite crear los ficheros de conexiones
a partir de cdigo HDL o esquemas.
- ISE Simulator (ISim): se trata de la herramienta de simulacin que permite validar el
comportamiento del diseo.
- CORE Generator: como ya se ha comentado, permite acelerar el proceso de diseo al
incluir IP parametrizables.
Para arrancar el entorno ISE se busca el icono que aparece en la Figura 15 y se hace doble click.
La ventana principal del ISE Project Navigator est formada a su vez por diferentes subventanas y/o
paneles que se pueden visualizar utilizando la barra de pestaas.
El siguiente panel es el de diseo (Figura 17). En l se puede configurar la vista (view) de diseo en
funcin de si se va a realizar la implementacin o la simulacin del mismo. La configuracin de la
vista del diseo condiciona los fuentes o ficheros del diseo sobre los que se puede trabajar. Tambin
se muestra la jerarqua que indica las dependencias entre los ficheros que forman parte del diseo, el
nombre del proyecto y el dispositivo destino. Por ltimo, en este panel se proporciona la ventana de
procesos donde para cada fichero del diseo y en funcin de su tipo, se establecen los procesos que
se pueden ejecutar sobre los mismos. Por lo tanto, se trata de un panel que es sensible al contexto
cambiando en funcin del tipo de fichero fuente seleccionado en la ventana de la jerarqua.
17
Figura 17.- Ventana o panel de diseo
18
La ventana de ficheros (Figura 18) proporciona una lista de todos los ficheros fuentes generados en
el proyecto.
Existen otros paneles (Figura 20) que permiten realizar diversas funciones. Estos paneles son:
- Consola: proporciona una salida estndar para los procesos que se ejecutan desde el
Project Navigator. Permite representar errores, avisos y mensajes informativos en general.
Los errores se representan mediante una cruz roja mientras que para los avisos se utiliza
un signo de admiracin amarillo como se ver en el apartado 8.
- Panel de errores: esta ventana solamente muestra los mensajes de error filtrando el resto.
- Panel de avisos: esta ventana muestra nicamente los avisos filtrando el resto.
19
Figura 20.- Otros paneles.
Una vez que se ha introducido de forma breve el conjunto de ventanas que conforman el entorno, el
siguiente paso consiste en la creacin de un proyecto.
Para poder gestionar el diseo de forma cmoda, ISE Project Navigator permite crear proyectos, los
cuales contienen todos los ficheros relacionados con el diseo. Primero se crea el proyecto y despus
se deben aadir los ficheros fuentes. Dentro del entorno de trabajo, una vez que se ha creado el
proyecto y generado los fuentes que modelan el diseo, se puede ejecutar los procesos asignados a
cada uno de ellos. Para facilitar la tarea, el entorno proporciona un asistente denominado wizard
que gua en el proceso de creacin de nuevos proyectos.
La creacin de un nuevo proyecto se lleva a cabo siguiendo los pasos que se detallan a continuacin:
- En la ventana principal del Project Navigator se selecciona File y luego New Project
apareciendo la ventana de ayuda para la creacin de proyectos (Figura 21). En esta
ventana se debe seleccionar el tipo de proyecto (HDL o esquemtico), el nombre del
mismo, su localizacin y el directorio de trabajo. Para pasar a la siguiente ventana se
pulsa Next.
20
Figura 21.- Asistente para la creacin de un nuevo proyecto.
En la siguiente ventana (Figura 22) se selecciona el dispositivo destino que depender de la placa
usada en el laboratorio. En este tutorial se utiliza la placa Atlys diseada y fabricada por la empresa
Digilent. Esta placa contiene una FPGA Spartan 6LX45. Ms informacin sobre esta placa se puede
encontrar en: http://www.digilentinc.com/. La Figura 22 muestra cada uno de los campos que se
deben completar junto con los valores que se deben introducir. Para la FPGA se selecciona la familia,
el dispositivo, el encapsulado y finalmente la velocidad. En cuanto a las herramientas se selecciona
como herramienta de sntesis XST y como herramienta de simulacin ISim. Una vez se han
completado los diferentes campos se hace click sobre Next apareciendo una ventana que resume los
parmetros configurados para el proyecto.
21
4.5.- Creacin de un fichero fuente en VHDL.
La creacin de fichero fuente VHDL se puede realizar a travs de un simple editor de lneas. Sin
embargo existen herramientas que facilitan esta tarea. El propsito es doble: por un lado, estas
herramientas facilitan la especificacin automatizando parcialmente el proceso. Por otro lado,
pretenden minimizar el nmero de errores desde un punto de vista sintctico que se suelen introducir
a la hora de especificar en VHDL.
La herramienta ISE proporciona un asistente que a travs de plantillas del lenguaje facilita la tarea de
especificacin. Sin embargo, en este tutorial se explicar el editor Emacs. Es recomendable el uso de
Emacs debido a que tiene precargadas plantillas con la sintaxis de VHDL que facilita, de forma
notable, la creacin de los archivos fuentes. En este apartado no se pretende realizar un estudio
minucioso de todas las posibilidades que ofrece el editor Emacs, estudiando slo una pequea parte
de ellas.
Con respecto a la creacin de un fichero VHDL se puede utilizar el editor del ISE. Para ello se abre
un nuevo fichero con los comandos File New Text File y se salva con el nombre que se quiera
asignar al modelo VHDL y extensin .vhd. En este punto el editor activo es el del ISE. Para lanzar el
emacs se puede abrir el archivo con los comandos File Open File y luego se selecciona el fichero
que desea abrir indicando como editor el emacs.
Para iniciar el editor Emacs se hace doble clic en el icono de acceso directo de la figura 23
apareciendo la ventana de trabajo de la Figura 24.
22
Figura 24.- Ventana principal de trabajo del emacs.
La ventana de trabajo de emacs (Figura 24) se divide en tres zonas: la superior en la que se encuentra
la barra de herramientas, la central o zona de trabajo en la que se escribe las lneas de cdigo, y la
inferior o ventana de comandos, desde la que se pueden ejecutar algunos comandos de la herramienta.
En la pestaa File (Figura 25) de la barra de herramientas se accede a los comandos de manejo de
archivos, de forma similar a otros programas de Windows, con la salvedad de que no aparece el
comando new. Un archivo nuevo se crea con el comando File Open File, y una vez seleccionada
la carpeta donde queremos crear el archivo se le asigna un nombre que no exista en dicha carpeta.
Cuando se est editando un archivo VHDL (extensin .vhd) aparece un nuevo elemento en la barra
de herramientas, de nombre VHDL (Figura 26) en la barra de herramientas. Esto indica que se ha
utilizado la extensin correcta para el archivo VHDL.
23
Figura 26.- Pestaa VHDL en la barra de herramientas.
Una vez seleccionado el archivo de entrada, ya se puede a introducir las lneas de texto como si de
otro editor de lneas se tratase. Para la operacin de guardar archivo se utiliza el comando Edit
Save buffer. En este entorno del emacs, el trmino buffer equivale a archivo en un entorno de
Windows. En este punto ya se podra crear los archivos VHDL de la prctica, si bien la utilizacin
del editor emacs viene justificada por la sencillez en la utilizacin de las plantillas de construcciones
tpica de VHDL que se explicarn a continuacin.
Para acceder a las plantillas de VHDL se selecciona VHDL Template, apareciendo las opciones de
la Figura 27. Dentro de las plantillas se pueden introducir datos como:
Paquetes. Con Package se puede insertar un paquete VHDL (Figura 28), automticamente
tambin se aade la biblioteca.
24
Figura 28.- Ventana para especificar un paquete.
Dependiendo del elemento seleccionado habr casos (p.e si se selecciona entity) en los que se deban
introducir datos adicionales. Para estos casos, en la ventana de comandos se pregunta por el valor del
dato a introducir, validndose con (enter).
Por ejemplo, para crear un archivo VHDL en primer lugar se debe aadir los paquetes que se van a
utilizar. En este caso no es necesario aadir ningn dato, a no ser que se vaya a utilizar un paquete
creado por el usuario. A continuacin se introduce la declaracin de la entidad. Para ello se
selecciona la construccin VHDL entity y se introduce el nombre decoder3_to_8 (Figura 29),
validando con .
25
Figura 30.- Especificacin de genricos.
Por cada puerto o conjunto de puertos, una vez introducido su/sus identificadores y validados con
se solicita que se especifique el modo (tipo de acceso, in, out o inout) del puerto y se valida
nuevamente con . Paso seguido se debe introducir el tipo de datos, y a continuacin, si se desea, un
comentario (Figura 31). El proceso se repite para cada uno de los puertos hasta que no haya ms
puertos a especificar, pulsando y se finaliza la plantilla de entity. Independientemente de la
construccin que se est completando, cuando emacs solicite un parmetro que se quiera ignorar,
caso de los genricos anteriores, se debe pulsar .
Un caso que merece especial atencin es la creacin de un proceso, ya que dependiendo de su tipo
los parmetros a introducir son diferentes. En este caso, independientemente desde donde se acceda a
la plantilla en primer lugar se pregunta si el proceso es combinacional o secuencial (Figura 32).
26
Figura 32.- Especificacin del tipo de proceso.
En ambos casos, el primer paso consiste en aadir una etiqueta para el proceso, aunque es opcional y
se puede ignorar. A continuacin, si el proceso es combinacional, se solicita el nombre de las seales
que forman parte de la lista de sensibilidad, y al validar con se crea una estructura similar a la de
la Figura 33.
27
Figura 34.- Estructura de un proceso secuencial.
Tal y como se dijo al principio, emacs es un editor creado para trabajar en un entorno UNIX, con lo
que no acepta algunos de los comandos tpicos de Windows, tal es el caso de Crt+c para copiar y
Ctr+v para pegar. Para copiar, tan slo es necesario seleccionar con el cursor la porcin de cdigo
que se quiere copiar, pasando de forma automtica al portapapeles. Para pegar se ejecuta el comando
Edit Paste o Ctr+y.
Para poder seleccionar texto con las teclas May() y los cursores, como todas las herramientas de
Windows, es necesario teclear: Alt+x, para entrar en la ventana de comandos, y desde aqu se
introduce pc-selection-mode.
En la tabla 1 se proporciona una lista de los comandos ms utilizados dentro del editor emacs.
28
C-x s Guardar, preguntando si se desea sobrescribir
C-Inicio / M-< Principio del buffer
C-Fin / M-> Final del buffer
M-Derecha / M-f Prxima palabra
Moverse por un archivo M-Izquierda / M-b Palabra anterior
C-Arriba Prximo prrafo
C-Abajo Prrafo anterior
M-r Lnea central
C-l Centrar pantalla sobre el cursor
C-k Elimina el texto hasta el final de la lnea
M-RETRO Elimina una palabra hacia atrs
M-d Elimina la prxima palabra
La especificacin de un banco de pruebas para poder realizar la simulacin, se puede llevar a cabo de
una forma muy sencilla a travs del editor emacs. Para ello se debe primero seleccionar los puertos
de la entidad del modelo bajo test (Figura 35) y luego copiarlos a travs de VHDL Port Copy
29
Figura 35.- Seleccionar puertos de la entidad bajo test.
Una vez seleccionados los puertos, el siguiente paso consiste en pegarlos como un Test Bench a
travs de VHDL->Port-> Paste as Instance (Figura 36)
A continuacin se introduce un nombre para la arquitectura del Test Bench (Figura 37) crendose
una platilla que se deber completar en funcin de los estmulos necesarios para simulador en
modelo. El listado 2 muestra el cdigo completo del Test Bench para el decodificador.
30
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity decoder3_to_8_tb is
end decoder3_to_8_tb;
component decoder3_to_8
port (
polarity : in std_logic;
dec_in : in std_logic_vector(2 downto 0);
dec_out : out std_logic_vector(7 downto 0));
end component;
begin -- for_decoder3_to_8
DUT : decoder3_to_8
port map (
polarity => polarity_i,
dec_in => dec_in_i,
dec_out => dec_out_o);
end for_decoder3_to_8;
Cuando se configura el entorno ISE para implementacin se puede realizar un chequeo sintctico en
el apartado de sntesis. En relacin a este punto, aunque realizar la sntesis no es necesario para llevar
a cabo la simulacin funcional, se recomienda someter al cdigo a un proceso de sntesis con el
objetivo de verificar que la especificacin del modelo VHDL es sintetizable. De nada sirve que la
simulacin arroje resultados satisfactorios en relacin a la funcionalidad del modelo, si ste no es
sintetizable. En la Figura 38 se muestra como hacer el chequeo de la sintaxis del modelo.
31
Figura 38.- Comprobacin de la sintaxis del modelo VHDL.
Por lo tanto, para poder verificar la sintaxis en el panel View se selecciona Implementation y en el
panel de procesos se selecciona Check Syntax. En la Figura 38 se puede ver cmo se comporta la
herramienta cuando se encuentra con un error. En la consola aparece la lnea del cdigo VHDL
donde se encuentra el error. Seleccionando el error y haciendo doble click la herramientas abre el
fichero que contiene el error y marca con una flecha amarilla la posicin donde se encuentra.
32
4.7.- Entrada del diseo: cmo aadir ficheros ya creados.
Para aadir ficheros existentes, es decir, creados con anterioridad en la ventana principal del ISE
Project Navigator se selecciona Project Add Source eligiendo a continuacin el fichero fuente
que se quiere aadir. Hay que resaltar que cada fichero fuente que se incorpora al proyecto tiene
asignado una asociacin, es decir, si es solamente para simulacin, como ocurre con los bancos de
pruebas o tambin se implementar. Es importante que este paso (Figura 39) se especifique
claramente ya que en caso contrario el ISE no seleccionar correctamente los ficheros para llevar a
cabo la implementacin.
En general, todos los ficheros VHDL excepto los bancos de pruebas deben tener la asociacin all,
para poder llevar a cabo tanto la simulacin como la sntesis y la implementacin.
A veces los ficheros que se aaden al proyecto hacen referencia a otros modelos ya que se
especifican mediante una jerarqua de componentes interconectados. En este caso, en el panel del
entorno ISE que representa la jerarqua se muestra el modelo con una interrogacin. Esto indica que
el modelo no existe en el proyecto y, por consiguiente, deber aadirse. Para ello, se puede
seleccionar el modelo que falta, hacer click sobre el botn del ratn y luego Add Source en la
ventana que aparece para posteriormente aadir el modelo en cuestin (Figura 40).
33
Figura 40.- Aadiendo ficheros fuente al proyecto.
En este tutorial ya se ha hecho referencia a la utilidad que tiene la herramienta CORE Generator. Se
trata de una herramienta de diseo grfica e interactiva que permite la creacin de modelos de forma
automtica sin necesidad de escribir lneas de cdigo.
En este apartado se explica cmo, a travs de la misma, se especifica el prescaler del Modelo 4 del
ejemplo de diseo (ver apartado 3.4).
Para crear un mdulo CORE Generator se selecciona Project New Source y despus
IP(Corengen&Architecture Wizard) (Figura 41). Claramente se trata de un nuevo fuente basado en
el CORE Generator que se deber aadir al proyecto. Para ello se deber introducir el nombre del
fichero (prescaler_v4) y su localizacin para a continuacin pulsar Next.
34
El paso anterior lanza un asistente (Figura 42) que facilita considerablemente la tarea. A
continuacin se debe seleccionar el tipo de IP que para el Tutorial ser Basic Elements Counters
Binary Counter. Tngase en cuenta que el divisor de frecuencia se basa en un contador binario.
Despus se pulsa Next y despus Finish para abrir el asistente del contador binario.
El siguiente paso consiste en parametrizar el contador rellenado los distintos campos que aparecen en
el asistente (Figura 43).
35
se impone restriccin en la cuenta, el contador contar hasta el valor mximo que se
pueda representar con el rango de salida especificado.
- Count Mode: este parmetro especifica si el contador cuenta de forma ascendente o
descendente.
- Sync Threshold Output: cuando este valor es true, se genera la salida combinacional
THRESH0.
- Threshold Value: es el valor en hexadecimal para el cual se activa la salida THRESH0.
- Synchronous Clear (SCLR): especifica si el pin de clear sncrono deber incluirse en el
contador.
Para ms informacin sobre el resto de los pines se puede hacer click sobre Datasheet y aparecer un
documento donde se explica la funcional del contador binario parametrizable.
Una vez parametrizado el contador se hace click sobre Generate para general el IP. Este proceso
genera una serie de ficheros que se aaden al proyecto. Algunos de estos ficheros son:
- Prescaler_v4.vho: contiene las plantillas de declaracin de componentes e instanciacin
que se pueden utilizar para instanciar el componente dentro del modelo VHDL que vaya a
utilizar el componente generado.
- Prescaler_v4.vhd: se trata de un modelo VHDL del IP generado y se utiliza para realizar
simulaciones funcionales.
- Prescaler_v4.xco: este fichero almacena la informacin de configuracin del mdulo
generado y se usa como fichero fuente para el proyecto como se puede ver en la Figura 44.
Con los ficheros anteriores se puede realizar la instanciacin del componente prescaler, en este caso
para el modelo 4 del ejemplo de diseo. Para ello se abre el fichero que en modelo 4 del ejemplo de
diseo podra llamarse top_system_v4 y se aaden las platillas de declaracin e instanciacin que se
encuentran en el fichero prescaler_v4.vho (Figura 45). ste fichero se abre seleccionando
File Open y luego el fichero en cuestin el cual se puede encontrar en la carpeta CORES. Despus
se hace click sobre Open. A continuacin se copia y pega las mencionadas platillas: la platilla de
36
declaracin del componente se copia en la parte declarativa de la arquitectura y la plantilla de
instanciacin en el cuerpo de la arquitectura del modelo top_system_v4.vhd.
37
5.- Flujo de Diseo: Simulacin.
Una vez se ha especificado el modelo con su correspondiente banco de pruebas el siguiente paso en
el flujo de diseo es la simulacin (Figura 46). Para ello se van a utilizar dos ejemplos sencillos: el
decodificador como modelo combinacional y el prescaler como modelo secuencial. Aunque se trata
de ejemplos sencillos el proceso seguido es extrapolable a cualquier circuito. El simulador que se va
a utilizar es el ISE Simulator (ISim) que viene instalado por defecto con ISE.
Para iniciar este proceso de simulacin se debe seleccionar la pestaa Design del Panel de Pestaas y
en las opciones View se selecciona Simulation (Figura 47). Al lado de este indicador, se muestra el
icono del simulador que se va a utilizar, en este caso ISim ( ). Adems, con el selector de
la izquierda, se debe seleccionar el tipo de simulacin a realizar, en este caso Behavioral (funcional
o de comportamiento).
38
Figura 47.- Seleccin de simulacin desde el panel Hierarchy.
En el caso de que apareciese otro simulador se debe hacer doble clic sobre el cdigo del dispositivo
para el que se realiza el diseo situado en la ventana Hierarchy, mostrndose la ventana de la Figura
48. En el apartado Simulator se selecciona ISim (VHDL/Verilog) y se valida con Ok.
Es importante comprobar en las opciones del diseo (Figura 48) que se encuentre seleccionado el
valor VHDL en el campo Preferred Language, de esta forma se puede utilizar, indistintamente,
maysculas o minsculas para referirse a una traza. En el caso de que se seleccione Verilog, para
referirse a una seal se debern utilizar los mismos caracteres y el mismo tipo (maysculas o
minsculas) que el utilizado en el esquema.
Para lanzar la simulacin se selecciona el modelo del banco de pruebas decoder3_to_8 en la ventana
Design y se hace doble clic en Simulate Behavioral Model . En la ventana de mensajes se va
mostrando la informacin generada por las herramientas utilizadas para realizar la simulacin. Si no
se han producido errores se mostrar la pantalla principal (ISim Graphical User Interface, GUI) del
simulador ISim (Figura 49).
39
La ventana principal de ISim muestra la Barra de Herramientas, la Ventana de formas de Onda, la
Consola, la Barra de estado y las ventanas de Fuentes y Seales.
Antes de pasar a analizar las diferentes ventanas de la GUI de ISim es conveniente definir dos
elementos bsicos de toda simulacin:
Traza. Son todos aquellos elementos de un diseo de los que se quiere ver su evolucin en la
simulacin.
Estmulo. Son los valores que se asignan a los terminales de entradas de un modelo a simular
para analizar la respuesta del mismo.
Seales. Se trata de los puertos que definen la interface del modelo y de las seales que en el
cdigo se especifican en la parte declarativa de la arquitectura.
La Ventana de Formas de Onda es el lugar donde se muestran las seales (trazas) y sus valores. La
configuracin de esta ventana se puede guardar en un archivo, de extensin wcfg (Wave
Configuration File), para poder ser utilizado en un futuro. Este archivo contiene las seales (trazas)
que se visualizan y su configuracin, pero no las formas de onda. Por defecto el nombre de archivo
de configuracin es Default.wcfg, pudindose cambiar ejecutando los siguientes pasos:
40
En algunas ocasiones interesa abrir un archivo de configuracin:
Desde la barra de herramientas con el men File y a continuacin New u Open, dependiendo
de si se quiere crear uno nuevo o cargar uno ya existente.
Desde la consola ejecutando los comandos wcfg new o wcfg open.
La Barra de Herramientas (Figura 50) disponible en la ventana principal ISim ofrece un acceso
rpido los comandos de uso frecuente:
Las ventanas a visualizar en la pantalla principal de ISim se pueden seleccionar utilizando el men
View de la barra de herramientas y a continuacin Panels (Figura 51).
Ventana Objects. Muestra todas las seales que se encuentran en un diseo. Esta ventana es
de mucha utilidad porque, desde ella se pueden aadir las seales que se quieren visualizar
(trazas) en la Ventana de Formas de Onda.
Ventana Instances and Processes. Muestra los procesos que modelan el diseo (Figura 52).
Seleccionado uno, en la ventana Objects se muestran las seales que hay en l. Con esta
ventana se puede navegar por los elementos de un diseo jerrquico para seleccionar como
trazas seales de los procesos que se encuentran en diferentes niveles de la jerarqua. Los
procesos de un modelo se identifican por su referencia.
41
Figura 52.- Ventana de Instances and Processes.
Ventana Source Files. Muestra el listado de todos los modelos en VHDL de un diseo (Figura
53).
Ventana Objects. Muestra todas las seales (Figura 54) del modelo VHDL seleccionado en la
ventana Instances and Processes. Para cada seal se muestra su nombre, su tipo y su valor en el
instante actual de la simulacin. Dependiendo del tipo de seal el icono mostrado al lado de su
nombre es diferente:
Seal de entrada (In) individual.
Seal de entrada (In) tipo bus.
Seal de salida (Out) individual.
Seal de salida (Out) tipo bus.
Seal bidireccional (in/Out) individual.
42
Seal bidireccional (in/Out) tipo Bus.
Seal interna (Out) individual.
Seal interna (Out) tipo bus.
El tipo de una seal toma el valor Array cuando se trata de un vector, en caso contrario su
tipo es Logical.
La Ventana Console (Figura 55) permite ver informacin generada por ISim, a la vez que se
utiliza para introducir comandos que permiten controlar la simulacin. Por esto, a esta
ventana tambin se le denomina ventana de comandos.
Por defecto, cuando se lanza ISim desde ISE en la ventana de formas de onda se visualizan todas las
seales y/o puertos del diseo. En la mayora de los casos, algunas de ellas son innecesarias y
43
dificultan la visualizacin. Para borrar una seal de la ventana de formas de onda se selecciona y se
pulsa Del.
En otras ocasiones es necesario aadir trazas a la ventana de formas de ondas, sobre todo cuando se
trata de un diseo jerrquico en el que se desea visualizar seales presentes en esquemas que se
encuentran en diferentes niveles de la jerarqua. Para aadir una o varias seales a la ventana de
formas de ondas se seleccionan en la ventana Objects y se hace clic sobre el ratn derecho del ratn,
apareciendo la ventana de la Figura 56, en la que se selecciona Add To Wave Window.
Las seales a visualizar y su formato se puede seleccionar con el comando wave add, si bien es ms
sencillo aadirlas desde la ventana Objects.
Antes de asignar valores a los puertos de entrada del modelo a simular, en primer lugar se debe
seleccionar el aspecto (formato) con el que se quieren visualizar cada una de las seales (trazas). El
orden que ocupa cada elemento de la ventana Formas de Onda se puede variar simplemente
arrastrndola a su posicin final. Adems, las caractersticas de cada traza (color, valor, formato, etc.)
se pueden modificar seleccionndola y haciendo clic con el botn derecho del ratn, apareciendo la
ventana de la Figura 57.
44
Delete. Borra la traza.
Rename. Permite cambiar el nombre de la traza. No es recomendable.
Expand. Muestra todos los elementos de un bus. Haciendo clic sobre el icono que se
encuentra al lado del bus se realiza la misma funcin.
Name. Especifica el formato con el que se muestra el nombre:
Short. Se visualiza slo el nombre de la traza
Long. Se visualiza el nombre y su posicin en el rbol de la jerarqua.
Radix. Permite especificar el formato numrico (Figura 58) con el que se muestran los
valores que toma la seal. Slo est disponible para los vectores. Cabe hacer una aclaracin
con los formatos Unsigned Decimal y Signed Decinal, los cuales se utilizan para ver los datos
binarios en formato decimal sin signo (binario natural) o con signo (complemento a 2),
respectivamente.
Signal Color. Permite cambiar el color con el que se visualiza la seal en la ventana de
formas de onda.
Reverse Bir Order. Permite visualizar el vector con los pesos de los bits en orden inverso.
Una vez restructurada la ventana Formas de Onda se debe guardar su configuracin, tal y como se
mencion anteriormente. Es recomendable que el archivo tenga el mismo nombre que el esquema
(full_add) y extensin wcfg. De esta forma se tienen una trazabilidad por el nombre para saber cul
es la funcin de un determinado archivo.
Para realizar la simulacin se debe tener en cuenta que en VHDL se especifica el modelo con los
estmulos en forma de banco de pruebas. Por ello cuando se lanza el simulador, tanto el valor de los
puertos de entrada como el tiempo de simulacin estn definidos en el banco de pruebas.
Sin embargo, cuando se lanza el simulador desde ISE sin haber especificado un banco de pruebas,
por defecto el intervalo de tiempo de simulacin es de 1 :s. Adems, como a las entradas no se le
ha asignado ningn valor, las salidas tampoco tendrn un valor fijo, de ah que aparezcan todas las
trazas con el valor U (Undefined).(Figura 59)
45
Figura 59.- Ventana de formas de onda donde las trazas tienen un valor no definido.
La reinicializacin de la simulacin anula todos los valores que se le hayan asignados a las entradas.
Llegado a este punto, la pantalla formas de onda de la Figura 59 tiene el aspecto mostrado en la
Figura 60.
46
5.4.- Creacin de estmulos.
Para poder realizar la simulacin de un esquema es preciso crear los estmulos (valores) que se van a
aplicar en las entradas. Los estmulos son valores que se distribuyen en el tiempo, por lo que es
preciso tener claro que valores van a tomar las entradas y en que instantes de tiempo. Puede ser
interesante realizar sobre un papel una distribucin de los estmulos que van a tomar las entradas.
Queda por fijar cuanto tiempo se espera entre valor y valor; para ello no conviene trabajar con
tiempos muy grades que pueden dar lugar a tiempos de simulacin muy largos: una simulacin de 1 s
tarda en realizarse ms de 1 s, dando lugar a excesivos tiempos de espera ante la pantalla del
ordenador, lo que hace tediosa la labor de simulacin. En general, tiempos del orden de las decenas o
centenas de ns (nanosegundos) es lo recomendable. Para el ejemplo del tutorial se pueden definir los
estmulos representados en la Figura 61. La seal polarity cambia de valor cada 100 ns comenzando
con el valor inicial cero. Por otro lado, la seal dec_in cambia de valor cada 10 ns en forma de
contador ascendente partiendo de cero.
Para asignar un valor a una entrada, se selecciona en la ventana de formas de onda, o en la ventana
Objects; por ejemplo polarity. A continuacin se cliquea sobre el botn derecho y se selecciona
Force Constant, (Figura 62) apareciendo la ventana de la Figura 63. Sus opciones son:
47
los valores hexadecimal correspondientes a letras (a-f) se pueden utilizar indistintamente
maysculas o minsculas.
Starting at Time Offset. Instante de tiempo, contado a partir del tiempo actual de simulacin
en el que se aplica el valor indicado. Un valor se representa con una cantidad numrica,
expresada en decimal (entero con decimales) seguida de una unidad: ps (pico segundos), ns
(nano segundos), us (micro segundos), ms (mili segundos) o s (segundos). Por defecto las
unidades son ps. Entre el instante actual de la simulacin y el especificado a la seal se le
asigna el valor U (Undefined). Normalmente en este campo se pone 0 (0 ps).
Cancel after Time Offset. Representa el tiempo a partir del cual se cancela el valor asignado,
a partir de ese instante, a la seal, se le asigna el valor U.
Otra alternativa ms prctica para introducir el valor que debe tomar una seal consiste en ejecutar el
comando isim force add desde la ventana Consola. El formato de este comando es:
Cada uno de los campos se corresponde con los elementos de la ventana de la Figura 63. Los campos
marcados con [] son opcionales. Para asignar el valor 0 a la entrada polarity se utilizar el comando:
Hay que indicar que con las teclas de cursor arriba () y abajo () se puede acceder a los comandos
anteriores o posteriores introducidos para poder ejecutarlos de nuevo o modificarlos.
Para cada conjunto de valores asignados a las entradas se debe provocar un avance de la simulacin.
Para ellos se puede:
Haciendo clic sobre el icono de la Barra de Herramientas. La simulacin se realiza
durante el tiempo especificado en el recuadro de la Barra de herramientas.
48
Desde el men Simulation de la barra de herramientas y a continuacin run.
Desde la Ventana Consola introduciendo el comando run. Posibles construcciones de este
comando son:
Comando Descripcin
run 100 ns Avanza la simulacin 100 ns
run 100 Avanza la simulacin de 100 ps
run Avanza la simulacin un tiempo igual al seleccionado en
la Barra de Herramientas
Esta forma de introducir los estmulos es muy engorrosa y obliga a introducir los estmulos cada vez
que se lleva a cabo la reinicializacin del proceso.
Una vez finalizada una simulacin hay que analizar todas las seales para verificar que cumplen con
las especificaciones del diseo. Si esto no sucediese, habra que comenzar de nuevo cerrando el ISim,
modificando el modelo a simular y finalmente habra que realizar de nuevo todo el proceso de
simulacin (configurar trazas, asignar estmulos y ejecutar la simulacin). En consecuencia, la etapa
de simulacin puede ser laboriosa. Para simplificar el proceso se puede utilizar un archivo que
contiene la secuencia de comandos a ejecutar desde la ventana Consola, de forma que ejecutando
este archivo se ejecutan de forma secuencial uno a uno los comandos introducidos en l. Este es el
archivo de comandos, al que tambin se le suele denominar script. Este archivo se crea una sola vez
y se ejecuta tantas como veces se quiera realizar la simulacin del modelo. Se recomienda que el
nombre del archivo sea el del modelo y de extensin tcl.
En principio, cabe pensar que un archivo de comandos slo tiene comandos isim force y run. De ser
as, habra que configurar las seales a visualizar cada vez que se lanzara el simulador. Una solucin
ms prctica consiste en que la primera vez que se lanza la simulacin se configuren las seales a
visualizar y se cree un archivo de configuracin (wcfg), el cual se aade al archivo de comandos con
el comando wcfg open.
Con todo ello, el contenido del archivo para simular el decodificador tiene el aspecto mostrado en el
listado 3. Ntese que todo el texto que va precedido del carcter # se considera como un comentario
y por lo tanto no se considerara un comando de simulacin. Los comentarios en el listado que se
muestra a continuacin tienen como misin explicar la funcionalidad de cada uno de los comandos.
49
run 10 ns
isim force add dec_in 010 -radix bin
run 10 ns
isim force add dec_in 011 -radix bin
run 10 ns
isim force add dec_in 100 -radix bin
run 10 ns
isim force add dec_in 101 -radix bin
run 10 ns
isim force add dec_in 110 -radix bin
run 10 ns
isim force add dec_in 111 -radix bin
run 5 ns
isim force add polarity 1 -radix bin
run 5 ns
isim force add dec_in 000 -radix bin
run 10 ns
isim force add dec_in 001 -radix bin
run 10 ns
isim force add dec_in 010 -radix bin
run 10 ns
isim force add dec_in 011 -radix bin
run 10 ns
El archivo de comandos es un archivo de texto que se puede crea utilizando cualquier editor de
textos. ISim tiene un editor que se puede acceder a l desde el men File de la Barra de Herramientas
y a continuacin new, o actuando sobre el icono de la misma barra. En ambos casos se muestra
la ventana de la Figura 64, donde se selecciona Text File, accedindose al editor de ISim. El archivo
que se abre no tiene nombre por lo que hay que asignarle uno. Esto se puede hacer desde el men
File.
Para ejecutar un archivo de comandos se ejecuta en la ventana Consola el comando source, cuyo
formato es:
source <nombre_archivo.tcl>
50
Con la ejecucin del archivo de comandos del listado 3 (source decoder3_to_8_func.tcl) se obtienen
el resultado mostrado en la Figura 65.
Para diseos secuenciales, es decir, aquellos que requieran una seal de reloj, es til poder definir
una seal peridica. Para ello, se puede utilizar el comando Force Clock en lugar de Force Constant,
apareciendo la ventana de la Figura 66.
Con los datos mostrados en la Figura 66, en la seal polarity se aplica una seal peridica de
periodo 100 ns y 50% de ciclo de trabajo, est a nivel alto el mismo tiempo (50 ns) que a nivel bajo.
51
La seal empieza con un nivel bajo. El mismo resultado se puede conseguir utilizando el comando
isim force:
isim force add polarity 0 -radix bin -value 1 -radix bin -time 50 ns -repeat 100 ns
Las seales peridicas se pueden aplicar a vectores (buses), en este caso el valor del vector
conmutar entre dos valores. El primero seleccionado con Leading Edge Value y el segundo con
Trailing Edge Value.
52
5.6.-Especificacin de los estmulos en un banco de pruebas.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity decoder3_to_8_tb is
end decoder3_to_8_tb;
component decoder3_to_8
port (
polarity : in std_logic;
dec_in : in std_logic_vector(2 downto 0);
dec_out : out std_logic_vector(7 downto 0));
end component;
begin -- for_decoder3_to_8
DUT : decoder3_to_8
port map (
polarity => polarity_i,
dec_in => dec_in_i,
dec_out => dec_out_o);
53
end if;
end if;
end process;
end for_decoder3_to_8;
Listado 5.- Banco de pruebas para el decodificador.
Como se puede observar en el cdigo anterior, el contador dispone de una seal de reset activa a
nivel alto sobre la que se define un estmulo con valor 1 hasta los 4 ns, despus se desactiva.
Por otro lado, la seal de reloj que sincroniza el contador tiene un periodo de 10 ns con un ciclo de
trabajo del 50 %. La salida del contador se conecta con la entrada dec_in y finalmente, el estmulo
sobre la seal polarity se especifica como una seal de reloj con un periodo de 200 ns y un ciclo de
trabajo del 50 %.
Como se puede observar en el listado 5, el banco de pruebas instancia el modelo bajo test. Por ello, a
la hora de simular, se debe lanzar el banco de pruebas ya que ste constituye el nivel ms alto de la
jerarqua en el mbito de la simulacin.
Antes de lanzar el ISim, se pueden configurar el tiempo de simulacin, accediendo a la ventana que
aparece si se sita el ratn en el panel processes del ISE y se pulsa el botn derecho del ratn y
despus Process Properties (Figura 68) apareciendo la ventana de la Figura 69.
54
En la ventana de la Figura 69 se observa que por defecto el tiempo de simulacin es de 1000 ns. Este
valor se puede modificar en funcin de los estmulos generados. Por ejemplo, si se han especificado
estmulos hasta el instante 400 ns, en principio no tiene sentido ejecutar la simulacin durante 1000
ns ya que ralentiza el proceso. Esto ltimo se pone de manifiesto cuando se llevan a cabo
simulaciones temporales, donde la cantidad de datos que maneja la herramienta es mayor.
Con el banco de pruebas del listado 5 y para un tiempo de simulacin de 250 ns el resultado se
muestra en la Figura 70.
Figura 70.- Resultado de la simulacin del decodificador con el banco de pruebas del listado 5.
Ntese que en la figura anterior, los valores del puerto de entrada dec_in se representan en decimal
siendo binario su tipo por defecto. La base de numeracin o radix se puede modificar desde la
ventana wave seleccionando la seal, haciendo click sobre el botn derecho del ratn y seleccionado
la opcin radix y despus la base que se quiera utilizar para el puerto o seal seleccionado (Figura
71)
55
Aunque la definicin de estmulos a travs de un banco de pruebas facilita la tarea, es recomendable
definir un fichero de comandos con el ISim donde se incluya el formato de la ventana wave y la
inicializacin de la simulacin.
Una vez ejecutada la simulacin, sobre la ventana de Formas de ondas, se deben analizar los
resultados para comprobar si el modelo cumple con las especificaciones de diseo. Para ello ISim
dispone de algunos elementos que facilitan esta tarea.
Para ajustar el zoom de la visualizacin se emplean los elementos que aparecen en la barra de
herramientas:
ISim dispone de un cursor (reflejado como una lnea vertical amarilla) que se puede mover por todo
la ventana de formas de onda para ver el valor que tienen todas las seales en la posicin que ocupa.
Haciendo click en un punto de dicha ventana se posiciona en l el cursor. Se puede mover de un lado
a otro arrastrndolo. Tambin se puede seleccionar una seal determinada pulsando o
saltando el cursor a la siguiente o anterior transicin en la seal, respectivamente. Por transicin se
entiende un cambio de valor. Actuando sobre o se accede al instante inicial o final,
respectivamente, de la simulacin.
Un elemento muy til, sobre todo para medir tiempos entre eventos de seales, son los marcadores
(marker). Un marcador se ubica en la posicin que ocupa el cursor cuando se pulsa . Un
marcador se borra seleccionndolo y pulsando Del. Las mediciones de tiempo se pueden realizan
utilizando un marcador y el cursor y activando la regla flotante (floating ruler) (Figura 72). La
regla flotante se puede activar si esta seleccionado el marcador. Tambien se puede desactivar.
56
Figura 72.- Medida de tiempos utilizando un marcador.
Si en una simulacin se tienen varios marcadores y est activada la regla flotante, el origen (0s) se
puede fijar en la posicin que ocupa un marcador cliqueando sobre l.
Otra alternativa para medir tiempos consiste en la utilizacin de un segundo cursor, el cual se ubica
haciendo clic con el botn izquierdo a la vez que se mantiene pulsada la tecla Shift ( , maysculas).
En este caso se muestra la regla flotante y en la posicin del segundo cursor se pone el punto 0 de la
regla flotante. El segundo cursor se representa como una lnea amarilla discontinua. Cliqueando en
cualquier zona de la ventana de formas de onda se borra el segundo cursor.
Una vez compobado que la simulacin es correcta se cierra debe cerrar ISim y se continua con el
diseo.
57
6.- Flujo de diseo: Sntesis.
Una vez se ha verificado que el diseo est libre de errores, el siguiente paso consiste en la sntesis
del mismo (Figura 73).
58
Como se puede observar en la figura anterior, el banco de pruebas ha desaparecido de la jerarqua ya
que se trata de un modelo que slo se utiliza para la simulacin.
Para controlar los resultados del proceso de sntesis, se deben configurar algunas propiedades. Para
ello se selecciona en la ventana Processes la opcin Synthesize-XST y se hace click en el botn
derecho del ratn apareciendo la ventana de la Figura 75.
59
Para obtener ms informacin de cada una de las propiedades de la ventana anterior se selecciona la
opcin y se pulsa F1.
En cuando a las opciones HDL (HDL Options en la Figura 77), destacar que se puede establecer el
tipo de codificacin de las mquinas de estado de los circuitos secuenciales.
Informacin ms detallada sobre los tipos de codificacin de las mquinas de estado se puede
consultar en los apuntes de clase.
60
7.- Flujo de diseo: Implementacin.
Antes de poder llevar a cabo el proceso de implementacin se debe generar un fichero de texto en el
que se indica los pines de la FPGA a los que se asignan a las seales de entrada/ salida, asociadas a
los puertos de la entidad de nivel superior de la jerarqua. Este archivo se conoce con el nombre de
archivo de restricciones (User Constraints File). Se recomienda que este archivo tenga como nombre
el de la entidad de nivel superior de la jerarqua y de extensin ucf y adems en minsculas. Una vez
creado, se deber aadirse al proyecto antes de realizar la implementacin del mismo.
Para crear el archivo de restricciones se puede utilizar el editor de texto de ISim, tal y como se vio en
apartados anteriores. Por cada puerto de la entidad del nivel ms alto en la jerarqua se introduce una
lnea con el siguiente formato:
61
As, por ejemplo para asignar la entrada polarity al pin N4 de la FPGA se pondra la lnea:
Para el caso de los vectores (buses), se debe asignar uno a uno los pines a cada uno de sus elementos,
poniendo los ndices de los elementos del bus entre < >. As, con las asignaciones:
# Leds
NET "LED<0>" LOC = "U18";
NET "LED<1>" LOC = "M14";
NET "LED<2>" LOC = "N14";
NET "LED<3>" LOC = "L14";
NET "LED<4>" LOC = "M13";
NET "LED<5>" LOC = "D4";
NET "LED<6>" LOC = "P16";
NET "LED<7>" LOC = "N12";
El elemento LED<0> del vector LED se asocia al pin U18 de la FPGA, el LED<1> al M14, y as
sucesivamente.
El diseo realizado se va a programar en la FPGA de la placa Atlys 2. La correspondencia entre los
pines y los elementos de la placa debe se muestra en la Figura 79.
Spartan-6 LX45
CSG-324-3
Oscilador clk L15
100MHz
N12 LED(7)
P16 LED(6)
3.3 V
LED(5)
D4
btn(0) rst M13 LED(4)
T15 L14 LED(3)
N14 LED(2)
3.3 V M14 LED(1)
btn(1) polarity
N4 U18 LED(0)
btn(2) direction
P4
Figura 79.- Correspondencia de pines de la FPGA con los puertos del modelo del desplazador.
62
# clock
NET "clk" LOC = L15;
# Leds
NET "LED<0>" LOC = "U18";
NET "LED<1>" LOC = "M14";
NET "LED<2>" LOC = "N14";
NET "LED<3>" LOC = "L14";
NET "LED<4>" LOC = "M13";
NET "LED<5>" LOC = "D4";
NET "LED<6>" LOC = "P16";
NET "LED<7>" LOC = "N12";
# PUSH BUTTONS
NET "rst" LOC = T15;
NET "polarity" LOC = N4;
NET "direction" LOC = P4;
Listado 6.- Fichero de restricciones de usuario.
Una vez aadido el archivo de restricciones ya se puede implementar el diseo. En primer lugar se
debe comprobar que el archivo de mayor nivel jerrquico (top_system) es el que, en la ventana de
archivos, tiene la marca . En caso de no ser as, se selecciona el archivo de nivel superior, se acta
sobre el botn derecho del ratn y en la ventana de la Figura 80 se selecciona Set as Top Module.
Antes de lanzar las herramientas que realizarn la implementacin se pueden configurar las
propiedades de cada uno de los procesos, seleccionndolos individualmente y haciendo click con el
botn derecho del ratn como ya se explic para el proceso de sntesis.
63
Figura 81.- Propiedades del proceso Translate.
Para este tutorial y para el resto de las prcticas de laboratorio se dejarn las opciones por defecto
para cada uno de los procesos en la implementacin. Est fuera del alcance de este tutorial, la
explicacin de cada una de las propiedades. En cualquier caso el alumno siempre puede consultar los
manuales del fabricante.
La implementacin de diseo se puede realizar paso a paso, es decir, lanzando cada uno de los
procesos (Translate, Map, Place&Route) que entran en juego en la implementacin localizados en la
ventana Processes (Figura 82).
64
Existe la posibilidad de ejecutar todos los procesos lanzando el ltimo necesario para la
implementacin. En este caso sera necesario nicamente lanzar el proceso Place&Route. Con ello la
herramienta ejecuta automticamente los procesos anteriores. Asimismo, existe la posibilidad de
lanzar todos los procesos incluido el de sntesis, aunque este ltimo ya se haya realizado. Para ello se
selecciona el ltimo proceso que se quiere ejecutar, por ejemplo Place&Route Place&Route , se hace
click en el botn derecho del ratn y se seleccin Rerun All (Figura 83).
65
8.- Flujo de diseo: simulacin temporal.
La simulacin temporal usa los datos de retardos extrados de los modelos de simulacin de los
componentes y los retardos procedentes del proceso de interconexin. A este respecto es necesario
ejecutar un proceso adicional para poder generar un fichero donde se anoten los retardos. Este
proceso se encuentra dentro del proceso Place&Route (Figura 85).
66
La ejecucin de los distintos procesos genera informes que se pueden consultar especialmente para el
caso en el que existen errores que haya que corregir. Cuando se trata de warnings aparece un icono
amarillo con el signo de exclamacin al lado del proceso . Este tipo de errores, aunque no paran
el proceso de sntesis o implementacin, se deben tener en cuenta. Especialmente crticos son los
warnings que aparecen el proceso de sntesis cuando se modelan latches indeseados debido
fundamentalmente a especificaciones no conformes con las directrices de sntesis. Por otro lado,
cuando hay algn error de sintaxis o se utilizan construcciones no sintetizables aparece el smbolo
para indicar que hay un error que debe ser corregido antes de poder continuar con el resto de los
procesos. Finalmente si no hay ningn error, aparecer el smbolo
Para lanzar la simulacin temporal se deber seleccionar en la ventana View la opcin Simulation y
despus seleccionar la opcin Post-Route en la ventana desplegable (Figura 86)
A continuacin, como se hizo para la simulacin temporal se lanza al simulador que en este caso se
referencia como Simulate Post-Place & Route Model (Figura 87).
67
Como en el caso de la simulacin funcional, en este paso es recomendable especificar un fichero de
comando para el ISim. Sirva como ejemplo el del listado 7.
run 150 ns
Listado 7.- Comandos de ISim para la simulacin temporal
Como se puede observar, los comandos para la definicin de estmulos son los mismos variando
nicamente la ventana de representacin.
68
9.- Flujo de diseo: generacin del fichero de configuracin.
La ltima etapa en el flujo de diseo es la generacin del fichero de configuracin (Figura 89) que
ser descargado en la FPGA.
Para ello se debe ejecutar Generate Programming File desde la ventana procesos (Figura 90). Para
poder acceder a este proceso se debe seleccionar en la ventana View la opcin Implementation.
69
Antes de lanzar el proceso es aconsejable cambiar las propiedades del proceso Generate
Programming File. Para ello, una vez seleccionado actuando sobre el botn derecho del ratn se
selecciona Process Properties, mostrndose la ventana de la Figura 91.
En ella se debe comprobar que la opcin Create Bit File est activada. Seguidamente, y sin cerrar la
ventana de opciones, en el apartado Category se selecciona la categora Startup Options y se debe
cambiar el valor del campo FPGA Start-Up Clock de CCLK a JTAG-Clock (Figura 92).
Tras realizar los cambios mencionados, se deben validan con OK. Seguidamente, se har doble clic
sobre Generate Programming File para lanzar la creacin del archivo de configuracin.
70
Finalizado el proceso, en la carpeta del proyecto se crea un archivo con el nombre del modelo que se
ha implementado que normalmente se corresponde con el mal alto en la jerarqua. El fichero
generado por el proceso Generate Programming File tiene extensin .bit. Este es el archivo que se
debe utilizar para programar la FPGA.
Para cargar el archivo de configuracin obtenidos en el paso anterior se podra realizar ejecutando el
proceso Configure Target Device (Figura 93) de la ventana de Processes. Para ello se requiere un
cable especial que comercializa la firma comercial Xilinx.
No obstante, junto con la tarjeta Atlys de la firma comercial Digilent se proporciona un cable para
realizar, entre otras cosas, la programacin de la FPGA. Este cable se conecta al puerto USB del
ordenador y a la tarjeta. Adems se proporciona el programa Adept (Figura 94) para realizar la tarea
se programacin. Previa a la ejecucin se debe conectar la tarjeta Atlys al ordenador.
Cuando se ejecuta el programa Adept se muestra la ventana de la Figura 95. El propio software se
encarga de identificar la FPGA que est conectada al ordenador. Adems, identifica la existencia en
la placa de una memoria PROM XCF04S. Esta memoria se puede configurar para que proporcione
una configuracin inicial a la FPGA cuando se conecte la alimentacin. Esta opcin no se va a tratar
en este tutorial.
71
Figura 95.- Ventana principal de Adept para programar la FPGA.
72