QurioWork

日常思ったことと好奇心の追求

Nand2tetris 3章までの感想

先日書いた「Nand2tetris」について、3章まで終わったので感想を書く。

ちなみに本書は大きく2つのパートで分かれている。1章~5章までのハードウェア構築と6章~12章のソフトウェア構築だ。

下記図の赤枠で囲った箇所が1章~3章だ。

N2T_Map_01-03.png

Nand2tetris 3章まで終えて

一言でいえば「面白い」だ。 今までの教科書は何だったのだろう…と思ったほど楽しく取り組めたし、理解が深まった。 シンプルかつ本質を追求した構成が功を奏していると思った。

模範解答が載っていないというのも良い点だ。 演習問題で試行錯誤を繰り返していくうちに、論理回路の動きを明瞭に捉えることができるようになった。

次章からは章ごとの要点や感想を書いていく。

1章 : ブール論理

猪木風に言えば、NANDがあればなんでもできる 誇張ではなく実際にそうなのだ。

NAND回路を出発点とし、AND/OR/NOT回路を構築し、それらを元に更に複雑な回路を作成してゆく。レゴブロックのように回路を積み上げていく感覚が堪らなく良い。

ここで作成した基本回路は、次章以降で繰り返し使うので重要だ。 「何に使うのだろう」という回路も、あとで使う。 その謎が解けたときは、まだ本書の序盤だというのに点が線になったようで感動した。

本書で取り上げられていない話題といえば、「NANDはどうやって作るのか」だ。 その疑問については、本サイトで以前取り上げた「NandGame」をやってみると何となくわかるはず。

NandGame https://nandgame.com/

2章 : ブール演算 と ALU作成

2章の要は "ALU" だ。 前章で作成した基本回路を使って、最終成果物として "ALU" を作成する。 "ALU" は、NandGameでも作っていたため、躓くことなく進められた。

ただし、序盤では "ALU" の真価を測り知ることができない。 「この演算にはどのような意味があるのか」という疑問が解けてゆくのは、4章以降なのだろう。今後が楽しみだ。

3章 : 順序回路と メモリ

順序回路とは、出力が過去の入力に依存する論理回路のことだ。ちなみに対義語として出力が過去の入力に依存しない論理回路のことを「組み合わせ回路」という。

順序回路ではDFF(D-フリップフロップ)をNAND回路に次ぐ2つ目の基本ユニットとしてレジスタやメモリの構築を進める。(ちなみに当然 DFF も NAND回路から作れる)

本書が画期的だと思った点(または欠点)は、DFF を基本ユニットとした点だ。そのおかげで、レジスタやメモリの仕組みに集中できた。

反面、DFF を基本ユニットとしたため、DFF の内部構造は本書では知ることができない。

DFF の内部動作については下記書籍の解説が詳しくてオススメ。

そして、3章で意外と苦戦したのはカウンターだ。 しかし、一度作ってしまえば、何でこれで苦戦していたのか分からないほど単純だった。素直にIF条件の順番で採用される信号を考えてマルチプレクサを繋げてゆくだけだった。

NandGame の CustomComponents を使って、本書と同様のカウンターを作成したので、何となく苦戦した雰囲気を感じてほしい。

N2T_pc.png

今後の予定

今後は、4章~5章の演習に取り組み、ハードウェア編を4月中に終わらせたい。 そしたら、ハードウェア編の総括を書きたい。