Por @Alvy

Así se construye, paso a paso, una CPU con las reglas del Juego de la vida de Conway

Nicholas Carlini escribió hace tiempo esta detallada serie de cinco artículos ([1], [2], [3], [4], [5] sobre cómo ha construido, paso a paso, circuitos digitales funcionales dentro del Juego de la vida de Conway. Su inspiradora idea es, poco a poco, implementar un microprocesador Intel 4004 completo que sea capaz de ejecutar el propio Juego de la vida, lo cual sería un sin duda un grácil y precioso bucle autorreferente.

La primera parte explica los componentes básicos, que como se puede imaginar son los deslizadores/planeadores con los que se puede transportar una señal de 1 bit. Éstos surgen de cañones de deslizadores, que sirven como fuente periódica cada pocos tics del reloj. Cuando hace falta, unas estructuras llamadas «devoradores» sirven para eliminarlos sin que quede rastro de ellos. Las colisiones entre deslizadores son el mecanismo para implementar las puertas lógicas: OR, AND y NOT.

En teoría combinando estas tres puertas lógicas ya se puede construir cualquier ordenador. En la práctica, debido a las limitaciones de las reglas del juego de la vida y el «escenario», se necesitan algunos elementos auxiliares como rotadores, duplicadores, cruces y divisores de señal; nada extremadamente complicado. Con todo esto se puede construir un sumador de 4 bits totalmente funcional.

La segunda y tercera partes de la serie entran en la lógica secuencial: un reloj hecho con un bucle de compuerta NOT, latches para almacenar los bits, flip-flops de tipo D sincronizados y un contador de 4 bits conectado a un visualizador de 7 segmentos. Como los autómatas celulares son deterministas se pueden simplificar algunos diseños, aunque no es que sean precisamente lo más eficiente en cuestión de espacio físico y velocidad.

En la cuarta parte parte se unen todos estos bloques prediseñados en una máquina de registros ilimitados (URM) de 16 registros de 4 bits, que es capaz de ejecutar tres instrucciones básicas: INC (incrementar), DEC (decrementar) y un salto condicional. También hay algunos módulos más sencillos que combinando las anteriores sirven para «poner a cero» (ZRO) o los «saltos incondicionales» (JMP). El diseño incluye:

  • Reloj
  • Registros
  • Unidad aritmético-lógica (ALU) mínima
  • Contador de programa
  • ROM de 128 instrucciones
  • Lógica de control
  • Salidas en 7 segmentos

A partir de aquí la CPU está lista y se pueden hacer muchas cosas. La quinta y última parte habla de cómo multiplexar circuitos para hacerlos más eficientes, e incluye como ejemplo hasta un contador de Fibonacci. Una vez se dispone de las herramientas básicas, el resto es echarle imaginación.

Relacionado:

Compartir en Flipboard Publicar