3.4.2 Dispositivos Digitales Complejos
Cuando es necesario realizar un diseño digital complejo, compuesto de miles o millones de transistores, existen varias familias de dispositivos digitales complejos que se pueden emplear: circuitos específicos, lógica programable y microcontroladores o microprocesadores. Este apartado explica las principales ventajas y desventajas de cada una de ellas. Asumiendo que se comparan estas tres opciones usando alternativas escaladas para un diseño dado, la comparación quedaría como en la Tabla 5.
Coste | Frecuencia Conmutación | Consumo Potencia |
Aplicabilidad |
|
ASIC |
Muy alto | Alta | Bajo | Alta |
Lógica Programable |
Medio |
Baja |
Alto |
Alta |
Micro-Controlador
Micro-Procesador |
Bajo | Alta | Medio |
Media |
Tabla 5: Comparación de alternativas escaladas para un determinado diseño digital complejo.
3.4.2.1 Circuito Integrado de Aplicación Específica (ASIC)
Como su propio nombre indica, un circuito integrado de aplicación específica (ASIC, del inglés “application-specific integrated circuit”), consiste en un diseño digital que implementa exclusivamente las puertas lógicas necesarias para la aplicación en concreto [1]. Por tanto, a nivel técnico es una opción perfectamente válida para cualquier aplicación. Al tratarse de un diseño específico, y siempre que se use el nivel de integración adecuado, se pueden obtener elevadas frecuencias de conmutación y un consumo de potencia muy bajo.
Sin embargo, esta opción tiene costes fijos muy elevados, puesto que es necesario realizar máscaras de bajo nivel para la fabricación del dispositivo. Íntimamente relacionado con lo anterior, los riesgos son altos, porque el coste de cada prototipo puede alcanzar los cientos de miles o incluso millones de Euros. Y los prototipos fallan a menudo….
En consecuencia, el diseño de un ASIC sólo tiene sentido cuando el volumen de ventas del dispositivo es elevadísimo. Por ejemplo, un decodificador de televisión digital terrestre o un ASIC para minar criptomonedas. Los siguientes dispositivos que se explican también son ASICs desde la perspectiva del fabricante, pero se han diseñado para que puedan ser programados y adaptados a múltiples aplicaciones por el usuario final. En consecuencia, se perderán parte de las propiedades fundamentales de un ASIC diseñado para una única aplicación.
3.4.2.2 Lógica Programable
Dentro del marco de la lógica programable entran los dispositivos que permiten configurarse o programarse (una o múltiples veces) para implementar el circuito digital que necesita el usuario final. Los más flexibles y que por tanto tienen más relevancia son conocidos como FPGAs (del inglés “field-programmable gate array”), que en español podría traducirse como matriz de puertas lógicas programables en campo, y donde campo quiere decir premisas del usuario final [2].
Entrando en más detalle, una FPGA está constituida por miles o incluso millones de celdas que pueden emular cualquier puerta lógica o combinación de ellas, con salidas terminadas o no en un flip-flop. Estas celdas están unidas mediante buses de interconexiones configurables como se muestra en la Figura 11. Adicionalmente también existen bloques lógicos de entrada/salida que realizan el interfaz con el exterior. Existen FPGAs de muchos tamaños, capaces de emular circuitos lógicos de diferentes complejidades.
La principal ventaja de usar FPGAs es implementar un circuito digital más o menos complejo de forma mucho más barata que un ASIC. De este modo, las FPGAs hacen viables o más asequibles muchas aplicaciones donde el volumen no sería suficiente para hacer rentable la fabricación de ASICs. Las desventajas de las FPGAs con respecto a los ASICs son principalmente dos. En primer lugar, la lógica configurable requiere muchas más puertas lógicas que las estrictamente necesarias para un ASIC, lo que se traduce en un consumo de potencia mucho más alto. En segundo lugar, y relacionado con lo anterior, la existencia de caminos e interconexiones lógicas configurables, implica mayor complejidad, mayor tiempo de propagación de la señal o voltaje y, en consecuencias, frecuencias de conmutación mucho más bajas.
Para la definición de un circuito digital se utilizan lenguajes de descripción de hardware (HDL del inglés “hardware description language”). Los dos lenguajes HDL más empleados son Verilog y VHDL (de VHSIC HDL, donde VHSIC significa circuito integrado de muy alta velocidad, en inglés “very high speed integrated circuit”). Los lenguajes HDL se emplean para diseñar ASICs y FPGAs. Para el caso de las FPGAs, un programa intérprete utilizar el HDL definido por el usuario para sintetizar la configuración que se introduce en la FPGA, lo que muestra la “simplicidad” con la que se implementa un circuito integrado digital a partir de un código. Por otra parte, aunque la descripción/diseño HDL de un circuito que será implementado en una FPGA es de alto nivel, pensando en ‘1’s y ‘0’s y no en voltajes/corrientes, es necesario asegurar que el diseño implementado en la FPGA puede trabajar a la frecuencia de conmutación necesaria.
3.4.2.3 MicroControladores y MicroProcesadores
Mientras que la lógica programable permite la implementación de «cualquier» circuito digital, los microprocesadores (uP) y microcontroladores (uC) están compuestos de circuitos digitales predeterminados que ejecutan instrucciones de forma secuencial. La combinación de circuitos e instrucciones está pensada para poder resolver problemas genéricos, lo que los hace muy versátiles [3]. Como los bloques digitales ya están implementados de antemano, la lógica está muy optimizada y las frecuencias de trabajo pueden ser mucho más altas que las obtenidas con una FPGA.
Los uP tienen su principal aplicación en la informática como cerebro de un ordenador. También son denominados Unidad Central de Procesamiento (CPU, del inglés “central processing unit”). Pueden realizar múltiples tareas simultáneas y tan diferentes como descomprimir un archivo de audio o escribir un texto. Los uC son el cerebro en aplicaciones más sencillas, como podría ser un dispositivo industrial o un disco duro en red. La Figura 12 muestra de forma básica la estructura y diferencias entre un uP y un uC.
|
Los uP son el núcleo central de un sistema más complejo y están constituidos por:
- Registros: almacenan los valores temporales que se usan para hacer operaciones o los resultados de las mismas operaciones.
- Unidad de control: realiza la búsqueda e interpretación de instrucciones.
- Unidades de operaciones matemáticas: incluyen una etapa para operaciones simples o booleanas conocida como unidad aritmético-lógica (ALU, del inglés “arithmetic logic unit”), y etapas para operaciones más complejas con números en coma flotante
- Buses de entrada/salida: para la comunicación con los dispositivos externos y periféricos.
La memoria, donde se encuentran las instrucciones de programa y los datos con los que trabaja, es externa. Esta arquitectura que comparte memoria de programa y de datos es conocida como Von Neumann. Finalmente el uP también está comunicado con controladores de periféricos tanto simples como complejos.
Los uC también actúan como el núcleo de aplicaciones, pero más simples que en el caso de los uP. Los bloques que integran suelen ser simplificaciones de los encontrados en un uP. Tienden a ser autocontenidos, es decir, todos los bloques pueden forma parte del mismo circuito integrado. Además funcionan a frecuencias más bajas. Pueden utilizar distinta memorias para programa y datos, arquitectura conocida como Harvard. Un uC puede estar enfocado a un mercado muy particular, integrando periféricos muy especializados, como por ejemplo para automoción.
Como núcleo de sistemas complicados, las instrucciones que ejecutan los uP en ordenadores han sido tradicionalmente muy sofisticadas, por lo que se denominan conjunto complejo de instrucciones de cómputo (CISC, del inglés «complex instruction set computing»). Cada instrucción puede necesitar varios ciclos de reloj para completarse. En contraposición a las instrucciones CISC, los uC utilizan instrucciones más simples, denominadas conjunto reducido de instrucciones de computo (RISC, del inglés «reduced instruction set computing»). Suelen ser instrucciones que realizan las tareas mas simplificadas dentro del dispositivo, asegurando que se pueden ejecutar en un solo ciclo de reloj. Hay que reseñar que también existen uP que utilizan instrucciones RISC, sobre todo en aplicaciones donde el rendimiento con respecto a la potencia consumida es prioritario sobre la potencia bruta de computación (dispositivos móviles). Recientemente se están produciendo movimientos en la industria que emplean arquitecturas RISC en aplicaciones donde el suministro energético es permanente. Por tanto los dispositivos RISC también tienen potencial para desplazar a los CISC en potencia de cómputo.
uC y uP se pueden programar con:
- Lenguajes de bajo nivel: Conocidos como ensamblador o lenguaje máquina. Consisten en las propias instrucciones que entiende el dispositivo de forma nativa e inherente. Requieren conocer en detalle los registros y bloques internos del uP o uC.
- Lenguajes de alto nivel: En este caso el programador se puede abstraer completamente de la circuitería del dispositivo e incluso de los ‘1’s y ‘0’s [4]. Un compilador traducirá lo programado en alto nivel a las instrucciones en lenguaje máquina que el micro entiende de forma nativa.
Bibliografía (Patrocinado)
[1] ASIC Basics: An Introduction to Developing Application Specific Circuits, Elaine Rhodes, 2005.
[2] Advanced FPGA Design: Architecture, Implementation, and Optimization, Steve Kilts, 2007.
[3] Microprocessors and Microcontrollers, Senthil Kumar, 2016.
[4] The C Programming Language, Kernighan, 1988.
Hardware, Firmware, Software =>
Suscripción
Si te ha gustado esta contribución no dudes en suscribirte a nuestro boletín: