Sei sulla pagina 1di 52

VHDL (Continuacion) Diseo con VHDL del proceso de traslado de palanquillas hasta la entrada del horno, a traves de una

serie de vias de rodillos.


El funcionamiento del proyecto es el siguiente: Se tienen tres vias de rodillos que contienen una serie de motores (aproximadamente de 10 a 12 motores en cada una). En cada eje de los motores se encuentra acoplado un rodillo que gira con el movimiento que genera el motor. Los motores estan ubicados uno seguido del otro, por lo que se emula una cinta transportadora. La primera via es manual (MANUAL VR), la cual es controlada por el operador asignado a la entrada del horno para que la traslade a la siguiente que se acciona automaticamente cuando se ingresa el numero de palanquillas a utilizar en el proceso de laminacion, en este caso para la creacion de cabillas, luego de un proceso desbastador que sufre el material a lo largo del tren de Barras.

A continuacion se muestra un esquema de como se va generando el movimiento de las palanquillas hasta el

horno (Fig. 1).

FIG# 1. Movimiento de palanquillas hasta la entrada del horno.

Una vez que se ingresa el numero de palanquillas a laminar se accinan los motores del grupo 1 y grupo 2 de la via de rodillos como se observa en la figura anterior. El operador, manualmente coloca la palanquilla, y esta arrastrada por la via siguiente por efecto de la friccion. Una vez que pasa por la via de rodillos del grupo 1, al ver que no tiene palanquillas en la via de rodillos 2 sigue el trayecto hasta frenar porque es detectada por un sensor (S2) ubicado en la via. Cuando la via de rodillos numero 2 esta ocupada, se realiza pregunta del estado del sensor 3 (S3), ubicado en la entrada del horno para detectar palanquillas en esta

zona. En el caso que la misma este vacia, se procede a enviar una seal al separador empujador ubicado en la via de rodillos N#2 para que haga el traslado y desalojar la via. Una vez que es desalojada, se inicia el movimiento de los motores para ubicar la nueva palanquilla. Todo este proceso se genera hasta que el conteo que se obtiene a traves del sensor 3 (S3), alcanza el numero de palanquillas ingresado en a traves del teclado. Cuando esto sucede se detiene el proceso hasta que nuevamente se realice la accion de colocar el numero de palanquillas a laminar.

