Microcontroladores: de 4 a 32 bits.(Parte 1)


Si usted es aficionado a la electrónica o ha estudiado alguna vez ésta rama de la ciencia e ingeniería, es prácticamente seguro que ha escuchado a hablar sobre los microcontroladores y microprocesadores. Estas maravillas de la ingeniería que comenzaron ya hace más de 40 años (Intel 4004, 1971), se han convertido en un dispositivo indispensable para la vida actual.
Sin embargo, pocos saben las enormes transformaciones que han sufrido a lo largo de estas tan fructíferas cuatro décadas. Cabe aclarar que no me considero experto en el tema de los microcontroladores, pues se necesita una vasta experiencia e investigación para conocerlos en su totalidad, pero aquí haré un intento por describir esos cambios y una breve (lo más que pueda) descripción de su funcionamiento.

La necesidad de sumar

El primer dispositivo capaz de realizar operaciones programadas se diseñó para cubrir la necesidad de realizar operaciones matemáticas de una forma más rápida y por supuesto más compacta. Así es, pues este novedoso chip fue usado en las primeras calculadoras portátiles de los años 70’s, y la tarea fue encomendada a Intel. Consistía en un microchip capas de programarse, y usando una Unidad Lógica Aritmética se podían realizar operaciones aritméticas simples. Era de 4 bits, lo que significa que todos los registros tenían esa cantidad de flip-flop’s en su interior. No contaba con una memoria FLASH como los tienen ahora muchos MCU y la programación se realizaba por medio de lenguaje ensamblador; esto debido a que el hardware disponible no permitía programar a más alto nivel (Oh sí, ahora estamos en la gloria, gracias lenguaje C, C++, Java, Python, y demás lenguajes de alto nivel).
Tampoco contaba con otros periféricos internos como ADC’s, DAC’s o protocolos de comunicación, ya que, además de que la aplicación no lo exigía, éste tipo de circuitos aún estaban reservados para circuitos discretos, pero esto no duró mucho.

La gloria de los 8-bits.

Durante la década de los 70’s y 80’s la producción, diseño y mejoramiento de estos dispositivos fue en aumento, hasta que se logró crear un microcontrolador de 8 bits (en realidad no fue tanto tiempo entre uno y otro) y se popularizaron en el ramo de tecnología en general. Conforme se mejoraba la producción de sistemas integrados, también se fueron agregan más elementos al microcontrolador como más memoria ROM y RAM, A/D y D/A y temporizadores independientes. La integración de éstos módulos nos dio la oportunidad de tener aparatos como televisiones con Circuitos integrados, reemplazando a las de transistores y las de bulbos, consolas de video juegos, videocaseteras, grabadoras, y sistemas de Audio con mayor fidelidad y con un costo mucho menor (y ocupando menos espacio).
Las exigencias de las aplicaciones eran cada vez mayores, así que se implementaron los MCU de  bits. Ahora con mayor capacidad de almacenar y entregar información, eran mucho más rápidos y eficientes que sus antecesores. Sin embargo, el mayor performance tiene su precio. Un factor que resultaba importante era la velocidad con la se ejecutaban las instrucciones.

Pipeline y el performance.

Un microcontrolador de 4 u 8 bits ejecuta una instrucción a la vez, por lo que se les suele llamar MCU escalares, esto porque la información se guarda en los registros para ejecutarse, lo que se puede ordenar en un arreglo [0..8]. Esto quiere decir que ejecutará una tarea cada vez que se cumpla un ciclo de reloj de la señal CLK del micro. Pero hacer esto a una velocidad muy alta como por ejemplo el procesamiento de imágenes o alguna comunicación digital no resulta tan efectivo.
Pues bien, cuando un MCU va a ejecutar una tarea primero la carga y luego la ejecuta, una por una, entonces, para realizar una sola tarea necesita por lo menos (idealmente) 2 ciclos de reloj. No parece mucho pero, en un proyecto que exige alto performance, es un precio muy alto en cuanto a velocidad de procesamiento. Es por eso que se diseñaron módulos de hardware capaz de predecir cuál es la siguiente instrucción y cargarla mientras se ejecuta la anterior. Ha esto se le llama Pipeline. Actualmente se implementa el Pipeline hasta de 4 pasos o más, haciendo más eficiente la carga y ejecución del programa.
Aunque claro, no todo es gloria. ¿Qué sucede si el programa decide que hay que saltar de un punto del código a otro? Bueno, entonces, la Pipeline completa tiene actualizarse, lo que implicaría un gasto de varios ciclos de reloj extras para borrar la Pipeline antigua y colocar la nueva. Entonces, la Pipeline es ventajosa para tener un mayor performance en la aplicación, pero hasta cierto punto.
Una manera de mejorar el rendimiento de un proceso en un microcontrolador son los sistemas superescalares. Así es, se trata de MCU’s que cuentan con hardware especial para realizar algunas tareas de manera simultánea. Un ejemplo que pude ver en un libro sobre esto es la realización de una sumatoria de multiplicaciones con n elementos. Así pues, mientras una parte se encarga de realizar las multiplicaciones, otra se encarga de realizar la suma acumulativa, todo esto de manera simultánea.
Por supuesto que existen muchas formas más para elevar la rapidez de procesamiento, pero éstas las consideré por su relevancia. Las desventajas que presentaban estos procesadores a pesar de la optimización a la que habían sometido, fueron pulidas posteriormente por los microcontroladores de 32 bits.

Abran paso a los 32 bits.

Pues bien, la tecnología avanzó lo suficiente para crear un MCU de 32 bits. Manejar una mayor cantidad de información permite también hacerlo de una manera más rápida, lo trae consigo problemas como los que acabamos de exponer en los párrafos anteriores. Ahora ya no bastaba tener una Pipeline o que fuera un MCU superescalar. Eran necesarias mejoras en el diseño.
Aunque el concepto de multitareas o multitasking no es para nada nuevo, se comenzó a implementar en los MCU más grandes que realizaban operaciones más robustas; así es amigos, nos referimos a Procesadores con Sistema Operativo. Éste concepto nace por los años 80’s y dio origen a las computadoras de escritorio tal como las conocemos… pero ¿qué es en realidad un S.O.?
Imaginemos que tenemos que realizar una tarea A, otra B y otra C. Realizamos la tarea A por un minuto, después hacemos la B, también por un minuto, y por último hacemos la C con la misma duración. Ahora, el tiempo que invertimos realizando cada tarea se reducirá a nanosegundos… ¿Qué tenemos al final? Bueno, que en apariencia estamos ejecutando las tres tareas al mismo tiempo. Mientras yo escribo ésta entrada, tú lees este blog o ejecutas algún programa, tu computadora se encuentra realizando una gran cantidad de tareas que parecen suceder todas al mismo tiempo, pero sólo se encuentra cambiando de una a otra en cuestión de nanosegundos.
En el mundo de los MCU’s de 32 bits existe firmware y hardware que se implementan para hacer el Sistema Operativo de Tiempo Real o RTOS por sus siglas en inglés.
Así pues, la combinación de un RTOS, sistemas como Pipeline, Interrupciones, Memoria Caché y la “superescalización” nos ofrece un mayor rendimiento para los procesadores y MCU’s actuales, pero aún hay más cosas por decir sobre estos circuitos integrados.
Como saben, no me gusta extenderme mucho en las entradas, así que éste espacio queda para una segunda parte y continuar escribiendo sobre el fascinante mundo de la electrónica.
Saludos.

Comentarios