NandGame – Comment construire un ordinateur à partir de zéro
(nandgame.com)- NandGame est un jeu de réflexion éducatif dans lequel on part de simples composants logiques pour assembler, au final, un ordinateur programmable
- Chaque niveau consiste à créer un composant qui fonctionne selon les spécifications, et la pièce terminée devient le bloc de construction de l’étape suivante
- Aucune connaissance préalable en architecture informatique ou en logiciel n’est nécessaire, et en mathématiques le niveau addition et soustraction suffit, même si certains défis peuvent prendre du temps
- Le premier défi consiste à implémenter un composant nand avec des fils et des relais, de sorte que la sortie soit
0uniquement lorsque les entréesaetbvalent toutes deux1 - Les composants de la boîte à outils se placent par glisser-déposer dans la zone bleue, et le glisser-déposer ainsi que l’annulation se contrôlent avec la barre d’espace, les flèches directionnelles et Escape
Des composants de base à l’ordinateur
- NandGame progresse en combinant des composants de base pour créer des pièces de plus en plus puissantes, jusqu’à construire à la fin un ordinateur programmable
- Il est divisé en plusieurs niveaux, et à chaque étape il faut créer un composant qui fonctionne conformément aux spécifications données
- Le composant terminé devient ensuite une pièce utilisable dans les niveaux suivants
- Le point de départ est le composant logique le plus simple
Connaissances préalables nécessaires et difficulté
- Aucune connaissance préalable en architecture informatique ou en logiciel n’est requise
- Les mathématiques ne vont pas au-delà de l’addition et de la soustraction
- Certains défis peuvent demander du temps à résoudre, et exigent donc de la patience
Premier défi : créer un nand
- Le premier défi consiste à implémenter un composant nand à l’aide de fils et de relais
- Il faut relier les entrées
aetbà la sortie tout en construisant un circuit dont le comportement respecte les spécifications 1signifie qu’un courant circule, et0qu’aucun courant ne circule- L’entrée
Vfournit un courant constant valant toujours1
Spécification du nand
- La sortie de
nandvaut0uniquement lorsque les deux entrées valent1 - Les spécifications exactes d’entrée/sortie sont les suivantes
| a | b | sortie |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Commandes
- Les composants de la boîte à outils se placent par glisser-déposer dans la zone bleue
- Appuyez sur la barre d’espace pour saisir un élément déplaçable
- Pendant le glisser-déposer, déplacez l’élément avec les flèches directionnelles
- Appuyez de nouveau sur la barre d’espace pour le poser à son nouvel emplacement, ou sur Escape pour annuler
1 commentaires
Commentaires sur Hacker News
J’ai tellement aimé ce jeu que j’ai acheté une petite carte de développement FPGA pour essayer de créer moi-même un jeu d’instructions et un CPU logiciel.
Ce n’était pas vraiment pratique, mais c’était un exercice amusant, et j’ai choisi une carte iCE40 parce que l’écosystème open source est correct et que le prix est bas : https://www.digikey.com/en/products/detail/lattice-semicondu...
Il existe peut-être de meilleures options aujourd’hui.
La plupart des gens auraient bricolé un adaptateur USB, mais Wirth a voulu faire les choses proprement : il a pris une carte FPGA, créé un CPU logiciel, puis installé dessus un OS, un système de fenêtres, une chaîne d’outils de langage, etc.
Cela lui a permis de faire tourner une application de conception matérielle et un éditeur de texte, et d’expérimenter davantage de conceptions de CPU logiciels avec sa souris favorite.
J’ai essayé un jeu similaire, Turing Complete, et c’était vraiment amusant : https://store.steampowered.com/app/1444480/Turing_Complete/
C’est très proche du livre Nand2Tetris.
J’avais fait évoluer la machine vers des instructions 32 bits, et même rédigé la documentation du langage assembleur correspondant.
C’est un excellent jeu, même s’il est encore en accès anticipé.
Il est beau, bien fini, et assez addictif.
C’est bien aussi qu’il soit sur GOG : https://www.gog.com/game/turing_complete
Articles liés :
NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=36862274 - juillet 2023
NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=31055307 - avril 2022
NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=25282507 - décembre 2020
Show HN: Online challenge: Build a CPU from scratch - https://news.ycombinator.com/item?id=17508151 - juillet 2018
C’est un exercice vraiment amusant.
Voir ça me rappelle amèrement tout ce que j’ai oublié.
J’ai fait de l’électrotechnique à l’université il y a plus de 20 ans, avec une spécialisation en architecture des ordinateurs, mais je ne m’en suis jamais servi professionnellement et je suis parti vers le logiciel.
Je ne me souvenais absolument plus comment faire les choses présentées ici, et après pas mal d’essais-erreurs, j’ai à peine réussi à construire un demi-additionneur.
C’est un peu comme se reprocher de ne plus se souvenir de qui a fait adopter les Corn Laws, ou de qui a lancé le transport frigorifique aux États-Unis.
Si tu as en tête le récit de fond — par exemple que la guerre exige de l’ingénierie, que la révolution agricole mène à la révolution industrielle, et que l’histoire est une lutte des classes — les nouvelles informations se mettent en place comme des fragments dans un champ magnétique.
Donc ne sois pas trop dur avec toi-même ; tu peux te montrer un peu plus indulgent.
Ce n’est qu’après avoir fait à la fois ce jeu et le cours Nand2Tetris que j’ai compris qu’ils implémentaient le même ordinateur.
Ce jeu en est une version graphique interactive, tandis que le Nand2Tetris original consiste à écrire du HDL textuel au lieu de cliquer-déposer des connexions entre portes logiques.
Les deux étaient amusants et pédagogiques, mais NandGame était plus fun.
Cela dit, il est utile de connaître le lien entre les deux. Après avoir terminé NandGame, on peut enchaîner avec les exercices suivants de Nand2Tetris, c’est-à-dire travailler sur les couches logicielles supérieures de l’ordinateur, et cela facilite aussi le partage d’expérience et de contenu avec les personnes qui ont fait l’autre version.
Pour faire les exercices, j’ai dû ressortir des manuels universitaires et des sujets d’examen, puis j’ai abandonné à peu près au moment où il fallait presque terminer la partie centrale du CPU.
Franchement, j’ai trouvé les cours et le texte très insuffisants ; je ne sais pas si c’est devenu normal à l’ère d’Internet, mais je m’attendais à ce que le cours et le manuel soient raisonnablement autoportants.
C’est LogicSimX/Logic Simulator 2, basé sur desktop, d’Andrew Wilkes : https://logicsimx.com/about/ https://andrew-wilkes.itch.io/logic-simulator-2
Ça a l’air correct, mais je ne le connais pas assez pour l’évaluer sérieusement.
À titre de réflexion, si l’on met de côté, dans la première étape, la partie où l’on fabrique réellement des portes NAND, une fois ce processus terminé on obtient finalement une forme très proche d’un réseau de neurones
Il faut 2 neurones pour représenter une porte NAND, et cela ressemble à une structure avec n couches de profondeur, beaucoup de zéros dans la matrice de poids, et un peu d’espace de stockage
La question est la suivante : étant seulement donnée la sémantique des entrées/sorties au niveau assembleur, pourrait-on entraîner un réseau de neurones vide pour qu’il prenne une structure de ce genre ? La rétropropagation ne fonctionnerait évidemment pas, mais une certaine forme de recherche directionnelle ne serait-elle pas possible ?
Nous avons essayé des portes à majorité 3 et plusieurs autres portes, mais dès qu’on dépassait une couche, la rétropropagation ne marchait pas bien, probablement faute d’une précision suffisante sur les bits
Le problème de l’« entraînement sans rétropropagation » est en fait assez difficile, et nous avons fini par abandonner
Existe-t-il une bonne méthode pour entraîner un réseau de neurones sans rétropropagation ? Il semble y avoir un certain goulot d’étranglement informationnel, mais il est difficile d’évaluer l’information mutuelle sans réseau de neurones
Je n’ai aucune expérience dans ce domaine, donc j’aimerais qu’on m’explique ce que fait chaque composant
Je ne sais pas ce que fait un relais, ni ce que sont
cetinJe ne comprends pas non plus pourquoi, alors qu’il y a une alimentation séparée, le simple fait de connecter
aoubà l’alimentation et de l’activer suffit à alimenter le circuitQuand la bobine (
c) est alimentée, l’état de l’interrupteur passe de son état par défaut à l’état opposéUn interrupteur normalement fermé transmet la valeur de
invers la sortie quandc = 0, mais sic = 1, la bobine est alimentée et l’interrupteur s’ouvre, ou se coupeUn interrupteur normalement ouvert fonctionne à l’inverse
cest la bobine, et lorsqu’elle est alimentée, elle fait basculer l’interrupteurinest la valeur qui passe lorsque l’interrupteur est fermé, ici 1 ou 0L’alimentation séparée est nécessaire pour obtenir une valeur 1 indépendamment des deux entrées
Par exemple, si l’on veut toujours sortir 1 lorsque les deux entrées valent 0, il faut une valeur haute à tirer vers le haut ; c’est le rôle de l’alimentation
Cest probablement le C de coil ou de controlUn relais est un interrupteur mécanique commandé par un électroaimant constitué d’une bobine enroulée autour d’un noyau de fer
Quand un courant traverse la bobine, elle attire un ressort métallique, ce qui peut permettre au courant de circuler de
invers la sortie, ou au contraire l’interrompreLes deux types de composants relais proposés représentent précisément ces deux comportements
Vraiment excellent. Je recommande à tout le monde de jeter aussi un œil à MHRD, voire d’y jouer
https://store.steampowered.com/app/576030/MHRD/
Ça a l’air génial. Je regrette de ne pas être allé jusqu’au bout du livre, et j’ai envie d’essayer davantage avec ça