Por lo que el operador realiza la operacion de la siguiente manera (Fig.#2):

Fig.#2. Modo de ingreso de los datos.

Ahora bien, el diagrama de flujo del programa a cargar en el PLD o FPGA es como se muestra a continuacion (Fig #3):

Fig #3. Diagrama de flujo del programa a instalar en el dispositivo programable.

2. DESCRICPCION FUNCIONAL 1. Definir el numero de palanquillas a laminar. 2. Iniciar el Procesos. 3. Accionar los motores del grupo 1 y 2 de la va de rodillos. 4. El operador, manualmente coloca la palanquilla donde?, y esta es arrastrada por la va siguiente por efecto de la friccin. 5. Una vez que pasa por la va de rodillos del grupo 1, al ver que no tiene palanquillas en la va de rodillos 2 sigue el trayecto hasta frenar porque es detectada por un sensor (S2) ubicado en la va. 6. Cuando la va de rodillos numero 2 esta ocupada, se realiza pregunta del estado del sensor 3 (S3), ubicado en la entrada del horno para detectar palanquillas en esta zona. 7. En el caso que la misma este vaca, se procede a enviar una seal al separador empujador ubicado en la va de rodillos numero 2 para que haga el traslado y desalojar la va.

8. Una vez que es desalojada, se inicia el movimiento de los motores para ubicar la nueva palanquilla.Todo este proceso se genera hasta que el conteo que se obtiene a travs del sensor 3 (S3), alcanza el numero de palanquillas ingresado en a travs del teclado.

3. DISEO La metodologa de diseo a usar consiste en seguir paso a paso la estructuracin de un trabajo, es una receta de actividades, con la finalidad de alcanzar el objetivo de forma analtica y con menor impacto en el desarrollo de un proyecto, la metodologa de diseo en nuestro caso usaremos PLD, FPGA y VHDL combinando pasos que aporte en nuestro diseo para alcanzaremos nuestra meta.

Fig. #4. Proceso de diseo con PLD

4. Definicin de la Apliacin.

Se requiere disear en VHDL un programa del control de un proceso de alineacin de palanquillas previamente para continuar con el proceso laminacin de un horno, es el proceso que continua y por el cual debe esperarse para reiniciar el ciclo, este proceso es realizado por lote, primero se alinean las palanquillas, luego en el horno son convertidas en laminas u otros producto; nosotros centralizaremos nuestra atencin en la primera fase y es proceso semi-automatizado.

5. Seleccin del PDL.

VHDL es slo uno de un conjunto de lenguajes especializados en la descripcin de elementos de hardware como ABEL, Verilog, AHDL, entre otros; que se caracterizan por permitir implementar casi cualquier tipo de circuito lgico sin la necesidad de utilizar esquemticos pues la descripcin de los componentes y su comportamiento se hace por medio de instrucciones similares a las de un lenguaje de programacin como PASCAL o C. An cuando el estndar no coloca ninguna limitacin a la complejidad del diseo, no todos los circuitos descritos con VHDL pueden ser traducidos a una implementacin fsica posterior. Este proceso de tomar el cdigo en VHDL y generar los elementos lgicos que efectan la funcin deseada se conoce como sntesis. Las descripciones que admiten este proceso se les denomina Sintetizables. El dispositivo seleccionado es de la familia Spartan2E, especificamente el modelo xc2s50e, ya que posee la cantidad de compuertas necesarias para este proyecto, aparte de que el costo es bajo en comparacion a otros modelos de su misma especie. 6. Asignacin de IN/OUT:

Entidad componente bsicos del lenguaje VHDL: Es la declaracin de entradas /salidas de un mdulo. De acuerdo al IEEE Std 1076-2002, una entidad es la abstraccin principal de hardware en VHDL. Esta representa una parte de un diseo de hardware que tiene entradas y salidas bien definidas y realiza una funcin bien definida. Una entidad de diseo puede representar un sistema entero, un sub-sistema, una tarjeta, un chip, una macro-celda, una compuerta lgica o cualquier nivel de abstraccin intermedio. Nuestra entidad la llamaremos: entradas Vamos a iniciar con el anlisis de las entradas y salidas, declaracin de variables que vamos a requerir.

Fig#5. Teclado Numerico para el ingreso del numero de palanquillas

Fig#6. Tabla con los valores binarios asignados para cada numero de entrada

La entrada de los datos es a traves del teclado y la salida de datos es a traves de un display como se muestra en la Fig.#7, y la codificacion a la salida se muestra en la Fig# 8.

Fig#7. Display de 7 segmentos utilizado para la visualizacion de los datos de salida.

Fig#8. Tabla con los valores binarios asignados para cada numero de salida.

7. Definicin de la Lgica.

Arquitectura: Es la descripcin detallada del comportamiento o estructura interna de un mdulo (entidad). Una arquitectura define el cuerpo de una entidad. Esta especifica las relaciones entre las entradas y las salidas de una entidad, pudiendo ser expresada en trminos de estructura, flujo de datos o comportamiento. La descripcin estructural muestra a la entidad y sus componentes internos junto con las conexiones entre estos, siendo bastante similar al proceso de diseo basado en esquemticos y componentes MSI (Micro-Star International) o SSI discretos. A continuacion se muetra el programa en VHDL para ser cargado en el dispositivo programable:

Resumen del cuerpo del programa: 1. Guarda la seal tecleada del numero requerido en el registro, al_reg 2. Codifica la seal a mostrar en el display, al_disp 3. Contar el numero de palanquillas a laminar, cnt 4. La dos rodillos se detienen al alcanzar el numero productos segun el registro, del_reg end movmiento.

8. Compilacin. Proceso y resultado de compilar cdigo fuente, a grandes rasgos el proceso se puede describir en los siguientes pasos:* El compilador recibe el cdigo fuente. *Se analiza lexicogrficamente. * Se analiza semntica y sintcticamente (parseado). * Se genera el cdigo intermedio no optimizado. * Se optimiza el cdigo intermedio. * Se genera el cdigo objeto para una plataforma especfica. Finalmente ya puede ejecutarse el cdigo mquina.

Fig#8. Pantalla del programa XILINX ISE 9.2i.

9. Simulacin. La simulacin del diseo es quiz la fase ms importante en un proyecto de esta envergadura, y al mismo tiempo es la ms crtica y compleja. Obviamente, se trata de un diseo difcil de monitorizar, y tratar de reducir el espacio de errores a su mnima expresin es una tarea ardua, por lo que hay que encontrar un mtodo que permita automatizar el proceso de verificacin.

Fig#9. Esquema del proceso hasta la simulacion del programa.

En la grfica 10 se refleja la inconsistencia en la seal IGUAL, ya que no se condicion su activacin para despus de ingresado el dato; y lo mismo ocurre con al_disp, donde antes de la visualizacin del nmero hay un valor indeterminado. Todo esto pasa slo en el comienzo de la simulacin, lo cual no tiene implicacin alguna sobre el funcionamiento del diseo.

Fig#10. Validacin de la variable IGUAL.

En la grfica 11 se ingresa el valor de las palanquillas que se desean laminar a travs del teclado. Este valor se debe mantener hasta que se presione la tecla ENTER, mientras se hace la codificacin para mostrarlo en el display en su respectivo formato. Con la seal de ENTER se activa la los rodillos o banda.

Fig#11. Validacin de la tecla ENTER.

En la grfica 12 la seal del sensor activa el contador y se realiza la comparacin con el valor almacenado en DEL_REG y CUENTA; cuando coinciden se activa la seal IGUAL, que indica la desactivacin de la banda. Si el contador llega al valor inicial, se resetea y se pone a cero el valor del contador.

Fig#12. Validacin de la variable CUENTA y IGUAL.

10. Correccin. Ahora, si se desea usar una sola seal para activar y desactivar la banda, podra usarse una seal triestado, donde en su estado normal est en alta impedancia. Para esto, se agrega un nuevo bloque y se modifica el comparador. Con estos cambios el anlisis grfico 13 demuestra de nuevo, el arranque del circuito. La activacin de la seal RODILLO tiene un cero, el cual no se ha logrado eliminar, pero igual podra eliminarse en la etapa de activacin de la banda.

Fig#13. Validacin de la variable RODILLO.

La desactivacin de la banda si es plenamente correcta, como se aprecia:

Fig#14. Validacin del resultado final.

11. Programacin. Una vez que se ha completado este proceso, el circuito est listo para su implementacin fsica. Sin embargo, puede retornar a la ventana de procesos para el archivo Simulacin_Mux.tbw y efectuar una simulacin Post-Fit, es decir, una simulacin en la cual se consideran los tiempos de retardo generados por

la interconexin particular de los bloques lgicos dentro del PLD y que brinda una interesante oportunidad de estudiar el comportamiento real del circuito en el momento de ocurrir los cambios en sus entradas. 12. Esquemtico. El RTL, es un diagrama esquemtico que muestra la interconexin de los componentes que integran el circuito en forma de bloques funcionales, es decir, no especifica el detalle de conexin elctrica entre las seales. Por ejemplo, en la figura 12 se muestra una porcin del penltimo nivel del diagrama RTL del multiplexor, obsrvese que se muestra la utilizacin de una compuerta AND de 3 entradas.

Fig#15. Logica de compuertas internas en la fpga seleccionada.

Fig#16. Vista de la distribucion de entradas en la fpga seleccionada.

13. Implementacin.

Una barra de progreso le indicar como transcurre el proceso de programacin del PLD, hasta que el mensaje Programming Suceded le informe que ya ha programado al dispositivo de forma correcta.

Fig#17. Vista del programa implementado. 14. CONCLUSIONES. La programacin de dispositivos permiti simular y verificar el correcto funcionamiento. El diseo con PDL tiene su propio diagrama de flujo, lo usamos en este trabajo para tomarlo como gua para conseguir el objetivo de programacin y simulacin. El modelo usado en este trabajo constituye una herramienta de gran utilidad para evaluar el lenguaje VHDL (Very High Speed Integrated Circuit Hardware Description Language) es un lenguaje de descripcin de hardware estructurado para modelar sistemas digitales. Nos permiti programar una lgica digital en un lenguaje de descripcin de hardware utiliza fundamentos tericos de sistemas digitales. Las modificaciones en el diseo es flexible, es decir no necesitan un esfuerzo adicional notable con respecto a los desarrollos de hardware convencionales. Son herramientas de diseo confiable y automatizada. FPGA son dispositivos lgicos de propsitos general programables por los usuarios. mircoles, 9 de enero de 2008

DSP

Un DSP de coma fija integrado en FPGAaplicado en Electrnica de Potencia


Abstract - Este artculo presenta el procesador "DSPuva16", desarrollado especficamente para aplicaciones de Electrnica de Potencia Como indica su nombre, este procesador est orientado al clculo: opera en

coma fija de 16 bits extendiendo su precisin hasta 24 bits. Ejecuta regularmente operaciones MAC entre registros internos (rD = rD rS * rT) alcanzando 10 MIPS a 40 MHz. Este procesador ha sido probado fsicamente sobre un sistema de desarrollo para FPGA.

La aplicacin de este procesador en Electrnica de Potencia (sistemas de microgeneracin fotovoltaica, filtros activos, control de motores de alterna, etc.) resulta bastante natural porque todas las magnitudes empleadas estn limitadas en rango. Adems, es posible utilizar diversos procesadores, con ciclos de trabajo entre 5 y 100 microsegundos, para ejecutar los diversos bucles de regulacin y control de cada equipo. Keywords: Procesador I empotrado, . DSP, Circuitos de Control. INTRODUCCIN.

Los primeros dispositivos empleados para controlar convertidores electrnicos de potencia eran circuitos analgicos basados en amplificadores operacionales [7]. Cuando aparecieron los primeros microprocesadores y stos tuvieron suficiente potencia de clculo, fueron inmediatamente implantados en los circuitos de control [5] sustituyendo a sus equivalentes analgicos por sus inherentes ventajas de estabilidad, inmunidad al ruido y facilidad de ajuste.

Posteriormente se desarrollaron los procesadores digitales de seal (DSP), con una capacidad de clculo muy superior, lo que permiti un control ms preciso y alcanzar unas prestaciones notablemente superiores [2]. Actualmente estamos en un punto en el que es patente que no es suficiente controlar todo el sistema con un nico procesador: se requiere controlar mltiples bucles de regulacin, algunos de los cuales se han de ejecutar a muy altas frecuencias (cercanas al microsegundo) [6], y adems se ha de atender al usuario (teclado, display, modem, servidor web para monitorizacin y configuracin remota) con un comportamiento cada vez ms exigente.

La solucin ms sencilla a este problema consiste en usar varios procesadores para atender las diversas tareas, pues no slo resulta ms barato y fcil de controlar que un nico procesador de muy altas prestaciones, sino que adems es la nica manera de garantizar que el control se realiza en tiempo real. Pero, qu ocurre si se evala la posibilidad de conectar varios procesadores en una tarjeta de circuito impreso? Pues que inmediatamente nos encontramos con nuevos problemas: se requiere un elevado nmero de pistas para el flujo de datos entre procesadores, pues los canales serie estndar no siempre son suficientes; se necesitan elementos intermedios adicionales para acomodar las distintas velocidades de trabajo; los componentes empleados se vuelven rpidamente obsoletos, lo que obliga a redisear equipos completos. Todo esto conduce inevitablemente a unos costes elevados de ingeniera no recuperables. El panorama es completamente distinto si se utilizan procesadores empotrados (embedded). Posiblemente

sus prestaciones no sean tan buenas como las de sus homlogos dedicados, pero al estar todos integrados en un nico chip (FPGA o ASIC) desaparecen inmediatamente todos los problemas anteriores: la comunicacin entre procesadores es flexible e inmediata empleando memorias de doble puerto [4], su uso dentro de estos componentes apenas afecta al coste del conjunto [1], y la obsolescencia es nula ya que el diseo realizado siempre puede ser recompilado sobre otro dispositivo ms moderno que, adems de tener mayor capacidad, podr funcionar a una frecuencia igual o mayor que la especificada para el componente anterior. La principal limitacin que nos encontramos, sobre todo en el mbito de las FPGA, es la imposibilidad de usar unidades de clculo en coma flotante, pues resultan prohibitivas mientras no se integren a travs de mdulos cableados. Sin embargo, ya un que resulta ms cmodo el uso de la coma flotante en aplicaciones de potencia, tambin es posible y no resulta excesivamente complejo el uso de aritmtica en coma fija: todas la magnitudes (tensiones, corrientes, ganancias de reguladores) estn limitadas, de forma natural como ocurre con las tensiones, o por imposicin del algoritmo de control que no puede permitir sobrecargas en el sistema [6]. Por tanto, en este tipo de aplicaciones es normal el uso de varios procesadores de clculo en coma fija y la incorporacin de alguno de propsito general, para atender al usuario. La comunicacin entre ellos en un dispositivo FPGA o ASIC no resulta costosa, pues apenas existen restricciones en el nmero de lneas, ya que son internas, ni en el ancho de banda ni en el tipo de recurso intermedio, pues las memorias de doble puerto apenas ocupan espacio. En este artculo se presenta un DSP en coma fija de suficientes prestaciones y pequeo tamao, preparado para manejar un conjunto reducido de variables. Se ha diseado con la idea de que es mejor emplear varios procesadores que resuelvan tareas distintas, pero acopladas, que un nico procesador que haga todo el trabajo, lo que obligara a emplear una frecuencia de reloj considerablemente mayor y un complejo esquema de interrupciones. En cambio, varios procesadores pueden ejecutar, a diferentes ritmos, cada uno de los distintos lazos de regulacin del sistema, y su acoplamiento resulta fcil como II se ve . en la seccin VII y se demuestra en [1].

CARACTERSTICAS

GENERALES.

El DSPuva16 es un procesador de clculo que trabaja en coma fija de 16 bits con precisin extendida de hasta 24 bits. Su arquitectura externa es tipo Harvard, pues accede por una parte a su memoria de programa (cuyo tamao vara entre 256x16 y 4Kx16, segn el modelo de procesador empleado) y por otros buses distintos a los datos (256 puertos sncronos de 16 bits).

Su operacin bsica es la multiplicacin con acumulacin, tanto positiva como negativa ("rD = rD rS * rT"), que ejecuta de forma regular en un nico ciclo de instruccin. ste se compone siempre de cuatro ciclos de reloj, como corresponde a su arquitectura RISC. Dispone de 16 registros de 24 bits, denominados de 'r0' a 'r15', que pueden ser empleados en cualquier operacin salvo 'r0', que no puede ser usado como operando. Precisamente esta caracterstica permite ampliar considerablemente las posibilidades del cdigo de instrucciones sin aadir excesiva complejidad al diseo interno del procesador: cuando se encuentra la codificacin equivalente al registro 'r0' en la ubicacin del registro 'rS', se anula el valor del operando, y cuando se encuentra en la posicin del registro 'rT', se sustituye su valor por una constante de 16 bits que se toma de la propia memoria de programa, sin retrasar la ejecucin de la instruccin. Esto permite, por ejemplo, que una misma instruccin bsica del procesador como es la suma (rD = rS + rT) permita operar con una constante inmediata (rD = rS + K) y realizar asignaciones directas a un registro (rD = 0 + rT; rD = 0 + K). Esta propiedad es ampliamente utilizada en la programacin de filtros digitales, cuya estructura general es: y(t) = c0x(t) + c1x(t T) + ... + d1y(t T) + d2y(t 2T) + ...

donde todos los coeficientes son constantes. Los accesos externos se realizan a travs de 256 puertos sncronos (cada acceso se completa en un nico ciclo de reloj) con direccionamiento directo: "pN = rS; rD = pN"; donde 'N' es cualquier valor entero entre 0 y 255. Puede parecer que este tipo de direccionamiento es menos flexible que el indirecto, pero en el campo de aplicacin de este procesador esto no supone ninguna limitacin: es habitual que los puertos se correspondan con posiciones de memoria que amplan las capacidades de almacenamiento del procesador, o que conecten con dispositivos fsicos que permitan leer o generar seales analgicas. En todo caso, el direccionamiento indirecto siempre es posible empleando un puntero externo al procesador, pero integrado en el mismo chip, pues debemos recordar que estamos trabajando dentro de una FPGA o un ASIC. El control de las subrutinas es similar al de otros procesadores, pero el usuario debe dedicar un registro para guardar y retener la direccin de retorno; luego se puede emplear ese mismo registro para efectuar el retorno al punto de llamada Si se desea llamar a una subrutina dentro de otra, siempre se puede guardar en una pila LIFO externa la direccin de retorno anterior, o bien usar otro registro para gestionar la nueva subrutina.

III. CONJUNTO DE INSTRUCCIONES.

El conjunto de instrucciones del DSPuva16, como se muestra en la tabla I, es muy sencillo. Consta nicamente de 17 instrucciones distintas, pero alcanza una notable flexibilidad gracias a cmo utiliza la codificacin correspondiente a 'r0', tal como se ha explicado en el apartado anterior.

Siempre que se llama a una subrutina se guarda la direccin de retorno (PC + 1) en un registro, que suele ser 'r0' ya que no puede ser usado como operando. Slo se dedican ocho bits para indicar la direccin de destino, lo que limita la longitud de los programas a tan slo 256 instrucciones. Aunque no parezca mucho, esto es suficiente en muchos casos, pues como se ha dicho se prefiere emplear varios procesadores ejecutando cada uno de ellos un bucle especfico de regulacin. Sin embargo, se ha ampliado el cdigo ejecutable del procesador utilizando un mecanismo sencillo y potente: se admiten hasta cinco modelos distintos de procesador ('A', 'B', 'C', 'D' y 'E'), con longitudes de programa de hasta 256, 512, 1K, 2K y 4K instrucciones. Cuando se efecta un salto absoluto (con la instruccin 'call'), slo se puede saltar a las posiciones pares cuando se emplea el modelo 'B', slo a una de cada cuatro si se emplea el modelo 'C', y as sucesivamente. Eso significa que todas las subrutinas deben estar correctamente "alineadas" en la memoria de programa, para lo cual se ha creado la directiva del ensamblador "#align", y se indica qu modelo se est utilizando a travs de la directiva "#model {A,B,C,D,E}". Los saltos condicionales son relativos, precisamente para evitar el problema que causara el alineamiento de todas las direcciones de salto. Como muchos otros procesadores, el salto se debe realizar a una posicin cercana (en un entorno de unas 128 instrucciones), y se pueden usar las condiciones tpicas dependientes del resultado anterior: 'eq', 'ne', 'gt', 'ge', 'lt', 'le', 'v' y 'nv'. Estas mismas condiciones pueden ser usadas para realizar asignaciones condicionales, como ocurre en "rN = rN; iflt rN = -rN", que calcula el valor absoluto de un nmero guardado en un registro.

Las lecturas (rD = pN) y escrituras (pN = rS) sobre puertos externos utilizan nicamente el modo de direccionamiento directo. Esto es adecuado en este procesador, pues est orientado a manejar un conjunto reducido de variables, aplica siempre y de forma regular el mismo algoritmo sobre los mismos datos, y emite siempre el mismo nmero de resultados. Los accesos son sncronos y se ejecutan en un nico ciclo de reloj. Esto tampoco supone ninguna limitacin, pues los recursos con los que se tiene que comunicar estn

implementados con la misma tecnologa, al estar en el mismo chip, y por tanto pueden trabajar a la misma frecuencia de reloj. Las instrucciones que realizan productos, sumas y restas, y las operaciones lgicas, tienen una estructura regular de dos operandos y un registro de destino. Como ya se ha dicho, se amplan las posibilidades del conjunto de instrucciones permitiendo la anulacin del primer operando ('rS') y la sustitucin del segundo ('rT') por una constante de 16 bits ('K'). De esta manera, se pueden aplicar mscaras lgicas inmediatas (rD = rS and/or/xor K), se puede negar el contenido de un registro (rD = 0 nor rT) y se puede inicializar cualquier registro con una constante (rD = 0 + K).

La operacin ms importante de este procesador, y su razn de ser, es el producto en coma fija, con o sin acumulacin. En general, se toman dos operandos de 16 bits en formato normalizado <1.15> (un bit entero que contiene el signo y 15 bits fraccionarios, lo que permite representar nmeros entre -1.0 y +0.99996948), entregando un nmero de 24 bits tambin normalizado (un bit entero de signo y 23 bits fraccionarios, lo que se denota como <1.23>, y que permite representar nmeros entre -1.0 y +0.99999988). Cuando al producto le sigue una acumulacin, tanto positiva como negativa, esta ltima operacin se hace con operandos de 24 bits, para no perder precisin.

Tambin se ha incorporado un tipo de producto (rD = rS x rT) que permite realizar desplazamientos. El segundo operando se interpreta en formato <8.8>, es decir, ocho bits de parte entera y otros ocho de parte fraccionaria, con lo que se puede representar, entre otros, nmeros como 1/128, 1/64, ..., 1/4, 1/2, 2, 4, ..., 32 y 64, adems de otros valores intermedios. El resultado se produce igual que antes en formato normalizado <1.23>. Otras instrucciones tpicas se han implementado como "macros" reconocidas por el lenguaje ensamblador. La macroinstruccin 'nop', que no debe hacer nada, se sustituye por "r1 = r1 or r1" y la macroinstruccin 'break', que permite introducir puntos de parada en el simulador, se reemplaza por "r1 = r1 and r1". El emulador no dispone de puntos de parada.

IV. CICLO DE INSTRUCCIN.

Como hemos indicado, la arquitectura interna de este procesador es RISC. Eso significa que ejecuta todas sus instrucciones de forma regular, en particular en cuatro ciclos de reloj. Aunque, desde el punto de vista del usuario, todas las instrucciones se ejecutan en cuatro ciclos, realmente existe cierto solapamiento entre instrucciones, y de hecho muchas instrucciones se terminan cuando ya se est ejecutando la siguiente. En cualquier caso, slo se produce un nico efecto de "latencia" que ser explicado ms tarde. Todas las instrucciones comienzan leyendo de la memoria de programa el cdigo de la operacin que se debe realizar, dedicando a esta funcin los dos primeros ciclos de reloj.

Despus de emplean otros dos ciclos para leer los operandos, 'rS' en primer lugar y despus 'rT'. Este ltimo es sustituido por una constante leda de la memoria de programa si se hace referencia a 'r0'. Por ltimo, en el primer ciclo de la siguiente instruccin, se realiza la operacin solicitada y se almacena el resultado en 'rD'.

1) 2) 3) 4) Lee

