Sei sulla pagina 1di 190

INSTITUTO TECNOLOGICO DE MINATITLAN

PRACTICAS DE
LABORATORIO DE
VHDL

MEMORIA DE RESIDENCIA
PROFESIONAL

INGENIERIA ELECTRONICA

PRESENTA:

ALI PEREZ GOMEZ

ASESOR:

ING. ELVIA MARTINEZ ARRAZOLA

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Minatitln Ver, a 05 de Junio del 2009

INDICE

INTRODUCCION.----------------------------------------------------------------6
JUSTIFICACION.-----------------------------------------------------------------8
OBJETIVO GENERAL.---------------------------------------------------------9

CAPITULO I
ASPECTOS GENERALES DE LA EMPRESA

1.1 ANTECEDENTES---------------------------------------------------------12
1.2 UBICACION DE LA EMPRESA----------------------------------------22
1.3 ORGANIGRAMA-----------------------------------------------------------23
1.4 UBICACION GENERAL Y ESPECIFICA DE LA EMPRESA---24
1.5 GIRO DE LA EMPRESA-------------------------------------------------26
1.6 MISION Y VISION---------------------------------------------------------26
1.7 CARACTERIZACIN DEL REA EN QUE PARTICIP Y
SOBRE LA QUE REALIZ SU INVESTIGACIN---------------------27

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

CAPITULO II
PRINCIPIOS FUNDAMENTALES

2.1 HISTORIA DE VHDL.-----------------------------------------------------29


2.2 LENGUAJES DE DESCRIPCION DE HARDWARE (HDLs).--31
2.3 VENTAJAS DEL USO DE LOS HDLs.-----------------------------32
2.4 INCONVENIENTES DEL USO DE LOS HDLs.-------------------36
2.5 LIBRERIAS Y PAQUETES----------------------------------------------39
2.6 METODOLOGIA GENERAL DEL DISEO DIGITAL-------------48
2.7 SENTENCIAS CONCURRENTES Y SECUENCIALES----------57
2.8 COMO SE DECLARA UNA ENTIDAD-------------------------------59
2.9 COMO SE DECLARA UNA ARQUITECTURA--------------------63

2.10 OBJETOS------------------------------------------------------------------74
2.11 IDENTIFICADORES-----------------------------------------------------75
2.12 PALABRAS RESERVADAS------------------------------------------76
2.13 SIMBOLOS ESPECIALES--------------------------------------------77
2.14 TIPOS DE DATOS-------------------------------------------------------77
2.15 EXPRESIONES Y OPERADORES----------------------------------80
2.16 ATRIBUTOS DE LOS VECTORES----------------------------------82
2.17 SENTENCIAS SECUENCIALES-------------------------------------83
2.18 ASIGNACION A UNA SEAL----------------------------------------83
2.19 ASIGNACION A UNA VARIABLE-----------------------------------84
2.20 SENTENCIA IF-----------------------------------------------------------85
2.21 SENTENCIA CASE------------------------------------------------------87
2.22 SENTENCIA LOOP------------------------------------------------------89
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

2.23 SENTENCIA EXIT-------------------------------------------------------90


2.24 SENTENCIA NEXT------------------------------------------------------91
2.25 SENTENCIA NULL------------------------------------------------------91
2.26 SENTENCIA WAIT-------------------------------------------------------92
2.27 SENTENCIA WAIT UNTIL---------------------------------------------92
2.28 SENTENCIAS CONCURRENTES-----------------------------------93
2.29 SENTENCIA PROCESS------------------------------------------------93
2.30 ASIGNACION CONCURRENTE A UNA SEAL----------------95
2.31 ASIGNACION CONCURRENTE CONDICIONAL---------------96
2.32 ASIGNACION CONCURRENTE CON SELECCION-----------96
2.33 LLAMADA CONCURRENTE A SUBPROGRAMA--------------97
2.34 SENTENCIAS ESTRUCTURALES----------------------------------98
2.35 SUBPROGRAMAS----------------------------------------------------101
2.36 FUNCIONES-------------------------------------------------------------101
2.37 PROCEDIMIENTOS---------------------------------------------------104
2.38 VHDL SINTETIZABLE------------------------------------------------106

CAPITULO III

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

PRACTICAS DE LABORATORIO

PRACTICA N1 COMPUERTAS.-----------------------------------------108
PRACTICA N2 CIRCUITOS COMBINACIONALES A TRAVES DE
DIAGRAMAS EN XILINX.-----------------------------------------------125
PRACTICA N3 MULTIPLEXOR.-----------------------------------------146
PRACTICA N 4 DEMULTIPLEXOR.------------------------------------152
PRACTICA N5 CODIFICADOR 4 a 2.----------------------------------157
PRACTICA N6 DECODIFICADOR.-------------------------------------161
PRACTICA N7 COMPARADOR-----------------------------------------165
PRACTICA N8 SUMADOR DE 4 BITS.--------------------------------169
PRACTICA N 9 SUMADOR-RESTADOR.-----------------------------173
PRACTICA N10 CONTADOR.--------------------------------------------177
PRACTICA N11 FLIP-FLOP RS.----------------------------------------183
PRACTICA N12 ALU.-------------------------------------------------------187

CONCLUSIONES.------------------------------------------------------------191
RECOMENDACIONES.-----------------------------------------------------192
ANEXOS.------------------------------------------------------------------------193
REFERENCIAS BIBLIOGRAFICAS.------------------------------------193

INTRODUCCION
Una vez conocidas las especificaciones del diseo se procede a modelar en
VHDL el sistema en cuestin. Para escribir este cdigo fuente se puede utilizar
cualquier editor de texto que genere cdigo ASCII. Sin embargo las distintas
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

herramientas a emplear (simulador, sintetizador, herramientas de


implementacin) estn concebidas como entornos de desarrollo integrados que
disponen de su propio editor VHDL.

Estos editores estn diseados expresamente para escribir cdigo VHDL


disponiendo de caractersticas interesantes como resaltado de palabras clave
en el cdigo fuente, manejo de plantillas de construcciones tpicas del lenguaje,
etc. Tal es el caso de editores propios de VHDL como puede ser el que aporta
ModelSim, o ISE de Xilinx. Tambin existen editores de cdigo de lenguajes de
programacin como puede ser Prism. El problema de todos ellos es que se
necesita licencia para poder ser utilizarlos. Sin embargo existe una herramienta
gratuita en Internet, denominada EMACS que permite editar de una manera
bastante cmoda, cdigo de programacin como es VHDL. La ventaja que
aporta este entorno, es la existencia de un asistente (wizard) que ayuda a
generar cdigo de manera automtica.

Una vez escrito el cdigo el siguiente paso es la verificar la correccin del


mismo mediante un simulador. De entre las diferentes herramientas que existen
en el mercado, en este laboratorio se usar ModelSim. En este paso tan slo
se atendern a aspectos puramente funcionales, es decir, no se contemplan
aspectos temporales como frecuencia de funcionamiento, retardos temporales,
etc.

Si los resultados obtenidos durante la simulacin se cien a las


especificaciones dadas se proceder a sintetizar el diseo. Se denomina
sntesis al proceso por el cual se transforma un cdigo VHDL en una netlist
propia de la tecnologa a utilizar (FPGA).

Conceptualmente es similar a la labor realizada por un compilador de C que


traduce el cdigo de alto nivel a las correspondientes instrucciones en
ensamblador.

En nuestro caso el formato de la netlist ser EDIF, ya que ste es admitido por
las herramientas de implementacin de Xilinx (entorno ISE). La herramienta
utilizada para la sntesis ser ISE de Xilinx.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Seguidamente se procede a realizar la implementacin del diseo tambin


mediante el entorno ISE de Xilinx. Este proceso consiste bsicamente en
ubicar e interconectar de forma ptima los elementos de la tecnologa destino
(LUTs, biestables, memorias, etc para el caso de las FPGAs de Xilinx) dentro
de la matriz de la FPGA. El resultado final de esta fase es un fichero binario
que se utilizar para configurar la FPGA. Siguiendo con la analoga anterior
esta fase es similar al proceso de linkado de una aplicacin software.

JUSTIFICACION

En el Instituto Tecnolgico de Minatitln se imparte dentro de la retcula de


Ingeniera Electrnica la materia de digitales I y II, donde su contenido del
temario abarca el conocimiento de VHDL.

Mediante este trabajo se pretende introducir al alumno en el manejo de las


distintas herramientas utilizadas en el flujo de diseo en VHDL sobre FPGAs.
Para ello se presentarn a lo largo de la misma los diferentes entornos del
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

software de trabajo que se utilizarn a lo largo de las diferentes prcticas del


laboratorio.

Las prcticas estn orientadas desde un punto de vista de un tutorial, donde el


diseo a realizar ser muy sencillo, y en el que se conjugaran aspectos de
modelado para sntesis de lgica combinacional y secuencial, y donde se vern
las herramientas ModelSim as como el programa ISE de Xilinx.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

OBJETIVO GENERAL

Desarrollar una gua de prcticas de programacin VHDL que ayude a los


alumnos de digitales l a comprender la importancia del uso del lenguaje HDL,
en la programacin de los FPGA.

CAPITULO I

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

ASPECTOS
GENERALES
DE
LA EMPRESA

1.1 ANTECEDENTES DEL INSTITUTO

INSTITUTO TECNOLGICO DE MINATITLAN


INSTITUCION CERTIFICADA EN LA NORMA ISO 9001:2000

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

FIGURA 1.1.1 Escudo del Instituto Tecnolgico de


Minatitln
El Instituto Tecnolgico de Minatitln fue producto de minuciosos y exhaustivos
estudios socio-econmicos en el sureste del Pas, que determinaron la
necesidad de construirlo en la regin comprendida entre Acayucan, Minatitln,
Coatzacoalcos y Villahermosa, poblaciones, en aquel entonces, carentes de
instituciones de estudios superiores en la rama de la tecnologa, cuya
posibilidad fue dada por la conjuncin qumica-petrolera de la zona.

El antecedente del Instituto Tecnolgico de Minatitln en materia educativa fue


la Escuela Tcnica y Comercial123, que en sus principios funcion como centro
de capacitacin para trabajo industrial de mecnicos de banco, electricidad,
forja, corte y confeccin.

La campaa presidencial del Licenciado Luis Echeverra lvarez en 1970


motiv la creacin del Instituto de Estudios Polticos, Econmicos y Sociales
(IEPES), de proyeccin nacional, que proporcion nacional, que proporcion al
candidato los informes reales sobre los requerimientos ms importantes del
pas, entre ellos; los de materia educativa.

Este clima favoreci que una ponencia representada por el profesor Carlos
Florentino Moreno Gonzlez, una peticin del Dr. Esteban Hernndez, Director
de una Escuela Agropecuaria amenazaba con desaparecer, y una solicitud para
la creacin de un Instituto de educacin superior tecnolgica en la zona,
provocaran que en la Reunin Nacional par ale estudio de la Industria
Petroqumica efectuada en esta ciudad del 1 de febrero de 1970, los

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

industriales de esta rama reconocieran y manifestaran la carencia de


profesionales capacitados para emplearse.

En esa ocasin se propuso al candidato a la Presidencia de la Repblica, la


creacin de un Tecnolgico, con la misin de preparar a los jvenes de la
regin. Las peticiones presentadas sirvieron par que el Lic. Luis Echeverra
lvarez, tras analizarlas y constatar el entusiasmo por contar con el plantel
educativo, se comprometi a travs del Instituto de Estudios Econmicos,
Polticos y Sociales con la integracin del proyecto, demandando la
participacin de los sectores de la regin.

Los industriales y las representaciones sindicales, el entonces Gobernador del


Estado; Li. Rafael Murillo Vidal, el Lic. Marco Antonio Muoz y algunos
particulares aportaron cantidades que permitieron la creacin del Tecnolgico.

Entonces fue nombrado un patronato Pro-Construccin, que fue presidido por


el Ing. Antonio Doval Jaime.

Antes de haber sido colocada la primera piedra hubo planes para edificar el
Tecnolgico en terrenos ajenos y lejanos a Minatitln.

Ante esta situacin; jvenes estudiantes de la Escuela Secundaria y de


Bachilleres Oficial de Minatitln, y otros estudiantes de Xalapa viajaron a la
Ciudad de Mxico para hacerlo del conocimiento del Lic. Echeverra lvarez, ya
entonces primer mandatario de la Repblica.

La H. Seccin local del S.T.P.R.M. con su intervencin fue un factor decisivo


para lograr la edificacin del Tecnolgico de Minatitln. Cabe mencionar que
tampoco permanecieron indiferentes a esta gestin los rganos informativos de
la regin, cuyos pedimentos fueron determinantes en la accin conjunta.

El 18 de marzo de 1971, ya como presidente de la repblica regres el


Licenciado Luis Echeverra lvarez a colocar la primera piedra en los terrenos
localizados en el Km 277 de la Carretera Trantssmica en su costado Poniente,
para iniciar la construccin del Instituto Tecnolgico prometido, acompandolo
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

en esta ocasin el Licenciado Rafael Murillo Vidal, entonces Gobernador del


Estado y el seor Juan Melndez Pacheco; Presidente Municipal de Minatitln.

Al colocar la primera piedra durante una ceremonia especial realizada para


esta ocasin, entre otras cosas dijo: Si muchas piedras constituyen promesas
y compromisos que luego no se satisfacen lealmente, yo aseguro a la juventud
Veracruzana que la promesa que constituye esta primera piedra ser as
mismo cumplida en toda su oportunidad

El 18 de marzo de 1974 el Licenciado Luis Echeverra lvarez nuevamente


estuvo en esta ciudad de Minatitln para la conmemoracin de la gesta de
Lzaro Crdenas, de expropiacin del petrleo, y aprovech la ocasin para
colocar la primera piedra de la segunda etapa de construcciones, estando por
terminarse un edificio administrativo de dos piso un edificio para Centro de
Informacin que incluira la biblioteca de 15 000 volmenes y la cafetera, todo
con modernas instalaciones

El Instituto Tecnolgico, como toda organizacin se plantea metas y objetivos


que le permitan potencializar la capacidad su respuesta ante las oportunidades
que se generan en su entorno y los compromisos que con la sociedad ha
contrado.

A travs de la misin, el ITM orienta sus programas y sus acciones en una


forma clara y conocida hacia lo que quiere lograr mejorando con ello el
rendimiento de los recursos humanos, materiales y financieros y propiciando
que el personal operativo comprenda su participacin e importancia en el
trabajo.

La campaa presidencial del Licenciado Luis Echeverra lvarez en 1970


motiv la creacin del Instituto de Estudios Polticos, Econmicos y Sociales
(IEPES), de proyeccin nacional, que proporcion al candidato los informes

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

reales sobre los requerimientos ms importantes del pas, entre ellos; los de
materia educativa.

Este clima favoreci que, una ponencia presentada por el profesor Carlos
Florentino Moreno Gonzlez, una peticin del Dr. Esteban Hernndez, Director
de una Escuela Agropecuaria amenazada con desaparecer, y una solicitud
para la creacin de un instituto de educacin superior tecnolgica en la zona,
provocaran que en la Reunin Nacional para el estudio de la Industria
Petroqumica efectuada en esta ciudad del I de febrero de 1970, los
industriales de esta rama reconocieran y manifestaran la carencia de
profesionales capacitados para emplearse.

En esa ocasin se propuso al candidato a la Presidencia de la Repblica, la


creacin de un Tecnolgico, con la misin de preparar a los jvenes de la
regin. Las peticiones presentadas sirvieron para que el Lic. Luis Echeverra
lvarez, tras analizarlas y constatar el entusiasmo por contar con el plantel
educativo, se comprometi a travs del Instituto de Estudios Econmicos,
Polticos y Sociales con la integracin del proyecto, demandando la
participacin de los sectores de la regin.

El entonces candidato expres: Yo quiero contraer ante ustedes el


compromiso, siempre que me aporten sus conocimientos, sus luces y su
voluntad, pero vamos a poner mano a la obra.

La exhortacin tuvo respuesta inmediata. Los industriales y las


representaciones sindicales, el entonces Gobernador del Estado; Lic. Rafael
Murillo Vidal, el Lic. Marco Antonio Muoz y algunos particulares aportaron
cantidades monetarias que permitieron la creacin del Tecnolgico.

Entonces fue nombrado un patronato Pro-Construccin, que fue presidido por


el Ing. Antonio Doval Jaime.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Antes de haber sido colocada la primera piedra, hubo planes para edificar el
Tecnolgico en terrenos ajenos y lejanos a Minatitln. Ante esta situacin;
jvenes estudiantes de la Escuela Secundaria y de Bachilleres Oficial de
Minatitln, y otros estudiantes de Xalapa viajaron a la Ciudad de Mxico para
hacer del conocimiento del Lic. Echeverra lvarez, ya entonces primer
mandatario de la Repblica, la intencin de construir el Tecnolgico en otro
lugar

La H. Seccin local del S.T.P.R.M. con su intervencin fue un factor decisivo


para lograr la edificacin del Tecnolgico de Minatitln. Cabe mencionar que
tampoco permanecieron indiferentes a esta gestin los rganos informativos de
la regin, cuyos pedimentos fueron determinantes en la accin conjunta.

El 18 de marzo de 1971, ya como presidente


de la repblica regres el licenciado Luis
Echeverra lvarez a colocar la primera piedra
en los terrenos localizados en el Km 277 de la
Carretera Transstmica en su costado Poniente,
para iniciar la construccin del Instituto
Tecnolgico prometido, acompandolo en esta
ocasin el Licenciado Rafael Murillo Vidal,
entonces Gobernador del Estado y el seor Juan
Melndez Pacheco; Presidente Municipal de
Minatitln.
FIGURA 1.1.2 Colocacin de
la primera piedra del ITM

Al colocar la Primera Piedra durante una ceremonia especial realizada para


esta ocasin, entre otras cosas dijo: Si muchas piedras constituyen
promesas y compromisos que luego no se satisfacen lealmente, yo
aseguro a la juventud Veracruzana que la promesa que constituye esta
primera piedra ser as mismo cumplida en toda su oportunidad.

El 18 de marzo de 1974 el Licenciado Luis Echeverra lvarez nuevamente


estuvo en esta ciudad de Minatitln para la conmemoracin de la gesta de
Lzaro Crdenas, de expropiacin del petrleo, y aprovech la ocasin para

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

colocar la primera piedra de la segunda etapa de construcciones, estando


por terminarse un edificio administrativo de dos pisos, un edificio para Centro
de Informacin que incluira la biblioteca de 15 000 volmenes y la cafetera,
todo

APERTURA Y DESARROLLO
La dcada de los 70s, represent una etapa de transicin en el sistema
poltico, econmico, social y educativo del pas. Despus del movimiento
estudiantil de 1968 con los resultados trgicos de la matanza de estudiantes. El
gobierno federal tena la enorme tarea de reivindicarse con la poblacin
estudiantil, lo que dio como resultado un gran apoyo para la apertura de las
instituciones educativas tal y como ocurri con los institutos tecnolgicos

FIGURA 1.1.3 Primeros edificios del Instituto Tecnolgico de


La tarea escolar se empez a desarrollar con siete edificios y la poblacin
Minatitln

escolar inicial del Tecnolgico fue de 275 alumnos mismos que conformaron la
primera generacin de egresados de la institucin, generacin pionera de esta
casa de estudios atendida por 49 trabajadores.

Pronto la demanda estudiantil comenz a crecer lo cual haca necesaria la


expansin de la infraestructura de la institucin. Por otro lado, la poltica
educativa del pas estaba experimentando ajustes y las instituciones educativas
deban adaptarse a ella.

FIGURA 1.1.4 Primeros edificios e instalaciones del


ITM
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

As, el Tecnolgico se vio precisado a caminar a marchas forzadas en virtud de


que la institucin inici con un esquema educativo basado en un sistema por
objetivos y el inicio del tercer periodo semestral en septiembre de 1973, deba
ser bajo el esquema de los planes de estudios reticulares, opcionales y por
crditos. Para evitar los problemas de dos sistemas, se opt por pasar los
cursos semestrales existentes al sistema de crditos, sistema que prevalece
hasta nuestros das.

En Septiembre de 1975 la entonces Direccin General de Educacin Superior


(D.G.E.S.), autoriz el cambio de la carrera de Tcnico Electromecnico por
la de Sistemas Electromecnicos, entrando en liquidacin la primera.

El ITM entrega a la sociedad la primera generacin de tcnicos egresados de


sus aulas el da 16 de Agosto de 1975. La ceremonia de graduacin se llev
a cabo en el Cine Auditorio de la Seccin No. 10 del
Sindicato Nacional de Trabajadores de Petrleos
Mexicanos. El nmero de alumnos de la primera
generacin fue de 87, distribuidos de la siguiente
manera: 26 tcnicos industriales en electromecnica,
29 tcnicos industriales en Qumica, 17 tcnicos
instrumentistas y 15 tcnicos en administracin de
FIGURA 1.1.5 Primera
generacin del ITM
personal.

