¿Una CPU solo con puertas NAND? ¡Es posible!

Spread the love

Una de las cosas que aprendí en la Universidad fue a diseñar una CPU muy sencilla, la cual solo tenía 16 instrucciones y un direccionamiento de 8 bits, por lo que solo soportaba programas de 256 bytes que teníamos cargar en la memoria. ¿La particularidad? Lo hicimos todo con puertas NAND en vez de usar el resto de puertas lógicas.

La puerta NAND es universal

La puerta NAND es un tipo de circuito electrónico básico, en el que hay una cantidad de entradas de 1 bit cada una, por lo que la señal puede ser alta (1) o baja (0), al igual que la salida que es solo 1. Solo cuando todos los valores de entrada sean 0 entonces el valor de salida sería 1.

Puerta NAND

La gracia es que como hemos dicho, la NAND es una de las dos puertas universales, esto significa que podemos generar el resto de puertas lógicas a partir de una puerta NAND. ¿Cómo? El siguiente diagrama os ayudará:

Como podéis ver es posible construir las diferentes puertas lógicas a través de puertas NAND, pero no es el único caso. También podemos construir otro componente básico, un SR Latch, a través de esta puerta lógica universal.

El circuito que veis arriba es memoria SRAM de 1 bit basada solamente en puertas NAND. ¿Necesitáis un descodificador? Lo podéis construir sin problemas con puertas NAND.

Por lo que sería posible construir un procesador complejo al 100% únicamente haciendo uso de puertas NAND para su creación.

La puerta NAND en Verilog

Mucha gente me pregunta, ¿sabés Verilog? En realidad con tal de realizar la asignatura, todo lo redujimos a una puerta lógica en todo el diseño, y si, lo habéis adivinado. Se trata de la puerta NAND.

Antes de nada vamos a decir que Verilog es un lenguaje de descripción del hardware, no de programación, el cual describe los diferentes elementos del circuito y como están interconectados entre sí. No tienes por qué seguir un orden como ocurre en los programas de software, ya que lo que estás haciendo es una descripción de algo.

module nand_gate(x,a,b); 
/*le damos nombre al módulo y marcamos los pines, estos se declaran de derecha a izquierda del circuito*/
input a,b;

/* indicamos dos pines de entrada, que son a y b. Una puerta lógica puede tener más pines de entrada */
output x;
/* indicamos el pin de salida, que en este caso es x*/
always@(a,b)
/*Para complicaros la explicación vamos a dejar esta parte por el momento.

begin
if (a==1 & b==1)
x=0;
else
x=1;
end
endmodule
/* Lo que veis en estas líneas de arriba es el código que nos indica el funcionamiento de la puerta lógica. Simplemente, le decimos que si el valor de las entradas a y b equivalen a 1 entonces la salida x es 0.

¿Aprendimos realmente Verilog?

Pues no, solo lo aprendimos para corregir errores del generador automático. Os explico, nosotros hacíamos diagramas de las puertas lógicas en un programa y las íbamos interconectando. Luego usábamos un programa que habían desarrollado en la facultad que generaba el código Verilog de manera automática, pero no siempre lo hacía de la manera correcta y, por tanto, teníamos que realizar la comprobación física.

Lattice Verilog

El circuito que usábamos era algo muy rudimentario, en principio, lo que teníamos era una serie de interruptores que indicaban un bit de entrada, y luego una serie de LEDS de salida, lo que nos permitía ir probando las instrucciones. El segundo paso fue crear una ROM que contenía la descripción de cada instrucción y una serie de registros de desplazamiento. Con ello conseguimos que saliese en pantalla las diferentes operaciones que se iban haciendo, pero en un lenguaje leíble. Es decir, habíamos conseguido crear una terminal de texto

Lo último que hicimos fue añadir una memoria RAM de 256 bytes, también la hicimos con puertas NAND que modelamos «a mano», para luego convertirlas en Verilog de manera automática y cargar la configuración en el FPGA para ver si la cosa funcionaba.

¿Cómo puedo aprender?

No te hace falta ir a la universidad para aprender cuál es el funcionamiento básico de un procesador e incluso construir uno. Es más, el libro que seguimos se titula «But how do it know?». Lo podéis encontrar en Amazon, tanto en formato Kindle como en físico y os lo recomiendo al 100% si queréis saber realmente como funciona un procesador.

Eso si, os recomiendo acompañarlo de un simulador como Logisim, si tenéis paciencia aprenderéis a como funciona un procesador y los elementos básicos del diseño. Eso si, no esperéis tener la capacidad de poder construir el último Intel Core o AMD Ryzen, estamos hablando de bichos de miles de millones de transistores donde cada parte es sumamente compleja.

5 1 vote
Article Rating
Subscribe
Notify of
guest

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