ハードウェアの基礎とは?論理回路・LSI・A/D変換・コンピュータ制御を理解しよう
はじめに
コンピュータというとCPUやメモリを思い浮かべるかもしれません。
しかし、その内部をさらに細かく見ていくと、
- AND
- OR
- NOT
- フリップフロップ
といった論理回路によって構成されています。
さらに、コンピュータが現実世界の温度や明るさなどを扱うためには、
センサ → A/D変換 → コンピュータ → アクチュエータ
という仕組みも重要になります。
この記事では、
論理回路
↓
順序論理回路
↓
LSI
↓
低消費電力化
↓
A/D変換
↓
コンピュータ制御
↓
センサ・アクチュエータ
という流れで、ハードウェアの基礎を学んでいきましょう。
1. 論理回路とは
コンピュータ内部では、情報を基本的に
0
1
の2値で扱います。
この0と1を入力として論理演算を行う電子回路が**論理回路(Logic Circuit)**です。
代表的な論理演算には、
- AND(論理積)
- OR(論理和)
- NOT(否定)
- NAND(否定論理積)
- NOR(否定論理和)
- XOR(排他的論理和)
などがあります。
これらを組み合わせることで、計算やデータの記憶などを行う複雑な回路を作れます。
2. 組合せ論理回路
**組合せ論理回路(Combinational Logic Circuit)**とは、
現在の入力だけによって出力が決まる論理回路
です。
例えば、
入力A ─┐
├→ 論理回路 → 出力
入力B ─┘
という回路があった場合、現在のAとBの値によって出力が決まります。
過去にどのような入力があったかは関係ありません。
代表例として、
- 加算器
- エンコーダ
- デコーダ
- マルチプレクサ
などがあります。
3. 論理回路の設計
論理回路を設計するときは、
必要な動作を決める
↓
真理値表を作る
↓
論理式を作る
↓
論理式を簡単にする
↓
論理ゲートで回路を作る
という流れで考えることができます。
例えば、
AとBの両方が1なら1を出力する
という条件なら、
| A | B | 出力Y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
となります。
これはANDなので、
Y = A・B
と表せます。
4. 半加算器
コンピュータでは2進数を使って計算します。
その基本となる回路の一つが、
半加算器(Half Adder)
です。
半加算器は、
2つの1ビットの2進数を加算する回路
です。
入力をA、Bとすると、出力には、
- S:和(Sum)
- C:桁上がり(Carry)
があります。
真理値表は次のようになります。
| A | B | S(和) | C(桁上がり) |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
和Sは、
S = A XOR B
桁上がりCは、
C = A AND B
で求められます。
つまり、
┌─ XOR ─→ S(和)
A ─────┤
B ─────┤
└─ AND ─→ C(桁上がり)
という構成です。
🍯 半加算器は「XORで和、ANDで桁上がり」と覚えると分かりやすいです。
5. 否定論理積(NAND)
**NAND(否定論理積)**とは、
ANDの結果をNOTで反転した論理演算
です。
NAND = NOT AND
真理値表は、
| A | B | AND | NAND |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
となります。
つまり、
AとBの両方が1の場合だけ0
です。
論理式では、
Y = NOT(A・B)
となります。
6. NANDが重要な理由
NANDには非常に重要な特徴があります。
NANDだけを組み合わせても、さまざまな論理回路を構成できる
という特徴です。
例えばNANDの2つの入力に同じ値Aを入れると、
A NAND A
となり、
NOT A
を作れます。
NOTなどを作れるため、さらに組み合わせることでANDやORなども実現できます。
このような性質から、NANDは**万能ゲート(Universal Gate)**の一つです。
7. 順序論理回路
先ほどの組合せ論理回路は、
現在の入力だけ
で出力が決まりました。
一方、
順序論理回路(Sequential Logic Circuit)
では、
現在の入力だけでなく、過去の状態も使って出力が決まります。
現在の入力
↓
┌───────────┐
│ 順序論理回路 │ → 出力
└───────────┘
↑
過去の状態
つまり、順序論理回路には状態を記憶する仕組みがあります。
代表的なものが、
フリップフロップ
です。
8. 組合せ論理回路と順序論理回路
違いを整理しておきましょう。
| 種類 | 出力を決めるもの | 記憶 |
|---|---|---|
| 組合せ論理回路 | 現在の入力 | しない |
| 順序論理回路 | 現在の入力+内部状態 | する |
🍯 「組合せ=今だけ」「順序=過去も覚えている」と考えるとシンプルです。
9. フリップフロップ回路
**フリップフロップ(Flip-Flop)**とは、
1ビットの情報を保持できる基本的な記憶回路
です。
つまり、
0
または
1
という状態を記憶できます。
複数のフリップフロップを組み合わせることで、
- レジスタ
- カウンタ
などを構成できます。
10. フリップフロップの種類
代表的なフリップフロップには、
- RSフリップフロップ
- JKフリップフロップ
- Dフリップフロップ
- Tフリップフロップ
などがあります。
RSフリップフロップ
S(Set)とR(Reset)によって状態を制御します。
S → 1をセット
R → 0へリセット
Dフリップフロップ
D(Data)の値をクロックなどのタイミングに合わせて記憶します。
データを保持するレジスタなどで利用されます。
Tフリップフロップ
入力に応じて、
0 → 1
1 → 0
のように状態を反転させる用途で使われます。
11. LSIとは
**LSI(Large Scale Integration)**とは、
多数の電子回路を一つの半導体チップ上へ集積した集積回路
です。
CPUやメモリなども、多数のトランジスタによって構成されています。
集積度を高めることで、
- 小型化
- 高速化
- 高機能化
などが可能になります。
一方、回路規模が大きくなるほど、
消費電力や発熱
も重要な問題になります。
12. LSIの設計・開発
LSIの開発では、非常に多くの回路を扱います。
そのため、すべてを人間が手作業で設計するのではなく、設計支援ツールを利用します。
代表的なのが、
EDA(Electronic Design Automation)
です。
例えば、
回路を設計
↓
論理設計
↓
シミュレーション
↓
配置・配線
↓
検証
↓
製造
といった工程をコンピュータで支援します。
また、ハードウェアの動作を記述するために、
HDL(Hardware Description Language:ハードウェア記述言語)
が利用されます。
代表例には、
- VHDL
- Verilog HDL
などがあります。
13. 低消費電力LSIの設計
LSIでは、多数のトランジスタが動作します。
そのため、
いかに消費電力を減らすか
が重要になります。
LSIの消費電力は、大きく、
消費電力
├─ ダイナミック電力
└─ スタティック電力
に分けて考えられます。
14. ダイナミック電力
**ダイナミック電力(Dynamic Power)**とは、
回路の0と1が切り替わるなど、回路が動作することによって消費される電力
です。
CMOS回路では概念的に、
P ∝ C × V² × f
として考えられます。
- C:負荷容量
- V:電源電圧
- f:動作周波数
などです。
特に重要なのが、
V²
です。
電源電圧を下げると、ダイナミック電力を大きく削減できます。
15. ダイナミック電力を低減する方法
代表的な方法として、
電源電圧を下げる
電圧を下げることで消費電力を抑えます。
クロック周波数を下げる
必要以上に高速動作させなければ、回路のスイッチング回数を減らせます。
クロックゲーティング
使用していない回路へのクロック供給を停止します。
使う回路
→ クロックON
使わない回路
→ クロックOFF
不要な回路を動作させないことで、ダイナミック電力を低減します。
16. スタティック電力
**スタティック電力(Static Power)**とは、
回路が動作していない状態でも流れる漏れ電流などによって消費される電力
です。
半導体が微細化すると、
リーク電流(Leakage Current)
の影響が大きくなります。
つまり、
回路を動かしていない
↓
それでも少量の電流が流れる
↓
電力を消費する
ということです。
17. スタティック電力を低減する方法
代表的な方法が、
パワーゲーティング(Power Gating)
です。
使用していない回路ブロックへの電源供給そのものを停止します。
クロックゲーティング
→ クロックを止める
パワーゲーティング
→ 電源を止める
と整理できます。
クロックゲーティングは主にダイナミック電力、
パワーゲーティングは主にスタティック電力
の低減に利用されます。
18. データコンバータ
コンピュータ内部ではデータをデジタル値として扱います。
しかし、現実世界には、
- 温度
- 音
- 光
- 圧力
などの連続的なアナログ量があります。
そこで必要になるのが、
データコンバータ(Data Converter)
です。
代表的なものには、
A/Dコンバータ
アナログ → デジタル
D/Aコンバータ
デジタル → アナログ
があります。
19. A/Dコンバータ
**A/Dコンバータ(Analog-to-Digital Converter:ADC)**とは、
アナログ信号をデジタル値へ変換する回路
です。
例えば温度センサから、
2.35V
という電圧が出てきたとします。
コンピュータは最終的にこれを、
010110...
のようなデジタル値として扱います。
その変換を行うのがA/Dコンバータです。
20. A/D変換の基本
A/D変換では、大きく、
- サンプリング
- 量子化
- 符号化
という処理を考えます。
アナログ信号
↓
サンプリング
↓
量子化
↓
符号化
↓
デジタルデータ
サンプリング
一定時間ごとにアナログ信号の値を取り出します。
量子化
取得した値を、あらかじめ決められた段階のどこに当てはまるか決定します。
符号化
量子化した値を0と1のデジタルデータとして表現します。
21. 分解能
A/Dコンバータで重要なのが、
分解能(Resolution)
です。
nビットのA/Dコンバータでは、
2^n
段階のデジタル値を表現できます。
例えば、
8ビット
→ 2^8
→ 256段階
です。
12ビットなら、
2^12
= 4096段階
となります。
ビット数が大きいほど、アナログ値をより細かく区別できます。
22. 電圧値とデジタル値の関係
例えば、
0V ~ 5V
を8ビットで変換するとします。
8ビットなので、
2^8 = 256段階
です。
1段階あたりの電圧は概算で、
5V ÷ 256
= 0.01953125V
つまり、
約19.5mV
です。
これがA/D変換の1段階あたりの細かさです。
23. 電圧からデジタル値を求める
0~5Vを8ビットで変換する場合を考えます。
例えば入力が、
2.5V
だった場合、
2.5 ÷ 5
= 0.5
つまり入力範囲の50%です。
8ビットは256段階なので、
256 × 0.5
= 128
となり、おおよそ、
10000000₂
付近のデジタル値になります。
実際のA/Dコンバータでは出力コードが 0~255 になるため、端点の扱いや丸め方などは仕様によって確認する必要があります。
24. A/Dコンバータに必要な最小ビット数
応用情報では、
必要な分解能を実現するには最低何ビット必要か
という問題も重要です。
例えば、
0 ~ 10V
の範囲を、
0.01V
単位で区別したいとします。
必要な段階数を考えると、
10 ÷ 0.01
= 1000
程度の段階が必要です。
そこで、
2^n ≥ 1000
となる最小のnを探します。
2^9 = 512
2^10 = 1024
なので、
10ビット
必要だと分かります。
🍯 A/Dコンバータのビット数問題では「必要な段階数を求める → 2^n以上になる最小のnを探す」が基本です。
25. コンピュータ制御
コンピュータは計算するだけではなく、現実世界の機械を制御するためにも利用されています。
例えば、
- エアコン
- 自動車
- ロボット
- 工場設備
- ドローン
などです。
基本的な構成は、
現実世界
↓
センサ
↓
A/D変換
↓
コンピュータ
↓
D/A変換など
↓
アクチュエータ
↓
現実世界
となります。
26. 自動制御
**自動制御(Automatic Control)**とは、
人間が常に操作しなくても、装置やシステムが目的の状態になるよう自動的に制御すること
です。
代表的な考え方として、
- シーケンス制御
- フィードバック制御
があります。
27. シーケンス制御
**シーケンス制御(Sequence Control)**とは、
あらかじめ決められた順序や条件に従って処理を進める制御
です。
例えば洗濯機なら、
給水
↓
洗濯
↓
排水
↓
すすぎ
↓
脱水
のように、決められた順番で処理を進めます。
28. フィードバック制御
**フィードバック制御(Feedback Control)**とは、
現在の状態を測定し、目標値との差に応じて制御量を調整する方式
です。
例えばエアコンで、
目標温度:25℃
現在温度:28℃
なら、
28℃ - 25℃
= 3℃の差
があります。
そこで冷房を強くします。
温度が25℃へ近づけば、冷房を弱めます。
29. フィードバック制御の流れ
全体像は、
目標値
↓
比較 ←────────────┐
↓ │
制御装置 │
↓ │
アクチュエータ │
↓ │
制御対象 │
↓ │
センサ ─────────────┘
となります。
重要なのは、
結果を測定して、その結果を次の制御へ戻す
ことです。
これが「フィードバック」です。
30. センサ
**センサ(Sensor)**とは、
現実世界の物理量や状態を検出し、電気信号などへ変換する装置
です。
例えば、
| センサ | 検出するもの |
|---|---|
| 温度センサ | 温度 |
| 光センサ | 明るさ・光 |
| 圧力センサ | 圧力 |
| 加速度センサ | 加速度 |
| ジャイロセンサ | 角速度 |
| 磁気センサ | 磁界 |
| 超音波センサ | 距離など |
があります。
31. センサの種類と特徴
温度センサ
温度を検出します。
エアコンや工場設備など、幅広い場所で使われます。
光センサ
光の強さなどを検出します。
自動照明やスマートフォンの画面輝度調整などで利用されます。
加速度センサ
物体の加速度を検出します。
スマートフォンの傾き検出や自動車、ゲーム機器などで利用されます。
ジャイロセンサ
回転運動の角速度を検出します。
スマートフォン、ドローン、ロボットなどの姿勢制御で利用されます。
圧力センサ
気体や液体などの圧力を検出します。
自動車や産業機器などで利用されます。
超音波センサ
超音波を発射し、反射して戻るまでの時間などから対象物までの距離を測定できます。
ロボットの障害物検知などで利用されます。
32. アクチュエータ
センサが、
現実世界の情報をコンピュータへ伝える装置
だとすれば、その反対側にあるのが、
アクチュエータ(Actuator)
です。
アクチュエータとは、
コンピュータなどからの制御信号を受けて、物理的な動作を行う装置
です。
代表例には、
- モータ
- バルブ
- ソレノイド
- ヒータ
などがあります。
33. センサとアクチュエータ
この2つはセットで覚えると分かりやすいです。
現実世界
↓
センサ
↓
コンピュータ
↓
アクチュエータ
↓
現実世界
例えばエアコンなら、
温度
↓
温度センサ
↓
コンピュータ
↓
制御信号
↓
アクチュエータ
↓
冷房の強さを変更
となります。
つまり、
センサ
→ 現実世界から情報を「入力」
アクチュエータ
→ 現実世界へ動作を「出力」
と考えると分かりやすいでしょう。
34. ハードウェアの全体像
今回学んだ内容をつなげてみましょう。
ハードウェア
│
├─ 論理回路
│ ├─ 組合せ論理回路
│ │ ├─ AND・OR・NOT
│ │ ├─ NAND
│ │ └─ 半加算器
│ │
│ └─ 順序論理回路
│ └─ フリップフロップ
│
├─ LSI
│ ├─ EDA・HDL
│ └─ 低消費電力化
│ ├─ ダイナミック電力
│ │ └─ クロックゲーティングなど
│ └─ スタティック電力
│ └─ パワーゲーティングなど
│
├─ データコンバータ
│ ├─ A/D
│ └─ D/A
│
└─ コンピュータ制御
│
├─ センサ
│ ↓
├─ コンピュータ
│ ↓
└─ アクチュエータ
一見すると「論理回路」と「センサ」は別物に見えます。
しかし、
現実世界の情報をセンサで取得し、デジタルデータへ変換してコンピュータ内部の論理回路で処理し、その結果をアクチュエータへ出力する
と考えると、すべてつながっています。
まとめ
この記事で覚えること
- 組合せ論理回路は現在の入力だけで出力が決まる
- 順序論理回路は現在の入力と過去の状態によって出力が決まる
- 半加算器ではXORで和、ANDで桁上がりを求める
- NANDはANDの結果を反転した論理演算
- フリップフロップは1ビットの情報を保持できる
- LSIは多数の電子回路を一つの半導体チップへ集積したもの
- ダイナミック電力は回路の動作によって消費される電力
- スタティック電力はリーク電流などによって消費される電力
- クロックゲーティングは主にダイナミック電力を削減する
- パワーゲーティングは主にスタティック電力を削減する
- A/Dコンバータはアナログ信号をデジタル値へ変換する
- nビットのA/Dコンバータでは2^n段階を表現できる
- 必要ビット数は「必要段階数 ≤ 2^n」となる最小のnを求める
- フィードバック制御では現在値を測定して目標値との差を制御へ反映する
- センサは現実世界から情報を取得する
- アクチュエータは制御信号を物理的な動作へ変換する
🍯 はちみつメモ
ハードウェアは「入力 → 処理 → 出力」で考えるとつながりやすい! センサで現実世界を読み取り、A/Dコンバータでデジタル化し、論理回路で処理して、アクチュエータで現実世界を動かす。A/D変換の計算では「nビット=2^n段階」をまず思い出そう。