Enva Recoge Lee rT el rS

PC sobre RegT

a cdigo y un

la de lleva la el

memoria instruccin valor de acumulador

de sobre ACC a intermedio

programa. IR. ACC. RegS.

sobre

1') Guarda en 'rD' la operacin entre RegS y RegT.

El contador de programa PC se incrementa durante la fase '2' y, si se lee una constante de la memoria, tambin durante la fase '4'. Si la operacin requiere un salto ('call', 'ret', 'jpFlag'), no se guarda ningn resultado de ninguna operacin, sino que nicamente se modifica el contador de programa durante la fase '4'.

Con este esquema tan sencillo es posible ejecutar todas las instrucciones salvo las de producto. Como veremos enseguida, el multiplicador de este procesador requiere cuatro ciclos de reloj para completar su operacin, pues as puede tener un tamao mucho menor1 y no deteriora la frecuencia de trabajo del conjunto. Para efectuar las multiplicaciones, con o sin acumulacin, se emplean los cuatro ciclos de la siguiente instruccin y otros dos de la posterior:

1) 2) 3) 4) 1') 2') 3') 4') 1") Lee

Enva Recoge Lee rT Primera Segunda Tercera Cuarta Ciclo el rS

PC

a cdigo sobre RegT del del del del por y

la de el lleva MAC MAC MAC MAC la el la

memoria instruccin registro valor usando usando usando usando segmentacin de RegS RegS RegS RegS

de sobre ACC y y y y a intermedio

programa. IR. ACC. RegS. RegT. RegT. RegT. RegT. multiplicador.

sobre fase fase fase fase adicional

del

2") Lee 'rD' y opera con el resultado del MAC.

De esta manera se introduce una latencia que habr de tener en cuenta el programador: el resultado de un producto no est disponible para su uso general en la instruccin siguiente, sino en la inmediatamente posterior. En cambio, cuando se utiliza en posicin acumuladora se evita la latencia, pues la acumulacin tambin r1 = se lleva 0.27 a cabo // un ciclo Se tarde. asigna Esto un se ilustra valor en el al siguiente registro ejemplo: r1

r2 r3 r3 nop

= = = //

r1 r1 r3 +

+ * r2 Se

0.32 r2 * espera //

// Se // a r2

Correcto, multiplican El que uso

pues los termine

ya

se valores de el

dispone de r3 clculo r1 es

de y de

r1 r2 r3

acumulativo

correcto

p4 = r3 // Ahora, y no antes, r3 vale r1*r2+r2*r2

Por tanto, cuando se quiere usar el resultado de un producto, salvo cuando se hace en posicin acumuladora, hay que aadir un 'nop' despus de la multiplicacin para dar tiempo a que se calcule el resultado. sta es la nica latencia que introduce la arquitectura segmentada de este procesador.

V. ARQUITECTURA INTERNA.

El DSPuva16 ha sido descrito usando Verilog y se basa, como muestra esquemticamente la figura 2, en una arquitectura RISC de dos buses de 24 bits, uno para los operandos y el otro para los resultados.

El contador de programa ('PC') tiene entre 8 y 12 bits, segn el modelo de procesador implementado. El cdigo de instruccin que se recibe a travs de 'IR' tiene siempre 16 bits. Empleando este valor, un decodificador de instrucciones segmentado va activando cada parte del circuito hasta completar cada operacin. El banco de registros, que retiene los valores de 'r0' a 'r15', es una memoria con escrituras sncronas y lecturas asncronas de tamao 16x24. Ocupa slo 24 celdas bsicas en algunos dispositivos FPGA, lo que equivale al 5% de todo el procesador. La ALU, por su parte, se compone de tres unidades que realizan operaciones lgicas, aritmticas o multiplicativas. Despus de cada instruccin se actualizan los flags de "cero" ('Z'), "signo" ('S') y "desbordamiento" ('V') que permiten efectuar las asignaciones y los saltos condicionales correspondientes. No se dispone de acarreo ('C') pues no es necesario en los programas que se han de ejecutar.

Cuando se intercambian datos con elementos externos se utilizan dos buses distintos, uno para enviar datos y otro para recibirlos, lo que evita algunos buffers triestado que, por otra parte, son innecesarios dentro de un chip.

A. Arquitectura de dos buses.

Muchos procesadores RISC tienen actualmente tres o ms buses, lo que permite incluso realizar todas las operaciones relativas a cada instruccin en un nico ciclo de reloj. Ya que este procesador necesita cuatro ciclos de reloj para completar cada multiplicacin, y que el uso de un tercer bus nos conducira a emplear memorias de doble puerto para el banco de registros2, se ha optado por dedicar un nico bus para los operandos. Por este bus circulan los valores de 'rD' durante los dos primeros ciclos de cada instruccin y los valores de 'rS' y 'rT' durante los dos ltimos.

El bus de resultados se dedica a recoger las salidas de las diferentes unidades de clculo y de otras fuentes, como son la entrada de datos externos cuando se lee de un puerto y el valor del contador de programa cuando B. se llama a una subrutina, para guardar de la direccin de retorno en un registro. etapas.

