0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

一からコンピュータを作るぞ! ~ブール論理~

Last updated at Posted at 2020-08-02

コンピュータシステムの理論と実装のアウトプットをしていくための記事です。
コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方

実装は下記にまとめてあります。
GitHub - sanoyo/nand2tetris

参考にした記事は下記になります。
「コンピュータシステムの理論と実装」をやりきりました - Qiita
第1回「コンピュータシステムの理論と実装」の勉強会 - Cloudii blog
コンピュータシステムの理論と実装 - 資料一覧 - connpass

全体像

image.png
コンピュータシステムの理論と実装 – むくゆう より引用

ブール論理

ブール式の基本

NOT / OR / AND が基本になります。
また上記3つの関数を NAND関数で表現することができます。

Nand関数(Not And関数)

名称から見てもわかる通り、Andの反対の性質を持ちます。

a b Nand(a, b)
0 0 1
0 1 1
1 0 1
1 1 0

一つ目の課題は、NAND だけ与えられた状態から、NOT / OR / AND / XOR などを実装することになります。

AND

NANDの真反対の結果になります。

a b And(a, b)
0 0 0
0 1 0
1 0 0
1 1 1

ANDを作成するための実装は下記のようになります。

# ゲート名
CHIP And {
    IN a, b;
    OUT out;

    PARTS:
        Nand (a=a, b=b, out=not);
        Nand (a=not, b=not, out=out);
}

上記実装のイメージは下記のようになります。
image.png

OR

a b OR(a, b)
0 0 0
0 1 1
1 0 1
1 1 1

NOT

01 に、10 にします。

XOR

a b XOR(a, b)
0 0 0
0 1 1
1 0 1
1 1 0

MUX(マルチプレクサ)

3入力のゲートで、一つのアウトプットを返します。
マルチプレクサ (MUX)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

下記の実装だと、selの部分が条件文になるイメージです。
この後のALUの実装で活躍してくれます。

CHIP Mux {
    IN a, b, sel;
    OUT out;

    PARTS:
        Not(in=sel, out=notsel);

        And(a=a, b=notsel, out=and1);
        And(a=sel, b=b, out=and2);

        Or(a=and1, b=and2, out=out);
}

DMUX(デマルチプレクサ)

マルチプレクサとは反対のことを行います。
一つの入力に対して、複数の出力を返します。
デマルチプレクサ (DEMUX)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

下記実装の場合だと、 selの条件文によって、出力を4パターン作成する実装になっています。

DMux4Way.hdl
CHIP DMux4Way {
    IN in, sel[2];
    OUT a, b, c, d;

    PARTS:
        Not(in=sel[0], out=notsel0);
        Not(in=sel[1], out=notsel1);

        And(a=notsel0, b=notsel1, out=asel);
        And(a=in, b=asel, out=a);

        And(a=notsel1, b=sel[0], out=bsel);
        And(a=in, b=bsel, out=b);

        And(a=notsel0, b=sel[1], out=csel);
        And(a=in, b=csel, out=c);

        And(a=sel[0], b=sel[1], out=dsel);
        And(a=in, b=dsel, out=d);
}

準備

諸々インストール

MacにNand2Tetrisのハードウェアシミュレータをインストールする - Qiita
Software | nand2tetris
Java SE Development Kit 14 - Downloads

ハードウェアシミュレータ立ち上げ

sh tools/HardwareSimulator.sh

O'REILLY コンピューターシステムの理論と実装【第1章②】 - sota0113

テストファイルの実行方法

  • hdlファイルを読み込む
  • Scriptを読み込んで、実行する

各ファイルの役割

hdl
実装が必要なファイル

tst
テスト用のファイル

cmp
正しい抽出結果か確認できるテスト用のファイル
And.cmpに書かれている条件のようにアウトプットできればOK

VSCode拡張

VSCodeをVerilogHDLのすごいエディタにする - たいちょーの雑記

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?