Sei sulla pagina 1di 72

DISPOSITIVOS LGICOS PROGRAMABLES

LENGUAJE VHDL

Preparado por: Jairo M. Vergara vila

(Diapositivas tomadas de varias fuentes de Internet)

SPLDs (Dispositivos lgicos programables simples) Estructuras lgicas basadas en planos AND-OR CPLDs (Dispositivos lgicos programables complejos) Combinan varios SPLDs interconectados mediante una matriz de conmutacin fija o programable FPGAs (Field Programmable Gate Arrays) Incluyen bloques lgicos combinacionales, elementos de memoria y una red de interconexin programable

FPGA (Field Programmable Gate Arrays) XILINX SPARTAN 3


INTRODUCCIN GENERAL Fabricado en procesos de 90 nm y obleas de 300mm, en foundries


(fundicin) de IBM, Intel, Sony, Texas Instruments y UMC. Arquitectura de E/S staggered (escalonados) de 55 m de ancho Buena relacin precio/prestaciones con 1M de puertas de sistema por debajo de $12.00, 50K puertas por $2.95, y tres dispositivos con densidades intermedias por debajo $6.50 Dispositivos con capacidades entre 50K y 50M de puertas equivalentes (XC3S50, XC3S200, XC3S400, XC3S1000, XC3S1500 y XC3S4000) 1.28Mbits de BlockRAM Rango de E/S: desde 124 a 784 pines para cada dispositivo Gestin digital del reloj (DCM) Multiplicadores empotrados de 18x18bits para soportar aplicaciones de procesado de seal de altas prestaciones Soporte del entorno de depurado en chip

INTRODUCCIN GENERAL
Densidades de 74.880 de clulas lgicas Frecuencia mxima de reloj de 326 MHz Tres tensiones de alimentacin:1.2V para el core, 1.2V a 3.3 V para E/S, y 2.5 V para las funciones especiales Hasta 784 E/S con una tasa de transferencia de 622Mb/s, soporte de diferentes especificaciones estndares de E/S (LVDS, DCI, DDR) Recursos lgicos: Presencia de multiplexores con un nmero elevado de entradas Abundancia de registros y generadores de funciones en los Slices/CLBs Multiplicador de 18x18bits Lgica JTAG compatible con los estndares IEEE 1149.1/1532 Jerarqua de memoria 8 lneas de reloj

Basys FPGA Board, 250K gates

Nexys2 FPGA Board

VHDL
VHSIC Hardware Design Language
(VHSIC es acrnimo de Very High Speed Integrated Circuits)

HISTORIA
El VHDL nace por iniciativa del Departamento de Defensa de EE.UU. (comienzo de los 80) En julio de 1983 tres compaas (Texas Instruments, IBM e Internetics) reciben el encargo de desarrollarlo La primera versin se publica en agosto de 1985 En 1986 se convierte en un estndar del IEEE (IEEE 1076-1987) Posteriormente, con el estndar IEEE 1164 se le aaden nuevas caractersticas El estndar 1076 debe ser revisado cada cinco aos. Actualmente rige el 1076-1993

Principales ventajas
Estndar pblico Independiente de la tecnologa Soporta diferentes metodologas de diseo Independiente del sistema de diseo Compatible

DEFINICIN:
VHDL es un lenguaje de descripcin de circuitos electrnicos
digitales que utiliza distintos niveles de abstraccin. El significado de las siglas VHDL es VHSIC (Very High Speed Integrated Circuits) Hardware Description Language. Esto significa que VHDL permite acelerar el proceso de diseo. Los circuitos descritos en VHDL pueden ser simulados utilizando herramientas de simulacin para reproducir el funcionamiento del circuito. Adems utilizando herramientas de sntesis se puede implementar dicho circuito en un dispositivo lgico programable o en un circuito integrado.

MODELAJE DE HARDWARE
Al describir cualquier dispositivo en VHDL, el diseador debe definir tres elementos principales:

Libreras (LIBRARY). La librera estndar es


siempre visible. Si se requieren utilizar otras libreras se deben importar.