Multiplicador

cuatro

La operacin central de este procesador es la multiplicacin. Opera sobre dos valores de 16 bits y emite un resultado de 32, de los cuales slo estn disponibles finalmente 24. En general los operandos estn en formato <1.15> y el resultado en formato <1.23>. Para construir el multiplicador se ha decidido dividir la operacin en cuatro etapas3, multiplicando en cada paso un operando de 16 bits por otro de slo cuatro bits, y emitiendo un resultado intermedio de 20 bits. Esta operacin se puede realizar con cuatro sumadores y con un registro intermedio de segmentacin. Si toda la operacin se realizara en un nico paso se necesitaran 15 sumadores ocupando una superficie cuatro veces superior, y slo se conseguira mantener la frecuencia de trabajo introduciendo registros intermedios, que no reduciran el tamao del conjunto.

VI.

ENTORNO

DE

DESARROLLO.

El entorno de desarrollo integrado de este procesador, denominado "IDEuva16", se corresponde con las necesidades que se encuentran cuando se aplica al control de convertidores electrnicos de potencia. Los programas tpicos que tiene que ejecutar este procesador suelen tener entre cincuenta y mil instrucciones, que se corresponden con los 5 a 100 microsegundos tpicos de sus ciclos de trabajo. Por tanto, la programacin en lenguaje ensamblador es suficiente.

En todo caso, la sintaxis empleada por las instrucciones es bastante cmoda, como se ha podido apreciar hasta ahora. El programa IDEuva16 se ejecuta en modo grfico4 e incorpora un editor sencillo, un ensamblador con preprocesador, un simulador y un enlace con el procesador fsico para controlarlo en modo emulador, a travs del puerto paralelo del ordenador o por conexin USB. En la figura 4 se muestra el resultado de una simulacin en la que se calcula "r2 = sin(r1); r3 = cos(r1)" con un ngulo "r1 = 0.4". Todo el proceso se ejecuta en 14 microsegundos.

Despus de editar el cdigo fuente ensamblador, donde se dispone de las tpicas directivas "#include", "#define", "#ifdef", etc., se realiza el ensamblado simplemente pulsando un botn. El proceso tarda apenas unos segundos. Despus se puede simular paso a paso o hasta una instruccin 'break'; tambin se pueden ejecutar miles o cientos de miles de instrucciones en un solo paso, pues los tiempos que se necesita simular son en general de varios milisegundos. El proceso completo de simulacin suele tardar unos minutos empleando un Pentium 4. La ventaja que tiene este modo es que se ve completamente cmo se comporta el procesador, incluso grficamente a travs de una ventana sobre la que se puede ir volcando los resultados (usando los puertos 'p0' a 'p15').

Cuando los algoritmos son suficientemente estables se puede pasar al "modo emulador": se sintetiza e implementa un DSPuva16 sobre una FPGA, que se conecta al ordenador a travs de un interfaz adecuado. El propio entorno de desarrollo transfiere a la memoria de programa del DSP el producto del ensamblado, y luego se controla su estado de reset-run. Cuando el usuario detiene el procesador se capturan los resultados intermedios o finales emitidos por ste a travs de algunos de sus puertos, visualizndolos en la pantalla del ordenador. La diferencia entre la simulacin y la emulacin es que la primera se hace completamente en el ordenador, mientras que la segunda se ejecuta en tiempo real sobre el equipo fsico, implantado de momento en una FPGA5. VII. SISTEMAS MULTIPROCESADOR.

La principal ventaja de este DSP es su reducido tamao: apenas ocupa el 12% de una FPGA de 200K puertas. Esto significa que, aunque un nico DSP no pueda realizar toda la tarea de control, no es demasiado costoso aadir otros hasta alcanzar las prestaciones deseadas. En una aplicacin de potencia que se est desarrollando, y en la que se est empleando este DSP como elemento de control, es necesario sincronizar un equipo fotovoltaico con la red elctrica y regular las potencias activa y reactiva que se intercambian; esta tarea la realiza un primer DSP con un ciclo de trabajo de 25 microsegundos. Tambin es necesario controlar las corrientes del equipo y la frecuencia de conmutacin de los polos de potencia, y esto se ha de realizar al menos cada 5 microsegundos; esta tarea la realiza un segundo DSP.

Actualmente se ha emulado el comportamiento del circuito elctrico cada microsegundo con un tercer DSP que opera en 60 microsegundos6, y todo dentro de una nica FPGA empleando en total unas 100K puertas equivalentes. Para la comunicacin entre procesadores en este mbito se han usado memorias de doble puerto[4], aunque no est limitado a este procedimiento: un DSP lee y escribe por un puerto de la memoria, mientras otro DSP lee, pero no puede escribir. Para cada DSP los intercambios son accesos normales a puertos (rD = pN; pN = rS). Empleando este recurso, que ocupa muy poco espacio en una FPGA, no es necesario preocuparse de ningn tipo de conflicto en la comparticin de recursos: ambos procesadores pueden usar la memoria comn en cualquier momento. Tampoco es necesario sealizar o sincronizar las transferencias, pues la frecuencia natural de las seales compartidas es muy inferior al ciclo de trabajo de

los procesadores, por lo que apenas importa que los valores ledos por el procesador de destino se correspondan VIII. con los valores actuales o los anteriores, emitidos por el otro DSP.

CONCLUSIONES.

En este artculo se ha mostrado cmo es el procesador DSPuva16 y cmo, a pesar de sus limitadas caractersticas, puede resolver fcilmente problemas complejos de control en tiempo real, simplemente aadiendo tantos procesadores como se necesite, pero siempre dentro de un chip Su principal limitacin es que opera con pocos datos y en coma fija, pero como hemos visto eso no supone ningn problema en el control de convertidores electrnicos de potencia, pues todas las magnitudes fsicas son fciles de normalizar y no es difcil garantizar que se van a mantener dentro de un determinado rango, salvo situaciones de avera que provocaran la parada del equipo. El DSP completo, descrito en Verilog, ocupa unas 24.000 puertas equivalentes.

Informacion complementaria.

Toda la informacion antes presentada fue obtenida de un paper de la SAAEI 2005 realizada por:

Santiago Departamento

de

Pablo, de

Jess

Cebrin, Tecnologa

Luis

C.

Herrero Electrnica

Universidad de Valladolid Valladolid (Espaa) sanpab@eisuva.es Alexis by Rey Dpto Electrnica, Tecn. de Computadoras y Proyectos Universidad Politcnica de Cartagena Cartagena, Murcia (Espaa) alexis.rey@upct.es

y a continuacion se presenta el complemento de dicha informacion.

INTRODUCCION El procesamiento digital de seales, es una herramienta tecnolgica importante, para dar forma a la ciencia de la ingeniera del siglo XXI. Como consecuencia, se han generado revolucionarios cambios como: telecomunicaciones, imgenes medicas, radar, sonar, y audio de lata fidelidad, entre otros.

Cada rea especfica ha desarrollado sus propios algoritmos, consideraciones matemticas y tcnicas especializadas, procurando obtener un mejor desempeo de aplicaciones. Por tanto, puede dividir se la tarea del conocimiento en PDS como: aprendizaje de concepciones generalizadas para obtener una idea global, seguida de particularizacin para la solucin requerida.

El desarrollo fundamental de seales, se desarrolla fundamentalmente a partir de operaciones matemticas, a diferencia de otras disciplinas basadas en almacenamiento de datos. Por tanto, los elementos de clculo diseados para aplicaciones generales, no representan ptimos desempeos en procesos que implican filtracin o anlisis de Fourier.

Adicionalmente, las exigencias actuales a nivel de almacenamiento y velocidades de operacin en procesos robustos de seal, han impulsado el desarrollo de nuevas tecnologas. Es por este motivo que fabricantes como: Motorola, Analog Devices y Texas Instruments, se han dado la tarea de desarrollar dispositivos especializados Qu DSP = es Digital para un Signal PDS. DSP? Processor

Procesador de propsito particular (dedicado), con caractersticas especiales a nivel estructural, que permiten maximizar su rendimiento en trminos de capacidades de memoria y velocidad de proceso. Diagrama (Colocar) DSP vs. P. de bloques conceptual de un sistema tpico.

En un microprocesador es posible encontrar una memoria lineal, en la que se almacenan tanto datos como instrucciones de programa. Esto obliga a generar rutinas que no sobrepasen lmites de tamao ya que podran sobreescribirse datos por instrucciones o viceversa.

Un DSP posee dos bloques separados e independientes de memoria, cada uno con su propio bus de acceso facilitando el direccionamiento de instrucciones y datos en un mismo ciclo de reloj.

