aplicaciones vhdl

73
INSTITUTO DE ESTUDIOS SUPERIORES DE TAMAULIPAS DIVISIÓN DE CIENCIAS EXACTAS “ DESARROLLO DE APLICACIONES DIDÁCTICAS DEL VHDL” TRABAJO DE INVESTIGACION DEL SEMINARIO DE INVESTIGACIÓN QUE PARA OBTENER EL TÍTULO DE: INGENIERO EN ELECTRONICA PRESENTAN: ARMANDO FERNÁNDEZ SAUCEDA FLOR REBECA OCHOA CABALLERO ALTAMIRA, TAM. MARZO DE 2006

Upload: jeziel-juarez

Post on 17-Sep-2015

68 views

Category:

Documents


3 download

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