Tema4VHDL[1]

download Tema4VHDL[1]

of 44

Transcript of Tema4VHDL[1]

  • 1VHDL 1

    VHDL VHDL VHDL

    IngenieraIngeniera dede TelecomunicacinTelecomunicacinSusana Borromeo Lpez

    Electrnica Digital IIElectrnica Digital II

    Ingeniera de Telecomunicacin

    Introduccin al VHDL 2Electrnica Digital II

    Indice1. Conceptos bsicos2. VHDL para sntesis3. VHDL para simulacin4. VHDL estructural

  • 2Introduccin al VHDL 3Electrnica Digital II

    199519951995 199819981998 200120012001 200420042004 200720072007 201020102010Tamao de

    las pistas (m)Tamao deTamao de

    las pistas (las pistas (m)m) 0.350.35 0.250.25 0.180.18 0.130.13 0.100.10 0.070.07Tamao de

    los dados (cm2)Tamao deTamao de

    los dados (cmlos dados (cm22)) 2.52.5 3.03.0 3.63.6 4.34.3 5.25.2 6.36.3

    Memorias(#bits)

    MemoriasMemorias(#bits)(#bits) 64M64M 256M256M 1G1G 4G4G 16G16G 64G64G

    Circuitos lgicos(#transistores)

    Circuitos lgicosCircuitos lgicos(#transistores)(#transistores) 10M10M 21M21M 46M46M 110M110M 260M260M 570M570M

    Frecuencia(MHz)

    FrecuenciaFrecuencia((MHzMHz)) 300300 450450 600600 800800 10001000 11001100

    N entradas ysalidas

    N entradas yN entradas ysalidassalidas 512512 512512 512512 512512 800800 10241024

    Interconexiones(m)

    InterconexionesInterconexiones(m)(m) 380380 840840 21002100 41004100 63006300 1000010000

    El futuro de los CIs (SIA Roadmap)

    Aumento en la complejidad de los circuitos Hay que disminuir los tiempos de desarrollo Hay que disminuir los costes Facilitar la gestin de equipos de diseo

    Lenguajes deDescripcin De Hardware

    Lenguajes deDescripcin De Hardware

    Introduccin al VHDL 4Electrnica Digital II

    VHDL: Caractersticas generales

    VHDL = VHSIC Hardware Description Language(VHSIC = Very High Speed Integrated Circuits)

    En diciembre de 1984 se acepta por el IEEE Standards Board y se publica su primera versin en 1987 (VHDL-87). Revisado en 1993 y 2000 (ms informacin en http://www.vhdl.org )

    Al ser un estndar es portable No es un lenguaje de programacin: con el VHDL no se programa

    sino que se codifica Independiente del dispositivo Permiten representar tanto el comportamiento como la estructura de

    los circuitos Cada diseo tiene que tener definida una interfaz (para conectarse

    con el resto de elementos) y una especificacin comportamentalprecisa (para simularlo)

    Ejecucin CONCURRENTE y SECUENCIAL

  • 3Introduccin al VHDL 5Electrnica Digital II

    Las sentencias concurrentes se

    ejecutan todas en paralelo.

    ...A

  • 4Introduccin al VHDL 7Electrnica Digital II

    Proceso de traduccin de una descripcin comportamental a unadescripcin lgica, para una tecnologa objetivo y bajo unas

    determinadas restricciones

    SntesisSntesis

    Sntesis RT

    Mapeo tecnolgico

    Optimizacin

    Descripcin VHDL

    AND

    XORFF

    NOT

    MUX

    Modelo lgico genrico Circuito lgico mapeado

    Circuito lgico optimizado

    TECTmax

    RestriccionesBiblioteca

    del fabricante

    Introduccin al VHDL 8Electrnica Digital II

    Opc

    iona

    l

    entity

    architecture

    configuration

    package

    package body

    describe el interfaz con el exterior y las caractersticas comunes de todas las posibles realizaciones de un componente

    describe la operacin del dispositivo, la funcionalidad o su estructura interna. Est asociada a una entity

    selecciona los componentes a utilizar dentro de la biblioteca dediseo

    contiene un conjunto de declaraciones de tipos y subprogramas comunes a varias unidades de diseo

    define los cuerpos de los subprogramas que se han declarado en el package al que est asociado

    Qu tiene un modelo VHDL?Qu tiene un modelo VHDL?

  • 5Introduccin al VHDL 9Electrnica Digital II

    Qu tiene un modelo VHDL?Qu tiene un modelo VHDL?

    A1

    M1

    M2M3

    A2 A3

    function SUMA (A,B: bit) return bit;constant N : integer = 16;...

    function SUMA (A,B: bit) return bit;constant N : integer = 16;......

    function SUMA (A,B: bit_vector) return bit_vector isbeginreturn CONV_BIT_VECTOR (A + B); ...

    function SUMA (A,B: bit_vector) return bit_vector isbeginreturn CONV_BIT_VECTOR (A + B); ...

    Opc

    iona

    l

    entity

    architecture

    configuration

    package

    package body

    !!

    !!

    Introduccin al VHDL 10Electrnica Digital II

    library use ..all

    Estructura bsica de un archivo fuente VHDLEstructura bsica de un archivo fuente VHDL

    entity is

    -- Declaracin de pinesend ;

    architecture of is-- Declaracin de seales internas-- Declaracin de tipos de datos definidos por el usuario-- Declaracin de componentes en caso de instanciacinbegin-- Cuerpo de la arquitectura-- Se define la funcionalidad del diseo con:-- Asignaciones concurrentes-- Procesos-- Instanciacin de componentesend ;

    Encabezamiento

    Entidad

    Arquitectura

    !!

    !!

    !!

  • 6Introduccin al VHDL 11Electrnica Digital II

    Estructura bsica de un archivo fuente VHDLEstructura bsica de un archivo fuente VHDLconfiguration of isfor

    end for;end ;

    Configuracin

    Una librera (library) es una asociacin de packages que contienen a su vez definiciones de tipos de datos, componentes, etc

    Tipo de datos y procedimientos de lectura y escritura para std_logic y std_logic_vectorstd_logic_textioieee

    Operaciones aritmticas con signo y de comparacin y conversin con std_logic_vectorstd_logic_unsignedieee

    Operaciones aritmticas con signo y de comparacin y conversin con std_logic_vectorstd_logic_signedieee

    Tipos signed y unsigned y operacionesstd_logic_arithieee

    Tipos std_logic y std_logic_vectorstd_logic_1164ieee

    Librera por defectowork

    Tipos de dato como line y texttextiostd

    Tipos bsicos de VHDL: bit, bit_vector, booleanstandardstd

    DescripcinPackageLibrera

    Packagespredefinidos

    Introduccin al VHDL 12Electrnica Digital II

    entity isport ( : ;

    ... : );

    end ;

    entity isport ( : ;

    ... : );

    end ;

    VHDL. Entidad y arquitecturaVHDL. Entidad y arquitectura

    Para cada puerto se especifica el modo y el tipoEl modo define la direccin del flujo de datos del puerto visto desde la entidad.

    INOUTINOUTBUFFER

    IN

    IN

    OUT

    INOUT

    BUFFER

    entity MUX isport( E0,E1 : in bit;

    SEL: in bit;Z : out bit);

    end MUX;

    entity MUX isport( E0,E1 : in bit;

    SEL: in bit;Z : out bit);

    end MUX;

    E0

    E1

    SEL

    Z0

    1

  • 7Introduccin al VHDL 13Electrnica Digital II

    VHDL. Entidad y arquitecturaVHDL. Entidad y arquitectura

    entity DECOD2a4 isport( E0,E1,ENABLE : in bit;

    S0,S1,S2,S3 : out bit);end DECOD2a4;

    entity DECOD2a4 isport( E0,E1,ENABLE : in bit;

    S0,S1,S2,S3 : out bit);end DECOD2a4;

    DECODIFICADOR2a4

    E0

    E1

    ENABLE

    S0S1S2S3

    entity isport ( : ;

    ... : );

    end ;

    entity isport ( : ;

    ... : );

    end ;

    Introduccin al VHDL 14Electrnica Digital II

    entity isport ( : ;

    ... : );

    end ;

    entity isport ( : ;

    ... : );

    end ;

    VHDL. Entidad y arquitecturaVHDL. Entidad y arquitectura

    sumador binario de8 bits

    SUMA8

    B(7:0) A(7:0)

    Sum(7:0)

    Cout

    entity SUMA8 isport( A : in bit_vector(7 downto 0);

    B : in bit_vector(7 downto 0);SUM : out bit_vector(7 downto 0);COUT : out bit);

    end SUMA8;

    entity SUMA8 isport( A : in bit_vector(7 downto 0);

    B : in bit_vector(7 downto 0);SUM : out bit_vector(7 downto 0);COUT : out bit);

    end SUMA8;

  • 8Introduccin al VHDL 15Electrnica Digital II

    architecture DF of MUX isbeginZ

  • 9Introduccin al VHDL 17Electrnica Digital II

    configuration MUX_conf of MUX isfor estructuralfor U1: INV use work.entity INV ( comportamental); end for;for U2,U3: AND2 use work.entity AND2 ( comportamental); end for;for U4: OR2 use work.entity OR2 ( comportamental); end for;

    end for;end MUX_conf ;

    architecture estructural of MUX2 is-- declaracin de componentescomponent AND2 port (I0,I1:in std_logic; o:out std_logic);

    end component;component OR2port (I0,I1:in std_logic; o:out std_logic);

    end component;component INVERSOR port (I:in std_logic; o:out std_logic);

    end component;-- declaracin de sealessignal S1,S2,S3: std_logic;begin--Instanciacin de componentes U1: INVERSOR port map (SEL,S1);U2: AND2 port map (A,S1,S2);U3: AND2 port map (SEL,B,S3);U4: OR2 port map (S2,S3,Z);end estructural;

    VHDL. Descripcin estructuralVHDL. Descripcin estructural

    entity MUX isport( A,B : in bit;

    SEL : in bit;Z : out bit);

    end MUX;

    entity MUX isport( A,B : in bit;

    SEL : in bit;Z : out bit);

    end MUX;

    Describe la entidad como un conjunto de componentes

    conectados entre s por seales

    Describe la entidad como un conjunto de componentes

    conectados entre s por sealesE0

    E1

    SEL

    Z0

    1

    S2

    S3

    S1

    A

    SEL

    B

    Z

    AB

    Introduccin al VHDL 18Electrnica Digital II

    configuration identificador of identificador_entidad isfor identificador arquitectura

    for ref_componente: identificador_componenteuse librera.identificador_entidad(identificador_arquitectura)

    end for;..end for;end identificadir_configuracion ;

    VHDL. Descripcin estructuralVHDL. Descripcin estructural

  • 10

    Introduccin al VHDL 19Electrnica Digital II

    VHDL. Sumador completo para dos nmeros de 1 VHDL. Sumador completo para dos nmeros de 1 bitbit

    entity SUMA isport( A,B : in bit;

    Cin : in bit;SUM : out bit;COUT : out bit);

    end SUMA;

    entity SUMA isport( A,B : in bit;

    Cin : in bit;SUM : out bit;COUT : out bit);

    end SUMA;Full Adder

    A B

    Sum

    Cout Cin

    Ejemplo tpico de VHDL ESTRUCTURAL!!!!

    Ejemplo tpico de VHDL ESTRUCTURAL!!!!

    00001111

    00110011

    01010101

    Cin A B

    00010111

    Cout

    01101001

    Sum

    Cout = Cin (A + B) + A BSum = Cin + (A + B)

    Introduccin al VHDL 20Electrnica Digital II

    OR2AND2

    OR2

    AND2

    XOR2XOR2

    A

    B

    Cin

    Cout

    Sum

    S1

    S2

    S3

    S4

    VHDL. Sumador completo para dos nmeros de 1 VHDL. Sumador completo para dos nmeros de 1 bitbit

  • 11

    Introduccin al VHDL 21Electrnica Digital II

    OR2AND2

    OR2

    AND2

    XOR2XOR2

    A

    B

    Cin

    Cout

    Sum

    S1

    S2

    S3

    S4

    architecture ESTRUC of FA iscomponent AND2port( A, B: in bit; S: out bit);end component;component OR2port( A, B: in bit; S: out bit);end component;component XOR2port( A, B: in bit; S: out bit);end component;signal S1, S2, S3, S4: bit;

    beginC1: OR2 port map (A, B, S1);C2: AND2 port map (A, B, S2);C3: AND2 port map (S1, Cin, S3);C4: OR2 port map (S3, S2, Cout);C5: XOR2 port map (A, B, S4);C6: XOR2 port map (S4, Cin, Sum);

    end ESTRUC;

    configuration CFG_EST of FA isfor ESTRUCfor C1, C4: OR2use entity WORK.OR2(RETR);

    end for;for C2, C3: AND2use entity WORK.AND2(RETR);

    end for;for C5, C6: XOR2use entity WORK.XOR2(RETR);

    end for;end for;

    end CFG_EST;paso de parmetros por posicin

    conf

    igur

    aci

    n ex

    tern

    a

    VHDL. Sumador completo para dos nmeros de 1 VHDL. Sumador completo para dos nmeros de 1 bitbit

    Introduccin al VHDL 22Electrnica Digital II

    Modelar un divisor de 10 y basndose en ese mdulo realizar un divisor por 1000

    VHDL. Descripcin estructuralVHDL. Descripcin estructural

    DIV10 DIV10 DIV10CE CE CE

    reset reset reset

    reset

    Clk1000

    CE Clk100_enable Clk10_enable myClk1

  • 12

    Introduccin al VHDL 23Electrnica Digital II

    Descripcin estructuralDescripcin estructural

    entity divisor1000 isPort ( clk1000 : in std_logic;

    reset : in std_logic;CE : in std_logic; -- Seal de habilitacion de cuentamyclk1 : out std_logic);

    end divisor1000;

    architecture Behavioral of divisor1000 is-- Declaracin componenteCOMPONENT divisor10

    PORT(reset : IN std_logic;clk10 : IN std_logic;CE : IN std_logic; clk1 : OUT std_logic);

    END COMPONENT;-- Declaracin de sealessignal clk10_enable: std_logic;signal clk100_enable: std_logic;begin-- Instanciacin del componente

    Inst_divisor10: divisor10 PORT MAP(reset => reset ,clk10 => clk1000,CE => '1',clk1 => clk100_enable

    );-- Instanciacin del componente

    Inst_divisor100: divisor10 PORT MAP(reset => reset,clk10 => clk1000,CE => clk100_enable,clk1 => clk10_enable

    );-- Instanciacin del componente

    Inst_divisor1000: divisor10 PORT MAP(reset => reset ,clk10 => clk1000,CE => clk10_enable,clk1 => myclk1

    );end Behavioral;

    Introduccin al VHDL 24Electrnica Digital II

    ndice general de la sintaxisndice general de la sintaxisUnidades de diseoUnidades de diseo

    Entidades

    Arquitecturas

    Configuraciones

    Paquetes

    Body packages

    1 DeclaracionesDeclaraciones4

    Tipos

    Constantes

    Seales

    Variables

    Ficheros

    Alias

    Componentes

    Manejo bibliotecasManejo bibliotecas

    Library

    Use

    2 OperadoresOperadores7

    Sent. concurrentesSent. concurrentes5 Sent. secuencialesSent. secuenciales6

    SubprogramasSubprogramas

    Procedimientos

    Funciones

    3

    Subtipos

    Bloques

    Asig. concurrentes

    Ref. componentes

    Generate

    Procesos

    Asig. variables

    case

    Bucles loop y while

    If, elsif, else

    Assert

    wait

    AtributosAtributos8

    Atrib. rango

    Atrib. tipos

    Atr. seales

  • 13

    Introduccin al VHDL 25Electrnica Digital II

    ndice general de la sintaxisndice general de la sintaxisUnidades de diseoUnidades de diseo

    Entidades

    Arquitecturas

    Configuraciones

    Paquetes

    Body packages

    1 DeclaracionesDeclaraciones4

    Tipos

    Constantes

    Seales

    Variables

    Ficheros

    Alias

    Componentes

    Manejo bibliotecasManejo bibliotecas

    Library

    Use

    2 OperadoresOperadores7

    Sent. concurrentesSent. concurrentes5 Sent. secuencialesSent. secuenciales6

    SubprogramasSubprogramas

    Procedimientos

    Funciones

    3

    Subtipos

    Bloques

    Asig. concurrentes

    Ref. componentes

    Generate

    Procesos

    Asig. variables

    case

    Bucles loop y while

    If, elsif, else

    Assert

    wait

    AtributosAtributos8

    Atrib. rango

    Atrib. tipos

    Atr. seales

    Introduccin al VHDL 26Electrnica Digital II

    aparecen en entornos concurrentes o secuenciales

    son visibles en toda la arquitectura

    los puertos de E/S deben ser seales

    llevan informacin del valor y el tiempo en el que tomarn ese valor

    asignacin

  • 14

    Introduccin al VHDL 27Electrnica Digital II

    La asignacin de las seales se realiza de forma concurrenteSentencias:asignacin simpleasignacin condicionalasignacin selectiva

    Asignacin de sealesAsignacin de seales

    entity WAVEFORMS isport( SAL1 : out bit_vector(1 downto 0);

    SAL2 : out bit_vector(1 downto 0));

    end WAVEFORMS;

    architecture DF of WAVEFORMS isSAL1

  • 15

    Introduccin al VHDL 29Electrnica Digital II

    Asignacin de sealesAsignacin de seales

    Se deben cubrir todos los casos posibles de la seal SEL podr ser una salida o una seal interna (no una entrada)Las salidas de la entidad no pueden aparecer en ni en ...

    entity MUX8 isport( E : in bit_vector(7 downto 0);

    SEL: in bit_vector(2 downto 0);Y : out bit);

    end MUX8;

    architecture DF1 of MUX8 isbeginwith SEL selectY

  • 16

    Introduccin al VHDL 31Electrnica Digital II

    VHDL. Tipos de datosVHDL. Tipos de datosTipos Enumerados

    Datos que pueden tomar cualquier valor especificado en un conjunto finito o lista Boolean. Pueden tomar dos valores: True o False Bit. Pueden tomar dos valores 0 1 Std_logic. Definido en el estndar IEEE 1164. Pueden tomar como valores

    U -- Sin inicializar X -- Desconocido Fuerte, cortocircuito en simulacin 0 -- 0 lgico fuerte, equivale a Vss 1 -- 1 lgico fuerte, equivale a Vdd Z -- Alta impedancia W -- Desconocido L -- 0 lgico dbil, resistencia de pull-down H -- 1 lgico dbil, resistencia de pull-up - -- No importa se sintetiza en 0 1

    Definido por el usuario. Se suelen usar en la descripcin de mquinas de estado:type is ();type ESTADO is (VERDE, AMARILLO, ROJO); !!

    Introduccin al VHDL 32Electrnica Digital II

    VHDL. Tipos de datosVHDL. Tipos de datosTipos numricosIncluyen los tipos: natural, entero, real

    type is range literal {to| downto} literal; Integer. Los enteros se representan en VHDL con 32 bits en complemento a 2. Si no

    se acota el rango en la declaracin, las herramientas de sntesis sintetizan 32 bitssignal CONT: integer range 0 to 7

    Vectores Bit_vector. Vector de elementos tipo bit.

    signal A,B: bit_vector (0 to 7)signal C,D: bit_vector (7 downto 0)

    Se puede asignar un valor a un elemento o a un segmento del vectorC(3)

  • 17

    Introduccin al VHDL 33Electrnica Digital II

    VHDL. Tipos de datosVHDL. Tipos de datosMatricesDefinidos por el usuario:

    type is array () of ;type matriz3por4 is array (1 to 3, 1 to 4) of integer;

    Ejemplo: Modelado de una memoria de 128 posiciones de 8 bitstype DATA_WORD is array (7 downto 0) of std_logic;type ROM is array (0 to 127) of DATA_WORD;

    RegistrosFormados por un conjunto de elementos de distinto tipo.

    type is record : ; : ;end record;

    Ejemplo: type VECTORTEST is record A,B : std_logic_vector (3 downto 0);C,D: std_logic;

    end record;

    Introduccin al VHDL 34Electrnica Digital II

    Operadores Operadores OpOp DescripcinDescripcin OperandosOperandos ResultadoResultado

    ** potencia entero op enteroreal op enteroenteroreal

    abs abs numrico idem operandonot negacin bit, booleano, vector bits idem operando

    * multiplicacin

    entero op enteroreal op realfsico op enterofsico op realentero op fsicoreal op fsico

    enterorealfsicofsicofsicofsico

    / divisin

    entero op enteroreal op realfsico op enterofsico op realfsico op fsico

    enterorealfsicofsicoentero

    mod mdulo entero op entero enterorem resto entero op entero entero

    + suma numrico op numrico idem operando- resta numrico op numrico idem operando

    & concatenacin

    vector op vectorvector op elementoelemento op vectorelemento op elemento

    vectorvectorvectorvector

    Men

    or p

    rece

    den

    cia

    May

    or p

    rece

    den

    cia

  • 18

    Introduccin al VHDL 35Electrnica Digital II

    Operadores Operadores

    & concatenacin

    vector op vectorvector op elementoelemento op vectorelemento op elemento

    vectorvectorvectorvector

    OpOp DescripcinDescripcin OperandosOperandos ResultadoResultado

    sllsrlslasrarolror

    despl.lgico izq.despl. lgico der.Despl. arit. izq.despl. arit. der.rotacin izquierdarotacin derecha

    vect. bits op enterovect. bits op enterovect. bits op enterovect. bits op enterovect. bits op enterovect. bits op entero

    vector bitsvector bitsvector bitsvector bitsvector bitsvector bits

    =/==

    igual quediferente quemenor quemayor quemenor o igual quemayor o igual que

    no fichero op idemno fichero op idemno fichero op idemno fichero op idemno fichero op idemno fichero op idem

    booleanobooleanobooleanobooleanobooleanobooleano

    andornandnorxorxnor

    y lgicao lgicay lgica negadao lgica negadao exclusivao exclusiva negada

    bit,booleano,vect.bits op idembit,booleano,vect.bits op idembit,booleano,vect.bits op idembit,booleano,vect.bits op idembit,booleano,vect.bits op idembit,booleano,vect.bits op idem

    booleanobooleanobooleanobooleanobooleanobooleano

    Men

    or p

    rece

    denc

    ia M

    ayor

    pre

    cede

    ncia

    LG

    ICO

    SD

    e re

    laci

    n

    Introduccin al VHDL 36Electrnica Digital II

    AtributosAtributos

    Los atributos se aplican a una seal para obtener informacin especfica acerca de ellaevent. Aplicado a una seal de reloj detecta los flancos del relojrange. Devuelve el rango de la seal

    Atributos de seal

    Los atributos se aplican a una seal para obtener informacin especfica acerca de ellaleft. Valor izquierdo del vectorright. Valor derecho del vectorlow. Valor mnimo del vectorhigh. Valor mximo del vectorlength. Nmero de elementosrange. Devuelve el rango del vector

    Atributos de rango de vector

    Signal V : bit_vector (15 downto 0);-- Vleft es 15, Vright es 0,-- Vlow es 0 , Vhigh es 15,-- Vrange es 15 downto 0,-- Vlength es 16

    Signal V : bit_vector (15 downto 0);-- Vleft es 15, Vright es 0,-- Vlow es 0 , Vhigh es 15,-- Vrange es 15 downto 0,-- Vlength es 16

    !!

  • 19

    Introduccin al VHDL 37Electrnica Digital II

    Palabras reservadasPalabras reservadas

    A

    ABSACCESS AFTER ALIAS ALL AND ARCHITECTURE ARRAY ASSERT ATTRIBUTE

    BBEGIN BLOCKBODY BUFFER BUS

    CCASE COMPONENT CONFIGURATION CONSTANT

    D DISCONNECT DOWNTO

    EELSE ELSIF END ENTITY EXIT

    FFILE FOR FUNCTION

    GGENERATE GENERIC GUARDED

    IIF IN INOUT IS

    LLABEL LIBRARY LINKAGE LOOP

    M MAP MOD

    N

    NAND NEW NEXT NOR NOT NULL

    O

    OF ONOPEN OR OTHERS OUT

    PPACKAGE PORT PROCEDURE PROCESS

    R

    RANGE RECORD REGISTER REM REPORT RETURN

    SSELECT SEVERITY SIGNAL SUBTYPE

    TTHEN TOTRANSPORTTYPE

    UUNITS UNTIL USE

    V VARIABLE

    WWAIT WHEN WHILE WITH

    X XOR

    Introduccin al VHDL 38Electrnica Digital II

    VHDL. Sentencias de descripcinVHDL. Sentencias de descripcin

    Sentencias ConcurrentesPROCESOSSentencias de asignacin de seales

    Sentencias secuenciales (en el interior de un proceso)waitAsignacin de seales y variablesControl de flujo de ejecucinIf-then-elsecaseloop

  • 20

    Introduccin al VHDL 39Electrnica Digital II

    Un proceso (process) es una sentencia concurrente que agrupa en su interior sentencias que se ejecutan secuencialmente

    : process [()]

    begin

    end process ;

    : process [()]

    begin

    end process ;

    asignaciones de seal y variable control de flujo

    if...then...else...case...is...when...=>...while...loop...for...loop...loop...

    control de ejecucinlista de sensibilidadwait on...for...until...

    llamada a procedimientos control de la simulacin: assert

    ProcesosProcesos

    Sentencias Secuenciales

    !!

    Introduccin al VHDL 40Electrnica Digital II

    Contienen sentencias que se ejecutan secuencialmente

    Los procesos entre s se ejecutan de forma concurrente

    Un proceso comienza a ejecutarse cuando ocurre un evento en su lista de sensibilidad o se cumplen las condiciones de la sentencia wait

    Tienen que tener wait o lista de sensibilidad!!!

    Las asignaciones de variable tienen lugar de forma inmediata

    Las asignaciones de seal tienen lugar cuando se suspende el proceso

    architecture COMP of UN_EJEMPLO isbegin

    P1: process(A, C)beginif A = 1 thenB

  • 21

    Introduccin al VHDL 41Electrnica Digital II

    Contienen sentencias que se ejecutan secuencialmente

    Los procesos entre s se ejecutan de forma concurrente

    Un proceso comienza a ejecutarse cuando ocurre un evento en su lista de sensibilidad o se cumplen las condiciones de la sentencia wait

    Tienen que tener wait o lista de sensibilidad!!!

    Las asignaciones de variable tienen lugar de forma inmediata

    Las asignaciones de seal tienen lugar cuando se suspende el proceso

    ProcesosProcesos

    !!

    P1: processbeginwait on A, B;X

  • 22

    Introduccin al VHDL 43Electrnica Digital II

    entity MUX8 isport( E : in bit_vector(7 downto 0);

    SEL: in bit_vector(2 downto 0);Y : out bit);

    end MUX8;

    architecture BEHAV1 of MUX8 isbeginCOMB: process(E, SEL)beginif SEL = 000 thenY

  • 23

    Introduccin al VHDL 45Electrnica Digital II

    entity SHIFTER isport( EN: in bit;

    SAL: out bit_vector(7 downto 0));end SHIFTER;

    architecture BEHAV of SHIFTER isbeginCOMB: process (EN)variable INT: bit_vector(7 downto 0);

    beginINT(0) := EN;

    for i in 7 downto 1 loopINT(i) := INT(i-1);

    end loop;SAL

  • 24

    Introduccin al VHDL 47Electrnica Digital II

    VHDL. Sntesis de circuitos digitalesVHDL. Sntesis de circuitos digitales

    No todo el VHDL es SINTETIZABLE Tipos de datos no soportados: time, real, access, file De cara a la integracin con otros diseos deben utilizarse tipos

    estndar: std_logic o bit

    Lgica combinacional Sentencias de asignacin concurrentes PROCESOS

    Lgica secuencial If CLKevent and CLK=1 Biestables con RESET asncrono y con reset sncrono

    Introduccin al VHDL 48Electrnica Digital II

    --asignacin condicionalS1

  • 25

    Introduccin al VHDL 49Electrnica Digital II

    Recomendaciones sobre el modeladoRecomendaciones sobre el modelado

    El modelado de lgica combinacional puede realizarse mediante sentencias de asignacin concurrente o procesos.

    Usar sentencias de asignacin concurrente cuando:La lgica a modelar es simple (ej: pequeos multiplexores)Como complemento de lgica secuencial en procesosAcceso a buses triestadoNecesitamos un control preciso de la sntesis

    Usar procesos cuando:La lgica a modelar es compleja (ej: decodificadores complejos

    o lgica secuencial)Hay que tener cuidado con la inferencia de latches

    Introduccin al VHDL 50Electrnica Digital II

    CONV1: process(BDCIN)begincase BCDIN is -- abcdefgwhen 0000 => SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG SEG

  • 26

    Introduccin al VHDL 51Electrnica Digital II

    VHDL. DEMUX 3a8VHDL. DEMUX 3a8entity DEMUX3a8 isport( DataIn,Enable : in std_logic;

    Control : in std_logic_vector (2 downto 0);DataOut : out std_logic_vector (7 downto 0));

    end DEMUX3a8;

    entity DEMUX3a8 isport( DataIn,Enable : in std_logic;

    Control : in std_logic_vector (2 downto 0);DataOut : out std_logic_vector (7 downto 0));

    end DEMUX3a8;DEMUX3a8DATAIN

    CONTROL (2:0)

    DATAOUT (7:0)

    architecture Behavioral of demux3a8 issignal DataEnable: std_logic_vector (3 downto 0);signal Entrada: std_logic;beginDataEnable Entrada, others =>'0')when "1110",(5 => Entrada, others =>'0') when "1101",(4 => Entrada, others =>'0') when "1100",(3 => Entrada, others =>'0') when "1011",(2 => Entrada, others =>'0') when "1010",(1 => Entrada, others =>'0') when "1001",(0 => Entrada, others =>'0') when "1000",(others =>'0') when others;

    end Behavioral;

    architecture Behavioral of demux3a8 issignal DataEnable: std_logic_vector (3 downto 0);signal Entrada: std_logic;beginDataEnable Entrada, others =>'0')when "1110",(5 => Entrada, others =>'0') when "1101",(4 => Entrada, others =>'0') when "1100",(3 => Entrada, others =>'0') when "1011",(2 => Entrada, others =>'0') when "1010",(1 => Entrada, others =>'0') when "1001",(0 => Entrada, others =>'0') when "1000",(others =>'0') when others;

    end Behavioral;

    ENABLE

    Introduccin al VHDL 52Electrnica Digital II

    VHDL. DEMUX 3a8VHDL. DEMUX 3a8entity DEMUX3a8 isport( DataIn,Enable : in std_logic;

    Control : in std_logic_vector (2 downto 0);DataOut : out std_logic_vector (7 downto 0));

    end DEMUX3a8;

    entity DEMUX3a8 isport( DataIn,Enable : in std_logic;

    Control : in std_logic_vector (2 downto 0);DataOut : out std_logic_vector (7 downto 0));

    end DEMUX3a8;DEMUX3a8DATAIN

    CONTROL (2:0)

    DATAOUT (7:0)

    architecture Behavioral of demux3a8 issignal DataEnable: std_logic_vector (3 downto 0);signal Entrada: std_logic;beginDataEnable Entrada, others =>'0')when "1110",(5 => Entrada, others =>'0') when "1101",(4 => Entrada, others =>'0') when "1100",(3 => Entrada, others =>'0') when "1011",(2 => Entrada, others =>'0') when "1010",(1 => Entrada, others =>'0') when "1001",(0 => Entrada, others =>'0') when "1000",-- (others =>'0') when others;

    end Behavioral;

    architecture Behavioral of demux3a8 issignal DataEnable: std_logic_vector (3 downto 0);signal Entrada: std_logic;beginDataEnable Entrada, others =>'0')when "1110",(5 => Entrada, others =>'0') when "1101",(4 => Entrada, others =>'0') when "1100",(3 => Entrada, others =>'0') when "1011",(2 => Entrada, others =>'0') when "1010",(1 => Entrada, others =>'0') when "1001",(0 => Entrada, others =>'0') when "1000",-- (others =>'0') when others;

    end Behavioral;

    ENABLE

    Line 49. A value is missing in case.

    ERROR:HDLParsers:812 std_logic_vector

  • 27

    Introduccin al VHDL 53Electrnica Digital II

    entity COD8a3_prior isport( DataIn : in std_logic_vector (7 downto 0);

    DataOut : out std_logic_vector (2 downto 0);Activo : out std_logic);

    end COD8a3_prior;

    entity COD8a3_prior isport( DataIn : in std_logic_vector (7 downto 0);

    DataOut : out std_logic_vector (2 downto 0);Activo : out std_logic);

    end COD8a3_prior;

    VHDL. Codificador de 8 a 3 con prioridad (I)VHDL. Codificador de 8 a 3 con prioridad (I)

    COD8a3Con prioridad

    ACTIVO

    DATAIN (7:0) DATAOUT (2:0)

    architecture Behavioral of COD8a3_prior isbegin

    DataOut

  • 28

    Introduccin al VHDL 55Electrnica Digital II

    entity COD8a3_prior isport( DataIn : in std_logic_vector (7 downto 0);

    DataOut : out std_logic_vector (2 downto 0);Activo : out std_logic);

    end COD8a3_prior;

    entity COD8a3_prior isport( DataIn : in std_logic_vector (7 downto 0);

    DataOut : out std_logic_vector (2 downto 0);Activo : out std_logic);

    end COD8a3_prior;

    VHDL. Codificador de 8 a 3 con prioridad (II)VHDL. Codificador de 8 a 3 con prioridad (II)

    COD8a3Con prioridad

    ACTIVO

    DATAIN (7:0) DATAOUT (2:0)

    architecture Behavioral of COD8a3_prior isbegin

    P1: process (DataIn)beginif DataIn(7) = '1' then

    DataOut

  • 29

    Introduccin al VHDL 57Electrnica Digital II

    entity DECOD2a4 isport( DataIn : in std_logic_vector (1 downto 0);

    Enable : in std_logic; DataOut : out std_logic_vector (3 downto 0));

    end DECOD2a4;

    entity DECOD2a4 isport( DataIn : in std_logic_vector (1 downto 0);

    Enable : in std_logic; DataOut : out std_logic_vector (3 downto 0));

    end DECOD2a4;

    DECOD2a4

    ENABLE

    VHDL. Decodificador 2a4 (II)VHDL. Decodificador 2a4 (II)

    DATAIN (1:0) DATAOUT (3:0)architecture Behavioral of DECOD2a4 isbeginP1: process (DataIn,Enable)beginif Enable = '1' thencase DataIn is

    when "00" =>DataOutDataOutDataOutDataOut DataOut'0');

    end case;else

    DataOutDataOutDataOutDataOutDataOut DataOut'0');

    end case;else

    DataOutDataOutDataOutDataOutDataOut --DataOut'0');

    end case;else

    DataOutDataOutDataOutDataOutDataOut --DataOut'0');

    end case;else

    DataOut

  • 30

    Introduccin al VHDL 59Electrnica Digital II

    VHDL. Comparador de dos nmeros de dos bitsVHDL. Comparador de dos nmeros de dos bits

    entity comparador isport( A,B : in std_logic_vector (1 downto 0)

    AigualB,AmayorB,AmenorB : out std_logic);end comparador;

    entity comparador isport( A,B : in std_logic_vector (1 downto 0)

    AigualB,AmayorB,AmenorB : out std_logic);end comparador;

    ComparadorB(1:0)

    A(1:0)AigualB

    AmayorB

    AmenorB

    architecture comportamental of comparador isbeginAigualB

  • 31

    Introduccin al VHDL 61Electrnica Digital II

    Toda seal asignada en entre if CLKevent.... y el end if; infiere un biestableToda variable cuyo valor es ledo en alguno de los caminos de ejecucin (entre el if CLKevent... y el end if) antes de ser asignada infiere un biestableToda seal que se no asigne en alguno de los posibles caminos de ejecucin de un proceso, infiere un latch.

    Mtodo aconsejable para modelar biestables

    SEQ2: process(CLK)begin

    if CLKevent and CLK = 1thenQ

  • 32

    Introduccin al VHDL 63Electrnica Digital II

    library IEEE;use IEEE.std_logic_1164.all;

    entity DFFRN isport( CLK : in std_logic;

    RN : in std_logic;EN : in std_logic;D : in std_logic;Q : out std_logic);

    end DFFRN;

    architecture A1 of DFFRN isbegin

    SEQ: process(RN, CLK)beginif RN = 0 thenQ

  • 33

    Introduccin al VHDL 65Electrnica Digital II

    architecture TRES of SHReg isbegin

    P: process (Clk)variable V : bit_vector(7 downto 0);

    beginif clkevent and clk = 1 thenfor i in 7 downto 1 loopV(i) := Q(i-1);

    end loop;V(0) := Ent;Q

  • 34

    Introduccin al VHDL 67Electrnica Digital II

    CODIFICACIN DE ESTADOS Enumerado:

    type ESTADO is (S0,S1,S2,S3);

    One Hot Encodingtype ESTADO is (VERDE, AMARILLO, ROJO);attribute ENUM_ENCODING of ESTADO: type is 0001 0010 0100 1000;

    Sntesis de mquinas de estadosSntesis de mquinas de estados

    !!

    NO VHDL estndar

    Introduccin al VHDL 68Electrnica Digital II

    INIC0

    DET00

    DET011

    1

    00

    1

    1 0

    entity DETECTA isport( CLK : in std_logic;

    RN : in std_logic;DIN : in std_logic;SAL : out std_logic);

    end DETECTA;

    entity DETECTA isport( CLK : in std_logic;

    RN : in std_logic;DIN : in std_logic;SAL : out std_logic);

    end DETECTA;

    La salida asociado al estado

    La salida asociado al estado

    Sntesis: Mquinas de Sntesis: Mquinas de MooreMoore (I)(I)

    C.C.ENT F.F.

    C.C.SAL

  • 35

    Introduccin al VHDL 69Electrnica Digital II

    architecture MOORE of DETECTA is-- Declaracin tipo ESTADOtype ESTADO is (INIC, DET0, DET01);-- Declaracin seal de tipo estadosignal ACTUAL, SIGUE : ESTADO;begin-- proceso secuencial asignacin estadoSEQ: process(CLK, RN)beginif RN = 0 thenACTUAL

  • 36

    Introduccin al VHDL 71Electrnica Digital II

    architecture MEALY of DETECTA istype ESTADO is (INIC, DET0, DET01);signal ACTUAL, SIGUE : ESTADO;

    beginSEQ: process(CLK, RN)beginif RN = 0 thenACTUAL

  • 37

    Introduccin al VHDL 73Electrnica Digital II

    architecture behaviour of contador4_carga issignal CUENTA: std_logic_vector (3 downto 0);

    beginprocess (CLK, RN)

    beginif RN =0 then reset asncronoCUENTA

  • 38

    Introduccin al VHDL 75Electrnica Digital II

    architecture EJEMP of CONTA16 issignal CUENTA: integer range 0 to 2**16 - 1;

    beginCOUNT

  • 39

    Introduccin al VHDL 77Electrnica Digital II

    9 Usar SEALES siempre que vayan a tener visibilidad fuera del proceso en el que modifica su valor

    9 Usar VARIABLES siempre que no vayan a tener visibilidad fuera del proceso en el que se declaran y se usan

    9 Para que una variable no genere un elemento de memoria, es imprescindible que se le asigne un valor cada vez que se ejecuta el proceso.

    9 Nunca se debe depender de los valores por defecto de las seales y variables.9 Nunca se deben inicializar seales y variables en la declaracin9 Todas las seales de entrada o que se leen en el proceso deben estar en la lista de

    sensibilidad

    9 Todas las seales y variables asignadas toman un valor en cada camino de control9 Para permitir la optimizacin lgica se puede utilizar el valor -9 Es recomendable hacer la lgica secuencial con la construccin if clkevent and clk=1

    ( 0), no pudiendo aparecer ninguna otra condicin en dicha construccin.

    9 Slo debe aparecer un reloj en cada proceso secuencial. Si se tienen varios relojes, se deben poner en procesos separados.

    9 La construccin if clkevent and clk=1 ( 0) no debe estar incluida en otra construccin (por ejemplo en un loop)

    9 No introducir cdigo que genere lgica combinacional en procesos secuenciales a no ser que se utilicen variables

    Recomendaciones: modelado para sntesisRecomendaciones: modelado para sntesis

    Introduccin al VHDL 78Electrnica Digital II

    9 Conviene separar la parte secuencial de la combinacional en dos procesos distintos: El proceso secuencial modela los registros

    El proceso combinacional modela la asignacin del estado siguiente

    Las asignaciones de los valores de las salidas se pueden hacer en el proceso combinacional o en unas sentencias concurrentes

    9 Los estados se representarn con un tipo especfico para cada mquina 9 Las entradas y salidas de los bloques sern de tipo std_logic std_ulogic. Para

    asegurar que no se hacen conexiones indeseadas, se pueden usar tipos std_ulogic (no resueltos)

    9 En bloques de menor jerarqua se pueden utilizar tipos no estndar 9 Las rplicas (instances) de componentes deben tener el mismo nombre que las

    entidades a las que corresponden.

    9 Las seales de entrada que no se vayan a usar se deben poner a un valor fijo (por ejemplo -, para la optimizacin).

    9 Las seales de salida que no se vayan a usar se dejarn desconectadas.9 El sintetizador puede hacer una optimizacin ms eficiente cuando el cdigo con una

    misma funcionalidad est agrupado en funciones o procedimientos

    9 No se pueden usar llamadas recursivas9 No se deben usar dentro de subprogramas seales o variables que no hayan sido

    pasadas como parmetros en la llamada

    Recomendaciones: modelado para sntesisRecomendaciones: modelado para sntesis

  • 40

    Introduccin al VHDL 79Electrnica Digital II

    VHDL para simulacinVHDL VHDL parapara simulacinsimulacin

    Introduccin al VHDL 80Electrnica Digital II

    El VHDL fue creado para ser simulado (existe una forma estndarestndarde simular las descripciones VHDL)

    se puede definir en VHDL tanto el circuito a simular como los estmulos a aplicar

    SIMULADOR VHDL

    MODELOESTMULOS

    VHDL para simulacinVHDL para simulacin

    ... adems ...

  • 41

    Introduccin al VHDL 81Electrnica Digital II

    Modelo de tiempo definido: Simulacin dirigida por eventos Hardware concurrente: los componentes de un circuito estn siempre ACTIVOS y operan a la vez. Cmo se ejecuta un modelo concurrente en una mquina secuencial?:atravs del SIMULADOR La simulacin en VHDL es dirigida por eventos: los valores de las seales NO se evaluan en cada instante, sino cuando alguna de las seales de las que depende cambia de valor.

    VHDL: SimulacinVHDL: Simulacin

    1. Anlisis Unidades de diseo a la biblioteca de funciones Enlaces entre las distintas unidades Anlisis sintctico y de coherencia

    2. Elaboracin: se genera una red plana de procesos comunicados por seales

    3. Simulacin Secuencia de procesos Proceso gestor de elaboracin (KERNEL)

    Actualiza los valores de las seales Comprueba los procesos que deben ejecutarse Efecta el avance del tiempo

    SIMULACIN

    Introduccin al VHDL 82Electrnica Digital II

    -- generamos el relojRELOJ: process

    beginCLK

  • 42

    Introduccin al VHDL 83Electrnica Digital II

    Hay que comprobar que el circuito hace lo que debe y que no hace lo que no debe

    Siempre se comprueban:

    9 Inicializaciones9 Cambios de modo de funcionamiento9 Cobertura de cdigo (100% aconsejable)9 Interfaz con su entorno

    Simulacin: Bancos de prueba (Simulacin: Bancos de prueba (TestbenchTestbench))

    Introduccin al VHDL 84Electrnica Digital II

    Estmulos + modelo VHDLInspeccin visual de los resultados

    Estmulos + modelo VHDL + comprobador de resultadosConocimiento de los resultados a priori

    Estmulos dependientes de los resultados + modelo VHDL + comprobador de resultados

    Se pueden establecer varios niveles de verificacinSe pueden establecer varios niveles de verificacinSe pueden establecer varios niveles de verificacin

    ModeloVHDLEstmulos

    ModeloVHDLEstmulos Comprobador

    ModeloVHDLEstmulos Comprobador

    Simulacin: Cmo probar un modelo VHDLSimulacin: Cmo probar un modelo VHDL

    !!

  • 43

    Introduccin al VHDL 85Electrnica Digital II

    Simulacin: EjemploSimulacin: Ejemplo

    library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

    -- Circuito sncrono;-- Reset asncrono activo por nivel bajo;-- Cuando Load es 1 se carga con el ParrallelData;-- Cuando Shift es 1 desplaza de los bits menos significativos-- a los mas significativos e introduce SerialData en el LSB

    entity ShiftLoad isport ( clk : in std_logic;

    reset : in std_logic;Shift : in std_logic;Load : in std_logic;SerialData : in std_logic;ParallelData : in std_logic_vector(7 downto 0);DataOut : out std_logic_vector(7 downto 0));

    end ShiftLoad;

    architecture Behavioral of ShiftLoad issignal DatosInternos: std_logic_vector (7 downto 0);

    beginprocess (clk, reset)beginif reset = '0' then

    DatosInternos '0');elsif clk = '1' and clk'event then

    if Load = '1' thenDatosInternos Load,SerialData => SerialData,ParallelData => ParallelData,DataOut => DataOut);

    -- proceso que genera el relojGenCLK: processbegin

    clk

  • 44

    Introduccin al VHDL 87Electrnica Digital II

    Simulacin: EjemploSimulacin: Ejemplo-- *** Test Bench - User Defined Section ***

    tb : PROCESSBEGIN

    --Inicializacinreset