5 puntos por GN⁺ 2024-11-02 | 1 comentarios | Compartir por WhatsApp
  • NandGame es un juego educativo de rompecabezas que parte de componentes lógicos simples para finalmente ensamblar una computadora programable
  • Cada nivel consiste en crear un componente que funcione según la especificación, y las piezas completadas se convierten en bloques de construcción para la siguiente etapa
  • No se requieren conocimientos previos de arquitectura de computadoras ni de software, y en matemáticas basta con suma y resta, aunque algunas tareas pueden tomar tiempo
  • El primer desafío consiste en implementar un componente nand con cables y relés, cuya salida sea 0 solo cuando las entradas a y b sean ambas 1
  • Los componentes de la caja de herramientas se arrastran al área azul, y se usa la barra espaciadora, las flechas y Escape para arrastrar y cancelar

De componentes básicos a una computadora

  • NandGame avanza combinando componentes básicos para crear piezas cada vez más potentes y, al final, construir una computadora programable
  • Está dividido en varios niveles, y en cada etapa hay que crear un componente que funcione de acuerdo con la especificación dada
    • El componente completado se convierte en una pieza que puede usarse en niveles posteriores
    • El punto de partida es el componente lógico más simple

Conocimientos previos necesarios y dificultad

  • No se requieren conocimientos previos sobre arquitectura de computadoras ni software
  • En matemáticas no exige más que suma y resta
  • Algunas tareas pueden llevar tiempo de resolver, por lo que se necesita paciencia

Primer desafío: crear nand

  • El primer desafío es implementar un componente nand usando cables y relés
  • Hay que conectar las entradas a y b a la salida, pero configurando el circuito para que se comporte según la especificación
  • 1 significa que circula corriente, y 0 significa que no circula corriente
  • La entrada V entrega una corriente constante que siempre es 1

Especificación de nand

  • La salida de nand es 0 solo cuando ambas entradas son 1
  • La especificación exacta de entrada y salida es la siguiente
a b salida
0 0 1
0 1 1
1 0 1
1 1 0

Controles

  • Arrastra los componentes de la caja de herramientas al área azul
  • Presiona la barra espaciadora para tomar un elemento que se pueda arrastrar
  • Mientras lo arrastras, mueve el elemento con las flechas
  • Presiona de nuevo la barra espaciadora para soltarlo en la nueva posición, o Escape para cancelar