Apadrin a esta Primera Generacin el Lic. Luis Echeverra lvarez; Presidente


Constitucional de la Repblica Mexicana quien envi en su representacin al
Dr. Jorge Carranza Palacios el entonces Director General en Ciencia y
Tecnologa del Mar.

En ese ao, la direccin de la Institucin se encontraba bajo la administracin


del Ing. Sergio Andrs Cancino Martnez.

En 1975, el ITM ofrece 4 carreras de nivel profesional: Ingeniera


Electromecnica, Ingeniera Industrial Qumica, Ingeniera Electrnica en
Instrumentacin y la Licenciatura en Administracin de Empresas iniciando as
su nueva etapa como Institucin Educativa de Nivel Superior.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Estas carreras fueron creadas en funcin de la demanda educativa y por la


necesidad de contar con recursos humanos mejor preparados que se
incorporasen de manera exitosa a la pujante estructura industrial y empresarial
de la zona. De esta manera, el instituto ofreca carreras tanto a nivel tcnico
como a nivel profesional, lo que le permiti consolidarse como la Institucin
educativa de mayor importancia en la regin.

FIGURA 1.1.6 aumentaba el nmero de alumnos que


demandaba instalaciones mejores.

Otro importante paso en el desarrollo del Instituto Tecnolgico de Minatitln,


acontece en el segundo semestre de 1983, al proceder a la liquidacin del
Nivel Medio Superior, para dedicar todos los esfuerzos fsicos, humanos y
materiales exclusivamente a la Educacin Superior. De esta manera, el
desarrollo del ITM transcurre con la tranquilidad que le proporciona el contar
con personal comprometido y con alumnos entusiastas.

Es en Agosto de 1992, cuando se inicia una nueva etapa en la institucin, al


autorizarse la propuesta de Departamentalizacin Acadmica, que inicia su
operacin en Febrero de 1993, buscando la consolidacin de la estructura
educativa de nivel superior, al plantear tres Subdirecciones: Subdireccin de
Planeacin y Vinculacin, Subdireccin Acadmica y la Subdireccin de
Servicios Administrativos.

En Febrero de 1994 el Instituto oferta por primera ocasin Estudios de


Posgrado y lo hace en el rea donde ms experiencia ha acumulado,
impartiendo la especializacin en Ingeniera Ambiental.
En 1997 incorpora a sus planes y programas de estudio las carreras de
Ingeniera Industrial e Ingeniera en Sistemas Computacionales. Siendo ambas
carreras las que mayor demanda tienen en la actualidad.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

En aos posteriores incorpora otras especializaciones y maestras tales como


Maestra en Ing. Energtica , Maestra en Ing. Ambiental , Maestra en Ing.
Electrnica, Especializacin en Ing. Ambiental, Especializacin en Educacin
Ambiental, y Especializacin en Sistemas de Informacin Geogrfica.

Agosto del 2004, marca otro importante cambio no slo en el Instituto


Tecnolgico de Minatitln, sino en todo el Sistema Nacional de Educacin
Superior Tecnolgica; al ponerse en marcha los nuevos planes de estudio del
MODELO EDUCATIVO PARA EL SIGLO XXI. Bajo este nuevo modelo, se
reestructuran todos los planes y programas de estudio que el sistema oferta
incorporndolos al nuevo modelo educativo.

Actualmente nuestra institucin ofrece 7 carreras de nivel licenciatura y


tambin estudios de posgrado.
Licenciaturas:

Lic. en Administracin

Ing. en Sistemas Computacionales

Ing. Industrial (escolarizada y a distancia)

Ing. Electrnica

Ing. Electromecnica

Ing. Qumica

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Ing. Ambiental
FIGURA 1.1.7 Alumnos
de ing.electronica
Posgrados:

Maestra en Ingeniera Electrnica

Para cumplir con el que hacer institucional se cuenta con una planta docente
de 223 profesores, 115 administrativos haciendo un total de 338 trabajadores
entre los que se encuentran 25 directivos.

Una infraestructura fsica de 29 edificios, 49 aulas, 14 laboratorios, 6 anexos


para diversas actividades, 7 instalaciones deportivas y una unidad deportiva en
proceso de construccin.

1.2 UBICACIN
FIGURA DE LA
1.1.8 Instalaciones del EMPRESA
instituto tecnolgico de
Minatitln
El Instituto Tecnolgico de Minatitln se localiza en el extremo Sureste del
Estado de Veracruz, en la Cuenca Salina del Istmo de Tehuantepec, a 32
Kilmetros de la desembocadura del Ro Coatzacoalcos en el Golfo de Mxico,
su ubicacin se encuentra en la ciudad de Minatitln.

La zona se encuentra delimitada en forma natural:

Al norte por el Golfo de Mxico

Al oeste por la sierra de San Martn

Al sur por la selva de Uxpanapa

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Al este, por el ro Tonal, el cual limita a Veracruz con el Estado de


Tabasco.
FIGURA 1.2.1 Figura
representativa de los estados

FIGURA 1.2.2 Localizacin del Instituto Tecnolgico de Minatitln

1.3 ORGANIGRAMA

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

FIGURA 1.3.1 Organigrama del instituto tecnolgico de


Minatitln
1.4 UBICACIN GENERAL Y ESPECIFICA DE LA EMPRESA

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

FIGURA 1.4.1 Ubicacin general del tecnolgico y especfica de la


1.5 GIRO DE LA EMPRESA
zona de trabajo

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Es una empresa que se dedica a la formacin de alumnos a nivel profesional


en Licenciaturas y Posgrado.

1.6 MISION Y VISION

MISIN

Ofrecer servicios educativos con calidad para formar profesionales que


contribuyan al desarrollo integral de la sociedad.

VISIN

Ser una institucin de educacin superior tecnolgica de calidad, que


promueva el desarrollo nacional en el mbito de la globalizacin.

1.7 CARACTERIZACIN DEL REA EN QUE PARTICIP Y


SOBRE LA QUE REALIZ SU INVESTIGACIN
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

FIGURA 1.7.1 Organigrama del departamento de


Electrnica
Dentro del departamento de ingeniera electrnica encargado por el Ing. Jose
Luis Minaya Cantu se desarrollo el proyecto de Prcticas de laboratorio en
VHDL proyecto que se caracteriza por el rea de digitales en la cual es
asesorado por la Ing. Elvia Martnez Arrazola, con colaboracin del
departamento de proyectos de docencia encargado por la Ing. Elvia Martnez
Arrazola durante un periodo de 640 hrs.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

CAPITULO II
PRINCIPIOS
FUNDAMENTALES

2.1 HISTORIA DE VHDL

Diversos grupos de investigadores empiezan a crear y


desarrollar los llamados "lenguajes de descripcin de
hardware" cada uno con sus peculiaridades, buscando una
solucin a los problemas que presentaba el diseo de los
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

sistemas complejos.

Ejemplos:

IDL desarrollado por IBM ,


TI - HDL de Texas Instruments,
ZEUS de General Electric,
prototipos de universidades

En la actualidad se utilizan fundamentalmente VHDL, Verilog y


SystemC . Otro HDL, el UDI/L se utiliza exclusivamente en
Japn.

VHDL (Very High Speed Integrated Circuit Hardware


Description Language).

VHDL : Lenguaje de descripcin hardware estructurado


para modelar sistemas digitales.

VHDL:

V: VHSIC Very High Speed Integrated Circuit


H: Hardware
D: Description
L: Language

VHDL permite modelar y simular sistemas digitales en distintos


niveles de abstraccin.

Nace como proyecto del Departamento de Defensa (DoD) de


EEUU (ao 82) para disponer de una herramienta estndar,
independiente para la especificacin (modelado y/o
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

descripcin) y documentacin de los sistemas electrnicos. El


IEEE lo adopta y estandariza.

Verilog: Sw de la firma Gateway y posteriormente de


Cadence. Estndar industrial hasta que apareci el VHDL
como estndar IEEE. En 1990 Cadence lo hace pblico y el
IEEE lo estandariza en 1995.

SystemC: es una extensin del C++, que utiliza unas


bibliotecas de clase para describir y simular circuitos digitales.
Se public en 1999 .

Estos lenguajes nunca alcanzaron el nivel de difusin y


consolidacin necesarias, por motivos distintos.

Los industriales, por ser propiedad de la empresa


permanecieron encerrados en ellas y no estuvieron disponibles
para su estandarizacin y mayor difusin.

Los universitarios, perecieron por no disponer de soporte ni


mantenimiento adecuado.

El Departamento de Defensa de los Estados Unidos


trabaja con el Proyecto VHSIC (Very High Speed Integrated
Circuit )

Objetivos:

Rentabilizar las inversiones en hardware haciendo ms


sencillo su mantenimiento.

Resolver el problema de modificar el hardware diseado


en un proyecto para utilizarlo en otro

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

VHDL acrnimo de VHSIC Hardware Description Lenguaje

2.2 LENGUAJES DE DESCRIPCIN DE


HARDWARE (HDLS)

Estos lenguajes fueron desarrollados para hacer frente a la


creciente complejidad de los diseos.

Se puede hacer una analoga con los que se pueden llamar


lenguajes de descripcin de software:

FIGURA 2.2.1
Los HDLs son usados para modelar la arquitectura y
comportamiento de sistemas electrnicos discretos.

Se utilizan en la fase de diseo

Necesidad de Simulador lgico

Herramienta necesaria para reproducir el


comportamiento del sistema
modelado
Permite la verificacin del sistema diseado.

Actualmente existen herramientas software que permiten


pasar de dichas descripciones a diseos a nivel de puertas:
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

SNTESIS

2.3 VENTAJAS DEL USO DE HLDS

El lenguaje es independiente de la tecnologa:

El mismo modelo puede ser sintetizado en libreras de


distintos vendedores.
Reduccin de la dependencia con el fabricante de ASICs,
ya que la portabilidad a otra tecnologa es mucho ms
rpida.
Reutilizar el diseo en componentes tan distintos como
ASICs o FPGAs con un esfuerzo mnimo.

Soportan tres estilos de descripcin bsicos:

DESCRIPCIN COMPORTAMENTAL (behavioral)


DESCRIPCIN DE FLUJO DE DATOS (data-flow)
DESCRIPCIN ESTRUCTURAL (estructural)

Un diseo puede ser descrito con una combinacin de los tres


estilos.

Se puede verificar la funcionalidad del diseo muy pronto en el


proceso de diseo.
La simulacin del diseo a tan alto nivel, antes de la
implementacin a nivel de puertas, permite testar la
arquitectura y rectificar decisiones en las primeras fases de
diseo, con un esfuerzo mucho menor que si se realizase en
fases posteriores.

Sencillez

Como la descripcin se centra ms en la funcionalidad que


en la implementacin, resulta ms sencillo para una persona
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

comprender qu funcin
realiza el diseo a partir de una descripcin HDL que a partir
de un esquemtico de interconexin de puertas
begin
Y <= (A and B) or C;
end and;
Ahorro de tiempo

Facilita las correcciones en el diseo debidas a


fallos de diseo o cambio de especificaciones.

La existencia de herramientas comerciales


automticas (sintetizadores RTL) que permiten crear
descripciones gate-level a partir de los modelos a
nivel RTL

Si bien, el diseo final no suela estar tan


optimizado como si lo hubiera realizado un humano,
la mayora de las veces es necesario sacrificar un
mnimo en las prestaciones, para poder llevar a cabo
el proyecto.
Para ello se necesita la disponibilidad de dichas
herramientas, las libreras de sntesis del fabricante y
sus archivos de tecnologa.

El lenguaje puede ser usado como un medio de intercambio


entre los fabricantes de ASICs y los usuarios de
herramientas CAD.

Diferentes vendedores de ASICs pueden suministrar


descripciones HDL de sus componentes a diseadores de
sistemas. Los usuarios de herramientas CAD pueden usar
esta descripcin para capturar el comportamiento de este
diseo a un nivel de abstraccin alto para la simulacin

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

funcional.
Adems, se estn convirtiendo en los lenguajes de
simulacin ms utilizados por los distintos vendedores.

El lenguaje tambin puede ser usado como medio de


comunicacin entre diferentes herramientas CAD y
CAE.

Un programa de captura de esquemticos puede ser


utilizado para generar descripciones HDL del diseo, lo
cual puede ser usado como entrada a un simulador.

La propia descripcin en el lenguaje de alto nivel


sirve como especificacin del comportamiento del
sistema a disear (tanto a nivel funcional como las
restricciones temporales), y el interface con el resto
del sistema.

Los modelos descritos con estos lenguajes,


pueden ser verificados fcilmente y de forma
precisa por simuladores definidos en base a estos
HDL.

Adems, cumple con un requerimiento muy


importante en toda especificacin: no es ambiguo.
Asimismo sirve como documentacin del diseo.

Los "Test Bench" pueden ser escritos en el mismo lenguaje


que con el que han sido modelados los diseos (HDL).

Esto permite un mejor manejo del modelo, ya que se


puede asociar el modelo a sus estmulos de simulacin.
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

No limitamos el uso de dichos estmulos a un


determinado simulador, pudiendo ser reutilizados dichos
estmulos aunque se use un simulador distinto.

Los retardos de propagacin y limitaciones temporales,


pueden ser descritos con estos HDL.

El lenguaje soporta jerarqua;

Un sistema digital puede ser modelado como un


conjunto de componentes interconectados;
A su vez cada componente puede ser modelado como
un conjunto de subcomponentes.

El lenguaje soporta metodologas de diseo diferentes:


top-down, bottom-up, o mixtas.
Soporta modelos de tiempos sncronos y asncronos.

Posibilidad de implementar distintas tcnicas de modelado


