Open3

「コンピュータの理論と実装」を読む その1

Kohne62Kohne62

本書の目的

「木を見て森を見ず」
コンピュータがどの様に動いているのかをコンピュータをゼロから作ることで理解する
→ハードウェアと階層構造からなるソフトウェア
→数える程度のビルディングブロック(構成要素)から信じられないくらい複雑で実用的なシステムを作ることができる

Kohne62Kohne62

イントロダクション

  • コンパイル...プログラミング言語(高水準言語)をコンピュータシステムが理解できる低水準言語に翻訳する作業。この作業によって機械レベルのコードを含んだ別のテキストファイルを生成する。
Kohne62Kohne62

1章 ブール演算 WIP

ブールゲート(boolean gate)と呼ばれる単純な回路に焦点を当てる

  • 正準表現(canonical representation)...ブール関数において1を出力するものをブール式で表す表現
    Nand(Not and)だけで全てのブール関数を作り出すことができる
  • ゲート...ブール関数を実装するための物理デバイス
  • バイナリ...2進数

論理設計の技法とはゲートの仕様(インターフェース)が与えられたとき、すでに実装済みの他のゲートを用いて対象のゲートを実装する効率的な方法を探すことである。

HDL...ハードウェア記述言語(Hardware Description Language)

Nandゲートからコンピュータアーキテクチャを作り上げていく

  • マルチプレクサ(Multiplexor)...3入力のゲート。「データビット」と呼ばれる二つの入力から「セレクタ」と呼ばれる1入力の値によって出力する値を選択する。
回路名 Mux
入力:a, b, sel
出力:out
関数:If sel=0 then out=a else out=b
  • デマルチプレクサ(Demultiplexor)...マルチプレクサとは反対のことを行う。つまり、一つの入力を選択ビットの値に従って二つの可能な出力のどちらかに振り分ける
回路名 Dmux
入力:in, sel
出力:a, b
関数:If sel=0 then {a=in, b=0} else {a=0, b=in}

2入力の論理ゲートを一般化すれば、任意の数の入力を受け入れることができる論理ゲートになる

## 4入力マルチプレクサ
回路名 Mux4Way16
入力:a[16], b[16], c[16], d[16], sel[2]
出力:out[16]
関数:If sel=00 then out=a else if sel=01 then out=b else if sel=10 then out=c else if sel=011 then out=d

## 8入力マルチプレクサ
回路名 Mux8Way16
入力:a[16], b[16], c[16], d[16], e[16], f[16], g[16], h[16], sel[3]
出力:out[16]
関数:If sel=000 then out=a else if sel=001 then out=b else if sel=010 then out=c else if sel=011 then out=d...else if sel=111 then out=h