La entidad (ENTITY). Especifica la interfaz del


circuito. Describe la forma de interconectar un bloque con los dems (entradas, salidas)

La arquitectura (ARCHITECTURE). Es la
descripcin interna del circuito. Describe el comportamiento lgico del bloque

ENTIDAD
Las entidades definen el Nombre de los puertos, el modo (entradas o salidas) y el tipo (integer, bit,) de un circuito. La declaracin de las entidades es anloga al smbolo esquemtico de lo que queremos implementar, el cual describe las conexiones del proyecto, es decir, si hay una entrada o puerto de 8 bits o dos salidas o puertos de 4 bits, etc.

ARQUITECTURA
Indica el tipo de procesamiento que se realiza con las seales de entradas, (declarados en la entidad). En ella reside todo el funcionamiento del circuito. Si la entidad es vista como una caja negra, para lo cual lo nico importante son las entradas y salidas, entonces, la arquitectura es el conjunto de detalles interiores de la caja negra La arquitectura presenta diferentes modelos, los cuales son: - Algortmico (funcional o comportamental ). - Flujo de datos. - Estructural.

MODELOS DE LA ARQUITECTURA

MODELO

ENTIDAD

ARQUITECTURA

ESTRUCTURAL

COMPORTAMENTAL

FLUJO DE DATOS

Ejemplo:
Describir en VHDL, un circuito que multiplexe dos lneas(a y b) de un bit, a una sola lnea de salida de un bit.

Modelo comportamental:
Mux 2x1: SOLUCION: ENTITY mux2 IS PORT ( a, b: IN BIT; selec: IN BIT; salida: OUT BIT); END mux2; ARCHITECTURE comportamental OF mux2 IS BEGIN PROCESS (a, b, selec) Un bloque PROCESS, se considera como BEGIN una subrutina cuyas instrucciones se ejecutan secuencialmente cada vez que IF (selec = 0) THEN algunas de las seales de la lista sensible salida <= a; cambia. Esta lista sensible es una lista de ELSE seales que se suele poner junto a la palabra PROCESS, como en el ejemplo es (a, b, salida <= b; selec). END IF; END PROCESS; END comportamental;

Flujo de datos:
Mux 2x1: tabla caracterstica:

SELEC 0 1

SALIDA a b
Expresin de la salida: Salida = a(selec) + b(selec)

Luego el programa en VHDL es:

ENTITY mux2x1 IS PORT (a,b: in bit; selec: in bit; salida: out bit); END mux2x1; ARCHITECTURE mux OF mux2x1 IS BEGIN Salida <= ((a and (not selec)) or (b and selec)); END mux;

Estructural:
Mux 2x1.
ENTITY Mux2x1 IS PORT (a,b: IN bit; selec: IN bit; salida: OUT bit); END Mux2x1; --**************************** ARCHITECTURE estructural OF Mux2x1 IS SIGNAL nosel, ax, bx : bit; COMPONENT and2 PORT (e1,e2: IN bit; y: OUT bit); END COMPONENT; COMPONENT or2 PORT(e1,e2: IN bit; y: OUT bit); END COMPONENT; COMPONENT inv PORT(e: IN bit; y: OUT bit); END COMPONENT; BEGIN u0: inv PORT MAP (e=>selec, y=>nosel); u1: and2 PORT MAP (e1=>a, e2=>nosel, y=>ax); u2: and2 PORT MAP (e1=>b, e2=>sel, y=>bx); u3: or2 PORT (e1=>ax, e2=>bx,y=>salida); END estructural;

OPERADORES PREDEFINIDOS

DECLARACIN DE CONSTANTES, VARIABLES Y


SEALES Constantes: Es un elemento que se inicializa con un determinado valor y no
puede ser cambiado una vez inicializado. Ejemplo: Constant e: real:= 2.71828; Constant retraso: time:=10 ms; ********************************************************************************************

Variables: Es lo mismo que una constante con la diferencia de que se valor


