アナログとしてのNANDゲート

この記事は42Tokyo Advent Calendar 2024 、18日目の記事です。

https://qiita.com/advent-calendar/2024/42tokyo

## はじめに
　2024年10月入学のkaisobeです。電気系の学部３年生で、電子回路や半導体についてo主にアナログなものに学んでいます。そこで、デジタルの世界とアナログの世界の境目をイメージして頂きたく、記事を執筆しました。0と1を実現するために、論理回路（デジタル回路）を実現するための物理的な回路（アナログ回路）が存在しています。本記事では、デジタル回路を実現するためのアナログ回路について、NAND回路を中心に解説していきます。

## 目次
- [1. なぜアナログ回路が必要なのか？](#1-なぜアナログ回路が必要なのか)
- [2. トランジスタとは](#2-トランジスタとは)
  - [MOSFETの基本構造](#mosfetの基本構造)
- [3. 論理ゲート](#3-論理ゲート)
  - [なぜNANDゲートなのか？](#なぜnandゲートなのか)
- [4. NAND回路の実装](#4-nand回路の実装)
  - [動作解析](#動作解析)
    - [Vin1=HIGH, Vin2=LOW の場合](#vin1high-vin2low-の場合)
    - [Vin1=LOW, Vin2=HIGH の場合](#vin1low-vin2high-の場合)
    - [Vin1=LOW, Vin2=LOW の場合](#vin1low-vin2low-の場合)
    - [Vin1=HIGH, Vin2=HIGH の場合](#vin1high-vin2high-の場合)
- [5. シミュレーション結果](#シミュレーション結果)
- [6. まとめ](#まとめ)

## 1. なぜアナログ回路が必要なのか？

プログラミングをしていると忘れがちですが、私たちの物理世界には0や1といった数の概念が物理的なものとして存在しません。そのため、人間は何らかの物理的な現象を0と1とみなす必要があります。

具体的に何を使用しているかというと、よく知られている通り「電気」です。より正確には電圧（あるいは電流）です。アナログ回路の特定の点における電圧がHIGHかLOWかによって、0と1という状態を管理しています。このアナログ回路を実現する上で最も重要な役割を果たしているのが、トランジスタです。

## 2. トランジスタとは

トランジスタはアナログ回路を構成するための基本部品の一つです。ニュースなどで耳にする「半導体」は、多くの場合トランジスタを指しています。トランジスタには様々な用途がありますが、本記事では0、1を表現するためのスイッチとしての役割に焦点を当てます。

### MOSFETの基本構造

スイッチとしてよく利用されるMOSFETには、以下の3つのI/Oが存在します：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540847/ea0df484-d8f4-cef5-94e9-86209ce34cc5.png)

- G:　ゲート（Input）
- S:　ソース（Output）
- D:　ドレイン（Input）

ゲートにかける電圧を制御することで、ドレインからソースへと流れる電流を制御できます：

- ゲート電圧が一定以上：ドレイン→ソースに電流が流れる（スイッチON）
- ゲート電圧が一定未満：電流が流れない（スイッチOFF）

このような電圧制御により、微小な集積回路でもスイッチを実現できています。

## 3. 論理ゲート

現代の論理回路は、基本的にNANDゲートのみで構成されています。「NAND2テトリス」という有名なプロジェクトがありますが、そこからも分かるように、NANDが最小単位となっています。
| Vin1 | Vin2 | Vout |
|------|------|------|
| 0    | 0    |   1  |
| 0 | 1 | 1 |
| 1 | 0  | 1 |
| 1 | 1 | 0  |

### なぜNANDゲートなのか？

ANDやOR、NOTなどを使用しない理由は主に以下の2点です：

1. NANDゲートだけで他の論理ゲートを簡単に構成できる
2. NANDゲートはトランジスタ数が少なくて済む

単一のゲートのみを用いることで、以下のメリットがあります：

- ゲートが余ることがない
- 製造工程が単純化され、大量生産に適している

そのため、人間の直感に反してNANDゲートで論理回路が構成されています。

## 4. NAND回路の実装

NAND回路は3つのトランジスタで実現できます。以下、入力電圧の組み合わせごとの動作を説明します：
![NAND回路図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540847/e770680b-501e-8350-8b68-97f803f0fdd9.png)


### 動作解析


#### Vin1=HIGH, Vin2=LOW の場合
- トランジスタ1：スイッチON
- トランジスタ2：スイッチOFF

Vin1がHIGHということはゲートに電圧がかかっているためトランジスタ１のスイッチはONとなります。逆にトランジスタ２のスイッチはOFFとなっています。
トランジスタ１には電流は流れますが、トランジスタ２には電流が流れないため、Voutの電圧はVddと同じHIGHとなります

→結果：Vout = HIGH

#### Vin1=LOW, Vin2=HIGH の場合
- トランジスタ1：スイッチOFF
- トランジスタ2：スイッチON
Vin1がLOWということはゲートに電圧がかかっているためトランジスタ１のスイッチはOFFとなります。この時点でVoutはVddとおなじHIGHとなります。

→結果：Vout = HIGH

#### Vin1=LOW, Vin2=LOW の場合
- トランジスタ1：スイッチOFF
- トランジスタ2：スイッチOFF

Vin1がLOWということはゲートに電圧がかかっているためトランジスタ１のスイッチはOFFとなります。この時点でVoutはVddとおなじHIGHとなります。

→結果：Vout = HIGH

#### Vin1=HIGH, Vin2=HIGH の場合
- トランジスタ1：スイッチOFF
- トランジスタ2：スイッチON
トランジスタ１とトランジスタ２のどちらにも電流が流れるので、Voutとアース（０電圧）がつながります。そのためVoutはLOWとなります。

→結果：Vout = LOW

## 5.  シミュレーション結果

LTSPICEという電子回路のシュミレーションソフトを用いてシミュレーションを行い、上記の動作を確認しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540847/3776377c-6c08-f123-759f-bbc5fd2605f8.png)
緑が出力電圧Vout、青が入力電圧Vin1、赤が入力電圧Vin2となっています。青と赤が両方ONの時にだけVoutが下がっているのが分かります。どちらかの入力電圧がOFFの時、VoutはONになっています。

※VoutがOFFのときに０VとなっていないのはトランジスタがONの時に完全に導線とみなせるわけではないことに起因します。

## 6.  まとめ
普段は気にすることのない、コンピュータを支える物理的な側面について少しイメージついたならうれしいです。