Redeya.com
Introducción a los D.S.P
Autores:
Juan Antonio Rubia Mena masamue2001@teleline.es
Jesús de la Casa Cárdenas casacar@ujaen.es

Indice


1. Introducción

Actualmente los D.S.P. (Digital Signal Processor) se están convirtiendo en elementos muy comunes en el diseño electrónico, sustituyendo en algunas aplicaciones a los microprocesadores y microcontroladores. Principalmente encontraremos D.S.P. en circuitos relacionados con las telecomunicaciones, sistemas de audio y en algoritmos avanzados de control de motores. Por ejemplo, podemos encontrar D.S.P.. como integrantes de estas aplicaciones :

  • Tarjetas con múltiples puertos serie en servidores para proveedores de acceso a Internet
  • Compresión de voz en telefonía móvil
  • Filtros complejos de sonido
  • Líneas de retardo
  • Generadores de eco
  • Reconocimiento de señales DTMF
  • Decodificación de canales en telefonía celular (GSM)
2. El D.S.P. de cerca

Los D.S.P. , al igual que los microprocesadores, son sistemas programables que nos permiten implementar muchos tipos de aplicaciones en función de las posibilidades del sistema y, por supuesto, de las habilidades del programador. Desde el punto de vista de la arquitectura interna, podemos decir que un D.S.P.. es un microprocesador (o un microcontrolador, como ya veremos) optimizado internamente para realizar los cálculos necesarios para implementar algoritmos de proceso de señal. Esta optimización se consigue mediante algunos aspectos principales:

  • implementación de operaciones por hardware
  • instrucciones poco comunes que ejecutan varias operaciones en un solo ciclo
  • modos de direccionamiento especiales
  • memoria de programa ``ancha'', con más de 8 bits
La implementación de algunas operaciones mediante hardware consigue mejorar la velocidad media de cálculo, que se da en MIPS o en MegaFLOPS; normalmente, las instrucciones que se implementan son aquellas que se usan más a menudo, como luego veremos. La impresionante capacidad de cálculo de un D.S.P. puede utilizarse también para implementar algoritmos digitales de control (por ejemplo, un controlador PID) y, si el coste lo permite, otras labores realizadas tradicionalmente por microprocesadores.

La ejecución de varias operaciones en un sólo ciclo es posible ya que están implementadas como circuitería adicional y no como código microprogramado en la propia unidad central. Un ejemplo típico es la instrucción MAC (multiply and accumulate) que puede realizarse como un conjunto de puertas lógicas que estarán conectadas a uno o más registros especiales del D.S.P.

Los modos de direccionamiento especiales se implementan para agilizar el tratamiento de estructuras de datos (como por ejemplo, buffers circulares) similares a las que conocemos de lenguajes de programación de nivel medio-alto. De este modo se han implementado algunos modos de direccionamiento tales como:

  • Direccionamiento circular
  • Direccionamiento con bits invertidos
  • Pre y post-modificación de los punteros de direcciones (similar al n++, ++n, n-- y --n del lenguaje C)
El uso de juego de instrucciones con palabras ``anchas'' nos permite codificar en una sola palabra datos e instrucciones, disminuyendo de este modo el número de accesos a memoria por instrucción y aumentando así el rendimiento del sistema. Este método se usa también en muchos microcontroladores actuales, como la familia PIC.

3. Arquitectura Típica de un D.S.P.

Los D.S.P. abandonan la arquitectura clásica de Von Neumann, en la que datos y programas están en la misma zona de memoria, y apuestan por la denominada ``Arquitectura Hardvard''. En una arquitectura Hardvard existen bloques de memoria físicamente separados para datos y programas. Cada uno de estos bloques de memoria se direcciona mediante buses separados (tanto de direcciones como de datos), e incluso es posible que la memoria de datos tenga distinta anchura de palabra que la memoria de programa (como ocurre en ciertos microcontroladores).


Con este diseño se consigue acelerar la ejecución de las instrucciones, ya que el sistema puede ejecutar simultáneamente la lectura de datos de la instrucción ``n'' y comenzar a decodificar la instrucción ``n+1'', disminuyendo el tiempo total de ejecución de cada instrucción.

Para ver esto más claro, pensemos en un microprocesador clásico, cuyo ciclo de trabajo es:

  • leer la posición de memoria apuntada por el contador de programa
  • decodificar la instrucción
  • ejecutar la instrucción
En la ejecución de la instrucción se dan estos pasos:
  • leer los datos de memoria
  • operar con ellos
  • dejarlos en la RAM
Por tanto, podemos ver que durante la lectura de los datos de una instrucción el bus está ocupado y no podría ser usado por otra unidad de decodificación, como aparece en muchos microprocesadores modernos, en los que se realizan simultáneamente la ejecución de la instrucción n y la decodificación de la instrucción n+1.

