Inicio
He creado este espacio para compartirlo con familiares y amigos, aunque no descarto la posibilidad de que otros visitantes se encuntren a gusto y lo puedan disfrutar tambien...

InicioMapa del sitioDescargasColaboradoresEnlacesAutor    
Buscar :

Ideas


Y encima del sofá... un televisor

¿Realmente merece el televisor ese papel protagónico que solemos darle?


¿Un flat panel sobre mi buró?

¿Y por qué no... "debajo" del buró?


Hacer un computadora en casa, pero sin microprocesador

Cuando programamos un microcontrolador en ensambaldor, tenemos la sensación de que el mismo posee alguna "inteligencia" que le permite entender nuestro código y ejecutarlo al pie de la letra. Esta percepción cambia radicalmente cuando uno se mete a diseñar su propio CPU: ahora la computadora funciona, más bien, como un mecanismo de relojería.




Armando Acosta  (06-22-2009)

Hoy en día las computadoras no son un misterio para casi nadie. Uno compra las partes via Internet y cuando llegan, se pone uno a armarlas como se haría con un rompecabezas. O sea, estoy hablando de "PC", ese standard industrial en base al cual se fabrican partes en diversos lugares del mundo, especialmente en China. Pero ¿qué tal fabricar una computadora que no sea un PC?

Estoy hablando de diseñar y construir una computadora desde cero, es decir, sin un microprocesador; diseñar y construir el mismísimo CPU empleando circuitos integrados de mediana escala de integración (MSI) como se hacía en los años 70's.

Habría que definir la arquitectura general de la máquina: Von Newman o Harvard, quizás un "stack machine"; decidir qué registros llevará, de cuantos bits cada uno, cuánta memoria será capaz de direccionar, los modos de direccionamiento, las instrucciones (cuales y cómo serán implementadas) cómo funcionarán las interrupciones y el DMA (o si no tendrá interrupciones ni DMA). Definirlo todo, y una vez definido, diseñarlo, construirlo, ponerlo a punto y echarlo a andar.

Esta justamente es la aventura en que me encuentro inmerso. No fue idea mía; la Web está llena de proyectos de este tipo, muy variados en diseño y propósito. He aquí una corta lista que he ido recopilando:

Hobrebrew CPUs

Llevo un mes y solo he llegado a definir la arquitectura de mi máquina así como ganar alguna idea de cómo implementar los diferentes circuitos. Diseñado, lo que se dice "diseñado", no hay nada todavía. Sin embargo, en solo un mes leyendo intensamente sobre el tema, he aprendido un sin fin de cosas que antes no sabía.

El primer aporte ha sido darme cuenta de que una computadora funciona como un mecanismo de relojería. Es todo lo contrario a esa percepción que tenemos cuando programamos un microcontrolador PIC, por ejemplo: Por más bajo que sea el nivel de nuestro código, siempre nos queda la sensación de que el CPU posee alguna "inteligencia" que le permite entender nuestro código y ejecutarlo al pie de la letra.

Cuando uno se mete a diseñar un CPU, uno se da cuenta de cuan mecánico es todo ese proceso. Repito, funciona como un mecanismo de relojería: un clock hace correr un contador, este genera señales de tiempo T1, T2, T3, T4, etc., que combinadas con el código de la instrucción generan a su vez todas las señales de control necesarias para que el CPU funcione... paso a paso, tic a tic. Todo cuanto se hace dentro del CPU es abrir buffers de tres estados y "clockear" registros para que la información presente en el bus se registre permanente en su interior. No hay nada más sino esas acciones simples en las que nuestro código de instrucción no se diferencia demasiado de la rueda dentada de una cajita de música. Y eso es justamente lo que lo hace interesante.

Como interesante resultan la posibilidades que se abren ante nuestra creatividad. Podemos concebir prácticamente cualquier arquitectura por extraña que parezca. Y podemos también adoptar arquitecturas clásicas, estudiarlas, entenderlas en detalles y saborearlas con nuestros propios dedos, bit a bit, nano-segundo a nano-segundo.

Y ese es solo el primer capítulo de la aventura. El segundo capítulo es aún más apasionantes (y más especializado también): el software.

Si además de aprender de ella, pretendemos que nuestra máquina haga algo útil, entonces tendremos que proveerle un sistema operativo. ¿Pero cual? Todos los sistemas operativos se escriben (o más bien se "linkean" o enlazan) para una determinada plataforma: Intel x86, Alpha. Nadie ha escrito un sistema operativo para nuestra plataforma propietaria. Y por otra parte, nosotros no vamos a lanzarnos a escribir uno desde cero porque eso es una labor en extremo especializada y en lugar de reinventar la rueda, terminaríamos inventando un pedazo de chatarra.

Lo que otros colegas han hecho es portar sistemas operativos existentes en el mundo del Open Source, como Minux2. Por lo que he visto son todos sistemas parecidos a UNIX (como lo es Linux) los cuales han sido escritos con la portabilidad en mente y además puedes contar con su código fuente casi siempre escrito en lenguaje C.

Pues bien, la tarea es agarrar uno de estos, entender el código (tarea bastante difícil para la cual hay que prepararse adquiriendo algún conocimiento de base sobre teoría de sistemas operativos) y proceder entones a "portarlo" a nuestro sistema, es decir, modificar el código para que pueda funcionar en nuestra plataforma propietaria.

Portarlo dije... con ¿cual compilador? Bueno, tampoco existe un compilador diseñado expresamente para genera código que puede funcionar en nuestra máquina. Así que el primer paso será buscar un compilador en el mundo del Open Source y "portarlo" a nuestro entorno. Lo mismo con un ensamblador y un linker. De más está decir que estas tareítas se las traen porque constituye una especialidad dentro del desarrollo de software. Pasarán otros dos o tres años antes de haber logrado que todo eso funcione correctamente.

Si hemos tenido la paciencia suficiente, llegará el día en que nos encontremos por fin ante una máquina diseñada en nuestro cerebro y construida por nuestras propias manos y que por tanto entendemos hasta el último tornillo. Esta máquina será todo claridad para nosotros, todo lo contrario a un PC corriendo Windows que es todo misterio (o todo ignorancia, que para el caso es igual).

En esta máquina correrá un sistema operativo que hemos "portado" del mundo del Open Source y hemos hecho funcionar en nuestra máquina. Y tendremos también un ensamblador, un linker y un compilador, prácticamente escritos por nosotros mismos.

Será esta la hora de sentarse a escribir (y depurar) aplicaciones útiles para nuestra máquina. En algún momento nos enfrentaremos a un bug y no sabremos si es un bug de la aplicación, del compilador, del linker, del sistema operativo, o un cable suelto en alguna tarjeta. Nuestros programas serán pues de los más difíciles de poner a punto.

Si todo lo anterior no lo ha asustado los suficiente, le invito a participar en una aventura de estas. Mis notas están en un Web site que he abierto para ello. He aquí la dirección:

http://www.armandoacosta.com/cpu/

En eso ando por estos días. ¿No me diga que no es divertido?


  • Otros articulos técnicos


  • Imprimir   Enviar a un amigo   
                                                    

    Miami / USAmail@armandoacosta.comInicio