puede ser alterado en cualquier momento, a las variables tambin se les puede asignar un valor inicial. Ejemplo: Variable contador : natural := 00; Variable aux: bit_vector (31 downto 00); **********************************************************************************************

Seales:

Las seales se declaran igual a las constantes y variables con la diferencia de que las seales pueden adems ser de varios tipos: normal, register y bus, por defecto son de tipo normal, a las seales tambin se les puede asignar un valor inicial. Ejemplo: Signal select: bit:= 0; Signal datos: bit_vector (7 downto 0) bus :=(00000000);

Diferencias entre seales y variables


Un bloque PROCESS es equivalente a una nica instruccin concurrente formada por numerosas instrucciones en series En un bloque PROCESS las SEALES conservan su valor y no cambian hasta que el bloque termine de ejecutarse, momento en el cual, ya tiene el valor que se les halla asignado durante la ejecucin del proceso debido a que se encontrar en el siguiente paso de simulacin. (es como si la seal tuviera un valor actual y otro valor en el estado siguiente Las variables son algo diferentes. Puesto que las variables toman su valor en el momento de la asignacin, como ocurre en otros lenguajes de programacin.

Estas diferencias se ven el siguiente ejemplo:

DIFERENCIAS ENTRE SEALES Y VARIABLES


-- Uso incorrecto de las seales
ARCHITECTURE ejemp1 OF cosa IS SIGNAL a,b,c,x,y: integer; BEGIN p1: PROCESS(a,b,c) BEGIN c<=a; -- Se ignora x<=c+2; c<=b; -- Se mantiene y<=c+2; END PROCESS p1; END ejemp1;

-- Uso correcto de las variables


ARCHITECTURE ejemp1 OF cosa IS SIGNAL a,b,x,y: integer; BEGIN p1: PROCESS(a,b) VARIABLE c: integer; BEGIN c:=a; -- Inmediato x<=c+2; c:=b; -- Inmediato y<=c+2; END PROCESS p1; END ejemp1

EJEMPLOS

DECODIFICADOR 3X8 CON HABILITACION


library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Deco3x8 is Port ( Entradas : in STD_LOGIC_VECTOR (2 downto 0); Habilitacion : in STD_LOGIC; Salidas : out STD_LOGIC_VECTOR (7 downto 0); end Deco3x8; architecture Decodificador of Deco3x8 is Begin Habilitar_deco: process(Entradas,Habilitacion) begin If (Habilitacion = '1') then case Entradas is when "000" => Salidas <= "00000001"; when "001" => Salidas <= "00000010"; when "010" => Salidas <= "00000100"; when "011" => Salidas <= "00001000"; when "100" => Salidas <= "00010000"; when "101" => Salidas <= "00100000"; when "110" => Salidas <= "01000000"; when others => Salidas <= "10000000"; end case; else Salidas <= "00000000"; end if; end process Habilitar_deco; end Decodificador;

DECODIFICADOR DE 2X4
ENTITY decod24 IS PORT (f0,f1:IN BIT; s0,s1,s2,s3:OUT BIT); END decod24; ARCHITECTURE comportamiento OF decod24 IS BEGIN PROCESS (f0,f1) BEGIN IF f0='0' and f1='0' THEN s0<='1' ; s1<='0' ; s2<='0' ; s3<='0' ; ELSIF f0='1' and f1='0' THEN s0<='0' ; s1<='1' ; s2<='0' ; s3<='0' ; ELSIF f0='0' and f1='1' THEN s0<='0' ; s1<='0' ; s2<='1' ; s3<='0' ; ELSIF f0='1' and f1='1' THEN s0<='0' ; s1<='0' ; s2<='0' ; s3<='1' ; END IF; END PROCESS; END comportamiento;

CODIFICADOR DE 4X2
ENTITY decod42 IS PORT (f0,f1,f2,f3:IN BIT; salida:OUT BIT_VECTOR(1 DOWNTO 0)); END decod42; ARCHITECTURE comportamental OF decod42 IS BEGIN PROCESS (f0,f1,f2,f3) BEGIN IF f0='1' and f1='0' and f2='0' and f3='0' THEN salida(0)<='0' ; salida(1)<='0' ; ELSIF f0='0' and f1='1' and f2='0' and f3='0' THEN salida(0)<='1' ; salida(1)<='0' ; ELSIF f0='0' and f1='0' and f2='1' and f3='0' THEN salida(0)<='0' ; salida(1)<='1' ; ELSIF f0='0' and f1='0' and f2='0' and f3='1' THEN salida(0)<='1' ; salida(1)<='0' ; ELSIF f0='0' and f1='0' and f2='0' and f3='1' THEN salida(0)<='1' ; salida(1)<='1' ; END IF; END PROCESS; END comportamental;

FLIP FLOP TIPO D


ENTITY biestable_D IS PORT(D,clk:IN BIT; Q,Q_menos: OUT BIT); END biestable_D;

ENTITY BIESTABLE_D IS PORT(D,CLK:IN BIT;Q:OUT BIT); END BIESTABLE_D; ARCHITECTURE COMPORTAMIENTO OF BIESTABLE_D IS BEGIN PROCESS(CLK) BEGIN IF CLK'EVENT AND CLK='1' THEN CASE D IS WHEN '1'=> Q<='1'; WHEN '0' => Q<='0'; END CASE; END IF; END PROCESS; END COMPORTAMIENTO;

ARCHITECTURE comportamiento OF biestable_D IS BEGIN PROCESS(CLK) BEGIN IF CLK'EVENT AND clk='1' THEN CASE D IS WHEN '1' => Q<='1'; Q_menos<='0'; WHEN '0' => Q<='0'; Q_menos<='1'; END CASE; END IF; END PROCESS; END comportamiento;

Contador ascendente de 4 bits


library ieee; use ieee.std_logic_1164.all; use work.std_arith.all; entity contador is port(clk: in std_logic; conta: buffer std_logic_vector(3 downto 0)); end contador; architecture archicontador of contador is begin process (clk) begin if (clk'event and clk= '1') then conta <= conta + 1; end if; end process; end archicontador;

Contador ascendente con carga y reset


entity contador is port(clk, load, reset:in std_logic; data: in std_logic_vector(3 downto0); conta:buffer std_logic_vector(3 downto 0)); end contador; architecture archicontador of contador is Begin process (clk,reset) begin if reset = '1' then conta <= "0000"; elsif (clk'event and clk= '1') then if load = '1' then conta <= data; else conta <= conta + 1; end if; end if; end process; end archicontador;

Diseo de una Mquina de Estados


Se trata de disear una maquina de estados que active una salida S cuando se detecta la secuencia 001... en una lnea de datos E sincronizada con un reloj. Este detector de secuencia se puede realizar con una mquina de Moore de cuatro estados. S1: Esperar el l.er Cero de la secuencia. S2: Esperar el 2.Cero de la secuencia. S3: Esperar el uno de la secuencia y activar la salida S cuando llega.

library IEEE; use IEEE.std_logic_1164.all; entity FSM is port(reset, E, clk: in bit; O: out bit); end FSM; architecture ARCH of FSM is type ESTADOS is (S1, S2, S3,S4); signal ESTADO, SIG_ESTADO: ESTADOS; Begin SINCRONO: process(clk,reset) begin if reset ='1' then ESTADO <= S1; elsif clk'event and clk='1' then ESTADO < = SIG_ESTADO; end if; end process SINCRONO; CONTROL: process(ESTADO,E) begin case ESTADO is when S1 => O <= '0'; if (E='0') then

SIG_ESTADO <= S2; else SIG_ESTADO <= S1; end if; when S2 => O <= '0'; if (E='0') then SIG_ESTADO <= S3; else SIG_ESTADO <= S1; end if; when S3 => O <= '0'; if (E='0') then SIG_ESTADO <= S3; else SIG_ESTADO <= S4; end if; when S4 => O <= '1'; if (E='0') then SIG_ESTADO <= S2; else SIG_ESTADO <= S1; end if; end case; end process control; end ARCH;

Tutorial Xilinx-ISE Manejo bsico

XILINX ISE
La herramienta XILINX ISE (Integrated Software Environment) es una herramienta de diseo profesional, que mediante la realizacin de circuitos esquemticos, o la utilizacin de lenguaje de programacin como el VHDL, nos permite la simulacin y la generacin de cdigos ejecutables para programar dispositivos lgicos.

CREACIN DE UN NUEVO PROYECTO


Un proyecto es un conjunto de ficheros, tales como esquemticos, lneas de cdigos de programa (utilizando un lenguaje de programacin), lista de conexionados, libreras de componentes, vectores de test para simulacin, etc., seleccionados para un proyecto especfico.

PARA CREAR UN NUEVO PROYECTO 1. FILE NEW PROJECT. 2. PROJECT NAME COLOCAR EL NOMBRE DEL PROYECTO 3. PROJECT LOCATION ELEGIR LA CARPETA PARA GUARDAR EL PROYECTO 4. TOP-LEVEL SOURCE TYPE SELECCIONAR EL MTODO DE TRABAJO, SCHEMATIC O HDL (SI UTILIZA LENGUAJE DE PROGRAMACIN VHDL) 5. NEXT

1. FAMILY: SELECCIONAR SEGN DISPOSITIVO A PROGRAMAR,


CDLP(XC9500XL CPLDS ) O FPGA (SPARTAN3E) 2. DEVICE: CPLD ( XC9572XL) O FPGA(XC3500E) 3. PACKAGE: CPLD (PC44) O FPGA (FG320) 4. PREFERRED LANGUAGE: VHDL 5. NEXT

1. NEW SOURCE: SELECCIONAR LA FUENTE DEL PROYECTO 2. EN LA NUEVA VENTANA QUE SE DESPLIEGA SELECCIONAR: SHEMATIC (ESQUEMTICOS) VHDL MODULE SEGN EL MTODO SELECCIONADO ANTERIORMENTE. 3. FILE NAME: ESCRIBA EL NOMBRE DEL ARCHIVO 4. NEXT

1. ENTITY NAME: DIGITE EL NOMBRE DE LA ENTIDAD. 2. ARCHITECTURE NAME: DIGITE UN NOMBRE PARA LA ARQUITECTURA (OJAL NOMBRES COHERENTES CON EL PROYECTO) 3. PORT NAME: ASIGNE EL NOMBRE DE LOS PUERTOS DE ENTRADAS Y SALIDAS 4. SELECIONE LA OPCIN UNA DE LAS OPCIONES, IN, OUT, INOUT SEGN EL DISEO DEL PROYECTO. 5. SI UTILZA VECTORES DE ENTRADA O SALIDA HABILITE LA OPCIN DE BUS Y DIGITE CUAL ES EL BIT MAS SIGNIFICATIVO Y EL MENOS SIGNIFICATIVO (POR EJEMPLO SI EL VECTOR ES DE 8 BITS, ENTONCES MSB = 7 Y LSB = 0) 6.NEXT

1. RESUMEN DEL PROYECTO PARA SU REVISIN, SI EXISTE


ALGN ERROR OPRIMA

BACK PARA REGRESAR Y CORREGIR 2. PRESIONE EL BOTN FINISH

OPCIN PARA CREAR UN NUEVO PROYECTO Y UN NUEVO ARCHIVO FUENTE, EN NUESTRO CASO OPRIMA NEXT, NEXT.

VENTANA DONDE SE MUESTRA LAS ESPECIFICACIONES DEL PROYECTO. OPRIMA FINISH.

EMPIECE A DESARROLLAR EL PROGRAMA (ARQUITECTURA) UTILIZANDO EL LENGUAJE VHDL Y DESPUS PROCEDA A GENERAR EL ARCHIVO DE PROGRAMACIN (GENERATE PROGRAMMING FILE) (EJEMPLO DEMOSTRATIVO)

PROGRAMA TOTALMENTE
COMPILADO

TERMINADO Y

Potrebbero piacerti anche