170pub
-
Upload
stephany-bradbury -
Category
Documents
-
view
219 -
download
0
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