aplicaciones vhdl
DESCRIPTION
programacion con VDL que la verdad no me acuerdo para que sirve.TRANSCRIPT
-
INSTITUTO DE ESTUDIOS
SUPERIORES DE TAMAULIPAS
DIVISIN DE CIENCIAS EXACTAS
DESARROLLO DE APLICACIONES DIDCTICAS DEL VHDL
TRABAJO DE INVESTIGACION
DEL SEMINARIO DE INVESTIGACIN
QUE PARA OBTENER EL TTULO DE:
INGENIERO EN ELECTRONICA
PRESENTAN:
ARMANDO FERNNDEZ SAUCEDA FLOR REBECA OCHOA CABALLERO
ALTAMIRA, TAM. MARZO DE 2006
-
DEDICATORIA
A nuestros padres, que gracias a su esfuerzo permitieron hacer nuestros sueos realidad.
Flor y Armando
-
i
Pg.CAPITULO 1. INTRODUCCIN 11.1 Antecedentes 11.2 Definicin del Problema 21.3 Objetivos 31.3.1 Objetivo General 31.3.2 Objetivos Particulares 31.4 Justificaciones 41.5 Alcances y Limitaciones 4CAPITULO 2. MARCO DE REFERENCIA 52.1 Historia del VHDL 52.2 Lenguajes de Descripcin de Hardware 62.3 VHDL ANTECEDENTES 92.3.1 Diseo Bottom-Up 102.3.2 Diseo top-down 112.3.3 Dispositivos Lgicos Programables 142.3.3.1 CONCEPTOS FUNDAMENTALES 142.3.3.2 CPLD 162.3.4 FPGA 242.3.4.1 CELDAS LGICAS 242.4 Elementos sintcticos del VHDL 272.4.1 Antecedentes 272.4.2 Elementos sintcticos del VHDL: 282.4.2.1 Comentarios: 282.4.2.2 identificadores: 282.4.2.3 Nmeros 282.4.2.4 Caracteres 282.4.2.5 Cadenas 282.4.2.6 Cadenas de bits 282.4.3 Operadores y expresiones 292.4.3.1 Operadores varios 292.4.3.2 Operadores aritmticos 292.4.3.3 Operadores de desplazamiento 302.4.3.4 Operadores relacionales 312.4.3.5 Operadores lgicos 312.4.3.6 Precedencia de operadores y sobrecarga
32
2.4.4 Tipos de datos 322.4.4.1 Tipos escalares 322.4.4.2 Tipos compuesto 342.4.4.3 Subtipos de datos 362.4.5 Atributos 372.4.6 Declaracin de constantes, variables y seales
38
2.4.6.1 Constantes. 39
-
ii
2.4.6.2 Variables. 392.4.6.3 Seales 402.4.6.4 Constantes, seales y variables 402.4.7 Declaracin de entidad y arquitectura 412.4.7.1 Declaracin de entidad 412.4.7.2 Declaracin de arquitectura. 442.5 Ejecucin concurrente 462.5.1 Estructuras de la ejecucin concurrente RTL
46
2.5.1.1 Asignacin condicional: WHEN...ELSE 462.5.1.2 Asignacin con seleccin: 47WITH...SELECT...WHEN 2.5.1.3 Bloque concurrente: BLOCK 47CAPITULO 3 51Prctica 1 VHDL: Sumador/Restador 52Prctica 2 VHDL: Contador Descendente 53Prctica 3 VHDL: Contador Ascendente / Descendente
53
Prctica 4 VHDL: Ripple-Carry Adder 53CAPITULO 4. RESULTADOS 54Prctica 1 VHDL: Sumador/Restador 54Prctica 2 VHDL: Contador Descendente 57Prctica 3 VHDL: Contador Ascendente / Descendente
59
Prctica 4 VHDL: Ripple-Carry Adder 62CONCLUSIONES 66BIBLIOGRAFIA 69
-
CAPITULO 1
INTRODUCCIN
Hoy en da, los sistemas electrnicos son cada vez ms sofisticados, como es el
caso de: telfonos celulares, estaciones de juego interactivo, computadoras
personales, sistemas de posicionamiento global. Su comn denominador es el
tamao de dimensiones tan pequeas. Estos cambios son posibles gracias al
desarrollo de la microelectrnica.
El diseo de circuitos integrados se da orientado a una solucin y/o aplicacin
especifica, la innovadora propuesta que explica esta tesis es la que sugiere la
utilizacin de celdas programables preestablecidas e insertadas dentro de un
Circuito Integrado (CI). Con base en lo anterior surgen los Dispositivos Lgicos
Programables (PLD), cuyo nivel de integracin y densidad ha venido
evolucionando con el paso del tiempo.
1.1 Antecedentes
El proceso de fabricacin de un circuito integrado tiene la limitante de que es
complejo y por tanto costoso, para reducir costos, el fabricante construye el CI
en gran volumen segn la lgica que el diseador solicita. Lo anterior genera un
1
-
problema y es el de que muchas veces alguien esta tratando de desarrollar o
innovar un CI pero resulta que debido a las limitantes antes descritas no puede
verlo trabajar de manera fsica ya que tendra que mandarlo pedir en grandes
volmenes. Es por esto que la tecnologa llega a este punto en el que se vuelve
posible disear, implementar y probar inmediatamente y a un costo por mucho
inferior los circuitos integrados que se requieran.
1.2 Definicin del Problema
La tecnologa avanza muy rpido y en los ltimos 50 aos los avances se dan de
manera desmesurada, hablamos de que en 1950 apenas se establecan los
cimientos de los circuitos integrados y hoy en da ya cada persona con los
conocimientos requeridos puede crear sus propios sistemas digitales
directamente sobre un Circuito Integrado programado por el mismo diseador y
de manera inmediata sin compaas intermediarias que tengan que manufacturar
un gran volumen de piezas.
En la actualidad es indispensable que el Ingeniero en Electrnica conozca la
tecnologa que sugiere que se puedan programar celdas preestablecidas e
insertadas dentro de un circuito integrado. Especficamente los Arreglos de
Compuertas Programables en Campo (los FPGA). Cuyo nivel de densidad de
integracin ha venido evolucionando y dada su conectividad interna sobre cada
una de sus celdas han hecho posible el desarrollo de Circuitos Integrados de
aplicacin especfica de una forma mucho ms fcil y econmico, para beneficio
de los ingenieros encargados de integrar sistemas.
2
-
El Instituto de Estudios Superiores de Tamaulipas (IEST) no tiene considerado
en su plan de estudios 2001 de la carrera de Ingeniera en Electrnica el ver este
tipo de circuitos integrados y tampoco el dar a conocer el lenguaje de descripcin
en hardware (VHDL).
El estudiante necesita una gua y la escuela una gua introductoria para que este
tema se considere como una materia a impartirse en la escuela ya sea en una
nueva revisin del plan de Ingeniera Electrnica.
1.3 Objetivos
1.3.1 Objetivo General
Desarrollar una gua, la cual explicar de manera prctica el lenguaje de
programacin en hardware (VHDL) y un breve manual de prcticas para que el
alumno de Ingeniera en Electrnica del Instituto de Estudios Superiores de
Tamaulipas cuente con un sustento terico a partir del cual logre comprender
este tema en base a posteriores estudios que el mismo realice .
1.3.2 Objetivos Particulares
Lograr una base terica y desarrollar una gua terica.
Desarrollar aplicaciones prcticas dirigidas al alumno, en un formato ameno y en
lenguaje comn.
3
-
1.4 Justificacin
El estudiante de la carrera de Ingeniera en Electrnica tiene la necesidad de
estudiar y asimilar el lenguaje de programacin en hardware (VHDL) ya que es
un tema de lo ms actual y relevante.
Esta investigacin busca motivar al alumno a aplicar este lenguaje y que de la
misma manera lo aqu aprendido sea aplicado en materias ya establecidas para
que el alumno le de un carcter mas profesional a sus trabajos.
1.5 Alcances y Limitaciones
Los alcances del manual de lenguaje de programacin en hardware (VHDL) son
los siguientes: el alumno del Instituto de Estudios Superiores de Tamaulipas
tendr una idea mucho ms clara, de lo que se trata el lenguaje de programacin
en hardware. Adems de que se espera motivar a la institucin a incluir esta
materia en el programa de Ingeniera en Electrnica. Uno de los alcances ms
importantes es que se logre motivar la curiosidad tanto de profesores como
alumnos, para que se desarrollen conocimientos sobre VHDL.
Las limitaciones tambin existen como en toda investigacin las cuales en este
caso son: se debe de empezar desde cero con los temas de VHDL, por lo tanto
este trabajo solo ser una introduccin a lo que representa el lenguaje de
programacin en hardware VHDL. Tambin una limitante es el que las fuentes
de informacin son pocas en nuestro pas y bsicamente tanto la literatura como
el software tienen que ser mandados a traer del extranjero.
4
-
CAPITULO 2
MARCO DE REFERENCIA
2.1 Historia del VHDL
El VHDL se comenz a desarrollar en 1980 por el departamento de defensa de
los Estados Unidos. Este naci debido a las necesidades presentadas de
estandarizar un lenguaje con amplias capacidades, que funcionar igual en
cualquier simulador, y que fuera independiente de la tecnologa, de una empresa
y de la metodologa de diseo.
Antes de este estndar, el disear resultaba costoso y difcil, ya que se
encontraban gran cantidad de simuladores, lenguajes y diversos tipos de
herramientas, dependiendo de las tecnologas, de las empresas, y cualquier
cambio en el diseo, llevaba a grandes inversiones, y retardos de tiempo.
As se decidi crear un estndar para satisfacer estas necesidades y se
comenz la creacin del VHDL. En el proceso de creacin del estndar,
participaron varias industrias. La base de VHDL fue desarrollada por
5
-
Intermetrics, IBM y Texas Instruments quienes ganaron el contrato para
desarrollarlo. Este desarrollo se present entre los aos de 1983 y 1985. Fue
publicado como: VHDL versin 7.2.
En 1986 el departamento de defensa transfiere los derechos al IEEE, para que
se aceptara fcilmente por la industria. Con algunas modificaciones fue
publicado en 1987 por la IEEE como: IEEE Standard 1076-1987
En 1988 es aprobado por la ANSI. Luego fue revisada en 1993, y en 1994 se
public la ltima versin como: IEEE Standard 1076-1993
Una de las aplicaciones iniciales ms complejas utilizando VHDL desarrolladas
por el gobierno de los Estados Unidos fue el diseo del avin de combate F22.
En este varios contratistas realizaron subsistemas mediante el uso del estndar,
los subsistemas electrnicos fueron de fcil acople debido a que se utiliz VHDL
en la descripcin de todos los dispositivos electrnicos del proyecto.
2.2 Lenguajes de Descripcin de Hardware
Los lenguajes de programacin desde su creacin hace 50 aos hasta el
presente han evolucionado y se han venido formando segn las aplicaciones
que soportan tales como:
Aplicaciones matemticas Basados en lgica
6
-
Funcionales basados en matemticas Orientados a objetos
Existen otros tipos de lenguajes de programacin diferente a los de software y
son los Lenguajes de Descripcin de Hardware (HDL), los cuales son una forma
de notacin para describir la estructura y el comportamiento de un circuito
elctrico.
Los HDLs son estndares, para que no dependan de una familia, ni de una
compaa.
Los HDLs son utilizados para describir el hardware desde diferentes niveles de
abstraccin.
En alto nivel se describe el comportamiento del circuito.
En nivel bajo se describe el circuito mediante sus componentes internos e
interconexiones, por ejemplo mediante la conformacin de compuertas y sus
uniones para crear una funcin lgica que determine una aplicacin.
Los HDLs permiten utilizar mdulos ya creados, por ejemplo para realizar
conexiones en cascada.
Los HDLs permiten la sntesis. En esta etapa se traduce el programa diseado
en una descripcin mediante ecuaciones booleanas (compuertas), para que una
interfaz pueda configurar el Hardware y as se pueda construir un circuito
integrado.
Algunos de los HDLs ms conocidos, y que son estndares, son:
Abel HDL VHDL
7
-
Verilog HDL
Ventajas de los HDLs que presentan en el proceso de diseo son:
Los lenguajes Verilog y especialmente VHDL son lenguajes de dominio pblico,
que no estn sometidos a ninguna patente ni firma comercial. Estn
especificados y mantenidos por la IEEE, quien garantiza una continuidad, mejora
y soporte documental.
Los HDLs, al ser lenguajes de alto nivel, son de fcil interpretacin para las
personas como para los equipos informticos, por ello se utilizan tanto en los
procesos especficos de diseo (modelado, simulacin, sntesis y verificacin),
como en los intercambios de modelos, documentacin, y mantenimiento de los
diseos entre distintos equipos de trabajo.
Permiten descripciones con diferentes niveles de abstraccin, pudindose
combinar mdulos funcionales con mdulos a nivel de puertas. Esto posibilita
diseos independientes de otros mdulos componentes, pudindose distribuir
diferentes tareas entre distintos equipos, todo ello mediante un lenguaje comn
de simulacin, sntesis y verificacin.
Proporciona independencia en la metodologa utilizada, la tecnologa y las
herramientas de diseo. Esta independencia permite la reutilizacin del cdigo.
Una descripcin VHDL, pensada en principio para una determinada tecnologa.
(TTL, CMOS, etc.) y para una determinada implementacin (ASIC, FPGA, etc.)
se puede con facilidad utilizar en otros diseos con tecnologas,
implementaciones y herramientas CAD diferentes, o el mismo diseo puede ser
modificado, adaptndolo o mejorndolo con nuevas tecnologas.
8
-
La utilizacin de un lenguaje comn en todo el proceso de diseo facilita su
gestin y reduce los formatos, convertidores de formatos y herramientas de
diseo.
Los HDLs son los lenguajes estndar con una sintaxis y semntica definida para
el modelado en simulacin, lo cual permite la portabilidad entre las diferentes
herramientas CAD. Esta portabilidad no se cumple en la sintaxis ni en la
verificacin, por no estar especificada la semntica de estos procesos en el
IEEE, existiendo herramientas CAD, que segn la empresa que las ha
desarrollado, presentan diferencias de interpretacin en el diseo de sntesis.
Algunas de las limitaciones que presentan los HDLs son:
Son lenguajes generales (en especial el VHDL) que han sido desarrollados por
universidades y empresas mediante acuerdos que satisfacen diversos y variados
aspectos y por lo tanto suelen ser lenguajes complejos.
La evolucin de los lenguajes es lenta. En VHDL se producen revisiones
importantes cada cinco o ms aos en la comisin correspondiente del IEEE.
La carencia de semntica formal para la sntesis complica la portabilidad de los
diseos entre los diferentes entornos de sntesis y verificacin.
2.3 VHDL ANTECEDENTES
Los circuitos de escala de integracin media y alta (MSI y LSI respectivamente)
se disearon mediante la realizacin de un prototipo formado por mdulos ms
sencillos y la comprobacin de su funcionamiento antes de proceder a la
integracin.
9
-
2.3.1 Diseo Bottom-Up
El termino Diseo Bottom-Up (diseo de abajo hacia arriba) se aplica al mtodo
de diseo mediante el cual se realiza la descripcin del circuito o sistema que se
pretende realizar, empezando por describir los componentes mas pequeos del
sistemas para, mas tarde, agruparlos en diferentes mdulos, y estos a su vez en
otros mdulos hasta llegar a uno solo que representa el sistema completo que se
pretende realizar. En la figura 2.1 se muestra esta metodologa de diseo.
Esta forma de disear no es buena debido al elevado nmero de componentes
de bajo nivel que se pueden tener que llegar a integrar en un aplicacin puesto
que resulta muy probable que no funcione adecuadamente debido a que cuando
se quiera detectar fallos en el circuito el diseo no tiene una estructura que
permita separar los bloques y por tanto el anlisis se vuelve mas complejo.
Figura 2.1 Metodologa del diseo Bottom-Up
10
-
2.3.2 Diseo top-down
Reciben este nombre arriba abajo debido a la necesidad de desarrollar
mtodos de diseo asistido por computador dividido en varias fases que, a partir
de la especificacin del funcionamiento, llevan hasta la descripcin fsica del
circuito.
As, mediante simulacin es posible una rpida deteccin de errores en fases
tempranas del diseo, resulta factible la reutilizacin del mismo para diferentes
tecnologas y se pueden utilizar las herramientas de sntesis actuales para
obtener rpidamente un esquema lgico o estructural y, en definitiva, una netlist
de entrada para el trazado fsico (layout) del ASIC, MCM, etc. o la asignacin de
recursos (mapping) en el caso de la lgica programable (PLDs y FPGAs).Todo
ello, obviamente, incrementa la productividad y la eficacia del diseo.
Propuesta de las fases del diseo de un sistema digital complejo. En la figura 2.1
se representa una bastante aceptada que divide el diseo en siete niveles o
formas de caracterizacin, tambin denominados niveles de abstraccin por
cuanto establecen la cantidad de informacin que se especifica de un circuito o
el nivel de detalle en que se encuentra una descripcin respecto de su
implementacin fsica.
11
-
Figura 2.2 Metodologa del diseo Bottom-Up
Figura 2.1
Nivel sistema. Describe el sistema como un conjunto de mdulos
semiautnomos y cooperantes, cuya interaccin se analiza para obtener un
conjunto ptimo. No se especifica la forma de realizar cada uno de los mdulos.
12
-
Nivel algortmico, funcional o de comportamiento. Cada mdulo del nivel
superior se define mediante un algoritmo en un lenguaje de alto nivel (HLL).
Dada la naturaleza paralela del hardware, en el que varios procesos pueden
necesitar un mismo recurso (por ejemplo, un bus de datos) o en el que se deben
sincronizar procesos independientes, se utilizan instrucciones muy similares a
las de los lenguajes de programacin concurrentes, como por ejemplo,
semforos y regiones crticas.
Nivel RTL (Register Transfer Level) o de flujo de datos (Data-Flow). En l se
describe el sistema mediante diagramas de transferencias entre registros, tablas
de verdad o ecuaciones lgicas. Se le concede ms importancia a lo que hace el
sistema que a como lo hace. Los elementos bsicos de este nivel son registros,
memorias, lgica combinacional y buses. Se distingue entre elementos con
capacidad de almacenamiento y elementos sin ella.
Nivel lgico. Consiste en la descripcin del sistema mediante la interconexin
de bloques bsicos, como puertas lgicas y biestables. No se realiza una
descripcin del comportamiento, sino de la estructura del mismo. Si se incluyen
adems otro tipo de bloques, en general a este nivel se le suele denominar
tambin estructural.
Nivel conmutador. Las puertas se sustituyen por transistores considerados
como conmutadores ideales que toman los valores cero o uno. La descripcin
es, por lo tanto, bsicamente la misma que en el nivel anterior con la nica
diferencia de que en algunas tecnologas, como por ejemplo CMOS, surgen
13
-
nuevos tipos de circuitos porque los conmutadores pueden ser bidireccionales
mientras que las puertas son unidireccionales.
Nivel elctrico. Se describe el sistema mediante modelos reales del transistor,
con sus diferentes parmetros elctricos.
Nivel fsico. Est constituido por la descripcin geomtrica o simblica de las
mscaras que se emplean para la fabricacin el circuito.
2.3.3 Dispositivos Lgicos Programables
2.3.3.1 CONCEPTOS FUNDAMENTALES
La fabricacin de dispositivos de lgica programable se basa en los siguientes
conceptos.
FUNCIONALIDAD COMPLETA
La cual se fundamenta en el hecho de que cualquier funcin lgica se puede
realizar mediante una suma de productos.
CELDAS DE FUNCIONES UNIVERSALES.
Tambin denominadas generadores de funciones, son bloques lgicos
configurados para procesar cualquier funcin lgica, similares en su
funcionamiento a una memoria. En estas celdas se almacenan los datos de
salida del circuito combinacional en vez de implementar fsicamente la ecuacin
booleana.
14
-
DISPOSITIVOS LGICOS PROGRAMABLES
Un dispositivo lgico programable, o PLD (Programmable Logic Device), es un
dispositivo cuyas caractersticas pueden ser modificadas y almacenadas
mediante programacin. El dispositivo programable ms simple es el PAL
(Programmable Array Logic). El circuito interno de un PAL consiste en una matriz
de conexiones, una matriz de compuertas AND y un arreglo de compuertas OR.
Una matriz de conexiones es una red de conductores distribuidos en filas y
columnas con un fusible en cada punto de interseccin, mediante la cual se
seleccionan cuales entradas del dispositivo sern conectadas al arreglo AND
cuyas salidas son conectadas al arreglo OR y de esta manera obtener una
funcin lgica en forma de suma de productos.
La mayora de los PLDs estn formados por una matriz de conexiones, una
matriz de compuertas AND, y una matriz de compuertas OR y algunos, adems,
con registros. Las matrices pueden ser fijas o programables. Con estos recursos
se implementan las funciones lgicas deseadas mediante un software especial y
un programador de dispositivos. El tipo ms sencillo de matriz programable, que
data de los aos 60, era una matriz de diodos con un fusible en cada punto de
interseccin de la misma. En la figura 2..3.3 se muestran los circuitos bsicos
para la mayora de los PLDs.
15
-
Figura 2.3.3 Estructuras comnmente utilizadas en PLDs
2.3.3.2 CPLD
Un CPLD (Complex Programmable Logic Device) extiende el concepto de un
PLD a un mayor nivel de integracin ya que permite implementar sistemas ms
eficientes porque utilizan menos espacio, mejoran la confiabilidad en el circuito, y
reducen costos. Un CPLD se forma con mltiples bloques lgicos, cada uno
similar a un PLD. Los bloques lgicos se comunican entre s utilizando una
matriz programable de interconexiones lo cual hace ms eficiente el uso del
silicio y conduce a un mejor desempeo. A continuacin se explican brevemente
las principales caractersticas de la arquitectura de un CPLD.
MATRIZ DE INTERCONEXIONES PROGRAMABLES
La matriz de interconexiones programables, PIM Programmable Interconect
Matrix (vase la figura 2.4), permite unir los pines de entrada/salida a las
entradas del bloque lgico, o las salidas del bloque lgico a las entradas de otro
16
-
bloque lgico, o inclusive a las entradas del mismo bloque. La mayora de los
CPLDs usan una de dos configuraciones para esta matriz: interconexin
mediante arreglo o interconexin mediante multiplexores. La primera se basa en
una matriz de filas y columnas con una celda EECMOS en cada interseccin. Al
igual que en el GAL esta celda puede ser activada para conectar/desconectar la
correspondiente fila y columna. Esta configuracin permite una total
interconexin entre las entradas y salidas de los bloques lgicos.
Sin embargo, estas ventajas provocan que disminuya el desempeo del
dispositivo adems de aumentar el consumo de energa y el tamao del
componente. En la interconexin mediante multiplexores, existe un multiplexor
por cada entrada al bloque lgico. Las vas de interconexin programables son
conectadas a las entradas de un nmero fijo de multiplexores por cada bloque
lgico. Las entradas de seleccin de estos multiplexores son programadas para
permitir que sea seleccionada nicamente una va de la matriz de
interconexiones por cada multiplexor, la cual se propaga hacia el bloque lgico.
Cabe mencionar que estos multiplexores no tienen acceso a todas las vas de la
matriz por lo que la rutabilidad se incrementa usando multiplexores de mayor
tamao, permitiendo as que cualquier combinacin de seales de la matriz de
interconexin pueda ser enlazada hacia cualquier bloque lgico. Sin embargo, el
uso de grandes multiplexores incrementa el tamao de dispositivo y reduce su
desempeo.
17
-
Figura 2.4 Arquitectura Bsica de un CPLD
BLOQUES LGICOS
Un bloque lgico es muy similar a un PLD, cada uno de ellos poseen
generalmente una matriz de compuertas AND, una matriz de compuertas OR y
una configuracin para la distribucin de los productos en las diferentes
macroceldas del boque. El tamao del bloque lgico es una medida de la
capacidad del CPLD, ya que de esto depende el tamao de la funcin booleana
que pueda ser implementada dentro del bloque. Los bloques lgicos usualmente
tienen de cuatro a veinte macroceldas. La cantidad de bloques lgicos que
puede poseer un CPLD depende de la familia y fabricante del dispositivo.
18
-
Figura 2.5 Estructura de un Bloque Lgico en dispositivos de las familias
MAX340 y MAX5000
DISTRIBUCIN DE PRODUCTOS
Existen pequeas diferencias en cuanto a la distribucin de los productos en un
CPLD, esto depender de la familia del dispositivo y del fabricante. Obviamente
el tamao de las sumas sigue siendo el factor ms importante para la
implementacin de funciones lgicas. Pero cada fabricante distribuye los
productos de diferente forma.
La familia MAX de CPLDs que fue desarrollada por Cypress Semiconductor
conjuntamente con Altera Corporation, siendo los primeros en sacar al mercado
19
-
unan familia de CPLDs, Altera la llam MAX5000 y Cypress por su parte la
clasific como MAX340, la distribucin de productos no es igual a la de un PLD.
En un dispositivo como el 22V10 tenemos que la suma de productos es fija por
cada macrocelda -8, 10, 12, 14 o 16 productos-, en la familia MAX se colocan 4
productos por macrocelda los cuales pueden ser compartidos con
otras macroceldas. Cuando un producto puede ser nicamente utilizado por una
macrocelda se le conoce como termino - producto dirigido, y cuando estos
pueden ser utilizados por otras macroceldas se le llama termino.
producto compartido. Mediante estos productos compartidos se mejora la
utilizacin del dispositivo, sin embargo, esto produce un retardo adicional al tener
que retroalimentar un producto hacia otra macrocelda y con esto disminuye la
velocidad de trabajo del circuito. La forma en que son distribuidos los productos
repercute en la flexibilidad que proporciona el dispositivo para el diseador.
Adems, que estos esquemas proporcionan tambin flexibilidad para los
algoritmos del programa de sntesis que es el que finalmente selecciona la mejor
forma en que deben ser distribuidas las ecuaciones lgicas en el componente.
20
-
Figura 2.6 Distribucin de Productos en dispositivos de las familias MAX340 y
MAX5000
MACROCELDAS
Las macroceldas de un CPLD son similares a las de un PLD. Estas tambin
estn provistas con registros, control de polaridad, y buffers para utilizar salidas
con alta impedancia. Por lo general un CPLD tiene macroceldas de
entrada/salida, macroceldas de entrada y macroceldas internas u ocultas (buried
macrocells), en tanto que un 22V10 tiene solamente macroceldas de
entrada/salida. Una macrocelda interna es similar a una macrocelda de
entrada/salida, slo que esta no puede ser conectada directamente a una
Terminal del dispositivo. La salida de una macrocelda interna va conectada
directamente a la matriz de interconexiones programable. Por lo que es posible
21
-
manejar ecuaciones y almacenar el valor de salida de estas internamente
utilizando los registros de estas macroceldas.
Figura 2.7 Macroceldas de entrada/salida, macroceldas ocultas y celdas de
entrada/salida en dispositivos de la familia FLASH 370.
Las macroceldas de entrada, como la que se muestra en la figura 2.8, son
utilizadas para proporcionar entradas adicionales para las funciones lgicas. En
el diagrama se muestra la macrocelda de entrada de la familia FLASH 370.
En general las macroceldas de entrada incrementan la eficiencia del dispositivo
al ofrecer algunos registros adicionales con los que se pueden almacenar el
valor de la terminal de entrada.
Figura 2.8 Macrocelda de entrada en dispositivos de la familia FLASH 370
22
-
En la figura 2.7 se muestran la arquitectura interna de un CPLD de la familia
FLASH 370 de Ciprs Semiconductors. En esta podemos apreciar las
macroceldas de entrada/salida, macroceldas ocultas y celdas de entrada/salida
con las que cuenta el dispositivo.
CELDA DE ENTRADA/SALIDA
En la figura 2.7 se puede apreciar una celda de entrada/salida, que bien podra
considerarse parte del bloque lgico, pero no necesariamente tienen que estar a
la salida de un bloque lgico. La funcin de una celda de entrada/salida es
permitir el paso de una seal hacia dentro o hacia el exterior del dispositivo.
Dependiendo del fabricante y de la arquitectura del CPLD estas celdas son
pueden ser consideradas o no parte del bloque lgico.
Figura 2.9 Arquitectura bsica de un FPGA
23
-
2.3.4 FPGA
La arquitectura de un FPGA (Field Programmable Gate Array) consiste en
arreglos de varias celdas lgicas las cuales se comunican unas con otras
mediante canales de conexin verticales y horizontales tal y como se muestra en
la figura 2.9.
2.3.4.1 CELDAS LGICAS
Cada celda lgica es funcionalmente similar a los bloques lgicos de un CPLD.
La diferencia est en que un FPGA normalmente utiliza generadores de
funciones en vez de compuertas. Cada uno de estos generadores es como una
memoria en donde en vez de implementar la funcin lgica mediante
compuertas, se precalcula el resultado y se almacena en el generador. Las
entradas al generador funcionan como un bus de direcciones, y mediante las
diferentes combinaciones de las entradas al generador se selecciona el
resultado correcto. Esto le da una gran densidad al dispositivo ya que se maneja
un gran nmero de generadores, pero el tiempo de propagacin al implementar
una funcin lgica en estos generadores es menor al que se necesitara si
utilizramos compuertas. La estructura de las celdas lgicas y las formas en que
estas pueden ser interconectadas, tanto salidas como entradas de la celda,
varan de acuerdo al fabricante. En general una celda lgica tiene menos
funcionalidad que la combinacin de sumas de productos y macroceldas de un
CPLD, pero como cada FPGA tienen una gran cantidad de celdas lgicas es
posible implementar grandes funciones utilizando varias celdas lgicas en
cascada. Adems de las celdas lgicas tambin es importante la tecnologa
24
-
utilizada para crear las conexiones entre los canales, las ms importantes son
las siguientes.
ANTIFUSE
Al igual que la tecnologa PROM, un FPGA que utiliza este tipo de tecnologa
slo se puede programar una sola vez y utilizan algo similar a un fusible para
realizar las conexiones. Una vez que ste es programado ya no se puede
recuperar. La diferencia radica en que en un fusible normal se desactiva
deshabilitando la conexin, en tanto que en estos anti - fusibles cuando son
programados se produce una conexin por lo que normalmente se encuentran
abiertos. La desventaja obvia es que no son reutilizables, pero por el contrario
disminuyen considerablemente el tamao y costo de los dispositivos.
SRAM
Las celdas SRAM son implementadas como generadores de funciones para
remplazar la lgica combinacional mediante compuertas y, adems,
son usadas para controlar multiplexores e interconectar las celdas lgicas entre
ellas. En estas el contenido se almacena mediante un proceso de configuracin
en el momento de encendido del circuito que contiene al FPGA. Ya que al ser
SRAM, el contenido de estos bloques de memoria
se pierde cuando se deja de suministrar la energa. La informacin binaria de las
celdas SRAM generalmente se almacena en memorias seriales
EEPROM conocidas como memorias de configuracin. En el momento de
encendido del circuito toda la informacin binaria es transferida a las celdas del
25
-
FPGA mediante el proceso de configuracin el cual es generalmente automtico
y el propio FPGA contiene un circuito interno que se encarga de hacer todo el
proceso.
Un FPGA que tiene una gran cantidad de canales de interconexin tiende a tener
pequeas celdas lgicas con muchas entradas y salidas en comparacin con el
nmero de compuertas que tiene la celda, este tipo de FPGAs generalmente
utilizan tecnologa ANTIFUSE. Un FPGA que tiene una estructura pequea en
canales de interconexin tiende a tener grandes celdas lgicas con pocas
entradas y salidas en comparacin con el nmero de compuertas que hay en la
celda. Este tipo de FPGA generalmente est fabricado con tecnologa SRAM.
Una arquitectura con celdas lgicas pequeas permite utilizar todos los recursos
del dispositivo. Sin embargo, si las celdas lgicas son muy pequeas entonces
tendremos que utilizar un gran nmero de estas para poder implementar
funciones lgicas de varios trminos, lo cual agrega un tiempo de retardo por
cada celda lgica implementada. Cuando el tamao de la celda lgica es grande
sucede lo contrario, en este tipo de celdas lgicas es posible utilizar un gran
nmero de compuertas por lo que podemos implementar funciones lgicas de
varios trminos con pocas celdas lgicas. El que el tamao de la celda sea
grande no afecta la frecuencia mxima de trabajo porque estamos hablando de
que existe un gran numero de compuertas que pueden ser usadas en la funcin
paralelamente, siendo el mismo tiempo de retardo para todas. Sin embargo,
cuando las funciones son pequeas en comparacin con el tamao de la celda
no es necesario utilizar todas las compuertas de la celda, por lo que este tipo de
26
-
celdas no son precisamente las ms indicadas para desempear pequeas
funciones. La tecnologa SRAM es utilizada por Altera, Lucent Technologies,
Atmel, Xilinx y otros. La tecnologa ANTIFUSE es utilizada por Cypress, Actel,
QuickLogic, y Xilinx. A continuacin se muestran algunas celdas lgicas de
distintos fabricantes.
Figura 2.10 Bloque Lgico Configurable de la familia XC4000 de Xilinx, Inc.
2.4 Elementos sintcticos del VHDL
2.4.1 Antecedentes
El lenguaje VHDL es un lenguaje, por lo que tiene sus propios elementos
sintcticos, tipos de datos, y estructuras.
El hecho de que sirva para la descripcin de hardware lo hace un poco diferente
de un lenguaje convencional ya que es capaz de ejecutar instrucciones a la vez
de forma concurrente.
27
-
2.4.2 Elementos sintcticos del VHDL:
2.4.2.1 Comentarios: Cualquier lnea que empieza por dos guiones --" es un
comentario.
2.4.2.2 Identificadores: Sirven para identificar variables, seales, nombres de
rutina, etc. Puede ser cualquier nombre compuesto por letras incluyendo el
smbolo de subrayado _", maysculas y minsculas son consideradas iguales,
as que FLOR y flor representan el mismo elemento. No puede haber ningn
identificador que coincida con alguna de las palabras clave del VHDL.
2.4.2.3 Nmeros: Cualquier nmero se considera que se encuentra en base 10.
Se admite la notacin cientfica convencional para nmeros en punto flotante. Es
posible poner nmeros en otras bases utilizando el smbolo de numeral #".
Ejemplo: 2#11000100# y 16#C4# representan el entero 196.
2.4.2.4 Caracteres: Es cualquier letra o carcter entre comillas simples: '1','3','t'.
2.4.2.5 Cadenas: Son un conjunto de caracteres englobados por comillas
dobles: "Esto es una cadena".
2.4.2.6 Cadenas de bits: Los tipos bit y bit_vector son en realidad de tipo
carcter y matriz de caracteres respectivamente. En VHDL se tiene una forma de
definir nmeros con estos tipos y es mediante la cadena de bits. Dependiendo de
28
-
la base en que se especifique el numero se puede poner un prefijo B (binario), O
(octal), o X (hexadecimal). Ejemplo: B"11101001", O"126", X"FE".
2.4.3 Operadores y expresiones
2.4.3.1 Operadores varios
& (concatenacin) Concatena matrices de manera que la dimensin de la matriz
resultante es la suma de las dimensiones de las matrices sobre las que opera:
punto
-
MOD (modulo) Calcula en modulo de dos nmeros. Exactamente se define el
modulo como la operacin que cumple: a=b*N+(a MOD b) donde N es un entero.
Los operandos solo pueden ser enteros. El resultado toma el signo de b.
REM (resto) Calcula el resto de la divisin entera y se define como el operador
que cumple: a=(a/b)*b+(a REM b), siendo la divisin entera. Los operandos solo
pueden ser enteros. El resultado toma el signo de a.
+ (suma y signo positivo) Este operador sirve para indicar suma, si va entre dos
operandos, o signo, si va al principio de una expresin. La precedencia es
diferente en cada caso. Opera sobre valores numricos de cualquier tipo.
- (resta y signo negativo) Cuando va entre dos operandos se realiza la operacin
de sustraccin, y si va delante de una expresin le cambia el signo. Los
operandos pueden ser numricos de cualquier tipo.
2.4.3.3 Operadores de desplazamiento
SLL, SRL (desplazamiento lgico a izquierda y a derecha) Desplaza un vector un
numero de bits a izquierda (SLL) o derecha (SRL) rellenando con ceros los
huecos libres. Se utiliza en notacin infija de manera que la seal a la izquierda
del operador es el vector que se quiere desplazar y el de la derecha es un valor
que indica el nmero de bits a desplazar. Por ejemplo dato SLL 2 desplaza a la
izquierda el vector dato, es decir, lo multiplica por 4.
30
-
SLA, SRA (desplazamiento aritmtico a izquierda y derecha)
ROL, ROR (rotacin a izquierda y a derecha) Es como el de desplazamiento
pero los huecos son ocupados por los bits que van quedando fuera.
2.4.3.4 Operadores relacionales
Devuelven un valor de tipo booleano (TRUE FALSE). Los tipos con los que
pueden operar dependen de la operacin:
=, /= (igualdad) El primero devuelve TRUE si los operandos son iguales y FALSE
en caso contrario. El segundo indica desigualdad, as que funciona justo al
revs. Los operandos pueden ser de cualquier tipo con la condicin de que sean
ambos del mismo tipo.
= (menor mayor) Tienen el significado habitual. La diferencia con los
anteriores es que los tipos de datos que pueden manejar son siempre de tipo
escalar o matrices de una sola dimensin de tipos discretos.
2.4.3.5 Operadores lgicos
Son NOT, AND, NAND, OR, NOR y XOR. El funcionamiento es el habitual para
este tipo de operadores. Actan sobre los tipos bit, bit_vector y boolean. En el
caso de realizarse estas operaciones sobre un vector, la operacin se realiza bit
a bit, incluyendo la operacin NOT.
31
-
2.4.3.6 Precedencia de operadores y sobrecarga
** ABS NOT Mxima precedencia
* / MOD REM
+(signo) -(signo)
+ - &
= /= < >=
AND OR NAND NOR XOR Minima precedencia
2.4.4 Tipos de datos
2.4.4.1 Tipos escalares
Son tipos simples que contienen algn tipo de magnitud.
Enteros:
Son datos cuyo contenido es un valor numrico entero. La forma en que se
definen estos datos es mediante la palabra clave RANGE, es decir, no se dice
que un dato es de tipo entero, sino que se dice que un dato esta comprendido en
cierto intervalo especificando los lmites del intervalo con valores enteros.
Ejemplos:
TYPE byte IS RANGE 0 TO 255;
TYPE index IS RANGE 7 DOWNTO 1;
TYPE integer IS -2147483647 TO 2147483647; -- Predefinido en el lenguaje.
Fsicos:
Se trata de datos que se corresponden con magnitudes fsicas, es decir, tienen
un valor y unas unidades.
32
-
Ejemplo:
TYPE longitud IS RANGE 0 TO 1.0e9
UNITS
um;
mm=1000 um;
m=1000 mm;
in=25.4 mm;
END UNITS;
Hay un tipo fsico predefinido en VHDL que es time. Este tipo se utiliza para
indicar retrasos y tiene todos los submltiplos, desde fs (femtosegundos), hasta
hr (horas). Cualquier dato fsico se escribe siempre con su valor seguido de la
unidad: 10 mm, 1 in, 23 ns.
Reales:
Conocidos como coma flotante, son los tipos que definen un numero real. Al
igual que los enteros se definen mediante la palabra clave RANGE, con la
diferencia de que los limites son nmeros reales.
Ejemplos:
TYPE nivel IS RANGE 0.0 TO 5.0;
TYPE real IS RANGE -1e38 TO 1e38; -- Predefinido en el lenguaje
33
-
Enumerados:
Son datos que pueden tomar cualquier valor especificado en un conjunto finito o
lista. Este conjunto se indica mediante una lista encerrada entre parntesis de
elementos separados por comas.
Ejemplos:
TYPE nivel_logico IS (nose,alto,bajo,Z);
TYPE bit IS ('0','1'); -- Predefinido en el lenguaje
Tipos predefinidos son: severity level, boolean, bit y character.
2.4.4.2 Tipos compuesto
Son tipos de datos que estn compuestos por los tipos de datos escalares.
Matrices: Son una coleccin de elementos del mismo tipo a los que se accede
mediante un ndice. Los hay monodimensionales (un ndice) o
multidimensionales (varios ndices). Las matrices en VHDL pueden estar
enmarcadas en un rango, o el ndice puede ser libre teniendo la matriz una
dimensin terica infinita.
Ejemplos:
TYPE word IS ARRAY(31 DOWNTO 0) OF bit;
TYPE transformada IS ARRAY(1 TO 4, 1 TO 4) OF real;
TYPE positivo IS ARRAY(byte RANGE 0 TO 127) OF integer;
TYPE string IS ARRAY(positive RANGE ) OF character; -- Predefinido en
VHDL
TYPE bit_vector IS ARRAY(natural RANGE ) OF bit; -- Predefinido en VHDL
34
-
TYPE vector IS ARRAY(integer RANGE ) OF real;
Este ltimo ejemplo, y los dos anteriores, muestran una matriz cuyo ndice no
tiene rango sino que sirve cualquier entero. Mas tarde, en la declaracin del
dato, se podra poner los limites de la matriz: SIGNAL cosa: vector(1 TO 20);
Los elementos de una matriz se acceden mediante el ndice. As dato(3) es el
elemento 3 del dato. De la misma manera se puede acceder a un rango:
datobyte
-
edad: integer;
END RECORD;
Para referirse a un elemento dentro del registro se utiliza la misma nomenclatura
que en Pascal, es decir, se usa un punto entre el nombre del registro y el nombre
del campo: persona.nombre="Jose"
2.4.4.3 Subtipos de datos
VHDL permite la definicin de subtipos que son restricciones o subconjuntos de
tipos existentes. Hay dos tipos. El primero son subtipos obtenidos a partir de la
restriccin de un tipo escalar a un rango.
Ejemplos:
SUBTYPE raro IS integer RANGE 4 TO 7;
SUBTYPE digitos IS character RANGE '0' TO '9';
SUBTYPE natural IS integer RANGE 0 TO entero_mas_alto; -- Predefinido en
VHDL
SUBTYPE positive IS integer RANGE 1 TO entero_mas_alto; -- Predefinido en
VHDL
El segundo tipo de subtipos son aquellos que restringen el rango de una matriz:
Ejemplo:
SUBTYPE id IS string(1 TO 20);
SUBTYPE word IS bit_vector(31 DOWNTO 0);
36
-
Los subtipos sirven adems para crear tipos resueltos que es una clase especial
de tipos.
2.4.5 Atributos
Los elementos en VHDL, como seales, variables, etc., pueden tener
informacin adicional llamada atributos. Estos atributos estn asociados a estos
elementos del lenguaje y se manejan en VHDL mediante la comilla simple ' ".
Por ejemplo, t'LEFT indica el atributo 'LEFT de t que debe ser un tipo escalar
(este atributo indica el limite izquierdo del rango).
Ejemplos:
t'LEFT Limite izquierdo del tipo t.
t'RIGHT Limite derecho del tipo t.
t'LOW Limite inferior del tipo t.
t'HIGH Limite superior del tipo t.
Para tipos t, x miembro de este tipo, y N un entero, se pueden utilizar los
siguientes atributos:
Ejemplos:
t'POS(x) Posicin de x dentro del tipo t.
t'VAL(N) Elemento N del tipo t.
t'LEFTOF(x) Elemento que esta a la izquierda de x en t.
t'RIGHTOF(x) Elemento que esta a la derecha de x en t.
t'PRED(x) Elemento que esta delante de x en t.
37
-
t'SUCC(x) Elemento que esta detrs de x en t.
Para a siendo un tipo u elemento de tipo matriz, y N un entero de 1 a al nmero
de dimensiones de la matriz, se pueden usar los siguientes atributos:
Ejemplos:
a'LEFT(N) Limite izquierdo del rango de dimensin N de a.
a'RIGHT(N) Limite derecho del rango de dimensin N de a.
a'LOW(N) Limite inferior del rango de dimensin N de a.
a'HIGH(N) Limite superior del rango de dimensin N de a.
a'RANGE(N) Rango del ndice de dimensin N de a.
a'LENGTH(N) Longitud del ndice de dimensin N de a.
Suponiendo que s es una seal, se pueden utilizar los siguientes atributos:
Ejemplos:
s'EVENT Indica si se ha producido un cambio en la seal.
s'STABLE(t) Indica si la seal estuvo estable durante el _ultimo periodo t.
El atributo 'EVENT es especialmente til en la definicin de circuitos
secuenciales para detectar el flanco de subida o bajada de la seal de reloj. Es
por esto que es probablemente el atributo mas utilizado en VHDL.
2.4.6 Declaracin de constantes, variables y seales
Un elemento en VHDL contiene un valor de un tipo especificado. Hay tres tipos
de elementos en VHDL, estn las variables, las seales y las constantes.
38
-
2.4.6.1 Constantes.
Una constante es un elemento que se inicializa a un determinado valor y no
puede ser cambiado una vez inicializado, conservando para siempre su valor.
Ejemplos:
CONSTANT e: real := 2.71828;
CONSTANT retraso: time := 10 ns;
CONSTANT max_size: natural;
2.4.6.2 Variables.
Una variable es lo mismo que una constante con la diferencia de que su valor
puede ser alterado en cualquier instante. A las variables tambin se les puede
asignar un valor inicial.
Ejemplos:
VARIABLE contador: natural := 0;
VARIABLE aux: bit_vector(31 DOWNTO 0);
ALIAS:
Permite que dado un elemento previamente definido, cambiarle el nombre o
ponerle nombre a una parte.
Ejemplo:
VARIABLE instruccion: bit_vector(31 DOWNTO 0);
ALIAS codigo_op: bitvector(7 DOWNTO 0) IS instruccion(31 DOWNTO 24);
39
-
2.4.6.3 Seales
Las seales pueden ser de varios tipos que son normal, register y bus. Por
defecto son de tipo normal. Al igual que en variables y constantes.
Se les puede dar un valor inicial si se quiere.
Ejemplos:
SIGNAL selec: bit := '0';
SIGNAL datos: bit_vector(7 DOWNTO 0) BUS := B"00000000";
2.4.6.4 Constantes, seales y variables
Constantes, seales y variables son cosas diferentes.
Variables:
Las variables, solo tienen sentido dentro de un proceso (PROCESS) o un
subprograma, es decir, solo tienen sentido en entornos de programacin donde
las sentencias son ejecutadas en serie.
Las variables solo se declaran en los procesos o subprogramas.
Las variables son elementos abstractos con poco significado fsico
Seales:
Las seales pueden ser declaradas nicamente en las arquitecturas, paquetes
(PACKAGE), o en los bloques concurrentes (BLOCK).
Las seales tienen un significado fsico inmediato y es el de representar
conexiones reales en el circuito.
40
-
Las seales pueden ser usadas en cualquier parte del programa o descripcin y
son declaradas siempre en la parte de arquitectura antes del BEGIN. Esto indica
que las seales son visibles por todos los procesos y bloques dentro de una
arquitectura, por lo que en realidad representan interconexiones entre bloques
dentro de la arquitectura.
Desde un punto de vista software, las seales representan el mecanismo que va
a permitir ejecutar en paralelo las instrucciones concurrentes, es decir, VHDL
implementa el mecanismo de sincronizacin de procesos por monitorizacin para
la ejecucin paralela de instrucciones.
En un diseo, las conexiones fsicas entre unos elementos y otros son
habitualmente declaradas como seales. Las entradas y salidas, definidas en la
entidad, son, por lo tanto, consideradas seales. Aunque estas entradas y
salidas son en realidad seales.
Constantes:
Las constantes pueden ser habitualmente declaradas en los mismos sitios que
las variables y seales.
2.4.7 Declaracin de entidad y arquitectura
2.4.7.1 Declaracin de entidad
La entidad es la parte del programa que define el modulo. Es decir, define las
entradas y salidas del circuito. Adems, la entidad es la estructura que permite
en VHDL realizar diseos jerrquicos, ya que un diseo jerrquico es
41
-
generalmente una coleccin de mdulos interconectados entre si. En VHDL
estos mdulos se definen mediante la palabra clave ENTITY:
id_instr:
ENTITY nombre IS
GENERIC(lista de propiedades);
PORT(lista de puertos);
declaraciones
BEGIN
sentencias
END nombre;
La primera cosa que destaca es la palabra id_instr, seguida por dos puntos,
delante de ENTITY. Esto es algo comn a todas las instrucciones en VHDL,
siempre se puede poner un nombre para identificar unas instrucciones de otras.
Este nombre es opcional, se puede poner casi en cualquier instruccin, y permite
realizar un mejor seguimiento de la ejecucin de un programa durante la
simulacin. Esta informacin extra est especialmente indicada para estructuras
de tipo PROCESS que de por si no tienen ningn nombre asignado, pero se
puede usar en casi cualquier otro tipo de estructura.
GENERIC y PORT.
GENERIC sirve para definir y declarar propiedades o constantes del modulo que
esta siendo declarado en la entidad.
42
-
PORT, define las entradas y salidas del modulo que esta siendo definido.
IN, indica entrada, las seales de entrada se pueden leer pero no pueden
asignrseles ningn valor, es decir, no se puede cambiar su valor en el
programa, y vienen a ser como constantes.
OUT, indica salida, pueden cambiar y se les pueden asignar valores, pero no
pueden leerse, es decir, no pueden ser usadas como argumentos en la
asignacin de cualquier elemento del VHDL.
INOUT que sirve tanto de entrada como de salida por lo que pueden ser usados
en el programa como de lectura y escritura.
BUFFER que es equivalente al INOUT, con la diferencia de que slo una fuente
puede escribir sobre el
LINKAGE que es como el INOUT tambin pero que slo puede ser usado con
elementos de tipo LINKAGE. Si no se especifica el tipo de puerto se supone el
tipo IN por defecto.
Declaraciones es opcional, como todo lo que va dentro de la entidad, y sirve para
realizar algunas declaraciones de constantes, etc. A continuacin le sigue un
bloque BEGIN, tambin opcional, donde se pueden incluir sentencias. Esta parte
43
-
no se suele usar casi nunca. El tipo de sentencias que se pueden usar en esta
parte son muy restringidas y se limitan a sentencias de indicacin de errores o
comprobacin de alguna cosa.
Ejemplos de declaracin de entidad:
ENTITY rom IS
GENERIC(tamano, ancho: positive);
PORT(enable : IN bit;
address : IN bit_vector(tamano-1 DOWNTO 0);
data: OUT bit_vector(ancho-1 DOWNTO 0));
END rom;
ENTITY procesador IS
GENERIC(max_freq: frequency := 30 MHz);
PORT(clk: IN bit;
address: OUT integer;
data: INOUT word_32;
control: OUT proc_control;
ready: IN bit);
END procesador;
2.4.7.2 Declaracin de arquitectura.
En la arquitectura es donde se define el funcionamiento del modulo definido en la
entidad. Una arquitectura siempre est referida a una entidad concreta por lo que
44
-
no tiene sentido hacer declaraciones de arquitectura sin especificar la entidad.
Una misma entidad puede tener diferentes arquitecturas, es en el momento de la
simulacin o la sntesis cuando se especifica qu arquitectura concreta se quiere
simular o sintetizar.
ARCHITECTURE, es la palabra clave con la se realiza la declaracion de la
arquitectura.
Ejemplo:
id_instr:
ARCHITECTURE nombre OF la_entidad IS
declaraciones
BEGIN
Instrucciones
END nombre;
Declaraciones. Donde se definen los subprogramas (funciones, procedimientos,
etc.), declaraciones de tipo, declaraciones de constantes, declaraciones de
seales, declaraciones de alias, declaraciones de componentes, etc. Es
importante destacar que las seales slo pueden ser declaradas dentro de la
parte declarativa de una arquitectura y que va antes de definir la funcionalidad
en el bloque BEGIN...END.
45
-
BEGIN, despus de este, todas las instrucciones que definen el comportamiento,
estructura y funcionalidad del circuito. Hay que destacar que dentro de la
arquitectura las instrucciones son de dos tipos, o concurrentes, o de
instanciacin que es en realidad tambin una construccin concurrente. En el
caso de definir estructura las instrucciones sern de instanciacin, es decir, de
colocacin de componentes y las conexiones entre ellos. En el caso de querer
una descripcin mas abstracta se pueden utilizar las asignaciones concurrentes
RTL. Hay que resear que una de estas instrucciones concurrentes es el bloque
PROCESS dentro del cual la ejecucin puede ser secuencial.
2.5 Ejecucin concurrente
2.5.1 Estructuras de la ejecucin concurrente RTL
2.5.1.1 Asignacin condicional: WHEN...ELSE
Es importante, en toda expresin condicional que describa hardware de forma
concurrente, incluir todas las opciones posibles y contemplar todos los casos
posibles de variacin de una variable.
En este sentido es obligatorio siempre acabar esta expresin condicional con un
ELSE. Se pueden anidar varias condiciones en una misma asignacin.
Ejemplo:
sb ELSE
'X';
46
-
2.5.1.2 Asignacin con seleccin: WITH...SELECT...WHEN
Es una ampliacin del condicional, la asignacin se hace segn el contenido de
cierto objeto o resultado de cierta expresin.
Ejemplo:
WITH estado SELECT
semforo
-
alguna manera son equivalentes a entidades ya que se les puede definir
entradas y salidas, aunque quiz su uso ms normal es el agrupamiento de
instrucciones para separar el diseo en mdulos.
La estructura general de la declaracin de bloque se muestra a continuacin:
block_id:
BLOCK(expresion de guardia)
cabecera
declaraciones
BEGIN
sentencias concurrentes
END BLOCK block_id;
El nombre block_id es opcional y su uso sirve para nombrar a diferentes bloques
en un mismo diseo y as ayudar en la depuracin, simulacin y sobre todo en la
legibilidad del programa.
La cabecera puede tener clusulas de tipo genrico, declaraciones de puertos de
entrada salida, etc., es decir, es equivalente a la declaracin de entidad y su
alcance es el del bloque. El hecho de poder declararse puertos de entrada y
salida en un bloque, y as conectarlos con un nivel superior dentro del programa,
es especialmente interesante ya que va a permitir el uso de un bloque, que por
ejemplo tenamos en otro diseo, e incorporarlo al nuevo sin necesidad de
cambiar todas las seales internas del bloque.
48
-
Por ejemplo, supongamos que tenemos una memoria ROM definida como
bloque con entradas direccin y enable, y salida dato; entonces estas seales se
definen con PORT como la entidad, y la conexin entre estas seales y todo lo
de fuera, que vamos a suponer que son las seales rom dir, rom ena y rom dato,
mediante PORT MAP, es decir:
rom: BLOCK
PORT(direccion: IN bit_vector(15 DOWNTO 0);
enable: IN bit;
dato: OUT bit_vector(7 DOWNTO 0));
PORT MAP(direccion=>rom_dir,enable=>rom_ena,dato=>rom_dato);
BEGIN
...
END BLOCK rom;
En la parte de declaracin se puede incluir desde subprogramas a seales al
igual que al principio de la arquitectura, siendo la visibilidad local al bloque lo que
permite la modularidad y portabilidad del cdigo.
La expresin de guardia es opcional, y permite la habilitacin o deshabilitacin
de la asignacin de determinadas seales dentro del bloque, en concreto,
aquellas que empleen la palabra clave GUARDED (vigilado) en su asignacin.
La expresin de guardia es de tipo booleano, de manera que si es cierta la
condicin se realizan todas las asignaciones, y si es falsa se realizaran todas
menos las vigiladas. Un ejemplo sencillo, aunque no es lo habitual, es definirse
un registro activo por nivel alto del reloj, sea:
49
-
latch: BLOCK(clk='1')
BEGIN
q
-
CAPITULO 3
El manual de prcticas se basa en los fundamentos sobre VHDL vistos en el
capitulo II, se menciona algunos de los instrumentos tericos que se usan para la
programacin con VHDL. En el proceso de la construccin del manual de
prcticas puede que surjan temas no desarrollados en el marco terico por lo
tanto se desarrollaran en este captulo.
Tambin se ha decidido que para comprender ms fcilmente el VHDL el alumno
puede apoyarse en alguno de los muchos software de programacin y
simulacin del cdigo VHDL
En la presente investigacin el Quartus 2 fue la herramienta en la cual nos
apoyamos para poder constatar el potencial del VHDL, mas sin embargo otros
Software de diseo pueden servir para el mismo fin.
Al igual que en el caso del software, existen diversos Kits de desarrollo que
permiten llevar a la practica lo antes programado y simulado.
51
-
Prctica 1
VHDL: Sumador/Restador
Este ejemplo describe 2 entradas parametrizadas como un Diseo de VHDL
Sumador/Restador. La unidad de diseo multiplexa operaciones de suma y resta
con una entrada addsub. Las herramientas de sntesis detectan las unidades de
suma y resta en el cdigo HDL que comparte entradas y cuyas salidas estn
multiplexadas por una seal comn. El software infiere la megafuncin
lpm_addsub para dicho Diseo de suma/resta.
Figura / Sumador/Restador Top-Level Diagram
Tabla 1 lista los puertos y da una descripcin para cada uno.
Tabla 1. Sumador/Restador Listado de Puertos
Nombre del
Puerto Tipo Descripcin
a[4:0], b[4:0] Input 4-bit data inputs a sumador / restador
Addnsub Input Multiplexa entrada para las operaciones de sumado y
restado.
result[5..0] Output 5-bit output junto con 1-bit carry/borrow
52
-
Prctica 2
VHDL: Contador Descendente
Este ejemplo es un contador descendente de 4-bits sincrono. Este ejemplo
muestra 2 mtodos diferentes para mapear la funcin lpm_counter. El segundo
mtodo, el cual es comentado en el ejemplo, mapea todos los puertos en el
lpm_counter.
Prctica 3
VHDL: Contador Ascendente / Descendente
Este ejemplo implementa un contador ascendente / descendente con carga,
borrado y caracterstica ascendente / descendente.
Prctica 4
VHDL: Ripple-Carry Adder
Este ejemplo ilustra el uso de la instruccin For para construir un sumador con
acarreo intercambiable para una funcin de sumador completa. Tambin
muestra como usar una definicin paquete en el archivo de diseo usr_def.vhd.
Nota que el archivo usr_def.vhd llama a un sumador completo de el archivo
full_add.vhd. Tambin que el usr_def.vhd debe de ser compilado antes que el
f_add8.vhd sea compilado. El sumador de acarreo intercambiable mostrado en
este ejemplo puede ser usado en diseos donde el uso eficiente de recursos
lgicos es ms importante que el desempeo del diseo.
53
-
CAPITULO 4. RESULTADOS
Prctica 1 VHDL: Sumador/Restador
Objetivo: que el alumno pueda apreciar el potencial del lenguaje para la
interpretacin y diseo de sistemas digitales
Material: PC, Lenguaje de sntesis y simulacin de VHDL
Marco terico: Para esta prctica se requiere que el alumno tenga
conocimientos bsicos de diseo digital, habilidad para interpretar diagramas de
tiempo y nociones bsicas de programacin en VHDL
A continuacin se muestra el cdigo que resuelve la actividad planteada en la
prctica el cual puede ser editado en bloc de notas y simulado en el Software de
sntesis y prueba de su preferencia. La extensin a salvar el archivo es .hdl
54
-
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
PACKAGE my_package IS
CONSTANT ADDER_WIDTH : integer := 5;
CONSTANT RESULT_WIDTH : integer := 6;
SUBTYPE ADDER_VALUE IS integer RANGE 0 TO 2 ** ADDER_WIDTH
- 1;
SUBTYPE RESULT_VALUE IS integer RANGE 0 TO 2 **
RESULT_WIDTH - 1;
END my_package;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE work.my_package.ALL;
ENTITY addsub IS
PORT
(
a: IN ADDER_VALUE;
b: IN ADDER_VALUE;
addnsub: IN STD_LOGIC;
result: OUT RESULT_VALUE
55
-
);
END addsub;
ARCHITECTURE rtl OF addsub IS
BEGIN
PROCESS (a, b, addnsub)
BEGIN
IF (addnsub = '1') THEN
result
-
Prctica 2 VHDL: Contador Descendente
Objetivo: que el alumno pueda apreciar el potencial del lenguaje para la
interpretacin y diseo de sistemas digitales
Material: PC, Lenguaje de sntesis y simulacin de VHDL
Marco terico: Para esta prctica se requiere que el alumno tenga
conocimientos bsicos de diseo digital, habilidad para interpretar diagramas de
tiempo y nociones bsicas de programacin en VHDL
A continuacin se muestra el cdigo que resuelve la actividad planteada en la
prctica el cual puede ser editado en bloc de notas y simulado en el Software de
sntesis y prueba de su preferencia. La extensin a salvar el archivo es .hdl
cnt_3.vhd
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
LIBRARY lpm; --Allows use of all Altera LPM
USE lpm.lpm_components.all; --functions
ENTITY cnt_3 IS
PORT (clock : IN STD_LOGIC;
57
-
sset : IN STD_LOGIC;
q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END cnt_3;
ARCHITECTURE lpm OF cnt_3 IS
BEGIN
-- Port map 1
U1: lpm_counter
GENERIC MAP (lpm_width => 4, lpm_direction => "down")
PORT MAP (clock => clock, sset => sset,
q => q);
-- Port map 2
--
-- PORT MAP (data => "0000", clock => clock, clk_en => '1',
-- cnt_en => '1', updown => '0', sload => '0',
-- sset => SSET, sclr => '0', aload => '0',
-- aset => '0', aclr => '0', q => q);
-- These portmaps will produce the same results.
-- The second portmap has more connections but
-- the extraneous connections will be synthesized out.
END;
58
-
Prctica 3 VHDL: Contador Ascendente / Descendente
Objetivo: que el alumno pueda apreciar el potencial del lenguaje para la
interpretacin y diseo de sistemas digitales
Material: PC, Lenguaje de sntesis y simulacin de VHDL
Marco terico: Para esta prctica se requiere que el alumno tenga
conocimientos bsicos de diseo digital, habilidad para interpretar diagramas de
tiempo y nociones bsicas de programacin en VHDL
A continuacin se muestra el cdigo que resuelve la actividad planteada en la
prctica el cual puede ser editado en bloc de notas y simulado en el Software de
sntesis y prueba de su preferencia. La extensin a salvar el archivo es .hdl
counters.vhd
ENTITY counters IS
PORT(
d : IN INTEGER RANGE 0 TO 255;
clk : IN BIT;
clear : IN BIT;
load : IN BIT;
up_down : IN BIT;
59
-
qd : OUT INTEGER RANGE 0 TO 255);
END counters;
ARCHITECTURE a OF counters IS
BEGIN
-- An up/down counter
PROCESS (clk)
VARIABLE cnt : INTEGER RANGE 0 TO 255;
VARIABLE direction : INTEGER;
BEGIN
IF (up_down = '1') THEN --Generate up/down counter
direction := 1;
ELSE
direction := -1;
END IF;
IF (clk'EVENT AND clk = '1') THEN
IF (load = '1') THEN --Generate loadable
cnt := d; --counter. Take these
ELSE --lines out to increase performance.
cnt := cnt + direction;
END IF;
--The following lines will produce a synchronous
--clear on the counter
IF (clear = '0') THEN
60
-
cnt := 0;
END IF;
END IF;
qd
-
Prctica 4 VHDL: Ripple-Carry Adder
Objetivo: que el alumno pueda apreciar el potencial del lenguaje para la
interpretacin y diseo de sistemas digitales
Material: PC, Lenguaje de sntesis y simulacin de VHDL
Marco terico: Para esta prctica se requiere que el alumno tenga
conocimientos bsicos de diseo digital, habilidad para interpretar diagramas de
tiempo y nociones bsicas de programacin en VHDL
A continuacin se muestra el cdigo que resuelve la actividad planteada en la
prctica el cual puede ser editado en bloc de notas y simulado en el Software de
sntesis y prueba de su preferencia. La extensin a salvar el archivo es .hdl
f_add8.vhd
LIBRARY altera;
USE altera.maxplus2.carry;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
LIBRARY WORK;
USE WORK.usr_def.ALL;
62
-
ENTITY f_add8 IS
PORT(
x_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
y_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
c_in : IN STD_LOGIC;
sum : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
c_out : OUT STD_LOGIC);
END f_add8;
ARCHITECTURE struct OF f_add8 IS
SIGNAL im : STD_LOGIC_VECTOR(6 DOWNTO 0);
SIGNAL imi : STD_LOGIC_VECTOR(6 DOWNTO 0);
BEGIN
c0 : full_add
PORT MAP (x_in(0),y_in(0),c_in,sum(0),im(0));
c01 : carry
PORT MAP (im(0),imi(0));
c : FOR i IN 1 TO 6 GENERATE
c1to6: full_add PORT MAP (x_in(i),y_in(i),
imi(i-1),sum(i),im(i));
c11to16: carry PORT MAP (im(i),imi(i));
END GENERATE;
c7 : full_add PORT MAP (x_in(7),y_in(7),
63
-
imi(6),sum(7),c_out);
END struct;
usr_def.vhd
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
PACKAGE usr_def IS
COMPONENT full_add
PORT(
a : IN STD_LOGIC;
b : IN STD_LOGIC;
c_in : IN STD_LOGIC;
sum : OUT STD_LOGIC;
c_out : OUT STD_LOGIC);
END COMPONENT;
END usr_def;
full_add.vhd
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY full_add IS
PORT(
a : IN STD_LOGIC;
b : IN STD_LOGIC;
c_in : IN STD_LOGIC;
64
-
sum : OUT STD_LOGIC;
c_out : OUT STD_LOGIC);
END full_add;
ARCHITECTURE behv OF full_add IS
BEGIN
sum
-
CONCLUSIONES
Despus de haber concluido esta investigacin, el horizonte en el campo del
VHDL se ha ampliado, aunque a la vez se a descubierto que dicha investigacin
apenas cubre los fundamentos bsicos del VHDL.
An as se cree que el alumno del Instituto de Estudios Superiores de
Tamaulipas encontrar en esta investigacin un importante paso para iniciarse
en el campo del VHDL.
Una de las principales ventajas de este estudio es que se le ensea al alumno
no solo conocimientos tericos, adems se incluyen aplicaciones prcticas,
amenas y dirigidas con un lenguaje apropiado a la edad de los interesados
intentando as impulsar la motivacin del alumno a que profundice ms en el
tema y no solo se lmite en este trabajo.
66
-
Puntos positivos de la investigacin. Se lleva al alumno desde un conocimiento nulo en el campo del VHDL, a una
visin ms amplia de los usos, aplicaciones y fundamentos de los que es esta
rama del conocimiento.
El VHDL se puede usar como herramienta en muchas materias impartidas en el
IEST en la carrera de Ingeniera Electrnica as como en Ingeniera Mecatrnica,
ejemplos son Circuitos Digitales I, II y III, Control.
Puntos negativos de la investigacin. Falta de profundizacin en temas avanzados de procesamiento de seales, as
como de control neuronal.
67
-
Recomendaciones El Instituto de Estudios Superiores de Tamaulipas actualmente no incluye en su
plan de estudios la revisin obligatoria del VHDL, sin embargo el sistema de
Institutos Tecnolgicos ya incluye este tema en la carrera de Ingeniera
Electrnica, y al momento se espera que el tema sea cubierto aqu en el IEST en
el rea de Ingeniera Mecatrnica.
Debido a que el VHDL es un tpico muy amplio para abarcar en un solo curso,
se recomienda que los fundamentos se instruyan a lo largo de varias materias
como herramienta de apoyo y que forma parte de la Licenciatura de Ingeniera
Electrnica del Instituto de Estudios Superiores de Tamaulipas.
68
-
BIBLIOGRAFIA
VHDL, el arte de programar sistemas digitales. Maxinez y Alcal. CECSA
Electrnica Digital: Introduccin a la lgica digital. Acha y Castro. Alfaomega.
Diseo digital. Mano, Morris. Prentice Hall
VHDL: Lenguaje para descripcin y modelado de circuitos. Carpio, Fernando. Universidad de Valencia.
Dispositivos lgicos programables. Torres Valle, Francisco. Universidad Autnoma de Guadalajara.
69