170pub

download 170pub

of 88

Transcript of 170pub

  • 8/10/2019 170pub

    1/88

    Implementacin de una ALU de 8 bits en lenguaje

    VHDL

    AUTORS: Jordi Pons Albalat.DIRECTORS: Enric Cant Navarro.

    DATA: Febrer / 2002.

  • 8/10/2019 170pub

    2/88

    2

    1. Introduccin ........................................................................................ 4

    2. El lenguaje VHDL .............................................................................. 5

    2.1 VHDL describe estructura y comportamiento ............................................. 6

    2.1.1 Ejemplo bsico y estilos de descripcin VHDL .................................... 7

    2.1.2 Descripcin algortmica ........................................................................ 7

    2.1.3 Descripcin flujo de datos .................................................................... 9

    2.1.4 Descripcin estructural ......................................................................... 10

    2.2 Unidades bsicas de diseo ........................................................................ 14

    2.2.1 Como se declara una entidad ................................................................ 14

    2.2.2 Como se declara una arquitectura ......................................................... 19

    2.3 VHDL para sntesis ..................................................................................... 22

    2.4 Construcciones bsicas ............................................................................... 23

    2.5 Objetos ........................................................................................................ 24

    2.6 Identificadores ............................................................................................ 24

    2.7 Palabras reservadas ..................................................................................... 25

    2.8 Smbolos especiales .................................................................................... 26

    3. Explicacin ALU de 8 bits.................................................................. 27

    3.1 Explicacin paso a paso .............................................................................. 27

    3.2 Esquema interno bloque AND/OR ............................................................. 30

    3.3 Esquema interno bloque suma_resta .......................................................... 32

    3.4 Esquema interno bloque multiplexor .......................................................... 34

    3.5 Tabla y simplificaciones ............................................................................. 35

    3.5.1 Karnaught CLRA .................................................................................. 35

    3.5.2 Karnaught INVB .................................................................................. 36

    3.5.3 Karnaught MUX ................................................................................... 37 3.5.4 Karnaught CIN ..................................................................................... 38

    3.5.5 Karnaught Funcio ................................................................................. 39

    4. Guia del programa eProduct Designer ........................................... 41

    4.1 Funcionamiento del programa paso a paso ................................................. 41

  • 8/10/2019 170pub

    3/88

    3

    4.1.1 Compilar ............................................................................................... 41

    4.1.2 Simulacin ............................................................................................ 53

    4.1.3 Sintetizar .............................................................................................. 63

    5. Conclusiones ..................................................................................... 72

    Anexos .................................................................................................... 73

    Anexo 1. Programa ALU ................................................................................ 73

    Anexo 2. Programa de simulacin ................................................................... 80

    Anexo 3. Fichero de retardos despus de la sntesis ...................................... 82

    Anexo 4. Disposicin de las patas de la FPGA .............................................. 83

    Anexo 5. Grficas de salida ........................................................................... 84

    Bibliografa ........................................................................................... 88

  • 8/10/2019 170pub

    4/88

    4

    1 Introduccin

    En este proyecto lo que se trata es de hacer una unidad aritmtico lgica de 8 bits, esdecir lo que solemos conocer con el nombre de ALU, y la implementaremos a partir dellenguaje VHDL, es decir disearemos un algoritmo que implemente una ALU. En elalgoritmo se ha hecho de forma que todo se tiene que hacer a travs de puetas lgicas es

    decir un lenguaje puramente sintetizable ya que slo utilizaremos puertas. Esta ALU tieneque hacer las siguientes operaciones o funciones:

    Inversin del registro B

    Suma

    Resta

    AND

    OR

    Cuando tengamos el cdigo VHDL hecho tendremos que compilarlo, simularlo, yposteriormente tendremos que sintetizarlo. Para hacer todo esto que he comentadoanteriormente utilizaremos el programa eProduct Designer y con l lo haremos todo.

    Este programa se ha hecho con un lenguaje RTL es decir transferencia de registros.En el captulo 2 se explicar como hacer un programa mediante RTL, y aparte tambin seexplicar de forma introductoria como se pueden hacer programas en VHDL mediante otrotipo de descripciones.

    En el captulo 3 explicaremos los pasos que he seguido para hacer la ALU, primeromostrar los esquemas de como se ha hecho paso a paso, y en el apartado de anexos se

    mostrar el cdigo.En el captulo 4 se explicar como hacer funcionar el programa eProduct Designer

    mediante un tutorial que te ir diciendo como compilar, simular y sintetizar un programaVHDL.

    En el captulo 5 explicaremos las conclusiones a que hemos llegado despus de hacerel proyecto, y las cosas que podramos mejorar.

    Por ltimo al final pondremos los anexos, all pondremos los programas VHDL quehemos hecho para hacer la ALU. En definitiva pondremos dos programas VHDL, uno queser la ALU y el otro que ser el fichero de simulacin con el cual verificamos que el

    programa de la ALU funciona bien. A parte tambin pondremos ah los ficheros que

    encontremos interesantes poner en el apartado de anexos, como el fichero de retardos quese obtiene despus de realizar la sntesis del programa de VHDL.

    Este proyecto ser una prctica para los alumnos de sistemas digitales para que veancomo se programa en VHDL y tambin para que vean como funciona este programa nuevoel eProduct Designer.Antes se hacan las prcticas con el programa SYNARIO y ahorase pasar a utilizar este nuevo programa y a utilizar el lenguaje VHDL que como se ver esun lenguaje bastante sencillo de hacer.

    Ahora pasaremos a explicar como se hace un programa VHDL y como usar elprograma para poder hacer nuestras pruebas.

  • 8/10/2019 170pub

    5/88

    5

    2. El lenguaje VHDL

    El significado de las siglas VHDL es VHSIC(Very High Speed Integrated Circuit)Hardware Description Language, es decir, lenguaje de descripcin hardware de circuitosintegrados de muy alta velocidad. VHDL es un lenguaje de descripcin y modeladodiseado para describir, en una forma en que los humanos y las mquinas puedan leer yentender la funcionalidad y la organizacin de sistemas hardware digitales, placas decircuitos y componentes.

    VHDL fue desarrollado como un lenguaje para el modelado y simulacin lgicadirigida por eventos de sistemas digitales, y actualmente se utiliza tambin para la sntesisautomtica de circuitos. El VHDL fue desarrollado de forma muy parecida al ADA debidoa que el ADA fue tambin propuesto como un lenguaje que tuviera estructuras y elementossintcticos que permitieran la programacin de cualquier sistema hardware sin limitacinde la arquitectura. El ADA tena una orientacin hacia sistemas en tiempo real y alhardware en general, por lo que se lo escogi como modelo para desarrollar el VHDL.

    VHDL es un lenguaje con una sintaxis amplia y flexible que permite el modeladoestructural, en flujo de datos y de comportamiento hardware. VHDL permite el modelado

    preciso, en distintos estilos, del comportamiento de un sistema digital conocido y eldesarrollo de modelos de simulacin.

    Uno de los objetivos del lenguaje VHDL es el modelado. Modelado es el desarrollode un modelo para simulacin de un circuito o sistema previamente implementado cuyocomportamiento, por tanto, se conoce. El objetivo del modelado es la simulacin.

    Otro de los usos de este lenguaje es la sntesis automtica de circuitos. En el

    proceso de sntesis se parte de una especificacin de entrada con un determinado nivel deabstraccin y se llega a una implementacin ms detallada, menos abstracta. Por tanto, lasntesis es una tarea vertical entre niveles de abstraccin, del nivel mas alto en la jerarquade diseo hacia el ms bajo nivel de la jerarqua.

    El VHDL es un lenguaje que fue diseado inicialmente para ser usado en elmodelado de sistemas digitales. Es por esta razn que su utilizacin en sntesis no esinmediata, aunque lo cierto es que la sofisticacin de las actuales herramientas de sntesises tal que permiten implementar diseos especificados en un alto nivel de abstraccin.

    La sntesis a partir de VHDL constituye hoy en da una de las principalesaplicaciones del lenguaje con una gran demanda de uso. Las herramientas de sntesis

    basadas en el lenguaje permiten en la actualidad ganancias importantes en la productividadde diseo.

    Algunas ventajas del uso de VHDL para la descripcin hardware son:

    VHDL permite disear, modelar y comprobar un sistema desde un altonivel de abstraccin bajando hasta el nivel de definicin estructural de

    puertas.

  • 8/10/2019 170pub

    6/88

    6

    Circuitos descritos utilizando VHDL, siguiendo unas guas parasntesis, pueden ser utilizados por diversas herramientas de sntesis paracrear e implementar circuitos.

    Los mdulos creados en VHDL pueden utilizarse en diferentes diseos,lo que permite la reutilizacin del cdigo. Adems, la mismadescripcin puede utilizarse para diferentes tecnologas sin tener queredisear todo el circuitos.

    Al estar basado en un estndar(IEEE Std 1076-1987, IEEE Std 1076-1993) los ingenieros de toda la industria e diseo pueden usar estelenguaje para minimizar errores de comunicacin y problemas decompatibilidad.

    VHDL permite diseo Top-Down, esto es, describir(modelar) elcomportamiento de los bloques de alto nivel, analizarlos(simularlos) yrefinar la funcionalidad en alto nivel requerida antes de llegar a nivelesms bajos de abstraccin de la implementacin del diseo.

    Modularidad: VHDL permite dividir o descomponer un diseohardware y su descripcin VHDL en unidades ms pequeas.

    2.1 VHDL describe estructura y comportamiento

    Existen dos formas de describir un circuito. Por un lado se puede describir uncircuito indicando los diferentes componentes que lo forman y su interconexin, de estamanera se tiene especificado un circuito y se sabe cmo funciona. Esta es la forma habitualen que se han venido describiendo circuitos, siendo las herramientas utilizadas para ello lasde captura de esquemas y las de descripcin netlist.

    La segunda forma consiste en describir un circuito indicando lo que hace o cmo

    funciona, es decir, describiendo su comportamiento. Naturalmente esta forma de describirun circuito es mucho mejor para un diseador puesto que lo que realmente le interesa es elfuncionamiento del circuito ms que sus componentes. Por otro lado, al encontrarse lejosde lo que es realmente un circuito, se pueden plantear algunos problemas a la hora deimplementarlo a partir de la descripcin de su comportamiento.

    El VHDL va a ser interesante puesto que va permitir los dos tipos dedescripciones:

    Estructura: VHDL puede ser usado como un lenguaje de Netlist normal y corrientedonde se especifican por un lado los componentes del sistema y por otro

    sus interconexiones. Comportamiento: VHDL tambin se puede utilizar para la descripcin comportamental

    o funcional de un circuito. Esto es lo que lo distingue de un lenguaje deNetlist. Sin necesidad de conocer la estructura interna de un circuito esposible describirlo explicando su funcionalidad. Esto es especialmente tilen simulacin, ya que permite simular un sistema sin conocer su estructurainterna. As, este tipo de descripcin se est volviendo cada da msimportante porque las actuales herramientas de sntesis permiten lacreacin automtica de circuitos a partir de una descripcin de sufuncionamiento.

  • 8/10/2019 170pub

    7/88

    7

    Muchas veces la descripcin comportamental se divide a su vez en dos,dependiendo del nivel de abstraccin y del modo en que se ejecutan lasinstrucciones. Estas dos formas comportamentales de describir circuitosson la deflujo de datos y la algortmica.

    2.1.1 Ejemplo bsico y estilos de descripcin en VHDL

    VHDL presenta tres estilos de descripcin de circuitos dependiendo del nivel deabstraccin. El menos abstracto es una descripcin puramente estructural. Los otros dosestilos representan un descripcin comportamental o funcional, y la diferencia viene de lautilizacin o no de la ejecucin serie.

    Ahora mediante un ejemplo de un multiplexor explicar la forma en que se escribendescripciones en VHDL, se van a mostrar tres estilos de descripcin.

    Ejemplo. Describir en VHDL un circuito que multiplexe dos lneas de entrada

    como el de la siguiente figura. Figura 1

    Figura 1. Multiplexor

    2.1.2 Descripcin algortmica

    Lo se va a realizar a continuacin es la descripcin comportamental algortmica delcircuito de la figura anterior, despus se realizar la transferencia entre registros, que siguesiendo comportamental, y por ltimo se ver la descripcin estructural mostrando as lasdiferencia.

    La sintaxis del VHDL no es sensible a maysculas o minsculas, por lo que sepuede escribir como se prefiera. A lo largo de las explicaciones se pondrn siempre laspalabras clave del lenguaje en maysculas para distinguirlas de las variables y otroselementos. Esto no significa que durante la descripcin de diseos se tenga que hacer as,

  • 8/10/2019 170pub

    8/88

    8

    de hecho resulta ms rpido escribir siempre en minsculas. Se ha hecho as en todos losejemplos para mayor claridad del cdigo.

    En primer lugar, sea el tipo de descripcin que sea, hay que definir el smbolo oENTIDAD del circuito. En efecto, lo primero es definir las entradas y salidas del circuito,es decir, la caja negra que lo define. Se llama entidad porque en la sintaxis de VHDL esta

    parte se declara con la palabra clave ENTITY. Esta definicin de entidad, que suele ser laprimera parte de toda descripcin VHDL, se expone a continuacin. En esta partepondremos un ejemplo de lo que es una

    entidad para poder hacer una descripcin de cada tipo especificado, despus en temasposteriores definiremos con claridad que es una ENTIDAD y tambin una arquitectura, ypara que sirven.

    Primero antes de pasar a la declaracin pondremos un dibujo de lo que es la cajanegra es decir la ENTIDAD de este multiplexor, que ser la siguiente. Figura 2

    Figura 2.Bloque multiplexor

    Ahora declararemos la ENTIDAD con lenguaje VHDL es decir las entradas y salidas quetenemos.

    ENTITYmultiplexor IS --Bloque multiplexor

    Port( entr_a:instd_logic --Entrada a entr_b:instd_logic --Entrada b mux :instd_logic; --Seleccionamos la entrada sortida: outstd_logic --Salida

    ENDmultiplexor;

    Entr_a Entr_b

    Mux

    Sortida

    Multiplexor

  • 8/10/2019 170pub

    9/88

    9

    Esta porcin del lenguaje indica que la entidad multiplexor(que es el nombre quese le ha dado al circuito) tiene tres entradas de tipo bity una salida tambin del tipo bit.

    Los tipos de las entradas y salidas se vern ms adelante. El tipo bitsimplemente indicauna lnea que puede tomar valores 0 o 1.

    Ahora en lo que llamamos ARQUITECTURA definiremos lo que hace esta cajanegra que llamamos ENTIDAD es decir definiremos la funcin que hace, diremos quehacen estas entradas y salidas que hemos definido antes. En la ARQUITECTURA

    pondremos como se hace el multiplexor. Se muestra a continuacin la descripcincomportamental del multiplexor:

    ARCHITECTURE comportamental OFmuxltiplexorISBEGIN IF (mux=0) THEN Sortida

  • 8/10/2019 170pub

    10/88

    10

    ARCHITECTURE flujo OFmultiplexor IS

    SIGNALnmux: std_logic; SIGNALsor0: std_logic; SIGNALsor1: std_logic;

    BEGIN

    nmux

  • 8/10/2019 170pub

    11/88

    11

    COMPONENT suma_resta

    Port ( aa: instd_logic; bb:instd_logic; operacio0 instd_logic; operacio1:instd_logic; operacio2:instd_logic; cout:out std_logic; sor_sum_res:outstd_logic;

    END COMPONENT;

    1. Primero definiremos los bloques por separado, y luego los uniremos, empezaremospor el bloque de sumar y restar.Figura 3

    Figura 3. Componente suma_resta

    2. Ahora haremos el bloque que nos har la funcin AND y la funcin OR. Figura 4

    Figura 4. Componente AND/OR

    aa bb

    Sum/Res

    Sor_sum_res

    operacio0

    operacio1

    operacio2

    aa bb

    And/Or

    Sor_and_or

    operacio0

    operacio1

    operacio2

    COMPONENTand_or

    Port ( aa:instd_logic ; bb: instd_logic; operacio0: instd_logic; operacio1: instd_logic; operacio2: instd_logic; sor_and_or: outstd_logic;

    END COMPONENT;

  • 8/10/2019 170pub

    12/88

    12

    3. Por ltimo haremos el bloque multiplexor que ser el siguiente. Figura 5

    Figura 5. Componente multiplexor

    4. Ahora uniremos todos los bloques y nos quedar la ALU tal y como se puede veren la figura. Figura 6

    Figura 6. ALU

    Entr_a Entr_b

    Multiplexor

    Sortida

    operacio0

    operacio1

    operacio2

    COMPONENTmultiplexor

    Port ( entr_a: instd_logic; entr_b: instd_logic; operacio0: instd_logic; operacio1: instd_logic; operacio2: instd_logic; sortida: outstd_logic

    END COMPONENT

    a b

    Op0

    Op1

    Op2

    U1 U2

    U3

    Cout

    x y

    resultat

    aa aabb bb

    Sor_sum_res Sor_and_or

    Entr_a Entr_b

    Sortida

    CoutSum/Res And/Or

    Multiplexor

  • 8/10/2019 170pub

    13/88

    13

    Seguidamente haremos el programa para unir los diferentes componentes y as sever como se ha hecho para hacer una descripcin estructural.

    Primero mediante una entidad general tal y como habamos definido en elenunciado pondremos las diferentes entradas y salidas de las que est compuesta nuestraALU, que sern, las siguientes.

    ENTITYalu IS Port ( a: instd_logic --Entrada de 1 bit b: instd_logic --Entrada de 1 bit resultat: outstd_logic --Resultado de la operacin

    op0: instd_logic; --Op0,Op1,Op2 sirven op1:instd_logic; --para seleccionar la operacin op2:instd_logic; --que tiene que realitzar la ALU

    cout: outstd_logic); --Carry de salidaENDalu;

    Ahora en el siguiente trozo de programa haremos las uniones de los diferentesbloques mediante una arquitectura como la siguiente

    ARCHITECTUREestructura OFalu IS

    COMPONENTand_or --Bloque AND y OR

    Port ( aa:instd_logic ; --Entrada del bloque bb: instd_logic; --Entrada del bloque operacio0: instd_logic; operacio1: instd_logic; --operacin a realizar

    operacio2: instd_logic; sor_and_or: outstd_logic; --salida

    END COMPONENT;

    COMPONENT suma_resta --Bloque suma y resta

    Port ( aa: instd_logic; --Entrada del bloque bb:instd_logic; operacio0 instd_logic; operacio1:instd_logic; operacio2:instd_logic; --Seleccin de operacin

    cout:out std_logic; --Carry de salida sor_sum_res:outstd_logic --Salida

    END COMPONENT;

    COMPONENTmultiplexor --Bloque multiplexor

    Port ( entr_a: instd_logic; entr_b: instd_logic; --Entrada del bloque operacio0: instd_logic;

  • 8/10/2019 170pub

    14/88

    14

    operacio1: instd_logic; operacio2: instd_logic; --Seleccin de operacin sortida: outstd_logic; --Salida

    END COMPONENT;

    SIGNALx: std_logic; --Variables intermedias para unir SIGNALy: std_logic; --los 3 bloques anteriores BEGIN

    U1 :and_orport map (a,b,op0,op1,y); --Paso de parmetros U2: suma_restaport map (a,b,op0,op1,op2,cout,x); --Paso de parmetros U3: multiplexorport map (x,y,op0,op1,op2,resultat); --Paso deparmetros

    ENDestructura;

    Como se puede ver en el ejemplo anterior en las ltimas lineas hacemos el paso de

    parmetros de los componentes a las variables de la ENTIDADprincipal que es la entidadALU, lo nico que se tiene que tener en cuenta es que al hacer el paso de parmetros lohagamos en igual orden con el que hemos definido las variables, ya que si no al compilarnos dar error si asignamos variables de tipoina tipo out, o igual no nos da error pero siinvertimos variables el programa no nos va a funcionar i ser un autntico desastre.

    2.2 Unidades bsicas de diseo

    2.2.1Cmo se declara una entidad

    En la declaracin de entidades, se definen las entradas y salidas de nuestro chip,diciendo cuntas son, de qu tamao (de 0 a n bits), modo (entrada, salida, ...) y tipo(integer, bit,...) . Las entidades pueden definir bien las entradas y salidas de un diseo msgrande o las entradas y salidas de un chip directamente. La declaracin de entidades esanloga al smbolo esquemtico de lo que queremos implementar, el cual describe lasconexiones de un componente al resto del proyecto, es decir, si hay una entrada o puerto de8 bits, o dos salidas o puertos de 4 bits, etc. La declaracin de entidades tiene la siguienteforma:

    ENTITYprogramaIS 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 salidascon la sintaxis que se ver a continuacin. Laslneas empezadas por dos guiones son ignoradas

    por el compilador. As mismo, recordamos que elcompilador no distingue las maysculas de lasminsculas

  • 8/10/2019 170pub

    15/88

    15

    );ENDprograma;

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

    Como hemos dicho, cada seal en una declaracin de entidad est referida 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 sele pueden asignar valores. A cada puerto se le debe asignar un nombre vlido, Un ejemplode declarar los puertos es el siguiente:

    nombre_variable: modo tipo; Forma genrica de designar un puerto

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

    y su nombre es "puertoa"

    puertob: inbit_vector(0 to7);El segundo puerto es un vector de 8 bits deentrada siendo el MSB el puertob(0) y el

    LSB el puertob(7)

    puertoc: outbit_vector(3 downto0);El tercer puerto es un vector de 4 bits

    de salida siendo el MSB el puertoc(3) y elLSB el puertoc(0)

    puertod: bufferbit;El cuarto puerto es un buffer de un

    solo bit, cuyo nombre es "puertod"

    puertoe:inoutstd_logic;El quinto puerto es una entrada/salida

    del tipo estndar logic de un solo bit

    Seguido del nombre del puerto y separado de ste por dos puntos, viene el tipo depuerto que va a ser. El modo describe la direccin en la cual la informacin es transmitidaa travs del puerto. stos slo pueden tener cuatro valores: in, out,buffere inout. Si no seespecifica nada, se asume que el puerto es del modo in.

    Modo in: Un puerto es de modo in si la informacin del mismo, solamentedebe entrar a la entidad, soliendo ser usado para relojes, entradas de control(como las tpicas load, reset y enable), y para datos de entrada unidireccionales.

    Modo out: Un puerto es de modo outsi la informacin fluye hacia fuera de la

    entidad. Este modo no permite realimentacin, ya que al declarar un puertocomo out, estamos indicando al compilador que el estado lgico en el que seencuentra no es leble. Esto le da una cierta desventaja, pero a cambio consumemenos recursos de nuestros dispositivos lgicos programables.

    Modo buffer: Es usado para una realimentacin interna (es decir, para usareste puerto como un driver dentro de la entidad). Este modo es similar al modoout, pero adems, permite la realimentacin. Este puerto no es bidireccional, ysolo puede ser conectado directamente a una seal interna, o a un puerto demodobufferde otra entidad. Una aplicacin muy comn de este modo es la de

  • 8/10/2019 170pub

    16/88

    16

    salida de un contador, ya que debemos saber la salida en el momento actualpara determinar a salida en el momento siguiente.

    Modo inout: Es usado para seales bidireccionales, es decir, si necesitamosque por el mismo puerto fluya informacin tanto hacia dentro como haciaafuera de la entidad. Este modo permite la realimentacin interna. Este modo

    puede reemplazar a cualquiera de los modos anteriores, pudindose usar estemodo para todos los puertos, pero reduciremos la lectura posterior del cdigo

    por otra persona, y reduciendo los recursos disponibles de la cpsula.

    Como se ha comentado arriba, VHDL slo admite cuatro modos para los puertos,pero puede haber tantos tipos de seales como queramos, ya que las podemos crearnosotros mismos. VHDL incorpora varios tipos de forma estndar (por haber sido creadoas), pudiendo usar otros mediante libreras normalizadas, y los creados por nosotros. Lanorma internacional IEEE 1076/93 define cuatro tipos que son nativos para VHDL comoson:

    Tipo boolean: puede tomar dos valores: verdadero/true o falso/false. Unejemplo tpico es la salida de un comparador que da verdadero si los nmeroscomparados son iguales y falso si no lo son:

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

    Tipobit:Puede tomar dos valores: 0 1 ( o tambin "low" o "high", segn se

    prefiera). Es el tipo ms usado de los nativos.

    Tipobit_vector:Es un vector de bits. Debemos tener cuidado al definir el pesode los bits que lo integran, ya que segn pongamos la palabra reservadadowntoo toestaremos diciendo que el bit ms significativo es el nmero msalto o el ms bajo del vector, respectivamente.

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

    numero : bit_vector (7 downto

    0);

    En este caso el MSB es numero(7) y

    numero(0) el LSB

    Tipo integer:Para manejar nmeros enteros. Hay que advertir que el uso deenteros consume muchos recursos de cpsula, siempre y cuando seasintetizable, ya que est prcticamente creado para la simulacin.

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

  • 8/10/2019 170pub

    17/88

    17

    std_logic_vector. Como su nombre pretende indicar, es el tipo de tipo lgico estndar, quees el ms usado en la actualidad.

    Primero pondremos un ejemplo sencillo de una entidad que consiste en un bloqueque nos haga la funcin AND de dos entradas a y b. Figura 7

    Figura 7. Bloque AND

    ENTITYand ISport( Cabecera de la entidad, cuyo nombre es and

    a,b: in std_logic;resultado:outbit;

    a y bson las entradas de 1 bit

    resultadoes la salida de un slo bit

    );

    ENDand;

    Se finaliza la entidad con la palabra clave endy el

    nombre de la misma and).

    Como ejemplo, a continuacin se incluye la declaracin de entidades de unmultiplexor de 2x1 de cuatro bits, con entrada de habilitacin o enable. El multiplexornecesita las entradas de informacin, la seal de seleccin, la de enable y las salidas deinformacin. Figura 8

    Figura 8. Multiplexor

    a b

    AND

    resultado

    in1 in2

    Multiplexor

    out1

    selec

    4 bits 4 bits

    4 bits

  • 8/10/2019 170pub

    18/88

    18

    ENTITYmultiISport(Cabecera ya estudiada arriba, en la que multies elnombre de la entidad

    selec: inbit;in1:instd_logic_vector(3 downto0);in2:instd_logic_vector(3 downto0);

    out1:outstd_logic_vector(3 downto0));

    seleces otro bit de entrada, que seleccionala entrada in1o in2, ambas de 4 bits

    out1 es de salida, que lgicamente, debeser de la misma longitud que in1e in2

    ENDmulti;

    Otro ejemplo se muestra a continuacin como es la entidad para un comparador.Figura 9

    Figura 9. Comparador

    ENTITYcompa ISport( Cabecera de la entidad, cuyo nombre es compa

    a,b: instd_logic_vector(3 downto0);igual:outbit;

    a y bson las entradas de cuatro bits

    iguales la salida de un slo bit

    );ENDcompa;

    Se finaliza la entidad con la palabra clave endy elnombre de la misma (compa).

    Debemos recordar dos puntos ms a la hora de dar el nombre a algn puerto, que setratarn ms adelante en el apartado de objetos:

    VHDL no distingue las letras maysculas de las minsculas, por lo que unpuerto llamado por nosotros "EnTraDA" ser equivalente a otro que se llame"ENTRADA" o "entrada".

    a b

    Comparador

    igual

    4 bits 4 bits

    4 bits

  • 8/10/2019 170pub

    19/88

    19

    El primer carcter de un puerto slo puede ser una letra, nunca un nmero. Asmismo, no pueden contener caracteres especiales como $, %, ^, @, ... y doscaracteres de subrayado seguidos.

    Estos dos detalles a tener en cuenta surgieron del comit que cre este lenguaje, porlo que no se debe considerar como un fallo de nuestra herramienta, sino como unacaracterstica ms del lenguaje.

    2.2.2 Cmo se declara una arquitectura

    La arquitectura es lo que nos dice que debemos hacer con los puertos 8o grupos deseales de entrada, declarados previamente en la entidad) para llegar a tener los puertos desalida (tambin declarados en la entidad). En la declaracin de entidades es donde residetodo el funcionamiento de un programa, ya que es ah donde se indica que hacer con cadaentrada, para obtener la salida. Si la entidad es vista como una "caja negra", para la cual lo

    nico importante son 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 partes como mnimo,aunque suelen ser ms:

    ARCHITECTUREarchpro OFprograma IS

    Cabecera de la arquitectura. En sta, archproes un nombre cualquiera (suele empezar por"arch", aunque no es necesario) yprogramaes el nombre de una entidad existente en elmismo fichero

    -- declaracin de seales y otros accesorios 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 al

    programa.

    ENDarchpro; Fin del programa

    Como podemos apreciar, es una estructura muy sencilla, y que guarda alguna

    relacin con Turbo Pascal. Las sentencias entre beginy endson las que realmente "hacenalgo". A continuacin, pondremos primero la arquitectura de la AND la cual debe ir unidoa la entidad expuesta en el apartado de la declaracin de entidades, ya que una parte sin laotra carecen de sentido. Figura 10

  • 8/10/2019 170pub

    20/88

    20

    Figura 10.AND

    ARCHITECTUREarchiandOFand IS

    Cabecera de la arquitectura. En esta ocasinel nombre de la arquitectura es archiand, y elde la entidad es and, la cual est definidaanteriormente.

    -- sealesEn este programa no vamos a necesitarseales

    BEGIN Se da comienzo al programa

    resultado

  • 8/10/2019 170pub

    21/88

    21

    Figura 11.Multiplexor

    Ahora haremos el programa con VHDL, que ser el siguiente:

    ARCHITECTUREarchimultiOFmulti IS

    Cabecera de la arquitectura. En estaocasin el nombre de la arquitectura esarchimulti, y el de la entidad es multi,la cual est definida anteriormente.

    SIGNAL sor1 : std_logic_vector (3 downto0);

    SIGNAL sor2 : std_logic_vector (3 downto0);

    SIGNALselecnot : std_logic;

    Seales necesarias tal como se puedeobservar en el dibujo anterior

    BEGIN Se da comienzo al programa

    Selecnot

  • 8/10/2019 170pub

    22/88

    22

    Out(0)

  • 8/10/2019 170pub

    23/88

    23

    simulacin y ya se tiene la sntesis. A partir de este primer intento, hay que ir optimizandoel circuito. En realidad las herramientas de sntesis siguen una aproximacin distinta, yaque de otra manera el circuito acabara siendo algo parecido a un microprocesador cuandoquiz en realidad slo se pretende, eventualmente, implementar una puerta lgica.

    La aproximacin de las herramientas de sntesis consiste en, partiendo de ladescripcin original, reducir el nivel de abstraccin hasta llegar a un nivel de descripcinestructural. La sntesis es por tanto una tarea vertical entre los niveles de abstraccin de uncircuito. As, una herramienta de sntesis comenzara por la descripcin comportamentalabstracta algortmica e intentara traducirla a un nivel de transferencia entre registrosdescrita con ecuaciones de conmutacin. A partir de esta descripcin se intentatransformarla a una descripcin estructural donde se realiza, adems, lo que se llama elmapeado tecnolgico, es decir, la descripcin del circuito utilizando los componentes deuna biblioteca concreta que depende de la tecnologa con la cual se quiera implementar eldiseo.

    Las herramientas de sntesis actuales cubren a la perfeccin la sntesis a partir dedescripciones RTL y estruturales, pero no estn tan avanzadas en el manejo de diseosdescritos en un nivel de abstraccin ms alto. No es que no se pueda sintetizar a partir deun nivel alto de abstraccin, lo que ocurre es que la sntesis obtenida no es quiz la msptima para el circuito que se pretende realizar.

    2.4 Construcciones bsicas

    El primer paso es ver si un circuito describe lgica combinacional o secuencial. Uncircuito describe lgica combinacional si la salida depende nicamente de la entrada en eseinstante, y no de la entrada que hubiera tenido en un pasado, es decir, ante una entradadada la salida es siempre la misma. Un circuito describe lgica secuencial cuando la salidadepende de la entrada actual y de las entradas anteriores, o dicho de otra forma, la salidadepende de la entrada y del estado del sistema. Esto introduce un nuevo elemento dentrodel sistema que ser la memoria. Normalmente el elemento de memoria ser una seal quefrente a unos estmulos captura otra seal y en caso contrario permanece igual. Esto nos dauna pista de si un circuito es secuencial y si se realizar por tanto a partir de elementos dememoria como pueden ser cerrojos o registros.

    En este proyecto solo estudiaremos la lgica combinacional ya que solo interviene estetipo, la idea bsica es que si en la estructura del lenguaje no se introducen elementos dememoria entonces se est delante de una descripcin combinacional. Se va a mostrarentonces cmo evitar que aparezcan elementos de memoria para que el circuito se realiceslo con puertas lgicas.

  • 8/10/2019 170pub

    24/88

  • 8/10/2019 170pub

    25/88

    25

    2.7 Palabras reservadas

    Las palabras reservadas son un conjunto de identificadores que tienen unsignificado especfico en VHDL. Estas palabras son empleadas dentro del lenguaje a lahora de realizar un diseo. Por esta razn y buscando obtener claridad en el lenguaje, las

    palabras reservadas no pueden ser empleadas como identificadores definidos por elusuario.

    Las palabras reservadas por VHDL son:

    abs else nand return

    access elsif new select

    after end next severityalias entity nor signal

    all exit not subtype

    and file null then

    architecture for of to

    array function on transoprt

    asser generate open type

    attribute generic or units

    begin guarded others until

    block if out use

    body in package variable

    buffer inout port wait

    bus is procedure when

    case label process while

    component library range with

    configuration linkage record xor

    constant loop register

    disconnect map rem

    downto mod report

  • 8/10/2019 170pub

    26/88

    26

    2.8 Smbolos especiales

    Adems de las palabras reservadas empleadas como identificadores predefinidos,VHDL utiliza algunos smbolos especiales con funciones diferentes y especficas, tales

    como el smbolo "+" se utiliza para representar la operacin suma y, en este caso, es unoperador. El smbolo "--" es empleado para los comentarios realizados por el usuario, detal forma que el programa al encontrar una instruccin precedida por "--" la saltarignorando su contenido. De esta forma, el programador puede hacer ms comprensible elcdigo del programa.

    Los smbolos especiales en VHDL son:

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

    Para finalizar, recordar el smbolo ms empleado por un programador que es el ";",smbolo que debe finalizar todas y cada una de las lneas del cdigo dando por terminadadicha sentencia en el programa.

  • 8/10/2019 170pub

    27/88

    27

    3 Explicacin de la ALU de 8 bits

    3.1 Explicacin paso a paso

    En este captulo explicaremos paso a paso como se ha hecho la ALU de 8 bits,mediante los esquemas. Cuando tenemos todos los esquemas hechos, entonces haremos el

    programa en VHDL que est expuesto en el anexo 1.

    Una vez se tienen claros todos los esquemas, es bastante sencillo programar enVHDL.

    Primero ahora definiremos los diferentes bloques que tendr la ALU, que serntres:

    Bloque que ara la suma y la resta y tambin el inverso del registro B

    Bloque que ara las operaciones AND i OR

    Bloque multiplexor

    Todos estos bloques estarn dentro de nuestra ALU Ahora definiremos por pasostodos los bloques y el ltimo ser hacer un esquema general de todo unido. Primero

    empezaremos por el bloque suma_resta que ser el siguiente tal y como se puede observar.en la figura siguiente. Figura 12.

    Figura 12. Esquema general bloque suma_resta

    En la figura 12 hemos definido el bloque las entradas y salidas que tendr,posteriormente cuando hagamos definido todos los bloques y tambin los hagamosinterconexionado todos, haremos los esquemas interiores de cada bloque por separado.

    aa bb

    Sum/Res

    Sor_sum_res

    operacio0

    operacio1operacio2Cout

  • 8/10/2019 170pub

    28/88

    28

    Ahora pasaremos a hacer el esquema del bloque AND/OR tal y como se muestra en

    la siguiente figura. Figura 13.

    Figura 13. Esquema general bloque AND/OR

    En este bloque de la figura 13anterior tambin podemos observar las entradas ysalidas que tendremos.

    Ahora haremos el bloque multiplexor que lo que nos har este bloque es escoger sitenemos que coger el resultado del bloque suma_resta o del bloque AND/OR, y ponerlo ala salida, dependiendo de que hagamos puesto en las opereaciones escogeremos un

    resultado, u otro. Seguidamente pasaremos a ver la figura del multiplexor. Figura 14

    aa bb

    And/Or

    Sor_and_or

    operacio0operacio1operacio2

    Entr_a Entr_b

    Multiplex

    Sortida

    operacio0

    operacio1operacio2

  • 8/10/2019 170pub

    29/88

    29

    Figura 14. Esquema general bloque multiplexor

    Ahora lo que haremos es unir todos los bloques anteriores, y entonces ya tendremos

    definida nuestra ALU, en la siguiente figura. Figura 15pondremos el esquema general dela ALU con todas sus entradas y salidas.

    Figura 15. ALU

    Como se puede observar en la figura anterior. Figura 15 tendremos nuestras entradasy salidas generales que sern, las que estn en azul que estn fuera del cuadrado son lasentradas y salidas generales, mientras que las que estn dentro del cuadrado, que estn ennegro sern variables internas que he creado para despus poder disear el programa,despus aparte de estas entradas y salidas que tenemos internamente como ya se ver

    posteriormente ir creando nuevas variables y seales para que todo quede ms claro.

    Variables generales de entrada y salida de la ALU:1. A) Entrada de 8 bits

    2. B) Entrada de 8 bits

    3. Cout) Salida de 1 bit

    4. Resultat) Salida de 8 bits

    5. Op0) Entrada de 1 bit

    6. Op1) Entrada de 1 bit

    a b

    Op0

    Op1

    Op2

    U1 U2

    U3

    Cout

    x y

    resultat

    aa aabb bb

    Sor_sum_res Sor_and_or

    Entr_a Entr_b

    Sortida

    CoutSum/Res And/Or

    Multiplex

  • 8/10/2019 170pub

    30/88

    30

    7. Op2) Entrada de 1 bit

    Como se puede observar tendremos dos entradas de 8 bits que sern con las queharemos las operaciones, y despus tres bits Op0, Op1, Op2, que nos diran que operacionesqueremos hacer: suma, resta, inversa de b, AND, OR. Por ltimo tendremos el resultado de

    8 bits, y tambin tendremos el carry de salida en caso de que hagamos una suma o unaresta, en el caso de que hagamos otras operaciones no lo tendremos en cuenta.

    3.2 Esquema Interno Bloque AND/OR

    Ahora primero haremos la tabla de la verdad. Figura 16

    AA BB Funcin SALIDA

    0 0 0 0

    0 1 0 0

    1 0 0 0

    1 1 0 1

    0 0 1 0

    0 1 1 1

    1 0 1 1

    1 1 1 1

    Figura 16.Tabla 1

    La variable funcin sirve para decidir si queremos hacer una AND o una OR. Comose puede observar si ponemos un 0 en funcin haremos la funcin AND, y si por elcontrario ponemos un 1 en funcin haremos la funcin OR Ahora pasaremos hacer lasimplificacin por Karnaught. Figura 17

    Figura 17.Simplificacin AND/OR

    aa

    bbFuncin

    0

    00 0

    0

    1

    11

    11

    111 1

    aa*bb

    aa*funcin

    bb*funcin

    Salida = aa*bb + aa*funcin + bb*funcin

    (1)

  • 8/10/2019 170pub

    31/88

    31

    Entonces como las funcines yo las elegir con Operacion0, Operacion1,Operacion2, esto tengo que adaptar la variable funcin a estas operaciones, y entonces nosquedar ya la figura del bloque interno AND/OR que ser el siguiente. Figura 18.

    Figura 18.Esquema interno AND/OR

    Las variables intermedias que he puesto y que no he comentado, son variables quenecesitar para hacer el programa en VHDL, si se quieren ver para que sirven estasvariables consultar el cdigo del programa VHDL en el anexo 1, y mirar en el apartado del

    bloque AND/OR donde se vern estas seales.

    Para sacar la variable funcio de las operacio0,operacio1, operacio2, mas adelantepondr una tabla y todas las simplificaciones donde se podr apreciar como se hanobtenido, mirar figura 23.

  • 8/10/2019 170pub

    32/88

    32

    3.3 Esquema interno bloque suma_resta

    Ahora en este apartado pondremos los dibujos necesarios para que se entienda el

    bloque que nos har la suma y la resta, y tambin la inversin de la seal B. Figura 19

    Figura 19.Sumador

    En la figura 19podemos ver que solo hemos implemntado el bit 0, el bit 4 y el bit7, pero para hacer los otros que faltan en medio es lo mismo. Tambin podemos observarque ponemos unas seales que aqu no nos interesan, pero veremos que para hacer el

    programa en VHDL sern necesarias, mirar anexo 1en el bloque suma_resta y las veremosidentificadas.

    Cout Cin

    Invb

    aa(0)aa(4)aa(7) bb(0)bb(4)bb(7)

    ClraClra Clra

    Sumador de 8 Bits

    Sor_sum_res(0)Sor_sum_res(4)Sor_sum_res(7)

    a_entr_sum(0)a_entr_sum(7) a_entr_sum(4)

    b_entr_sum(0)

    b_entr_sum(4)

    b_entr_sum(7)

  • 8/10/2019 170pub

    33/88

    33

    En la figura 19 Dentro del bloque de color verde que pone sumador de 8 bits dentrohabr ocho sumadores como los que se muestran en la siguiente figura. Figura 20.

    Figura 20.Sumador interno

    Ahora con las dos figuras anteriores pondremos como quedara el dibujo final en lasiguiente figura. Figura 21.

    Figura 21. Sumador completo

    Sor_sum_res(0)

    a_entr_sum (0)

    b_entr_sum(0)

    Cin(0)

    Cin(1)

    Bit0(0)

    Bit1(0)

    Bit2(0)

    Cout Cin

    Invb

    aa(0)aa(4)aa(7) bb(0)bb(4)bb(7)

    ClraClraClra

    Sumador de 8 Bits

    Sor_sum_res(0)Sor_sum_res(4)Sor_sum_res(7)

    a_entr_sum(0)a_entr_sum(7) a_entr_sum(4)

    b_entr_sum(0)

    b_entr_sum(4)

    b_entr_sum(7)

    Cin(1)

  • 8/10/2019 170pub

    34/88

  • 8/10/2019 170pub

    35/88

    35

    3.5 Tabla y simplificaciones

    Una vez tenemos claro todos los dibujos anteriores tendremos que dibujar una tablacon las operaciones que tenemos que hacer, y segn las entradas Op que pongamostenemos que definir que salida queremos. Esta tabla tambin nos servir para simplicar

    como veremos prximamente. Figura 23

    Op2 Op1 Op0 Operacin CLRA INVB MUX CIN Funcio

    0 0 0 Inversion B 1 1 0 0 X

    0 0 1 Suma 0 0 0 0 X

    0 1 0 Resta 0 1 0 1 X

    0 1 1 AND X X 1 X 0

    1 0 0 OR X X 1 X 1

    Figura 23. Tabla 2

    Aqu ahora pondremos todas las tablas de Karnaught de cada variable.

    3.5.1. Karnaught de CLRA. Figura 24

    Figura 24.Simplificacin CLRA

    10

    11

    0

    1

    00

    01

    Op0

    Op1

    Op2

    X

    X

    1

    Op0 * Op1

    CLRA = Op0 * Op1 (2)

  • 8/10/2019 170pub

    36/88

    36

    Con la funcin anterior entonces tendremos el siguiente esquema, Figura 25.

    Figura 25. Esquema CLRA

    3.5.2. Karnaught de INVB que ser. Figura 26

    Figura 26.Simplificacin INVB

    10

    11

    01

    0

    1

    00

    Op0

    Op1

    Op2

    X

    X

    11 1

    Op0 * Op2

    INVB = Op0 * Op2(3)

  • 8/10/2019 170pub

    37/88

    37

    Seguidamente pondremos el esquema. Figura 27

    Figura 27. EsquemaINVB

    3.5.3. Simplificacin de Mux. Figura 28

    Figura 28. Simplificacin Mux

    1

    1

    1

    0

    MUX = Op0 * Op1 * Op2 + Op0 * Op1 * Op2

    0

    1

    0

    0

    0

    1Op0

    Op1

    Op2

    1

    1

    Op0 * Op1 * Op2

    Op0 * Op1 * Op2

    MUX = Op0 * Op1 * Op2 + Op0 * Op1 * Op2 (4)

  • 8/10/2019 170pub

    38/88

    38

    Ahora pondremos el esquema de la funcin mux, que ser el de la siguiente figura.Figura 29.

    Figura 29. Esquema Multiplexor

    3.5.4. Simplificacin de Cin.Figura 30

    Figura 30.Simplificacin Cin

    10

    11

    01

    0

    1

    00

    Op0

    Op1

    Op2

    X

    Op1 * Op2

    CIN = Op1 * Op2

    1X

    (5)

  • 8/10/2019 170pub

    39/88

    39

    Aqu pondremos su esquema que ser el de la figura siguiente. Figura 31

    Figura 31. EsquemaCin

    Figura 32.Simplificacin funcin

    1

    1

    1

    0

    0

    10

    1

    0

    0Op0

    Op1

    Op2

    X XX

    1

    FUNCIO = Op1 * Op0

    FUNCIO = Op1 * Op0

    3.5.5. Simplificacin de

    funcin. Figura 32

    (6)

  • 8/10/2019 170pub

    40/88

    40

    Aqu pondremos el dibujo de la funcio. Figura 33

    Figura 33.EsquemaFuncio

    Cuando tengo todos los esquemas hechos lo que tendr que hacer esimplementarlos en cdigo VHDL, y ponerlos en su lugar adecuado, para que quede msclaro, mirar el anexo 1 donde aparece el cdigo del programa y se podr ver en losdiferentes apartados todas las variables que hemos visto en las simplificaciones.

    Como se puede observar en el anexo 1, el cdigo una vez tienes hecho todos losesquemas, y lo tienes todo claro resulta bastante evidente como se hace, cuando tienesclaro como se programa en VHDL.

  • 8/10/2019 170pub

    41/88

    41

    4 Guia del programa eProduct Designer

    El programa que utilizaremos para compilar el cdigo VHDL, para probar quefunciona, para sintetizar, para sacar el pin-out de la ALU y para todo ser el eProductDesignertambin dicho Dashboard.

    4.1

    Funcionamiento paso a paso del programa

    4.1.1 Como hacer para compilar

    Aqu pondremos los pasos a seguir para comenzar a utilizar el programa, lo haremosde la siguiente manera:

    1) Abrir en programas eProduct Designer.

    2) Programable Design.

    3) Escogemos el icono siguiente y nos aparecer la siguinte figura 34.

    Figura 34. Men 1

  • 8/10/2019 170pub

    42/88

    42

    4) Abrimos File > Analyze VHDL Design , y entonces podremos ver la figura35.

    5) En el submen de la figura anterior, figura 35 tenemos que elegir la opcinCancelar.

    6) Ahora tendremos que crear un VHDL Workspace para incluir los archivos quenosotros queramos compilar, con las libreras que necesitemos en cada caso.

    7) Seleccionar File > New.

    8) Seleccionar File > Save as.Le ponemos un nombre y lo guardamos dentro deldirectorio que nosotros tenemos los archivos VHDL que queremos compilar. Podemosobsevarlo en la figura 36.

    Figura 35. Men 2

  • 8/10/2019 170pub

    43/88

    43

    Figura 36. Men 3

    9) En el submen de la figura anterior, figura 36 poner un nombre donde ponenombre de archivo y despus seleccionar Guardar.

    10) Ahora lo que tenemos que hacer es seleccionar las libreras que necesitamos paracompilar nuestro programa.

    11) Para seleccionar una determinada librera lo que tenemos que hacer es losiguiente, ponernos encima de la que queramos y pulsar el botn derecho del ratn yentonces nos aparecer el siguiente men, figura 37

  • 8/10/2019 170pub

    44/88

  • 8/10/2019 170pub

    45/88

    45

    Figura 38. Men 5

    Como podemos apreciar en la figura 38 en la librera ieee.lib, vemos que nos aparece unseal, esto quiere decir que nosotros la hemos incluido, en caso de que no aparezca estaseal querr decir que no tenemos la librera seleccionada.

    13) Cuando tengamos la librera seleccionada tendremos que guardar los cambios.Tendremos que ir a File > Save. Se pueden seleccionar tantas libreras como necesitemosen nuestro programa.

    14) Ahora tendremos que crear un nuevo usuario de librera, y lo haremos de la

    siguiente manera.

    15) Seleccionamos Library >Create, nos aparecer el siguiente men. Figura 39.

  • 8/10/2019 170pub

    46/88

  • 8/10/2019 170pub

    47/88

    47

    Figura 40. Men 7

    17) Ahora el siguiente paso ser incluir los ficheros que nosotros queremoscompilar.

    18) Lo haremos de la siguiente manera, iremos a la barra de mens yseleccionaremos Library > Add source files, como aparece en la siguiente figura. Figura41.

  • 8/10/2019 170pub

    48/88

  • 8/10/2019 170pub

    49/88

    49

    19) En la figura anterior Figura 42 seleccionamos los ficheros VHDL quequeremos compilar, en mi caso pondr dos uno el programa en s de la ALU, y el otro queser el fichero de simulacin. En la prxima figura , figura 43podremos observar que heseleccionado los ficheros.

    Figura 43. Men 10

    En la figura anterior, figura 43 cuando vemos que tenemos seleccionados losarchivos, y se observa porque los tenemos de color azul, haremos un click en el botn OK,y entonces nos aparecer la siguiente figura. Figura 44.

  • 8/10/2019 170pub

    50/88

    50

    Figura 44. Men 11

    Como se puede observar en la figura anterior figura 44,en la parte izquierda hayun caseta dibujada llamada ejemplo y de ella cuelgan dos archivos con un punto rojo ytachados. Estos dos archivos, son los que he seleccionado anteriormente para despuscompilarlos. La seal x tachada de color rojo antes de los nombres de los archivos,significa que an no los hemos compilado.

    20) El siguiente paso ser guardar los cambios File > Save.

    21) Ahora compilaremos los ficheros de la siguiente manera. Nos ponemos encimade ejemplo en nuestro caso. Si hubiramos puesto otro nombre nos aparecera el que

    hubiramos puesto. Hacemos un clickencima y entonces nos aparecer de color azul tal ycomo se puede observar en la siguiente figura. Figura 45

  • 8/10/2019 170pub

    51/88

  • 8/10/2019 170pub

    52/88

    52

    Con el paso anterior lo que hemos hecho es compilar los ficheros, si vemos comoen este caso que no nos da error enntonces, pasaremos al siguiente paso. Si por el contrarionos diera algn tipo de error tendramos que coregirlo, y despus volver a compilar.

    23) Ahora una vez compilados los ficheros nos aparecer como sigue. Figura 47

    Figura 47.Men 14

    24) Una vez esto tenemos que guardar File > Save.

    25) El siguiente paso ser salir de este programa File > Exit.

    Una vez hecho esto ya tenemos los ficheros compilados, ahora tenemos que pasar alsiguiente paso que ser la simulacin de nuestro cdigo VHDL. Ahora con el programasiguiente lo que haremos es sacar las grficas de nuestro programa.

  • 8/10/2019 170pub

    53/88

    53

    4.1.2. Simulacin de ficheros

    Cuando hayamos cerrado el programa anterior, nos quedaremos en la ventana deFusion, si no la tenemos abierta, la tendremos que volver a abrir, tal y como lo hemoshecho antes.

    1) Abrir en programas eProduct Designer.

    2)Programable Design.

    3)Escogemos el icono siguiente

    Al pulsar en este icono entonces nos aparecer la siguiente figura. Figura 48

    Figura 48. Menu 15

    4) Ahora haremos File > Load Design, y nos aparecer la siguiente figura. Figura49.

  • 8/10/2019 170pub

    54/88

    54

    7

    Figura 49. Men 15

    5) Como nosotros queremos simular un fichero VHDL pondremos un ralla donde lavemos en la figura anterior, entonces nosotros haremos clicken Browsey seleccionaremosel directorio donde nosotros tenemos los archivos que deseamos compilar, como se puedeobservar en la figura siguiente. Figura 50

    Si en vez de querer simular un fichero VHDL, quisiramos simular un fichero enformatoschematicoo un fichero Verilog entonces tendramos que poner un cruz donde seanecesario.

    Como nuestro caso es VHDL la pondremos ah y entonces nos aparecer la siguientefigura. Figura 50.

  • 8/10/2019 170pub

    55/88

    55

    Figura 50. Men 16

    6)Ahora tendremos que escoger la entidad de nuestro programa, que en este casoestar dentro de Library ejemplo.lib. haremos click, y se nos abrir la carpeta, dentro deesta carpeta, estarn todas las entidades, seleccionaremos la de mayor jerarqua. Como se

    puede apreciar en la figura siguiente. Figura 51

  • 8/10/2019 170pub

    56/88

  • 8/10/2019 170pub

    57/88

    57

    Figura 52. Men 18

    8) Una vez aqu nos ponemos en la ventana Hierachy Viewer, y le damos con elbotn derecho del ratn click a el cuadrado que aparece con un signo +,y entonces nosaparecer la siguiente figura. Figura 53

    Figura 53. Men 19

  • 8/10/2019 170pub

    58/88

    58

    9) Seleccionaremos la que hemos visto seleccionada en la figura 53. Display ThisScope in Vwave, y nos aparecer la siguiente figura. Figura 54

    Figura 54. Men 20

    10) Le daremos clickal OK, y entonces el programa nos abrir automticamente elVwaves. Tendremos la siguiente figura. Figura 55

  • 8/10/2019 170pub

    59/88

    59

    Figura 55. Men 21

    11) Ahora como podemos observar en la izquierda tenemos el nombre de nuestrasseales. Ahora lo que tenemos que hacer es que nos salgan las seales dibujadas, y loharemos de la siguiente manera.

    12) Nos iremos al programa Fusion que tenemos abierto y seleccionaremosSimulate > Runcomo podemos observar en la siguiente figura. Figura 56

  • 8/10/2019 170pub

    60/88

    60

    Figura 56. Men 22

    Entonces nos aparecer la siguiente figura. Figura 57

    Figura 57.Men 23

  • 8/10/2019 170pub

    61/88

    61

    13) En la figura anterior figura 57nos pone el tiempo que queremos simular nuestrocdigo, en este caso pondremos 100ns y le daremos al botn Run

    14) Cuando ya hemos dado al botn Run nos tenemos que ir al programa quetenemos abierto Vwaves, y all observaremos que ya tenemos las seales, como se muestra

    en la siguiente figura. Figura 58.

    Figura 58. Men 24

    En la izquiera que aparecen las seales, hay unas que aparecen con un signo +, estoquiere decir que son vectores de bits, si queremos ver cada uno de los bits por separadoharemos click encima, entonces todas las seales y nos quedar el dibujo como el de lafigura siguiente. Figura 59.

  • 8/10/2019 170pub

    62/88

    62

    Figura 59. Men 25

    Ahora ya hemos podido observar como simular con este programa. Ahora solo nosquedar hacer la sntesis, que se ver a continuacin.

  • 8/10/2019 170pub

    63/88

    63

    4.1.3. Sintetizar archivos

    Par sintetizar archivos seguiremos los siguientes pasos:

    1) Abriremos eProduct Designer.

    2) Seguidamente Programable Design.

    3) Ahora Intelliflow

    4) Ahora se nos abrir la siguiente ventana. Figura 60

    Figura 60. Men 26

  • 8/10/2019 170pub

    64/88

    64

    5) Seleccionaremos Set Up New Project Using The Wizard de la figura 60anterior.

    6) Le daremos al botn siguiente. Nos saldr el siguiente men. Figura 61.

    Figura 61. Men 27

    7) Ahora seleccionaremos VHDL de la figura 61 y tambin le daremos al botnsiguiente.

    8) Ahora nos aparecer otro men dnde tendremos que escoger el tipo de chip quetenemos que utilizar, le pondremos el que nosotros tengamos que utilizar.En este caso es

    para el fabricante LATTICE. Entonces nos aparecer la siguiente figura. Figura 62.

  • 8/10/2019 170pub

    65/88

    65

    Figura 62. Men 28

    9) En la figura 62donde pone select deviceharemos click y entonces entraremos enun men y seleccionaremos el dispositvo que queremos, en nuestro caso el 1024 Ahoraseguidamente haremos clicken Siguiente, nos aparecer la siguiente figura. Figura 63

    Figura 63. Men 29

  • 8/10/2019 170pub

    66/88

    66

    10) Seleccionaremos Gatesen la figura 63que quiere decir puertas y le daremos albotn Finalizar

    11) Ahora en el siguiente men tendremos que ponernos en el directorio dondetenemos los archivos VHDL, y seleccionar el archivo que tengamos que sintetizar. Ser la

    figura siguiente. Figura 64.

    Figura 64. Men 30

    12) Lo que tendremos que hacer en la figura 64es poner el fichero que queremossintetizar. Solo se tiene que sintetizar el fichero de la ALU, y no el de simulacin, lo quetenemos que hacer es ir a nuestro directorio, elegir el fichero y cuando lo tengamoselegido, le damos al botn OK. Entonces nos aparecer la siguiente figura. Figura 65.

  • 8/10/2019 170pub

    67/88

    67

    Figura 65. Menu 31

    13) Ahora tenemos que seleccionar la entidad de mayor nivel que en nuestro casoser alu WORK y le daremos al botnOK, con lo cual nos quedar la siguiente figura.Figura 66.

    Figura 66. Men 32

  • 8/10/2019 170pub

    68/88

    68

    14) Ahora lo que tendremos que hacer es ir haciendo los clicks a cada una de lasopciones como iremos viendo a continuacin hasta que terminemos. En la siguiente ledaremos a Perform Functional Simulation, y si todo va bien nos tienen que salir comoarriba el smbolo este verde que quiere decir que la cosa est bien, y si no tendramos quearreglar lo que nos dijera. Ahora al hacer nos quedar la siguiente figura. Figura 67.

    Figura 67. Men 33

    El programa lo que nos ha hecho es abrirnos una serie de ventanas, ya que esteprograma puede hacer muchas cosas, el te las abre por si quieres utilizar las distintasopciones que tiene.

    Lo que tendremos que hacer es cerrar todas las ventanas estas que nos aparecenencima de la ventana principal, y solo quedarnos con la principal donde podremos observar

    que nos a puesto el smbolo de correcto, esto nos dice que podremos pasar a la siguiente.Tal y como se puede observar en la siguiente figura. Figura 68.

  • 8/10/2019 170pub

    69/88

    69

    Figura 68. Men 34

    15) Seguidamente haremos Implement and Perform Timing Simulation.Tendremos lo siguiente. Figura 69

    Figura 69. Men 35

  • 8/10/2019 170pub

    70/88

    70

    16) Ahora haremosImplement and Perform Static Timing Analysis.Tendremos lasiguiente figura. Figura 70.

    Figura 70. Men 36

    Cuando esto nos lo haya hecho tambin nos abrir un fichero que son los retardosque tiene el programa despus de sintetizarlo. Es un fichero como el de la siguiente figura.Figura 71.

    Figura 71. Menu 38

  • 8/10/2019 170pub

    71/88

    71

    17) Por ltimo haremos el Implement and Create Board Level Symbol, y nosaparecer la siguiente pantalla .Figura 72

    Figura 72. Men 39

    Cuando hayamos hecho esto tambin nos abrir un fichero donde nos pondr ladisposicin de las patas de la FPGA, es decir donde estn nuestras entradas y salidas. Serun fichero como el de la figura siguiente. Figura 73

    Figura 73. Men 40

  • 8/10/2019 170pub

    72/88

    72

    5 Conclusiones

    Las conclusiones que se pueden sacar despus de haber hecho proyecto son, laprimera y ms importante que he aprendido un nuevo lenguaje de programacin, que es

    muy interesante y por lo que he ledo se utiliza mucho para programar circuitos digitales.En mi proyecto he encontrado muy interesante sobretodo programar en RTL,

    transferencia entre registros, una vez tienes claros todos los esquemas combinacionales, esrelativamente sencillo programar en VHDL cuando lo tienes claro.

    Por lo que hace referencia al programa eProduct Designer ha sido un poco difcil dehacer funcionar, todo y que es un programa muy completo donde se pueden hacer multitudde cosas como por ejemplo puedes ponerle la disposicin de patas que ms te interesa y elte disea el circuito para que tengas aquella disposicin. Le puedes poner que te diga lamxima frecuencia a que funciona tu circuito etc. Todo esto antes citado no lo he hecho

    porque no era el objetivo de mi proyecto pero he visto que se puede hacer a parte de otrascosas que no he tenido ni tiempo de mirarlo pero que seguro que son muy interesantes.

    En el circuito puedes simular antes de sintetizar, y despus de sintetizar el circuito tegenera otro fichero VHDL que puedes volver a simular y aqu observas los retardosobtenidos como consecuencia de la implementacin en puertas, que es donde aparecen losretardos.

    Lo que se tendra que hacer ahora es grabarlo a un micro y mirar si realmentefunciona, pero esto no se ha podido realizar ya que la aplicacin no funciona. Supongo quesera muy interesante poderlo hacer.

    En definitiva ha sido una experiencia muy interesante desde los dos puntos de vistaprimero porque he aprendido a programar con un lenguaje distinto, y segunda porque hehecho funcionar un programa bastante completo aunque no he podido mirar todas las

    opciones que tiene, aunque puedo decir que tiene muchas.Espero que haya sido un proyecto probechoso para la Universidad y para todas las

    personas que estn interesadas en este lenguaje y en este programa.

  • 8/10/2019 170pub

    73/88

    73

    Anexos

    Anexo 1. Programa VHDL de la ALU

    Libraryieee;

    Useieee.std_logic_1164.ALL;

    Librarywork; Usework.ALL;

    ENTITYalu ISPort( a: instd_logic_vector(7 downto0); --Entrada de 8 bits b: instd_logic_vector(7 downto 0); --Entrada de 8 bits

    resultat: outstd_logic_vector(7 downto0); --Resultado de--la operacin

    op0: instd_logic; --Op0,Op1,Op2 sirvenop1: instd_logic; --para seleccionar la operacinop2: instd_logic --que queremos realizar a la ALU

    cout: outstd_logic); --Carry de salida

    ENDalu;

    ARCHITECTUREestructura OFalu IS

    COMPONENTand_or --Bloque AND/OR

    Port(aa,bb: instd_logic_vector(7 downto0); --Entradas del bloque operacio0,operacio1: in std_logic; --operacin a realizar sor_and_or: out std_logic_vector(7 downto0)); --salida

    END COMPONENT;

    COMPONENT suma_resta --Bloque suma y resta

    Port(aa,bb:instd_logic_vector(7 downto0); --Entradas del bloque operacio0,operacio1,operacio2: instd_logic; --Selecciona

    --la operacin cout:outstd_logic; --Carry de salida sor_sum_res:outstd_logic_vector(7 downto0)); --Salida

    END COMPONENT;

    COMPONENTmultiplexor --Bloque multiplexor

    Port(entr_a,entr_b:instd_logic_vector(7 downto0); --Entradas delbloque

    operacio0,operacio1,operacio2:instd_logic; --Selecciona laoperacin

    sortida:outstd_logic_vector(7 downto0)); --Salida

    END COMPONENT;

    SIGNALx,y:std_logic_vector (7 DOWNTO0); --Variables intermedias--paraunir

    --los 3 bloques anteriores BEGIN

    U1:and_or port map(a,b,op0,op1,y); --Paso de parmetros U2:suma_resta port map(a,b,op0,op1,op2,cout,x);--Paso de parmetros U3:multiplexor port map(x,y,op0,op1,op2,resultat); --Paso de

    parmetros

  • 8/10/2019 170pub

    74/88

    74

    ENDestructura;

    Libraryieee;Useieee.std_logic_1164.ALL;

    Librarywork; Usework.ALL;

    ENTITYand_or IS --Bloque que define las entradas salidas de la AND y laOR

    Port( aa:instd_logic_vector(7 downto0); --Vector de 8 bits de entrada bb:instd_logic_vector(7 downto0); --Vector de 8 bits de entrada operacio0:instd_logic; --Seleccionamos si queremos hacer

    la operacin AND operacio1:instd_logic; --la OR o ninguna de las dos. sor_and_or: outstd_logic_vector(7 downto0));--Salida del bloque

    ENDand_or;

    Libraryieee;Useieee.std_logic_1164.ALL;

    Library work; Usework.ALL;

    ENTITYsuma_resta IS --Bloque que define las entradas y salidas de lasuma y la resta

    Port( aa:instd_logic_vector(7 downto0); --Vector de entrada de 8 bits bb:in std_logic_vector(7 downto0); --Vector de entrada de 8 bits operacio0:instd_logic --En estas tres variables seleccionamos operacio1:instd_logic; --la operacin que tenemos que realizar operacio2:instd_logic; cout:outstd_logic; --Carry de salida sor_sum_res: outstd_logic_vector(7 downto0));--Salida del bloque

    ENDsuma_resta;

    Libraryieee;Useieee.std_logic_1164.ALL;

    Librarywork; Usework.ALL;

    ENTITYmultiplexor IS --Bloque multiplexor

    Port( entr_a:instd_logic_vector(7 downto0); --Vector de entrada de 8bits

    entr_b:instd_logic_vector(7 downto0); --Vector de entrada de 8bits

    operacio0:instd_logic; --Seleccionamos laoperacin que queremosrealizar

  • 8/10/2019 170pub

    75/88

    75

    operacio1:instd_logic; operacio2:instd_logic; sortida: outstd_logic_vector(7 downto0)); --Salida

    ENDmultiplexor;

    ARCHITECTUREandor OFand_or IS --Definicin de la funcin del bloque

    SIGNALinter_op_0:std_logic; --Guarda el valor de la operacio0 negada SIGNALinter_op_1:std_logic; --Guarda el valor de la operacio1 negada SIGNALfuncio:std_logic; --Le decimos si tiene que hacer la AND o

    --la OR

    BEGIN

    inter_op_0

  • 8/10/2019 170pub

    76/88

    76

    ENDandor;

    ARCHITECTUREsum_rest OFsuma_resta IS

    SIGNALopera0:std_logic; --Guardamos el valor de la operacio0 negada SIGNALopera1:std_logic; --Guardamos el valor de la operacio1 negada

    SIGNALopera2:std_logic; --Guardamos el valor de la operacio2 negada SIGNALinvb:std_logic; --Bit para saber si tenemos que hacer la

    inversa de B SIGNALclra:std_logic; --Bit para poner el vector A a 0 SIGNALclranot:std_logic; --Guardamos el valor del clra negado SIGNALcin:std_logic_vector(7 downto0); --Carry de entrada a cada

    uno de los 7 sumadores

    SIGNALa_entr_sum:std_logic_vector(7 downto0); --Entrada del vectorA al sumador

    SIGNALb_entr_sum:std_logic_vector(7 downto0); --Entrada del vectorB al sumador

    SIGNALbit0:std_logic_vector(7 downto0); --Bits para realizaruna NAND de tres

    entradas SIGNALbit1:std_logic_vector(7 downto0); SIGNALbit2:std_logic_vector(7 downto0);

    BEGIN

    opera0

  • 8/10/2019 170pub

    77/88

    77

    --OPERACIONES DENTRO DEL SUMADOR

    sor_sum_res(0)

  • 8/10/2019 170pub

    78/88

    78

    SIGNALregi1:std_logic; --Guardamos el valor de una AND de tresentrades correspondiente a la operacin arealizar

    SIGNALregi2:std_logic; --Guardamos el valor de una AND de tresentradas correspondiente a la operacin arealizar

    SIGNALmux:std_logic; --Bit que dice que entrada tieneque coger el

    multiplexor SIGNALnmux:std_logic; --Negacin de la variable mux SIGNALsor0:std_logic_vector(7 downto0); --Canal 0 del multiplexor SIGNALsor1:std_logic_vector(7 downto0); --Canal 1 del multiplexor SIGNALopera0:std_logic; --Canal que tiene que coger el multiplexor

    dependiendo de la operacin que se tengaque realizar

    SIGNALopera1:std_logic; SIGNALopera2:std_logic;

    BEGIN

    opera0

  • 8/10/2019 170pub

    79/88

  • 8/10/2019 170pub

    80/88

    80

    Anexo 2. Programa de simulacin de la ALU

    libraryIEEE;useIEEE.STD_LOGIC_1164.all;librarywork;usework.all;

    ENTITYsim ISENDsim; --Entidad simulacin

    ARCHITECTUREproves OFsim IS

    SIGNALa: std_logic_vector (7 downto0);SIGNALb: std_logic_vector (7 downto0);SIGNALresultat: std_logic_vector (7 downto0);SIGNALop0: std_logic;SIGNALop1: std_logic;SIGNALop2: std_logic;SIGNALcout: std_logic;

    COMPONENTalu

    Port(a: instd_logic_vector(7 downto 0); b: instd_logic_vector(7 downto0); resultat: outstd_logic_vector(7 downto0); --Entradas y salidas de la ALU op0: instd_logic; op1: instd_logic; op2: instd_logic; cout: outstd_logic);

    ENDCOMPONENT;

    SIGNALvariable end_test: boolean:=false;

    constantT:time:=10ns; --Freq=(1/T)=100Mhz

    BEGIN

    U4: alu port map(a,b,resultat,op0,op1,op2,cout); --Paso de parmetros al BloqueALU

    proceso: processBEGIN

    a

  • 8/10/2019 170pub

    81/88

    81

    b

  • 8/10/2019 170pub

    82/88

    82

    Anexo 3. Fichero de retardos despus de la sntesis

    En este fichero podemos observar los retardos que obtendr dependiendo de lasentradas que yo le ponga

  • 8/10/2019 170pub

    83/88

    83

    Anexo 4. Disposicin de las patas de la FPGA

    De esta forma es tal y como ha quedado nuestra ALU. La disposicin de las patas esla que se indica en la figura.

    Con este programa tambin podemos poner con unas opciones si nos interesa poralgn motivo la disposicin de las patas segn nos convenga, pero en nuestro caso comono lo necesitamos, lo hemos puesto tal y como nos lo ha dado el programa.

  • 8/10/2019 170pub

    84/88

    84

    Anexo 5. Grficas de Salida

  • 8/10/2019 170pub

    85/88

    85

  • 8/10/2019 170pub

    86/88

  • 8/10/2019 170pub

    87/88

    87

    Como se puede observar en las grficas, el resultado es correcto de acuerdo con lasentrada a y b junto con las operaciones que queremos que haga dependiendo de lo que

    ponemos en las variables Op.

    Tambin se puede observar que cambiamos de valor cada 10 ns.

  • 8/10/2019 170pub

    88/88

    Bibliografa

    1. Lenguaje para la sntesis y modelado de circuitos VHDL. Autores : Fernando

    Pardo y Jose A. Boluda. Editorial RA-MA.2. Pgina Web de la Universidad de Guadalajara

    3. Pgina Web de la Universidad Politcnica de Valencia

    4. Tutoriales y ayudas del programa eProduct Designer