You are on page 1of 7

LABORATORIO DE DISEO DE

CIRCUITOS Y SISTEMAS
ELECTRNICOS
Ingeniera Electrnica

PRCTICA 1: INTRODUCCIN AL
ENTORNO DE DESARROLLO EN
VHDL PARA FPGAs.

Febrero 2006

Laboratorio de Diseo de Circuitos y Sistemas Electrnicos.

Prctica 1

OBJETIVOS
Mediante esta prctica se pretende introducir al alumno en el manejo de las distintas
herramientas utilizadas en el flujo de diseo en VHDL sobre FPGAs. Para ello se
presentarn a lo largo de la misma los diferentes entornos software de trabajo que se
utilizarn a lo largo de las diferentes prcticas del laboratorio.
La prctica est orientada desde un punto de vista de un tutorial, donde el diseo a
realizar ser muy sencillo, y en el que se conjugaran aspectos de modelado para sntesis
de lgica combinacional y secuencial, y donde se vern las herramientas ModelSim,
Leonardo Spectrum, EMACS as como el programa ISE de Xilinx.

INTRODUCCIN.
Para presentar las diferentes herramientas, se propone como diseo de partida la
generacin de un decodificador BCD a 7 segmentos as como un registro de
desplazamiento. Ambos diseos estarn en un mismo fichero vhd, y ser el ejemplo
utilizado para la presentacin de los distintos entornos.
A la hora de abordar un diseo en VHDL es importante tener presente el diagrama de
flujo presentado en la Figura 1.
ESPECIFICACIONES
INICIALES

CODIFICACIN DEL
DISEO EN HDL

SIMULACIN
FUNCIONAL

CORRECTO?

CORRECCIONES
DEL DISEO

No

SNTESIS

IMPLEMENTACIN
(PLACE & ROUTING)

SIMULACIN
TEMPORAL

CORRECTO?

No

S
DESCARGA EN
PLACA

Pgina 1

Laboratorio de Diseo de Circuitos y Sistemas Electrnicos.

Prctica 1

Figura 1. Diagrama de flujo del desarrollo de un diseo para FPGAs.


Una vez conocidas las especificaciones del diseo se procede a modelar en VHDL el
sistema en cuestin. Para escribir este cdigo fuente se puede utilizar cualquier editor de
texto que genere cdigo ASCII. Sin embargo las distintas herramientas a emplear
(simulador, sintetizador, herramientas de implementacin) estn concebidas como
entornos de desarrollo integrados que disponen de su propio editor VHDL.
Estos editores estn diseados expresamente para escribir cdigo VHDL disponiendo de
caractersticas interesantes como resaltado de palabras clave en el cdigo fuente, manejo
de plantillas de construcciones tpicas del lenguaje, etc. Tal es el caso de editores
propios de VHDL como puede ser el que aporta ModelSim, o ISE de Xilinx. Tambin
existen editores de cdigo de lenguajes de programacin como puede ser Prism. El
problema de todos ellos es que se necesita licencia para poder ser utilizarlos. Sin
embargo existe una herramienta gratuita en Internet, denominada EMACS que permite
editar de una manera bastante cmoda, cdigo de programacin como es VHDL. La
ventaja que aporta este entorno, es la existencia de un asistente (wizard) que ayuda a
generar cdigo de manera automtica.
Una vez escrito el cdigo el siguiente paso es la verificar la correccin del mismo
mediante un simulador. De entre las diferentes herramientas que existen en el mercado,
en este laboratorio se usar ModelSim.. En este paso tan slo se atendern a aspectos
puramente funcionales, es decir, no se contemplan aspectos temporales como frecuencia
de funcionamiento, retardos temporales, etc.
Si los resultados obtenidos durante la simulacin se cien a las especificaciones dadas
se proceder a sintetizar el diseo. Se denomina sntesis al proceso por el cual se
transforma un cdigo VHDL en una netlist propia de la tecnologa a utilizar (FPGA).
Conceptualmente es similar a la labor realizada por un compilador de C que traduce el
cdigo de alto nivel a las correspondientes instrucciones en ensamblador.
En nuestro caso el formato de la netlist ser EDIF, ya que ste es admitido por las
herramientas de implementacin de Xilinx (entorno ISE). La herramienta utilizada para
la sntesis ser Leonardo Spectrum, siendo tambin de Mentor Graphics.
Seguidamente se procede a realizar la implementacin del diseo mediante el entorno
ISE de Xilinx. Este proceso consiste bsicamente en ubicar e interconectar de forma
ptima los elementos de la tecnologa destino (LUTs, biestables, memorias, etc para el
caso de las FPGAs de Xilinx) dentro de la matriz de la FPGA. El resultado final de esta
fase es un fichero binario que se utilizar para configurar la FPGA. Siguiendo con la
analoga anterior esta fase es similar al proceso de linkado de una aplicacin software.
El ltimo paso que quedara previo a la descarga en placa sera la simulacin temporal.
En base a la informacin generada con ISE, se realizar la simulacin temporal
mediante el simulador Modelsim anteriormente citado.
Como se ha comentado anteriormente el diseo a realizar consiste en un decodificador
BCD 7 segmentos y de un registro de desplazamiento. La entidad de dicho diseo se
muestra en la Figura 2.

