Make/Day

毎日なにか作ります

4日目 ~コンピュータの基本!?~

今日はいつもと趣向を変えてHDL(ハードウェア記述言語)で論理ゲートを書いてみました。
いつものように毎日投稿には時間がないので、今日は基本的なコンピュータの構成要素となる部分のみの記述を紹介します。

まずは、すべての論理素子の基本となるNandゲートから紹介すると、次の図のようになります。

Nandゲートの出力Yは、a,bの状態により定まる

この図より、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としてよく知られる、"コンピュータシステムの理論と実装"で取り上げられているものを使用しました。


参考書籍