「コンピュータシステムの理論と実装」を読んだメモを書いていきます。
メモ
ブール代数
- ブール値
- 0/1, false/trueなどのラベルで扱われる値
- バイナリ値, 2値などとも呼ばれる
- ブール関数
- ブール値を入力として受け取り出力としてブール値を返す関数
- ブール関数は正準表現で表すことができる
- 正準表現は、真理値表の出力が1になっている各行で入力されたリテラルを全てANDで結合して作られた項をORで結合したもの
- 全てのブール関数はAND, OR, NOTで書くことができる
- NAND(NOR)を使うことでAND, OR, NOTを作ることができる
- つまりNANDを使うことですべてのブール関数を作ることができる
論理ゲート
- 論理ゲート
- 論理設計
- 論理ゲートの構成を組み立てること
- なるべく少ないゲートを使ってゲートの仕様を満たすよう設計する
ハードウェアの構築
- HDL(Hardware Description Language)を用いてハードウェアシミュレーター上に回路を構築する
- 構築した回路に対して、正確性やコスト、処理速度などを定量化して、回路を評価する
- NANDゲートから以下を作成する
- 基本論理ゲート
- NOT(in: in, out: out)
- AND(in:a,b, out:out)
- OR(in:a,b, out:out)
- XOR(in:a,b, out:out)
- MUX(in:a,b,sel, out:out)
- データビットと呼ばれる2つの入力のうちどちらかを、選択ビット(sel)と呼ばれる入力に応じて出力する
- DMUX(in:in,sel, out:a,b)
- ひとつの入力を選択ビット(sel)の値に応じて二つの出力のうちどちらかに出力する
- 多ビット基本論理ゲート
- NOT16
- AND16
- OR16
- MUX16
- 多入力ゲート
- OR8way
- 多入力多ビットゲート
- MUX4way16
- MUX8way16
- DMUX4way
- DMUX16way
- 基本論理ゲート
実装
ハードウェアシミュレータはSoftware | nand2tetrisからダウンロードしてくる。
Not, And, Or, Xor, Mux, DMux, Not16, And16, Or16, Mux16, Or8Way, Mux4Way16, Mux8Way16, DMux4Way, DMux8Wayを実装する。
実際は以下 github.com
感想
- 論理ゲートを設計したのが大学の講義ぶりだったのでかなり懐かしい気持ちになった
- 大学の頃はなぜ論理ゲートを設計する知識が必要なのかよくわからなかったが、今あらためて設計してみるとレジスタやメモリやALUといったコンピュータの構成要素の仕組みを理解するのに大事だと思う
- 多ビット、多入力/多出力のMUX/DMUXをより少ない回路で設計するのは頭の体操になった
次章はこちら