NandGame – コンピュータを最初から作る方法
(nandgame.com)- NandGameは、単純な論理部品から出発して最終的にプログラム可能なコンピュータを組み立てる教育用パズルゲーム
- 各レベルは仕様どおりに動作するコンポーネントを作る課題で、完成した部品が次の段階のビルディングブロックになる
- コンピュータアーキテクチャやソフトウェアの事前知識は不要で、数学も足し算と引き算のレベルで十分だが、一部の課題には時間がかかることがある
- 最初の課題は、入力
aとbがどちらも1のときだけ出力が0になる nand コンポーネントを、配線とリレーで実装すること - ツールボックスの部品を青い領域にドラッグして配置し、スペースキー・方向キー・Escape でドラッグとキャンセルを操作する
基本部品からコンピュータまで
- NandGameは、基本コンポーネントを組み合わせて徐々により強力な部品を作り、最後にはプログラム可能なコンピュータを構成していく方式で進む
- 複数のレベルに分かれており、各段階で与えられた仕様に合うように動作するコンポーネントを作らなければならない
- 完成したコンポーネントは、その後のレベルで使える部品になる
- 出発点は最も単純な論理コンポーネント
必要な事前知識と難易度
- コンピュータアーキテクチャやソフトウェアに関する事前知識は不要
- 数学は足し算と引き算以上を要求しない
- 一部の課題は解くのに時間がかかることがあり、忍耐が必要
最初の課題: nand を作る
- 最初の課題は、配線とリレーを使って nand コンポーネントを実装すること
- 入力
aとbを出力に接続しつつ、仕様に合う動作になるよう回路を構成しなければならない 1は電流が流れている状態、0は電流が流れていない状態を意味するV入力は常に1の定電流を伝える
nand の仕様
nandの出力は、2つの入力がどちらも1のときだけ0になる- 正確な入出力仕様は次のとおり
| a | b | 出力 |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
操作方法
- ツールボックスのコンポーネントを青い領域へドラッグして配置する
- ドラッグ可能な項目をつかむにはスペースキーを押す
- ドラッグ中は方向キーで項目を移動する
- もう一度スペースキーを押すと新しい位置に置かれ、Escape を押すとキャンセルする
1件のコメント
Hacker Newsのコメント
このゲームが気に入って、小さな FPGA開発ボードを買い、自分で命令セットとソフトCPUを作ってみた
実用的ではないけれど楽しい練習になったし、オープンソースのエコシステムがそこそこ良く価格も安かったのでiCE40ボードを選んだ: https://www.digikey.com/en/products/detail/lattice-semicondu...
今ならもっと良い選択肢があるかもしれない
普通ならUSB変換器を適当に作っただろうが、Wirthはきちんと処理しようとしてFPGAボードを持ち出し、ソフトCPUを作り、その上にOS、ウィンドウシステム、言語ツールチェーンなどを載せた
おかげでハードウェア設計アプリとテキストエディタを動かし、お気に入りのマウスでさらに多くのソフトCPU設計を試せるようになった
似たゲームの Turing Complete をやってみたが、本当に面白かった: https://store.steampowered.com/app/1444480/Turing_Complete/
Nand2Tetrisの本にとても似ている
マシンを 32ビット命令 にアップグレードし、それに合わせたアセンブリ言語のドキュメントまで書いていた
まだ早期アクセスなのに素晴らしいゲーム
見た目がよく完成度も高く、かなり中毒性がある
GOGにもあるのが良い: https://www.gog.com/game/turing_complete
関連記事:
NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=36862274 - 2023年7月
NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=31055307 - 2022年4月
NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=25282507 - 2020年12月
Show HN: Online challenge: Build a CPU from scratch - https://news.ycombinator.com/item?id=17508151 - 2018年7月
本当に面白い練習だった
これを見て、自分がどれだけ多くを忘れてしまったかを思い出し、少し苦い気持ちになった
20年以上前に大学で 電気工学 を学び、コンピュータアーキテクチャを専攻していたが、仕事ではまったく使わずソフトウェアのほうへ進んだ
ここにあることをどうやるのか一つも覚えておらず、試行錯誤の末にようやく半加算器まで作れた
誰が穀物法を可決したのか、米国で冷蔵輸送を始めたのが誰だったのかを覚えていないと自分を責めるのに似ている
重要な筋書き、たとえば戦争は工学を必要とし、農業革命と産業革命が続き、歴史とは階級闘争である、といった背景理解があれば、新しい情報は磁場の中の小片のように収まるべき場所に収まっていく
だからあまり自分を責めず、もう少し自分に寛大でいてもいい
このゲームと Nand2Tetris のコースを両方やってみて、ようやく両者が同じコンピュータを実装しているのだと気づいた
このゲームは対話型のグラフィカル版で、元のNand2Tetrisは論理ゲート間の接続をクリック&ドラッグする代わりに、テキストのHDLで書く方式
どちらも面白く教育的だったが、NandGameのほうがより楽しかった
ただ、両者のつながりは知っておくとよい。NandGameを終えたあと、Nand2Tetrisの後続課題、つまりより高い階層のコンピュータソフトウェア作業へ進めるし、反対側のバージョンをやった人たちと経験や内容を共有しやすい
課題をやるには大学の教科書や試験問題まで探し直す必要があり、CPUの中核部分をほぼ完成させなければならないあたりで諦めた
講義とテキストは正直かなり不十分だと感じたし、インターネット時代にはこれが普通なのか分からないが、授業と教材にはある程度自己完結していることを期待していた
Andrew Wilkesによるデスクトップベースの LogicSimX/Logic Simulator 2 だ: https://logicsimx.com/about/ https://andrew-wilkes.itch.io/logic-simulator-2
良さそうに見えるが、きちんと評価できるほどは詳しくない
考えてみる材料として、最初のステップで NAND ゲートを実際に作る部分を除けば、このプロセスを終えたとき、結局 ニューラルネットワークにかなり近い形になる
NAND ゲート 1 個を表現するのにニューロンが 2 個必要で、深さ n 層、重み行列には多くの 0、そして少しの記憶領域がある構造のように見える
問いはこうだ。アセンブリレベルの入出力の意味だけが与えられたとき、空のニューラルネットワークを訓練して、このような構造にできるだろうか? 逆伝播は当然無理だろうが、何らかの形の方向性のある探索は可能ではないだろうか?
3多数決ゲートやほかのいくつかのゲートを使ってみたが、1 層を超えると逆伝播がうまくいかず、おそらくビット精度が足りなかったのだと思う
「逆伝播なしで訓練する」問題は実際かなり難しく、結局あきらめた
逆伝播なしでニューラルネットワークを訓練する良い方法はあるのだろうか? 情報ボトルネックはある程度ありそうだが、ニューラルネットワークなしで相互情報量を評価するのは難しい
この分野の経験がまったくないので、各構成要素が何をするのか説明してほしい
リレーが何をするのか、
cとinが何なのかが分からない別電源があるのに、
aやbを電源につないでオンにすると、それだけで電源が入るように見えるのも混乱するコイル(
c)に電源が入ると、スイッチの状態が標準状態から反対の状態に変わる標準オンのスイッチは、
c = 0のときinの値を出力へ渡すが、c = 1だとコイルに電気が流れてスイッチが開く、つまりオフになる標準オフのスイッチは逆に動作する
cはコイルで、電気が入るとスイッチをトグルするinはスイッチが閉じているときに通過する値で、ここでは 1 または 0別電源は、2 つの入力値とは無関係に 1 の値を得るために必要
たとえば 2 つの入力がどちらも 0 のとき常に 1 を出力したいなら、引き上げるための高い値が必要で、その役割を電源が担う
Cはおそらく coil または control の C だと思うリレーは、鉄心に巻いたコイルで作った電磁石が制御する機械式スイッチ
コイルに電流が流れると金属ばねを引き寄せ、その結果
inから出力へ電流を流したり、逆に遮断したりできる提供されている 2 種類のリレー部品が、まさにこの 2 つの動作を表している
本当にすばらしい。みんな MHRD も一度のぞいてみるか、プレイしてみることをおすすめする
https://store.steampowered.com/app/576030/MHRD/
すごく良さそう。本を最後までやれなかったのが残念で、これをもっと試してみたい