Otra diferencia importante, (aun entre DSP's) es la cantidad de unidades de ejecucin que poseen, las cuales son capaces de realizar operaciones en paralelo. Por ejemplo, adems de la tpica ALU, un DSP posee bloques MAC de multiplicacin y acumulacin. Se encuentran tambin bloques solo para corrimientos (shifters).

Una unidad funcional rpida que puede multiplicar y acumular en un ciclo de instruccin. Un ciclo de instruccin puede durar generalmente 1 o 2 ciclos de reloj. Disponibles en DSP's de punto fijo y flotante. Varias unidades funcionales que realizan operaciones en paralelo, incluyendo accesos a memoria y clculo de direcciones. Las unidades poseen tpicamente una unidad principal (ALU) junto con dos o ms unidades de generacin de direcciones. Estas unidades funcionales poseen su propio conjunto de registros y muchas

instrucciones

se

realizan

en

un

solo

ciclo

de

reloj.

Varias unidades de memoria on-chip (generalmente 2 o 3) usadas para almacenar instrucciones, datos o tablas. Cada unidad de memoria puede ser accesada una vez en cada ciclo de instruccin. Varios buses para incrementar las tasas de transferencia hacia y desde memoria y evitar conflictos de direcciones. Arquitectura DSP.

Soporte para tipos especiales de direccionamiento, especialmente modulo y bit-reverse, requerido en el calculo de la FFT. Direccionamiento modulo es muy eficiente para la implementacin de buffers circulares. Soporte para manejo de loop con bajo costo en tiempo y manejo rpido de interrupciones, especialmente aquellas Punto que se fijo deben a y los puertos seriales. flotante.

El procesamiento digital de seales, puede dividirse en dos categoras: de punto fijo, y de punto flotante, dependiendo del formato utilizado para almacenar y manipular valores numricos en dispositivos. Caractersticas Ventajas Velocidad de Capacidad Rango de un de Complejidad relevantes. Costo. estructural. Resolucin. representacin. dinmico. proceso. DSP.

- Eficiencia de desempeo comparada con otros tipos de procesadores, debido a su condicin de uso particular. - Minimizacin en costo y riesgo, para el desarrollo de aplicaciones, consecuencia de una tecnologa con extensa (MAC) Posibilidad para ejecutar manipulacin experiencia en por de aritmtica compleja y de punto sus bases de diseo. segundo. flotante. - Soporte para ejecutar aplicaciones, con gran cantidad de operaciones de multiplicacin y acumulacin

- Entornos de programacin mas amigables (C/C++), para el desarrollo de aplicaciones en procesamiento de seales. Disponibilidad de registros de algoritmos desarrollados a nivel de bibliotecas.

Algunos 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Los

de

los

ejemplos

de

los

usos Wireless

de

DSP's

en

la

actualidad

son: LAN

Reconocimiento Manejo Reproductores Mdems Cmaras Control Manejo de Automatizacin bombas, Inversores de de de digitales Telfonos

de imgenes de

Voz digitales. audio. celulares. inalmbricos. digitales. motores

ventiladores,

HVAC. industriales. fbricas. Transporte.

DSP se c2x c5x c6x : divide en : 3

de lneas

Texas dependiendo Control : del campo de de alto de

instruments: aplicacin: procesos. Telecomunicaciones. desempeo. C6x

Particularmente, DSP Es Cmo Cdec 8 900 un 8 dispositivo unidades 32

Aplicaciones TI

de

punto

flotante,

que

posee

entre (6

otras ALUS's

las y

siguientes 2

caractersticas: Multiplicadores). (32-bits).

funcionales registros de 8 bits Interfase

independientes de en un de de de por estreo se de

propsito punto flotante ciclo 32

general por de bits 32 para puerto bits (5.5 48 por segundo

millones 6.7ns Hasta

operaciones para instrucciones

(MIPS). maquina. ciclo. bits. sobreflujo. PCI. KHz) manipula?

Direccionamiento

proteccin 16

para

audio

A travs de un interfaz Windows, denominada "Codec Composer Studio", se realiza comunicacin con el dispositvo de hardware, utilizando como base el conjunto de comando ansi C.

Adicionalmente, pueden realizarse aplicaciones un tiempo real gracias a un kernel desarrollado para tal fin (DSP Bios), y a una poderosa herramienta o de comunicacin (RTDX). C?

Assembler

Los DSP's, se programan en los mismos lenguajes que otras aplicaciones cientficas o de ingeniera. Usualmente se usa C (de fcil mantenimiento y desarrollo) o ensamblador (para aplicaciones rpidas). Conclusiones Un procesador digital de seales DSP, es un dispositivo especialmente construido para realizar tareas de fuerte carga computacional en corto tiempo de proceso. Sus caractersticas especiales a nivel de arquitectura, asumen un conocimiento previo de la misma, para ejecutar aplicaciones con mximo aprovechamiento de recursos. Presentan como ventaja, la posibilidad de operar desde entornos de alto nivel, consecuencia de un enfoque vanguardista que busca facilidad de interaccin. domingo, 25 de noviembre de 2007

VHDL (Very High Speed Integrated Circuit Hardware Description Language) es un lenguaje de descripcin de hardware estructurado para modelar sistemas digitales, que vio su origen en el programa VHSIC(Very High Speed Integrated Circuit), VHDL es slo uno de un conjunto de lenguajes especializados en la descripcin de elementos de hardware como ABEL, Verilog, AHDL(Analog Hardware Description Language), entre otros; que se caracterizan por permitir implementar casi cualquier tipo de circuito lgico sin la necesidad de utilizar esquemticos pues la descripcin de los componentes y su comportamiento se hace por medio de instrucciones similares a las de un lenguaje de programacin como PASCAL o C. An cuando el estndar no coloca ninguna limitacin a la complejidad del diseo, no todos los circuitos descritos con VHDL pueden ser traducidos a una implementacin fsica posterior. Este proceso de tomar el cdigo en VHDL y generar los elementos lgicos que efectan la funcin deseada se conoce como sntesis. Las descripciones que admiten este proceso se les denomina Sintetizables.

A mediados de los aos setenta se produce una fuerte evolucin en los procesos de fabricacin de los circuitos integrados, y junto a las tecnologas bipolares, surge la MOS(metal oxide semiconductor), principalmente la NMOS(Negative-channel Metal-Oxide Semiconductor), promoviendo el desarrollo de circuitos digitales hasta la primera mitad de los aos ochenta.

Alrededor de 1981 el Departamento de Defensa de los Estados Unidos desarrolla un proyecto llamado VHSIC (Very High Speed Integrated Circuit ) su objetivo era rentabilizar las inversiones en hardware haciendo ms sencillo su mantenimiento. Se pretenda con ello resolver el problema de modificar el hardware diseado en un proyecto para utilizarlo en otro, lo que no era posible hasta entonces porque no exista una herramienta adecuada que armonizase y normalizase dicha tarea, era el momento de los HDL's (Hardware Description Language). En 1983, IBM, Intermetrics y Texas Instruments empezaron a trabajar en el desarrollo de un lenguaje de diseo que permitiera la estandarizacin, facilitando con ello, el mantenimiento de los diseos y la depuracin de los algoritmos, para ello el IEEE propuso su estndar en 1984.

Tras varias versiones llevadas a cabo con la colaboracin de la industria y de las universidades, que constituyeron a posteriori etapas intermedias en el desarrollo del lenguaje, el IEEE public en diciembre de 1987 el estndar IEEE std 1076-1987 que constituy el punto firme de partida de lo que despus de cinco aos sera ratificado como VHDL. Esta doble influencia, tanto de la empresa como de la universidad, hizo que el estndar asumido fuera un compromiso intermedio entre los lenguajes que ya haban desarrollado previamente los fabricantes, de manera que ste qued como ensamblado y por consiguiente un tanto limitado en su facilidad de utilizacin haciendo dificultosa su total comprensin. Este hecho se ha visto incluso ahondado en su revisin de 1993. Pero esta deficiencia se ve altamente recompensada por la disponibilidad pblica, y la seguridad que le otorga el verse revisada y sometida a mantenimiento por el IEEE.La independencia en la metodologa de diseo, su capacidad descriptiva en mltiples dominios y niveles de abstraccin, su versatilidad para la descripcin de sistemas complejos, su posibilidad de reutilizacin y en definitiva la independencia de que goza con respecto de los fabricantes, han hecho que VHDL se convierta con el paso del tiempo en el lenguaje de descripcin de hardware por excelencia.

VHDL es slo uno de un conjunto de lenguajes especializados en la descripcin de elementos de hardware como ABEL, Verilog, AHDL, entre otros; que se caracterizan por permitir implementar casi cualquier tipo de circuito lgico sin la necesidad de utilizar esquemticos pues la descripcin de los componentes y su comportamiento se hace por medio de instrucciones similares a las de un lenguaje de programacin como PASCAL o C. An cuando el estndar no coloca ninguna limitacin a la complejidad del diseo, no todos los circuitos descritos con VHDL pueden ser traducidos a una implementacin fsica posterior. Este proceso de tomar el cdigo en VHDL y generar los elementos lgicos que efectan la funcin deseada se conoce como sntesis. Las descripciones que admiten este proceso se les denomina Sintetizables.

VHDL es un lenguaje de tipos fuertes (strong typing) como el Ada o Pascal. Esto significa que no pueden asignarse valores a seales o variables que no sean del tipo declarado para esa seal o variable. Para poder asignar un tipo diferente, el programador debe llamar explcitamente a una funcin de conversin de tipo. Hay cuatro clases de objetos en VHDL: constantes, variables, seales y archivos. El tipo de un objeto es muy importante, ya que no solo define que valores podr tomar, sino tambin que operaciones se pueden realizar sobre l.

VHDL fue desarrollado como un lenguaje para el modelado y simulacion logica dirigida por eventos de sistemas digitales, y actualmente se lo utiliza tambien para la sintesis automatica de circuitos. El VHDL fue desarrollado de forma muy parecida al ADA debido a que el ADA fue tambien propuesto como un lenguaje puro pero que tuviera estructuras y elementos sintacticos que permitieran la programacion de cualquier sistema hardware sin limitacion de la arquitectura. El ADA tenia una orientacion hacia sistemas en tiempo real y al hardware en general, por lo que se lo escogio como modelo para desarrollar el VHDL.

VHDL es un lenguaje con una sintaxis amplia y exible que permite el modeladov estructural, en flujo de datos y de comportamiento hardware. VHDL permite el modelado preciso, en distintos estilos, del comportamiento de un sistema digital conocido y el desarrollo de modelos de simulacion.

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

Otro de los usos de este lenguaje es la sintesis automatica de circuitos. En el proceso de sintesis, se parte de una especicacion de entrada con un determinado nivel de abstraccion, y se llega a una implementacion mas detallada, menos abstracta. Por tanto, la sintesis es una tarea vertical entre niveles de abstraccion, del nivel mas alto en la jerarquia de diseo se va hacia el mas bajo nivel de la jerarquia.

El VHDL es un lenguaje que fue dise~nado inicialmente para ser usado en el modelado de sistemas digitales. Es por esta razon que su utilizacion en sintesis no es inmediata, aunque lo cierto es que la sosticacion de las actuales herramientas de sintesis es tal que permiten implementar diseos especi cados en un alto nivel de abstraccion.

La sintesis a partir de VHDL constituye hoy en dia una de las principales aplicaciones del lenguaje con una gran demanda de uso. Las herramientas de sintesis basadas en el lenguaje permiten en la actualidad ganancias importantes en la productividad de diseo.

Algunas ventajas del uso de VHDL para la descripcion hardware son: - VHDL permite disear, modelar, y comprobar un sistema desde un alto nivel de abstraccion bajando hasta el nivel de definicion estructural de puertas. - Circuitos descritos utilizando VHDL, siguiendo unas guias para sintesis, pueden ser utilizados por herramientas de sintesis para crear implementaciones de diseos a nivel de puertas.

- Al estar basado en un estandar (IEEE Std 1076-1987) los ingenieros de toda la industria de diseo pueden usar este lenguaje para minimizar errores de comunicacion y problemas de compatibilidad.

- VHDL permite diseo Top-Down, esto es, permite describir (modelado) el comportamiento de los bloques de alto nivel, analizandolos (simulacion), y redisear la funcionalidad de alto nivel requerida antes de llegar a niveles mas bajos de abstraccion de la implementacion del diseo.

- Modularidad: VHDL permite dividir o descomponer un diseo hardware y su descripcion VHDL en unidades mas pequeas.

VHDL describe estructura y comportamiento.

Existen dos formas de describir un circuito. Por un lado se puede describir un circuito indicando los diferentes componentes que lo forman y su interconexion, de esta manera tenemos especicado un circuito y sabemos como funciona; esta es la forma habitualen que se han venido describiendo circuitos y las herramientas utilizadas para ello han sido las de captura de esquemas y las descripciones netlist.

La segunda forma consiste en describir un circuito indicando lo que hace o como funciona, es decir, describiendo su comportamiento. Naturalmente esta forma de describir un circuito es mucho mejor para un

diseador puesto que lo que realmente lo que interesa es el funcionamiento del circuito mas que sus componentes. Por otro lado, al encontrarse lejos de lo que un circuito es realmente puede plantear algunos problemas a la hora de realizar un circuito a partir de la descripcion de su comportamiento.

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

Estructura: VHDL puede ser usado como un lenguaje de Netlist normal y corriente donde se especi can por un lado los componentes del sistema y por otro sus interconexiones.

Comportamiento: VHDL tambien se puede utilizar para la descripcion comportamental o funcional de un circuito. Esto es lo que lo distingue de un lenguaje de Netlist. Sin necesidad de conocer la estructura interna de un circuito es posible describirlo explicando su funcionalidad. Esto es especialmente util en simulacion ya que permite simular un sistema sin conocer su estructura interna, pero este tipo de descripcion se esta volviendo cada dia mas importante porque las actuales herramientas de sintesis permiten la creacion automatica de circuitos a partir de una descripcion de su funcionamiento.

Ejemplo basico de descripcion VHDL

Describir en VHDL un circuito que multiplexe dos lineas (a y b) de un bit, a una sola linea (salida) tambien de un bit; la se~nal selec sirve para indicar que a la salida se tiene la linea a (selec='0') o b (selec='1').

En la figura 1 se muestra el circuito implementado con puertas logicas que realiza la funcion de multiplexacion.

Figura #1. Esquema del ejemplo basico en lenguaje VHDL

Lo que se va a realizar a continuacion es la descripcion comportamental del circuito de la figura 1, y luego se realizara la descripcion estructural para ver las diferencias. Mas adelante se vera que hay dos tipos de descripcion comportamental, pero de momento, el presente ejemplo unicamente pretende introducir el lenguaje VHDL y su estructura.

La sintaxis del VHDL no es sensible a mayusculas o minusculas por lo que se puede escribir como se pre era. A lo largo de las explicaciones se intentara poner siempre las palabras claves del lenguaje en mayusculas para distinguirlas de las variables y otros elementos.

En primer lugar, sea el tipo de descripcion que sea, hay que de nir el simbolo o entidad del circuito. En efecto, lo primero es de nir las entradas y salidas del circuito, es decir, la caja negra que lo de ne. Se le llama entidad porque en la sintaxis de VHDL esta parte se declara con la palabra clave ENTITY. Esta definicion de entidad, que suele ser la primera parte de toda descripcion VHDL, se expone a continuacion:

-- Los comentarios empiezan por dos guiones ENTITY mux IS PORT ( a: IN bit; b: IN bit; selec: IN bit; salida: OUT bit); END mux;

Esta porcion del lenguaje indica que la entidad mux (que es el nombre que se le ha dado al circuito) tiene tres entradas de tipo bit, y una salida tambien del tipo bit. Los tipos de las entradas y salidas se veran mas adelante. El tipo bit simplemente indica una linea que puede tomar los valores '0' y '1'.

La entidad de un circuito es unica, sin embargo, se mostro que un mismo simbolo, en este caso entidad, podria tener varias vistas o en el caso de VHDL arquitecturas. Cada bloque de arquitectura, que es donde se describe el circuito, puede ser una representacion diferente del mismo circuito. Por ejemplo, puede haber una descripcion estructural y otra comportamental, ambas son descripciones diferentes, pero ambas

descripciones corresponden al mismo circuito, simbolo, o entidad. Veamos entonces la descripcion comportamental:

ARCHITECTURE comportamental OF mux IS BEGIN PROCESS(a,b,selec) BEGIN IF (selec='0') THEN salida<=a; ELSE salida<=b; END IF; END PROCESS; END comportamental;

Mas adelante se vera lo que hace un bloque PROCESS, de momento, y como primera aproximacion, se considerara que es una especie de subrutina cuyas instrucciones se ejecutan secuencialmente cada vez que algunas de las se~nales de la lista sensible cambia. Esta lista sensible es una lista de se~nales que se suele poner junto a la palabra clave PROCESS, y en el caso del ejemplo es (a,b,selec). Esta descripcion comportamental es muy sencilla de entender ya que sigue una estructura parecida a los lenguajes de programacion convencionales. Lo que se esta indicando es simplemente que si la se~nal selec es cero, entonces la salida es la entrada a, y si selec es uno, entonces la salida es la entrada b. Esta forma tan sencilla de describir el circuito permite a ciertas herramientas sintetizar un circuito a partir de una descripcion comportamental como esta. La diferencia con un Netlist es directa: en una descripcion comportamental no se estan indicando ni los componentes ni sus interconexiones, sino simplemente lo que hace, es decir, su comportamiento o funcionamiento.

La descripcion anterior era puramente comportamental, de manera que con una secuencia sencilla de instrucciones podamos de nir el circuito. Naturalmente, a veces resulta mas interesante describir el circuito de forma que este mas cercano a una posible realizacion fisica del mismo. En ese sentido VHDL posee una forma de describir circuitos que ademas permite la paralelizacion de instrucciones y que se encuentra mas cercana.

Elementos sintacticos del VHDL.

El lenguaje VHDL es verdaderamente un lenguaje, por lo que tiene sus elementos sintacticos, sus tipos de datos, y sus estructuras como cualquier otro tipo de lenguaje. El hecho de que sirva para la descripcion hardware lo hace un poco diferente de un lenguaje convencional. Una de estas diferencias es probablemente la posibilidad de ejecutar instrucciones a la vez de forma concurrente. Algunos de estos elementos sintacticos se muestran a continuacion:

Comentarios: Cualquier linea que empieza por dos guiones "--" es un comentario. Identificadores: Son cualquier cosa que sirve para identificar variables, seales, nombres de rutina, etc. Puede ser cualquier nombre compuesto por letras incluyendo el simbolo de subrayado "_". Las mayusculas y minusculas son consideradas iguales, asi que JOSE y jose representan el mismo elemento. No puede haber ningun identificador que coincida con alguna de las palabras clave del VHDL. Numeros: Cualquier numero se considera que se encuentra en base 10. Se admite la notacion cientifica convencional para numeros en coma otante. Es posible colocar numeros en otras bases utilizando el simbolo del sostenido "#". Ejemplo: 2#11000100# y 16#C4# representan el entero 196.

Caracteres: Es cualquier letra o caracter entre comillas simples: 'l','3','t'.

Cadenas: Son un conjunto de caracteres englobados por comillas dobles: "Esto es una cadena". Cadenas de bits: Los tipos bit y bit vector son en realidad de tipo caracter y matriz de caracteres respectivamente. En VHDL se tiene una forma elegante de definir numeros con estos tipos y es mediante la cadena de bits. Dependiendo de la base en que se especifique el numero se puede poner un pre jo B (binario), O (octal), o X (hexadecimal). Ejemplo: B"11101001", O"126", X"FE".

Operadores y expresiones.
Las expresiones en VHDL son practicamente iguales a como pudieran ser en otros lenguajes de programacion o descripcion, por lo que se expondran brevemente los existentes en VHDL y su utilizacion.

Operadores varios.

& (concatenacion) Concatena matrices de manera que la dimension de la matriz resultante es la suma de las dimensiones de las matrices sobre las que opera:

punto<=x&y mete en la matriz punto la matriz x en las primeras posiciones, y la matriz y en las ultimas.

Operadores aritmeticos. ** (exponencial) Sirve para elevar un numero a una potencia: 4**2 es 42. El operador de la izquierda puede ser entero o real, pero el de la derecha solo puede ser entero. ABS() (valor absoluto) Como su propio nombre indica esta funcion devuelve el valor absoluto de su argumento que puede ser de cualquier tipo numerico.

* (multiplicacion) Sirve para multiplicar dos numeros de cualquier tipo (los tipos bit o bit vector no son numericos).

/ (division) Tambien funciona con cualquier dato de tipo numerico.

MOD (modulo) Calcula en modulo de dos numeros. Exactamente se define el modulo como la operacion 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 division entera y se de ne como el operador que cumple: a=(a/b)*b+(a REM b), siendo la division 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 expresion. La precedencia es diferente en cada caso. Opera sobre valores numericos de cualquier tipo.

- (resta y signo negativo) Cuando va entre dos operandos se realiza la operacion de sustraccion, y si va delante de una expresion le cambia el signo. Los operandos pueden ser numericos de cualquier tipo.

Operadores de desplazamiento. SLL, SRL (desplazamiento logico 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 notacion in ja 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 numero de bits a desplazar. Por ejemplo dato SLL 2 desplaza a izquierda el vector dato, es decir, lo multiplica por 4. SLA, SRA (desplazamiento aritmetico a izquierda y derecha) ROL, ROR (rotacion a izquierda y a derecha) Es como el de desplazamiento pero los huecos son ocupados por los bits que van quedando fuera.

Operadores relacionales.
Devuelven siempre un valor de tipo booleano (TRUE o FALSE). Los tipos con los quepueden operar dependen de la operacion:

=, /= (igualdad) El primero devuelve TRUE si los operandos son iguales y FALSE en caso contrario. El segundo indica desigualdad, asi que funciona justo al reves. Los operandos pueden ser de cualquier tipo con la condicion de que sean ambos del mismo tipo. <,<=,>,>= (menor mayor) Tienen el signi cado 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 dimension de tipos discretos.

Operadores logicos.
Son NOT, AND, NAND, OR, NOR y XOR. El funcionamiento es el habitual para este tipo de operadores. Actuan sobre los tipos bit, bit vector y boolean. En el caso de realizarse estas operaciones sobre un vector, la operacion se realiza bit a bit, incluyendo la operacion NOT. Precedencia de operadores y sobrecarga La precedencia de operadores se presenta en la siguiente tabla: ** ABS NOT Maxima precedencia * / MOD REM +(signo) -(signo) +-& = /= < <= > >= AND OR NAND NOR XOR Minima precedencia Se ha visto que, por ejemplo, los operadores logicos solo operaban sobre unos tipos de datos determinados. Existe en VHDL la posibilidad de sobrecargar operadores y funciones, como se vera mas adelante, de manera que es posible extender la aplicacion de estos operadores para que trabajen con otros tipos aparte de los prede nidos. Asi, se podran redefinir los operadores logicos para que pudieran trabajar sobre enteros.

Tipos de datos.

Como en cualquier lenguaje, VHDL tiene dos grupos de tipos de datos. Por un lado estan los escalares, con los que se pueden formar el otro grupo que son los compuestos. Tipos escalares Son tipos simples que contienen algun tipo de magnitud. Veamos a continuacion los tipos escalares presentes en VHDL: Enteros: Son datos cuyo contenido es un valor numerico entero. La forma es 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 especi cando los limites 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 Este ultimo tipo viene ya prede nido en el lenguaje aunque no es muy conveniente su utilizacion, especialmente pensando en la posterior sintesis del circuito. Fisicos: Como su propio nombre indica se trata de datos que se corresponden con magnitudes fisicas, es decir, tienen un valor y unas unidades. 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 fisico prede nido en VHDL que es time. Este tipo se utiliza para indicar retrasos y tiene todos los submuultiplos, desde fs (femtosegundos), hasta hr (horas). Cualquier dato fisico se escribe siempre con su valor seguido de la unidad: 10 mm, 1 in, 23 ns.

Reales: Conocidos tambien como coma otante, son los tipos que de nen un numero real. Al igual que los enteros se de nen mediante la palabra clave RANGE, con la diferencia de que los limites son numeros reales. Ejemplos: TYPE nivel IS RANGE 0.0 TO 5.0; TYPE real IS RANGE -1e38 TO 1e38; -- Predefinido en el lenguaje Enumerados: Son datos que pueden tomar cualquier valor especi cado en un conjunto finito o lista. Este conjunto se indica mediante una lista encerrada entre parentesis de elementos separados por comas. Ejemplos: TYPE nivel_logico IS (nose,alto,bajo,Z); TYPE bit IS ('0','1'); -- Predefinido en el lenguaje Hay varios tipos enumerados que se encuentran predefinidos en VHDL. Estos tipos son: severity level, boolean, bit y character. Tipos de datos compuestos. Son tipos de datos que estan compuestos por los tipos de datos escalares vistos anteriormente. Matrices: Son una coleccion de elementos del mismo tipo a los que se accede mediante un indice. Su significado y uso no difiere mucho de la misma estructura presente en casi todos los lenguajes de programacion. Los hay monodimensionales (un indice) o multidimensionales (varios indices). A diferencia de otros lenguajes, las matrices en VHDL pueden estar enmarcadas en un rango, o el indice puede ser libre teniendo la matriz una dimension teorica infinita. Ejemplos: TYPE TYPE TYPE TYPE TYPE TYPE word IS ARRAY(31 DOWNTO 0) OF bit; transformada IS ARRAY(1 TO 4, 1 TO 4) OF real; positivo IS ARRAY(byte RANGE 0 TO 127) OF integer; string IS ARRAY(positive RANGE <>) OF character; -- Predefinido en VHDL bit_vector IS ARRAY(natural RANGE <>) OF bit; -- Predefinido en VHDL vector IS ARRAY(integer RANGE <>) OF real;

Este ultimo ejemplo, y los dos anteriores, muestran una matriz cuyo indice no tiene rango sino que sirve cualquier entero. Mas tarde, en la declaracion 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 indice. Asi dato(3) es el elemento 3 del dato. De la misma manera se puede acceder a un rango: datobyte<=datoword(2 TO 9). Tambien pueden utilizar en las asignaciones lo que se conoce como agregados o conjuntos (aggregate) que no es mas que una lista separada por comas de manera que al primer elemento de la matriz se le asigna el primer elemento de la lista, y asi sucesivamente. Veamos algunos ejemplos: semaforo<=(apagado,encendido,apagado); dato<=(datohigh,datolow); bus<=(OTHERS=>'Z'); Quiza el que se entiende menos es el ultimo donde se ha empleado la palabra OTHERS para poner todos los bits del bus a 'Z', de esta forma ponemos un ventor a un valor sin necesidad de saber cuantos bits tiene la seal. Registros: Es equivalente al tipo registro o record de otros lenguajes. Ejemplo: TYPE trabajador IS RECORD nombre: string; 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"

Declaracion de constantes, variables y seales.


Un elemento en VHDL contiene un valor de un tipo especificado. Hay tres tipos de elementos en VHDL, estan las variables, las seales y las constantes. Las variables y constantes son una cosa muy parecida a las variables y constantes que se encuentran en cualquier lenguaje. Las seales, en cambio, son elementos cuyo significado es bastante diferente y es consecuencia directa de que aunque VHDL es un lenguaje

muy parecido a los convencionales, no deja en ningun momento de ser un lenguaje de descripcion hardware, por lo que cabe esperar algunas diferencias. 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; En la ultima sentencia, la constante max size no tiene ningun valor asociado. Esto se permite siempre y cuando el valor sea declarado en algun otro sitio. Esto se hace asi para las declaraciones en packages que se veran mas adelante. 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 tambien se les puede asignar un valor inicial. VARIABLE contador: natural := 0; VARIABLE aux: bit_vector(31 DOWNTO 0); Es posible, dado un elemento previamente definido, cambiarle el nombre o ponerlenombre a una parte. Esto se realiza mediante la instruccion ALIAS que resulta muchas veces muy util. Ejemplo: VARIABLE instruccion: bit_vector(31 DOWNTO 0); ALIAS codigo_op: bitvector(7 DOWNTO 0) IS instruccion(31 DOWNTO 24); Seaales. Las seales se declaran igual que las constantes y variables con la diferencia de que las seales pueden ademas ser de varios tipos que son normal, register y bus. Por defecto son de tipo normal. Al igual que en variables y constantes, a las seales 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";

Constantes, se~nales y variables


Constantes, seales y variables son cosas diferentes. Las variables, por ejemplo, solo tienen sentido dentro de un proceso (PROCESS) o un subprograma, es decir, solo tienen sentido en entornos de programacion donde las sentencias son ejecutadas en serie, por tanto las variables solo se declaran en los procesos o subprogramas. Las seales pueden ser declaradas unicamente en las arquitecturas, paquetes (PACKAGE), o en los bloques concurrentes (BLOCK). Las constantes pueden ser habitualmente declaradas en los mismos sitios que las variables y seales. Mientras que las variables son elementos abstractos con poco signi cado fisico, las seales tienen un significado fisico inmediato y es el de representar conexiones reales en el circuito. La seales pueden ser usadas en cualquier parte del programa o descripcion 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 sincronizacion de procesos por monitorizacion para la ejecucion paralela de instrucciones. En un diseo, las conexiones fisicas entre unos elementos y otros son habitualmente declaradas como seales. Las entradas y salidas, de nidas en la entidad, son, por lo tanto, consideradas seales. Aunque estas entradas y salidas son en realidad seales, hay algunas diferencias; por ejemplo las salidas no se pueden leer, es decir, no pueden formar parte del argumento de una asignacion. De la misma manera, a una entrada no se le puede asignar un valor en la descripcion. La diferencia principal entre variables y seales es que una asignacion a una variable se realiza de forma inmediata, es decir, la variable toma el valor que se le asigna en el mismo momento de la asignacion. La seal, en cambio, no recibe el valor que se le esta asignando hasta el siguiente paso de simulacion, es decir, cuando el proceso se acaba al encontrar una sentencia WAIT dentro de un proceso sino tiene sentencias de espera. Esta forma extraa en que se les asignan valores a las seales se entendera mejor cuando se explique el signi cado de los procesos, la ejecucion concurrente y secuencial, y los pasos de simulacion.

Diferencias entre variable y seal.

Una de las cosas que mas chocan al programador experimentado con otros lenguajes, y que se enfrenta por primera vez a algun lenguaje de descripcion hardware, y mas concretamente al VHDL, es la diferencia entre seal y variable. Hasta ahora, en la ejecucion concurrente, las variables no existan y solo se disponia de las seales. En la ejecucion concurrente no hay mucha diferencia entre lo que es una seal y lo que es una variable normal y corriente en cualquier otro lenguaje. Aparentemente, cuando en la ejecucion concurrente una se~nal recibe un valor, la seal toma inmediatamente este valor. Cuando se explique mas adelante el VHDL para simulacion, se vera que este inmediatamente es en realidad un paso de simulacion, que si no se especifica ningun retraso, implicara que la seal toma ese valor en el momento de la asignacion. En realidad, lo que ocurre en la asignacion de una seal es que en el momento actual, o en el paso de simulacion actual indicamos que se quiere que, en el proximo paso de simulacion (o mas tarde si se especi ca un retraso), la seal adquiera el valor que se le esta asignando en este momento. En una asignacion concurrente esto equivale a que la asignacion se realice de forma instantanea, pero eso es debido a que cuando se acaba de ejecutar una instruccion concurrente, se pasa inmediatamente al siguiente paso de simulacion. Un bloque de tipo PROCESS es equivalente a una unica instruccion concurrente formada por numerosas instrucciones en serie. Como se trata de una unica instruccion concurrente, todas las instrucciones serie internas ocurren en el mismo paso de simulacion, y no se pasa al siguiente paso de simulacion hasta que se haya completado la ejecucion del PROCESS. Esto quiere decir que dentro de un bloque PROCESS, las seales conservan su valor y no cambian hasta que el bloque termina de ejecutarse, momento en el cual, ya tienen el valor que se les haya asignado durante la ejecucion del proceso debido a que se encontrara en el siguiente paso de simulacion. Para verlo un poco mas claro se puede decir que una seal es como una caja con dos secciones. Una, que es la seccion que se suele ver, y que es la que contiene el valor actual, y otra, separada, que contiene el valor futuro. Cuando leemos una seal estamos echando mano de la seccion donde se guarda el valor actual. Cuando se le asigna algo a una seal estamos escribiendo en la seccion dedicada al valor futuro. Solo cuando se acaba la ejecucion de la instruccion concurrente, lo que se encuentra en la seccion de valor futuro pasa a la seccion de valor actual. De ahora en adelante, a la seccion del valor futuro, donde se escriben siempre los valores, lo llamaremos driver de la seal, y a la seccion de valor actual lo

llamaremos simplemente seal. En realidad, y se vera mejor en el apartado de simulacion, hay un unico valor actual, sin embargo, pueden haber varios valores futuros ya que se puede hacer una lista de los valores que tomara la seal en el futuro. Esto, que ahora no tiene mucho sentido puesto que las seales toman su valor inmediatamente en la ejecucion concurrente, sera muy util cuando se expliquen los retrasos en la simulacion.

- Entidad: Es la declaracin de entradas /salidas de un mdulo. De acuerdo al IEEE Std 1076-2002, una entidad es la abstraccin principal de hardware en VHDL. Esta representa una parte de un diseo de hardware que tiene entradas y salidas bien definidas y realiza una funcin bien definida. Una entidad de diseo puede representar un sistema entero, un sub-sistema, una tarjeta, un chip, una macro-celda, una compuerta lgica o cualquier nivel de abstraccin intermedio. La declaracin de una entidad define la interfaz entre esta y el ambiente en el cual se utiliza. En este sentido, la entidad es una especie de bloque o caja negra que define como se ve el componente desde el exterior. La entidad define una serie de puertos que sus terminales visibles, quedando su estructura funcional oculta dentro de una o ms arquitecturas.

Declaracin de una entidad:

entity Nombre_de_la_entidad is port ( Nombre_Seal : modo tipo; Nombre_Seal : modo tipo; Nombre_Seal : modo tipo); end Nombre_de_la_entidad;

Los posibles modos de la seal son: in, out , buffer, inout. - Arquitectura: Es la descripcin detallada del comportamiento o estructura interna de un mdulo (entidad). En el estndar IEEE 1076-2002, se define Una arquitectura define el cuerpo de una entidad. Esta especifica

las relaciones entre las entradas y las salidas de una entidad, pudiendo ser expresada en trminos de estructura, flujo de datos o comportamiento. La descripcin estructural muestra a la entidad y sus componentes internos junto con las conexiones entre estos, siendo bastante similar al proceso de diseo basado en esquemticos y componentes MSI (Micro-Star International) o SSI discretos. Cuando se utiliza una descripcin de comportamiento (funcional), se especifica el algoritmo que describe la operacin del circuito en forma bastante similar a un programa. En este caso, existen diferentes procesos que se activan segn el estado de las entradas del diseo y en su interior contienen las acciones a ejecutar segn sea el requerimiento del circuito. Por su parte, la descripcin por medio de flujo de datos, establece una relacin directa entre las seales de entrada y las salidas.

La arquitectura de una entidad de mayor nivel, puede hacer uso de entidades de nivel ms bajo dentro de la estructura jerrquica, la implementacin de cada entidad puede obedecer a cualquiera de las descripciones mencionadas anteriormente, permitiendo que en mismo diseo coexistan diferentes tipos de implementaciones operando en conjunto. De esta manera, los diseos extensos pueden ser fraccionados en varias entidades que residen en diferentes archivos, cada entidad puede ser verificada, simulada y depurada de forma independiente.

Definicin de la arquitectura.

Architecture Nombre_de_la_Arquitectura of Nombre_de_la_entidad is Declaraciones de: Tipos, seales, constantes, funciones, procedimientos, componentes begin Sentencias concurrentes end Nombre_de_la_Arquitectura Instruccin de proceso: process (lista sensitiva) begin Instrucciones; end process;

Figura #2. Interfaz lgica - Entrada y salida

- Puertos: Los puertos son los puntos de conexin entre una entidad y el medio exterior. Se caracterizan por tener una representacin fsica relacionada con un terminal de entrada/salida y requerir de una definicin de sentido ya sea como entrada, salida o bidireccional.

Figura 3. Interfaz Fsica - Entrada y salida

- Seales: Son similares a una declaracin de puerto pero sin ningn modo, pueden leerse, escribirse o hacer referencia a ellas slo dentro de la arquitectura ya que son locales. Son la analoga de los cables de interconexin o seales elctricas que sern usadas dentro del circuito. En la librera IEEE 1164, se encuentran definidos varios tipos de seales que representan de forma bastante adecuada el comportamiento real de una seal digital en hardware.

Se declaran antes del BEGIN de la arquitectura y se puede usar en cualquier lugar de ella. Si va en un proceso su valor se actualiza al salir de el. La asignacin usa el smbolo <=.

- Variables: Se utilizan en las funciones, procedimientos y procesos, no tienen significado fsico pero son elementos de gran utilidad al momento de efectuar la programacin.

Se declaran y utilizan en un proceso y actualiza inmediatamente su valor asignado. La asignacin usa el smbolo :=

- Divisin del diseo principal en mdulos separado. La modularidad es uno de los conceptos principales de todo diseo. Normalmente se diferencia entre dos metodologas de diseo: top-down y bottonup. La metodologa top-down consiste en que un diseo complejo se divide en diseos ms sencillos que se puedan disear (o describir) ms fcilmente.

La metodologa botton-up consiste en construir un diseo complejo a partir de mdulos, ya diseados, ms simples. En la prctica, un diseo usa generalmente ambas metodologas.

- Simulacin funcional, es decir, comprobaremos que lo escrito en el punto anterior realmente funciona como queremos, si no lo hace tendremos que modificarlo. En este tipo de simulacin se comprueba que el cdigo VHDL o Verilog (u otro tipo de lenguaje HDL) ejecuta correctamente lo que se pretende.

- Sntesis. En este paso se adapta el diseo anterior (que sabemos que funciona) a un hardware en concreto, ya sea una FPGA (Field Programmable Gate Array) o un ASIC (Application-specific integrated circuit). Hay sentencias del lenguaje que no son sintetizables, como por ejemplo divisiones o exponenciaciones con nmeros no constantes. El hecho de que no todas las expresiones en VHDL no sean sintetizables es que el VHDL es un lenguaje genrico para modelado de sistemas (no slo para diseo de circuitos digitales), por lo que hay expresiones que no pueden ser transformadas a circuitos digitales. Durante la sntesis se tiene en cuenta la estructura interna del dispositivo, y se definen restricciones, como la asignacin de pins. El sintetizador optimiza las expresiones lgicas con objeto de que ocupen menor rea, o bien son eliminados las expresiones lgicas que no son usadas por el circuito.

- Simulacin post-sntesis. En este tipo de simulacin se comprueba que el sintetizador ha realizado correctamente la sntesis del circuito, al transformar el cdigo HDL en bloques lgicos conectados entre s. Este paso es necesario ya que, a veces, los sintetizadores producen resultados de sntesis incorrectos, o bien realiza simplificaciones del circuito al optimizarlo.

- Placement y routing. El proceso de placement consiste en situar los bloques digitales obtenidos en la sntesis de forma ptima, de forma que aquellos bloques que se encuentran muy interconectados entre si se siten prximamente. El proceso de routing consiste en rutar adecuadamente los bloques entre si, intentando minimizar retardos de propagacin para maximizar la frecuencia mxima de funcionamiento del dispositivo. - Back-annotation. Una vez que ha sido completado el placement & routing, se extraen los retardos de los bloques y sus interconexiones, con objeto de poder realizar una simulacin temporal (tambin llamada simulacin post-layout). Estos retardos son anotados en un fichero SDF (Standart Delay Format) que asocia a cada bloque o interconexcin un retardo mnimo/tpico/mximo.

- Simulacin temporal. A pesar de la simulacin anterior puede que el diseo no funcione cuando se programa, una de las causas puede ser por los retardos internos del chip. Con esta simulacin se puede comprobar, y si hay errores se tiene que volver a uno de los anteriores pasos.

- Programacin en el dispositivo. Se implementa el diseo en el dispositivo final y se comprueba el resultado.

Algunos tips a la hora de trabajar con el lenguaje VHDL.

Evitar las clusulas temporales. Normalmente los simuladores prohben expresamente el uso de asignaciones con retraso en las seales, en otras simplemente los ignoran, pero lo que est claro es que el sintetizador intentar implementar el circuito funcionalmente, por lo que estos retrasos no tienen sentido para el sintetizador. Aparte de esto, no se permiten las asignaciones mltiples, en una nica sentencia, a una seal por la misma razn.

Identificar cada puerta con claridad. Las puertas lgicas y otros elementos tienen generalmente una estructura clara e incluso se pueden utilizar comandos directos que realizan estas funciones. Evitar las sentencias de espera. En algunos sintetizadores quiz sea posible utilizar sentencias de espera WAIT dentro de los procesos, pero no es nada aconsejable puesto que la herramienta puede tener dificultades en interpretar estas sentencias. Es aconsejable en cambio el uso de listas sensibles, y en muchos sintetizadores es casi la nica posibilidad. El uso del WAIT est bastante restringido, as, si se usa, algunas herramientas exigen que sea la primera instruccin del PROCESS, y slo se permite una condicin. Cuidado con las listas sensibles. La mayora de sintetizadores admiten la lista sensible o una sentencia WAIT al principio, pero no siempre la

interpretan como lo har un simulador ya que en determinadas ocasiones el proceso se ejecutar cuando cambia una seal que se encuentra en el proceso pero no en la lista sensible o en el WAIT.

Permitir discrepancia. Normalmente es fcil sintetizar algo simple como s<=NOT s ya que no es ms que una puerta inversora conectada sobre si misma que puede servir muy bien para generar una seal de reloj con periodo el doble que el retraso que la puerta presente. Si se intenta simular algo como la instruccin anterior, se comprobar que la simulacin se queda colgada en esa instruccin puesto que no hay retrasos y se llama a s misma una y otra vez. Por lo tanto, en estos casos, aunque la simulacin es incorrecta, la sntesis lo es.

Seales de reloj. Normalmente slo se permite una seal de reloj por proceso, y adems debe especificarse claramente el flanco de subida del reloj mediante la condicin clk='1' AND clk'EVENT. En general slo puede ponerse esta condicin una vez por proceso y en ningn caso se puede poner ELSE en el IF en el que se us a condicin

Asignaciones nicas. Aunque en simulacin es bastante corriente que a una seal se le asignen varios valores a lo largo de un mismo proceso, en sntesis esto resulta difcil de interpretar y no debe usarse (normalmente no se permite).

Evitar IFs anidados. Normalmente las herramientas tienden a no sintetizar de manera ptima varios condicionales anidados entre s. Los condicionales es mejor utilizarlos a solas.

Utilizar CASE mejor que varios IFs Las estructuras CASE tienen para los sintetizadores un modelo optimizado de sntesis, generalmente mejor que lo mismo descrito mediante IFs.

Utilizar el estilo indicado para las mquinas de estado Muchos de los problemas digitales se pueden resolver de forma sencilla mediante una mquina de estados. En VHDL hay muchos estilos diferentes para poder describir mquinas de estados, entonces a veces ocurre que el sintetizador no se da cuenta de que lo que tiene delante es una mquina de estados y no optimiza bien el circuito resultante. En los manuales de los sintetizadores suelen venir ejemplos de lo que la herramienta entender que es una mquina de estados, entonces es mejor utilizar ese estilo aunque no nos resulte cmodo, el resultado final ser bastante ms ptimo.

Especificar la arquitectura. Es posible que se creen varias descripciones para un mismo circuito. Normalmente el sintetizador coger la primera que le parezca, por lo que conviene especificar cul de todas las arquitecturas se desea sintetizar mediante un bloque de configuracin CONFIGURATION.