tutorial de vhdl

64
 Tutorial: Diseño digital con lenguajes de descripción material (VHDL) Dr. Andrés David García García Departamento de Mecatrónica Escuela de Diseño, Ingeniería y Arquitectura Campus Estado de México

Upload: anonymous-9fciitepr

Post on 03-Nov-2015

11 views

Category:

Documents


0 download

DESCRIPTION

tutorial basico del lenguaje vhdl, para desarrollo en cpld o fpga

TRANSCRIPT

  • Tutorial: Diseo digital con

    lenguajes de descripcin material

    (VHDL)

    Dr. Andrs David Garca Garca

    Departamento de Mecatrnica

    Escuela de Diseo, Ingeniera y Arquitectura

    Campus Estado de Mxico

  • Introduccin: Justificacin de los HDLs

    Debido a los rpidos avances en las tecnologas de integracin

    (semiconductores) de los C.I., la complejidad de los sistemas

    digitales ha aumentado rpidamente en los ltimos 30 aos.

    Objetivos:

    Reducir tiempos y costos de fabricacin

    Reducir tamaos de PCBs

    Aumentar la eficiencia de los dispositivos

    2

  • Introduccin: Evolucin Tecnolgica

    De los transistores hacia el diseo VLSI:

    Solucin: Hardware Description Languages (HDLs) 3

    Q1

    PN2222

    Q1_bis

    PN2222

    A

    B

    Q2

    PN2222

    INT

    Q3

    PN2222

    INT1

    Q4

    PN2222

    INT2

    R1

    4k

    R2

    1k

    R3

    130

    R4

    1.6k

    VDD

    C1

    0.1n1

    2

    OUTV2

    TD = 0.1u

    TF = 0.15uPW = 6uPER = 13u

    V1 = 5V

    TR = 0.15u

    V2 = 0V

    V3

    TD = 0.1u

    TF = 0.15uPW = 13uPER = 26u

    V1 = 5V

    TR = 0.15u

    V2 = 0V

    GND

    V5

    5VdcD3

    D1N4004

    0

    VV

    V

  • Introduccin: Surgimiento de VHDL

    1980

    El departamento de defensa de los Estados Unidos de Amrica lanza un

    concurso pblico con el propsito de crear una metodologa de diseo de

    circuitos de fcil documentacin (self-documenting):

    Comn para cualquier diseador,

    Independiente tecnolgicamente,

    Re-utilizable en nuevas tecnologas de semiconductor.

    El proyecto se fund dentro del programa VHSIC (Very High Speed

    Integrated Circuits) y bajo la bandera de la IEEE con el fin de generar un

    HDL estndar.

    Resultado: VHDL

    4

  • Introduccin: Surgimiento de VHDL

    1983

    VHDL: Desarrollado inicialmente con la colaboracin de IBM, TI, e

    Intermetrics.

    Grupo de trabajo de personas con experiencia en lenguajes de alto nivel

    y diseo en metodologa top-down.

    VHDL: Metodologa de diseo y manipulacin de la informacin estndar.

    Facilita desarrollar, actualizar e implementar sistemas electrnicos

    digitales. Adaptable a nuevas tecnologas una vez que la tecnologa

    actual se haya vuelto obsoleta.

    1987

    El Departamento de Defensa de EUA impone el uso de VHDL.

    La IEEE avala el estndar de VHDL bajo el nmero: IEEE1076.

    Avin-caza F-22, primer proyecto donde se exigi utilizar VHDL.

    5

  • Introduccin: Surgimiento de VHDL

    1987

    Los fabricantes de herramientas de diseo electrnico EDA (ElectronicDesign Automation) comienzan a desarrollar software de diseo y

    simulacin bajo este estndar industrial.

    1993

    Se realiza la primera revisin del estndar, lo que tiene comoconsecuencia una nueva versin del mismo: IEEE 1076 93

    1996

    Nuevas herramientas comerciales de simulacin y sntesis lgica salen almercado cumpliendo con la nueva versin del estndar IEEE 107693

    Incremento exponencial del uso de VHDL en la industria para el diseo deC.I. bajo una metodologa Top-Down.

    Desarrollo de libreras del estndar IEEE 1076.3 que permite laportabilidad de los diseos entre distintos fabricantes de EDAs.

    El estndar IEEE 1076.4 se complementa con libraras para modelarestructuras de circuitos ASIC y FPGAs: VITAL(VHDL Initiative Towards

    ASIC Libraries). 6

  • Para qu sirven los HDL?

    7

    1 si A = 0

    0 si A = 1

    A Z A

    Z

    A Z

    Modelizacin Simulacin Sntesis lgica

  • HDLs: Caractersticas

    Inspirado en lenguajes de programacin de altonivel como C, o C++ (Software) para modelar ydescribir funciones que sern implementadasfsicamente (Hardware)

    Existen 2 aspectos importantes en la descripcinde Hardware que se facilitan con el uso deHDLs:

    Modelado del comportamiento abstracto del circuitoModelado estructural a nivel fsico

    8

  • HDLs: Niveles de abstraccin

    9

    Los modelos de alto nivel permitendescribir de forma abstracta la funcin

    del HW

    Los modelos de bajo nivel describencon mas detalle las estructuras del

    HW

  • Descripcin comportamental

    10

  • Descripcin RTL

    11

  • Nivel compuertas lgicas

    12

  • Nivel de abstraccin

    VHDL permite codificar un algoritmo (como un lenguaje de altonivel).

    Los diferentes niveles de abstraccin del cdigo permiten realizaruna concepcin descendente TOP-DOWN.

    El nivel RTL (Register Transfer Logic) donde los registros sonidentificados es sintetizable. Despus de la sntesis, la herramienta

    genera la netlist, es decir, el HDL Estructural con los componentes

    de la biblioteca.

    13

    S=fft(e,64) radix1 radix2 radix3

    Sntesis

    lgicaNivel 1 Nivel 2 Nivel RTL netlist

    registros biblioteca

  • Mdulos y jerarqua: Diseo Top-Down

    Particin en varias partes del diseo

    Reduccin de la complejidad material

    Permite el trabajo en red de diseadores

    Permite el estudio de soluciones alternativas

    Permite la creacin de macros en software

    Permite la creacin de modelos de simulacin genricos

    14

  • Caractersticas de VHDL

    VHDL: Proximidad con las herramientas de diseoasistido por computadora (CAD):

    Relacin implcita con lenguajes de alto nivel como C.

    Facilidad de documentar.

    Cdigo porttil (se puede usar en diferentestecnologas o procesos).

    NO ES UN LENGUAJE COMPUTACIONAL

    15

  • Estructura del lenguaje

    16

    Cinco unidades de diseo sintetizables:

    Entity

    Architecture

    Package declaration

    Package body

    Configuration

    La Entidad, el Empaquetado y la Configuracin son unidades principales

    de diseo, visibes dentro de la librera.

    Una librera es un conjunto de unidadesde diseo.

    La Arquitectura y el Cuerpo del Empaquetado son unidades de diseo

    secundarias y no son visibles dentro de

    la librera.

    Un archivo de descripcin en VHDL consiste de una Entidad y una

    Arquitectura.

    Compilador

    Editor de Conexiones

    E A P B C

    Librera

    elaboracin

  • VHDL: Unidades de diseo y sntesis

    Entity: Descripcin de la interfaz con el mundo exterior. Aqu sedefinen las terminales que permiten a una unidad de diseocomunicarse con otras, engloba a a las terminales de Entrada,Salida, y Bidireccionales definidas en la declaracin de puertos, ycualquier parmetro o modelo general definido en la declaracin degenricos.

    Architecture: Descripcin de la funcionalidad del circuito,descripcin de la estructura del diseo, puede ser descrita encualquiera de los niveles de abstraccin (comportamenta, RTL onivel de compuertas lgicas).

    17

    Entidad del Circuito

    Arquitectura

  • VHDL: Unidades de diseo y sntesis

    Package declaration: Archivo que concentra las declaracionesrecurrentemente utilizadas dentro de una serie de diseos (tipos dedatos, sub-programas, sub-rutinas) que sern accesibles a mltiplesunidades de diseo.

    Package body: Contiene la definicin de los sub-programas, sub-rutinas, funciones y procesos declarados en el Empaquetado.

    Configuration: Asocia la Entidad a la Arquitectura para formar loscomponentes de un diseo. Permite asociar una Entidad a distintasversiones de la Arquitectura sintetizadas, lo que permite modificar lafuncionalidad sin modificar la estructura externa del circuito.

    18

  • Estructura de un cdigo en VHDLLibrary IEEE;use IEEE.std_logic_1164.ALL;

    entity NAME_OF_ENT isPort ( NAME, NAME : in type of input;

    NAME, NAME: out type of output;NAME : bidir type of bidir);

    end NAME_OF_ENT;

    architecture NAME_OF_ARC of NAME_OF_ENT issignal SIG_A, SIG_B : type of signal;variable VAR_A, VAR_B : type of variable;constan CONS_A: type of constant;type NAME_OF_TYPE is (values of type);component NAME_OF_COMP is

    port ( .; in type of input:..: out type of output);

    end component NAME_OF_COMP;Begin------ concurrent instruction ----------;------ concurrent instruction ----------;end NAME_OF_ARC;

    Definicin de Libreras

    Declaracin de la Entidad

    Definicin de la Arquitectura

    Declaraciones de:

    signalsconstantsvariablescomponentstypes

  • Estructura de un cdigo en VHDL:

    Arquitectura architecture NAME_OF_ARC of NAME_OF_ENT issignal SIG_A, SIG_B : type of signal;variable VAR_A, VAR_B : type of variable;constan CONS_A: type of constant;type NAME_OF_TYPE is (values of type);component NAME_OF_COMP is

    port ( .; in type of input:..: out type of

    output);end component NAME_OF_COMP;

    Begin------ concurrent instruction ----------;------ concurrent instruction ----------;

    process (list of sensibility)begin------ sequential instructions -----;------ sequential instructions -----;end process;

    ------ concurrent instruction ----------;end NAME_OF_ARC;

    Configuracin

    Declaraciones :

    signalsconstantsvariablescomponentstypes

    Proceso (instruccin

    concurrente)

  • Instrucciones concurrentes

    VHDL permite describir una funcin materal con la ayuda deinstrucciones concurrentes.

    Un process es un tipo de instruccin concurrente (tambin lo sonlos procedures y las functions.

    Las seales se usan para contectar entre si los procesos

    (sncronos y combinatorios) y las instrucciones concurrentes:

    21

    Proceso

    sncronoseales

    procesos

    combin.

    procesos

    combin.

    CLK

    A

    S1

    C

    B

    instr concurrente

    instr concurrenteS2

    S3

  • Estructura de VHDL

    22

    C

  • Asignacin Concurrente:

    Dentro de una arquitectura podemos asignar un valor auna seal (cable), a una variable (nodo R/W) o a una

    constante (nodo R).

    Las asignaciones concurrentes dentro de unaarquitectura de ejecutan al mismo tiempo (no es un

    cdigo sncrono):

    VAR := VAR + 1;

    SIG

  • Seales/variables

    24

    ENTITY mux ISPORT (a, b, c, selx, sely : IN BIT;

    data_out : OUT BIT);

    END mux;

    ARCHITECTURE ex OF mux ISSIGNAL sig : BIT;

    BEGIN

    sig

  • Procesos (Process)

    Un proceso es una instruccin concurrente definidacon la ayuda de instrucciones secuenciales internas alproceso.

    El proceso se activa si al menos una de las seales dela lista de sensibilidad cambia de estado lgico.

    25

    Ejemplo :

    P1 : process(X,Y)

    begin

    if X= 1 then

    Z

  • Objetos:

    26

    Los objetos deben ser declarados antes de ser utilizados Los puertos, seales, variables y constantes deben ser tipos

    (integer, real, natural, )

    La conversin implcita de tipos es imposible, se deben crear funciones de conversin

    Signal

    Port

    variable

    constant

    function

    procedure

    component

  • Tipologa

    27

    Las seales, variables y constantes deben pertencer aun tipo. Con la biblioteca STD, los tipos son:

    Files AccessComposite

    Array

    Record

    Scalar

    Enumerated

    Real Integer

    Physical

    INTEGER

    NATURAL

    POSITIVE

    BIT_VECTOR

    BIT

    BOOLEAN

  • Instruccin de afectacin. Combinatorios

    28

    S

  • Instruccin de afectacin condicional

    WHEN...ELSE

    29

    La afectacin de la seal s depende de

    condiciones descritas despues del WHEN :

    s

  • Instruccin de afectacin condicional

    WITH ... SELECT

    30

    LIBRARY ieee;

    USE ieee.std_logic_1164.all;

    ENTITY toto IS

    port(a,b,c,sel: in std_logic;

    s: out std_logic);

    END toto;

    ARCHITECTURE behavior OF toto IS

    BEGIN

    with sel select

    S

  • Ejemplo: Full Adder

    31

    entity FullAdder is

    port (X, Y, Cin: in bit; -- entradas

    Cout, Sum: out bit ); -- salidas

    end FullAdder;

    palabras

    reservadas

    comentarios

    FullAdderX

    Y

    Cin

    Sum

    Cout

  • Ejemplo: Full Adder

    32

    architecture ecuaciones of FullAdder is

    begin

    Sum

  • Componentes

    Si ya tenemos una biblioteca concomponentes ya diseados (FAs, MUXs, ),podemos utilizarlos para el diseo de otrossistemas que necesiten estos componentes yadiseados.

    Se habla de instanciamiento de componentes:crear copias de un componente paraimplementar un sistema ms complejo.

    33

  • Ejemplo: Full Adder de 4 bits

    34

    FullAdder FullAdder FullAdder FullAdderCi

    A(0) B(0)A(1)A(2)A(3) B(1)B(2)B(3)

    S(0)S(1)S(2)S(3)

    C(1)C(2)C(3)Co

    entity

  • Ejemplo: Full Adder de 4 bits

    35

    entity Adder4 is

    port (A, B : in bit_vector (3 downto 0); --entradas

    Ci : in bit; --entrada

    S : out bit_vector (3 downto 0); --salidas

    Co : out bit ); --salida

    end Adder4; Seales vectoriales A, B y S

    formadas por 4 bits

    4

    4

    A

    B

    Ci

    4S

    Co Adder4

  • Ejemplo: Full Adder de 4 bits

    36

    architecture estructura of Adder4 is

    component FullAdder

    port (X, Y, Cin : in bit; --entradas

    Cout, Sum : out bit); --salidas

    end component;

    signal C : bit_vector (3 downto 1) ; --seal interna que comunica

    --los componentes FullAdder

    begin --intanciar 4 copias de FullAdder

    FA0 : FullAdder port map ( A(0), B(0), Ci, C(1), S(0) );

    FA1: FullAdder port map ( A(1), B(1), C(1), C(2), S(1) );

    FA2: FullAdder port map ( A(2), B(2), C(2), C(3), S(2) );

    FA3: FullAdder port map ( A(3), B(3), C(3), Co, S(3) );

    end estructura;

    instancias

    de FullAdder

    FullAdder

    es un

    componente

  • La construccin de tipos y sub-tipos

    37

    type COLORES is (ROJO, AMARILLO, AZUL, VERDE, NARANJA);

    type BOOLEAN is (FALSE, TRUE);

    type BIT is ('0', '1');

    type UN_A_DIX is range 1 to 10;

    type DIX_A_UN is range 10 downto 1;

    type TAB1 is array (0 to 31) of BIT;

    type TAB2 is array (0 to 1023, 0 to 31) of BIT;

    type BIT_VECTOR is array (NATURAL range ) of BIT;

    subtype NATURAL is INTEGER range 0 to INTEGER'HIGH;

    subtype POSITIVE is INTEGER range 1 to INTEGER'HIGH;

    subtype UNO_A_DIEZ is NATURAL range (1 to 10);

    subtype DIEZ_A_UNO is NATURAL range (10 downto 1);

    Tipos diferentes

    Herencia de

    propiedades de

    tipo

  • Los operadores

    38

    Lgicos

    Relacionales

    Aditivos

    De signo

    Multiplicativos

    Diversos

    and, or, nand, nor, xor

    =, /=, =

    +, -

    & (concatenacin)

    +, -

    *, /, mod, rem

    A = (A / B) * B + (A rem B)

    signe(A rem B) = signe(A)

    abs(A rem B) < abs(B)

    (-A) / B = -(A / B) = A / (-B)

    N, A = B * N + (A mod B)

    signe(A mod B) = signe(B)

    abs(A mod B) < abs(B)** (exponente)

    abs (valor absoluto)

    not (negacin)

    Nota: Cualquier operador que implique un operador aritmtico requerir de la librera correspondiente.

  • Bibliotecas y Libreras

    39

    En VHDL es posible utilizar componentes, funciones yprocesos descritos previamente por otros diseadores opor las empresas que usan este estndar.

    Estas unidades estarn almacenadas en una biblioteca(librera) que puede ser agregada al proyecto con el finde utilizar sus componentes en un nuevo diseo.

    Los componentes se sintetizan dentro de la librera detrabajo

    El nombre lgico para una librera de trabajo es work.La localizacin fsica de este repertorio debe serespecificada en la herramienta que se utilice.

    Normalmente, las herramientas de diseo con VHDLdefinen y usan la librera work automticamente.

  • Bibliotecas

    40

    Para utilizar los componentes de una librera, sta debe ser especificada como se muestra:

    Work y Standard (o STD) son libreras siempre visibes, es decir, no se requieren especificar dentro del cdigo VHDL

    Todos los tipos de datos y funciones predefinidas en el estndar VHDL se localizan dentro del standard package que se localiza en la librera: std library

    Bit, bit vector, character, string, time, integer,

    library ;

    use ..ALL;

    library work;

    Library std;

    use std.standard.ALL;

    No necesitan ser especificadas

  • Library

    41

    Otras libreras o empaquetados requieren serespecificados al inicio del cdigo en VHDL: std_logic

    std_ulogic,

    std_logic_vector

    std_ulogic_vector

    library IEEE;

    use IEEE.STD_LOGIC_1164.ALL;

    entity

    package std_logic_1164 defined by IEEE

    Library ieee

  • Bibliotecas

    42

    Bibliotecas de ALTERA :

    Biblioteca Empaquetado DescripcinALTERA maxplus2 primitivos y macros ALTERA

    megacore megafunciones

    LPM lpm_components megafonciones LPM

    IEEE std_logic_1164 declaracin de tipo STD_LOGICstd_logic_unsigned aritmtica con vectores sin signostd_logic_signed aritmtica con vectores con signostd_logic_arith declaracin de tipos UNSIGNED y

    SIGNED. Funciones aritmticas y de conversin

    La biblioteca WORK corresponde al repertorio de trabajo del usuario:

  • Biblioteca LPM de ALTERA

    43

    Compuertaslpm_and lpm_inv lpm_bustri lpm_mux

    lpm_clshift lpm_or lpm_constant lpm_xor lpm_decode

    Circuitos aritmticoslpm_abs lpm_counter lpm_add_sub lpm_mult

    lpm_compare

    Memoriascsfifo lpm_ram_dq csdpram lpm_ram_io

    lpm_dff lpm_rom lpm_latch lpm_tff

    Estndar industrial para los parmetros y E/S de funciones lgicas

    Cdigo optimizado para las arquitecturas ALTERA

    Xilinx tiene su propia biblioteca LPM

  • VHDL para circuitos digitales

    44

    salidas

    Combinatorio :

    Secuencial :

    lgicaentradas

    Estado_flgica

    entradas D

    CLK

    estado

    Resultado para lgica secuencial

  • Lgica combinatoria

    Con la ayuda de una instruccin concurrente de afectacin. (vistos previamente)

    Con la ayuda de un proceso (process)

    Con la ayuda de instanciacin de componentes (cdigo estructural o jerrquico)

    45

    Hay varios estilos de codificacin:

  • Proceso (Process)

    Un proceso es una subrutina dentro de la arquitectura que solo se efecta (activa) cuando algunas de las seales internas a ste cambian de estado.

    Sintaxis:process (lista de sensibilidad)

    begin

    instrucciones combinatorias o

    secuenciales

    end process;

    46

  • Cdigo dentro de un proceso

    IF ... THEN

    47

    combi : process(a,b,c,sel)

    begin

    if c='0' then

    s

  • Cdigo dentro de un proceso

    CASE WHEN

    48

    combi : process(a,b,c,sel)

    begin

    case sel is

    when '0' => s s null;

    end case;

    end process;

    La expresin que sigue al CASE se evalua y

    permite la afectacin condicional de la seal s :

    Note : Este cdigo permite

    construir facilmente un

    multiplexor

    sel

    mux

    a

    b

    c

    s

  • Precauciones para procesos combinatorios

    49

    Conclusin : Nunca olvidar una seal de entrada a un proceso en la lista de

    sensibilidad

    combi :

    process(a,b,c,sel)

    begin

    if c='0' then

    s

  • Sntesis de un latch :

    50

    PROCESS(A,B)

    BEGIN

    IF A = '1' THEN

    Q

  • Operaciones aritmticas

    Por default sobre los tipos INTEGER

    Sobre tipos STD_LOGIC, UNSIGNED, STD_LOGIC_VECTOR y SIGNED utilizar la

    biblioteca IEEE1164 con las sublibreras:

    51

    std_logic_1164 Declaracin de tipos STD_LOGIC y STD_LOGIC_VECTORstd_logic_unsigned Aritmtica de tipos STD_LOGIC_VECTOR sin signostd_logic_signed Aritmtica de tipos STD_LOGIC_VECTOR con signostd_logic_arith Declaracin de UNSIGNED y SIGNED.

    Funciones aritmticas y de conversin

    Operaciones posibles : + , - , *La sntesis llama automticamente a las macrofunciones LPM

  • Lgica Sncrona

    52

    Una sola solucin : uso de un process sncronocon un solo reloj en la lista de sensibilidad

    Estado_flgicaEntradas D

    CLK

    estado

    Proceso sncrono

    Estado_fLgicaentradas D

    CLK

    estado

    Proceso sncrono= registro

    Codigo de la

    lgica

    Por separado

  • Lgica Sncrona

    Los circuitos secuenciales siempre van acompaados de una red combinacional.

    Para una sintaxis VHDL limpia SIEMPRE DEBE separarse la red combinacional de la parte secuencial

    Los procesos secuenciales van siempre dentro de un process

    Los procesos combinatorios pueden asignarse dentro de la Arquitectura, en un process, en una function o en un

    procedure53

  • Proceso sncrono elemental

    sntesis de un Flip-Flop D

    54

    PROCESS(CLK)

    BEGIN

    IF CLKevent and CLK = '1' THEN

    Q

  • Flip-Flop D con RESET sncrono

    55

    PROCESS (CLK)

    BEGIN

    IF (CLKevent and CLK = '1')

    THEN

    IF N_RST = 0 THEN

    Q

  • Flip-Flop D con RESET asncrono

    56

    PROCESS (CLK, N_RST)

    BEGIN

    IF N_RST = 0 THEN

    Q

  • Flip-Flop D con enable

    57

    PROCESS (CLK)

    BEGIN

    IF EN= 0 THEN

    NULL; -- Q

  • Ejemplo de lgica sncrona:

    el contador

    58

    ARCHITECTURE ex OF compteur IS

    SIGNAL CPT : STD_LOGIC_VECTOR(7 downto 0);

    BEGIN

    PROCESS (CLK)

    BEGIN

    IF clk = '1' THEN

    IF LOAD = '1' THEN

    CPT

  • Ejemplo de un FlipFlop JK

    59

    PROCESS(CLK, RST)

    BEGIN

    IF RST = 0 THEN

    Q

  • Mquina de estados

    60

    Mquina de MOORE :

    D

    Entradas estado

    CLK

    Estado_F

    Salidas

    Proceso combinatorio : P2Proceso combinatorio : P3

    Proceso sncrono : P1Ejemplo de cdigo :

  • Mquina de estados

    61

    ARCHITECTURE Ejemplo OF maquina_de_cafe IS

    type ST is (eleccin,pieza,moneda,cafe);

    signal estado,estado_futuro : ST;

    BEGIN

    P1 : PROCESS(CLK)

    ...estado

  • Ejemplo de mquina de estados

    62

    bas

    MON

    DES

    alto

    m d

    S1

    S3

    S0

    S2

    m='1'

    d='1'

    alto='1'bajo='1'

    MON='1'

    DES='1'

  • Ejemplo de mquina de estados

    63

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

    signal estado,estado_f : ST;

    P1: process(CLK)

    begin

    if(CLK='1') then

    estado

  • Bibliografa sugerida:

    Roth, Ch. Jr. Digital Systems Design Using VHDL.PWS Publishing Company, 2a Ed.

    Roth, Ch. Jr. Fundamentals of Logic Design, PWS Publishing Company, 2a Ed.

    Brown, Vranesic. Fundamentals of Digital Logic with VHDL, McGrawHill. 2nd edition.

    K. C. Chang. Digital Design and Modeling with VHDL and Synthesis. IEEE computer society press.

    Sjoholm, Lindh. VHDL for Designers. Prentice Hall

    64