このページでは、NANDや半加算器などの論理回路、フリップフロップ、LSIの設計と低消費電力化、A/D変換、センサを使ったコンピュータ制御がわかります。
- 一言で言うと:
- コンピュータの中身を「電気の部品」のレベルで見る話。0と1を計算する回路、覚える回路、それをまとめたチップ(LSI)、電気を節約する工夫、アナログとデジタルの変換、機械を動かす制御まで。
計算する回路(組合せ論理回路)→ 覚える回路(順序論理回路)→ チップにまとめる(LSIの設計・開発)→ 電気を節約する(低消費電力LSI)→ アナログとつなぐ(データコンバータ)→ 機械を動かす(コンピュータ制御)
覚え方の軸
- 論理回路は「覚えるか、覚えないか」で2つに分かれる:
- 入力だけで出力が決まる(組合せ論理回路)⇔ 過去の状態も使う(順序論理回路=フリップフロップ)
- すべての回路はNANDだけで作れる:
- 「同じ2つを入れたNAND=NOT」が出発点。AND・ORもNANDの組合せで作れる
- 消費電力は「動くときの電力(ダイナミック)」と「漏れる電力(スタティック)」の2つ:
- ダイナミックは電圧²×周波数に比例 → 電圧と周波数を下げる。スタティック(リーク)は電源を切る(パワーゲーティング)
- A/D変換の細かさは「幅 ÷ 2のビット数乗」の1本の式:
- 測れる最大値は「上限 − 1目盛り」
- 制御は「順番どおり(シーケンス)」「結果を見て直す(フィードバック)」「乱れを先回りして直す(フィードフォワード)」の3つ:
- 流れは「センサで測る → コンピュータが判断 → アクチュエータで動かす」
組合せ論理回路:0と1を計算する回路
- このまとめでの書き方:
- 否定は本来上線(A̅)で書くが、ここでは ¬A(Aの否定)、¬(A・B)(A・B全体の否定)と書く。「・」はAND、「+」はOR、「⊕」はXOR
- 論理演算:
- 1(真:True)か0(偽:False)の2通りの値しかとらない演算
- 論理素子:
- 論理演算を行う最小の回路。論理ゲート、または単にゲートともいう
- 論理回路:
- 論理素子の組合せでできた回路。組合せ論理回路のほかに順序論理回路(順序回路)がある
- AND・OR・NOTを組み合わせれば、すべての論理演算を表現できる
| 素子 | 出力Yが1になるのは | 論理式 |
|---|---|---|
| 論理積素子(ANDゲート) | A、Bがともに1のときだけ | A・B |
| 否定論理積素子(NANDゲート) | A、Bがともに1のときだけ0(それ以外は1) | ¬(A・B) |
| 論理和素子(ORゲート) | A、Bの少なくとも一方が1 | A+B |
| 否定論理和素子(NORゲート) | A、Bがともに0のときだけ1 | ¬(A+B) |
| 排他的論理和素子(XORゲート) | A、Bが異なるとき1(同じなら0) | A⊕B |
| 論理否定器(NOTゲート) | Aが0のとき1(1なら0) | ¬A |
- 組合せ論理回路:
- 入力に対して出力が一意に決まる論理回路。同じ機能でも、素子の組合せ方でいろいろな構成がある
- 論理回路の設計の流れ:
- 真理値表の作成 → 論理式を求める → 論理回路の設計
- 真理値表:
- 条件の真偽(T、F)や入力(1、0)の組合せごとに、論理式や論理回路の出力がどうなるかを表したもの
- 論理式の求め方:
- 出力が1になる入力条件すべての論理和をとる(加法標準形)
- 論理式の簡略化には、演算則(ド・モルガンの法則など)やカルノー図を使う
- 例:「入力AとBがともに0のときだけ1を出力する」回路
- 真理値表:
- (A,B)=(0,0)→1、(0,1)→0、(1,0)→0、(1,1)→0
- 加法標準形:
- 出力が1になるのは1通りだけなので ¬A・¬B
- ド・モルガンの法則で:
- ¬A・¬B = ¬(A+B)。つまりNORゲート1つでも、「NOT2つ+AND1つ」でも作れる
- 真理値表:
- ド・モルガンの法則:
- ① ¬(A・B) = ¬A + ¬B
- ② ¬(A+B) = ¬A・¬B
- 覚え方:
- 「全体の否定を外すと、・と+が入れ替わる」
- 等価回路:
- 回路の構成は違っても、同じ結果を出力する論理回路
- 半加算器:
- 1桁の2進数AとBを足す回路(1桁だけの加算)。下の桁からの桁上げは扱わない
- S(和の1桁目):
- AとBが異なるとき1 → S=¬A・B + A・¬B = A⊕B(XOR)
- C(桁上げ):
- AとBがともに1のとき1 → C=A・B(AND)
- ★試験では構成する素子が問われる:
- XORゲート1つ + ANDゲート1つ
- ほかの作り方:
- ANDゲート3つ+ORゲート1つ+NOTゲート2つでも作れる。XORは (A+B)・¬(A・B) とも等価なので、少なくとも3通りの作り方がある(実際はもっと多い)
- 例:
- 1+1 → S=0、C=1(2進数で「10」)
- 全加算器:
- 入力A、Bのほかに、下の桁からの桁上げも入力にする加算回路。複数桁の加算に使う
- 例:
- リップルキャリー加算器(全加算器を並べ、桁上げを順に上の桁へ送る。一番下の桁上げ入力には0を設定)
- 機能が複雑になるほど、たくさんの論理式が考えられる:
- 性能、設計のしやすさ、コストなどから最適な論理式を選んで回路を作る
- NANDだけで何でも作れる(★頻出)
- X NAND Y:
- XとYの否定論理積 ¬(X・Y)
- ① X AND Y =
- (X NAND Y) NAND (X NAND Y)
- ② X OR Y =
- (X NAND X) NAND (Y NAND Y)
- ③ NOT X =
- X NAND X
- ②の理由:
- X NAND X = ¬X、Y NAND Y = ¬Y。¬X NAND ¬Y = ¬(¬X・¬Y) = X+Y(ド・モルガン②)
- ★NANDだけでORを作る回路(②)は頻出。覚えておく
- 利点:
- 使うゲートをNANDに限ると設計しやすい。NANDを多用した回路が増えている
- MA法:
- NANDゲートだけで論理回路を作る手法の一つ
- X NAND Y:
順序論理回路:記憶できる回路
- 順序論理回路(順序回路):
- 過去の入力による状態と現在の入力で出力が決まる論理回路
- コンピュータの基本機能は「演算と記憶」。組合せ論理回路は記憶できないので、記憶できる順序論理回路が必須
- フリップフロップ(Flip-Flop:FF)回路:
- 1ビットの情報を記憶する回路。順序論理回路の基本構成要素。SRAMなどで使われる
- RSフリップフロップ(RS-FF):
- 最も基本のフリップフロップ。「ORゲート+NOTゲート」を2組たすきがけにした形で描かれることが多い
- “RS”は「リセット・セット」の意味
- 入力sがセット側、rがリセット側。yが記憶される1ビット、xはyの否定
| s | r | y | 意味 |
|---|---|---|---|
| 0 | 0 | 0または1(前の状態) | 保持(前の状態をそのまま維持) |
| 0 | 1 | 0 | リセット(0を記憶) |
| 1 | 0 | 1 | セット(1を記憶) |
| 1 | 1 | ― | 出力が確定しないため入力禁止 |
- ★試験のポイント:
- 「x=0、y=1の状態から x=1、y=0 に変える入力は?」のように問われる
- xはyの否定なので、「y=1からy=0に変える入力は?」と読み替える → 答えは s=0、r=1(リセット)
- 試験では、NANDゲート2つで作るNAND型RSフリップフロップも出題されている
LSIの設計・開発:チップを作る技術
- LSI(Large Scale Integration):
- 加算器、メモリ(FF)、シフトレジスタ、特定用途向けの回路などを組み込んだ大規模なIC(集積回路)
- FPGA(Field Programmable Gate Array):
- ユーザーが自由に設計して使えるLSI(フィールドプログラマブルロジック)の代表
- プログラムの記憶要素にSRAMを使うFPGAは、回路を高速に書き換えられ、書換え回数に制限がない
- FPGAの設計フロー
- 機能の記述:
- FPGAが担う機能・動作を、ハードウェア記述言語で書く
- 論理合成:
- 書いたソースコードを回路に変換する
- 配置配線:
- 回路の配置位置と、回路どうしをつなぐ配線経路を決める。入出力信号をFPGAのどのI/Oピンに割り当てるかも決める
- 書込みと動作検証:
- 生成した回路情報をFPGAに書き込み、動作を検証する
- やり直し:
- 動作不良や仕様変更があれば①に戻る
- 機能の記述:
- ハードウェア記述言語(HDL):
- 代表はVHDL、Verilog-HDL。HDLのほか、回路図(ブロック図)を使うこともある
- SystemC:
- C++をベースにしたシステムレベル記述言語
- HDLより抽象度の高い記述ができ、設計効率が上がる
- システムLSIのハードウェアと、その上で動くシステムソフトウェアを一貫して設計できる
- 設計の初期段階で使うと、ハードとソフトの仕様を早い段階で合わせられる(コデザイン)
- IPコア(Intellectual Property Core):
- SoCなどのLSIを作るための、再利用できる機能ブロックの回路設計情報
- ソフトウェアの「ライブラリ」にあたる。LSIを一から作るより開発期間を短くできる
- システムLSI:
- 機能や種類の違うICを組み合わせ、全体で1つのシステムとして働くようにしたもの
- SoC(System on a Chip):
- 複数のチップで作っていた、システムに必要な機能を1つのチップで実現したもの。システムLSIの一種
- ASSP:
- ある特定の機能に限定した集積回路。複数の顧客向けの汎用部品として提供される
- ASIC:
- ユーザーの要求に合わせて、複数機能の回路を1つにまとめた大規模集積回路(カスタムIC)
低消費電力LSIの設計技術:電気を節約する
- 背景:
- 集積度が上がるにつれ、LSIの消費電力は年々増えている。冷却の面でも問題
- センサネットワークのノードやRFIDタグなどは、電池の充電や交換がとても難しいので、低消費電力化が必須
- センサネットワーク:
- 小型のセンサ付き無線機器を分散配置し、協調して動かして、環境や物理的な状況を観測する通信ネットワーク。IoTのコア技術の一つ
- 基本の設計方針:
- 性能を落とさずに電力を抑えるには、不要不急の回路ブロックを止めるか、遅く動かす
- LSIの消費電力は2つ:
- ダイナミック電力とスタティック電力(リーク電力)
- ダイナミック電力:
- 回路ブロックの動作(スイッチング動作)に伴って消費される電力
- スイッチング:
- 信号を流したり切ったりする動作
- 大きさは電源電圧Vの2乗と周波数fの積に比例(V²×f)
- 電圧と周波数を下げれば減るが、電圧を下げると性能が落ちて遅くなる → 次の技術で解決する
- 例:
- 電圧を半分にすると、ダイナミック電力は (1/2)² = 1/4 になる(周波数が同じ場合)
| 技術 | やり方 |
|---|---|
| マルチVDD | 高性能が必要なブロックには従来の電圧、あまり速さが要らないブロックには低い電圧を使う(ブロックごとに電圧を変える) |
| DVS(Dynamic Voltage Scaling) | 負荷(仕事量)に応じて電源電圧を動的に変える |
| DVFS(Dynamic Voltage and Frequency Scaling) | 電源電圧と動作周波数の両方を動的に変える |
- DVS・DVFSの考え方:
- プロセッサの負荷は時間で変わる。負荷が軽いときは高性能で動かす必要がないので、電圧や周波数を下げる
- クロックゲーティング:
- 古くからある手法。ダイナミック電力の30〜50%はクロック分配回路で消費されることに着目し、クロックが要らない回路へのクロック供給を止める
- スタティック電力(リーク電力):
- 動作の有無に関係なく漏れ出すリーク電流で消費される電力
- パワーゲーティング(★試験によく出る):
- 動く必要がない回路ブロックへの電源供給を遮断して、リーク電流を減らす。リーク電力対策の代表
- 問題点:
- 電源を切ると記憶データを保持できない
- 対策:
- リーク電流が小さいリテンション・フリップフロップを使う
- リテンション・フリップフロップ:
- 主要部分のFF(高速・リーク電流大)の横に置く、低速・リーク電流小のFF。“リテンション”は「保持・記憶」の意味
- 電源を切る直前に、FFの出力をリテンションFFに入れてデータを保持する(遮断中はリテンションFF以外は止まる)
- 電源が戻ったら、リテンションFFから主要FFにデータを戻し、回路ブロックの状態を復元する
- その他の関連技術
- メモリの消費電力削減:
- 使っていないメモリセグメントを止める
- スタンバイ時の電源制御:
- システムLSIのように1チップで多くの機能を持つ場合、全モジュールが常に動く必要はない。使わないモジュールの電源を切る
- 例:
- 携帯電話の待受け中は、着信処理に必要なモジュール以外の電源を切る
- メモリの消費電力削減:
データコンバータ:アナログとデジタルの変換
- データコンバータ:
- A/Dコンバータ、D/Aコンバータのこと。アナログ信号を入力とする機器に欠かせない回路
- A/Dコンバータ(A/D変換器):
- アナログ信号をデジタル信号に変換する電子回路。アナログ信号の振幅を一定の時間間隔で切り出し、デジタル信号にして出力する
- 精度を決める要素:
- 分解能と変換速度(サンプリング周波数)
- A/D変換の代表的な方式にPCMがある
- サンプリング周波数が低すぎると、元のアナログ信号を復元できない。どのくらいの速さでサンプリングするかは標本化定理に従う
- 分解能:
- 変換の細かさ。デジタル出力値を1変化させる入力信号の最小変化ともいえる
- 式:
- 分解能 = 入力電圧のレンジ(フルスケールレンジ)÷ 2^出力ビット数
- 0〜10Vを3ビットで変換:
- 10 ÷ 2³ = 10 ÷ 8 = 1.25V(1.25V変わるとデジタル値が1変わる。量子化の単位が1.25V)
- 0〜10Vを8ビットで変換:
- 10 ÷ 2⁸ = 10 ÷ 256 ≒ 0.039V
- 同じレンジなら、ビット数が多いほど正確に変換でき、量子化誤差(変換時の誤差)も小さい
- LSB(Least Significant Bit):
- A/D変換の最小単位(最下位ビットの重み)。上の3ビットの例ではLSB=1.25V
- 実際に測れる最大値:
- レンジの上限そのものではなく、上限 − 1LSB
- 3ビット・0〜10Vの場合、デジタル値は000〜111の8段階なので、最大値は 10 − 1.25 = 8.75V
- 入力が−5V〜5Vの場合:
- 測れる範囲は −5V 〜 5 −(10÷2³)V
- 例題:
- 0〜8Vを4ビットで変換すると、分解能は 8 ÷ 2⁴ = 8 ÷ 16 = 0.5V。測れる最大値は 8 − 0.5 = 7.5V
- A/Dコンバータに必要な最小ビット数(例)
- 条件:
- LSBが 1/256 V、負の値を2の補数で表し、−512V 〜 512 −(1/256) V を測りたい
- Nビットの2の補数で表せる範囲は −2^(N−1) 〜 2^(N−1) − 1。1ビットの重みが1/256なので、−2^(N−1) × (1/256) = −512 を満たすNを求める
- 256=2⁸、512=2⁹ なので、2^(N−1−8) = 2⁹ → N−1−8=9 → N=18ビット
- 別解:
- LSB = 全体の幅(512×2)÷ 2^N = 1/256 → 2^(9+1−N) = 2^(−8) → N=18
- 条件:
- D/Aコンバータ(D/A変換器):
- A/Dと逆に、デジタルをアナログに変換する。考え方もA/Dの逆
- 例:
- 3ビット、出力レンジ0〜10V(実際は0〜10−1.25V)なら、デジタル値が1変わると出力が1.25V変わる
コンピュータ制御:機械を動かす
- 制御:
- 機械や装置に適切な操作を加えて、目的の動作をさせたり、目標の状態に保ったりすること
- 自動制御:
- 制御が自動的に行われるもの
- シーケンス制御:
- 制御対象に、状態に応じた複数の段階があるときに使う。「あらかじめ決められた順序に従って、制御の各段階を一つずつ進めていく」方式(例:洗濯機の「洗い → すすぎ → 脱水」)
- 以前はリレーという回路(スイッチ)を使っていたが、今はリレーの代わりにPLC(Programmable Logic Controller)を多く使う
- PLC:
- パソコン上でプログラミングできる制御装置。ふつうラダー図という言語でシーケンスプログラムを書く
- ラダー図:
- シーケンス回路図を、ラダーシンボル(記号)で図にしたもの。専用ソフトで作れば、変換からPLCへの書込みまでできる。ラダーは“梯子”の意味(回路が梯子のように見える)
- フィードバック制御:
- 目標値と、検出器やセンサから得た測定値を比べながら、目標値に一致させるように制御する(例:エアコンが室温を測りながら設定温度に近づける)
- 外乱による影響を、すぐにフィードバックして修正する
- フィードフォワード制御:
- 外乱を検知してその影響を解析し、影響が出る前に必要な修正動作(修正量)を決める(例:ドアが開いたのを検知して、室温が下がる前にヒーターを強める)
- ふつうはフィードバック制御と併用する
- センサの種類(試験に出たもの)
| センサ | 何を測る? |
|---|---|
| サーミスタ | 温度で電気の流れにくさ(抵抗値)が変わる電子部品。温度検知、温度補償、過熱検知、過電流保護など |
| ジャイロセンサ | 角速度センサともいう。角速度、傾き、振動を検出する |
| 距離画像センサ | 対象物までの距離を測る。最もよく使う方式がTOF(Time of Flight)。光源から出したレーザなどの光が、対象物に反射して戻るまでの時間で距離を測る。家庭用ゲーム機や自動車のADAS(先端運転支援システム)で使う |
| ひずみゲージ | 変形(ひずみ)を感知する |
| ホール素子 | ホール効果を使った、非接触型の磁気センサ |
| ウェアラブル生体センサ | ウェアラブルデバイス(腕や衣服など身体に着けて使うデバイスの総称)に取り付ける生体センサ |
- LiDAR(Light Detection And Ranging):
- TOF方式で、自動運転に使われるセンサ。距離だけでなく、対象物の方向や形まで測れる
- ホール効果:
- 物質に流れる電流に垂直に磁場をかけると、電流と磁場の両方に垂直な方向に起電力(電界)が現れる現象
- アクチュエータ:
- 電気エネルギーや、油圧・空気圧などの流体エネルギーを、制御信号に基づいて回転や並進などの動きに変える装置
- コンピュータ制御の流れ:
- センサで状態を検出 → 制御機器が判断して電気信号(制御信号)に変える → アクチュエータで力学的・機械的な動きに変える
- 種類:
- 電気式、油圧式(油圧でシリンダ内のピストンを動かす、回転運動を得る)、空気圧式(空気の圧縮膨張でピストンを動かす、回転運動を得る)
- 電気式の例:
- DCサーボモータ(直流サーボモータ。ロボットなど)、DCブラシレスモータ(パソコンのファンなど)、ステッピングモータ(プリンタの用紙送りなど)
- アクチュエータ駆動回路:
- 単にアナログの電圧を出すものと、電圧のON/OFFを繰り返すスイッチング型がある
- PWM制御(Pulse Width Modulation:パルス幅変調):
- 1周期に対するONの時間の割合(デューティ比)を変えて、モータの速さを制御する
- ONの時間(パルス幅)を長くする → 高い電圧 → モータが速く回る
- ONの時間を短くする → 低い電圧 → モータがゆっくり回る
- 例:
- 周期10ms、ONが3msならデューティ比は3÷10=30%。振幅5Vなら平均電圧は5×0.3=1.5V
混同しやすいペア
- 組合せ論理回路(入力だけで出力が決まる)/順序論理回路(過去の状態も使う。記憶できる)
- NAND(ともに1のときだけ0)/NOR(ともに0のときだけ1)
- XOR(異なるとき1)/OR(少なくとも一方が1)
- 半加算器(XOR+AND。下からの桁上げなし)/全加算器(下からの桁上げも入力にする)
- RS-FFのリセット(s=0、r=1 → y=0)/セット(s=1、r=0 → y=1)/s=r=1は禁止
- ASSP(特定機能、複数の顧客向けの汎用部品)/ASIC(特定ユーザー向けのカスタムIC)
- システムLSI(複数のICを組み合わせて1システム)/SoC(1チップで実現。システムLSIの一種)
- HDL(VHDL、Verilog-HDL)/SystemC(C++ベース。より抽象度が高い)
- マルチVDD(ブロックごとに電圧を変える)/DVS(電圧を動的に変える)/DVFS(電圧と周波数を動的に変える)
- クロックゲーティング(クロックを止める。ダイナミック電力対策)/パワーゲーティング(電源を止める。リーク電力対策)
- フィードバック(結果を測って直す)/フィードフォワード(外乱を検知して先回りで直す)
- 分解能(幅÷2^ビット数)/測れる最大値(上限 − 1LSB)