digital (descripciones de mquinas de estados finitos (FSM),
descripciones algortmicas, redes de Petri, y ecuaciones
Booleanas

El lenguaje es pblico y "not propietary" (especialmente


en el caso del VHDL).

Es un estndar ANSI e IEEE; por lo tanto, los modelos


descritos en estos lenguajes (VHDL o VERILOG) son
totalmente portables.

No hay limitaciones impuestas por el lenguaje en el tamao


del diseo.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Los HDL tienen elementos que permiten el diseo a


gran escala, de forma fcil; por ejemplo, componentes,
funciones, procedimientos, paquetes.

La capacidad de definir tipos de datos sofisticados,


suministra la potencia de describir y simular nuevos diseos
a un nivel de abstraccin en el cual an no se barajan
detalles de la implementacin

Los genricos y atributos facilitan la descripcin de


modelos parametrizables. El modelo, a travs de los
atributos, puede contener informacin del diseo en s
mismo, no solo de la funcionalidad: por ejemplo,
informaciones tales como el rea y velocidad.

2.4 INCONVENIENTES DEL USO DE HDLS

Supone un esfuerzo de aprendizaje, ya que prcticamente


se puede considerar como nueva metodologa.

Necesaria la adquisicin de nuevas herramientas:

Simuladores

Sintetizadores de HDL, teniendo que mantener el resto de


las herramientas para otras fases del diseo.

El uso de estos lenguajes hace que involuntariamente se


pierda un poco de control sobre el aspecto fsico del diseo,
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

dndole una mayor importancia a la funcionalidad de dicho


diseo.

A mediados de los aos setenta se produce una fuerte evolucin en los


procesos de fabricacin de los circuitos integrados, y junto a las tecnologas
bipolares, surge la MOS (metal oxide semiconductor ), principalmente la
NMOS, promoviendo el desarrollo de circuitos digitales hasta la primera mitad
de los aos ochenta.

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


elctricos para establecer caractersticas e interconexiones entre los
componentes bsicos a nivel de transistor. El proceso de diseo era altamente
manual y tan solo se empleaban herramientas como el PSPICE para
simular esquemas elctricos con modelos previamente personalizados a las
distintas tecnologas.

A medida que pasaban los aos, los procesos tecnolgicos se hacan ms y


ms complejos. Los problemas de integracin iban en aumento y los diseos
eran cada vez ms difciles de depurar y de dar mantenimiento. Inicialmente
los circuitos MSI (Medium Scale Integration ) y LSI (Low Scale Integration ) se
disearon mediante la realizacin de prototipos basados en mdulos ms
sencillos.

El lenguaje VHDL est creado especficamente para el diseo de hardware, es


decir (ver ejemplo de diseo de un circuito integrado), podremos implementar
con l multitud de circuitos lgicos, tanto combinacionales como secuenciales.
ste lenguaje tambin nos permite describir elementos ms complejos.

Entidad y Arquitectura:

Una unidad hardware se visualiza como una caja negra

El interfaz de la caja negra est completamente definida.


El interior est oculto.

En VHDL la caja negra se denomina entidad

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

La ENTITY describe la E/S del diseo

FIGURA 2.4.1 Caja


Para describir su funcionamiento
Negra se asocia una implementacin que se
denomina arquitectura

La ARCHITECTURE describe el contenido del diseo.

Un programa en VHDL consta de dos partes. La primera, la entidad, nos sirve


para relacionar nuestro diseo con el mundo exterior, es decir, analizamos lo
que tratamos de crear como una "caja negra", de la que slo conocemos sus
entradas, sus salidas y la disposicin de las mismas. La segunda parte, la
arquitectura, describe como trata el circuito la informacin correspondiente a
las entradas para obtener las salidas.

Niveles de Abstraccin

Independientemente de la manera que vemos el sistema, ste puede ser


descrito con diversos (cuatro) niveles de abstraccin (o detalle):

Transistor
Gate
RTL (register transfer)
Procesador (memoria,

Estos niveles nos permiten ir encarando el diseo de un sistema complejo, de


forma abstracta, hasta llegar a los niveles mas bajos del diseo

Lo que caracteriza a cada nivel de abstraccin es:

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Bloques bsicos
Representacin de las seales
Representacin del tiempo
Representacion del comportamiento
Representacin fsica

2.5 LIBRERAS Y PAQUETES

FIGURA 2.5.1 Diagrama del contenido de


En VHDL los componentes
una libreria se describen utilizando entidades y definiendo

arquitecturas por separado. Estos bloques se denominarn unidades de


diseo. Al analizar el cdigo, cada unidad se asigna a una librera de una
manera dependiente de las herramientas utilizadas. A esto se lo denominar
unidad de librera.

Libreras
Una librera se define como una coleccin de unidades de librera.
Dependiendo de la herramienta y el sistema operativo de la computadora que
se utilice una librera puede ser una carpeta directorio o una base de datos que
contenga los nombres de las entidades y arquitecturas que le pertenecen. Esto
significa que una librera es solo una manera de agrupar diferentes unidades
para organizarlas, darles una jerarqua y poder reutilizarlas de una manera

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

ordenada. VHDL reserva el nombre de librera work para la librera del diseo
actual.

Si se necesita acceder a entidades, declaraciones o funciones de otra librera


se debe utilizar la instruccin library. La librera work se agrega al diseo en el
que se est trabajando de manera implcita. Supongamos que hay un conjunto
de componentes que se quieren reutilizar y han sido asignados a una librera
llamada Compuertas Bsicas en algn diseo anterior.

Para utilizar esos componentes se debe agregar lo siguiente antes de la


especificacin de una arquitectura.

-- library CompuertasBasicas;

architecture Estructural of LogicaCompleja is

begin

-- Aqu pueden utilizarse los componentes declarados en

-- la librera CompuertasBasicas

end architecture Estructural;

Para usar las compuertas bsicas se debe agregar la librera que las contiene.

La localizacin de la librera no est especificada por VHDL sino por la


herramienta que se est utilizando. Por ejemplo, la herramienta puede tener un
men donde se seleccionan las libreras y se especifica el lugar dentro del
disco rgido donde estas se localizan. Esa informacin luego queda guardado
en una base de datos para poder procesarla cuando el analizador encuentra la
directiva library en el VHDL.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Paquetes (Packages)

Un paquete (package) en VHDL es otra unidad de diseo adems de las


entidades y arquitecturas que contiene definiciones de objetos que pueden ser
utilizados por otros mdulos. Las clases de objetos que se puede colocarse en
un paquete incluyen declaraciones de seales, tipos, constantes, funciones,
procedimientos y componentes.

-- Declaracin de un paquete

package NombrePaquete is

-- Declaraciones de constantes

constant ... ;
-- Declaraciones de tipos

type ... ;

subtype ... ;

-- Declaraciones de seales

signal ...

-- Declaraciones de subprogramas

function F1(...) return ... ;

function F2(...) return ... ;

...

end package NombrePaquete;

-- ----------------------------------------------------- --

-- Definicin del cuerpo del paquete

package body NombrePaquete is

function F1(...) is

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN
...

function F2(...) is

...

end package body NombrePaquete;

La estructura de definicin de paquete tiene primero una declaracin en la que


se define la interfase con el paquete. En esta seccin se deben especificar
todas las declaraciones de los tems que luego sern visibles a las unidades en
las que se incluya el paquete. La segunda seccin del paquete es el cuerpo
(body) en el cual se implementan los subprogramas. Esto permite esconder la
implementacin del funcionamiento de los tems del paquete. En el cuadro se
muestra el formato general de un paquete.

Las seales que se definen en un paquete sern globales y podrn accederse


por cualquier entidad que utilice el paquete. Lo mismo sucede con los tipos y
constantes definidas en el paquete. Estas podrn ser utilizadas en cualquier
archivo en el que se incluya el paquete.

La expresin utilizada para utilizar un paquete de una librera dada se describe


a continuacin

-- Para agregar un item declarado como NombreItem en un paquete


NombrePaquete de una librera NombreLibreria debe usarse la instruccin use

library NombreLibreria; -- Declara que se usara la libreria


use NombreLibreria.NombrePaquete.NombreItem; -- Uso del paquete

-- Para agregar todos los tipos y constantes de una librera

library NombreLibreria; -- Declara que se usara la libreria


use NombreLibreria.NombrePaquete.all; -- Uso del paquete

Paquetes de Lgica Estndar del IEEE


Como puede verse de la seccin donde se describen los tipos en VHDL el
lenguaje tiene una gran capacidad para extender los tipos y definir y

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

sobrecargar operadores y funciones. Para estandarizar el IEEE desarroll un


paquete lgico estndar denominado std_logic_1164. Aunque no es realmente
parte de VHDL, este paquetes es tan utilizado que casi podra considerarse un
aparte del lenguaje. Se recomienda siempre usar los tipos definidos en estos
paquetes, como se detallar mas adelante.

Adems de definir el paquete std_logic_1164, el IEEE defini un paquete con


operaciones aritmticas para nmeros representados por vectores de bits.

Este paquete se denomina numeric_std y es el recomendado para diseos


sintetizables.

Para utilizar la lgica 1164 del IEEE o los paquetes numricos estndar con las
operaciones aritmticas sobre la lgica estndar se debe agregar el use de los
paquetes adecuados.

-- Utilizacin de los paquetes lgicos estndar del IEEE

library ieee;
use ieee.std_logic_1164.all; -- Lgica estndar
use ieee.numeric_std.all; -- Operaciones aritmticas

Lgica estndar std_logic y std_ulogic definidos en std_logic_1164

El paquete std_logic_1164 dentro de la librera ieee define un tipo std_ulogic


con nueve valores posibles.

Valores posibles para lgica std_logic

Valor Descripcin Valor Descripcin


U Sin inicializar W Desconocido dbil
X Desconocido forzado L 0 dbil
0 0 forzado H 1 dbil
1 1 forzado - No importa
Z alta impedancia

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

A partir de esta lgica tambin se define el subtipo std_logic. Este tipo es lo


que se denomina lgica resuelta ya que incluye funciones que definen que
pasa cuando varias salidas se conectan a una seal.

Los valores dbiles y forzados se incluyen para poder modelar hardware que
tiene diferentes capacidades de controlar una seal. Por ejemplo, si una seal
tiene un buffer de tres estados que la maneja (posibles valores 0, 1 y Z) y
adems una resistencia de pull-up a la tensin de alimentacin con un valor
alto (valor H).
Si la salida del buffer es alta impedancia (Z) el valor de la seal estar dado
por la resistencia, pero si el buffer tiene una salida lgica, esta forzar el valor
de la seal mas all de la resistencia de pull-up.

Del tipo std_logic se define el tipo std_logic_vector que es un arreglo (array)


de std_logic. std_logic_vector es un arreglo sin lmites, y el valor de los
ndices mximo y mnimo se dan al declarar el objeto de ese tipo.

Estos tipos se nos permite modelar seales y buses de diferentes anchos. Los
tipos std_logic y std_logic_vector son los recomendados para su uso y son
los que se usarn en los ejemplos de este texto.

Ejemplo de uso del tipo std_logic en la declaracin de una entidad :

entity Contador is
port(
Clock_IN : IN std_logic;
Reset_IN : IN std_logic;
Cuenta_OUT : OUT std_logic_vector (31 downto 0)
);

Ejemplo de uso del tipo std_logic en la declaracin de seales en una


arquitectura

signal Cuenta_REG : std_logic_vector (31 downto 0);


signal intFinDeCuenta : std_logic;

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Deteccin de flancos de seales definidos en std_logic_1164

El paquete std_logic_1164 contiene las siguientes funciones que son muy


tiles para simplificar la sintaxis en los procesos para sntesis, como ya se
ver mas adelante.

Funciones de deteccin de flanco de seales

Funcin Tipo que Descripcin


devuelve
rising_edge( boolean Devuelve TRUE si hay un flanco ascendente
S) sobre S, sino devuelve FALSE.
falling_edge( boolean Devuelve TRUE si hay un flanco
S) descendente sobre S, sino devuelve FALSE.

Aritmtica sobre lgica estndar

El paquete numeric_std define dos nuevos tipos a partir de la std_logic.


Estos son signed y unsigned, usados para representar nmeros enteros con
y sin signo respectivamente. Adems de esos dos tipos, define las
operaciones dadas en la siguiente tabla. En la tabla se enumeran las
operaciones y el resultado de operar sobre los distintos tipos.
Los paquetes std_logic_arith, std_logic_unsigned y std_logic_signed son
paquetes de Synopsis, Inc. que se distribuyen como parte de la librera IEEE.
Estos paquetes cumplen la misma funcin para cadenas de bits del tipo
std_logic_vector. En std_logic_arith se definen las operaciones sobre tipos
del tipo signed y unsigned, mientras que en los otros dos se definen
conversiones para poder usar las funciones aritmticas con tipos
std_logic_vector. Si se desea utilizar estos paquetes, se debe incluir el
paquete std_logic_arith y solo uno de los otros dos paquetes. As las seales
del tipo std_logic_vector sern tratadas como con signo o sin signo segn
cual paquete se haya incluido. Estos paquetes surgieron antes de la librera
estandarizada numeric_std.

Como se mencion antes, este paquete numeric_std no define operaciones

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

sobre los vectores estndar, sino que obliga al programador a declarar


explcitamente las cadenas de bits como del tipo signed o unsigned antes de
poder realizar operaciones aritmticas sobre ellos. Al utilizar los paquetes
std_logic_arith junto a std_logic_signed o std_logic_unsigned se puede
operar directamente sobre std_logic_vector, por lo que resultan ms
prcticos.

A continuacin se resumen las opciones de encabezamientos recomendados


para usar diferentes paquetes.
Las siguientes lneas deben incluirse de la manera especificada en los diseos
para usar los tipos std_logic_vector.

-- Encabezamiento para usar los tipos std_logic y std_logic_vector sin


operaciones aritmticas

library ieee;
use std_logic_1164.all;

-- Encabezamiento para usar los tipos std_logic y std_logic_vector y tratarlos


como nmeros con signo (complemento a dos) en las operaciones aritmticas

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

Encabezamiento para usar los tipos std_logic y std_logic_vector y tratarlos


como nmeros sin signo en las operaciones aritmticas

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

Resumen de tipos de las operaciones aritmticas


Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Oper Operacin Tipo del Tipo del Tipo del


. operand operand resultad
o o o
izquierd derecho
o
abs valor absoluto signed signed
- negacin
+ suma unsigned unsigned unsigned
- resta signed signed signed
* multiplicacin unsigned natural unsigned
/ divisin natural unsigned unsigned
rem resto signed integer signed
mod mdulo integer signed signed
= igualdad unsigned unsigned boolean
/= diferente signed signed boolean
< menor unsigned natural boolean
<= menor o igual natural unsigned boolean
> mayor signed integer boolean
>= mayor o igual integer signed boolean
sll corrimientos unsigned integer unsigned
srl lgicos signed integer signed
rol rotaciones
ror
not negacin unsigned
signed
and operaciones unsigned unsigned unsigned
or lgicas signed signed signed
nand
nor
xor
xnor

2.6 METODOLOGA GENERAL DE DISEO DIGITAL


Al desarrollar cualquier sistema digital es importante seguir ciertas pautas de
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

trabajo y tener en cuenta factores muy diversos para que el diseo pueda
terminarse a tiempo y funcione correctamente. A medida que los diseos se
hacen ms complejos, la necesidad de seguir un mtodo ordenado para lograr
buenos resultados se hace ms importante. Los lenguajes de descripcin de
hardware, si se utilizan correctamente, pueden utilizarse en varios pasos del
proceso de desarrollo, no solo para disear sino tambin para especificar y
documentar el sistema que se quiere desarrollar.

Las grandes capacidades de los PLDs y herramientas de diseo disponibles


permiten que los diseos implementados sobre FPGAs sean cada vez mas
complejos. En muchos casos varias personas pueden estar trabajando sobre
el mismo producto, incluso en localidades separadas. Para poder atacar el
problema del diseo de sistemas digitales complejos (ya sea para desarrollos
sobre FPGAs, ASICs o PCBs) es importante tener una metodologa de trabajo
que permita planificar y ordenar el trabajo.

Como ejemplo, en la Figura 2.6.1 se muestra un esquema de un mtodo que


permite ordenar el trabajo de diseo. Segn su autor (ver Referencias), la
"Metodologa Universal de Diseo" define pasos que permiten:

Disear un dispositivo libre de defectos de manufactura, que funciona


de manera adecuada y se integra con el sistema.

Disear el dispositivo de manera eficiente, sin malgastar recursos ni


tiempo.

Planificar el diseo de manera eficiente, crear un cronograma


razonable y asignar los recursos necesarios para las diferentes tareas
de manera ordenada.

En muchos casos el proceso es no lineal. Si se descubren fallas o problemas


en las especificaciones, se debe volver a iterar sobre los pasos anteriores para

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

corregirlos.

El ciclo comienza con un conjunto de requerimientos para la fabricacin de un


dispositivo o sistema. Estos requerimientos pueden venir de un cliente, de otro
grupo de trabajo dentro de la misma empresa o del mismo grupo de trabajo
que necesita desarrollar una parte de un sistema mas grande.

FIGURA 2.6.1 Metodologa Universal de


Diseo

Flujo de Diseo (Design Flow)


Durante el proceso de creacin de un sistema digital desde el cdigo fuente
(esquemticos, VHDL, etc.) a la implementacin en un PLD hay varios pasos

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

intermedios. Para cada uno de estos pasos se utilizan herramientas de


software diferentes que pueden o no estar integradas bajo un ambiente de
desarrollo. En muchos casos las herramientas utilizadas en cada paso del
diseo son provistas por diferentes empresas. La Figura 4 muestra el ciclo de
diseo tpico para lgicas programables. Dependiendo de las herramientas
utilizadas, este ciclo puede tener variaciones o las tareas llamarse con otros
nombres.

A continuacin se describe cada uno de los pasos del ciclo de diseo. Se


agrega su denominacin en ingls entre parntesis, ya que estos son los
trminos que se encontrarn en las herramientas de desarrollo.

Descripcin del Diseo: este es el paso en el que se describe el diseo,


muchas veces usando un lenguaje de descripcin de hardware como el VHDL.
Muchas herramientas permiten ingresar el diseo no solo como HDLs sino
tambin como un diagrama esquemtico o estructural, una representacin
grfica de una mquina de estados o una tabla de entrada-salida. Estas
herramientas simplifican en gran medida el diseo y simplifican mucho la tarea
del diseador. El cdigo HDL puede ingresarse utilizando cualquier editor de
texto, pero se recomienda uno que tenga coloreado automtico de sintaxis
("syntax highlighting") ya que ayuda y hace ms fcil esta etapa.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

FIGURA 2.6.2 Metodologa Universal


de Diseo

Generacin o Traduccin (Generate, Translate): Este paso tiene


sentido cuando el diseo se hace mediante algunas de los mtodos

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

mencionados anteriormente en vez de en VHDL. En este paso se traducen


todos los mdulos a VHDL. Para los mdulos ingresados como VHDL, las
herramientas generalmente hacen una copia a una librera interna. En esta
etapa se hace un anlisis del VHDL para verificar la sintaxis y semntica de los
mdulos. Tambin se hace una elaboracin de los archivos, que consiste en
replicar los componentes que se utilizan ms de una vez en el diseo para
hacer copias nicas y definir un conexionado adecuado.

Compilado (Compile): Los simuladores actuales compilan el cdigo


VHDL a un formato que permite una simulacin mas rpida y eficaz. Esto se
hace en este paso.

Simulacin y verificacin: En este paso se simula el comportamiento


del diseo y se evala su comportamiento. La simulacin puede hacerse en
tres etapas diferentes del diseo. La primera es sobre el cdigo VHDL original
para verificar el correcto funcionamiento del diseo. La segunda es despus
de sintetizar el circuito, y se simulan la implementacin real sobre el PLD, ya
sea con o sin la anotacin de tiempos. La tercer etapa en la cual se puede
simular el diseo es despus de la Ubicacin e Interconexin. Esta es la ms
exacta y la mas engorrosa y lenta, ya que incluye la informacin final lgica y
temporal el diseo sobre el PLD.

Sntesis (Synthesis): En este paso se traduce el VHDL original a su


implementacin con lgica digital, utilizando los componentes especficos del
PLD que va a utilizarse. Esta traduccin puede llegar hasta el nivel ms bsico
de elementos lgicos (CLBs, LUTs, FFs) o hasta un nivel superior, en el que el
diseo se presenta en mdulos bsicos estndar provistos en una librera por
el proveedor del PLD.

Ubicacin e Interconexin (Place and Route): El PLD est compuesto


por muchos bloques idnticos, como se present en las secciones anteriores.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

En este paso, cada componente del diseo sintetizado se ubica dentro del
PLD especfico. Tambin se interconectan los componentes entre s y con los
pines de entrada-salida.

Tareas Adicionales: Las tareas adicionales dependen del fabricante y


las herramientas. Puede definirse la interconexin de las con los pines fsicos
del PLD ingresar condiciones de entorno fsico para guiar a la herramienta de
Ubicacin e Interconexin, seleccionar reas del PLD para ubicar los bloques
lgicos, etc.

Anotacin de Retardos: Como en todo circuito digital, las seales


tendrn un retardo de propagacin que influir sobre su comportamiento. Con
estos retardos puede anotarse el diseo compilado para una simulacin que
incluya informacin de temporizado ms cercana a la implementacin real.
Una vez sintetizado el diseo, puede hacerse una estimacin de los retardos
de propagacin que habr entre las seales. Despus de la ubicacin e
interconexin, el clculo de retardos es mucho ms exacto.

Generacin de Binarios: Despus de la Ubicacin e Interconexin se


genera algn archivo ya sea para poder utilizar el sistema en un diseo mas
complejo o para programar un PLD.

Configuracin de PLD: Con el archivo binario generado puede


configurarse directamente un PLD a travs de alguna de las opciones de
configuracin. Estas opciones dependern de las herramientas y del PLD que
se est utilizando.

Programacin de Memoria (PROM): Muchas FPGA no pueden


configurarse de manera permanente y requieren algn tipo de memoria para
leer la configuracin cuando se les aplica tensin de alimentacin. En la etapa
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

de produccin deben configurarse memorias PROM y conectarlas a la FPGA


en el circuito impreso.

Verificacin (automtica): Una vez integrada la FPGA con su


programacin al sistema debe hacerse una verificacin para controlar que el
diseo sobre en la FPGA funciona bien (las FPGAs pueden tener fallas
internas) y que la FPGA se integra bien al sistema en el que est. Pueden
usarse tcnicas y herramientas de verificacin automticas para evaluar si el
dispositivo y el diseo estn funcionando como debieran.

En la figura, las flechas de lneas punteadas que vuelven al comienzo indican


las iteraciones que muchas veces se dan al trabajar en un diseo nuevo.
Despus de simularlo o configurar un PLD, pueden descubrirse fallas o haber
cambios de requerimientos que obligan al diseador a volver y modificar la
descripcin del diseo.

Un sistema puede estar compuesto por varios subsistemas, no todos ellos


digitales o electrnicos. La primer decisin ser entonces que partes del
sistema se implementarn como subsistemas digitales. En el sistema digital,
los siguientes pasos se siguen en cada nivel de la jerarqua del diseo, cada
vez con mayor nivel de detalle.

Especificacin - Arquitectura - Diseo lgico - Layout (disposicin y


conexionado)

La especificacin es muy importante pare definir bien los lmites de lo que se


quiere fabricar. A partir de la especificacin se puede definir una arquitectura
con los diferentes componentes que implementan cada funcin del sistema.
Para el diseo se debe definir el funcionamiento de cada uno de esos
componentes.
Un sistema digital y sus componentes pueden definirse a distintos niveles de
abstraccin y en tres dominios diferentes: Comportamiento, estructural y fsico.
En la Figura 2 se muestra el diagrama "Y" de Gajski y Kahn que representa los

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

niveles de abstraccin y dominios para un circuito.

FIGURA 2.6.3 Diagrama de Gajski-Kahn

Dominio Comportamiento: Describe lo que hace un sistema


(funcionamiento)

Nivel Algoritmo: Describe el comportamiento del sistema como


operaciones sobre las entradas para producir las salidas deseadas sin
detallar los cambios en el tiempo ni las seales internas.

Nivel RTL: Describe el comportamiento de todas las seales (entradas,


internas y salidas) en el tiempo (para cada ciclo de reloj en sistemas
sincrnicos)

Dominio Estructural: Describe al sistema como una interconexin de


componentes (esquemtico)

Nivel P-M-S (Processor Memory Switch): Describe la estructura como


la interconexin de elementos de procesamiento, memoria e interconexin, sin
mayores detalles de implementacin.

Nivel Registros: Describe la estructura como la interconexin de


registros y lgica de interconexin.

Dominio Fsico: Describe la implementacin fsica del sistema (plano).

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Para lograr tiempo ms rpidos de diseo, menos errores, y mayor


productividad, lo ideal sera poder trabajar al mximo nivel de abstraccin
posible (algoritmos), sin entrar en los detalles de bajo nivel.
Desafortunadamente, esto no es siempre posible con la tecnologa existente
(pero esta cambia permanentemente). El nivel de abstraccin depender
entonces de la aplicacin y restricciones sobre el diseo. Si se debe disear
un integrado full-custom analgico es probable que se trabaje al nivel de
ecuaciones diferenciales, al nivel de transistores y haciendo el layout manual.
Si se disea un integrado digital con bloques predefinidos (IP, Cores) y
adquiridos a terceros se trabajar a un nivel de abstraccin mucho mayor
(floorplanning, RTL). En el ciclo de diseo con FPGAs, gran parte del aspecto
fsico ha sido solucionado por el fabricante. En general se trabaja al nivel de
transferencia de registros con algunas herramientas que ayudan a disear a
niveles de algoritmo.

2.7 Sentencias concurrentes y secuenciales

Para iniciarnos correctamente en el aprendizaje y manejo de VHDL es


importante que comprendamos desde un principio la diferencia entre
concurrente y secuencial.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

El concepto de concurrencia, se ve claramente graficado en los circuitos


electrnicos donde los componentes se encuentran siempre activos, existiendo
una asociacin intrnseca, entre todos los eventos del circuito; ello hace posible
el hecho de que si se da algn cambio en una parte del mismo, se produce una
variacin (en algunos casos casi instantnea) de otras seales.

Esta comportamiento de los circuitos reales obliga a que VHDL soporte


estructuras especficas para el modelado y diseo de este tipo de
especificaciones de tiempos y concurrencias en el cambio de las distintas
seales digitales de los diseos.

Por el contrario, los asignamientos secuenciales, son ms bien propios de los


SDL (soft design lenguage) en los que la programacin tiene un flujo natural
secuencializado, siendo propio de este tipo de eventos las sentencias case, if,
while, loop, etc ms propias de estas sintaxis.

Las construcciones concurrentes del lenguaje son usadas dentro de estructuras


concurrentes, por ejemplo una arquitectura tiene una naturaleza
eminentemente concurrente (es decir que est activo todo el tiempo), mientras
que el cuerpo de un process es en principio eminentemente secuencial. La
asignacion de eventos secuenciales dentro de una estructura concurrente se
ejecutar de forma concurrente, es decir, al mismo tiempo que las dems
sentencias.

VHDL soporta con este motivo, tres tpos de objetos, las variables, las
constantes y las seales . Como las variables y las seales pueden variar su
valor mientras ejecutamos un programa, sern stas las encargadas de
almacenar dichos datos, asimismo sern los portadores de la informacin.

nicamente las seales pueden tener la connotacin de globalidad dentro de


un programa, es decir, que pueden ser empleadas dentro de cualquier parte
del programa a diferencia de las variables que solo tienen sentido en el interior
de un process .

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Los process son estructuras concurrentes constituidas por sentencias de


ejecucin secuencial, esto provocar que dentro de un process nos
encontremos con sentencias similares a las de los SDL (lenguajes de
descripcin de software) que nos llevan a emplear VHDL como si de otro
lenguaje comn se tratara. Dentro de un process nos podemos encontrar con la
declaracin y utilizacin de las variables como parmetros locales al process .

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

Veamos el siguiente ejemplo de asignacin concurrente para seales:

w<= not a;
x <= a and b;
y <= c and w;
z <= x or y

FIGURA 2.7.1 Circuito


Combinacional
Al producirse un cambio en la parte derecha de la estructura
de asignacin (<= NOT a) de alguna de las sentencias, la
expresin es evaluada de nuevo en su totalidad, con la
siguiente asignacin del nuevo valor a la seal de la izquierda.
Esto puede provocar que mltiples asignaciones en el cuerpo
de una arquitecura se activen simultneamente, como por
ejemplo, en la imagen superior, la cual se corresponde al
cdigo situado a su izquierda.

2.8 COMO SE DECLARA UNA ENTIDAD

En la declaracin de entidades, se definen las entradas, salidas y tamao de un


circuito, explicitando cuales son, de qu tamao (de 0 a n bits), modo (entrada,
salida, ...) y tipo (integer, bit,...) . Las entidades pueden definir bien las entradas
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

y salidas de un diseo ms grande o las entradas y salidas de un chip


directamente. La declaracin de entidades es anloga al smbolo esquemtico
de lo que queremos implementar, el cual describe las conexiones de un
componente al resto del proyecto, es decir, si hay una entrada o puerto de 8
bits, o dos salidas o puertos de 4 bits, etc.

La declaracin de entidades tiene la siguiente forma:

entity circuito_a is Cabecera del programa

Se indica que a continuacin viene los


port(
puertos (o grupos seales) de entrada y/o
salida

Aqu se declaran las entradas y/o salidas con


-- puertos de entradas la sintaxis que se ver a continuacin. Las
-- puertos de salidas lneas empezadas por dos guiones son
-- puertos de I/O ignoradas por el compilador. As mismo,
-- puertos de buffers recordamos que el compilador no distingue
las maysculas de las minsculas
Se indica que se ha acabado la declaracin
);
de puertos de entrada y/o salida, y que se ha
end circuito_a;
acabado 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 se le pueden asignar valores. A cada puerto se le debe
asignar un nombre vlido.

A continuacin se exponen algunos ejemplos:

nombre_variable: modo tipo; Forma genrica de designar un puerto

El primer puerto es un bit de entrada, y


puertoa: in bit;
su nombre es "puertoa"
El segundo puerto es un vector de 8
puertob: in bit_vector(0 to 7); bits de entrada siendo el MSB el
puertob(0) y el LSB el puertob(7)
El tercer puerto es un vector de 4 bits
puertoc: out bit_vector(3 downto 0); de salida siendo el MSB el puertoc(3) y
el LSB el puertoc(0)
El cuarto puerto es un buffer de un solo
puertod: buffer bit;
bit, cuyo nombre es "puertod"
El quinto puerto es una entrada/salida
puertoe: inout std_logic;
del tipo estndar logic de un solo bit

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Como se puede deducir del ejemplo anterior, seguido del nombre del puerto y
separado de ste por dos puntos, se debe indicar el tipo de puerto. El modo
describe la direccin en la cual la informacin es transmitida a travs del
puerto: in, out, buffer e inout.

Si no se especifica nada, se asume que el puerto es del modo in.

Modo in: Un puerto es de modo in si la informacin correspondiente al


mismo, entra a la entidad y se suele usar 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 out si la informacin fluye hacia fuera


de la entidad. Este modo no permite realimentacin ya que al declarar
un puerto como out estamos indicando al compilador que el estado
lgico en el que se encuentra no es leble. Esto le da una cierta
desventaja pero a cambio consume menos recursos de nuestros
dispositivos lgicos programables.

Modo buffer: Es usado para una realimentacin interna ,es decir, para
usar este puerto como un driver dentro de la entidad. Este modo es
similar al modo out, pero adems, permite la realimentacin y no es
bidireccional, y solo puede ser conectado directamente a una seal
interna, o a un puerto de modo buffer de otra entidad. Una aplicacin
muy comn de este modo es la de salida de un contador, ya que
debemos saber la salida en el momento actual para determinar a salida
en el momento siguiente.

Modo inout: Es usado para seales bidireccionales, es decir, si


necesitamos que por el mismo puerto fluya informacin tanto hacia
dentro como hacia afuera de la entidad. Este modo permite la
realimentacin interna y puede reemplazar a cualquiera de los modos
anteriores, pudindose usar este modo para todos los puertos, pero

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

reduciremos la lectura posterior del cdigo por otra persona, y


reduciendo los recursos disponibles de la dispositivo.

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


los puertos, pero puede haber tantos tipos de seales como queramos, ya que
los podemos crear nosotros mismos. VHDL incorpora varios tipos de forma
estndar (por haber sido creado as), pudiendo usar otros definidos en libreras
normalizadas, y las creados por el usuario. La norma internacional IEEE
1076/93 define cuatro tipos nativos para VHDL como son:

Tipo boolean: puede tomar dos valores: verdadero/true o falso/false.


Un ejemplo tpico es la salida de un comparador que da verdadero si los
nmeros comparados son iguales y falso si no lo son:

Slo puede tomar dos valores: verdadero o falso,


y es de salida (darle mas operatividad a la salida
equal:out boolean;
de un comparador sera superfluo)

Tipo bit: Puede tomar dos valores: 0 1 ( o tambin "low" o "high",


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

Tipo bit_vector: Es un vector de bits. Debemos tener cuidado al

definir el peso de los bits que lo integran, ya que segn pongamos la


palabra reservada downto o to estaremos diciendo que el bit ms
significativo es el nmero ms alto o el ms bajo del vector,
respectivamente..

En este caso el MSB es numero(0) y


numero : bit_vector (0 to 7); numero(7) el LSB

En este caso el MSB es numero(7) y


numero : bit_vector (7 downto 0);
numero(0) el LSB

Tipo integer: Para manejar nmeros enteros. Hay que advertir que el
uso de enteros consume muchos recursos del dipositivo de lgica
programable, siempre y cuando sea sintetizable, debido a que est
prcticamente creado para la simulacin.
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Pero ante la necesidad de ampliar la operatividad del tipo bit, la norma IEEE
1164, defini un nuevo tipo llamado std_logic, std_ulogic, y sus derivados
tales como std_logic_vector y std_ulogic_vector. Como su nombre pretende
indicar, es el tipo de tipo lgico estndar, que es el ms usado en la actualidad,
as como en la mayora de ejemplos de este libro.

Como ejemplo, a continuacin se incluye la declaracin de una entidad


correspondiente a un multiplexor de 2x1 de cuatro bits, con entrada de
habilitacin o enable.

El multiplexor necesita las entradas de informacin, la seal de seleccin, la de


enable y las salidas de informacin.

Cabecera ya estudiada arriba, en la que


entity multi is port (
multi es el nombre de la entidad

enable es un bit de entrada


(suficiente para habilitar o no)

enable: in bit;
selec es otro bit de entrada, que
selec: in bit;
selecciona la entrada in1 o in2,
in1: in bit_vector(3 downto 0);
ambas de 4 bits
in2: in bit_vector(3 downto 0);
out1:out bit_vector(3 downto 0)
out1 es de salida, que lgicamente,
debe ser de la misma longitud que in1
e in2

Notes que el ltimo puerto no lleva punto


);
y coma al final de la lnea. Si lo llevase
end multi;
estara incorrect

A continuacin se muestra otro ejemplo correspondiente a la entidad para un


comparador:

Cabecera de la entidad, cuyo nombre es


entity compa is port (
compa

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

a y b son las entradas de cuatro bits


a,b: in bit_vector(3 downto 0);
igual: out bit;
igual es la salida de un slo bit

); Se finaliza la entidad con la palabra clave


end compa; end y el nombre de la misma (compa).

Debemos recordar dos puntos ms a la hora de dar el nombre a algn puerto,


que se tratarn ms adelante en el aprtado de objetos:

VHDL no distingue las letras maysculas de las minsculas, por lo que


un puerto llamado por nosotros "EnTraDA" ser equivalente a otro que se
llame "ENTRADA" o "entrada".

El primer carcter de un puerto slo puede ser una letra, nunca un


nmero. As mismo, no pueden contener caracteres especiales como $, %,
^, @, ... y dos caracteres de subrayado seguidos.

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

2.9 COMO SE DECLARA UNA


ARQUITECTURA

La arquitectura indica el tipo de procesado que se realiza con la informacin


correspondiente a las seales de entrada, (declarados previamente en la
entidad) para llegar a tener los puertos de salida (tambin declarados en la
entidad). En la declaracin de arquitecturas es donde reside todo el
funcionamiento de un circuito, ya que es ah donde se indica que hacer con
cada entrada, 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 de detalles interiores de la caja negra.

La declaracin de arquitecturas debe constar de las siguientes partes como


mnimo, aunque suelen ser ms:
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Cabecera de la arquitectura. En sta,


archpro es un nombre cualquiera (suele
empezar por "arch", aunque no es
architecture archpro of programa is necesario) y programa es el nombre de
una entidad existente en el mismo
fichero

Declaraciones de apoyo, que se vern


-- declaracin de seales y otros
en la pgina siguiente
accesorios
Begin Se da comienzo al programa
Conjunto de sentencias, bucles,
-- ncleo del programa procesos, funciones,... que dan
operatividad al programa.
end archpro; Fin del programa

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


alguna relacin con Turbo Pascal. Las sentencias entre begin y end son las
que describen el circuito, y es en lo que se centra tanto este libro electrnico
como cualquier otro que trate sobre VHDL. A continuacin, se muestra el
cdigo fuente de un programa en VHDL de un multiplexor (esta es una de las
mltiples formas de implementar un multiplexor en VHDL), el cual debe ir unido
a la entidad, ya que una parte sin la otra carecen de sentido.

Cabecera de la arquitectura. En esta


ocasin el nombre de la arquitectura es
architecture archimulti of multi is archimulti, y el de la entidad es multi,
la cual est definida anteriormente.

En este programa no se necesitan


-- seales seales

Begin Comienza al programa


process(enable,in1,in2)
begin
Sentencias que hacen que la entidad
if enable='0' then out1<="1111";
definida como multiplexor realice la
elsif enable='1' then
funcin propia de su nombre. Solo hay
if(selec = '0') then out1<=in1;
que entender la estructura de las
elsif(selec = '1') then
arquitecturas en estos momentos, por lo
out1<=in2;
que este cdigo no debe ser objeto de
end if;
preocupacin.
end if;
end process;
end archimulti;
Fin del programa

Para describir una arquitectura podremos usar cuatro estilos, teniendo cada
uno, su propio nivel de abstraccin. Los estilos son:

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Estilo behavioral o comportamiento: Este estilo se caracteriza por


incluir las sentencias y rdenes tpicas de un lenguaje de programacin
(if, then, case,...), sin importarnos como quedar la distribucin de
puertas lgicas dentro de la PLD. Es necesario un proceso al ser una
estructura secuencial.

El siguiente fragmento de cdigo describe un comparador (usando una entidad


descrita en este trabajo)escrito con el estilo behavioral o de comportamiento.

architecture behavioral of compa is


begin Como se puede apreciar en este ejemplo
comp: process (a, b) se utilizan los clsicos if then else de
begin cualquier lenguaje de programacin, y
if a= b then adems las asignaciones son
igual<='1'; secuenciales. Esto es lo que hace esta
else arquitectura de comportamiento o
igual<='0'; behavioral.
end if;
end process comp;
end behavioral;

Estilo dataflow o flujo de datos: Este estilo podremos encontrarlo de


dos formas similares, pero ambas implican cmo la informacin ser
transferida de seal a seal y de la entrada a la salida sin el uso de
asignaciones secuenciales, sino concurrentes. Es decir, en este estilo no
se pueden usar los procesos.

El comparador descrito de forma behavioral o de comportamiento se puede


escribir usando el estilo dataflow de cualquiera de las dos formas siguientes:

architecture dataflow1 of compa is Esta arquitectura es del estilo dataflow


begin porque se especifica como la
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

igual<='1' when (a=b) else '0'; informacin pasar a la salida sin usar
end dataflow1; sentencias secuenciales

architecture dataflow2 of compa is


begin
igual<= not(a(0) xor b(0))
Aqu de nuevo las asignaciones son
and not(a(1) xor b(1))
concurrentes, no secuenciales.
and not(a(2) xor b(2))
and not(a(3) xor b(3));
end dataflow2;

Estilo structural o estructural: En l se describe un "netlist" de VHDL, en


los cuales los componentes son conectados y evaluados
instantneamente mediante seales.

No se suele usar este estilo nicamente en una arquitectura ya que


resulta muy lioso y difcil de modificar, siendo de verdadera utilidad
cuando debemos crear una estructura grande y deseamos
descomponerla en partes para manejarla mejor, y para hacer la
simulacin de cada parte ms sencilla.

Se suele requerir el uso de seales auxiliares, y adems paquetes y libreras


accesorios, lo cual, recordemos, debe estar declarado al comienzo de la
entidad.

Aqu solo se interconexionan


architecture struct of compa is salidas con entradas de
signal x: bit_vector(0 to 3); componentes. La salida
begin viene dada por la
u0: xnor2 port map (a(0),b(0),x(0)); operatividad de los
u1: xnor2 port map (a(1),b(1),x(1)); componentes, la cual no se
u2: xnor2 port map (a(2),b(2),x(2)); puede saber si no
u3: xnor2 port map (a(3),b(3),x(3)); conocemos el paquete del
u4: and4 port map (x(0),x(1),x(2),x(3),igual); cual ha sido leda.
end struct;

Estilo mixto: Es el estilo que est compuesto en mayor o menor medida


de dos o ms de los estilos descritos anteriormente.

Deberemos tener en cuenta que el cdigo VHDL que escribamos no siempre


va a describir una funcin de forma ptima, la cual no siempre va a poder ser
reducida por la herramienta de compilacin. Esto se traduce en un peor
aprovechamiento de los recursos de las PLD's. Por lo tanto, diferentes diseos
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

producen diferentes, aunque equivalentes, ecuaciones de diseo, pudindose


dar, sin embargo, disposiciones diferentes de los recursos.

Es habitual el usar el estilo estructural para descomponer un diseo en


unidades manejables, siendo cada unidad diseada por equipos de trabajo
distintos. El estilo estructural se usa adems para tener un grado de control alto
sobre la sntesis.

Para concluir el apartado dedicado a las arquitecturas slo resta el recordar


que tanto la entidad y la arquitectura deben ir unidas en el mismo fichero, ya
que una parte carece de sentido sin la otra.

Un diseador de Hardware que utilice frecuentemente la misma tecnologa de


diseo ha de hacerse, con el paso del tiempo, con una resea amplia de
procedures, funciones, puertas y, en general, de componentes que emplear
con frecuencia. Los packages permiten agrupar un conjunto de declaraciones
para que puedan ser usadas en el diseo de diferentes circuitos sin ser
repetidas en la declaracin de cada uno.

La estructura bsica en la declaracin de un paquete est dividida en dos


partes claramente diferenciadas:

La declaracin del paquete, package: donde obtenemos una visin externa y


simplificada del componente. La declaracin del paquete va precedida por la
palabra reservada package y finaliza con end.

En el cuerpo de la declaracin nos encontramos con procedures, funciones,


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

Esta parte es a una entidad, lo mismo que


package nombre_del_package is un paquete es a un programa normal en

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

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

end nombre_del_package;

La declaracin del cuerpo del paquete, package body: especifica el


funcionamiento de procedures, funciones, tipos, etc. que nos permite su
implementacin, de forma similar a la arquitectura. Debe llevar las
palabras reservadas package body.

package body nombre_del_package is

-- definicin de procedures
Esta parte se corresponde con una
-- definicin de funciones
arquitectura.
-- definicin de tipos, etc.

end nombre_del_package;

Todo esto hace posible que una vez declarados los subprogramas dentro de un
package, podamos utilizarlos haciendo nicamente uso de una llamada al
proceso, asignndole un nombre y la lista de parmetros necesarios.

Para poder usar o llamar a un package que ha sido descrito anteriormente,


debemos incluir la clusula use antes del cuerpo de la arquitectura.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

use work.nombre del package.nombre del componente;

Para esto se deben especificar tres cosas:

El nombre de la librera donde se encuentra el paquete

El nombre del paquete

El nombre del componente que se desee habilitar

Hay ocasiones en las que deseamos habilitar todos los componentes


declarados en un paquete, ya sea por comodidad o por no saber exactamente
donde se encuentra el recurso que deseamos usar.

En tal caso, haramos uso de la palabra all de la siguiente forma:

use work.nombre del package.all;

Como ejemplo se muestra a continuacin la declaracin de un package que


contiene a dos componente, un contador y un decodificador.

Primero se declaran las libreras que se van a emplear

library ieee;
use ieee.std_logic_1164.all;
use work.std_arith.all;
--Empieza la declaracin del package "UNO"
package uno is
component
count port (
clk,reset:in bit;
conta :buffer std_logic_vector(1 downto 0));
end component;
component
decoder port (
seleccion :in std_logic_vector(1 downto 0);
enable1,enable2:in bit;
salida :out std_logic_vector(3 downto 0));
end component;
end package;

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

--Declaracin de las entidades

library ieee;
use ieee.std_logic_1164.all;
use work.std_arith.all;
use work.uno.all;
entity count is port (
clk,reset:in bit;
conta:buffer std_logic_vector(1 downto 0));
end count;

architecture archicount of count is


begin
contador :process (clk,reset)
begin
if (reset='1') then conta <= (others => '0') ;
elsif clk'event and clk='1' then conta <= conta + 1;
end if;
end process contador;
end archicount;

--Declaracin de las arquitecturas --Descripcion del decodificador 3/8 (74ls138)


library ieee;
use ieee.std_logic_1164.all;
use work.uno.all;
entity decoder is port (
seleccion :in std_logic_vector(1 downto 0);
enable1,enable2:in bit;
salida :out std_logic_vector(3 downto 0));
end decoder;

--Descripcin del decodificador


architecture archidecoder of decoder is
begin

decodificador:process(seleccion,enable1,enable2)
begin
if enable2='1' then salida<=(others=>'0');
elsif enable2='0' and enable1='0' then salida<=(others => '0');
elsif(enable1='1') then
case seleccion is
when "00" => salida <= "0001";
when "01" => salida <= "0010";
when "10" => salida <= "0100";
when "11" => salida <= "1000";
when others => salida <="1111";
end case;
end if;
end process decodificador;
end archidecoder;

Para poder hacer uso, de cualquier componente de el package "uno" (el


decodificador o el contador),es necesario que primero se incluya la sentencia:

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

use work.uno.all;

Librera LPM (Library of parametrized modules)

La LPM fue propuesto en 1990 como una extensin del estndar Electronic
Design Interface Format (EDIF) para permitir al diseador crear un circuito
completo con independencia de la arquitectura, separando las partes fsicas y
lgicas del diseo

Cada componente en la librera esta definido por unos parmetros, que le


permiten al diseador de hardware representar una amplia variedad de
variables lgicas, evitando la repeticin del trabajo.

Un diseo basado en la utilizacin de la librera LPM (library of parametrized


modules) combina simultneamente, los aspectos propios de un diseo en alto
nivel, con las mejoras propias de la sntesis en bajo nivel. Debido a que los
componentes descritos en esta librera son aceptados por lo fabricantes, su
consumo de los recurso internos viene previamente optimizado.

La librera LPM System Library, en la cual se nos ofrecen mltiples mdulos, ya


creados, puede facilitarnos enormemente nuestro trabajo, ya que incluye desde
el generador de constantes ms sencillo hasta contadores y multiplicadores
con todas las caractersticas opcionales posibles.

La lista de componentes incluida en esta es la siguiente:

Nombre del paquete Nombre del component

MCCSTNT Mdulo de constants

MINV Mdulo de inversores

MAND Mdulo de AND's

MOR Mdulo de OR's

MXOR Mdulo de XOR's

MBUSTRI Mdulo de bus triestado

MMUX Mdulo de multiplexors

MDECODE Mdulo de decodificador

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Mdulo de
MADD_SUB
sumadores/restadores
MCOMPARE Mdulo de comparadores

MMULT Mdulo de multiplicadores

MCOUNTER Mdulo de contadores

MLATCH Mdulo de latches

MFF Mdulo de flip-flops

MSHFTREG Mdulo de registros

Para usar cualquiera de stos mdulos, slamente deberemos incluir en


nuestro fichero de cdigo la siguiente lnea, encima de la declaracin de
entidades y de arquitecturas:

use work.lpmpkg.all;

Como ejemplo crearemos un multiplicador de 4 bits (a y b), cuyo resultado,


obviamente, debe se de 8 bits (p), y que nos permite adems sumarle otro
nmero de ocho bits (s) al resultado.

Para ello deberemos invocar previamente a la librera lpmpkg tal y como


habamos dicho:

library ieee;
use ieee.std_logic_1164.all;
use work.lpmpkg.all; Llamamos a lpmpkg
entity multi_lpm is port(
a,b: in std_logic_vector(3 downto 0); Vamos a multiplicar a y b
s: in std_logic_vector(7 downto 0); Y vamos a sumar s
p: out std_logic_vector(7 downto 0) El resultado es p
);
end multi_lpm;

use work.lpmpkg.all; Llamamos a lpmpkg


architecture archimulti of multi_lpm is
begin
a0: mmult generic map(4,4,8,8)
port map(a,b,s,p); Usamos el mdulo mmult
end archimulti;

En este ejemplo hemos hecho uso del mdulo mmult, el cual nos exige no slo
introducirle las seales con las cuales operar (con la sentencia port map) sino
tambin su dimensin (sentencia generic map).
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Como cada mdulo tiene unas especificaciones de entradas, salida y


dimensiones distintas, tendremos que consultar el manual de la librera lpmpkg
para conocer que entradas y salidas necesita cada mdulo.

2.10 OBJETOS

En un lenguaje de descripcin de software (SDL) una variable contiene un valor


y puede aceptar un nuevo valor a travs de una asignacin secuencial. Por otro
lado, las constantes tienen valores prefijados a lo largo de toda la ejecucin del
programa. Sin embargo, en VHDL se hace necesaria la utilizacin de un nuevo
tipo de objeto que puede emular las asignaciones concurrentes propias de los
circuitos elctricos reales; este nuevo tipo de objeto son las seales.

Un objeto en VHDL es un elemento que tiene asignado un valor de un tipo


determinado. Segn sea el tipo de dato, el objeto poseer un conjunto de
operaciones que se le podrn aplicar. En general, no ser posible realizar
operaciones entre dos objetos de distinto tipo, a menos que definamos
previamente un programa de conversin de tipos.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

2.11 IDENTIFICADORES

Los identificadores son un conjunto de caracteres dispuestos de una forma


adecuada y siguiendo unas normas propias del lenguaje, para dar un nombre a
los elementos en VHDL, por lo que es aconsejable elegir un nombre que sea
representativo y que facilite la comprensin del cdigo.

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

Los identificadores deben empezar con un carcter alfabtico, no


pudiendo terminar con un carcter subrayado, ni tener dos o ms de estos
caracteres subrayados seguidos.

VHDL identifica indistintamente tanto las maysculas como las


minsculas, pudindose emplear por igual el identificador "sumador" o
"SUMADOR".

El tamao o extensin del identificador no est fijado por VHDL, siendo


recomendable que el usuario elija un tamao que confiera sentido y

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

significado al identificador, sin llegar a alcanzar longitudes excesivamente


largas.

Los identificadores pueden contener caracteres numricos del '0' al '9',


sin que stos puedan aparecer al principio.

No puede usarse como identificador una palabra reservada por VHDL.

2.12 PALABRAS RESERVADAS

Las palabras reservadas son un conjunto de identificadores que tienen un


significado especfico en VHDL. Estas palabras son empleadas dentro del
lenguaje a la hora 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 el usuario.

Las palabras reservadas por VHDL son:

Abs Else Nand Return


Access Elsif New Select
After End Next Severity
Alias Entity Nor Signal
All Exit Not Subtype
And File Null Then
Architecture For Of To
Array function On Transport
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
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Component library Range With


Configuration linkage record Xor
Constant loop register
Disconnect map Rem
Downto mod report

2.13 SIMBOLOS 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 un operador. El smbolo "- -" es empleado
para los comentarios realizados por el usuario, de tal forma que el programa al
encontrar una instruccin precedida por "- -" la saltar ignorando su contenido.
De esta forma, el programador puede hacer ms comprensible el cdigo del
programa.

Los smbolos especiales en VHDL son:

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

Para finalizar, recordar que el smbolo ms empleado por un programador


es el " ; ", smbolo que debe finalizar todas y cada una de las lneas del cdigo
dando por terminada dicha sentencia en el programa.

2.14 TIPOS DE DATOS

El tipo de datos es un elemento bsico en VHDL, ya que delimita que valores


puede tener un objeto y que operaciones podemos realizar con l. Aparte de
los tipos ya creados, podemos crear nuevos tipos y subconjuntos de tipos.

La declaracin de un tipo de datos es la sentencia VHDL utilizada para


introducir un nuevo tipo. Esta declaracin est formada por un identificador que
nos permitir usar el nuevo tipo al llamarlo y la descripcin del conjunto de

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

valores que forman el tipo de datos. Para ello usamos la palabra reservada
type. La declaracin puede tener varios formatos como por ejemplo:

type longitud_maxima is range 2 to 50


type estados is (estado_a, estado_b, estado_c);

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

variable est: estados;


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

Cada tipo es diferente e incompatible con los dems, aunque estn declarados
de la misma forma, por lo cual no podemos asignar a una seal de un tipo otra
de otro tipo distinto, a menos que definamos una funcin de transformacin.

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

Tipos enumerados: En ste se define el conjunto de posibles valores


del tipo especificado, presentando una lista que contiene a todos los
valores. El primer identificador es el nombre del tipo y sirve para
referenciarlo, y entre parntesis y separados por comas se adjuntan todos
los valores legales del tipo.

type vocales ('a', 'e', 'i', 'o', 'u');


type direcciones is (izquierda, derecha, arriba, abajo, centro);

Si no est especificado ningn valor inicial, el objeto se inicializa con el valor


ms a la izquierda de los especificados en la declaracin del tipo. Es decir, un
objeto del tipo "vocales" toma el valor 'a' por defecto.

Tipos enteros / reales: Esta modalidad de tipo sirve apra definir un


objeto con valores reales y enteros. En VHDL vienen definidos el tipo
integer, que puede ir desde -2147483647 hasta 2147483647, y el tipo
real, quepuede ir desde -1.0e38 hasta 1.0e38.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Para definir un tipo de esta naturaleza hay que especificar el rango de


valores que puede llegar a tener asignado un objeto, como en los ejemplos
siguientes

type edad is range 0 to 150;


type dias is range 31 downto 0;

Si no est especificado ningn valor inicial, el objeto se inicializa con el valor


ms a la izquierda de los especificados en la declaracin del tipo.

Deberemos tener cuidado si hemos usado la palabra to o la palabra downto


para definir el tipo, ya que se asignar un valor por defecto u otro. En el
ejemplo se da por defecto a un objeto del tipo "edad" el valor 0, y a otro del tipo
"dias", el valor 31.

Tipos fisicos: Sirven para representar magnitudes del mundo real


como el tiempo, peso, capacidad,... por lo que llevan, aparte de un literal
numrico, la magnitud fsica a medir. Podemos asignar unidades
auxiliares a la predefinida.

type time is range 0 to 1e20;


units
fs;
ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
ms = 1000 us;
sec = 1000 ms;
min = 60 sec;
hr = 60 min;
end units;

Si no est especificado ningn valor inicial, el objeto se inicializa con el valor


ms a la izquierda de los especificados en la declaracin del tipo. Deberemos
tener cuidado si hemos usado la palabra to o la palabra downto para definir el

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

tipo, ya que se asignar un valor por defecto u otro. En el ejemplo se da por


defecto a un objeto del tipo "edad" el valor 0, y a otro del tipo "dias", el valor 31.

2.15 EXPRESIONES Y OPERACIONES

La metodologa de programacin de un componente, basada en la descripcin


por comportamiento (behavioral), puede emplear en su diseo la mayora de
operadores que se encuentran habitualmente tiles en los SDL's ( software
design languages)

En el cuadro adjunto se puede ver una relacin de los operadores predefinidos


ms empleados en VHDL, as mismo se aprecia que su clasificacin atiende al
tipo de dato que vaya a manejar:

NOT, AND, OR, Tipo de operador: boolean


OPERADORES LGICOS
NAND, NOR, XOR Tipo de resultado: boolean

Tipo de operador: cualquier


OPERADORES
= / < <= > >= tipo
RELACIONALES
Tipo de resultado: boolean

Tipo de operador: integer, real,


OPERADORES + - * / ** signal
ARITMTICOS MOD, REM, ABS tipo de resultado: integer,
real,signal

OPERADOR Tipo de operador: array


&
CONCADENACIN tipo de resultado: array

Los operadores lgicos, pueden ser empleados con los tipos predefinidos, BIT
y BOOLEAN, dndonos como resultado un valor booleano del mismo tipo que
los operadores.

Para graficar un poco la importancia de emplear correctamente los distintos


tipos de operadores,

a continuacin lo ilustramos con la ayuda del diseo de un sumador de cuatro


bits mas el carry de la etapa anterior.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

En este ejemplo se aprecia una


concatenacion del lemento "a"
(que previamente debe de
haber sido definido como un
architecture archisumador of sumador is std_logic_vector), con un "0",
begin dandonos como resulytado un
process (a,b,cin) array en el que la primera
variable aux:std_logic_vector(4 downto 0); poscicion la ocupa el "0" y
begin despues va el elemento "a"
aux:=('0' & a) + ('0' & b);
if cin='1' then aux:=aux+1;
Este mismo ejemplo nos servira
elsif cin='0' then null;
para graficar la utilizacin del
end if;
operador suma "+", que lo
sum<=aux;
empleamos para incrementar a
end process;
la variable aux, en caso de que
end archisumador;
cin valga uno.

Los operadores relacionales tambin nos generaran un resultado de tipo


booleano sin importar el tipo de operando con el que lo empleemos, como nota
comentar que el operador "diferente que" viene dado por la combinacin

" /= ".

Los operandos de tipo aritmticos estn en la obligacin de ser empleados con


elementos del mismo tipo y de devolver un resultado que a su vez este
contenido en el mismo tipo que los operandos. EL signo "+", "-" dar como
resultado sumas de unidades es decir que al elemento sumado le aade uno,
(como se aprecia en el anterior ejemplo).

El operador concadenacon es empleado para concadenar arrays de bits,


como muestra se grafca este operador con el siguiente ejemplo.

aux:=('0' & a)

Los elementos a concadenar deben de ser del mismo tipo. Este tipo de
operador es muy empleado a la hora de trabajar con buses o registros. El
resultado que nos devuelve este operador es un array de los elementos de los
operandos concatenados. En nuestro ejemplo, si "a" es un array de cuatro bits,
la variable "aux", pasara a tener en su primera poscicion el valor "0" y a
continuacion tendra el valor de los elementos de "a", de forma que "aux" pasa a
tener dimension cinco.

2.16 ATRIBUTOS DE LOS VECTORES


Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Un atributo nos proporciona informacin sobre ciertos elementos como las


entidades, arquitecturas, tipos y seales. Hay varios atributos de para seales
que son muy tiles en sntesis, y especialmente en el VHDL simulable (no
sintetizable). Ah se trabaja con VHDL sintetizable slo se pueden utilizar
algunos atributos como:

Atributo 'left: se usa para manejar al elemento ms a la izquierda de un


vector.

Si el elemento ms a la izquierda de entrada


if entrada'left='0' then
es '0', entonces se ejecuta lo que sigue al
...
then

Atributo 'right: se usa para manejar al elemento ms a la derecha de un


vector.

Si el elemento ms a la derecha de entrada


if entrada'right='1' then
es '1', entonces se ejecuta lo que sigue al
...
then

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

Si la longitud de entrada (se supone,


if entrada'lenght=5 then
lgicamente, que es un array o vector) es 5,
...
entonces se ejecuta lo que sigue al then.

Atributo 'event: se usa para conocer si una variable ha cambiado o no,


solindose usar como variable booleana:

if entrada'event=5 then ... Si hay un cambio en el nivel lgico de la seal


entrada, entonces se ejecuta lo que sigue al
then.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

2.17 SENTENCIAS SECUENCIALES

En la mayora de los lenguajes de descripcin de software, todas las


sentencias de asignamiento son de naturaleza secuencial. Esto significa que la
ejecucin del programa se llevara a cabo de arriba a abajo, es decir siguiendo
el orden en el que se hayan dispuesto dichas sentencias en el programa, por
ello es de vital importancia la disposicin de las mismas dentro del cdigo
fuente.

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


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

2.18 ASIGNACIN A UNA SEAL

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

La asignacin a una seal dentro de un proceso es siempre secuencial, es


decir, la seal no cambia su valor hasta que se ha evaluado el proceso en el
cual se incluye. Si no est dentro de un proceso, como por ejemplo, usando el
estilo dataflow, el cambio es concurrente, es decir, la asignacin est siempre
activa, y se actualiza instantneamente. Para hacer una asignacin a una seal
deberemos usar el operador <=, estando la seal a asignar a la izquierda y el
valor que debe tomar a la derecha.

signal <= signal1 + signal2;

Las seales son el objeto ms usado dentro de la sntesis de diseos, teniendo


la particularidad de que los cambios en una seal son programados, no son
inmediatos.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Esto resulta extrao, sobre todo si comparamos su comportamiento con el de


las variables, y para dejar claro este concepto veamos el siguiente ejemplo:

process
begin La seal a tendr el valor b
a <= b; La seal b tendr el valor a
b <= a;
wait on a,b; Se acualizan los cambios AQU
end process;

En este ejemplo, las dos seales intercambian sus valores, ya que cuando
se ejecuta la segunda (b<=a), el valor de la seal a no ha cambiado todava
aunque est la sentencia a<=b, ya que ninguna seal cambia de valor hasta
que se hayan evaluado todas las rdenes de un proceso, y es en ese momento
cuando a y b toman el valor que se les ha indicado tomar.

2.19 ASIGNACION A UNA VARIABLE

La asignacin a una variable viene totalmente influenciada por su propia


naturaleza, la cual hace que slo tengan su campo de accin en un proceso o
un subprograma (areas secuenciales). Una variable no retiene sus valores
dentro de un subprograma despus de cada llamada, soliendo usarse como
ndices para ciclos loop y para asignaciones inmediatas. Si queremos usar una
variable fuera de un proceso, deberemos asignar su valor a una seal, y operar
con la seal fuera. Para hacer el asignamiento a una variable deberemos usar
el operador := , como se muestra en los ejemplos siguientes.

A diferencia de las seales, el asignamiento de un valor a un variable, no


tiene un retardo asociado, de manera que la variable toma el nuevo valor justo
en el momento de la asignacin, de forma que las sentencias que vengan a
continuacin, la variable recin asignada, tendr el nuevo valor. De esta forma,
el ejemplo expuesto para seales, al ser usado para variables, no conseguimos
el mismo resultado:

a := b; a toma el valor b
b := a; b toma el NUEVO valor de a (el de b)

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

En esta ocasin, no se intercambiarn los valores de ambas seales, sino que


acabarn con el valor inicial de la variable b.

Para conseguir que se intercambien las variables, deberemos usar una variable
temporal de la siguiente forma:

temp toma el valor de a


temp := a;
a := b; a toma el valor de b
b := temp; b toma el valor de temp (que era a)

Deberemos tener en cuenta que una variable se reinicializa siempre al hacer


una nueva llamada a un subprograma.

2.20 SENTENCIA IF

La construccin if-then-else es usada para seleccionar un conjunto de


sentencias para ser ejecutadas segn la evaluacin de una condicin o
conjunto de condiciones, cuyo resultado debe ser o true o false. Su estructura
es la siguiente:

if (condicin) then
haz una cosa;
else
haz otra cosa diferente;
end if;

Si la condicin entre parntesis es verdadera, la(s) sentencia(s) secuencial(es)


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

La sentencia if-then-else puede ser expandida para incluir la sentencia elsif, la


cual nos permite incluir una segunda condicin si no se ha cumplido la primera
(la cual tiene prioridad). Su estructura es la siguiente:

if (condicin) then
haz una cosa;
elsif (otra condicin) then
haz otra cosa diferente;
else
haz otra totalmente diferente;
end if;

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Si se da la situacin en la cual la primera condicin es verdad ejecuta las


sentencias que van despus del primer then.

Si no es verdadera la primera condicin, se pasa a evaluar la segunda, y de ser


esta verdad, ejecuta las sentencias que estn a continuacin del segundo then.
Si ninguna de las dos es verdadera, se ejecuta lo que est detrs de la palabra
else. Ntese que para que se ejecute las sentencias con el nombre "otra cosas
diferente", no solo debe ser la segunda condicin verdadera, sino que adems
la primera condicin debe ser falsa.

Un ejemplo de esta sentencia se puede ver a continuacin:

entity multi is port( entidad del multiplexor


a, b, c :in bit_vector(3 downto 0); puertos del multiplexor
enable :in bit;
control :in bit_vector(1 downto 0);
d :out bit_vector(3 downto 0)
);
end multi; finaliza la entidad

architecture archmul of multi is arquitectura del multiplexor


begin
process (a, b, c, control, enable)
begin
if enable='1' then d<="1111"; si enable es 1 entonces d="1111"
elsif enable='0' then si enable no es 1 y es 0 entonces
case control is sentencia case dentro del if
when "00" => d <= a;
when "01" => d <= b;
when "10" => d <= c;
when "11" => d <= "1111";
end case; se cierra la sentencia case
end if; se cierra la sentencia if con end
end process;
end archmul; finaliza la arquitectura

Deberemos tener cuidado al usar una sentencia if-then-else ya que podemos


caer en el error de la memoria implcita. Si no incluimos la palabra else, y si no
se cumple la primera condicin, las seales de salida no cambian, reteniendo el
valor previo a la sentencia if. Esto puede ayudarnos (flip-flops) o bien hacer
que un diseo sea totalmente errneo. Analicemoslo con un ejemplo:

if (clk'event and clk='1') then


Si hay un flanco de subida en la seal
q <= d;
clk, entonces q toma el valor de d.
end if;

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

En este caso se dice que debe ejecutarse si hay un flanco de subida en la


seal clk, pero no se dice nada si no hay cambios o si el flanco es de bajada.

Es en este caso se ha definido una memoria implcita, y VHDL hace que la


seal q siga con el valor que tena antes de ejecutarse la sentencia if. Esto
hace que este cdigo y el que se lista a continuacin sean equivalentes:

if (clk'event and clk='1') then


Si hay un flanco de subisda en la
q <= d;
seal clk, entonces q toma el valor de
else
d, si no es as, q sigue manteniendo
q <= q;
su valor.
end if;

Esto hace que se recomiende siempre el especificar con else que debe pasar
con las seales si no se cumpla la condicin indicada con el if.

Para evitar la inclusin de memoria implcitas se recomienda especificar


siempre el comportamiento del circuito en aquellos casos en los que no se
cumple la condicin de una sentencia if, o de una sentencia case.

2.21 SENTENCIA CASE

La sentencia case es usada para especificar una serie de aciones segn el


valor dado de una seal de seleccin. Esta sentencia es equivalente a la
sentencia with-select-when, con la salvedad que la sentencia que nos ocupa
es secuencial, no combinacional. La estructura es la siguiente:

case (seal a evaluar) is


when (valor 1) => haz una cosa;
when (valor 2) => haz otra cosa;
...
when (ltimo valor) => haz tal cosa;
end case;

En el caso que la seal a evaluar (situada despus del case) tenga el "valor 1",
entonces se ejecuta "una cosa", si tiene el "valor 2", se ejecuta "otra cosa", ... y
si tiene el "ltimo valor", se ejecuta "tal cosa".

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Esta sentencia parece hecha a la medida para crear multiplexores, como se ve


en el siguiente ejemplo, del cual slo estudiamos la parte correspondiente a la
sentencia case:

entity multi is port( entidad del multiplexor


a, b, c :in bit_vector(3 downto 0); puertos del multiplexor
enable :in bit;
control :in bit_vector(1 downto 0);
d :out bit_vector(3 downto 0)
);
end multi; finaliza la entidad

architecture archmul of multi is arquitectura del multiplexor


begin
process (a, b, c, control, enable)
begin
if enable='1' then d<="1111"; sentencia if que contiene al case
elsif enable='0' then
case control is se evala la seal control
when "00" => d <= a; si control vale "00" entonces d<=a
when "01" => d <= b; si control vale "01" entonces d<=b
when "10" => d <= c; si control vale "10" entonces d<=c
when "11" => d <= "1111"; si control vale "11" d valdr "1111"
end case; se cierra la sentencia case con end
end if; se cierra la sentencia if
end process;
end archmul; finaliza la arquitectura

Esta sentencia es muy tpica de los lenguajes de programacin y cuenta


adems con una variante, muy importante en VHDL, como es dar un valor
especificado a la cierta seal si no se contemplan todos los casos posibles de
la seal a evaluar. Para ello se usa la palabra reservada others, que aparece
en el siguiente fragmento de cdigo:

case control is se evala la seal control


when "00" => d <= a; si control vale "00" entonces d<=a
when "01" => d <= b; si control vale "01" entonces d<=b
when "10" => d <= c; si control vale "10" entonces d<=c
when others => d <= "1111"; si control no toma ningn valor de los
especificados antes, toma el valor "1111"
end case; finaliza la arquitectura

Al igual que era recomendable especificar un else dentro de cada if, se


recomienda, con ms razn el uso de others dentro de un case aunque en un
pincipio paresca que estan especificados todos los valores posibles, ya que
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

algunos tipos soportan ms valores aparte del nivel uno y cero lgico, como el
estado Z o de alta impedancia.

La sentencia case tambin nos permite especificar un rango de valores


posibles de la seal de seleccin, para los cuales hacer una asignacin,
mediante la palabra reservada to. Como ejemplo veamos dos fragmentos de
cdigo que son equivalentes:

case control is
when "000" => d <= a;
when "001" => d <= a;
case control is
when "010" => d <= a;
when "000" to "010" => d <= a;
when "011" => d <= b;
when "011" to "110" => d <= b;
when "100" => d <= b;
when "111" => d <= c;
when "101" => d <= b;
when others => d <= null;
when "110" => d <= b;
end case;
when "111" => d <= c;
when others => d <= null;
end case;

2.22 SENTENCIA LOOP

La sentencia loop (ciclo en castellano) se usa para ejecutar un grupo de


sentencias un nmero determinado de veces, y consiste tanto en un ciclo for
como en un ciclo while. La sentencia for se ejecuta un nmero especfico de
iteraciones basado en el valor de una variable. La sentencia while continuar
ejcutndo una operacin mientra una condicin de control local sea cierta.
Estas sentencias son muy tpicas de los lenguajes ms usuales de
programacin, usndose habitualmente para ello la variable i. A continuacin se
listan sendos ejemplos para cada caso:

process (a)
begin
ciclo1: for i in 7 downto 0 loop Cabecera del ciclo
entrada(i) <= ( others => '0' ) Instrucciones a ejecutar 8 veces
end loop; Finalizacin del ciclo
end process;

Este fragmento de cdigo hace que uno por uno los 8 ltimos bits de la seal
entrada tengan el valor lgico cero. Que se indique que deben hacerse cero 8
bits, no quiere decir que la seal entrada est formada por ms de ocho. El

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

encabezamiento de la sentencia nos dice que se va a repetir ocho veces


seguidas las instrucciones entre loop y end loop.

Debemos destacar que en un ciclo for, la variable del mismo se declara


automticamente, y no tenemos que incrementarla o inicializarla, ya que el
programa lo hace por nosotros. La etiqueta ciclo1 se usa (aunque es opcional)
para dar ms posibilidades de organizacin al programador.

process (a)
variable i: integer := 0;
begin
ciclo2: while i < 7 loop Mientras i sea menor que 7 => ciclo
entrada(i) <= (others => '0');
i := i + 1;
end loop; Finaliza el ciclo
end process;

En esta ocasin se usa la sentencia while, para lograr el mismo resultado que
en el ejemplo anterior, es decir, inicializar los 8 ltimos bits del vector entrada a
cero. Esta vez, se ejecutan las lneas entre loop y end loop mientras la
variable i sea menor que siete.

Es lgico que esta variable cambie dentro del ciclo, ya que de no ser as, se
ejecutara para siempre. De forma distinta al ejemplo anterior, la variable del
ciclo while debe ser declarada (como integer), inicializada e incrementada por
nosotros, por lo que requiere ms trabajo.

2.23 SENTENCIA EXIT

Usada siempre dentro de un loop, la sentencia exit nos permite salir del mismo
si se alcanza una condicin fijada por nosotros. Su verdadera utilidad la
encontramos si diseamos controladores de memoria. A continuacin
analizamos un ejemplo:

process (a)
begin
ciclo1: for i in 7 downto 0 loop
if a'length < i then exit ciclo1;
entrada(i) <= ( others => '0' );
end loop;
end process;

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Ahora se ejecuta el mismo ejemplo que expusimos en el caso de un ciclo for


con la salvedad que si la variable i supera la longitud del vector a el ciclo deja
de ejecutarse aunque no se hayan cumplido las veces pedidas en el
encabezamiento.

2.24 SENTENCIA NEXT

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

process (a)
begin
ciclo1: for i in 7 downto 0 loop Cabecera del ciclo
if i=4 then next; Si i vale 4, se salta el ciclo
else Si no vale 4,...
entrada(i) <= ( others => '0' ); ... se inicializa entrada
end if;
end loop; Finaliza el ciclo
end process;

Ahora se ejecuta el programa todas las veces programadas, excepto la


cuarta, ya que hay una sentencia if que hace que se pase a la siguiente
iteracin si la varaibale i vale cuatro.

2.25 SENTENCIA NULL

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


para que dada una condicin especial no pase nada , es decir, que ninguna
seal o variable cambie, y que el programa siga su curso habitual. Su
comportamiento dentro de un loop es similar al de la sentencia next.

2.26 SENTENCIA WAIT

La sentencia wait se usa para suspender un proceso si ste no tiene lista


sensitiva. Lo nico que exige esta sentencia es estar situada la final del
proceso. Para entender mejor sto, basta con decir que los dos cdigos
siguientes son equivalentes.
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

process
process (a,b,c)
begin
begin
x <= a and b and c;
x <= a and b and c;
wait on a,b,c;
end process;
end process;

Ambos procesos se ejecutarn cuando haya un cambio en la seal a, b o c se


muestra en este caso la equivalencia de una lista sensitiva y una sentencia
wait explcita.

2.27 SENTENCIA WAIT UNTIL

No debemos confundir la sentencia wait until con la sentencia wait vista en el


apartado anterior. En esta ocasin, tampoco se puede usar una lsita sensitiva
con el proceso, ya que sta queda definida con la misma sentencia. Para las
descripciones la frmula wait until debe estar al prncipio del proceso, por lo
que la lgica descrita de esta menera no puede ser reseteada asncronamente.
Veamos su uso en el caso de la arquitectura de un flip-flop d:

architecture ejemplo of ffd is


begin
process begin
wait until (clk='1');
q <= d;
end process;
end ejemplo;

Este proceso se suspende hasta que la condicin siguiente a wait until es


verdadera.
Una vez que es verdad, y las asignaciones de seal se han realizado, el
proceso vuelve a esperar hasta que la seal clk vuelve a valer de nuevo 1, es
decir, un flanco de subida.

2.28 SENTENCIAS CONCURRENTES

La naturaleza propia de los circuitos elctricos obliga a VHDL a soportar un


nuevo tipo de asignacin de seales, que nos permita implementar este tipo de
operatividad. En ella todas las asignaciones se llevan a cabo en paralelo (al
mismo tiempo). En una asignacin concurrente la seal que est a la izquierda

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

de la asignacin es evaluada siempre que alguna de las seales de la derecha


modifique su valor.

Como ejemplo tenemos las siguientes sentencias de asignacin:

c <= a and b;
s <= a xor b;

FIGURA 2.26.1 Arreglo


compuertas

Si las seales de entrada (situadas a la derecha), a o b, cambian su valor, las


seales de salida (situadas a la izquierda), c y s, son evaluadas, de forma que
su valor se ver modificado si fuese necesario

2.29 SENTENCIA PROCESS

La sentencia process es una de las construcciones tpicas de VHDL usadas


para agrupar algoritmos. Esta sentencia se inicia (de forma opcional) con una
etiqueta seguida de dos puntos ( : ), despus la palabra reservada process y
una lista de variables sensibles. La lista sensible, indica que seales harn
que se ejecuta el proceso, es decir, qu variable(s) debe(n) cambiar para que
se ejecute el proceso. Dentro de un proceso se encuentran sentencias
secuenciales, no concurrentes. Esto hace que el orden de las rdenes dentro
de un proceso sea importante, ya que se ejecuta una despus de otra, y los
posibles cambios que deba haber en las seales alteradas se producen
despus de evaluar todo el ciclo al completo.

Esta caracterstica define una de las particularidades de VHDL.

La estructura de un proceso es la siguiente:

etiqueta: process (var1, var2, ...) Si cambia alguna de las variables


begin situadas entre los parntesis, se
sentencias secuenciales ejecuta el proceso.
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

end process etiqueta;

Siempre que queramos utilizar sentencias secuenciales se deber usar un


proceso. Como ejemplo del uso de un proceso se muestra el siguiente
fragmento de cdigo correspondiente a un flip-flop d.

contador: process (clock) Si hay un cambio en la seal clock


begin (reloj), se ejecuta el process que
if (clock'event and clk='1') then contiene una sentencia if. Una vez
q <= d; acabado de evaluar todas las
end if, sentencias del proceso, se cambian
end process contador; todas las seales necesarias a la vez.

Es muy importante tener en cuenta dos cosas a la hora de usar un proceso


respecto a las seales y las variables. La primera es que las variables toman
instantneamente el valor especificado y que slo tienen sentido de existencia
dentro de un proceso. La segunda es que las seales cambian su valor
solamente al llegar al final del proceso. Esto se aprecia claramente en los dos
ejemplos siguientes, cuyo comportamiento se pretende que sea el siguiente
(suponiendo que hemos cargado el operador +):

Si a tiene el valor "0000", entonces la salida/entrada b deber incrementar su


valor en una unidad, y si despus e haber incrementado la seal b, sta vale
"0001", c deber valer '1', si no es as deber valer '0'.

Si hay un cambio en la seal de


entrada a, entonces se ejecuta el
architecture no_funciona of uno is proceso:
begin
process (a) b se incrementa cuando se
begin acabe de ejecutar el proceso
if a = "0000" then b <= b + 1; (manteniendo el valor actual
end if; hasta el end del mismo) si a
if b = "0001" then c <= '1'; vale "1111"
else c <='0';
end process;
end no_funciona; c vale '1' si b tiene el valor
"0001"

El primer ejemplo no funciona adecuadamente si b tiene le valor inicial de


"0000". Veamos porqu: si y a cambia para tomar el valor "0000", b se
incrementar en una unidad al finalizar la evaluacin del proceso, por lo que b

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

no valdr "0001" hasta entonces, por lo que c no valdr '1', que no era lo que
desebamos.

Si hay un cambio en la seal de


entrada a, entonces se ejecuta el
architecture funciona of uno is proceso:
begin
process (a) v toma instantaneamente el
variable v: bit_vector(3 downto 0); valor de b
begin
v:=b; v se incrementa
if a = "0000" then v := v + '1'; instantaneamente si a vale
end if; "1111"
if v = "0001" then c <= '1';
else c <='0';
b <= v; c vale '1' si v tiene el valor
end process; "0001"
end funciona;
b toma el valor de v

El segundo ejemplo si que funciona como habamos especificado para


cualquier valor de b. Si a cambia y toma el valor "0000", la variable v toma
instantneamente el valor inicial de b (esto es "0000"), y se incrementar en
una unidad instantneamente por lo que valdr "0001". Entonces c tomar el
nivel lgico alto, y seguido a esto, b tomar el valor incrementado de v. Los
nuevos valores de b y c aparecern a la salida al acabar la evaluacin
completa del proceso.

2.30 ASIGNACIN CONCURRENTE A SEAL

En un apartado anterior vimos como era la asignacin secuencial a una seal.


Pero las asignaciones a seales tambin pueden ser concurrentes. La principal
forma de sta asignacin es que no se encuentra en los procesos o
subprogramas, sino en las arquitecturas. La sintaxis de asignacin tiene la
misma forma que si fuese secuencial, es decir, usando el operador <=.

2.31 ASIGNACION CONCURRENTE CONDICIONAL

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Esta asignacin es equivalente a la sentencia if, con la salvedad que es


concurrente. La sintaxis a seguir es la siguiente:

seal_uno <= seal_dos when condicion else seal_tres;

En este caso, a seal_uno se le asigna el valor de seal_dos si se cumple lo


especificado en condicin, y en caso de no cumplirse, se le asigna el valor de
seal_tres. Un ejemplo muy tpico para el asignamiento concurrente
condicional es el de un multiplexor. Los dos listados siguientes tienen la misma
operatividad:

process(control,entrada1,entrada2)
begin
if control='1' then
salida <= entrada1 when control='1' salida<=entrada1;
else entrada2; else
salida<=entrada2;
end if;
end process;

La ltima asignacin tambin puede llevar condicin (slo a partir de la


norma de 1993).

2.32 ASIGNACIN CONCURRENTE CON


SELECCIN

Es la forma compacta y concurrente de la sentencia case, la cual tiene la


siguiente sintaxis:

with expresion select


seal1 <= seal2 when valor_expresin_1,
seal3 when valor_expresin_2;

Es muy importante notar que no se incluye el punto y coma (;) habitual ms


que al final de la sentencia, ya que de otra forma sera incorrecto. La sentencia
asigna a seal1 el valor de seal2 si se da que expresion toma el valor
valor_expresin_1, toma el valor seal3 si expresion toma el valor
valor_expresin_2,... pudiendose ampliar esta cadena de condiciones tanto
como queramos.

Como ejemplo veamos los siguientes fragmentos de cdigo, ambos


equivalentes, que modelan a una simple Unidad Lgica:
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

process(a, b, operacion)
begin
with operacion select case operacin is
resul <= a and b when "00", when "00" => resul <= a and b;
a or b when "01", when "01" => resul <= a or b;
a xor b when "10", when "10" => resul <= a xor b;
not (a and b) "11"; when "11" => resul <= not(a and b);
end case;
end process;

En ambos fragmentos de cdigo se realiza la operacin and a las seales a y b


siendo el resultado asignado a resul si operacion vale "00", se realiza la
operacin or si operacin vale "01", etc. La diferencia entre ambas rutinas es
que la izquierda es concurrente y la de la derecha es secuencial.

2.33 LLAMADA CONCURRENTE A


SUBPROGRAMA

La llamada a una funcin o a un procedimiento (los dos tipos existentes de


subprogramas) la podemos encontrar tanto en una arquitectura como dentro
de un proceso, teniendo en ambos casos la misma apariencia. La que nos
ocupa ahora es la primera, que es la concurrente, la cual se ejecuta si
cualquiera de los parmetros de entrada cambia. Debemos tener en cuenta
que las funciones que vayamos a usar deben ser visibles para el compilador, es
decir, que la librera que las contenga debe estar declarada correctamente. La
sintaxis general es la siguiente:

nombre_de_la_funcin (entradas, salidas);

Al subprograma llamado nombre_de_la_funcin se le introduce el objeto


entradas y sacamos el objeto salidas. Los objetos de entrada y salida no
tienen porque ser del mismo tipo, ya que dentro del subprograma puede haber
cambiado.

2.34 SENTENCIAS ESTRUCTURALES

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Las sentencias estructurales, son una forma ms de hacer llamadas a


subprogramas en VHDL. Con ellas se puede hacer uso de un componente o
circuito definido con anterioridad sin necesidad de incluirlo en la descripcin
que se est realizando; slo habr que hacer una llamada a dicho componente
para usarlo con las especificaciones propias del diseo actual. Se aprecia que
su operatividad es muy similar a la de una librera. El lenguaje nos proporciona
una serie de sentencias dedicadas a la descripcin de la estructura de
hardware que son concurrentes, y aparecen en la arquitectura llamando a un
modelo fuera de cualquier proceso. Estas son las sentencias estructurales,
cuyo principal elemento son los componentes con su funcin port map (mapa
de puertos).

Componentes: Para realizar la descripcin estructural de un sistema es


necesario conocer qu sistemas o componentes lo forman, indicando la
interconexiones entre ellos. Para operar de esta forma, VHDL ofrece los
componentes. Para ser usado, un componente debe estar declarado
previamente para poder hacer referencia al mismo. Si se declara un
componente en una arquitectura, podr ser usado en cualquier parte de la
misma, pero si a referencia se hace en un paquete, se podr lamar en todas las
arquitecturas que llamen a ese paquete.

El estilo estructural es fcilmente reconocible porque la operatividad del


programa no se puede leer del cdigo ya que est formado ntegramente por
componentes y las seales que les unen a otros. Es decir, est formado por
bloques o cajas negras a los cuales metemos informacin y sacamos las
salidas, las cuales podrn o no ir a otros bloques. Para esto debemos conocer
la operatividad de estos bloques, los cuales suelen estar en libreras. Para usar
las puertas que estn en el paquete gatespkg debemos primero invocar a la
librera ieee como est expuesto en la primera lnea de la entidad que debemos
usar.

Para usar el paquete (o sub-librera) gatespkg la llamaremos de la forma en


que est en la segunda lnea.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Como ejemplo se lista el cdigo de un multiplexor implementado por


descripcin estructural.

library ieee; Llamamos a la librera IEEE


use work.gatespkg.all; Llamamos a la librera que tiene
las puertas lgicas
entity multi is port(
a,b : in bit;
control : in bit;
enable : in bit;
c : out bit
);
end multi;

architecture archmul of multi is Cabecera del programa


signal aux0,aux1,aux2,aux3: bit; Declaracin de seales
begin Empieza el programa
puerta0:inv port map(control,aux0); Sentencia concurrente
puerta1:and2 port map(b,aux0,aux1); Sentencia concurrente
puerta2:and2 port map(a,control,aux2); Sentencia concurrente
puerta3:or2 port map(aux1,aux2,aux3); Sentencia concurrente
puerta4:and2 port map(enable,aux3,c); Sentencia concurrente
end archmul; Finalizamos el programa

La funcionalidad de este fragmento de cdigo se basa en los elementos "inv",


"and2" y "or2", que se encuentran en la librera gatespkg, que listamos a
continuacin:

package gatespkg is Incluimos el nombre del paquete


component and2 Empezamos el componente and2
port (
a,b : in bit;
q : out bit
);
end component;

component or2 Empezamos el componente or2


port (
a,b : in bit;
q : out bit
);
end component;

component inv Empezamos el componente inv


port (
a : in bit;
qn : out bit
);
end component;
Empezamos la entidad and2
use work.cypress.all;
entity and2 is
port (
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

a,b : in bit;
q : out bit
);
end and2;
architecture archand2 of and2 is
begin
q <= (a and b);
end archand2;

use work.cypress.all; Empezamos la entidad or2


entity or2 is
port (
a,b : in bit;
q : out bit
);
end or2;
architecture archor2 of or2 is
begin
q <= (a or b);
end archor2;

use work.cypress.all;
entity inv is Empezamos la entidad inv
port (
a : in bit;
qn : out bit
);
end inv;
architecture archinv of inv is
begin
qn <= not (a);
end archinv;

2.35 SUBPROGRAMAS

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

Los subprogramas constan de dos partes: la definicin del subprograma y la


definicin del cuerpo del subprograma. En la primera se define el nombre del
mismo y los parmetros que son introducidos en l. En la segunda se incluye el
algoritmo que va a realizar el subprograma.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Hay dos tipos de subprogramas, las funciones y los procedimientos, los


cuales tratamos en puntos separados a ste.

2.36 FUNCIONES

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

Una funcin est formada por:

Parte declarativa: En ella indicamos cuales son los parmetros que


introducimos en la funcin, la cual entender que son constantes, y de
modo in (por defecto). Podemos definir, adems, todas las estructuras
de datos que necesitemos (tipos, constantes, variables,...), pero slo
existirn cuando la funcin haya sido llamada y se crean e inicializan
cada vez que esto ocurra. Esta es la razn de no poder incluir seales
en la parte declarativa.

Parte de sentencias: En ella se transforman los objetos que


introducimos en la funcin para obtener la salida. En esta parte podremos
usar el valor de seales y variables externas, pero no podremos
modificarlas. Tampoco podremos usar la sentencia wait.

Como ejemplo crearemos una funcin que realiza una operacin tan sencilla
como asignar a la salida de la funcin, suma, la suma de dos nmeros, a y b.

La parte declarativa sera:

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


return std_logic_vector(3 downto 0);

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


funcin y entre parntesis los objetos de entrada con su tipo correspondiente.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Despus va la palabra return y el tipo del resultado de la funcin. Tiene el


mismo sentido que las entidades.

La parte de sentencias sera:

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


return std_logic_vector(3 downto 0) is
variable suma: std_logic_vector
begin
suma := a + b ;
return suma
end function sumar;

Las primeras lneas de la parte de sentencias coinciden con la parte


declarativa, slo que la primera lleva al final la palabra is, tal y como se aprecia
en el ejemplo. Seguido viene la declaracin de tipos, subtipos y variables, etc.
en la cual debe incluirse la variable que va a ser devuelta por la funcin, que en
este caso es suma. Entre la palabra reservada begin y end debemos incluir el
algoritmo que dar un valor a la variable que ser el resultado, y la sentencia
return suma. Esta ltima sentencia es imprescindible para definir la funcin, ya
que de no hacerlo sta se quedara sin resultado.

Para llamar a esta funcin deberemos escribir un cdigo parecido a este en


nuestro programa, teniendo en cuenta que la llamada a una funcin no es por
si misma una sentencia:

process
variable numero1, numero2: std_logic_vector(3 downto 0);
variable salida: std_logic_vector(3 downto 0);
begin
...
salida := sumar (numero1,numero2);
...
end process;

En esta ocasin hemos hecho la asignacin de las entradas por posicin: al


ejecutarse la funcin, el compilador usa el valor de numero1 como a, ya que
numero1 es el primer valor que se introduce en la funcin y a es el primero
incluido en la declaracin de la funcin. Lo mismo ocurre con numero2 y con b.
Tambin podamos haber hecho el asignamiento por nombre de cualquiera de
las siguientes formas, siendo ambas equivalentes:

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

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

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

Sea cual sea la forma en la cual asignemos las seales a la entrada del
subprograma, stas deben coincidir en el tipo, es decir, en el ejemplo no
podamos haber introducido en la funcin numero1 y numero2 si stos
hubieran sido del tipo entero o bit. De la misma forma la variable o la seal a la
cual asignamos el valor de la funcin debe coincidir con el tipo del objeto que
hemos especificado para la salida en la funcin. Es decir, no podemos asignar
a salida el valor de la funcin que hemos creado si es del tipo integer (por
ejemplo), ya que la salida de la funcin es suma que es del tipo
std_logic_vector.

2.37 PROCEDIMIENTOS

Los procedimientos estn destinados a realizar alteraciones en los datos a los


que tienen acceso, tanto internos como externos. De forma distinta a las
funciones, un procedimiento puede devolvernos ms de un valor e incluso
modificar alguno de los valores que le introducimos. Un procedimiento o
procedure consta al igual que las funciones de una parte declarativa y otra de
sentencias:

Parte declarativa: En ella indicamos cuales son los parmetros que


introducimos en la procedure, pudiendo ser de tres modos posibles: in,
out, e inout, y son por defecto del modo in. Si el modo de una seal de
entrada es in, no podremos modificar su valor, solamente usarlo, y a ojos
de la procedure ser una constante. Si el modo es out podrn ser
modificados en la parte de sentencias, pero al igual que pasa en una
entidad no podremos leer su valor. Solamente si es de modo inout
podremos leer su valor y adems modificarlo. Al igual que en las
funciones podremos declarar todos los tipos, constantes, variables, etc.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

pero slo existirn cuando se haga un llamamiento a la procedure y se


reinicializarn cada vez que se vuelva a llamar.

Parte de sentencias: En ella se modifican seales y variables tanto


internas como externas al procedure, pudiendo adems usar la sentencia
wait.

Para aclarar conceptos, se muestra el siguiente codigo, en el cual se consigue


el mismo resultado que en el. La parte declarativa es la siguiente:

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


suma: out std_logic_vector(3 downto 0));

Su estructura se asemeja a la de una entidad y empieza con la palabra


reservada procedure seguida del nombre que le vamos a asignar a la misma
(en este caso es sumar), y entre parntesis se declaran los objetos de entrada
como si de una entidad se tratase.

En los procedimientos no hace falta usar la palabra return, ya que se


especifica cul de las seales es de entrada y/o salida.

La parte de declaraciones sera como sigue:

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


suma: out std_logic_vector(3 downto 0));
begin
suma <= a + b ;
end procedure sumar;

La primera parte consiste en repetir la parte declarativa y seguidamente, el


subprograma con sus algoritmos correspondientes.

Una vez definido el procedimiento podremos usarlo en cualquier parte del


programa ya sea secuencial o combinacional como por ejemplo:

process
variable numero1, numero2: std_logic_vector(3 downto 0);
variable salida: std_logic_vector(3 downto 0);
begin
...
sumar (numero1,numero2,salida);
...
end process;

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Al igual que en una funcin, los tipos de los objetos de entrada y salida a una
funcin deben coincidir con los declarados en el procedimiento. Es importante
notar que una llamada a una procedure es una sentencia, no como una
llamada a una funcin.En este caso hemos hecho la asignacin por posicin,
ya que al no indicar nada, el compilador supone que queremos asignar el
primer objeto que hemos introducido en la funcin al primer objeto que
habamos declarado cuando creamos el procedimiento. Esto es numero1 se
corresponde a a, numero2 se corresponde con b, y as sucesivamente. Si
queremos asignarlos por nombre deberemos hacerlo como se describe a
continuacin:

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

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

Ambas formas de llamar al procedimiento son vlidas y


equivalentes

2.38 VHDL SINTETIZABLE

En un principo VHDL, al igual que los dems HDL'S, nacieron con el proposito
de facilitar la labor de los diseadores de circuitos electrnicos, agilizando su
diseo y haciendo ms flexible su posterior depuracin y mantenimiento. Por
este motivo se dot a VHDL con abundantes instrucciones ms orientadas a la
simulacin que a la implementacin fsica del diseo. Ello trajo consigo la
diferenciacion del VHDL sintetizable del simulable, siendo este ltimo el ms
extendido y el que cuenta con ms herramientas en los programas. Si
trabajamos con VHDL sintetizable, slo podremos hacer uso de un conjunto de
instrucciones vlidas.

El lenguaje nos permite describir circuitos complejos manejando todas las


sentencias y herramientas de las que dispone, pero no siempre se garantiza
que se pueda llegar a grabar en un dispositivo de lgica programable (PLD), ya
que ciertas instrucciones no tienen equivalente fsico.

Como conclusin, se puede decir que todo el cdigo de un programa en VHDL


es simulable, pero no siempre ser sintetizable.
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

CAPITULO III
PRACTICAS
DE
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

LABORATORIO

PRACTICA N 1

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

COMPUERTAS
LOGICAS

PRACTICA N 1 COMPUERTAS

INTRODUCCION

Compuerta AND:

Cada compuerta tiene dos variables de entrada designadas por A y B y una


salida binaria designada por x.

La compuerta AND produce la multiplicacin lgica AND: esto es: la salida es 1


si la entrada A y la entrada B estn ambas en el binario 1: de otra manera, la
salida es 0.

Estas condiciones tambin son especificadas en la tabla de verdad para la


compuerta AND. La tabla muestra que la salida x es 1 solamente cuando
ambas entradas A y B estn en 1.

El smbolo de operacin algebraico de la funcin AND es el mismo que el


smbolo de la multiplicacin de la aritmtica ordinaria.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Las compuertas AND pueden tener ms de dos


entradas y por definicin, la salida es 1 si todas las
entradas son 1.

Compuerta OR:

La compuerta OR produce la
funcin sumadora, esto es, la salida es 1 si la
entrada A o la entrada B o ambas entradas son 1; de
otra manera, la salida es 0.
El smbolo algebraico de la funcin OR (+), es igual
a la operacin de aritmtica de suma.

Las compuertas OR pueden tener ms de dos


entradas y por definicin la salida es 1 si cualquier entrada es 1.

Compuerta NOT:

El circuito NOT es un inversor que invierte el nivel lgico


de una seal binaria. Produce el NOT, o funcin
complementaria. El smbolo algebraico utilizado para el
complemento es una barra sobra el smbolo de la
variable binaria.

Si la variable binaria posee un valor 0, la compuerta


NOT cambia su estado al valor 1 y viceversa.

El crculo pequeo en la salida de un smbolo grfico de un inversor designa un


inversor lgico. Es decir cambia los valores binarios 1 a 0 y viceversa.

OBJETIVO

Realizar el cdigo VHDL de las compuertas bsicas para comprobar sus tablas
lgicas y entender el procedimiento de compilacin y simulacin del programa
XILINX y MODELSIM...

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

DESARROLLO

1.- En el men File crear un Nuevo Proyect

2.- Ingresar el Nombre del Proyecto y dar click en Next

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

3.- Seleccionar el dispositivo y disear las caractersticas del dispositivo as


como el simulador a utilizar en este caso se utilizara el Modelsim-SE VHDL y
dar click en Next.

4.- Dar click en el Boton New Source y aparecer la ventana siguiente

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

5.- Seleccionar VHDL Package para crear el archivo que contendr el cdigo
VHDL y darle un nombre al archivo VHDL de preferencia dejar en la misma
direccin C:\Xilinx\Nombre del proyecto y dar Click en Next

6.- Dar Click en Next

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

7.- En esta ventana podrs ver el Navegador de las especificaciones del


proyecto dar click en Finish

8.- Aqu aparecer un ejemplo de una estructura de cdigo VHDL en el cual lo


seleccionaras y lo borraras para ingresar tu estructura de cdigo VHDL

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

CODIGO VHDL
-- RESIDENCIAS 2009 ALI PEREZ GOMEZ

-- Ejemplo de compuerta AND de dos entradas

-- Bibliotecas (libreras) a utilizar

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

-- Declaracin de la entidad

entity compuerta_and is

-- Puertos (entradas y salidas)

port(

a : in std_logic; -- a y b son entradas

b : in std_logic;

c : out std_logic -- c salida, ltimo puerto declarado no lleva


;

);

end compuerta_and;

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN
-- Arquitectura, aqu se define el comportamiento

-- de la entidad (su funcionamiento).

architecture Behavioral of compuerta_and is

begin

-- c es el resultado de la operacin

-- AND entre a y b.

c <= a and b;

end Behavioral;

-- RESIDENCIAS ALI PEREZ GOMEZ 2009

-- Ejemplo de compuerta OR de dos entradas

-- Bibliotecas (libreras) a utilizar

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

-- Declaracin de la entidad

entity compuerta_or is

-- Puertos (entradas y salidas)

port(

a : in std_logic; -- a y b son entradas

b : in std_logic;

c : out std_logic -- c salida, ltimo puerto declarado no lleva


;

);

end compuerta_or;

-- Arquitectura, aqu se define el comportamiento

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN
-- de la entidad (su funcionamiento).

architecture Behavioral of compuerta_or is

begin

-- c es el resultado de la operacin OR entre

-- a y b.

c <= a or b;

end Behavioral;

9.-Despues de que hayas hecho el cdigo VHDL les das en el botn save para
despus proceder a compilar el programa

10.- Para compilar el programa solo debes ir al area de trabajo sources y


escoger la opcin Shyntesis Implementation que est en el men
desplegable sources for.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

11.- En el rea de trabajo Processes desplegar el men synthesize-XST y dar


click derecho a check syntax te aparecer un men contextual y escojeras la
opcin RUN en la zona de transcript, si tu cdigo esta correcto te aparece el
mensaje Process check syntax completed succesfully esto indicara que
tu cdigo estar correcto si no es as te marcara el error que tienes en tu
programa.

12.-Ahora para simular el cdigo correcto ir a la zona de trabajo sources y


escoger la opcin Behavioral Simulacion y en la zona de trabajo processes
desplegar el men ModelSim Simulador y dar click en Simulater Behavioral
Model

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

13.- Se Abrira el programa ModelSim

14.- Ya abierto el ModelSim entraremos al men Simulate opcion Run que


desplegara otro men el cual le daremos restart para que reinicie todos los
valores del ModelSim

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

15.-Tambien puede reiniciar todos los valores que desee desde la barra de
herramientas de simulacin, indicndose a continuacin en el cursor el botn
de reinicio general

16.- Darle click en la barra horizontal de desplazamiento hacia la izquierda


corriendo la escala a 0

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

17.-Posicionarse en la escala del primer cursor y darle click derecho en la


opcin Grid & Timeline Properties

18.- Moveremos para actualizar la escala de la opcin Display simulation time


in timeline area a Display grid periodo count (cycle count) para observar la
simulacin por ciclos.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

19.-Para cambiar los valores de las entradas (In) Dar click derecho sobre el
Objeto y en seleccionar del men contextual Force

20.-Asignar el valor de la variable (Value) y dar click en Ok y repetir para todas


las entradas.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

21.-Introduciremos un valor que equivale a un ciclo para que se muestre mejor


a la hora de la simulacin, en este caso usaremos 200 ps para que cada ciclo
sea cada segmento de la onda de la grafica.

22.- Si necesitas darle


algn formato lo puedes hacer
dndole doble click en el objeto de
la simulacin como se muestra en
el cursor de la figura siguiente y te aparecer una ventana donde podrs
ponerle color, nombre o cambiarle la base(octal, hexadecimal, ASCII..) etc.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

23.- Seleccionar en el men Simlate, el men Run y darle click en la opcin


Run 200 ps

24.-Este es un ejemplo del final de la simulacin demostrando la tabla and.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

PRACTICA 2
CIRCUITOS
COMBINACIONALES

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

TRAVES DE
DIAGRAMAS EN

XILINX

PRACTICA 2

CIRCUITOS COMBINACIONALES A TRAVES DE DIAGRAMAS


DE XILINX

INTRODUCCION

Un circuito combinacional, como su nombre lo sugiere es un circuito cuya


salida depende solamente de la "combinacin" de sus entradas en el
momento que se est realizando la medida en la salida.

Se denomina sistema combinacional o lgica combinacional a todo sistema


digital en el que sus salidas son funcin exclusiva del valor de sus entradas en
un momento dado, sin que intervengan en ningn caso estados anteriores de
las entradas o de las salidas. Las funciones (or,and,nan,xor) son booleanas
donde cada funcin se puede representar en una tabla de la verdad Por tanto,
carecen de memoria y de realimentacin.

En electrnica digital la lgica combinacional est formada por ecuaciones


simples a partir de las operaciones bsicas del lgebra de Boole. Entre los
circuitos combinacionales clsicos tenemos:

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Lgicos

Generador/Detector de paridad

Multiplexor y Demultiplexor

Codificador y Decodificador

Conversor de cdigo

Comparador

Aritmticos

Sumador

Aritmticos y lgicos

Unidad aritmtico lgica

Estos circuitos estn compuestos nicamente por puertas lgicas


interconectadas entre s.

OBJETIVO

Disear un circuito combinacional utilizando la herramienta de esquemas de


XILINX y simular dicha circuito combinacional con XILINX ISE.

DESARROLLO

1.-Abrir el programa xilinx

2.- crear un nuevo proyecto como se muestra en la figura 1

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

3.- Poner el nombre del proyecto por ejemplo funcin como se muestra en la
figura 2 y dar click en next

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

4.- se muestra a continuacin las familias y propiedades de los FPGA en este


caso tiene una Spartan2 y se simulara con ISE Simulador (VHDL/Verilog) como
se muestra en la figura 3

5.- Se da click en Next

6.- Se da click en Next

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

7.- Se da click en Finish

8.- se da doble click en la figura del FPGA en este caso xc2s15-6cs144

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

9.-Menu Proyect opcin New Source

10.- Seleccionar la opcin Schematic y darle un nombre al archivo por ejemplo


circuito y darle click en Next

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

11.-.Dar click en Finish

12 .- Del cuadro sources dar doble click en la palabra circuito.sch para que te
habr la zona de diseo esquemtico.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

13.- El cursor indica la zona de diseo esquemtico

14.- Para poner los simbolos estn en la zona de trabajo Source en la pestaa
de simbolos como muestra la figura

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

15.- declarando si las variables A,B,C,D,Z cuales son entradas, salidas o


bidireccionales

16.- menu tools opcion check schematics para checar si el circuito no tiene
ningun punto sin conectar

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

17.- En la siguiente figura podremos ver el cursor indicando que no hay ningn
error en el esquema

18.- En el Menu tools en la opcion Symbol Wizard seleccionar para ver el


esquema en un solo bloque funcional

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

19.- Cambiar a modo rectangle y click en siguiente

20.- Dar click en Next

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

21.- Dar click en Next

22.- Bloque funcional, dar click en finish

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

23.- Bloque funcional en modo diseo

24.-Para compilar el programa solo debes ir al rea de trabajo sources y


escoger la opcin Shyntesis Implementation que est en el men
desplegable sources for.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

25.- Dar click en el rea de trabajo Processes en el men compiler

26.-Nos vamos a la zona de trabajo Processes y desplegamos el men


Design Utilites la opcin Check Design Rules despus le damos a la opcin
Create New Source

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

27.-Le damos la opcin Test Bench Waveform y le damos un nombre al


archivo en este caso SimulacionDespues dar click en Next para empezar la
siulacion en el el simulador de Xilinx.

28.- Nos saldr la siguiente ventana donde nos saldr Next

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

29. Nos saldr el reporte de nuestro dispositivo y le daremos click en Next

30.- Nos saldr el reloj de xilinx le cambiamos a la opcin Combinacional (or


internal clock) y le daremos click en Next.

31.-. Ahora le cambiamos la escala de tiempo a 1700 dndole doble click donde
se encuentra el cursor nos saldr una ventana donde le pondremos 17 tiempos
o los que se necesiten

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

32.- Ahora le asignaremos las entradas A,B,C,D dndole click a lo verde para
un 1 y a lo blanco para un 0.

33.-En el la zona de trabajo Source cambiar a Behavioral, Ahora en la zona


de trabajo Processes desplegamos el men Xilinx ISE Simulador y para
simular le damos doble click en Simulater Behavioral Model y nos dara el
resultado de la simulacion

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

34.-Como algo extra veremos la asignacin de pines y para eso en la zona de


trabajo Source cambiar a Shintesys, Ahora en la zona de trabajo Processes
desplegamos el men User Constrains y damos click en la opcin Asign
Packege Pins y le daremos doble click

35.- Aqu veremos la asignacin de pines del Package Pins For Xc2s 15-
6cs144

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

36.- Aqu veremos la Aruitectura del disposittivo para el Xc2s 15-6cs144

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

PRACTICA N3

MULTIPLEXOR

PRACTICA N3 MULTIPLEXOR

INTRODUCCION

En electrnica digital, un multiplexor, es un circuito usado para el control de un


flujo de informacin que equivale a un conmutador. En su forma ms bsica se
compone de dos entradas de datos (A y B), una salida de datos y una entrada
de control. Cuando la entrada de control se pone a 0 lgico, la seal de datos A
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

es conectada a la salida; cuando la entrada de control se pone a 1 lgico, la


seal de datos B es la que se conecta a la salida...

El multiplexor es una aplicacin particular de los decodificadores, tal que existe


una entrada de habilitacin (EN) por cada puerta AND y al final se hace un OR
entre todas las salidas de las puertas AND.

La funcin de un multiplexor da lugar a diversas aplicaciones:

1. Selector de entradas.

2. Serializador: Convierte datos desde el formato paralelo al formato serie.

3. Transmisin multiplexada: Utilizando las mismas lneas de conexin, se


transmiten diferentes datos de distinta procedencia.

4. Realizacin de funciones lgicas: Utilizando inversores y conectando a 0


1 las entradas segn interese, se consigue disear funciones
complejas, de un modo ms compacto que con las tradicionales puertas
lgicas,

OBJETIVO

Realizar cdigo VHDL que represente la arquitectura de un multiplexor

CODIGO VHDL

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity multiplexor is port(

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

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN
enable : in bit;

control : in bit_vector(1 downto 0);

d : out bit_vector(3 downto 0)

);

end multiplexor;

architecture archimultiplexor of multiplexor is

begin

process( a , b , c , control , enable )

begin

if enable='1' then d<="1111";

elsif enable='0' then

case control is

when "00" => d <= a;

when "01" => d <= b;

when "10" => d <= c;

when others => d <= "1111";

end case;

end if;

end process;

end archimultiplexor;

1.- Aqu vemos que introducimos el cdigo VHDL y veremos las entradas y
salidas en bloque para eso le daremos en la zona de trabajo Sourcess le
daremos la opcin synteshys Ahora le daremos en la zona de trabajo
Processes desplegamos el men Syntesize-XST le damos en la opcin View
RTL Schematic

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

2.- Ahora veremos el smbolo con entradas y salidas

3.-Aqu Vemos los resultados del multiplexor

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

4.- Ahora Veremos el diagrama del dispositivo desde el ModelSim para eso
damos clcik derecho sobre el nombre multiplexor le damos en Add y luego en
la opcin Add to Wave

5.- Aqu vemos el dispositivo en ModelSim con sus entradas y salidas

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

PRACTICA N4
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

DEMULTIPLEXOR

INTRODUCCION

En electrnica digital, un demultiplexor es un circuito combinacional que tiene


una entrada de informacin de datos d y n entradas de control que sirven para
seleccionar una de las 2 n salidas, por la que ha de salir el dato que presente en
la entrada. Esto se consigue aplicando a las entrada de control la combinacin
binaria correspondiente a la salida que se desea seleccionar. Por ejemplo, si
queremos que la informacin que tenemos en la entrada d, salga por la salida
S4, en las entrada de control se ha de poner, de acuerdo con el peso de las
misma, el valor 100, que es el 4 en binario.

En el campo de las telecomunicaciones el demultiplexor es un dispositivo que


puede recibir a travs de un medio de transmisin compartido una seal
compleja multiplexada y separar las distintas seales integrantes de la misma
encaminndolas a las salidas correspondientes.

La seal compleja puede ser tanto analgica como digital y estar multiplexada
en cualquiera de las distintas formas posibles para cada una de ellas.

OBJETIVO
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Disear un cdigo VHDL de un demultiplexor para entender el demultiplexado


de los datos.

PRACTICA N4 DEMULTIPLEXOR

CODIGO VHDL architecture archdemul of demulti


is

library IEEE;
begin
use IEEE.STD_LOGIC_1164.ALL;
process (entra, control, enable)
entity demulti is port(

begin
entra: in bit_vector(7 downto
0); if enable='1' then
a<="11111111";
control: in bit_vector(1 downto
0); b<="11111111";

enable: in bit; c<=(others=>'1');

a,b,c,d: out bit_vector(7 downto d<=(others=>'1');


0)
elsif enable='0' then
);
case control is
end demulti;
when "00" => a <= entra;

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN
when "01" => b <= entra; end if;

when "10" => c <= entra; end process;

when others => d <= entra; end archdemul;

end case;

1.-.Aqui tenemos los resultados del decodificador

2.- Aqu tenemos el Dispositivo del decodificador

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

PRACTICA N5
CODIFICADOR 4 a 2

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

INTRODUCCION

Un codificador es un circuito combinacional con 2 N entradas y N salidas, cuya


misin es presentar en la salida el cdigo binario correspondiente a la entrada
activada.

Existen dos tipos fundamentales de codificadores: codificadores sin prioridad y


codificadores con prioridad. En el caso de codificadores sin prioridad, puede
darse el caso de salidas cuya entrada no pueda ser conocida: por ejemplo, la
salida 0 podra indicar que no hay ninguna entrada activada o que se ha
activado la entrada nmero 0. Adems, ciertas entradas pueden hacer que en
la salida se presente la suma lgica de dichas entradas, ocasionando mayor
confusin. Por ello, este tipo de codificadores es usado nicamente cuando el
rango de datos de entrada est correctamente acotado y su funcionamiento
garantizado.

OBJETIVO

Disear un cdigo VHDL de un codificador para entender su


procedimiento de conteo.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

DESARROLLO

PRACTICA N5 CODIFICADOR 4 a 2

CODIGO VHDL

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity coder is port(

dentro: in bit_vector(3 downto 0);

fuera : out bit_vector(1 downto 0);

error : out bit

);

end coder;

architecture archicoder of coder is

begin

process (dentro)

begin

case dentro is

when "0001" => fuera <= "00"; error <= '0';


Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN
when "0010" => fuera <= "01"; error <= '0';

when "0100" => fuera <= "10"; error <= '0';

when "1000" => fuera <= "11"; error <= '0';

when others => error <= '1';

end case;

end process;

end archicoder;

1.- Resultados del codificador

2.- Aqu se muestra el dispositivo del decodificador

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

PRACTICA N6
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

DECODIFICADOR

INTRODUCCION

Un decodificador o descodificador es un circuito combinacional, cuya funcin


es inversa a la del codificador, esto es, convierte un cdigo binario de entrada
(natural, BCD, etc.) de N bits de entrada y M lneas de salida (N puede ser
cualquier entero y M es un entero menor o igual a 2 N), tales que cada lnea de
salida ser activada para una sola de las combinaciones posibles de entrada.

Estos circuitos, normalmente, se suelen encontrar como decodificador /


demultiplexor. Esto es debido a que un demultiplexor puede comportarse
como un decodificador.

OBJETIVO

Disear un cdigo VHDL de un circuito decodificador para entender su


procedimiento de decodificacin

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

DESARROLLO

PRACTICA N6 DECODIFICADOR

CODIGO VHDL begin

case bcd is

library ieee; when "0000" => LED <=


"1111110";
use ieee.std_logic_1164.all;
when "0001" => LED <=
entity convertidor is "1100000";

port( when "0010" => LED <=


"1011011";
bcd: in bit_vector(3 downto 0);
when "0011" => LED <=
"1110011";
led: out bit_vector(6 downto 0)
when "0100" => LED <=
); "1100101";

end convertidor; when "0101" => LED <=


"0110111";
architecture archiconv of
convertidor is when "0110" => LED <=
"0111111";
begin
when "0111" => LED <=
conv: process (bcd) "1100010";

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN
when "1000" => LED <= end case;
"1111111";
end process conv;
when "1001" => LED <=
"1110111"; end archiconv;

when others => LED <=


"0000000"; -- si no se introduce
BCD no se enciende ningn led

1.- Aqu tenemos la simulacin del decodificador

2.- Diagrama del dispositivo Decodificador


Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

PRACTICA N7

COMPARADOR
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

INTRODUCCION

En un circuito electrnico, se llama comparador a un amplificador operacional


en lazo abierto (sin realimentacin entre su salida y su entrada) y suele usarse
para comparar una tensin variable con otra tensin fija que se utiliza como
referencia.

Como todo amplificador operacional, un comparador estar alimentado por dos


fuentes de corriente contnua (+Vcc, -Vcc). El comparador hace que, si la
tensin de entrada en el borne positivo (en el dibujo, V1) es mayor que la
tensin conectada al borne negativo (en el dibujo, V2), la salida (Vout en el
dibujo) ser igual a +Vcc. En caso contrario, la salida tendr una tensin -Vcc.

OBJETIVO

Disear un cdigo VHDL de un circuito comparador para entender el proceso


de comparacin.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

PRACTICA N7 COMPARADOR

CODIGO VHDL begin

library ieee; process (a,b)

use ieee.std_logic_1164.all; begin

use ieee.std_logic_arith.all; if a > b then mayor <= '1';

use work.all; menor <= '0';

igual <= '0';

entity compara is port( elsif a < b then mayor <= '0';

a,b: in std_logic_vector(1 downto menor <= '1';


0);
igual <= '0';
mayor: out std_logic;
elsif a = b then mayor <= '0';
menor: out std_logic;
menor <= '0';
igual: out std_logic
igual <= '1';
);
end if;
end compara;
end process;

end archicompara;
architecture archicompara of
compara is

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

1.- Aqu tenemos la simulacin del Comparador

2.- Aqu tenemos el diagrama del dispositivo comparador

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

PRACTICA N8

SUMADOR

DE
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

4 BITS

INTRODUCCION

En electrnica un sumador es un circuito lgico que calcula la operacin suma.


En los computadores modernos se encuentra en lo que se denomina Unidad
aritmtico lgica (ALU). Generalmente realizan las operaciones aritmticas en
cdigo binario decimal o BCD exceso 3, por regla general los sumadores
emplean el sistema binario. En los casos en los que se est empleando un
complemento a dos para representar nmeros negativos el sumador se
convertir en un sumador-substractor (Adder-subtracter).

OBJETIVO

Disear un cdigo VHDL de un circuito sumador para verificar la suma


algebraica de este circuito

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

DESARROLLO

PRACTICA N8 SUMADOR DE 4 BITS

CODIGO VHDL

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

use work.all;

entity sumador is port(

a,b: in std_logic_vector(3 downto 0);

cin: in std_logic;

sum: out std_logic_vector(4 downto 0)

);

end sumador;

architecture archisumador of sumador is

begin

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN
process (a,b,cin)

variable aux:std_logic_vector(4 downto 0);

begin

aux:=('0' & a) + ('0' & b);

if cin='1' then aux:=aux+1;

elsif cin='0' then null; end if;

sum<=aux;

end process;

end archisumador;

1.- Aqu tenemos la simulacin del sumador

2.- Aqu tenemos el dispositivo esquematico del sumador

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

PRACTICA N 9
SUMADOR-RESTADOR

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

INTRODUCCION

Las sumas no implican mayor problema, ya que los sistemas electrnicos


operan de la misma manera que un ser humano, por ejemplo para sumar los
nmeros (decimales) de un solo dgito, 8 y 4 se tendr como resultado un 2 y
como acarreo un 1, para formar el resultado cuyo valor es el 12.

Para la operacin de las restas, todos estamos acostumbrados desde los


estudios primarios a utilizar el concepto de prstamo, el cual en los sistemas
electrnicos es muy difcil llevarlo a cabo, por lo que la operacin aritmtica de
la resta se implanta mediante un mtodo algo ms complicado para el
razonamiento y consiste en realizar un complemento al sustraendo para
posteriormente utilizar la operacin de la suma como estamos habitualmente a
realizarla, y de esta manera obtener el resultado de la resta

El medio para escoger la operacin aritmtica ya sea de la suma o la resta de


los operandos 1 y 2, es por la interaccin del bit de control, el cual tiene que
fijarse en 0 lgico para que se realice una suma entre los operandos 1 y 2, por
otra parte si el bit de control se ubica en la posicin de 1 lgico, el ejercicio
resultante entre los operandos 1 y 2 ser la de una resta.

OBJETIVO

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Disear un cdigo VHDL de un sumador - restador para verificar su


funcionamiento.

DESARROLLO

PRACTICA N 9 SUMADOR-RESTADOR

CODIGO VHDL

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use work.all;

entity resta is port (

a,b: in std_logic_vector(3 downto 0);

sr: in std_logic;

c: out std_logic_vector(3 downto 0)

end resta;

architecture archiresta of resta is

signal aux : std_logic_vector(3 downto 0);

begin
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN
process (a,b,sr,aux)

begin

if sr='0' then aux<=b;

elsif sr='1' then aux<=not(b);

end if;

end process;

c<=a+aux+("000"&sr);

end archiresta;

1.- Simulacion del Sumador-Restador

2.- Diagrama del Dispositivo Sumador-Restador

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

PRACTICA N10

CONTADOR

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

INTRODUCCION

En electrnica digital, un contador (counter en ingls) es un circuito secuencial


construido a partir de biestables y puertas lgicas capaz de realizar el cmputo
de los impulsos que recibe en la entrada destinada a tal efecto, almacenar
datos o actuar como divisor de frecuencia. Habitualmente, el cmputo se
realiza en un cdigo binario, que con frecuencia ser el binario natural o el BCD
natural (contador de dcadas).

Clasificacin de los contadores

Segn la forma en que conmutan los biestables, podemos hablar de


contadores sncronos (todos los biestables conmutan a la vez, con una
seal de reloj comn) o asncronos (el reloj no es comn y los biestables
conmutan uno tras otro).

Segn el sentido de la cuenta, se distinguen en ascendentes,


descendentes y UP-DOWN (ascendentes o descendentes segn la
seal de control).

Segn la cantidad de nmeros que pueden contar, se puede hablar de


contadores binarios de n bits (cuentan todos los nmeros posibles de n

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

bits, desde 0 hasta 2n 1), contadores BCD (cuentan del 0 al 9) y


contadores Mdulo N (cuentan desde el 0 hasta el N-1)

Tipos de contadores
Existen diversos tipos de contadores:

Contadores de rizado.

Contadores paralelos.

Contadores de rizado mod-6.

Contador Johnson. Activa una sola salida entre varias. En respuesta al


pulso de conteo, la salida siguiente pasa a ser la activa. No se emplea
un contador binario seguido de un decodificador debido a que, al
conmutar entre dos estados, podra producir pulsos espreos en otras
salidas. El 4017 es un contador johnson de 10 estados.

Contador en anillo. Est formado por un conjunto de biestables


conectados como un registro de desplazamiento, con un lazo de
realimentacin que se obtiene uniendo las salidas del ltimo biestable
con la entrada del primero. El inconveniente que presentan es que slo
pueden contar 'n' impulsos (siendo log2m y m los bits del resultado).

Se utilizan para llevar el control del nmero de ocasiones en que se realiza


una operacin o se cumple una condicin. Los incrementos son generalmente
de uno en uno.

OBJETIVO

Disear cdigo VHDL de un contador y verificar su procedimiento de conteo


ascendente-decendente

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

DESARROLLO

PRACTICA N10 CONTADOR

library ieee; end contador;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all; architecture archicontador of


contador is
use ieee.std_logic_unsigned.all;
begin
use work.all;
process (clk,reset)

begin
entity contador is port(
if reset = '1' then
clk, load, reset,arriba:in std_logic;
conta <= "0000";
data: in std_logic_vector(3
downto 0); elsif (clk'event and clk= '1') then

conta:buffer std_logic_vector(3 if load = '1' then


downto 0)
conta <= data;
);
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN
elsif arriba = '1' then end if;

conta <= conta + 1; end process;

else conta <= conta - 1; end archicontador;

end if;

1.- Para esta practica vamos a necesitar un reloj, en el cdigo hat una parte
(clk'event and clk= '1') clk=1 es activar el reloj y clkvent es el reloj de
ModelSim para eso en el Objeto clk le damos click derecho nos saldr la
siguiente ventana donde podremos asignar el periodo lo dejaremos al
100,daremos OK

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

2.-Ahora activaremos el reloj del contador

3.- Ahora activaremos las cada una de las entradas escogiendo arriba o abajo
si quiere que cuente ascendente o ascendente

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

PRACTICA N11
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

FLIP-FLOP RS

INTRODUCCION

Un biestable, tambin llamado bscula (flip-flop en ingls), es un multivibrador


capaz de permanecer en un estado determinado o en el contrario durante un
tiempo indefinido. Esta caracterstica es ampliamente utilizada en electrnica
digital para memorizar informacin. El paso de un estado a otro se realiza
variando sus entradas. Dependiendo del tipo de dichas entradas los biestables
se dividen en:

Asncronos: slo tienen entradas de control. El ms empleado es el


biestable RS.

Sncronos: adems de las entradas de control posee una entrada de


sincronismo o de reloj. Si las entradas de control dependen de la de
sincronismo se denominan sncronas y en caso contrario asncronas.
Por lo general, las entradas de control asncronas prevalecen sobre las
sncronas.

La entrada de sincronismo puede ser activada por nivel (alto o bajo) o por
flanco (de subida o de bajada). Dentro de los biestables sncronos activados

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

por nivel estn los tipos RS y D, y dentro de los activos por flancos los tipos JK,
T y D.

OBJETIVO

Disear cdigo VHDL de un FLIP-FLOP para ver el funcionamiento de estos


mismos.

DESARROLLO

PRACTICA N11 FLIP-FLOP RS

CODIGO VHDL

library ieee;

use ieee.std_logic_1164.all;

entity flipfloRS is port (

r,s,clk: in std_logic;

q: buffer std_logic;

notq: out std_logic

);

end flipfloRS;

architecture archiflipfloRS of flipfloRS is

begin

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN
process (clk)

begin

if (clk'event and clk='1') then

if (r='1')and(s='0') then q <= '0';

elsif (r='0')and(s='1')then q <='1';

end if;

end if;

end process;

notq <= not q;

end archiflipfloRS;

1.- Aqui se muestra la activacion del reloj

2.-Aqu tenemos la simulacin del Flip-Flop RS

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

PRACTICA N12

ALU 4 BITS
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

INTRODUCCION

En computacin, la Unidad Lgica Aritmtica (ULA), o Arithmetic Logic Unit


(ALU), es un circuito digital que calcula operaciones aritmticas (como suma,
resta, multiplicacin, etc.) y operaciones lgicas (como igual a, menor que,
mayor que, etc.), entre dos nmeros.

Muchos tipos de circuitos electrnicos necesitan realizar algn tipo de


operacin aritmtica, as que incluso el circuito dentro de un reloj digital tendr
una ALU minscula que se mantiene sumando 1 al tiempo actual, y se
mantiene comprobando si debe activar el pitido del temporizador, etc.

Por mucho, los ms complejos circuitos electrnicos son los que estn
construidos dentro de los chips de microprocesadores modernos como el Intel
Core Duo. Por lo tanto, estos procesadores tienen dentro de ellos un ALU muy
complejo y poderoso. De hecho, un microprocesador moderno (y los
mainframes) pueden tener mltiples ncleos, cada ncleo con mltiples
unidades de ejecucin, cada una de ellas con mltiples ALU.

Muchos otros circuitos pueden contener en el interior ALU: GPU como los que
estn en las tarjetas grficas NVIDIA y ATI, FPU como el viejo coprocesador
numrico 80387, y procesadores digitales de seales como los que se
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

encuentran en tarjetas de sonido Sound Blaster, lectoras de CD y las TV de alta


definicin. Todos stos tienen adentro varias ALU poderosas y complejas.

OBJETIVO

Disear en cdigo VHDL una ALU y verificar su funcionamiento lgico y


aritmtico

DESARROLLO

PRACTICA N12 ALU

library ieee; begin

use ieee.std_logic_1164.all; case sel is

use ieee.std_logic_arith.all; when "0000"=>c<= (a);

use ieee.std_logic_unsigned.all; when "0001"=>c<= (b);

when "0010"=>c<= (a + b);

entity alu is port( when "0011"=>c<= (a - b);

a,b: in std_logic_vector(4 downto when "0100"=>c<= (a xor b);


0);
when "0101"=>c<= (a and b);
sel: in std_logic_vector(3 downto
0); when "1000"=>c<= (a or b);

c:out std_logic_vector(4 downto when "1001"=>c<= (a nor b);


0));
when "1010"=>c<= not(b);
end alu;
when "1011"=>c<= not(a and b);

when "1100"=>c<= (a+b)+b;


architecture logica of alu is
when others=>c<="00000";
begin
end case;
alu: process(a,b,sel)
Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN
end process alu; end logica;

1.-Aqui vemos el Diagrama del dispositivo de la ALU

2.- Aqui vemos la simulacion de la ALU

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

CONCLUSIONES
VHDL se muestra especialmente til en las primeras etapas del diseo, a la
hora de elegir arquitecturas, particiones del circuito, tipos de lgica, etc y para
la realizacin de simulaciones a nivel funcional. Aunque es de hacer notar que
las descripciones apropiadas para simulacin no siempre son aptas para la
sntesis.

El trabajo trata de resaltar la importancia del mtodo, que en proyectos


pequeos no se aprecia pero a medida que se incrementa la complejidad del
diseo va adquiriendo mas importancia.

Una de las dificultades que se atribuyen al diseo con VHDL es la gran


cantidad de arquitecturas posibles para un mismo circuito. El lenguaje no se
halla orientado hacia ningn mtodo en especial, ni a un tipo de lgica ni a una
tecnologa dada sino que deja esas elecciones a cargo de quien disea, y en
gran medida el xito del diseo depender de las elecciones que este realice.

A grandes rasgos en la siguiente figura veremos el diagrama de flujo de un


FPGA

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

Diagrama de flujo del desarrollo de un diseo para FPGAs

RECOMENDACIONES

IMPLEMENTACIN Y DESCARGA EN PLACA.

Cuando el comportamiento de un diseo ha sido validado con la simulacin el


siguiente paso es el de la implementacin. Para ello se utilizar la herramienta
ISE de Xilinx.
Mediante esta herramienta, se generar el fichero binario para descargar en
placa (*.bit) as como dos ficheros para poder realizar la simulacin temporal:
*.vhd, *.sdf. El primero de ellos es un fichero derivado del diseo realizado, en
el que se incluyen todos los niveles jerrquicos que se pudiera tener as como
componentes ya propios de la tecnologa Xilinx. El segundo de ellos contiene
informacin acerca de los retardos internos de las seales del diseo realizado.

En los Anexo podremos ver algunas imagines tomadas del manual del Spartan
3 Starter Kit donde podremos encontrar en este KIT todas las especificaciones
de la tarjeta y como esta formada cada parte de ella.

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

ANEXOS

ANEXO-1 Spartan 3 Starter Kit

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

ANEXO-2 Targeta Spartan 3

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

ANEXO-3 Diagrama Bloques de la targeta Spartan 3 Starter Kit

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

ANEXO-4 Numeracion de las Partes de la targeta Spartan 3 que vienen


detalladas en el manual esta misma.

REFERENCIAS BIBLIOGRAFICAS

Pgina
INSTITUTO TECNOLOGICO DE MINATITLAN

VHDL

Programming by Example

Douglas L.Perry

Mc Graw Hill

VHDL

El arte de programar sistemas digitales

David g. Maxinez y Jessica Alcal

Editorial CECSA

Sintesis y Descripcion de Circuitos Digitales utilizando VHDL


Francisco Javier Torres Valle
Universidad utonoma de Guadalajara

Kevin Skahill (Cypress Semiconductor)


VHDL for PROGRAMMABLE LOGIC
Addison Wesley
Massachusetts - Menlo Park, California - New York - Harlow, England, etc.

www.xilinx.com

Pgina

Potrebbero piacerti anche