Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Co-diseño Hardware-Software
Lino García Morales, lino.garcia@uem.es
Arthur Schopenhauer
El mundo real es analógico, pero la interacción y control sobre esta realidad, desde
hace ya mucho y por ahora, es digital (quizá en un futuro haya un retorno a la
computación analógica pero eso está por ver). Los sistemas son cada vez más
complejos porque el mundo real, en “realidad”, siempre ha sido y será mucho más
complejo de lo que consideramos. Se requieren muy diversas interfaces para capturar
y gestionar esta riqueza y una gran potencia de cálculo para procesarlas.
Cuando se plantea el diseño de un sistema de este tipo la primera pregunta que surge
es: qué puedo y debo hacer por hardware y qué por software. Esta interrogación es
válida incluso cuando toda la información es digital por naturaleza. La respuesta
claramente dependerá de qué se quiera y habitualmente estará en función de un
conjunto de variables en relación de compromiso como coste, rendimiento,
prestaciones, velocidad, tamaño, etc.
Un diseño híbrido adecuado de Flash debería utilizar su códec sólo no exista una
alternativa hardware pero no existe estándar ni voluntad entre las grandes industrias
para solucionarlo en aras de mejores prestaciones para el consumidor. Lo que hay en
juego es mucho más que esto: más del 75% de los videos en Internet se ven a través
de Flash (software instalado en el 98% de los ordenadores a nivel mundial y presente
en más de 800 millones de dispositivos móviles fabricados por 19 de los 20 primeros
fabricantes donde, por supuesto, el vigésimo es Apple). Prueba de esto es que
Universal y Time Warner se posicionan a favor de Adobe y comunican que no tienen
intención de convertir sus colecciones a H.264 porque no es económicamente viable
con Flash dominando la web.
Figura 1.La guerra Apple-Adobe no ha hecho más que comenzar.
Ingeniería de Sistemas
Figura 2. Proceso de co-diseño típico.
Figura 3. Procesadores y solución del problema. a. problema, funcionalidad deseada, b.
procesador de propósito general, c. procesador específico a la aplicación, d. procesador de
propósito específico. Un desplazamiento hacia la izquierda en la línea inferior aumenta en
flexibilidad, coste (a pequeña escala), tiempo, etc. mientras que hacia la derecha en eficiencia,
rendimiento, tamaño y coste (a gran escala), etc.
Figura 4. Fuente de sumador con signo en VHDL. El VHDL se diseñó para documentar el
comportamiento de los circuitos integrados de aplicaciones específicas (ASIC, Application
Specific IC) del Departamento de Defensa del gobierno americano.
Cada modelo tiene sus ventajas y desventajas. Ninguno es perfecto para todos los
tipos de sistemas así que se debe seleccionar aquel que mejor se ajuste a las
características específicas del sistema.
Los lenguajes de descripción del hardware, como VHDL o Verilog, difieren de los
lenguajes de programación software en detalles como las formas de describir la
propagación del tiempo y las dependencias de señal (sensibilidad). Existen dos
operadores de asignación, uno de bloqueo (=) y otro de no-bloqueo (<=); este último
permite describir la actualización de máquinas de estado sin necesidad de declarar y
usar variables adicionales. Desde su introducción, en 1984, Verilog representó un
aumento tremendo en la productividad. Los diseñadores de circuitos utilizaban un
programa de captura esquemático gráfico y los programas software escritos
especialmente para documentar y simular los circuitos electrónicos.
#include "systemc.h"
SC_CTOR(adder) // constructor
{
SC_METHOD(do_add); // registro do_add al kernel
sensitive << a << b; // lista de sensibilidad de do_add
}
};
Listado 1. Fuente de sumador en SystemC.
Partición
La partición es el proceso que decide, para cada subsistema, cómo es más ventajoso
implementar la funcionalidad requerida: por hardware o por software. Este es un
problema de optimización multi-variable que debe satisfacer las prestaciones exigidas
dentro de determinados requerimientos del sistema: tamaño, peso, potencia, coste,
etc. que, en el contexto del co-diseño, se denomina frecuentemente partición
funcional.
Existen dos enfoques básicos de división. O bien comenzar con todas las operaciones
en el software y mover algunas a hardware (por ejemplo, cuando la velocidad es
fundamental) o empezar con todas las operaciones en hardware y mover algunas a
software. Un programa de división funcional identifica los cuellos de botella de
cómputo y migra las funciones correspondientes a un hardware específico de la
aplicación. Por otra parte la migración de componentes hardware a rutinas software
pasa por la identificación de las tareas no críticas susceptibles de migrar. Esto conlleva
una reducción de tamaño y costes significativos sin reducir el rendimiento
(especificado en términos de latencia y restricciones en la velocidad de los datos).
Los sistemas híbridos no sólo deben tener en cuenta qué implementar por hardware o
por software sino también cómo comunicar ambos dominios y es que esta
comunicación introduce determinada sobrecarga que debe ser considerada.
Cuando es posible una implementación de todos los componentes del sistema sólo
con procesadores de propósitos generales (ya sean microcontroladores,
microprocesadores o procesadores digital de señal) el diseño de un sistema complejo
se convierte en un problema de integración (este concepto excluye la elaboración y
uso de procesadores específicos). Este es, sin embargo, un escenario frecuente no
menos complejo donde se puede considerar los componentes como piezas de un
rompecabezas que deben encajar perfectamente (en términos de métrica) para
conseguir el objetivo deseado. Este “encaje” pasa por unas interfaces de
comunicación bien definidas y por el uso de terminales de interacción universales o
estándares.
Conclusiones
Figura 5. Co-compilador Software-Configware. Configware significa programación
reconfigurable. Configware versus software significa programación estructural versus
programación procedimental. Configware considera ASICs, PLDs, etc.
Por último suponga que combinando estrategias automáticas y manuales (en la figura
5, por ejemplo, sólo se considera la división HW/SW automática) pueda decir qué y
cómo hacer por hardware o por software y cómo comunicarlas entre sí. Finalmente
obtendrá un sistema híbrido óptimo, susceptible de futuras implementaciones, definido
en términos no perecederos, en definitiva: un sistema eficaz resistente a la
obsolescencia tecnológica capaz de absorber la tecnología del futuro.
La computación híbrida, hoy día, parece aceptada como evidente pero aún queda
mucho por hacer y no existe, ni existirá, solución ideal ni genérica. La resistencia llega
de todas partes. El uso de meta-lenguajes no es casi nunca bien recibido por la
comunidad de programadores que lo considera un intrusismo automatizado y prefieren
seguir escribiendo sus líneas de código en el lenguaje que les apetezca. Para los
desarrolladores de hardware este enfoque es una quimera basada en patrones
susceptibles de mejoras. Pero para la industria simplemente significa ganar o perder
dinero. Aquí la hibridación es lo de menos y lo de más la imposición de tecnologías y
estrategias propietarias. Jobs reclama “baja potencia, pantallas táctiles y estándares
abiertos para la web” para el entorno de las aplicaciones hoy día mientras Apple, la
compañía que dirige, supera a Microsoft en el mercado mundial y es el cuarto en
ventas de ordenadores en Estados Unidos; es difícil desvincular ambos hechos y su
capacidad de expansión a otros mercados como el de los móviles y la reproducción
multimedia.
Enlaces de interés
VHDL: http://en.wikipedia.org/wiki/VHDL
Verilog: http://www.verilog.com/
SystemC: http://www.systemc.org/home/
Sobre el autor