lenguaje vhdl

Upload: sandri-guerrero

Post on 31-Oct-2015

79 views

Category:

Documents


0 download

TRANSCRIPT

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 1 -

    LENGUAJE VHDL

    1. Introduccin. ................................................................................................................................................. 2

    2. Elementos sintcticos en VHDL................................................................................................................... 3

    3. Formas de descripcin en VHDL. ............................................................................................................... 73.1. Descripcin mediante flujos de datos. ..................................................................................................... 83.2. Descripcin comportamental algortmica. ............................................................................................. 103.3. Descripcin estructural. ......................................................................................................................... 15

    4. Poniendo orden: subprogramas, paquetes y bibliotecas.......................................................................... 194.1. Funciones y procedimientos................................................................................................................... 194.2. Bibliotecas, paquetes y unidades. .......................................................................................................... 21

    5. Ejemplos de VHDL. .................................................................................................................................... 235.1. Flip-flop D sncrono............................................................................................................................... 245.2. F-F tipo D con puesta a cero y a uno asncronas.................................................................................... 245.3. Contadores. ............................................................................................................................................ 255.4. Mquinas de estado................................................................................................................................ 265.5. Salidas triestado. .................................................................................................................................... 275.6. Puertos bidireccionales. ......................................................................................................................... 27

    Bibliografa...................................................................................................................................................... 28

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 2 -

    1. Introduccin.

    Con la creciente complejidad de los diseos digitales ha aparecido una necesidad de describir uncircuito de la forma ms eficiente y prctica posible. Un lenguaje de programacin ofrece laposibilidad de un alto nivel de abstraccin y es la solucin adecuada para dicha tarea. Entre loslenguajes para la descripcin de circuitos digitales, el VHDL es el que est alcanzando mayorpopularidad, por ser un estndar y por su amplio campo de aplicacin, desde el modelado para lasimulacin de circuitos, hasta la sntesis automtica de circuitos.

    El significado de las siglas VHDL es Very high speed integrated circuit (VHSIC) HardwareDescription Language. VHDL es una forma en que los humanos y las mquinas puedan leer yentender la funcionalidad y la organizacin de sistemas hardware digitales. Las ventajas del VHDLson:

    -Permite disear y modelar un sistema en varios niveles de abstraccin: flujo de datos,estructural, algortmico.

    -Una descripcin en VHDL es independiente de la implementacin hardware final del proyecto.Puede ser sintetizado sobre una PLD o un ASIC. Incluso puede servir para simulacinexclusivamente.

    -Permite el diseo Top-Down y modular, es decir, dividir un sistema complicado en subsistemasms sencillos, tantas veces como sea necesario hasta poder resolver cada mdulo (subsistema) porseparado. Ello facilita la prueba de cada mdulo independientemente y da ms seguridad al correctofuncionamiento del sistema final. VHDL ofrece sus propias maneras de definir "subprogramas".

    -Es un estndar (IEEE Std 1076-1987, IEEE Std 1076-1993). No obstante, hay que decir quecada fabricante ofrece sus propias libreras con funciones tiles no definidas en el estndar. Por ello,el paso de un entorno de programacin a otro no es trivial. Nosotros suponemos que trabajamos conel estndar del ao 93.

    Inicialmente, VHDL fue diseado para el modelado de circuitos digitales. Su utilizacin ensntesis (implementacin hardware) no es inmediata, aunque la sofisticacin de las actualesherramientas es tal que permite implementar diseos en un alto nivel de abstraccin.

    En este curso, se explicarn los fundamentos del VHDL pensando en su utilizacin paraprogramar dispositivos de tipo PLD o FPGA. No conviene olvidar que el VHDL en s mismo noest asociado a dispositivos programables, sino que es una descripcin de un circuito en alto nivel.De cualquier modo, una descripcin que sea sintetizable es casi siempre vlida tambin parasimulacin, mientras que una descripcin para simulacin puede tener ms problemas a la hora decompilarla sobre un dispositivo hardware.

    En este captulo se introducen mediante ejemplos, la sintaxis del lenguaje, de forma que secubran los bloques ms habituales en diseo digital, intentando que rpidamente sea posible escribirprogramas tiles, por comparacin con los ejemplos dados en los apuntes. No pretende ser una guaextensa del VHDL. Para ello, y para resolver problemas concretos, es necesario acudir a labibliografa o a los manuales que cada fabricante ofrece.

    La herramienta que usaremos se denomina MaxPlusII, de la marca Altera. Es un programa queadmite entradas en VHDL, sntesis en PLD de dicha marca, as como simulacin de los ficherosfuente para programar las PLD (ficheros jedec, .jed o .pof). Es una herramienta muy potente, quetiene adems entrada con captura esquemtica, analizador de tiempos y posibilidad de interface con

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 3 -

    herramientas de otras marcas. Se puede conseguir una versin gratis (de estudiante) enwww.altera.com, que aunque obviamente no tiene todas las posibilidades de la herramientacompleta, permite el contacto con un entorno profesional.

    2. Elementos sintcticos en VHDL.

    Daremos unas breves definiciones de los elementos que se usan en VHDL

    Comentarios: empiezan por dos guiones "--" seguidos, hasta el final de lnea.

    Smbolos especiales: de un slo carcter + - / * ( ) . , : ; & ' " < > | = #de dos caracteres ** => := /= >=

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 4 -

    SLA, SRA Como el anterior pero el desplazamiento conserva el signo, el valor del bit mssignificativo.

    ROL, ROR rotacin a izquierda o a derecha. Como un desplazamiento, pero los huecos que seforman son ocupados por los bits que van saliendo.

    =, /= igualdad o desigualdad= menor, menor o igual, mayor, mayor o igualNot, and, nand, or, nor, xor, xnor.

    Tipos de datos.

    La sintaxis de VHDL es estricta con respecto a los tipos. Cualquier objeto que se defina debetener un tipo. En VHDL no existen tipos propios del lenguaje, pero existen los mecanismos parapoder definir cualquier tipo. Las libreras que se declaran al principio del programa incluyen lostipos ms habituales.

    Tipos escalares: Son tipos simples. Tienen un orden que permite usar operadoresrelacionales con ellos. Pueden ser enumerados, enteros, flotantes y fsicos.

    Enteros: Se definen incluyendo el rango.

    type index is range 7 downto 1;type integer is range 2147483648 to 2147483647; -- tipo predefinido

    Reales (coma flotante): Se deben definir tambin en un rango, pero con lmites reales.Fsicos: Datos que trabajan con magnitudes fsicas, es decir, con valor y unidades. Hay un tipo

    predefinido en VHDL que es el tiempo, time.

    Enumerados: Pueden tomar cualquier valor en una lista.

    type bit is ('0','1'); --Predefinidotype boolean is (FALSE, TRUE); -- Predefinido

    El estandar IEEE 1164 define un tipo enumerado adicional, std_ulogic, y varios subtipos. El tipostd_ulogic se define con una lista de 9 posibilidades:

    type std_ulogic is ('U', -- Sin inicializar 'X', -- Fuerza a desconocido

    '0', -- fuerza a 0'1', -- fuerza a 1'Z', -- Alta impedancia'W', -- Desconocido dbil'L', -- 0 dbil'H', -- 1 dbil'-', -- no importa);

    El subtipo std_logic proviene del std_ulogic y la lista de valores es la misma, pero este subtipotiene una funcin de resolucin (concepto en el que no entraremos). En la prctica, nosotrosusaremos muy a menudo el tipo std_logic para sntesis. Es ms amplio que el tipo bit, al incluir losestados de alta impedancia y de no importa. Para usar el subtipo std_logic hay que incluir el paquetestd_logic_1164 de la librera ieee.

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 5 -

    Tipos compuestos. Estn compuestos por tipos escalares.

    Matrices: Coleccin de elementos a los que se accede mediante un ndice.

    type word is array(31 downto 0) of bit;signal b: word;

    A los elementos de una matriz se accede mediante los ndices. Si dato es una seal de tipo word,dato(3) es el elemento 3 de dato, dato(29 downto 25) es una parte del array.

    Existen algunos tipos predefinidos.

    type bit_vector is array (natural range ) of bit;type std_logic_vector is array (natural range ) of std_logic;

    que nos permiten definir seales como:

    signal a: std_logic_vector(3 downto 0);

    Son tambin de gran importancia los tipos unsigned y signed. Representan vectores de std_logicpero considerndolos con signo. El tipo unsigned representa valores numricos positivos o cero. Eltipo signed representa valores tanto negativos como positivos en complemento a 2. Esto tiene unaimplicacin a la hora de hacer comparaciones y otras operaciones.

    signal a: unsigned(3 downto 0);

    Registros: Equivalente al tipo record de otros lenguajes.

    Subtipos.

    Es posible la definicin de subtipos como subconjuntos de tipos existentes.

    subtype raro is integer range 4 to 7;subtype id is string(1 to 20);

    Atributos.

    Los elementos en VHDL pueden tener informacin adicional basada en atributos. Estos atributosestn asociados a ciertos elementos del lenguaje y se manejan mediante la comilla simple '.

    Por ejemplo, si t es una seal de un tipo enumerado, entero, flotante o fsico, se tienen lossiguientes atributos:

    t'left lmite izquierdo del tipo leftt'rightt'low menor de los valores en tt'hight'length da el nmero de elementos de t.

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 6 -

    Un atributo importante es 'event. Da un valor booleano verdadero si acaba de ocurrir un cambioen la seal. Se usa especialmente con seales que sean de reloj:

    clk'event

    Otro atributo que aparece con frecuencia es 'range. Da el rango de un objeto limitado. Porejemplo, si definimos

    signal word: std_logic_vector(15 downto 0);

    entonces word'range es 15 downto 0

    En ciertos programas informticos, hay tambin atributos que permiten agregar informacinadicional a los objetos que se estn definiendo en VHDL. Estas informaciones adicionales sirvenpara pasar informacin a las herramientas de diseo que se estn utilizando en VHDL, por ejemplosi queremos que ciertas seales estn en determinados pines de una PLD. En MaxPlusII se realizade forma grfica.

    Seales, constantes y variables.

    Constantes.Una constante es un elemento que se inicializa a un determinado valor que no puede ser

    cambiado:

    constant indice: integer:=5;constant max_size: integer;

    En el segundo caso max_size no tiene ningn valor asociado. Esto se permite siempre y cuandoel valor sea declarado en algn otro sitio.

    Variables.Su valor puede ser alterado en cualquier instante. Es posible asignarle un valor inicial:

    variable contador: natural:=0;variable aux: bit_vector(31 downto 0);

    Las variables slo tiene sentido en bloques donde la ejecucin es en serie: subprogramas yprocesos (process).

    Seales.La seal no es un objeto del lenguaje que guarda un valor, sino que lo que hace es guardar un

    valor y hacerlo visible en el momento adecuado. Esto es, se puede decir que la seal tiene dospartes, una donde ese escribe y que almacena el valor, y otra que se lee y que no tiene por qucoincidir con lo que se acaba de escribir.

    Desde un punto de vista ms cercano al mundo de los circuitos digitales, una seal se entenderacomo un nodo en el circuito (nodo en el mismo sentido que en SPICE). Las entradas y salidas de unbloque digital deben ser definidas como seales. Asimismo, cualquier posible conexin real en elcircuito debe ser definida como seal.

    Las asignaciones de seales se realizan con el operador "

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 7 -

    La descripcin de un circuito en VHDL consta al menos de dos elementos: la entidad y laarquitectura. En la entidad se definen las seales de entrada y salida. En la arquitectura, se define loque hace el circuito. Previamente a la definicin de ambas, se pueden incluir las libreras y lospaquetes necesarios en el programa. Veamos un ejemplo.

    library ieee;use ieee.std_logic_1164.all;

    entity MUX2to1_a is port(A, B: in std_logic;Sel: in std_logic;Y: out std_logic);end MUX2to1_a;

    architecture behavior of MUX2to1_a isbeginY

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 8 -

    La diferencia ms importante entre un estilo de descripcin y el otro es que la ejecucin ointerpretacin de sentencias en flujos de datos es concurrente, es decir, las sentencias indicanconexiones o leyes que se cumplen, por tanto es como si se ejecutaran continuamente. Esta es unadiferencia clara con otros lenguajes como el C, Pascal, Fortran etc., donde la ejecucin de lassentencias es en serie. Esto ltimo significa que las sentencias son ejecutadas una tras otra por elordenador.

    Lenguajes como VHDL, pensado para describir circuitos, deben ser ante todo concurrentes. Uncircuito no se ejecuta en serie, sino que las conexiones entre componentes siempre actan. Noobstante, el lenguaje VHDL tambin permite descripciones con ejecucin en serie, que hacen msfcil la programacin en abstracto.

    3.1. Descripcin mediante flujos de datos.

    when ... else

    Se trata de una estructura concurrente. Veamos el ejemplo de un decodificador BCD a 10 lneas:

    library ieee;use ieee.std_logic_1164.all;

    entity BCD_9 is port(A: in std_logic_vector(3 downto 0);Y: out std_logic_vector(9 downto 0));

    end BCD_9;

    architecture archBCD_9 of BCD_9 isbegin

    Y

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 9 -

    entity BCD_9 is port(A: in std_logic_vector(3 downto 0);Y: out std_logic_vector(9 downto 0));

    end BCD_9;

    architecture archBCD_9 of BCD_9 isbegin

    Y

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 10 -

    entity BCD_9 is port(A: in std_logic_vector(3 downto 0);Y: out std_logic_vector(9 downto 0));

    end BCD_9;

    architecture archBCD_9 of BCD_9 isbegin

    with A select Y

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 11 -

    p1: process (a,b,c)begin if (a='1' and b='1' and c='1') then y

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 12 -

    y

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 13 -

    La ejecucin es muy simple. Primero "c" toma el valor de "a", "c:=a". Hay que hacer notar elsmbolo de asignacin ":=" para variables. Como "c" es una variable, "c" toma el valor 4 justo eneste momento. A continuacin se hace la fuente de "x" igual a "c+2", es decir "x" tomar el valor 6el prximo paso de simulacin. A continuacin se hace "c:=b", de manera que ahora "c" vale 6.Despus viene "y"puede escribirse una sentencia o un conjunto de ellas.

    library ieee;use ieee.std_logic_1164.all;

    entity mux4to1 is port(a: in std_logic_vector(3 downto 0);sel: in std_logic_vector(1 downto 0);y: out std_logic);

    end mux4to1;

    architecture archmux4to1 of mux4to1 isbegin

    p1: process (a,sel)begin

    case sel is when "00" => y y y y y

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 14 -

    bucles: process: for y while loop

    Permiten realizar bucles dentro de procesos. Tambin se ejecutan en serie.

    -- cuatro multiplexores 2 a 1 controlados por la misma entrada-- de seleccion

    library ieee; use ieee.std_logic_1164.all;

    entity cuatromux2to1 isport(

    a: in std_logic_vector(7 downto 0);sel: in std_logic;y: out std_logic_vector(1 to 4));

    end cuatromux2to1;

    architecture archcuatromux2to1 of cuatromux2to1 is

    type lineas is array (1 to 4) of std_logic_vector(1 downto 0);signal dum: lineas;

    begin

    p1: process (dum,sel)variable i: integer range 1 to 4;-- Al ser un indice de un loop

    -- esta definicion es optativabeginfor i in dum'range loop y(i)

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 15 -

    En este caso, si dum fuese de tipo lineas, un elemento de dum necesita dos ndices, dum(1,0) porejemplo, y cada elemento es un std_logic.

    Es interesante tambin la manera de referirse a una parte de una cadena, en la forma a(7 downto6), que selecciona dos elementos de la cadena total "a", definida como un std_logic_vector(7downto 0). Hacemos hincapi asmismo la definicin de seales y de tipos dentro de laarquitectura:

    type lineas is array (1 to 4) of std_logic_vector(1 downto 0);signal dum: lineas;

    La seal dum no es de salida ni de entrada. Se podra entender como un nodo interno al circuito.

    De forma anloga al for ... loop se define el while ... loop. Existe tambin la posibilidad de salirde los bucles con next y exit. (*) Nota: exit no est soportado por MaxPlusII

    3.3. Descripcin estructural.

    Este tipo de descripcin es cercano a una net-list de otras herramientas CAD. La descripcinestructural es especialmente interesante para la incorporacin de elementos de biblioteca al diseo yla realizacin de diseos jerrquicos a partir de componentes. Consideremos dos entidades,and_de_3 y or_de_n:

    library ieee;use ieee.std_logic_1164.all;entity and_de_3 is port( a,b,c: in std_logic; y: out std_logic);end and_de_3;architecture archand_de_3 of and_de_3 isbegin y

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 16 -

    yz); dum2

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 17 -

    La siguiente orden:

    u2: or_de_n port map(a=>dum1,y=>z);

    es otra asignacin usando el operador "=>", en este caso a una componente or_de_n. Como nohacemos referencia al tamao (parmetro n), se toma por defecto el definido en la entidad or_de_n,es decir, 2. En el parntesis, podemos ver otra forma de realizar una asignacin, en lugar de porposicin como en el ejemplo anterior, mediante el operador =>. Asignamos la seal "dum1" alpuerto llamado "a" de or_de_n, y la seal "z" al puerto "y". "a" e "y" son los nombres de los puertosen el componente, mientras que "dum1" y "z" son los nombres de las seales en el programaprincipal. La seal "dum1" es una seal intermedia, que no es ms que la concatenacin de "r" y"p". As obtengo un std_logic_vector, que es compatible con la definicin del puerto "a" en lacomponente "or_de_n". Si utilizo esta forma de asignacin, no necesito dar las seales en el mismoorden que en la definicin del componente.

    La siguiente orden:

    u3: or_de_n generic map(3) port map (dum2,w);

    es una puerta or de 3 entradas. Generic map (3) sirve para pasar el parmetro al componente, eneste caso se le dice que el tamao del vector de entrada es 3.

    Finalmente, la salida final, "y", no se define mediante componentes sino mediante operadoresbooleanos:

    y

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 18 -

    Es posible definir tambin las componentes and_de_3 y or_de_n en un nico programa, en lugarde en una librera. En el listado, se comenzara por las entidades y arquitecturas de cada uno deellos, repitiendo cada vez las libreras que se usen en cada entidad-arquitectura. En la arquitecturaprincipal, se definen las componentes que se van a utilizar, mediante las sentencia component.

    component and_de_3 port( a,b,c: in std_logic; y: out std_logic);end component;

    Los nombres y los modos de los puertos en estos componentes deben coincidir con los de laentidad definida para cada componente, y deben tambin colocarse en el mismo orden.

    Podemos ver un ejemplo de componente definido en el mismo programa en el siguiente cdigoque representa un sumador en serie. Adems nos sirve para ilustrar el comando for ... generateusado para hacer varias asignaciones estructurales en un bucle que dependa de un ndice:

    library ieee;use ieee.std_logic_1164.all;

    entity celdasumadora is port( a,b,cin:in std_logic; s, cout: out std_logic);end celdasumadora;

    architecture archcelda of celdasumadora isbegin s

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 19 -

    end generate;cout

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 20 -

    -Una funcin jams puede tener la instruccin wait, mientras que un procedimiento s.-En las funciones es necesario especificar qu tipo de objeto se devuelve. Como las funciones

    siempre devuelven algo, esto implica que debe existir una instruccin return en el interior delcuerpo de la funcin, seguida de una expresin, que es precisamente lo que se devuelve. El uso dereturn en procedimientos es posible, pero no lleva una expresin puesto que los procedimientos nodevuelven nada. Simplemente, interrumpe la ejecucin del procedimiento.

    -Las funciones pueden definirse en la parte de declaraciones de una arquitectura, en cuyo caso ladefinicin de la funcin sirve como declaracin de la funcin. Este es el ejemplo que se muestrams abajo. Otra manera de definirlas es declararlas en un paquete "package", incluyendo ladefinicin de la funcin en el cuerpo del paquete "package body". De esta forma, la definicin dela funcin ser visible a cualquier programa que utilice la orden use con el nombre del packagecorrespondiente. Lo mismo se aplica para los procedimientos.

    Ejemplos:

    El primer ejemplo es una clula sumadora de un bit construida con ayuda de una funcin,llamada majority. Esta funcin necesita tres parmetros, y da como resultado un bit.

    entity full_add is port( a,b,carry_in: in bit; sum, carry_out: out bit);end entity;

    architecture archfull_add of full_add is function majority (a,b,c: bit) return bit is begin return ((a and b) or (b and c) or (c and a)); end majority;

    begin sum

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 21 -

    z

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 22 -

    El texto del package se guardara en un fichero puerta.vhd, y se compilara (el compiladorreconoce que es un paquete y acta en consecuencia).

    Si ahora queremos compilar un programa principal usando and3 y orn, una vez que est escritodeberamos hacer lo siguiente antes de compilarlo:

    a) En el editor de texto, en options- user libraries, se debe dar el "path" al directorio donde estnlos bloques y el package. En nuestro caso sera "c:\ejemplo"

    b) Con el compilador activo, en interfaces-VHDL Netlist reader settings se le da el nombre a lalibrera y otra vez el "path" al directorio donde se encuentre. El nombre de la librera debe coincidircon el encabezamiento asociado a library en el programa principal. En el ejemplo del apartado 3.3.sera milibrera. Es independiente del nombre del directorio donde hayamos compilado el paquete.

    c) Ya podemos compilar el programa principal, que deber reconocer la nueva librera.

    Las libreras existentes en MaxPlus II son las siguientes, segn la ayuda on-line del propioprograma:

    File Package Library Contentsmaxplus2.vhd maxplus2 altera MAX+PLUS II primitives, macrofunctions, and selected

    megafunctions supported by VHDL.

    megacore.vhd megacore altera Pre-tested megafunctions consisting of several differentdesign files.

    std1164.vhdstd1164b.vhd

    std_logic_1164 ieee Standard for describing interconnection data types for VHDLmodeling, and the STD_LOGIC andSTD_LOGIC_VECTOR types.

    lpm_pack.vhd lpm_components lpm LPM megafunctions supported by VHDLarith.vhdarithb.vhd

    std_logic_arith ieee SIGNED and UNSIGNED types, arithmetic and comparisonfunctions for use with SIGNED and UNSIGNED types, andthe conversion functions CONV_INTEGER,CONV_SIGNED, and CONV_UNSIGNED.

    signed.vhdsignedb.vhd

    std_logic_signed ieee Functions that allow MAX+PLUS II to useSTD_LOGIC_VECTOR types as if they are SIGNED types.

    unsigned.vhdunsignedb.vhd

    std_logic_unsigned ieee Functions that allow MAX+PLUS II to useSTD_LOGIC_VECTOR types as if they are UNSIGNEDtypes.

    Algunas de estas libreras ofrecen funciones tiles. Destacamos por su especial inters:

    a) operadores sobrecargados. Se llama as a la ampliacin de una funcin u operador, paraadmitir otros tipos de entrada. Por ejemplo, el operador "+" slo est definido para operar conenteros. Si queremos sumar una cadena de bits y un entero, podemos incluir la librera que incluyela definicin de la funcin "+" ampliada. En MaxPlusII, el paquete std_logic_arith de la librera ieeeincluye la definicin del tipo unsigned (cadena de bits entendida como un nmero positivo o cero),as como la funcin "+" suma de un unsigned y un entero. Tambin se pueden sumarstd_logic_vector y enteros, si se incluyen tanto el paquete mencionado arriba como el paquetestd_logic_unsigned, que permite en ocasiones tratar al std_logic_vector como un unsigned.

    Es interesante tambin la posibilidad de cambio de tipo: paso a entero, a unsigned, a signed o astd_logic. Para ms informacin, leer la ayuda on line acerca de "conversion functions".

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 23 -

    b) Mdulos parametrizados, LPM ("library of parametrized modules). Se trata de componentes"ya hechos" que se pueden llamar mediante la orden port map. La ventaja que presentan es la granoptimizacin a la que dan lugar durante la compilacin y sntesis en una PLD.

    MAX+PLUS II offers a variety of megafunctions, including LPM functions and otherparameterized functions. Megafunctions are listed here by function. Functions indicated by anasterisk (*) are provided for backward compatibility only.

    Gates

    lpm_and lpm_invlpm_bustri lpm_muxlpm_clshift lpm_orlpm_constant lpm_xorlpm_decode muxbusmux

    Arithmetic Components

    divide* lpm_comparelpm_abs lpm_counterlpm_add_sub lpm_dividelpm_mult

    Storage Components

    altdpram* lpm_latchcsfifo lpm_shiftregdcfifo* lpm_ram_dpscfifo* lpm_ram_dqcsdpram lpm_ram_iolpm_ff lpm_romlpm_fifo lpm_dff*lpm_fifo_dc lpm_tff*

    Other Functions

    clklock pll ntsc

    Altera also offers a variety of MegaCore/OpenCore functions. These functions are available fromAltera's world-wide web site at http://www.altera.com.

    5. Ejemplos de VHDL.

    Daremos a continuacin unos ejemplos de VHDL que cubran aspectos no tratadosanteriormente, pero que se encuentran a menudo en la sntesis de circuitos.

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 24 -

    5.1. Flip-flop D sncrono.

    library ieee;use ieee.std_logic_1164.all;

    entity biestD is port(clk,d: in std_logic;q: out std_logic);end entity;

    architecture archbiestD of biestD isbegin

    p: process(clk,d) begin if clk'event and clk='1' then q

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 25 -

    sncronas. Tambin puedes verificar qu es lo que ocurre si set='1' y reset='1' El biestable se pone acero o a uno?

    5.3. Contadores.

    Contador ascendente-descendente con carga paralelo sncrona y reset asncrono:

    library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;

    entity contador is port(clk,load,up,reset: in std_logic;d: in std_logic_vector(7 downto 0);q: buffer std_logic_vector(7 downto 0));end entity;

    architecture archcontador of contador isbegin

    p: process(clk,d,q,load,up,reset)beginif reset='1' then q

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 26 -

    5.4. Mquinas de estado.

    La mquina de estado tiene una parte donde se describe la tabla de evolucin de estados, y otraparte donde se describe las salidas. Consideremos un ejemplo: dos sensores en la va del trenindican cuando pasa el tren por la va (la va es bidireccional). Los sensores se encuentran a amboslados de un cruce con una carretera. Un semforo debe ponerse en rojo cuando se detecte el pasodel tren.

    library ieee;use ieee.std_logic_1164.all;

    entity semaforo is port(rs, a,b,clk: in std_logic;sem: out std_logic);

    end;

    architecture archsemaforo of semaforo isconstant size: integer:=2; signal estado: std_logic_vector(0 to size-1); constant e1: std_logic_vector(0 to size-1):="00"; constant e2: std_logic_vector(0 to size-1):="10"; constant e3: std_logic_vector(0 to size-1):="01"; constant e4: std_logic_vector(0 to size-1):="11"; begin p1: process (clk,rs,estado,a,b) begin if rs='1' then estado if a='1' then estado

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 27 -

    Se ha definido el estado como un vector de std_logic. De esta forma, el programador eligetotalmente la codificacin del estado. La inclusin de las constantes es simplemente por motivos declaridad, pero se podra prescindir de ellas y usar las cadenas de bits.

    La funcin rising_edge() tambin detecta el flanco de subida mientras que falling_edge() detectael de bajada. Se aplica al tipo std_logic, pero no es aplicable al tipo bit.

    Otra descripcin alternativa podra ser definir un tipo con nombres de estado, ms prximos allenguaje humano. Esto se hara en la arquitectura, antes del inicio (begin):

    type tipoestado is (reposo, entra_por_a, entra_por_b, alejandose);signal estado: tipoestado;

    De esta forma, he creado un nuevo tipo que puede ser uno de los estados (de igual modo que eltipo bit puede ser 1 o 0). Defino mi seal con ese nuevo tipo, y luego puedo usar esos nombres en elprograma, en lugar de cadenas de bits o nombres de constantes. La codificacin de los estados laelegir el compilador.

    5.5. Salidas triestado.

    Consideremos ahora el caso de una salida triestado.

    library ieee;use ieee.std_logic_1164.all;

    entity triestado is port(enable,sel: in std_logic;linea: in std_logic_vector(1 downto 0);y : out std_logic);end entity;

    architecture archtriestado of triestado isbegin

    y

  • VHDL- I. Microelectrnica. Curso 01/02

    Carlos Medrano, E.U. Politcnica de Teruel - 28 -

    Consideremos el caso de un contador con las salidas en alta impedancia y con capacidad decarga por los mismos pines de salida del contador.

    library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;

    entity ldcnt is port (clk, ld, oe: in std_logic;count_out: inout unsigned(7 downto 0));

    end ldcnt;

    architecture archldcnt of ldcnt issignal count: unsigned(7 downto 0);begincounter: process (clk,ld,oe,count_out,count)

    beginif (ld='1' and oe='0') then

    count