Mostrando entradas con la etiqueta AND. Mostrar todas las entradas
Mostrando entradas con la etiqueta AND. Mostrar todas las entradas

viernes, 17 de agosto de 2018

Hardware Abierto. Hardware definido por Software

Desde que se hizo presente la Virtualización en nuestras vidas, quienes veníamos de la Informática clásica, esa en la que nos inculcaron que el Hardware era rígido, concreto, tangible y el Software era abstracto e intangible, nos fue algo difícil ver en ese momento el inmenso potencial de una Máquina Virtual.

Ya de por sí el concepto de una Capa de Abstracción generada por un software no nos era extraño. El Firmware en contacto directo con el Hardware; el Sistema Operativo con su "Kernel" y sus "Drivers" como marco de trabajo y cimiento de los Servicios de Sistema, la Interfaz Gráfica y las Aplicaciones (de abajo hacia arriba apilados una capa sobre otra).

Ahora el Hipervisor se adueñaba de el Harware Físico y ponía los recursos a las órdenes de las Máquinas Virtuales, de manera dinámica y bajo demanda. Como en un Comunismo Utópico en el que todo es de todos, con ese dictador benévolo que se llama el Hipervisor otorgando dichos recursos a las Cargas Virtuales.

Todo esto dio por resultado poder tener Centros de Datos Definidos por Software (SDDC por sus siglas en inglés) y permitir que el consumo de recursos informáticos se convierta en una operación más inteligente, escalable, confiable, segura.

De los cuatro recursos físicos: Procesador, Memoria, Red y Almacenamiento, es el primero al que siempre consideramos como ese ente monolítico, inmutable y completamente necesario (indispensable) para la ejecución de lo que sea, desde el punto de vista de la Informática. Éste elemento ya diseñado y construido por un proveedor, permanece así como quedó manufacturado, con todos sus alcances y limitaciones. ¿Pero toda la vida tenía que ser así?

Algunos lectores ya se dieron cuenta por dónde vamos. Sí. Procesadores Definidos por Software. ¿En serio? Sí, ¿por qué no? Y mejor aún, todo ello en modalidad abierta. ¿Código Abierto? No. Hardware Abierto.

¿Asombrado, atónito, no das crédito al párrafo anterior? Es lógico. No se apure amigo lector. No estamos bajo el influjo de una droga o en un universo paralelo. Lo que más le va a asombrar es que todo lo mencionado ya existe.

Algo de Historia: Compuertas Lógicas, Micro Controladores y Procesadores

¿Cómo funcionan las Computadoras? Pregunta típica de un niño en los años setenta. Yo entre ellos. Las respuestas eran algo confusas, pero tras la recomendación de un magnífico libro titulado "Cibernética sin matemáticas" escrito por Henryk Greniewski y publicado por el Fondo de Cultura Económica en el año de 1965.

Me quedó claro que todo se basaba en una aritmética en la que a diferencia de nuestro sistema decimal basado en diez guarismos (0, 1, 2, 3, 4, 5, 6, 7, 8 y 9) que se utilizan para representar cantidades, las computadoras utilizan un sistema binario. Dos guarismos o dígitos (0 y 1) son necesarios para representar cantidades.

Pero el 0 y el 1 también pueden ser utilizados para determinar la veracidad o falsedad de proposiciones lógicas. Conceptos como las Tablas de Verdad y los operadores lógicos del Algebra Booleana. ¿Qué es eso? En 1815 George Boole (matemático y lógico británico) propuso una herramienta matemática llamada Álgebra de Boole. Luego en 1938 Claude Shannon propuso que con esta álgebra es posible modelar los llamados Sistemas Digitales. El Álgebra de Boole es un sistema matemático que utiliza variables y operadores lógicos.

Así pues, ya teníamos algo que, con la manipulación, operación de tan solo dos dígitos, podíamos realizar complejas operaciones que imitaban en mucho al razonamiento humano. Qué decir de la realización de cálculos complejos con precisión y exactitud.

