Home » Mi experiencia haciendo una CPU usando puertas NAND

Mi experiencia haciendo una CPU usando puertas NAND

0
Circuito blanco y negro

Una de las cosas que aprendí en la universidad fue a diseñar una CPU muy sencilla, la cual solo tenía 16 instrucciones en total y un direccionamiento de 8 bits, vamos que solo podía operar con 256 bytes de memoria. ¿La particularidad? La diseñamos íntegramente con puertas NAND, en vez de usar el resto de puertas lógicas.

La puerta NAND es universal

La puerta NAND o AND negada es un tipo de puerta lógica básica. En este tipo de circuitos electrónicos básicos podemos tener una cantidad determinada de entradas que reciben una señal binaria (0 o 1) cada una de ellas en un extremo, para tener una única salida en el otro extremo, también binaria, que emitirá un valor de 0 o 1 dependiendo del tipo de puerta lógica y su operación correspondiente.

Puerta NAND Tabla verdad

La particularidad de la puerta NAND es su universalidad, así pues, podemos generar el resto de puertas lógicas con combinaciones de este tipo de puertas, tal y como se puede ver en el diagrama de abajo. Lo cual fue la base para el ejercicio de diseño que hice ya hace años cuando estuve estudiando la carrera.

Puertas logicas a partir de NAND

Sin embargo, no se trata del único componente que podemos construir usando puertas NAND, también se puede hacer otro componente básico, el SR Latch, utilizando esta puerta universal para su construcción. ¿Y qué es este componente? Pues memoria SRAM de 1 bit que se puede usar para modelar los registros de un procesador, sus cachés e incluso chips de memoria RAM externa.

Decodificador puertas NAND

¿Qué necesitamos un decodificador, por ejemplo? No hay problema, lo podemos hacer también con puertas NAND. Al final nos encontramos que es posible crear un microprocesador entero usando esta puerta lógica.

Usamos un FPGA para el ejercicio

Ahora bien, hemos de partir del hecho que utilizamos Verilog para la creación de este sencillo chip y con ello un FPGA sumamente sencillo, tan simple que no era ni tan siquiera una tarjeta, sino que se conectaba a través de un puerto USB. En concreto lo hicimos usando un Xilinx Spartan-3AN como el que veis abajo programando con Verilog, pero que teníamos que compartir entre todos.

FPGA Xilinx Spartan 3AN

En cuanto a Verilog, se trata de un lenguaje de descripción del hardware, el cual se basa en enumerar los diferentes elementos en un lenguaje de sintaxis tipo C y la interconexión entre ellos. Lo redujimos todo al uso de la puerta NAND para poder comparar soluciones entre nosotros a la hora de resolver el ejercicio.

Sin embargo, nos pasamos más tiempo corrigiendo errores del generador automático que otra cosa. La gracia es que no programábamos directamente en Verilog, sino que a través de un programa interconectábamos las puertas entre sí. Y muchas veces la aplicación no trasladaba eso al código correcto, por lo que nos tocaba corregirlo a mano.

La verdad de la experiencia

El profesor que nos tocó para las prácticas no tenía ni la más remota idea de trabajar con Verilog, ni VHDL ni nada por el estilo, era un profesor de FP que se ganaba un dinero extra, por lo que al final tuvimos que ser nosotros los que no sacamos las castañas del fuego.

FPGA Breadboard

Para que os hagáis una idea, el ejercicio nos decía que teníamos que hacer un programa de 256 bytes dónde cada byte era una instrucción base. La salida de datos se hacía a través de una serie de luces LED que tenían que encenderse de una manera u otra y en un orden concreto para comprobar que el ejercicio estaba bien. Por lo que nuestro docente aparecía al final del ejercicio para hablarnos siempre de las lucecitas o meternos bronca por la circuitería analógica.

Al final, toda la asignatura, o mejor dicho, esa sesión de prácticas, se basó en el libro But How Do it Know, un libro casi desconocido, pero que os recomiendo leer si queréis saber los entresijos de cómo funciona realmente un microprocesador. Es más, la mejor forma de entender algo es haciéndolo.

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x