4日目 ~コンピュータの基本!?~
今日はいつもと趣向を変えてHDL(ハードウェア記述言語)で論理ゲートを書いてみました。
いつものように毎日投稿には時間がないので、今日は基本的なコンピュータの構成要素となる部分のみの記述を紹介します。
まずは、すべての論理素子の基本となるNandゲートから紹介すると、次の図のようになります。
この図より、Nandゲートは、電圧のかかり方を1がon, 0がoffとして考えたとき、出力Yの信号がa,bの状態により変化するような素子であることがわかります。
Nandゲートは構成に必要なトランジスタ数が少なくてすむため、コンピュータの基本素子として考えられることが多いようです。
それでは、このNandゲートのみで他の論理ゲート(Not, And, Or, Xor)を書いてみると、
CHIP Not { IN in; OUT out; PARTS: Nand(a=in, b=in, out=out); }
Notゲートは定義できたものとして使いまわすと、
CHIP And { IN a, b; OUT out; PARTS: Nand(a=a, b=b, out=nout); Not(in=nout, out=out); }
CHIP Or { IN a, b; OUT out; PARTS: Not(in=a,out=na); Not(in=b,out=nb); Nand(a=na, b=nb, out=out); }
CHIP Xor { IN a, b; OUT out; PARTS: Nand(a=a,b=b,out=n1); Nand(a=a,b=n1,out=n2); Nand(a=n1,b=b,out=n3); Nand(a=n2,b=n3,out=out); }
となります。
ちなみに、今回使用したHDLは一般的に設計で用いられるような言語ではなく、
nand2tetrisとしてよく知られる、"コンピュータシステムの理論と実装"で取り上げられているものを使用しました。
参考書籍