Sin entrar demasiado en teoría, la famosa máquina de Alan Mathison Turing usada para descifrar el cuasi indescifrable Código Enigma de los nacionales socialistas alemanes durante la segunda guerra mundial, utilizaba conmutadores electro-mecánicos para dar forma y contexto a los dígitos binarios "0" y "1". ¿Conmutador abierto (apagado)? CERO. ¿Conmutador cerrado (encendido? UNO.

Perfecto. ¿Prendiendo y apagando algo ya estoy haciendo cómputo? De manera muy básica y "rupestre", sí. Falta revisar los Operadores Lógicos o Booleanos:
  • NOT = Negación
  • AND = Conjunción
  • OR = Disyunción

Aquí anexo las "Tablas de Verdad" de cada uno de estos operadores básicos:

Platiquemos un poco del operador NOT, también conocido como INVERSOR. ¿Por qué inversor? Porque a toda entrada A que puede tener sólo los valores "0" (FALSO) o "1" (VERDADERO), corresponde como salida el valor contrario: 1 o 0 (VERDADERO o FALSO) respectivamente.

En el caso de la Conjunción o AND, aquí necesitamos al menos DOS entradas: "A" y "B". Observe que en la Tabla de Verdad, la única manera en la que el resultado es "1" o "VERDADERO" es cuando el valor de ambas variables "A" y "B" es "1" o "VERDADERO". De otra manera el resultado es "0" o "FALSO".

Por último en el caso de la Disyunción u OR, siempre que exista una entrada en "1" o "VERDADERO", el resultado será "1" o "VERDADERO". De otra forma será "0" o "FALSO".

¿Para qué me sirve esto? A modo de un ejemplo sencillo, imagine que tiene Usted el reto de crear un circuito lógico para un automóvil. Este circuito "inteligente" debe controlar cuándo SÍ se podrá poner en marcha el motor del vehículo y cuando no.

Para este ejemplo, imaginemos que el fabricante solicita que:
  1. El sensor del asiento del conductor "A" debe estar en "1" o "VERDADERO", pues hay alguien sentado en el.
  2. Al mismo tiempo, el cinturón de seguridad "B" deberá estar abrochado ("1").
  3. La palanca de velocidades "C" debe estar en posición "PARKING" o "P" ("1"). Cualquier otra posición de la palanca se considera que está en "FALSO" o "0".
  4. El freno de mano "D" podrá estar accionado ("1") o liberado ("0").

Este sería entonces el diagrama de este circuito lógico resultante:


Los elementos del diagrama "AND1" y los demás semejantes, son lo que se llaman Compuertas Lógicas. Estas se incluyen en Circuitos Integrados que ya no utilizan conmutadores electro-magnéticos, sino transistores.

Estos circuitos integrados, muy al principio denominados TTL (Transistor-Transistor Logic) fueron los que permitieron que el hombre llegara a la luna, que comenzáramos a gozar con juegos de video y que nuestros aparatos electrónicos, vehículos y electro-domésticos tuviesen "inteligencia".

Con un solo circuito integrado TTL 7408 de cuatro compuertas "AND" independientes de dos entradas cada una, es posible implementar el circuito arriba incluido y hasta sobraba una compuerta "AND".

Conforme se fueron haciendo más y más complejas las necesidades relativas al cómputo y a las compuertas lógicas, utilizar las compuertas lógicas ya no era conveniente. Era necesario contar con circuitos integrados más complejos para hacer cálculos y/o para añadir inteligencia a nuestros dispositivos industriales y/o domésticos. Nacen entonces dos nuevos componentes:

Microcontroladores

Un microcontrolador (abreviado μC, UC o MCU) es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales cumplen una tarea específica. Un microcontrolador incluye en su interior las tres principales unidades funcionales de una computadora: unidad central de procesamiento, memoria y periféricos de entrada/salida.

Algunos microcontroladores pueden utilizar palabras de cuatro bits y funcionan a velocidad de reloj con frecuencias tan bajas como 4 kHz, con un consumo de baja potencia (mW o microwatts). Por lo general, tendrá la capacidad de mantenerse a la espera de un evento como pulsar un botón o de otra interrupción; así, el consumo de energía durante el estado de reposo (reloj de la CPU y los periféricos de la mayoría) puede ser sólo de nanowatts, lo que hace que muchos de ellos sean muy adecuados para aplicaciones con batería de larga duración. Otros microcontroladores pueden servir para roles de rendimiento crítico, donde sea necesario actuar más como un procesador digital de señal (DSP), con velocidades de reloj y consumo de energía más altos.

Cuando es fabricado el microcontrolador, no contiene datos en la memoria ROM. Para que pueda controlar algún proceso es necesario generar o crear y luego grabar en la EEPROM o equivalente del microcontrolador algún programa, el cual puede ser escrito en lenguaje ensamblador u otro lenguaje para microcontroladores; sin embargo, para que el programa pueda ser grabado en la memoria del microcontrolador, debe ser codificado en sistema numérico hexadecimal que es finalmente el sistema que hace trabajar al microcontrolador cuando éste es alimentado con el voltaje adecuado y asociado a dispositivos analógicos y discretos para su funcionamiento.

Microprocesadores

El microprocesador (o simplemente procesador) es el circuito integrado central más complejo de un sistema informático; a modo de ilustración, se le suele llamar por analogía el «cerebro» de un ordenador.

Es el encargado de ejecutar los programas, desde el sistema operativo hasta las aplicaciones de usuario; sólo ejecuta instrucciones programadas en lenguaje de bajo nivel, realizando operaciones aritméticas y lógicas simples, tales como sumar, restar, multiplicar, dividir, las lógicas binarias y accesos a memoria.

Puede contener una o más unidades centrales de procesamiento (CPU) constituidas, esencialmente, por registros, una unidad de control, una unidad aritmético lógica (ALU) y una unidad de cálculo en coma flotante (conocida antiguamente como «coprocesador matemático»).

Tanto las Compuertas Lógicas, como los Microcontroladores y los Microprocesadores, están fabricados bajo un diseño específico que nunca cambiará. Será el ser humano el que deberá ingeniárselas para interconectar estos artilugios de silicio, oro, cobre y demás elementos químicos para que realicen una operación determinada.

FPGA. Matrices de Compuertas Programables "In Situ"

Una FPGA o matriz de puertas programables (del inglés field-programmable gate array) es un dispositivo programable que contiene bloques de lógica cuya interconexión y funcionalidad puede ser configurada en el momento mediante un lenguaje de descripción especializado. La lógica programable puede reproducir desde funciones tan sencillas como las llevadas a cabo por una puerta lógica o un sistema combinacional hasta complejos sistemas en un chip.

Las FPGA se utilizan en aplicaciones similares a los ASIC sin embargo son más lentas, tienen un mayor consumo de energía y no pueden abarcar sistemas tan complejos como ellos. A pesar de esto, las FPGA tienen las ventajas de ser reprogramables (lo que añade una enorme flexibilidad al flujo de diseño), sus costes de desarrollo y adquisición son mucho menores para pequeñas cantidades de dispositivos y el tiempo de desarrollo es también menor.

Ciertos fabricantes cuentan con FPGA que sólo se pueden programar una vez, por lo que sus ventajas e inconvenientes se encuentran a medio camino entre los ASIC y las FPGA reprogramables.

En pocas palabras, estas Matrices de Compuertas Programables o FPGAs, pueden ser configuradas por software para funcionar como Compuertas Lógicas, Microcontroladores o Microprocesadores. ¿Circuitos Integrados Definidos por Software? ¡¡¡ Sí !!!

Los alcances que tiene esta tecnología son sencillamente fabulosos y abren aún más las posibilidades para quienes los incluyen en dispositivos industriales, empresariales o domésticos.

¿Qué le parecería tener un dispositivo inteligente como una LapTop, una Tablet o un Teléfono Inteligente, que no solamente sea posible actualizar el Sistema Operativo con fines de mejorar su desempeño o arreglar posibles fallas de programación, sino que además ahora se pueda actualizar su hardwer sin necesidad de abrir el aparato.

Sí. El fabricante podrá manufacturar equipos todos idénticos, pero los alcances y limitaciones de éste dependerán de la configuración de sus FPGAs internas. Podemos comenzar adquiriendo la "licencia" o paquete "Starter", en la que la o las FPGAs se comportarán como un equipo económico de tan solo dos procesadores.

Con el pago de un paquete o licencia superior, podremos escalar a ocho procesadores, doce, diez y seis o más. Podremos añadir GPUs aceleradoras de video y poco a poco escalar hasta contar con un equipo con un desempeño inmenso y posibilidades más allá de lo que nuestra imaginación puede llega a visualizar.

¿Qué decir de otros dispositivos como computadoras de a bordo en aviones, automóviles, motocicletas? También electrodomésticos más y más versátiles e inteligentes que puedan realizar más funciones con más precisión, mayor exactitud y con un uso más inteligente y racional de energía eléctrica, agua, etc.

¿Qué tan posible, factible y/o a futuro es llegar a este punto? Ya llegamos desde hace tiempo. Sí. Hace apenas un mes que Massimo Banzi, cofundador y Director de Tecnología de ARDUINO, anunció la disponibilidad del ARDUINO MKR VIDOR 4000. Su corazón ya no es un microcontrolador, sino una FPGA. Tiene un costo de $60.00 USD y es posible acceder a ella a través de un conector Micro PCIe.

Gracias a los esfuerzos de Clifford Wolf con su proyecto IceStorm, Adrian Bowyer y sus tremendas contribuciones al Open Source Hardware y al Open Source y toda la comunidad Abierta, los avances en materia de FPGA son tales que ahora los fabricantes y proveedores de Hardware y Software, ya no piensan en Microcontroladores o Microprocesadores, sino en FPGA como el cimiento de sus desarrollos a mediano y largo plazo.

FPGA plantea una nueva forma de hacer las cosas. Un nuevo paradigma que como todos, subsana muchos de los requerimientos actuales en el campo de las Tecnologías de la Información, pero como es costumbre plantea nuevos retos.

Esta tecnología tiene la bondad de ofrecer una relación costo-beneficio muy positiva y como todo aquello que resulta económica y tecnológicamente rentable, trascenderá e incluso "amenaza" con sustituir a tecnologías que "a priori" ya se ven como obsoletas.

¿En conclusión? FPGA es el pasado cercano, presente y futuro a largo plazo de las nuevas Tecnologías de la Información basadas en plataformas Abiertas. ¿Ya conoce Usted FPGA?