01.md 2.45 KB
Newer Older
morifuji.koudai's avatar
morifuji.koudai committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
低レイヤそろそろ勉強しようと思ったので、お勉強。

https://www.oreilly.co.jp/books/9784873117126/

だいぶ前に触ったアセンブリ言語よりもだいぶ低レイヤ

章ごとにダラダラ学んだことを書いていく予定

## 1章 ブール論理

### ブール関数

3つの表現方法

1. 真理値表
2. ブール式
3. 正準表現

Xor = (x and Not y) or (Not x and y)

Nandで全ての演算が可能

xORy = (x Nand x) Nand (y Nand y)

論理ゲート=入力と出力のデバイス=ブール関数で表現できる

#### マルチプレクサ

複数の入力のいずれかを単一の出力にする。どちらかを選ぶかは選択制御Sによる。Sもブール値

![「マルチプレクサ」の画像検索結果](https://upload.wikimedia.org/wikipedia/ja/thumb/6/66/Multiplexer.png/220px-Multiplexer.png)

> Wikipedia:https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%97%E3%83%AC%E3%82%AF%E3%82%B5

#### デマルチプレクサ

単一の入力を複数の出力のいずれかにする。どちらかを選ぶかは選択制御Sによる。Sもブール値



#### 多ビットのゲート

入力・出力共に配列であり、それぞれのindexに対して操作するだけ



#### 多入力のゲート

入力が2つ以上のゲート

多入力Or=入力1…nまでのいずれかが1であれば1それ以外は0

多入力マルチプレクサ=複数の入力のいずれかを単一の出力にする。どちらかを選ぶかは選択制御Sによる。Sもブール値。入力の数がnに対して、選択制御は、log2n個必要



### HDL

ハードウェアを構築するための言語。HDLで記載して各ゲートをシミュレートする宿題が出た。

HDLでloop使えない😇(単に1章だから使えないのかも?)

マルチプレクサゲート/デマルチプレクサゲートが一番しんどかった。

以下、僕の回答。

```vhdl
/** 
 * Multiplexor:
 * out = a if sel == 0
 *       b otherwise
 */
CHIP Mux {
    IN a, b, sel;
    OUT out;

    PARTS:
    Not(in=sel, out=notsel);
    And(a=a, b=notsel, out=outtemp1);
    And(a=b, b=sel, out=outtemp2);
    Or(a=outtemp1, b=outtemp2, out=out);
}


```



```vhdl
/**
 * Demultiplexor:
 * {a, b} = {in, 0} if sel == 0
 *          {0, in} if sel == 1
 */
CHIP DMux {
    IN in, sel;
    OUT a, b;

    PARTS:
    Not(in=sel, out=notsel);
    And(a=in, b=notsel, out=a);
    And(a=in, b=sel, out=b);
}

```