Normalmente en los D.S.P. se usa una arquitectura Hardvard modificada con 3 buses: uno de programa y dos de datos, lo cual permite que la CPU lea una instrucción y dos operandos a la vez (pero no dos posiciones de memoria a la vez, para lo que hace falta una RAM de doble puerto). En el proceso de señales, las operaciones con 2 operandos son muy comunes, motivo por el cual se hace esta modificación.

También es bastante común encontrar un solapamiento entre la ROM y la RAM de datos, de modo que podemos usar parte de la ROM de programa para almacenar coeficientes y leerlos en la RAM de datos, sin tener que usar instrucciones específicas para leer los datos almacenados en ROM, como ocurre en algunos microcontroladores, como la familia 8051, que posee la instrucción instrucción MOVX para tal fin.

4. La unidad aritmético-lógica de los D.S.P.

En el proceso digital de señales, una de las operaciones más comunes es el cálculo de sumas de productos, que también se usa bastante en sistemas digitales de control, por lo que cualquier mejora en esta zona mejorará el rendimiento global del circuito.

La multiplicación es una operación que es fácil de programar, aunque por su carácter iterativo es de una duración considerable. Así, por ejemplo, en un microprocesador 8086, una suma necesita 3 ciclos de reloj, mientras que una multiplicación en punto fijo puede necesitar unos 130-160 ciclos de reloj. En tareas normales, la multiplicación apenas supone el 1% del total de las operaciones, por lo cual los microprocesadores no suelen incorporar esta operación; pero en el proceso digital de señales es una de las operaciones principales, por lo cual se hace imprescindible la presencia de un multiplicador que la realice en el menor tiempo posible. Otra característica interesante de los D.S.P. es la existencia de dos unidades aritmético-lógicas, una general y otra de tipo específico. Estas dos unidades son:

  • La unidad central aritmético - lógica
  • La unidad generadora de direcciones
La unidad central aritmético-lógica se encarga de todos los cálculos, excepto los referentes a direcciones efectivas en direccionamiento indexado. En un microprocesador normal, las instrucciones que operan con datos indexados son las más lentas, ya que la UAL primero tiene que calcular la dirección efectiva del dato en cuestión, y luego operar con él. Puesto que en el proceso digital de señales es corriente trabajar con tablas, las operaciones que trabajen con direccionamiento indexado deben acelerarse cuanto se puedan. Para este fin, el D.S.P. incorpora una segunda UAL que se encarga solamente de hacer las sumas de la dirección base con el registro índice para obtener la dirección efectiva de nuestro dato y conseguir que la UAL principal no tenga que realizarla. La UAL central es una unidad aritmético-lógica de propósito general que trabaja con palabras de 16 ó 32 bits tomadas de la memoria de datos o provenientes de instrucciones inmediatas.


Además de las instrucciones aritméticas habituales, la unidad central aritmético-lógica puede realizar operaciones booleanas, facilitando la manipulación de bits que se usa para el trabajo con números enteros con signo.

Los D.S.P. de propósito general trabajan con aritmética entera, pero también existen D.S.P. que operan en coma flotante. La salida de la UAL pasa al acumulador, que es un registro de 32 bits en el caso de un D.S.P. de 16 bits . Este registro puede dividirse en 2 segmentos de 16 bits para su almacenamiento en memoria. Para dividirlo se usan operaciones de rotación de bits, pero no las realiza la UAL ya que para este fin existe un registro de desplazamiento incorporado dentro de la UAL .

La UAL de los D.S.P.'s presenta la posibilidad de multiplicar datos. Como sabemos, realizar una multiplicación en ensamblador consume bastante ciclos de reloj, debido a las sumas y desplazamientos que hay que hacer. En cambio, un D.S.P. realiza la multiplicación en un solo ciclo ya que incorpora un multiplicador construido a base de puertas lógicas.


Normalmente la operación de multiplicación viene acompañada por la operación ``MAC'' (Multiply and accumulate) que implementa las sumas de productos que hemos visto antes y como siempre en un sólo ciclo de instrucción.

Los modos de saturación están también presentes en la UAL de un D.S.P. y se refieren a la posibilidad de configurar el comportamiento del D.S.P. cuando se produce un desbordamiento de bits en una operación aritmética; de este modo es más fácil trabajar en aritmética con signo.

5. Variaciones en la arquitectura de los D.S.P.

Una característica bastante común de los D.S.P. es su adaptación a diversas aplicaciones por parte de los fabricantes, añadiendo diversas características adicionales y periféricos, de modo que un tipo determinado de D.S.P. sea la respuesta casi perfecta a una necesidad concreta. Así, consultando los catálogos, encontraremos unos D.S.P. que se parecen bastante a un microprocesador avanzado, y otros que nos recuerdan a algunos microcontroladores de gama alta. En los D.S.P. dedicados a tareas de control, podemos encontrar los periféricos típicos de los microcontroladores, y otros no tan comunes. En concreto, podemos hallar periféricos tales como:

  • Puertos de entrada / salida
  • Patillas de interrupción externa
  • Unidades de comunicación serie (RS 232)
  • Temporizadores
  • Contadores
  • Bucles enganchados en fase (PLL)
  • Buses I2C y/o SPI
  • Convertidores A/D y D/A
  • Módulos de control de ancho de pulso
