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
Publicar un comentario