Lenguajes de descripción Hardware

download Lenguajes de descripción Hardware

of 136

Transcript of Lenguajes de descripción Hardware

  • 8/3/2019 Lenguajes de descripcin Hardware

    1/136

    Lenguajes de descripcin Hardware

    VHDL

    Este es un libro electrnico diseado para Internet en el cual podrs

    aprender uno de los Lenguajes de Descripcin de Hardware estndar enel mundo: VHDL.

    Con este tutorial conocers a fondo todos los secretos de la sintaxis,qu pasos deberemos dar para crear nuestros primeros ejemplos, cmosimularlos y hasta implementarlos en un dispositivo de lgicaprogramable.

    Selecciona en el men de la izquierda la parte del tutorial a la quedeseas acceder.

    COMIENZO

    Teora

    En esta parte del tutorial aprenders todos los secretos de la sintaxis dellenguaje VHDL, en el cual se estudiar de una forma terica y claracmo crear un programa en VHDL. Este apartado consta de 7 leccionesdistintas:

    1. Introduccin

    o Breve resea histricao VHDL vs MSIo Qu es un PLDo Conociendo el lenguaje VHDLo Cocurrencias y seales

    2. Unidades bsicas de diseoo Cmo se declara una entidad

    Modos Tipos

    o Cmo se declara una arquitectura Estilos

    o Paqueteso Libreras (incluye exposicin de librera LPM)

    3. Objetos, tipos de datos y operacioneso Objetoso Identificadoreso Palabaras reservadaso Smbolos especiales

    http://det.bp.ehu.es/vhdl/pagina/elegir.htmhttp://det.bp.ehu.es/vhdl/pagina/completo/01.htmhttp://det.bp.ehu.es/vhdl/pagina/completo/02.htmhttp://det.bp.ehu.es/vhdl/pagina/completo/03.htmhttp://det.bp.ehu.es/vhdl/pagina/elegir.htmhttp://det.bp.ehu.es/vhdl/pagina/completo/01.htmhttp://det.bp.ehu.es/vhdl/pagina/completo/02.htmhttp://det.bp.ehu.es/vhdl/pagina/completo/03.htm
  • 8/3/2019 Lenguajes de descripcin Hardware

    2/136

    o Tipos de datoso Expresiones y operadoreso Atributos de los vectores

    4. Gramtica del lenguaje Io Sentencias secuencialeso Asignacin a sealo Asignacin a variableo Sentencia ifo Sentencia caseo Sentencia loopo Sentencia exito Sentencia nexto Sentencia nullo Sentencia waito Sentencia wait until

    5. Gramtica del lenguaje IIo Sentencias concurrenteso Sentencia processo Asignacion concurrente a sealo Asignacin concurrente condicionalo Asignacin concurrente con seleccin

    6. Interface, compilador e implementacino VHDL sintetizableo Galaxy de Cypresso Nova de Cypress

    o Grabacin de nuestros propios diseos

    Breve resea histrica

    A mediados de los aos setenta se produce una fuerte evolucin en losprocesos de fabricacin de los circuitos integrados, y junto a lastecnologas bipolares, surge la MOS (metal oxide semiconductor),principalmente la NMOS, promoviendo el desarrollo de circuitosdigitales hasta la primera mitad de los aos ochenta.

    En aquellas pocas, el esfuerzo de diseo se concentraba en los

    niveles elctricos para establecer caractersticas e interconexiones entrelos componentes bsicos a nivel de transistor. El proceso de diseo eraaltamente manual y tan solo se empleaban herramientas como elPSPICE para simular esquemas elctricos con modelos previamentepersonalizados a las distintas tecnologas.

    A medida que pasaban los aos, los procesos tecnolgicos sehacan ms y ms complejos. Los problemas de integracin iban en

    http://det.bp.ehu.es/vhdl/pagina/completo/04.htmhttp://det.bp.ehu.es/vhdl/pagina/completo/05.htmhttp://det.bp.ehu.es/vhdl/pagina/completo/06.htmhttp://det.bp.ehu.es/vhdl/pagina/completo/04.htmhttp://det.bp.ehu.es/vhdl/pagina/completo/05.htmhttp://det.bp.ehu.es/vhdl/pagina/completo/06.htm
  • 8/3/2019 Lenguajes de descripcin Hardware

    3/136

    aumento y los diseos eran cada vez ms difciles de depurar y de darmantenimiento. Inicialmente los circuitos MSI (Medium Scale Integration) y LSI (Low Scale Integration ) se disearon mediante la realizacin deprototipos basados en mdulos ms sencillos. Cada uno de estosmdulos estaba formado por puertas ya probadas, este mtodo poco a

    poco, iba quedndose obsoleto. En ese momento (finales de los aossetenta) se constata el enorme desfase que existe entretecnologa y diseo.

    La considerable complejidad de los chips que se pueden fabricar,implica unos riesgos y costes de diseo desmesurados e imposibles deasumir por las empresas. Es entonces, cuando diversos grupos deinvestigadores empiezan a crear y desarrollar los llamados "lenguajesde descripcin de hardware"cada uno con sus peculiaridades.Empresas tales como IBM con su IDL, el TI - HDL deTexas Instruments,ZEUS de General Electric, etc., as como los primeros prototipos

    empleados en las universidades, empezaron a desarrollarse buscandouna solucin a los problemas que presentaba el diseo de los sistemascomplejos.

    Sin embargo, estos lenguajes nunca alcanzaron el nivel de difusin yconsolidacin necesarios por motivos distintos. Unos, los industriales,por ser propiedad de la empresa permanecieron encerrados en ellas yno estuvieron disponibles par su estandarizacin y mayor difusin, losotros, los universitarios, perecieron por no disponer de soporte nimantenimiento adecuado.

    Alrededor de 1981 el Departamento de Defensa de los Estados Unidosdesarrolla un proyecto llamado VHSIC (Very High Speed IntegratedCircuit ) su objetivo era rentabilizar las inversiones en hardwarehaciendo ms sencillo su mantenimiento. Se pretenda con ello resolverel problema de modificar el hardware diseado en un proyecto parautilizarlo en otro, lo que no era posible hasta entonces porque no existauna herramienta adecuada que armonizase y normalizase dicha tarea,era el momento de los HDL's

    VHDL

    En 1983, IBM, Intermetrics y Texas Instruments empezaron a trabajaren el desarrollo de un lenguaje de diseo que permitiera laestandarizacin, facilitando con ello, el mantenimiento de los diseos yla depuracin de los algoritmos, para ello el IEEE propuso su estndar en1984.

    Tras varias versiones llevadas a cabo con la colaboracin de laindustria y de las universidades, que constituyeron a posteriori etapas

    http://www.ibm.com/http://www.ti.com/http://www.dod.org/http://www.ibm.com/http://www.ti.com/http://www.dod.org/
  • 8/3/2019 Lenguajes de descripcin Hardware

    4/136

    intermedias en el desarrollo del lenguaje, el IEEE public en diciembrede 1987 el estndar IEEE std 1076-1987 que constituy el punto firmede partida de lo que despus de cinco aos sera ratificado como VHDL.

    Esta doble influencia, tanto de la empresa como de la universidad,

    hizo que el estndar asumido fuera un compromiso intermedio entre loslenguajes que ya haban desarrollado previamente los fabricantes, demanera que ste qued como ensamblado y por consiguiente un tantolimitado en su facilidad de utilizacin haciendo dificultosa su totalcomprensin. Este hecho se ha visto incluso ahondado en su revisin de1993.

    Pero esta deficiencia se ve altamente recompensada por ladisponibilidad pblica, y la seguridad que le otorga el verse revisada ysometida a mantenimiento por el IEEE.

    La independencia en la metodologa de diseo, su capacidaddescriptiva en mltiples dominios y niveles de abstraccin, suversatilidad para la descripcin de sistemas complejos, su posibilidad dereutilizacin y en definitiva la independencia de que goza con respectode los fabricantes, han hecho que VHDL se convierta con el paso deltiempo en el lenguaje de descripcin de hardware porexcelencia

    Qu es un PLD (Dispositivo de Lgica Programable)

    Un dispositivo lgico programable es un circuito integrado, formado por

    una matriz de puertas lgicas y flip-flops, que proporcionan una solucional diseo de forma anlogas, a las soluciones de suma de productos,productos de sumas y multiplexores.

    La estructura bsica de una PLD permite realizar cualquier tipo decircuito conbinacional basndose en una matriz formada por puertasAND, seguida de una matriz de puertas OR. Tres son los tipos msestendidos de PLD's, la PROM, PLA, y la PAL.

    PROM (Programmable Read Only Memory)

    Este tipo de dispositivo se basa en la utilizacin de una matriz AND fija,seguida de una matriz OR programable. La matriz programable estaformada por lneas distribuidas en filas y columnas en las cuales lospuntos de cruce quedaran fijos por unos diodos en serie con unosfusibles que sern los encargados de aislar las uniones donde no serequiera la funcion lgica.

  • 8/3/2019 Lenguajes de descripcin Hardware

    5/136

    La fase de programacin se realiza haciendo circular una corrientecapaz de fundir el fusible en aquellas uniones donde no se deseecontinuidad. Por otra parte, para cada combinacion de las seales deentrada, el codificador activa una nica fila y a su vez activa aquellacolumna a las que esta todava unida a travz del diodo.

    PLA (Programmable Logic Array)

    Parecido en la dispositivo a la PROM, difiere de esta, en que aqu en laPLD , ambas matrices, la de puertas And, as como la de puertas Or esprogramable, por lo que nos vemos habilitados a incrementar el nmerode entradas disponibles, sin aumentar el tamao de la matriz. Estaestructura permite una mejor utilizacin de los recursos disponibles enel circuito integrado, de tal forma que se genera el mnimo numero de

    trminos necesarios para generar una funcin lgica .

    PAL (Programmable array Logic)

    Una PAL es diferente de una PROM a causa de que tiene una red Yprogramable y una red O fija. Con un programador Prom podemosobtener los productos fundamentales deseados quemando los eslabonesy luego conseguir la suma lgica de dichos productos mediante lasconexiones fijas de salida.

    Encapsulado tpico de una PLD

    http://det.bp.ehu.es/vhdl/pagina/completo/01-01.htm
  • 8/3/2019 Lenguajes de descripcin Hardware

    6/136

    Conociendo el lenguaje VHDL

    El lenguaje VHDL est creado especficamente para el diseo dehardware, es decir, podremos implementar con l multitud de circuitos

    lgicos, tanto combinacionales como secuenciales. ste lenguajetambin nos permite describir elementos ms complejos, como CPU's(Unidad Central de Procesamiento), manejar ficheros, retrasos en eltiempo, etc. pero no siempre se puede implementarlos; tan slo, y ensegn que casos, se llegar a la simulacin. Este libro se centra en elVHDL sintetizable, es decir, con el que es posible llegar a grabar undispositivo lgico programable.

    Un programa en VHDL consta de dos partes. La primera, la entidad,nos sirve para relacionar nuestro diseo con el mundo exterior, es decir,analizamos lo que tratamos de crear como una "caja negra", de la queslo conocemos sus entradas, sus salidas y la disposicin de las mismas.

    La segunda parte, la arquitectura, describe como trata el circuito lainfomacin correspondiente a las entradas para obtener las salidas.

    Sentencias concurrentes y secuenciales

    Para iniciarnos correctamente en el aprendizaje y manejo de VHDL esimportante que comprendamos desde un principio la diferencia entreconcurrente y secuencial.

    El concepto de concurrencia, se ve claramente graficado en loscircuitos electrnicos donde los componentes se encuentran siempreactivos, existiendo una asociacin intrnseca, entre todos los eventos delcircuito; ello hace posible el hecho de que si se da algn cambio en unaparte del mismo, se produce una variacin (en algunos casos casiinstntanea) de otras seales.

    Esta comportamiento de los circuitos reales obliga a que VHDLsoporte estructuras especficas para el modelado y diseo de este tipode especificaciones de tiempos y concurrencias en el cambio de lasdistintas seales digitales de los diseos.

    Por el contrario, los asignamientos secuenciales, son ms bien propiosde los SDL (soft design lenguage) en los que la programacin tiene un

    http://det.bp.ehu.es/vhdl/pagina/completo/06.htm#VHDL%20sintetizablehttp://det.bp.ehu.es/vhdl/pagina/completo/02.htm#entidadhttp://det.bp.ehu.es/vhdl/pagina/completo/02.htm#arquitecturahttp://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/06.htm#VHDL%20sintetizablehttp://det.bp.ehu.es/vhdl/pagina/completo/02.htm#entidadhttp://det.bp.ehu.es/vhdl/pagina/completo/02.htm#arquitectura
  • 8/3/2019 Lenguajes de descripcin Hardware

    7/136

    flujo natural secuencializado, siendo propio de este tipo de eventos lassentencias case, if, while, loop, etc ms propias de estas sintaxis.

    Las construcciones concurrentes del lenguaje son usadas dentro deestructuras concurrentes, por ejemplo una arquitectura tiene una

    naturaleza eminentemente concurrente (es decir que est activo todo eltiempo), mientras que el cuerpo de un process es en principioeminentemente secuencial. La asignacion de eventos secuencialesdentro de una estructura concurrente se ejecutar de formaconcurrente, es decir, al mismo tiempo que las dems sentencias.

    VHDL soporta con este motivo, tres tpos de objetos, las variables, lasconstantes y las seales . Como las variables y las seales puedenvariar su valor mientras ejecutamos un programa, sern stas lasencargadas de almacenar dichos datos, asimismo sern los portadoresde la informacin. nicamente las seales pueden tener la connotacin

    de globalidad dentro de un programa, es decir, que pueden serempleadas dentro de cualquier parte del programa a diferencia de lasvariables que solo tienen sentido en el interior de un process .

    Los process son estructuras concurrentes constituidas por sentenciasde ejecucin secuencial, esto provocar que dentro de un process nosencontremos con sentencias similares a las de los SDL (lenguajes dedescripcin de software) que nos llevan a emplear VHDL como si de otrolenguaje comn se tratara. Dentro de un process nos podemosencontrar con la declaracin y utilizacin de las variables comoparmetros locales al process .

    De ejecucin secuencial, las variables evaluan su valor dentro delcuerpo del proceso de forma inmediata, sin consumir tiempo deejecucin, pero como estn dentro de un process, que es una estructuraconcurrente, este valor no ser asumido, sino hasta el final de laejecucin de dicho process.

    Vemos el siguiente ejemplo de asignacin concurrente para seales:

    w

  • 8/3/2019 Lenguajes de descripcin Hardware

    8/136

    nuevo valor a la seal de la izquierda. Esto puede provocar quemltiples asignaciones en el cuerpo de una arquitecura se activensimultneamente, como por ejemplo, en la imagen superior, la cual secorresponde al cdigo situado a su izquierda.

    Unidades Bsicas de Diseo

    Como se declara una Entidad

    En la declaracin de entidades, se definen las entradas, salidas ytamao de un circuito, explicitando cuales son, de qu tamao (de 0 a nbits), modo (entrada, salida, ...) y tipo (integer, bit,...) . Las entidadespueden definir bien las entradas y salidas de un diseo ms grande o las

    entradas y salidas de un chip directamente. La declaracin de entidadeses anloga al smbolo esquemtico de lo que queremos implementar, elcual describe las conexiones de un componente al resto del proyecto, esdecir, si hay una entrada o puerto de 8 bits, o dos salidas o puertos de 4bits, etc. La declaracin de entidades tiene la siguiente forma:

    entity circuito_a is Cabecera del programa

    port( Se indica que a continuacin viene los puertos(o grupos seales) de entrada y/o salida

    -- puertos de entradas-- puertos de salidas-- puertos de I/O-- puertos de buffers

    Aqu se declaran las entradas y/o salidas con lasintaxis que se ver a continuacin. Las lneasempezadas por dos guiones son ignoradas porel compilador. As mismo, recordamos que elcompilador no distingue las maysculas de lasminsculas

    );end circuito_a;

    Se indica que se ha acabado la declaracin depuertos de entrada y/o salida, y que se haacabado la entidad

    Como hemos dicho, cada seal en una declaracin de entidad estreferida a un puerto (o grupo de seales), el cual es anlogo a un(os)pin(es) del smbolo esquemtico. Un puerto es un objeto de informacin,el cual, puede ser usado en expresiones y al cual se le pueden asignarvalores. A cada puerto se le debe asignar un nombre vlido. Acontinuacin se exponen algunos ejemplos:

    nombre_variable: modo tipo; Forma genrica de designar un puerto

    puertoa: inbit; El primer puerto es un bit de entrada, ysu nombre es "puertoa"

    http://det.bp.ehu.es/vhdl/pagina/completo/#modoshttp://det.bp.ehu.es/vhdl/pagina/completo/#tiposhttp://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/#modoshttp://det.bp.ehu.es/vhdl/pagina/completo/#tipos
  • 8/3/2019 Lenguajes de descripcin Hardware

    9/136

    puertob: inbit_vector(0 to 7);El segundo puerto es un vector de 8 bitsde entrada siendo el MSB el puertob(0) yel LSB el puertob(7)

    puertoc: outbit_vector(3 downto0);

    El tercer puerto es un vector de 4 bits desalida siendo el MSB el puertoc(3) y elLSB el puertoc(0)

    puertod: bufferbit; El cuarto puerto es un buffer de un solobit, cuyo nombre es "puertod"

    puertoe: inoutstd_logic; El quinto puerto es una entrada/salida deltipo estndar logic de un solo bit

    Como se puede deducir de los ejemplos anteriores, seguido delnombre del puerto y separado de ste por dos puntos, se debe indicar eltipo de puerto. El modo describe la direccin en la cual la informacin estransmitida a travs del puerto: in, out, buffer e inout. Si no se especificanada, se asume que el puerto es del modo in.

    Modo in: Un puerto es de modo in si la informacincorrespondiente al mismo, entra a la entidad y se suele usarpara relojes, entradas de control (como las tpicas load, resety enable), y para datos de entrada unidireccionales.

    Modo out: Un puerto es de modo out si la informacinfluye hacia fuera de la entidad. Este modo no permiterealimentacin ya que al declarar un puerto como outestamos indicando al compilador que el estado lgico en elque se encuentra no es leble. Esto le da una cierta

    desventaja pero a cambio consume menos recursos denuestros dispositivos lgicos programables.

    Modo buffer: Es usado para una realimentacininterna ,es decir, para usar este puerto como un driverdentro de la entidad. Este modo es similar al modo out, peroadems, permite la realimentacin y no es bidireccional, ysolo puede ser conectado directamente a una seal interna,o a un puerto de modo buffer de otra entidad. Unaaplicacin muy comn de este modo es la de salida de uncontador, ya que debemos saber la salida en el momento

    actual para determinar a salida en el momento siguiente.

    Modo inout: Es usado para seales bidireccionales, esdecir, si necesitamos que por el mismo puerto fluyainformacin tanto hacia dentro como hacia afuera de laentidad. Este modo permite la realimentacin interna ypuede reemplazar a cualquiera de los modos anteriores,

    http://det.bp.ehu.es/vhdl/pagina/completo/#no%20validoshttp://det.bp.ehu.es/vhdl/pagina/completo/#no%20validos
  • 8/3/2019 Lenguajes de descripcin Hardware

    10/136

    pudindose usar este modo para todos los puertos, peroreduciremos la lectura posterior del cdigo por otra persona,y reduciendo los recursos disponibles de la dispositivo.

    Como se ha comentado ms arriba, el lenguaje slo admite cuatro

    modos para los puertos, pero puede haber tantos tipos de seales comoqueramos, ya que los podemos crear nosotros mismos. VHDL incorporavarios tipos de forma estndar (por haber sido creado as), pudiendousar otros definidos en libreras normalizadas, y las creados por elusuario. La norma internacional IEEE 1076/93 define cuatro tipos nativospara VHDL como son:

    Tipo boolean: puede tomar dos valores: verdadero/true ofalso/false. Un ejemplo tpico es la salida de un comparadorque da verdadero si los nmeros comparados son iguales yfalso si no lo son:

    equal:outboolean;Slo puede tomar dos valores: verdadero o falso, yes de salida (darle mas operatividad a la salida deun comparador sera superfluo)

    Tipo bit: Puede tomar dos valores: 0 1 ( o tambin "low"o "high", segn se prefiera). Es el tipo ms usado de losnativos.

    Tipo bit_vector: Es un vector de bits. Debemos tenercuidado al definir el peso de los bits que lo integran, ya quesegn pongamos la palabra reservada downto o toestaremos diciendo que el bit ms significativo es el nmeroms alto o el ms bajo del vector, respectivamente..

    numero : bit_vector (0 to 7); En este caso el MSB es numero(0) ynumero(7) el LSB

    numero : bit_vector (7 downto0);

    En este caso el MSB es numero(7) ynumero(0) el LSB

    Tipo integer: Para manejar nmeros enteros. Hay que

    advertir que el uso de enteros consume muchos recursos deldipositivo de lgica programable, siempre y cuando seasintetizable, debido a que est prcticamente creado para lasimulacin.

    Pero ante la necesidad de ampliar la operatividad del tipo bit, lanorma IEEE 1164, defini un nuevo tipo llamado std_logic, std_ulogic,y sus derivados tales como std_logic_vector y std_ulogic_vector.

    http://det.bp.ehu.es/vhdl/pagina/completo/03.htm#3http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#7http://det.bp.ehu.es/vhdl/pagina/completo/03.htm#3http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#7
  • 8/3/2019 Lenguajes de descripcin Hardware

    11/136

    Como su nombre pretende indicar, es el tipo de tipo lgico estndar, quees el ms usado en la actualidad, as como en la mayora de ejemplos deeste libro.

    Como ejemplo, a continuacin se incluye la declaracin de una

    entidad correspondiente a un multiplexor de 2x1 de cuatro bits, conentrada de habilitacin o enable. El multiplexor necesita las entradas deinformacin, la seal de seleccin, la de enable y las salidas deinformacin.

    entity multi isport ( Cabecera ya estudiada arriba, en la que multies el nombre de la entidad

    enable: in bit;selec: in bit;in1: inbit_vector(3 downto 0);

    in2: inbit_vector(3 downto 0);out1:outbit_vector(3 downto0)

    enable es un bit de entrada (suficientepara habilitar o no)

    selec es otro bit de entrada, queselecciona la entrada in1 o in2, ambasde 4 bits

    out1 es de salida, que lgicamente,debe ser de la misma longitud que in1 ein2

    );end multi;

    Notes que el ltimo puerto no lleva punto ycoma al final de la lnea. Si lo llevase estaraincorrecto

    A continuacin se muestra otro ejemplo correspondiente a la entidadpara un comparador:

    entity compa isport (Cabecera de la entidad, cuyo nombre es compa

    a,b: in bit_vector(3 downto 0);igual: out bit;

    a y b son las entradas de cuatro bits

    igual es la salida de un slo bit

    );end compa;

    Se finaliza la entidad con la palabra clave end yel nombre de la misma (compa).

    Debemos recordar dos puntos ms a la hora de dar el nombre a algnpuerto, que se tratarn ms adelante en el aprtado de objetos:

    VHDL no distingue las letras maysculas de las

    minsculas, por lo que un puerto llamado por nosotros"EnTraDA" ser equivalente a otro que se llame "ENTRADA"o "entrada". Pulsa aqu para ir a una prctica donde sedemuestra esto.

    El primer carcter de un puerto slo puede ser una letra,nunca un nmero. As mismo, no pueden contener

    http://det.bp.ehu.es/vhdl/pagina/completo/06.htm#3http://det.bp.ehu.es/vhdl/pagina/completo/06.htm#3http://det.bp.ehu.es/vhdl/pagina/completo/06.htm#3http://det.bp.ehu.es/vhdl/pagina/completo/06.htm#3
  • 8/3/2019 Lenguajes de descripcin Hardware

    12/136

    caracteres especiales como $, %, ^, @, ... y dos caracteresde subrayado seguidos.

    Estos dos detalles a tener en cuenta surgieron del comit que creeste lenguaje, por lo que no se debe considerar como un fallo de nuestra

    herramienta (WARP2), sino como una caracterstica ms del lenguaje.

    Como se declara una Arquitectura

    La arquitectura indica el tipo de procesado que se realiza con lainformacin correspondiente a las seales de entrada, (declarados

    previamente en la entidad) para llegar a tener los puertos de salida(tambin declarados en la entidad). En la declaracin de arquitecturases donde reside todo el funcionamiento de un circuito, ya que es ahdonde se indica que hacer con cada entrada, para obtener la salida. Si laentidad es vista como una "caja negra", para la cual lo nico importanteson las entradas y las salidas, entonces, la arquitectura es el conjunto dedetalles interiores de la caja negra.

    La declaracin de arquitecturas debe constar de las siguientes partescomo mnimo, aunque suelen ser ms:

    architecture archpro ofprogramais

    Cabecera de la arquitectura. En sta,archpro es un nombre cualquiera (sueleempezar por "arch", aunque no esnecesario) y programa es el nombre deuna entidad existente en el mismo fichero

    -- declaracin de seales y otrosaccesorios

    Declaraciones de apoyo, que se vern en lapgina siguiente

    begin Se da comienzo al programa

    -- ncleo del programaConjunto de sentencias, bucles, procesos,funciones,... que dan operatividad alprograma.

    end archpro; Fin del programa

    Como podemos apreciar, es una estructura muy sencilla, y queguarda alguna relacin con Turbo Pascal. Las sentencias entre begin yend son las que describen el circuito, y es en lo que se centra tanto estelibro electrnico como cualquier otro que trate sobre VHDL. Acontinuacin, se muestra el cdigo fuente de un programa en VHDL deun multiplexor (esta es una de las mltiples formas de implementar un

    http://det.bp.ehu.es/vhdl/pagina/completo/03.htm#4http://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/03.htm#4
  • 8/3/2019 Lenguajes de descripcin Hardware

    13/136

    multiplexor en VHDL), el cual debe ir unido a la entidad expuesta en elapartado de la declaracin de entidades, ya que una parte sin la otracarecen de sentido.

    architecture archimulti ofmulti is

    Cabecera de la arquitectura. En esta

    ocasin el nombre de la arquitectura esarchimulti, y el de la entidad es multi, lacual est definida anteriormente.

    -- seales En este programa no se necesitan sealesbegin Comienza al programaprocess(enable,in1,in2)begin

    ifenable='0' then out1

  • 8/3/2019 Lenguajes de descripcin Hardware

    14/136

    endprocess comp;endbehavioral;

    Estilo dataflow o flujo de datos: Este estilo podremosencontrarlo de dos formas similares, pero ambas implican

    cmo la informacin ser transferida de seal a seal y de laentrada a la salida sin el uso de asignaciones secuenciales,sino concurrentes. Es decir, en este estilo no se pueden usarlos procesos. El comparador descrito de forma behavioral ode comportamiento se puede escribir usando el estilodataflow de cualquiera de las dos formas siguientes:

    architecture dataflow1 ofcompa isbegin

    igual

  • 8/3/2019 Lenguajes de descripcin Hardware

    15/136

    Estilo mixto: Es el estilo que est compuesto en mayor omenor medida de dos o ms de los estilos descritosanteriormente.

    Deberemos tener en cuenta que el cdigo VHDL que escribamos no

    siempre va a describir una funcin de forma ptima, la cual no siempreva a poder ser reducida por la herramienta de compilacin. Esto setraduce en un peor aprovechamiento de los recursos de las PLD's. Por lotanto, diferentes diseos producen diferentes, aunque equivalentes,ecuaciones de diseo, pudindose dar, sin embargo, disposicionesdiferentes de los recursos.

    Es habitual el usar el estilo estructural para descomponer un diseoen unidades manejables,siendo cada unidad diseada por equipos detrabajo distintos. El estilo estructural se usa adems para tener un gradode control alto sobre la sntesis.

    Para concluir el apartado dedicado a las arquitecturas slo resta elrecordar que tanto la entidad y la arquitectura deben ir unidas en elmismo fichero, ya que una parte carece de sentido sin la otra. Pulsa aqupara ver el proceso a seguir en la compilacin.

    Paquetes

    Un diseador de Hardware que utilice frecuentemente la mismatecnologa de diseo ha de hacerse, con el paso del tiempo, con unaresea amplia de procedures, funciones, puertas y, en general, decomponentes que emplear con frecuencia. Los packages permitenagrupar un conjunto de declaraciones para que puedan ser usadas en eldiseo de diferentes circuitos sin ser repetidas en la declaracin de cadauno.

    La estructura bsica en la declaracin de un paquete est dividida endos partes claramente diferenciadas:

    La declaracin del paquete, package: donde obtenemosuna visin externa y simplificada del componente. Ladeclaracin del paquete va precedida por la palabrareservada package y finaliza con end. En el cuerpo de ladeclaracin nos encontramos con procedures, funciones,

    http://det.bp.ehu.es/vhdl/pagina/completo/01.htm#3http://det.bp.ehu.es/vhdl/pagina/completo/06.htm#2http://det.bp.ehu.es/vhdl/pagina/completo/06.htm#2http://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/01.htm#3http://det.bp.ehu.es/vhdl/pagina/completo/06.htm#2http://det.bp.ehu.es/vhdl/pagina/completo/06.htm#2
  • 8/3/2019 Lenguajes de descripcin Hardware

    16/136

    componentes, etc. tal y como apareceran en la parte de ladeclaracin de una entidad.

    package nombre_del_package is

    -- declaracin de procedures-- declaracin de funciones-- declaracin de tipos, etc...

    end nombre_del_package;

    Esta parte es a una entidad, lo mismo que unpaquete es a un programa normal en VHDL.

    La declaracin del cuerpo del paquete, package body:especifica el funcionamiento de procedures, funciones, tipos,etc. que nos permite su implementacin, de forma similar ala arquitectura. Debe llevar las palabras reservadaspackage body.

    package bodynombre_del_package is

    -- definicin de procedures-- definicin de funciones-- definicin de tipos, etc.

    end nombre_del_package;

    Esta parte se corresponde con unaarquitectura.

    Todo esto hace posible que una vez declarados los subprogramasdentro de un package, podamos utilizarlos haciendo nicamente uso deuna llamada al proceso, asignndole un nombre y la lista de parmetrosnecesarios.

    Para poder usar o llamar a un package que ha sido descritoanteriormente, debemos incluir la clusula use antes del cuerpo de laarquitectura.

    usework.nombre del package.nombre del componente;

    Para esto se deben especificar tres cosas:

    El nombre de la librera donde se encuentra el paquete

    El nombre del paquete

    El nombre del componente que se desee habilitar

  • 8/3/2019 Lenguajes de descripcin Hardware

    17/136

    Hay ocasiones en las que deseamos habilitar todos los componentesdeclarados en un paquete, ya sea por comodidad o por no saberexactamente donde se encuentra el recurso que deseamos usar. En talcaso, haramos uso de la palabra all de la siguiente forma:

    usework.nombre del package.all;

    Como ejemplo se muestra a continuacin la declaracin de unpackage que contiene a dos componente, un contador y undecodificador.

    --Primero se declaran las libreras que se van a emplearlibrary ieee;use ieee.std_logic_1164.all;usework.std_arith.all;--Empieza la declaracin del package "UNO"

    package uno iscomponentcount port (

    clk,reset:inbit;conta :buffer std_logic_vector(1 downto 0));

    end component;component

    decoder port (seleccion :in std_logic_vector(1 downto 0);enable1,enable2:inbit;salida :out std_logic_vector(3 downto 0));

    end component;endpackage;

    --Declaracin de las estidadeslibrary ieee;use ieee.std_logic_1164.all;use work.std_arith.all;use work.uno.all;entity count isport (clk,reset:in bit;

    conta:buffer std_logic_vector(1 downto 0));end count;

    architecture archicount ofcount isbegincontador :process (clk,reset) begin if(reset='1') then conta '0') ;

  • 8/3/2019 Lenguajes de descripcin Hardware

    18/136

    elsifclk'eventand clk='1' then conta salida salida salida salida salida

  • 8/3/2019 Lenguajes de descripcin Hardware

    19/136

    Librer a LPM (Library of parametrized modules)

    La LPM fue propuesto en 1990 como una extensin del estndarElectronic Design Interface Format (EDIF) para permitir al diseador

    crear un circuito completo con independencia de la arquitectura,separando las partes fsicas y lgicas del diseo

    Cada componente en la librera esta definido por unos parmetros,que le permiten al diseador de hardware representar una ampliavariedad de variables lgicas, evitando la repeticin del trabajo.

    Un diseo basado en la utilizacin de la librera LPM (library ofparametrized modules) combina simultneamente, los aspectos propiosde un diseo en alto nivel, con las mejoras propias de la sntesis en bajonivel. Debido a que los componentes descritos en esta librera son

    aceptados por lo fabricantes, su consumo de los recurso internos vienepreviamente optimizado.

    La librera LPM System Library, en la cual se nos ofrecen mltiplesmdulos, ya creados, puede facilitarnos enormemente nuestro trabajo,ya que incluye desde el generador de constantes ms sencillo hastacontadores y multiplicadores con todas las caractersticas opcionalesposibles. La lista de componentes incluida en esta es la siguiente:

    Nombre del paqueteNombre del componente

    MCCSTNTMdulo de constantesMINVMdulo de inversores

    MANDMdulo de AND's

    MORMdulo de OR's

    MXORMdulo de XOR's

    MBUSTRIMdulo de bus triestado

    MMUXMdulo de multiplexores

    MDECODEMdulo de decodificador

    MADD_SUBMdulo desumadores/restadores

    MCOMPAREMdulo de comparadores

    MMULTMdulo de multiplicadores

    MCOUNTERMdulo de contadores

    http://det.bp.ehu.es/vhdl/pagina/completo/#top
  • 8/3/2019 Lenguajes de descripcin Hardware

    20/136

    MLATCHMdulo de latches

    MFFMdulo de flip-flops

    MSHFTREGMdulo de registros

    Para usar cualquiera de stos mdulos, slamente deberemos incluiren nuestro fichero de cdigo la siguiente lnea, encima de la declaracinde entidades y de arquitecturas:

    usework.lpmpkg.all;

    Como ejemplo crearemos un multiplicador de 4 bits (a y b), cuyoresultado, obviamente, debe se de 8 bits (p), y que nos permite ademssumarle otro nmero de ocho bits (s) al resultado. Para ello deberemosinvocar previamente a la librera lpmpkg tal y como habamos dicho:

    libraryieee;useieee.std_logic_1164.all;usework.lpmpkg.all;entity multi_lpm isport(a,b: in std_logic_vector(3 downto 0);s: in std_logic_vector(7 downto 0);p: out std_logic_vector(7 downto 0)

    );end multi_lpm;

    usework.lpmpkg.all;architecture archimulti ofmulti_lpmisbegina0: mmult genericmap(4,4,8,8)

    port map(a,b,s,p);end archimulti;

    Llamamos a lpmpkgVamos a multiplicar a y bY vamos a sumar sEl resultado es p

    Llamamos a lpmpkg

    Usamos el mdulo mmult

    En este ejemplo hemos hecho uso del mdulo mmult, el cual nosexige no slo introducirle las seales con las cuales operar (con lasentencia port map) sino tambin su dimensin (sentencia generic

    map). Pulsa aqu para ir al ejemplo del multiplicador.

    Como cada mdulo tiene unas especificaciones de entradas, salida ydimensiones distintas, tendremos que consultar el manual de la libreralpmpkg para conocer que entradas y salidas necesita cada mdulo.Podemos acceder a esta documentacin siguiendo estos pasos:

    http://det.bp.ehu.es/vhdl/pagina/express/08.htm#5http://det.bp.ehu.es/vhdl/pagina/express/08.htm#5
  • 8/3/2019 Lenguajes de descripcin Hardware

    21/136

    Conseguir el programa WARP2 Release 4.2, disponibleonline en la pgina de Cypress Semiconductor Inc. No esneceasrio si ya est instalado en el subdirectorio c:\warp enel ordenador donde ests leyendo estas lneas. Si no lotienes, isntalal en esa direccin.

    Descargar el programa gratuito Acrobat Reader y susplug-ins.

    Una vez realizado estos pasos, aparecer debajo de estaslneas la documentacin sobre la librera lpmpkg, en elcaptulo 5 del documento. Si no te aparece puedes bajarlodesde aqui: refmanl.pdf

    Objetos, tipos de datos yoperaciones

    Objetos

    En un lenguaje de descripcin de software (SDL) una variable contieneun valor y puede aceptar un nuevo valor a travs de una asignacinsecuencial. Por otro lado, las constantes tienen valores prefijados a lo

    largo de toda la ejecucin del programa. Sin embargo, en VHDL se hacenecesaria la utilizacin de un nuevo tipo de objeto que puede emular lasasignaciones concurrentes propias de los circuitos elctricos reales; estenuevo tipo de objeto son las seales.

    Un objeto en VHDL es un elemento que tiene asignado un valor de untipo determinado. Segn sea el tipo de dato, el objeto poseer unconjunto de operaciones que se le podrn aplicar. En general, no serposible realizar operaciones entre dos objetos de distinto tipo, a menosque definamos previamente un programa de conversin de tipos.

    Identificadores

    http://www.cypress.com/http://www.adobe.com/acrobatftp://vhdl/warp/doc/refmanl.pdfhttp://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://www.cypress.com/http://www.adobe.com/acrobatftp://vhdl/warp/doc/refmanl.pdf
  • 8/3/2019 Lenguajes de descripcin Hardware

    22/136

    Los identificadores son un conjunto de caracteres dispuestos de unaforma adecuada y siguiendo unas normas propias del lenguaje, para darun nombre a los elementos en VHDL, por lo que es aconsejable elegir unnombre que sea representativo y que facilite la comprensin del cdigo.

    Las reglas a tener en cuenta a la hora de elegir un identificador son:

    Los identificadores deben empezar con un carcteralfabtico, no pudiendo terminar con un carcter subrayado,ni tener dos o ms de estos caracteres subrayados seguidos.

    VHDL identifica indistintamente tanto las maysculascomo las minculas, pudindose emplear por igual elidentificador "sumador" o "SUMADOR". Pulsa aqu para ir a laprctica del sumador, donde se demuestra la indiferencia demaysculas y minsculas.

    El tamao o extensin del identificador no est fijado porVHDL, siendo recomendable que el usuario elija un tamaoque confiera sentido y significado al identificador, sin llegara alcanzar longitudes excesivamente largas.

    Los identificadores pueden contener caracteres numricosdel '0' al '9', sin que stos puedan aparecer al principio.

    No puede usarse como identificador una palabra

    reservada por VHDL.

    Palabras reservadas

    Las palabras reservadas son un conjunto de identificadores que tienen

    un significado especfico en VHDL. Estas palabras son empleadas dentrodel lenguaje a la hora de realizar un diseo. Por esta razn y buscandoobtener claridad en el lenguaje, las palabras reservadas no pueden serempleadas como identificadores definidos por el usuario.

    Las palabras reservadas por VHDL son:

    abs else nand return

    http://det.bp.ehu.es/vhdl/pagina/express/06.htmhttp://det.bp.ehu.es/vhdl/pagina/express/06.htmhttp://det.bp.ehu.es/vhdl/pagina/express/06.htmhttp://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/express/06.htmhttp://det.bp.ehu.es/vhdl/pagina/express/06.htmhttp://det.bp.ehu.es/vhdl/pagina/express/06.htm
  • 8/3/2019 Lenguajes de descripcin Hardware

    23/136

    access elsif new select

    after end next severity

    alias entity nor signal

    all exit not

    subtyp

    eand file null thenarchitecture for of to

    array function ontransoprt

    asser generate open typeattribute generic or unitsbegin guarded others untilblock if out use

    body in package variabl

    ebuffer inout port waitbus is procedure whencase label process whilecomponent library range withconfiguration linkage record xorconstant loop registerdisconnect map remdownto mod report

    Smbolos especiales

    Adems de las palabras reservadas empleadas como identificadorespredefinidos, VHDL utiliza algunos smbolos especiales con funcionesdiferentes y especficas, tales como el smbolo "+" se utiliza pararepresentar la operacin suma y, en este caso, es un operador. Elsmbolo "- -" es empleado para los comentarios realizados por el usuario,de tal forma que el programa al encontrar una instruccin precedida por"- -" la saltar ignorando su contenido. De esta forma, el programadorpuede hacer ms comprensible el cdigo del programa.

    Los smbolos especiales en VHDL son:

    http://det.bp.ehu.es/vhdl/pagina/completo/#top
  • 8/3/2019 Lenguajes de descripcin Hardware

    24/136

    + - / ( ) . , : ; & ' < > = | # := --

    Para finalizar, recordar que el smbolo ms empleado por unprogramador es el " ; ", smbolo que debe finalizar todas y cada una delas lneas del cdigo dando por terminada dicha sentencia en el

    programa.

    Tipos de datos

    El tipo de datos es un elemento bsico en VHDL, ya que delimita quevalores puede tenr un objeto y que operaciones podemos realizar con l.

    Aparte de los tipos ya creados, podemos crear nuevos tipos ysubconjuntos de tipos.

    La declaracin de un tipo de datos es la sentencia VHDL utilizada paraintroducir un nuevo tipo. Esta declaracin est formada por unidentidificador que nos permitir usar el nuevo tipo al llamarlo y ladescripcin del conjunto de valores que forman el tipo de datos. Paraello usamos la palabra reservada type. La declaracin puede tenervarios formatos como por ejemplo:

    type longitud_maxima isrange 2 to 50type estados is (estado_a, estado_b, estado_c);

    Una vez declarado el nuevo tipo podremos usarlo para declararobjetos de este tipo, como por ejemplo:

    variable est: estados;port (entrada: in estados; salida: out longitud_maxima);

    Cada tipo es diferente e incompatible con los dems, aunque estn

    declarados de la misma forma, por lo cual no podemos asignar a unaseal de un tipo otra de otro tipo distinto, a menos que definamos unafuncin de transformacin.

    Los tipos pueden ser clasificados segn las caractersticas de lo quevan a determinar:

    http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#3http://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/02.htm#3
  • 8/3/2019 Lenguajes de descripcin Hardware

    25/136

    Tipos enumerados: En ste se define el conjunto deposibles valores del tipo especificado, presentando una listaque contiene a todos los valores. El primer identificador es elnombre del tipo y sirve para referenciarlo, y entre parntesisy separados por comas se adjuntan todos los valores legales

    del tipo.

    type vocales ('a', 'e', 'i', 'o', 'u');type direcciones is (izquierda, derecha, arriba, abajo, centro);

    Si no est especificado ningn valor inicial, el objeto seinicializa con el valor ms a la izquierda de los especificadosen la declaracin del tipo. Es decir, un objeto del tipo"vocales" toma el valor 'a' por defecto.

    Tipos enteros / reales: Esta modalidad de tipo sirve apradefinir un objeto con valores reales y enteros. En VHDLvienen definidos el tipo integer, que puede ir desde-2147483647 hasta 2147483647, y el tipo real, quepuede irdesde -1.0e38 hasta 1.0e38. Para definir un tipo de estanaturaleza hay que especificar el rango de valores quepuede llegar a tener asignado un objeto, como en losejemplos siguientes

    type edad isrange 0 to 150;type dias isrange 31 downto 0;

    Si no est especificado ningn valor inicial, el objeto seinicializa con el valor ms a la izquierda de los especificadosen la declaracin del tipo. Deberemos tener cuidado sihemos usado la palabra to o la palabra downto para definirel tipo, ya que se asignar un valor por defecto u otro. En elejemplo se da por defecto a un objeto del tipo "edad" elvalor 0, y a otro del tipo "dias", el valor 31.

    Tipos fisicos: Sirven para representar magnitudes delmundo real como el tiempo, peso, capacidad,... por lo que

    llevan, aparte de un literal numrico, la magnitud fsica amedir. Podemos asignar unidades auxiliares a la predefinida.

    type time isrange 0 to 1e20;unitsfs;ps = 1000 fs;ns = 1000 ps;

  • 8/3/2019 Lenguajes de descripcin Hardware

    26/136

    us = 1000 ns;ms = 1000 us;sec = 1000 ms;min = 60 sec;hr = 60 min;

    end units;

    Si no est especificado ningn valor inicial, el objeto seinicializa con el valor ms a la izquierda de los especificadosen la declaracin del tipo. Deberemos tener cuidado sihemos usado la palabra to o la palabra downto para definirel tipo, ya que se asignar un valor por defecto u otro. En elejemplo se da por defecto a un objeto del tipo "edad" elvalor 0, y a otro del tipo "dias", el valor 31.

    Expresiones y operadores

    La metodologa de programacin de un componente, basada en ladescripcin por comportamiento (behavioral), puede emplear en sudiseo la mayora de operadores que se encuentran habitualmentetiles en los SDL's ( software design languages)

    En el cuadro adjunto se puede ver una relacin de los operadorespredefinidos ms empleados en VHDL, as mismo se aprecia que suclasificacin atiende al tipo de dato que vaya a manejar:

    OPERADORES LGICOSNOT, AND, OR,

    NAND, NOR, XORTipo de operador: booleanTipo de resultado: boolean

    OPERADORES RELACIONALES = / < >=Tipo de operador: cualquier tipoTipo de resultado: boolean

    OPERADORES ARITMTICOS+ - * / **

    MOD, REM, ABSTipo de operador: integer, real, signaltipo de resultado: integer, real,signal

    OPERADOR CONCADENACIN & Tipo de operador: arraytipo de resultado: array

    Los operadores lgicos, pueden ser empleados con los tipospredefinidos, BIT y BOOLEAN, dndonos como resultado un valorbooleano del mismo tipo que los operadores.

    Para graficar un poco la importancia de emplear correctamente losdistintos tipos de operadores, a continuacin lo ilustramos con la ayudadel diseo de un sumador de cuatro bits mas el carry de la etapaanterior. Pulsa aqu para ir a la prctica del Cudruple Sumador Total.

    http://det.bp.ehu.es/vhdl/pagina/express/06.htmhttp://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/express/06.htm
  • 8/3/2019 Lenguajes de descripcin Hardware

    27/136

    architecture archisumador ofsumador isbegin

    process (a,b,cin)variable aux:std_logic_vector(4 downto 0);beginaux:=('0' & a) + ('0' & b);ifcin='1' then aux:=aux+1;elsifcin='0' thennull;end if;sum

  • 8/3/2019 Lenguajes de descripcin Hardware

    28/136

    Un atributo nos proporciona informacin sobre ciertos elementoscomo las entidades, arquitecturas, tipos y seales. Hay varios atributosde para seales que son muy tiles en sntesis, y especialmente en elVHDL simulable (no sintetizable). Ai ae trabaja con VHDL sintetizableslo se pueden utilizar algunos atributos como:

    Atributo 'left: se usa para manejar al elemento ms a laizquierda de un vector.

    ifentrada'left='0' then ... Si el elemento ms a la izquierda de entrada es'0', entonces se ejecuta lo que sigue al then

    Atributo 'right: se usa para manejar al elemento ms a laderecha de un vector.

    ifentrada'right='1' then ...

    Si el elemento ms a la derecha de entrada es

    '1', entonces se ejecuta lo que sigue al then

    Atributo 'length: se usa para manejar la longitud de unvector.

    ifentrada'lenght=5 then ...Si la longitud de entrada (se supone,lgicamente, que es un array o vector) es 5,entonces se ejecuta lo que sigue al then.

    Atributo 'event: se usa para conocer si una variable hacambiado o no, solindose usar como variable booleana:

    ifentrada'event=5 then ...Si hay un cambio en el nivel lgico de la sealentrada, entonces se ejecuta lo que sigue althen.

    Gramtica del lenguaje I

    Sentencias secuenciales

    En la mayora de los lenguajes de descripcin de software, todas lassentencias de asignamiento son de naturaleza secuencial. Esto significaque la ejecucin del programa se llevara a cabo de arriba a abajo, es

    http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#1http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#4http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#3http://det.bp.ehu.es/vhdl/pagina/completo/04.htm#2http://det.bp.ehu.es/vhdl/pagina/completo/06.htm#1http://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/02.htm#1http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#4http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#3http://det.bp.ehu.es/vhdl/pagina/completo/04.htm#2http://det.bp.ehu.es/vhdl/pagina/completo/06.htm#1
  • 8/3/2019 Lenguajes de descripcin Hardware

    29/136

    decir siguiendo el orden en el que se hayan dispuesto dichas sentenciasen el programa, por ello es de vital importancia la disposicin de lasmismas dentro del cdigo fuente.

    VHDL lleva a cabo las asignaciones a seales dentro del cuerpo de un

    proceso (process) de forma secuencial, con lo que el orden en el queaparezcan las distintas asignaciones ser el tenido en cuenta a la horade la compilacin. Esto hace que cuando utilicemos modelossecuenciales en VHDL, estos se comporten de forma parecida acualquier otro lenguaje de programacin como Pascal, C, etc.

    Asignacin a una seal

    Podremos asignar un cierto valor a una seal siempre que sta hayasido declarada en la entidad en el apartado de declaracin de puertos, obien porque la hayamos creado especficamente dentro de un process.

    La asignacin a una seal dentro de un proceso es siempresecuencial, es decir, la seal no cambia su valor hasta que se haevaluado el proceso en el cual se incluye. Si no est dentro de unproceso, como por ejemplo, usando el estilo dataflow, el cambio esconcurrente, es decir, la asignacin est siempre activa, y se actualiza

    instanteneamente. Para hacer una asignacin a una seal deberemosusar el operador

  • 8/3/2019 Lenguajes de descripcin Hardware

    30/136

    En este ejemplo, las dos seales intercambian sus valores, ya quecuando se ejecuta la segunda (b

  • 8/3/2019 Lenguajes de descripcin Hardware

    31/136

    Deberemos tener en cuenta que una variable se reinicializa siempre alhacer una nueva llamda a un subprograma.

    Sentencia if

    La construccin if-then-else es usada para seleccionar unconjunto de sentencias para ser ejecutadas segn la evaluacin de unacondicin o conjunto de condiciones, cuyo resultado debe ser o true ofalse. Su estructura es la siguiente:

    if(condicin) then

    haz una cosa;elsehaz otra cosa diferente;

    endif;

    Si la condicin entre parntesis es verdadera, la(s) sentencia(s)secuencial(es) seguidas a la palabra then son ejecutadas. Si lacondicin entre parntesis es falsa, la(s) sentencia(s) secuencial(es)seguidas a la palabra else son ejecutadas. La construccin debe sercerrada con las palabras end if.

    La sentencia if-then-else puede ser expandida para incluir lasentencia elsif, la cual nos permite incluir una segunda condicin si nose ha cumplido la primera (la cual tiene prioridad). Su estructura es lasiguiente:

    if(condicin) thenhaz una cosa;

    elsif(otra condicin) thenhaz otra cosa diferente;

    else

    haz otra totalmente diferente;endif;

    Si se da la situacin en la cual la primera condicin es verdad ejecutalas sentencias que van despus del primer then. Si no es verdadera laprimera condicin, se pasa a evaluar la segunda, y de ser esta verdad,ejecuta las sentencias que estn a continuacin del segundo then. Sininguna de las dos es verdadera, se ejecuta lo que est detrs de la

    http://det.bp.ehu.es/vhdl/pagina/completo/#top
  • 8/3/2019 Lenguajes de descripcin Hardware

    32/136

    palabra else. Ntese que para que se ejecute las sentencias con elnombre "otra cosas diferente", no solo debe ser la segunda condicinverdadera, sino que adems la primera condicin debe ser falsa. Unejemplo de esta sentencia se puede ver a continuacin:

    entity multi isport(a, b, c :in bit_vector(3 downto 0);enable :in bit;control :in bit_vector(1 downto 0);d :out bit_vector(3 downto 0));end multi;

    entidad del multiplexorpuertos del multiplexor

    finaliza la entidad

    architecture archmul ofmulti isbeginprocess (a, b, c, control, enable)

    beginifenable='1' then d d d d d

  • 8/3/2019 Lenguajes de descripcin Hardware

    33/136

    if(clk'eventand clk='1') thenq haz otra cosa;...

    when (ltimo valor) => haz tal cosa;end case;

    En el caso que la seal a evaluar (situada despus del case) tenga el"valor 1", entonces se ejecuta "una cosa", si tiene el "valor 2", se ejecuta"otra cosa", ... y si tiene el "ltimo valor", se ejecuta "tal cosa". Estasentencia parece hecha a la medida para crear multiplexores, como seve en el siguiente ejemplo, del cual slo estudiamos la partecorrespondiente a la sentencia case:

    entity multi isport(a, b, c :in bit_vector(3 downto 0);

    entidad del multiplexorpuertos del multiplexor

    http://det.bp.ehu.es/vhdl/pagina/express.htmhttp://det.bp.ehu.es/vhdl/pagina/express.htmhttp://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/express.htmhttp://det.bp.ehu.es/vhdl/pagina/express.htm
  • 8/3/2019 Lenguajes de descripcin Hardware

    34/136

    enable :in bit;control :in bit_vector(1 downto 0);d :out bit_vector(3 downto 0));

    end multi;

    architecture archmul ofmulti isbeginprocess (a, b, c, control, enable)beginifenable='1' then d d d d d

  • 8/3/2019 Lenguajes de descripcin Hardware

    35/136

    La sentencia case tambin nos permite especificar un rango devalores posibles de la seal de seleccin, para los cuales hacer unaasignacin, mediante la palabra reservada to. Como ejemplo veamosdos fragmentos de cdigo que son equivalentes:

    case control iswhen "000" => d d d d d d d d d d d d d

  • 8/3/2019 Lenguajes de descripcin Hardware

    36/136

    a repetir ocho veces seguidas las instrucciones entre loop y end loop.Debemos destacar que en un ciclo for, la variable del mismo se declaraatomticamente, y no tenemos que incrementarla o inicializarla, ya queel programa lo hace por nosotros. La etiqueta ciclo1 se usa (aunque esopcional) para dar ms posibilidades de organizacin al programador.

    process (a)variable i: integer := 0;beginciclo2: while i < 7 loop

    entrada(i) '0');i := i + 1;

    endloop;end process;

    Mientras i sea menor que 7 => ciclo

    Finaliza el ciclo

    En esta ocasin se usa la sentencia while, para lograr el mismo

    resultado que en el ejemplo anterior, es decir, inicializar los 8 ltimosbits del vector entrada a cero. Esta vez, se ejecutan las lneas entreloop y end loop mientras la variable i sea menor que siete. Es lgicoque esta variable cambie dentro del ciclo, ya que de no ser as, seejecutara para siempre. De forma distinta al ejemplo anterior, lavariable del ciclo while debe ser declarada (como integer), inicializada eincrementada por nosotros, por lo que requiere ms trabajo.

    Sentencia exit

    Usada siempre dentro de un loop, la sentencia exit nos permite salirdel mismo si se alcanza una condicin fijada por nosotros. Su verdaderautilidad la encontramos si diseamos controladores de memoria. Acontinuacin analizamos un ejemplo:

    process (a)beginciclo1: for i in 7 downto 0 loopif a'length < i thenexit ciclo1;entrada(i) '0' );

    endloop;end process;

    http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#3http://det.bp.ehu.es/vhdl/pagina/completo/04.htm#6http://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/02.htm#3http://det.bp.ehu.es/vhdl/pagina/completo/04.htm#6
  • 8/3/2019 Lenguajes de descripcin Hardware

    37/136

    Ahora se ejecuta el mismo ejemplo que expusimos en el caso de unciclo for con la salvedad que si la variable i supera la longitud del vectora el ciclo deja de ejecutarse aunque no se hayan cumplido las vecespedidas en el encabezamiento.

    Sentencia next

    La sentencia next tambin debe estar dentro de un ciclo loop, y nossirve para saltarnos una o ms de las ejecuciones programadas.

    process (a)

    beginciclo1: for i in 7 downto 0 loop ifi=4 thennext; else

    entrada(i) '0' );end if;

    endloop;end process;

    Cabecera del cicloSi i vale 4, se salta el cicloSi no vale 4,...... se inicializa entradaFinaliza el ciclo

    Ahora se ejecuta el programa todas las veces programadas, excepto lacuarta, ya que hay una sentencia ifque hace que se pase a la siguiente

    iteracin si la varaibale i vale cuatro.

    Sentencia null

    La sentencia null se utiliza, al igual que en otros lenguajes de

    programacin, para que dada una condicin especial no pase nada , esdecir, que ninguna seal o variable cambie, y que el programa siga sucurso habitual. Su comportamiento dentro de un loop es similar al de lasentencia next.

    http://det.bp.ehu.es/vhdl/pagina/completo/04.htm#6http://det.bp.ehu.es/vhdl/pagina/completo/04.htm#4http://det.bp.ehu.es/vhdl/pagina/completo/04.htm#6http://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/04.htm#6http://det.bp.ehu.es/vhdl/pagina/completo/04.htm#4http://det.bp.ehu.es/vhdl/pagina/completo/04.htm#6
  • 8/3/2019 Lenguajes de descripcin Hardware

    38/136

    Sentencia wait

    La sentencia wait se usa para suspender un proceso si ste no tienelista sensitiva. Lo nico que exige esta sentencia es estar situada la final

    del proceso. Para entender mejor sto, basta con decir que los doscdigos siguientes son equivalentes.

    process (a,b,c)beginx

  • 8/3/2019 Lenguajes de descripcin Hardware

    39/136

    vuelve a valer de nuevo 1, es decir, un flanco de subida. Pulsa aqu parair a la prctica del Flip Flop D.

    Gramtica del lenguaje II

    Sentencias concurrentes

    La naturaleza propia de los circuitos elctricos obliga a VHDL asoportar un nuevo tipo de asignacin de seales, que nos permitaimplementar este tipo de operatividad. En ella todas las asignaciones sellevan a cabo en paralelo (al mismo tiempo). En una asignacinconcurrente la seal que est a la izquierda de la asignacin es evaluadasiempre que alguna de las seales de la derecha modifique su valor.

    Como ejemplo tenemos las siguientes sentencias de asignacin:

    c

  • 8/3/2019 Lenguajes de descripcin Hardware

    40/136

    cambios que deba haber en las seales alteradas se producen despusde evaluar todo el ciclo al completo. Esta caracterstica define una de lasparticularidades de VHDL.

    La estructura de un proceso es la siguiente:

    etiqueta: process (var1, var2, ...)begin

    sentencias secuencialesendprocess etiqueta;

    Si cambia alguna de las variables situadasentre los parntesis, se ejecuta elproceso.

    Siempre que queramos utilizar sentencias secuenciales se deber usarun proceso. Como ejemplo del uso de un proceso se muestra el siguientefragmento de cdigo correspondiente a un flip-flop d.

    contador: process (clock)

    begin if(clock'eventand clk='1') thenq

  • 8/3/2019 Lenguajes de descripcin Hardware

    41/136

    El primer ejemplo no funciona adecuadamente si b tiene le valorinicial de "0000". Veamos porqu: si y a cambia para tomar el valor"0000", b se incrementar en una unidad al finalizar la evaluacin delproceso, por lo que b no valdr "0001" hasta entonces, por lo que c novaldr '1', que no era lo que desebamos.

    architecture funciona ofuno isbeginprocess (a)variable v: bit_vector(3 downto 0);beginv:=b;

    ifa = "0000" then v := v + '1'; endif; ifv = "0001" then c

  • 8/3/2019 Lenguajes de descripcin Hardware

    42/136

    Asignacin concurrente condicional

    Esta asignacin es equivalente a la sentencia if, con la salvedad quees concurrente. La sintaxis a seguir es la siguiente:

    seal_uno

  • 8/3/2019 Lenguajes de descripcin Hardware

    43/136

    expresion toma el valor valor_expresin_2,... pudiendose ampliaresta cadena de condiciones tanto como queramos.

    Como ejemplo veamos los siguientes fragmentos de cdigo, ambosequivalentes, que modelan a una simple Unidad Lgica:

    with operacion selectresul resul resul resul resul

  • 8/3/2019 Lenguajes de descripcin Hardware

    44/136

    Sentencias estructurales

    Las sentencias estructurales (o de instantacin), son una forma msde hacer llamadas a subprogramas en VHDL. Con ellas se puede haceruso de un componente o circuito definido con anterioridad sin necesidadde incluirlo en la descripcin que se est realizando; slo habr quehacer una llamda a dicho componente para usarlo con lasespecificaciones propias del diseo actual. Se aprecia que suoperatividad es muy similar a la de una librera. El lenguaje nosproporciona una serie de sentencias dedicadas a la descripcin de laestructura de hardware que son concurrentes, y aparecen en la

    arquitectura llamando a un modelo fuera de cualquier proceso. Estasson las sentencias estructurales, cuyo principal elemento son loscomponentes con su funcin port map (mapa de puertos).

    Componentes: Para realizar la descripcin estructural de unsistema es necesario conocer qu sistemas o componentes lo forman,indicando la interconexiones entre ellos. Para operar de esta forma,VHDL ofrece los componentes. Para ser usado, un componente debeestar declarado previamente para poder hacer referencia al mismo. Sise declara un componente en una arquitectura, podr ser usado en

    cualquier parte de la misma, pero si a referencia se hace en un paquete,se podr lamar en todas las arquitecturas que llamen a ese paquete.

    El estilo estructural es fcilmente reconocible porque la operatividaddel programa no se puede leer del cdigo ya que est formadontegramente por componentes y las seales que les unen a otros. Esdecir, est formado por bloques o cajas negras a los cuales metemosinformacin y sacamos las salidas, las cuales podrn o no ir a otrosbloques. Para esto debemos conocer la operatividad de estos bloques,los cuales suelen estar en libreras. Para usar las puertas que estn en elpaquete gatespkg debemos primero invocar a la librera ieee (lase "i

    e cubo") como est expuesto en la primera lnea de la entidad quedebemos usar. Para usar el paquete (o sub-librera) gatespkg lallamaremos de la forma en que est en la segunda lnea. Estas librerasvienen incluidas en la versin 3.5 del programa WARP, de CypressSemiconductor. Como ejemplo se lista el cdigo de un multiplexorimplementado por descripcin estructural.

    http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#6http://det.bp.ehu.es/vhdl/pagina/completo/05.htm#1http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#5http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#7http://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/02.htm#6http://det.bp.ehu.es/vhdl/pagina/completo/05.htm#1http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#5http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#7
  • 8/3/2019 Lenguajes de descripcin Hardware

    45/136

    library ieee;usework.gatespkg.all;

    entity multi isport(a,b : inbit;control : inbit;enable : inbit;c : outbit);end multi;

    architecture archmul ofmulti issignal aux0,aux1,aux2,aux3: bit;beginpuerta0:inv portmap(control,aux0);puerta1:and2 portmap(b,aux0,aux1);puerta2:and2 portmap(a,control,aux2);puerta3:or2 portmap(aux1,aux2,aux3);puerta4:and2 portmap(enable,aux3,c);end archmul;

    Llamamos a la librera IEEELlamamos a la librera quetiene las puertas lgicas

    Cabecera del programaDeclaracin de sealesEmpieza el programaSentencia concurrenteSentencia concurrenteSentencia concurrenteSentencia concurrenteSentencia concurrente

    Finalizamos el programa

    La funcionalidad de este fragmento de cdigo se basa en loselementos "inv", "and2" y "or2", que se encuentran en la libreragatespkg, que listamos a continuacin:

    package gatespkg iscomponent and2port (a,b : in bit;

    q : out bit);endcomponent;

    component or2port (a,b : in bit;q : out bit

    Incluimos el nombre del paqueteEmpezamos el componente and2

    Empezamos el componente or2

  • 8/3/2019 Lenguajes de descripcin Hardware

    46/136

    );end component;

    component inv

    port (a : in bit;qn : out bit);end component;

    usework.cypress.all;entity and2 isport (a,b : in bit;q : out bit

    );end and2;architecture archand2 ofand2 isbeginq

  • 8/3/2019 Lenguajes de descripcin Hardware

    47/136

    Subprogramas

    Los subprogramas se usan para describir algoritmos de cualquier tipoque son ms tarde usados tantas veces como se desee. Un subprogramaconsta de una parte declarativa en la cual se definen los datos deentrada y de salida al mismo, y una parte de sentencias en la cual seindica que operaciones se realizan sobre los datos.

    Los subprogramas constan de dos partes: la definicin delsubprograma y la definicin del cuerpo del subprograma. En la primerase define el nombre del mismo y los parmetros que son introducidos en

    l. En la segunda se incluye el algoritmo que va a realizar elsubprograma.

    Hay dos tipos de subprogramas, las funciones y los procedimientos,los cuales tratamos en puntos separados a ste.

    Funciones

    Las funciones estn destinadas a realizar clculos, siendo una nuevaforma de definir nuevos operadores que pueden aparecer en unaexpresin. A las funciones se le pueden introducir todos los valores quese necesiten, pero slo devuelven un nico valor, siendo las variablesinternas a ella imposibles de recuperar para otras operaciones.

    Una funcin est formada por:

    Parte declarativa: En ella indicamos cuales son losparmetros que introducimos en la funcin, la cualentender que son constantes, y de modo in (por defecto).Podemos definir, adems, todas las estructuras de datos quenecesitemos (tipos, constantes, variables,...), pero sloexistirn cuando la funcin haya sido llamada y se crean einicializan cada vez que esto ocurra. Esta es la razn de nopoder incluir seales en la parte declarativa.

    http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#2http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#2http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#2http://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/02.htm#2
  • 8/3/2019 Lenguajes de descripcin Hardware

    48/136

    Parte de sentencias: En ella se transforman los objetosque introducimos en la funcin para obtener la salida. Enesta parte podremos usar el valor de seales y variablesexternas, pero no podremos modificarlas. Tampocopodremos usar la sentencia wait.

    Como ejemplo crearemos una funcin que realiza una operacin tansencilla como asignar a la salida de la funcin, suma, la suma de dosnmeros, a y b.

    La parte declarativa sera:

    function sumar (a,b: std_logic_vector(3 downto 0))return std_logic_vector(3 downto 0);

    Empieza por la palabra reservada function y seguido va el nombre de

    la funcin y entre parntesis los objetos de entrada con su tipocorrespondiente. Despus va la palabra return y el tipo del resultado dela funcin. Tiene el mismo sentido que las entidades.

    La parte de sentencias sera:

    function sumar (a,b: std_logic_vector(3 downto 0))return std_logic_vector(3 downto 0) isvariable suma: std_logic_vectorbeginsuma := a + b ;

    return sumaendfunction sumar;

    Las primeras lneas de la parte de sentencias coinciden con la partedeclarativa, slo que la primera lleva al final la palabra is, tal y como seaprecia en el ejemplo. Seguido viene la declaracin de tipos, subtipos yvariables, etc. en la cual debe incluirse la variable que va a ser devueltapor la funcin, que en este caso es suma. Entre la palabra reservadabegin y end debemos incluir el algoritmo que dar un valor a lavariable que ser el resultado, y la sentencia return suma. Esta ltimasentencia es imprescindible para definir la funcin, ya que de no hacerlosta se quedara sin resultado.

    Para llamar a esta funcin deberemos escribir un cdigo parecido aeste en nuestro programa, teniendo en cuenta que la llamada a unafuncin no es por si misma una sentencia:

    process

    http://det.bp.ehu.es/vhdl/pagina/completo/04.htm#10http://det.bp.ehu.es/vhdl/pagina/completo/04.htm#10http://det.bp.ehu.es/vhdl/pagina/completo/04.htm#10http://det.bp.ehu.es/vhdl/pagina/completo/04.htm#10
  • 8/3/2019 Lenguajes de descripcin Hardware

    49/136

    variable numero1, numero2: std_logic_vector(3 downto0);variable salida: std_logic_vector(3 downto 0);begin...

    salida := sumar (numero1,numero2);...endprocess;

    En esta ocasin hemos hecho la asignacin de las entradas porposicin: al ejecutarse la funcin, el compilador usa el valor denumero1 como a, ya que numero1 es el primer valor que se introduceen la funcin y a es el primero incluido en la declaracin de la funcin.Lo mismo ocurre con numero2 y con b. Tambin podamos haber hechoel asignamiento por nombre de cualquiera de las siguientes formas,siendo ambas equivalentes:

    salida := sumar ( numero1=>a, numero2=>b );

    salida := sumar ( numero2=>b, numero1=>a );

    Sea cual sea la forma en la cual asignemos las seales a la entradadel subprograma, stas deben coincidir en el tipo, es decir, en elejemplo no podamos haber introducido en la funcin numero1 ynumero2 si stos hubieran sido del tipo entero o bit. De la misma formala variable o la seal a la cual asignamos el valor de la funcin debecoincidir con el tipo del objeto que hemos especificado para la salida en

    la funcin. Es decir, no podemos asignar a salida el valor de la funcinque hemos creado si es del tipo integer (por ejemplo), ya que la salidade la funcin es suma que es del tipo std_logic_vector.

    Procedimientos

    Los procedimientos estn destinados a realizar alteraciones en losdatos a los que tienen acceso, tanto internos como externos. De formadistinta a las funciones, un procedimiento puede devolvernos ms de unvalor e incluso modificar alguno de los valores que le introducimos. Unprocedimiento o procedure consta al igual que las funciones de unaparte declarativa y otra de sentencias:

    http://det.bp.ehu.es/vhdl/pagina/completo/#top
  • 8/3/2019 Lenguajes de descripcin Hardware

    50/136

    Parte declarativa: En ella indicamos cuales son losparmetros que introducimos en la procedure, pudiendoser de tres modos posibles: in, out, e inout, y son pordefecto del modo in. Si el modo de una seal de entrada esin, no podremos modificar su valor, solamente usarlo, y a

    ojos de la procedure ser una constante. Si el modo es outpodrn ser modificados en la parte de sentencias, pero aligual que pasa en una entidad no podremos leer su valor.Solamente si es de modo inout podremos leer su valor yadems modificarlo. Al igual que en las funciones podremosdeclarar todos los tipos, constantes, variables, etc. pero sloexistirn cuando se haga un llamamiento a la procedure yse reinicializarn cada vez que se vuelva a llamar.

    Parte de sentencias: En ella se modifican seales yvariables tanto internas como externas al procedure,pudiendo adems usar la sentencia wait.

    Para aclarar conceptos, se muestra el siguiente codigo, en el cual seconsigue el mismo resultado que en el ejemplo expuesto en el apartadode funciones. La parte declarativa es la siguiente:

    procedure sumar (a,b: std_logic_vector(3 downto 0),suma: out std_logic_vector(3 downto 0));

    Su estructura se asemeja a la de una entidad y empieza con lapalabra reservada procedure seguida del nombre que le vamos aasignar a la misma (en este caso es sumar), y entre parntesis sedeclaran los objetos de entrada como si de una entidad se tratase. Enlos procedimientos no hace falta usar la palabra return, ya que seespecifica cul de las seales es de entrada y/o salida.

    La parte de declaraciones sera como sigue:

    procedure sumar (a,b: std_logic_vector(3 downto 0),suma: out std_logic_vector(3 downto 0));

    begin

    suma

  • 8/3/2019 Lenguajes de descripcin Hardware

    51/136

    processvariable numero1, numero2: std_logic_vector(3 downto0);variable salida: std_logic_vector(3 downto 0);begin

    ...sumar (numero1,numero2,salida);

    ...endprocess;

    Al igual que en una funcin, los tipos de los objetos de entrada ysalida a una funcin deben coincidir con los declarados en elprocedimiento. Es importante notar que una llamada a una procedurees una sentencia, no como una llamada a una funcin.

    En este caso hemos hecho la asignacin por posicin, ya que al no

    indicar nada, el compilador supone que queremos asignar el primerobjeto que hemos introducido en la funcin al primer objeto quehabamos declarado cuando creamos el procedimiento. Esto esnumero1 se corresponde a a, numero2 se corresponde con b, y assucesivamente. Si queremos asignarlos por nombre deberemos hacerlocomo se describe a continuacin:

    sumar ( numero1=>a, numero2=>b, salida =>suma );

    sumar ( salida=> suma, numero2=>b, numero1=>a );

    Ambas formas de llamar al procedimiento son vlidas y equivalentes.

    Interface, compilador eimplementacin fsica

    VHDL sintetizable

    En un principo VHDL, al igual que los dems HDL'S, nacieron con elproposito de facilitar la labor de los diseadores de circuitoselectrnicos, agilizando su diseo y haciendo ms flexible su posteriordepuracin y mantenimiento. Por este motivo se dot a VHDL conabundantes instrucciones ms orientadas a la simulacin que a la

    http://det.bp.ehu.es/vhdl/pagina/completo/02.htm#3http://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/02.htm#3
  • 8/3/2019 Lenguajes de descripcin Hardware

    52/136

    implementacin fsica del diseo. Ello trajo consigo la diferenciacion delVHDL sintetizable del simulable, siendo este ltimo el ms extendido y elque cuenta con ms herramientas en los programas. Si trabajamos conVHDL sintetizable, slo podremos hacer uso de un conjunto deinstrucciones vlidas.

    El lenguaje nos permite describir circuitos complejos manejando todaslas sentencias y herramientas de las que dispone, pero no siempre segarantiza que se pueda llegar a grabar en un dispositivo de lgicaprogramable (PLD), ya que ciertas instrucciones no tienen equivalentefsico.

    Como conclusin, se puede decir que todo el cdigo de un programaen VHDL es simulable, pero no siempre ser sintetizable.

    Galaxy de Cypress

    Dado que el VHDL es el lenguaje estndar, todas las empresasfabricantes de PLDs y FPGAs (Cypress, Xilinx, Altera, Actel, etc.) handesarrollado su propio compilador cada uno con sus propias funciones ycaractersticas especiales. Este turorial ha sido realizado basndose enel programa Warp2, del cual se muestran varias ventanas cortesa de la

    compaa Cypress Semiconductor.

    A pesar de ser un producto no muy pensado de cara al usuario, laherramienta de Cypress es tan potente como las dems, contandoadems con un gran soporte tcnico va e-mail. El nombre de laherramienta se llama WARP 2, que actualmente va por su versin 4.3.Este conjunto de programas est orientado a la creacin de un ficheropropio de VHDL (*.vhd), para compilarlo (Galaxy) y posteriormentesimularlo (Nova).

    Para conseguir este software se puede solicitar por correo ordinario o

    electrnico en la pgina web de Cypress.

    El programa Galaxy es el ncleo de la suite WARP2, ya que nosgestiona los programas creados, nos permite editarlos y elegir distintasopciones de compilacin. Su pantalla principal es la siguiente:

    http://www.xilinx.com/http://www.altera.com/http://www.actel.com/http://www.cypress.com/http://www.cypress.com/http://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://www.xilinx.com/http://www.altera.com/http://www.actel.com/http://www.cypress.com/http://www.cypress.com/
  • 8/3/2019 Lenguajes de descripcin Hardware

    53/136

    Con este programa podremos describir un circuito en VHDL,compilarlo y simularlo, sin ms que usar el men adecuado.

    Al arrancar por primera vez el programa, nos aparecer una pantallaque nos gestionar el control de un proyecto, entendindose porproyecto la creacin de una serie de PLDs concernientes al mismotrabajo o tema. Deberemos introducir en este cuadro de dilogo, la rutay nombre del proyecto, segn nuestras preferencias, y aadirle laextensin wpr:

    En este caso hemos creado un proyecto llamado "proyecto.wpr" en laruta "c:\warp\proyecto".

  • 8/3/2019 Lenguajes de descripcin Hardware

    54/136

    Una vez hecho esto pasamos a la ventana principal del programa. Siqueremos crear un nuevo fichero para compilar, deberemos llamar aleditor de texto, para lo que deberemos pulsar el botn llamado selectedo el botn llamdo new, en la parte de edit, segn querramos modificarun fichero ya creado o bien hacer uno nuevo, respectivamente. Entonces

    se nos abrir una ventana similar a la siguiente:

    En esta ventana crearemos o modificaremos el cdigo fuente de VHDLsegn lo que queramos realizar. Este editor tiene una serie de guaspara ayudarnos a programar, por si se nos olvida la sintaxis. Una vezescrito todo el cdigo del programa, lo deberemos guardar, con

    extensin vhd, en el mismo subdirectorio en el cual hemos creado elfichero de extensin wpr (en este caso es c:\warp\proyecto) para quepueda ser compilado sin ningn problema por el programa.

    Si queremos crear una librera nueva para este proyecto, deberemosespecificarla despus de haber creado el fichero de extensin wpr. Paraello deberemos ir al comando files/libraries y crear una nueva si as lodeseamos.

  • 8/3/2019 Lenguajes de descripcin Hardware

    55/136

    Una vez creada la librera, deberemos decir al programa ququeremos compilar, para lo cual deberemos ir al men files/add yseleccionar el fichero que queramos compilar. Una vez hecho esto,aparecer el nombre de dicho fichero en la parte izquierda de laventana, debajo del men de comandos.

    Antes de pulsar los botones que nos compilarn el programa creado,deberemos seleccionar qu tipo de PLD vamos a usar, el tipo deoptimizacin, etc. Eta tarea la realizamos con los botones de la parteinferior del programa: file, settop, generic y device.

    El botn file nos servir para decirle al programa que queremos usarla librera por defecto (es lo ms habitual) o si queremos usar un creada.Su aspecto es el siguiente:

    El botn set top sirve para indicar cual de los ficheros a compilar es

    el principal, del cual cuelgan los dems ficheros. El botn generic noslleva al men que nos permitir elegir ciertas opciones como sideseamos optimizar la velocidad o el rea usada del dispositivo delgica programable. El aspecto del men es el siguiente:

  • 8/3/2019 Lenguajes de descripcin Hardware

    56/136

    El botn device nos permitir elegir el tipo de PLD que usaremos paragrabar nuestro diseo, que hacer con las salidas no usadas, que tipo deFlipFlops queremos usar, etc. El aspecto del men es el siguiente:

  • 8/3/2019 Lenguajes de descripcin Hardware

    57/136

    Una vez hechas todas estas operaciones habremos dejado todopreparado para empezar a compilar.

    Pulsando en los botones selected o smart, de la parte compile,podremos compilar uno o ms ficheros de VHDL simultneamente. Unavez pulsado cualquiera de los botones de compilacin, nos apareceruna pantalla con las incidencias de la misma, incluyendo las librerasusadas, fecha, hora, errores, etc.

    Desde esta pantalla podremos acceder a las lneas del cdigoerrneas directamente y modificarlas para solucionar el problema, locual es una gran ayuda para eliminar errores de nuestros programas. Enesta ventana apreciamos la forma de trabajar interna del programa, ya

    que nos dice el nombre de los programas que van verificando el ficheroen busca de errores, y como se va transformando el cdigo original enun fichero que nos permitir grabarlo en una PLD. Dicha pantalla tiene elaspecto siguiente:

  • 8/3/2019 Lenguajes de descripcin Hardware

    58/136

  • 8/3/2019 Lenguajes de descripcin Hardware

    59/136

    Nova de Cypress

    El programa Nova es el complemento a Galaxy, ya que nos va asimular los ficheros compilados previamente. Su aspecto es similar a unanalizador lgico, y le podremos introducir las entradas que queramospara ver si las salidas que vayamos a obtener son las correctas. Su

    aspecto es el siguiente:

    http://det.bp.ehu.es/vhdl/pagina/completo/#top
  • 8/3/2019 Lenguajes de descripcin Hardware

    60/136

    Para simular un fichero jed (de vectores JEDEC) deberemos primeroabrirlo con el comando "file/open". Lo siguiente que nos aparece es uncronograma con las entradas y las salidas que admitir la PLD. Nosotros

    podremos introducir las entradas y darle la forma que queramos (nivellgico alto o bajo, que sea un reloj, que tenga un pulso,...) segn lo quedeseemos, sin ms que acceder al men "edit".

    Una vez modificada la forma de las entradas, y accediendo alcomando "execute" del men "simulate", el programa nos ofrecer enrojo las salidas que hubiramos obtenido de haber grabado la PLD coneste fichero. Haciendo doble clic en la pare inferior de la ventana nosaparecer una lnea de gua para poder seguir mejor el resultado de lasimulacin.

    Tambin nos permite el organizar las entradas y salidas en forma debus para controlar mejor los resultados. Esto es muy til si estamosmanejando entradas y/o salidas de varios bits de anchura y necesitamossaber su valor en todo momento.

    Un ejemplo de cmo es til la creacin de un bus se muestra en lassiguientes imgenes, donde, en la superior no se usa un bus y en lainferior donde s se usa. En ambas hemos introducido la misma entradaaleatoria y queremos saber el resultado de al simulacin para las salidasen el instante 50ns.

    En el primer caso, sin bus, deberemos analizar cual es el valor decada uno de los bits de salida, e interpretarlo para ver que es "111", obien, "7".

  • 8/3/2019 Lenguajes de descripcin Hardware

    61/136

    Si hemos creado un bus, como en la siguiente imagen. El resultado delos bits de salida los va marcando el programa sin ms que desplazar lagua hasta el instante deseado, para ver que la salida es "00x7". Para

    crear un bus hay que ejecutar el comando edit/create bus, y seleccionarque seales queremos que formen parte del bus.

  • 8/3/2019 Lenguajes de descripcin Hardware

    62/136

    Una vez que hayamos dado este paso, estaremos preparados paragrabar nuestra PLD en las mquinas dispuestas a tal efecto.

    Grabacin de nuestros diseos

    Para poder implementar las descripciones realizadas en VHDL en undispositivo de lgica programable, se necesita un programador de PLD'sy el software de que nos grabar el cirucito usando el fichero compiladopor Warp (de extensin jed). Como ejemplo usaremos el software y lamquina de Advantech Lab Tool, del cual se muestra a continuacin lapantalla principal.

    http://det.bp.ehu.es/vhdl/pagina/completo/01.htm#3http://det.bp.ehu.es/vhdl/pagina/completo/#tophttp://det.bp.ehu.es/vhdl/pagina/completo/01.htm#3
  • 8/3/2019 Lenguajes de descripcin Hardware

    63/136

    Para comenzar, se debe indicar al grabador el tipo de dispositivo en elcual vamos a programar nuestro diseo. Esto se lleva a cabo pulsando elbotn select de la barra de herramientas del Lab Tool. Una vez hechoesto, aparecer un cuadro de dilogo en el cual se pide al usuario queelija el tipo de dispositivo a utilizar (tipo, marca y modelo), como semuestra en la imagen.

  • 8/3/2019 Lenguajes de descripcin Hardware

    64/136

    Una vez seleccionado el dispositivo es conveniente comprobar que elmismo est en blanco (sin usar), pulsando el botn blank. En el caso deque el PLD no estuviera vaco, deberemos borrarlo (si se nos permite)usando el botn erase .

    Una vez que se haya seleccionado el tipo de encapsulado y lo hemos

    verificado, se indica al software grabador qu queremos implementar enel dispositivo elegido. Para esta tarea deberemos indicar mediante uncuadro de dialogo estndar de Windows el fichero deseado, como seaprecia a continuacin.

    http://det.bp.ehu.es/vhdl/pagina/completo/01.htm#3http://det.bp.ehu.es/vhdl/pagina/completo/01.htm#3
  • 8/3/2019 Lenguajes de descripcin Hardware

    65/136

    Cuando se haya elegido el encapsulado y el fichero a programar, contan slo pulsar el botnprog se grabar la PLD de forma automtica, yhabremos concluido el proceso, yaque el mismo programa, despus de

    grabar el dispositivo, lo verifica.

    Prcticas

    En esta parte del tutorial aprenders VHDL de una forma sencilla yrpida practicando desde el principio y con posibilidad de simular losdiseos explicados desde esta misma pgina web. Las prcticas son lassiguentes:

    0. Conocimientos Bsicos (ynecesarios)

    1. Multiplexor

    2. Demultiplexor

    3. Codificador

    4. Decodificador

    5. Comparador

    6. Cudruple Sumador Total

    7. Restador

    8. Multiplicador

    9. Flip-flops

    10. Contador

    11. Secuenciador

    http://det.bp.ehu.es/vhdl/pagina/express/conoci.htmhttp://det.bp.ehu.es/vhdl/pagina/express/conoci.htmhttp://det.bp.ehu.es/vhdl/pagina/express/01.htmhttp://det.bp.ehu.es/vhdl/pagina/express/02.htmhttp://det.bp.ehu.es/vhdl/pagina/express/03.htmhttp://det.bp.ehu.es/vhdl/pagina/express/04.htmhttp://det.bp.ehu.es/vhdl/pagina/express/05.htmhttp://det.bp.ehu.es/vhdl/pagina/express/06.htmhttp://det.bp.ehu.es/vhdl/pagina/express/07.htmhttp://det.bp.ehu.es/vhdl/pagina/express/08.htmhttp://det.bp.ehu.es/vhdl/pagina/express/10.htmhttp://det.bp.ehu.es/vhdl/pagina/express/11.htmhttp://det.bp.ehu.es/vhdl/pagina/express/12.htmhttp://det.bp.ehu.es/vhdl/pagina/express/conoci.htmhttp://det.bp.ehu.es/vhdl/pagina/express/conoci.htmhttp://det.bp.ehu.es/vhdl/pagina/express/01.htmhttp://det.bp.ehu.es/vhdl/pagina/express/02.htmhttp://det.bp.ehu.es/vhdl/pagina/express/03.htmhttp://det.bp.ehu.es/vhdl/pagina/express/04.htmhttp://det.bp.ehu.es/vhdl/pagina/express/05.htmhttp://det.bp.ehu.es/vhdl/pagina/express/06.htmhttp://det.bp.ehu.es/vhdl/pagina/express/07.htmhttp://det.bp.ehu.es/vhdl/pagina/express/08.htmhttp://det.bp.ehu.es/vhdl/pagina/express/10.htmhttp://det.bp.ehu.es/vhdl/pagina/express/11.htmhttp://det.bp.ehu.es/vhdl/pagina/express/12.htm
  • 8/3/2019 Lenguajes de descripcin Hardware

    66/136

    Esta parte del tutorial te permitir implementar desde el primer momento losejercicios propuesto y entender el lenguaje VHDL. Lo nico que se necesita paraseguir este curso es saber Electrnica Digital y tener nociones de cualquierlenguaje de programacin ya sea Pascal, C, Basic,...

    El lenguaje de descripcin hardware VHDL (Very high speed HardwareDescription Logic) es un lenguaje orientado a la descripcin de hardware pero conmuchos elementos heredados de otros lenguajes como C o Pascal. Una vezrealizado un programa en VHDL (con extensin VHD) y haberlo compilado conxito, tendremos un fichero con el mismo nombre y extensin JED, con el cualpodremos grabar una PLD (Dispositivo Lgico Programable) con la mismaoperatividad que el fichero VHD.

    Al describir cualquier dispositivo en VHDL (desde una simple puerta and hasta unsistema completo) se deben definir dos elementos principales:

    Entidad o entity que es la interfaz del dispositivo con el exterior.Tiene por objeto decir que seales son visibles o accesibles desde elexterior, es decir los puertos o ports del dispositivo. Es describir laspatillas del circuito que sern operativas. Su estructura mas generales la siguiente, donde las palabras en negrita son propias dellenguaje, y las restantes elegidas por el ususrio:

    entity entidad isgenericospuertosdeclaraciones

    end nombre;

    Pero debemos fijarnos en la estructura ms habitual de las entidadesque es la siguiente:

    entity entidad ispuertosend entidad;

    Arquitectura o arquitecture que es la funcionalidad que realiza eldispositivo, es decir, qu transformaciones se realizarn sobre los

    datos que entren por los puertos de entrada para producir la salida.Dentro de este apartado es donde se dota de operatividad al circuito.Su estructura general es la siguiente, y debe estar incluida en elmismo fichero de la entidad a la que hace referencia:

    arquitecture nombre ofnombre_entidad isdeclaracionesbegin

  • 8/3/2019 Lenguajes de descripcin Hardware

    67/136

    sentenciasend nombre;

    Para acabar esta introduccin deberemos tener en cuenta una serie de detallesms de ste lenguaje:

    VHDL no distingue las maysculas de las minsculas, por lo quedeberemos tener cuidado al asignar nombres a las variables,especialmente si estamos acostumbrados a trabajar con C.

    Las variables deben empezar por una letra, no deben contener niespacios ni smbolos como &, %, $, #, !, etc. Su longitud no estlimitada, no pueden acabar con un carcter de subrayado o tenerdos subraryados seguidos.

    Para representar un nmero de una sola cifra, deberemos situarloentre apstrofes; as: '1'

    Para representar un nmero de mas de una cifra, lorepresentaremos as: "10011"

    Es muy probable que en cada prctica encuentres variasentidades y varias arquitecturas. Tomando como ejemplo almultiplexor, sabemos que no todos tienen el mismo nmero de bits ode canales, por eso cada uno tiene una entidad distinta.

    Un multiplexor es un dispositivo lgico que recibe informacin por sus dos o ms entradas(de uno o mas bits de ancho) y mediante una seal de control decidimos cual de laentradas aparece reflejada en la salida; esto es, un convertidor de paralelo a serie. Sitienen una seal de "enable" esta hace que el multiplexor est habilitado o noLos multiplexores disponibles tienen todos seal de enable menos el primero. Lasarquitecturas est