En D.S.P. más especializados podemos encontrar interfaces serie con buffer de lectura/escritura de unos 2 Kbytes, con lo cual se puede obtener una disminución bastante notable de la carga media de la C.P.U. (para comparar, basta con decir que la USART más avanzada de un PC, la 16550, tiene un buffer FIFO de 16 bytes).

El grado de especialización de los D.S.P. se puede ver en una aplicación como el control de motores, que comentaremos seguidamente.

5.1 D.S.P. para control de motores

El control de motores, (y en general todo lo relacionado con los sistemas electrónicos de potencia) es un campo al que los fabricantes de D.S.P. se están dedicando ampliamente, ya que al estar presente en casi todos los procesos industriales el desarrollo de módulos de control de potencia es una inversión segura. De este modo podemos encontrar D.S.P. con circuitería auxiliar incorporada que pueden ser una solución en una sola pastilla a algunos sistemas de control de potencia tales como:

  • Controladores de motores
  • Inversores de potencia
  • Controladores de posición
  • Impresoras y fotocopiadoras
  • Compresores de alta potencia

En un D.S.P. típico para control de motores trifásicos podemos reconocer los periféricos típicos de un microcontrolador, pero además encontraremos estos bloques:

  • Un convertidor A/D, con uno o varios canales de entrada
  • Un bloque con 6 o 12 módulos PWM
  • Un ``controlador de eventos'' que gestiona los módulos PWM
El uso de los D.S.P se justifica ya que su elevada potencia de cálculo nos permite utilizar sistemas de control con un menor grado de realimentación, puesto que se basan las curvas características del motor, que se almacenan como tablas junto al programa, y que permiten estimar el comportamiento del motor.

Los D.S.P. para control de motores presentan en su interior 6 ó 12 módulos PWM para controlar totalmente 1 ó 2 grupos de tiristores o IGBT, que se programan mediante unos registros que el D.S.P. posee al efecto y en los que especificamos el ancho de pulso o el ciclo de trabajo requerido.

No obstante, es muy corriente encontrar un módulo denominado generador de eventos, que proporciona una flexibilidad impresionante al control de los motores, ya que se encarga de sincronizar todos los módulos PWM de modo que nosotros sólo tenemos que preocuparnos de indicarle un ciclo de trabajo y él hace el resto. Además suele ir acompañado por un controlador de banda muerta que se encarga de introducir unos retardos entre las señales que atacan a los semiconductores de potencia, de modo que se evitan los cortocircuitos en los últimos por culpa de los retardos en la conmutación de los mismos.

6 D.S.P. de alto rendimiento

Para las aplicaciones más exigentes los fabricantes han desarrollado una gama de D.S.P. con una enorme capacidad de cálculo, de unos 1600 MIPS, cuando lo típico en un D.S.P. es alcanzar unos 150 MIPS como máximo.

Estos circuitos están concebidos especialmente para aplicaciones relacionadas con el mundo el las telecomunicaciones, como estaciones base de radio, servidores de acceso remoto, modems de cable o sistemas de telefonía celular.

En realidad, estos D.S.P. están formados por varias unidades funcionales (8 en el TMS 320C6201 de Texas Instruments), altamente optimizadas, que trabajan en paralelo. De este modo es posible alcanzar un rendimiento de cálculo de 1600 MIPS con un reloj de 200 Mhz.


Este circuito incorpora en su interior una memoria SRAM de 1 Mbit (y 256 bits de ancho) que se divide en 512 Kbits para datos y 512 Kbits para programa/caché. La memoria tiene una anchura de 256 bits para así poder leer 8 instrucciones de 32 bits en un solo acceso a memoria. En el caso de no disponer de suficiente memoria interna, podemos añadir memoria externa de 32 bits de ancho; en este caso la memoria interna de programa se configura para usarse como caché, de modo que no disminuya en exceso el rendimiento por usar una memoria con una anchura de palabra menor.

Para minimizar la circuitería incorporada en el D.S.P. encargada de la coordinación entre procesadores, la paralelización es responsabilidad en gran medida de las herramientas de programación, que en este caso son ensambladores y compiladores de C. Por tanto, es evidente que tendremos que usar exclusivamente las herramientas que nos proporciona el mismo fabricante, ya que de ellas depende fundamentalmente el rendimiento del sistema.

7. Conclusiones

Con la llegada de los D.S.P. se abre un nuevo campo para el diseñador de sistemas, ya que podemos implementar sistemas que requieren una gran capacidad de proceso con un coste mucho menor que cualquiera de las soluciones existentes. No obstante, no tenemos que lanzarnos alocadamente a programar D.S.P. para todas las aplicaciones, sino que debemos escoger el sistema más adecuado a nuestras necesidades, aunque ello implique el tener que desarrollar una rutina de multiplicación en ensamblador.


Página original de Http://www.redeya.com, prohibida su reproducción sin consentimiento del autor