Pgina 2

Laboratorio de Diseo de Circuitos y Sistemas Electrnicos.

prueba

clk

Prctica 1

display : (7:0)

rst_n

leds : (7:0)

BCD_data : (3:0)

Figura 2. Entidad del diseo.


La descripcin de las seales es la siguiente
Nombre

CLK

Tipo seal

Descripcin

IN std_logic

Seal de Reloj para el registro de


desplazamiento
RST_N
IN std_logic
Reset asncrono activo a nivel bajo
BCD_DATA IN std_logic_vector (3 DOWNTO 0)
Entrada de datos en formato BCD
para representar en el display
DISPLAY
OUT std_logic_vector (7 DOWNTO 0) Salida hacia los segmentos del
display
LEDS
OUT std_logic_vector (7 DOWNTO 0) Salida hacia los leds de la placa

CDIGO VHDL
El esqueleto del cdigo ser el siguiente:
LIBRERAS
ENTIDAD
PUERTOS ENTRADA (CLK, RST, BCD_DATA,)
PUERTOS SALIDA (LEDS, DISPLAY)
FIN ENTIDAD
ARQUITECTURA
DECLARACIN DE SEALES INTERMEDIAS
PROCESO 1: DECODIFICACIN BCD-7SEGMENTOS
Sentencia
CASE
para
detectar
todas
situaciones
de
BCD DATA
y
realizar
decodificacin correspondiente.

las
la

PROCESO 2: REGISTRO DE DESPLAZAMIENTO


Deteccin de reset activo
Deteccin de flanco de subida del reloj
Sentencia de rotacin de bits
FIN ARQUITECTURA

Pgina 3

Laboratorio de Diseo de Circuitos y Sistemas Electrnicos.

Prctica 1

Otra parte importante de cualquier diseo en VHDL es la realizacin de un banco de


pruebas (testbench) que se encargue de generar diferentes estmulos que permitan
validar la funcionalidad del diseo. Si el flujo de diseo se realiza adecuadamente, se
puede reutilizar el testbench de la simulacin funcional para la simulacin temporal. Un
testbench debe contener dentro de su cdigo la declaracin e instacin del componente
(entidad) a simular. Otra parte fundamental es la edicin de los estmulos. En el
siguiente cuadro se puede ver una posible estructura de un testbench.
LIBRERA
ENTIDAD
FIN ENTIDAD
ARQUITECTURA
Declaracin del componente a simular
Declaracin de seales auxiliares
Instanciacin del componente
Estmulos
FIN ARQUITECTURA

SIMULACIN.
Una vez generado el cdigo y realizada la compilacin en Modelsim, se procede a
simular el diseo.

IMPLEMENTACIN Y DESCARGA EN PLACA.


Cuando el comportamiento de un diseo ha sido validado con la simulacin el siguiente
paso es el de la implementacin. Para ello se utilizar la herramienta ISE de Xilinx.
Mediante esta herramienta, se generar el fichero binario para descargar en placa (*.bit)
as como dos ficheros para poder realizar la simulacin temporal: *.vhd, *.sdf. El
primero de ellos es un fichero derivado del diseo realizado, en el que se incluyen todos
los niveles jerrquicos que se pudiera tener as como componentes ya propios de la
tecnologa Xilinx. El segundo de ellos contiene informacin acerca de los retardos
internos de las seales del diseo realizado.

Pgina 4

Laboratorio de Diseo de Circuitos y Sistemas Electrnicos.

Prctica 1

EJEMPLO SISTEMA COMBINACIONAL Y SECUENCIAL.


library ieee;
use ieee.std_logic_1164.all;
entity prueba is
port (
clk
: in std_logic;
rst_n : in std_logic;

-- Seal de reloj principal.


-- Seal de reset asncrona.

BCD_data : in std_logic_vector(3 downto 0); -- Datos de entrada (microswitches).


display : out std_logic_vector(7 downto 0); -- Display de 7 segmentos.
leds : out std_logic_vector(7 downto 0)); -- Barra de leds.
end prueba;
architecture rtl of prueba is
signal leds_i : std_logic_vector(7 downto 0);
begin
-- Ejemplo de lgica combinacional:
-- decodificador BCD a 7 segmentos.
process(BCD_data)
begin
case BCD_data is
when "0000" =>
display <= "00111111";
when "0001" =>
display <= "00000110";
when "0010" =>
display <= "01011011";
when "0011" =>
display <= "01001111";
when "0100" =>
display <= "01100110";
when "0101" =>
display <= "01101101";
when "0110" =>
display <= "01111101";
when "0111" =>
display <= "00000111";
when "1000" =>
display <= "01111111";
when "1001" =>
display <= "01100111";
when others =>
display <= "00000000";
end case;
end process;

Pgina 5

Laboratorio de Diseo de Circuitos y Sistemas Electrnicos.

Prctica 1

-- Ejemplo de lgica secuencial:


-- Registro de desplazamiento.
process(clk, rst_n)
begin
if (rst_n = '0') then
leds_i <= "00000001";
elsif (clk'event and clk = '1') then
leds_i <= leds_i(6 downto 0) & leds_i(7);
end if;
end process;
leds <= leds_i;
end rtl;

Pgina 6

You might also like