論理回路の基礎
📋 このページの内容
何事も基本が大切です。HDLを始める前に論理回路の基礎を確認しておきましょう。
「えっ、いきなりVerilogを書くんじゃないの?」って思った?🐾
実は、HDLを書く前に『AND・OR・NOT』といった論理回路の基本を知っておくのが、一番の近道なんだよ!一緒にサクッとおさらいしよう!
1. 論理演算子(AND・OR・NOT)
論理回路の動作は論理式で表すことができます。論理式の演算子には以下の3種類があります。
| 名前 | 別名 | 演算子 | 動作 |
|---|---|---|---|
| 論理積 | AND | A・B(ドット) | 両方の入力が1のとき1、それ以外は0。ドットは省略可。 |
| 論理和 | OR | A+B | どちらかの入力が1であれば1、両方0のとき0。 |
| 論理否定 | NOT | Ā(Aバー) | 0→1、1→0 に反転する。 |
2. ブール代数の法則
論理式はブール代数の諸法則に従います。主な法則を以下にまとめます。
AND(論理積)に関する法則
| 法則名 | 式 |
|---|---|
| 0との積 | A・0 = 0 |
| 1との積 | A・1 = A |
| 同一則 | A・A = A |
| 補元則 | A・Ā = 0 |
OR(論理和)に関する法則
| 法則名 | 式 |
|---|---|
| 0との和 | A+0 = A |
| 1との和 | A+1 = 1 |
| 同一則 | A+A = A |
| 補元則 | A+Ā = 1 |
共通の法則
| 法則名 | AND形式 | OR形式 |
|---|---|---|
| 交換則 | A・B = B・A | A+B = B+A |
| 結合則 | (A・B)・C = A・(B・C) | (A+B)+C = A+(B+C) |
| 分配則 | A・(B+C) = A・B+A・C | A+B・C = (A+B)・(A+C) |
| 吸収則 | A・(A+B) = A | A+A・B = A |
ド・モルガンの法則
反転の範囲を変えることで、論理和と論理積を相互に変換できる重要な法則です。
| 法則 | 式 |
|---|---|
| 第1法則 | A・B の否定 = Ā + B̄ |
| 第2法則 | A+B の否定 = Ā ・ B̄ |
「法則がいっぱいあって覚えられない…」って心配しなくて大丈夫!🐾
実践のコード書きで一番よく使うのは『ド・モルガンの法則』だから、今は『こういうのがあるんだな』くらいでサラッと流してOKだよ。
3. 真理値表
真理値表とは、論理回路の入力と出力の関係を網羅的に示した表です。入力の全組み合わせに対して出力値を記述します。
AND・OR の真理値表
| A | B | A・B(AND) | A+B(OR) |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 |
ド・モルガンの法則を真理値表で証明する
「A・B の否定 = Ā + B̄」を真理値表で確認します。
| A | B | A・B | A・Bの否定(左辺) | Ā | B̄ | Ā+B̄(右辺) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 0 | 0 | 0 | 0 |
左辺と右辺が一致しており、ド・モルガンの第1法則が成立することを確認できます。
4. 回路記号
論理演算子は回路記号として図示できます。回路記号を線でつないだものが回路図です。
| ゲート名 | MIL記法の形状 | JIS記法 | 動作 |
|---|---|---|---|
| ANDゲート | D字型 | □に「&」 | 全入力が1のとき出力1 |
| ORゲート | 矢型 | □に「≥1」 | 1つ以上の入力が1で出力1 |
| NOTゲート(インバータ) | 三角+○ | □に「1」+○ | 入力を反転して出力 |
| NANDゲート | AND+出力に○ | □に「&」+○ | AND出力の否定 |
| NORゲート | OR+出力に○ | □に「≥1」+○ | OR出力の否定 |
5. タイミングチャート
タイミングチャートとは、時間の流れに沿って入出力信号がどう変化するかを示した図です。横軸が時間、縦軸が信号値(0または1)を表します。
タイミングチャートの読み方
| 時刻 | 入力A | 入力B | 出力 A・B(AND) | 出力 A+B(OR) |
|---|---|---|---|---|
| T1以前 | 0 | 0 | 0 | 0 |
| T1(Aが1へ) | 1 | 0 | 0 | 1 |
| T2(Bが1へ) | 1 | 1 | 1 | 1 |
| T3(Aが0へ) | 0 | 1 | 0 | 1 |
| T4(Bが0へ) | 0 | 0 | 0 | 0 |
タイミングチャートは、論理式・真理値表・回路記号とともに論理回路設計に欠かせないツールです。
6. 真理値表から論理式を導く
真理値表が与えられたとき、出力Qが1になる行に着目して論理式を導きます。
手順(出力が1になる条件が1つの場合)
- 出力Qが1になる行を探す
- その行の入力条件をAND式で表す(例:A=1, B=1 → A・B)
- それが論理式になる(例:Q = A・B)
手順(出力が1になる条件が複数の場合)
Qが1になる条件が複数あるとき、それぞれのAND式をORでつなぎます。
| A | B | Q | 条件式 |
|---|---|---|---|
| 0 | 0 | 0 | — |
| 0 | 1 | 1 | Ā・B |
| 1 | 0 | 1 | A・B̄ |
| 1 | 1 | 1 | A・B |
3つの条件をORでつなぐと:
Q = Ā・B + A・B̄ + A・B → 簡略化すると Q = A + B
ここ、ちょっと数学っぽくて難しく感じるかもしれないね🐾
でも、実際の回路設計ツール(論理合成ツール)がこの「簡略化」を自動でやってくれるから、今は『こうやって式ができるんだ』というイメージだけ掴めれば完璧だよ!
7. 組み合わせ回路と順序回路
🔵 組み合わせ回路
- 出力 = 入力の関数
- 内部に記憶素子なし
- 真理値表・論理式で表現できる
- 入力変化 → 出力変化(遅延あり)
- 遅延時間は入力値・経路によって異なる
🟣 順序回路
- 出力 = 現在の状態(記憶)+入力
- 内部にフリップフロップなどの記憶素子をもつ
- 出力変化はクロックに同期する
- 遅延時間は記憶素子の遅延のみでほぼ一定
組み合わせ回路の遅延(具体例)
インバータ(遅延1ns)とANDゲート(遅延2ns)からなる回路で考えます。
| 変化のパターン | 経路 | 遅延時間 |
|---|---|---|
| B=0のときAが0→1 | A → ANDゲート → D | 2ns |
| Bが0→1 | B → インバータ(C) → ANDゲート(D) | 1ns + 2ns = 3ns |
同じ回路でも、入力変化のパターンによって出力までの遅延時間が異なります。
順序回路の遅延(フリップフロップの場合)
フリップフロップ(遅延1ns)を追加した順序回路では:
- CLKの立ち上がりエッジを検出し、そのときのD入力値をXに転送する
- CLKが立ち上がってから1ns後にXの値が確定する(常にほぼ一定)
- 組み合わせ回路の遅延値によらず、出力変化タイミングはCLK基準で揃う
お疲れさま!一番最初の「論理回路の基礎」を乗り越えたね🐾
組み合わせ回路と順序回路の違いは、Verilogを書く時に一番重要になるポイントだから、下のまとめでしっかり復習しておこう!
📌 まとめ
- 論理回路設計は「論理式・真理値表・回路記号・タイミングチャート」の4つで行う
- すべての論理式は AND(論理積)・OR(論理和)・NOT(論理否定) の3種類で表せる
- AND演算子はドット(・)、OR演算子は +、NOT演算子はAの上に横棒(Ā)で表す
- 回路記号にはMIL記法とJIS記法がある
- 真理値表から論理式を導くには「出力が1になる行のAND式をORでつなぐ」
- 組み合わせ回路の出力は入力の関数であり、真理値表や論理式で表現できる
- 順序回路はフリップフロップなどの記憶素子をもち、出力はクロックに同期して変化する
- タイミングチャートは横軸が時間、縦軸が入出力信号値を表す