1 comentarios

 
GN⁺ 2024-11-02
Opiniones en Hacker News
  • Me gustó tanto este juego que compré una pequeña placa de desarrollo FPGA y probé crear mi propio conjunto de instrucciones y una CPU blanda.
    No era práctico, pero fue un ejercicio divertido; elegí una placa iCE40 porque el ecosistema open source era decente y el precio era bajo: https://www.digikey.com/en/products/detail/lattice-semicondu...
    Hoy quizá haya mejores opciones.

    • Niklaus Wirth también hizo algo parecido: la excusa era que no podía encontrar una caja comercial para comunicarse con su mouse de recuerdo de Xerox PARC favorito.
      Normalmente uno habría improvisado un conversor USB, pero Wirth, para hacerlo bien, tomó una placa FPGA, creó una CPU blanda y montó encima un SO, un sistema de ventanas, una cadena de herramientas de lenguaje, etc.
      Gracias a eso pudo ejecutar una app de diseño de hardware y un editor de texto, y experimentar con más diseños de CPU blandas usando su mouse favorito.
    • El siguiente paso probablemente sea Tiny Tapeout: https://www.tinytapeout.com/
  • Probé un juego parecido, Turing Complete, y fue realmente divertido: https://store.steampowered.com/app/1444480/Turing_Complete/
    Es muy similar al libro Nand2Tetris.

    • Recién después de dedicarle 30 horas a Turing Complete me di cuenta de lo que había pasado.
      Había actualizado la máquina a instrucciones de 32 bits e incluso había escrito documentación para un lenguaje ensamblador adaptado a eso.
      Aunque todavía está en acceso anticipado, es un juegazo.
    • Turing Complete definitivamente es recomendable.
      Se ve bien, está muy pulido y es bastante adictivo.
      También está en GOG, lo cual está bueno: https://www.gog.com/game/turing_complete
  • Artículos relacionados:
    NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=36862274 - julio de 2023
    NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=31055307 - abril de 2022
    NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=25282507 - diciembre de 2020
    Show HN: Online challenge: Build a CPU from scratch - https://news.ycombinator.com/item?id=17508151 - julio de 2018

    • No sé cómo me perdí los artículos anteriores, pero leí el libro e implementé la computadora por mi cuenta.
      Es un ejercicio realmente divertido.
  • Ver esto me recuerda cuánto he olvidado, y me deja una sensación amarga.
    Hace más de 20 años estudié ingeniería eléctrica en la universidad y me especialicé en arquitectura de computadoras, pero profesionalmente no lo usé para nada y me fui por el lado del software.
    No recordaba absolutamente nada de cómo hacer estas cosas y, tras ensayo y error, apenas logré construir un semisumador.

    • Entiendo esa reacción, pero creo que los estudios que hiciste antes probablemente te ayudaron a tomar repetidamente decisiones en la dirección correcta.
      Es parecido a culparse por no recordar quién aprobó las leyes del grano o quién inició el transporte refrigerado en Estados Unidos.
      Si tienes una comprensión de fondo de la narrativa central —por ejemplo, que la guerra exige ingeniería, que a la revolución agrícola le sigue la revolución industrial, y que la historia es lucha de clases—, la información nueva encaja en su lugar como piezas dentro de un campo magnético.
      Así que no seas tan duro contigo mismo; puedes darte un poco más de margen.
  • Solo después de probar tanto este juego como el curso Nand2Tetris me di cuenta de que ambos implementan la misma computadora.
    Este juego es una versión gráfica e interactiva, mientras que el Nand2Tetris original consiste en escribir HDL en texto en vez de hacer clic y arrastrar conexiones entre compuertas lógicas.
    Ambos fueron divertidos y educativos, pero NandGame me pareció más entretenido.
    Aun así, conviene conocer la conexión entre ambos. Después de terminar NandGame puedes seguir con las tareas posteriores de Nand2Tetris, es decir, trabajar en las capas superiores del software de la computadora, y también es más fácil compartir experiencias y contenido con quienes hayan probado la otra versión.

    • Intenté hacer nand2tetris y, aunque en la universidad me iba bastante bien en las materias de hardware, este curso y el libro se sintieron más como “dibujar el resto del búho”.
      Para hacer las tareas tuve que volver a buscar libros de texto universitarios e incluso exámenes, y abandoné más o menos en el punto en que había que tener casi terminada la parte central de la CPU.
      Sinceramente, sentí que las clases y el texto se quedaban muy cortos; no sé si eso es normal en la era de internet, pero esperaba que el curso y el material fueran hasta cierto punto autocontenidos.
    • Hay al menos otro simulador de arrastrar y soltar compatible con Nand2Tetris.
      Es LogicSimX/Logic Simulator 2, de escritorio, de Andrew Wilkes: https://logicsimx.com/about/ https://andrew-wilkes.itch.io/logic-simulator-2
      Se ve bien, pero no lo conozco lo suficiente como para evaluarlo en serio.
  • Como punto para pensar: si se excluye la parte de fabricar físicamente la compuerta NAND en el primer paso, al terminar este proceso se obtiene algo que, en última instancia, se parece mucho a una red neuronal.
    Para representar una sola compuerta NAND se necesitan 2 neuronas, y se ve como una estructura con n capas de profundidad, muchas entradas en cero en la matriz de pesos y algo de almacenamiento.
    La pregunta es esta: dado únicamente el significado de entrada/salida a nivel de ensamblador, ¿se podría entrenar una red neuronal vacía para que adopte una estructura como esta? Obviamente backpropagation no funcionaría, pero ¿no sería posible algún tipo de búsqueda dirigida?

    • El año pasado intenté esto con un amigo.
      Probamos una compuerta de mayoría de 3 y varias otras compuertas, pero después de más de una capa backpropagation no funcionaba bien, quizá por falta de precisión de bits.
      El problema de “entrenar sin backpropagation” en realidad es bastante difícil y al final lo abandonamos.
      ¿Existe algún buen método para entrenar redes neuronales sin backpropagation? Parece haber cierto cuello de botella de información, pero es difícil evaluar la información mutua sin una red neuronal.
    • Algunos de los primeros experimentos con redes neuronales de hace varias décadas buscaban demostrar que podían modelar compuertas lógicas con éxito.
  • No tengo ninguna experiencia en esto, así que me gustaría que explicaran qué hace cada componente.
    No sé qué hace un relé, ni qué son c e in.
    También me confunde por qué, si hay una fuente de alimentación separada, al conectar a o b a la alimentación y encenderlos eso por sí solo los energiza.

    • Un relé es un interruptor controlado eléctricamente.
      Cuando se alimenta la bobina (c), el estado del interruptor cambia desde su estado predeterminado al estado opuesto.
      Un interruptor normalmente cerrado pasa el valor de in a la salida cuando c = 0, pero si c = 1, la bobina se energiza y el interruptor se abre o se apaga.
      Un interruptor normalmente abierto funciona al revés.
      c es la bobina y, cuando recibe alimentación, conmuta el interruptor.
      in es el valor que pasa cuando el interruptor está cerrado; aquí es 1 o 0.
      La fuente de alimentación separada es necesaria para obtener un valor 1 independientemente de los dos valores de entrada.
      Por ejemplo, si las dos entradas son 0 y quieres que siempre salga 1, necesitas un valor alto del cual tirar hacia arriba; ese papel lo cumple la alimentación.
    • C probablemente sea la C de coil o de control.
      Un relé es un interruptor mecánico controlado por un electroimán hecho con una bobina enrollada alrededor de un núcleo de hierro.
      Cuando circula corriente por la bobina, atrae un resorte metálico y, como resultado, puede hacer que la corriente fluya de in a la salida, o bien cortarla.
      Los dos tipos de componentes de relé que se proporcionan representan precisamente esas dos acciones.
  • Es realmente genial. También recomiendo a todos echarle un vistazo a MHRD o jugarlo.
    https://store.steampowered.com/app/576030/MHRD/

  • Se ve genial. Me da pena no haber terminado el libro, y me gustaría probar más esto.