はじめに
最近、『マンガでわかるデジタル回路』っていう本を読んだんだ。軽くまとめとくね。
本に書いてあったこと全部はここに書いてないよ。
前置き
デジタル回路は組み合わせ回路と順序回路に分かれるよ。
組み合わせ回路:今の入力情報の組み合わせで出力が決まる回路。
順序回路:『記憶』を持った回路。
MIL記号
論理回路の ANDゲート と ORゲート の記号は、複数の入力に対して1つの出力がある形に拡張されてるんだ。
- 記号の意味
ANDゲート (ALL) :複数の入力が全部1のときに、出力が1になる。
ORゲート (EXIST) :どれか1つでも入力が1のときに、出力が1になる。
- 配線
丸が付いてるのは低レベル (0、L)。
丸が付いてないのは高レベル (1、H)。
組み合わせ回路の作り方
多数決回路
複数人で投票して2つの結果から1つを選ぶ回路だよ。
真理値表を作る。つまり、ありうる全てのパターンを書き出す。
真理値表のH出力のところに下線を引く。
『入力の線』と『入力をNOTにする線』でフレームワークを組む。
2列の縦方向の配線を用意して、2列目はNOT線、つまり1列目からNOTゲートを繋いで2列目にするんだ。
ANDゲートに接続する。
入力がLのときは、入力をNOTにしたところ (2列目) から始める。
入力がHのときは、一番最初のところ (1列目) から線を引く。
そして、ANDに繋ぐ。
この手順を繰り返して、2番目で下線を引いたところを全部やる。
ANDの全ての出力をORに接続する。
回路の簡略化
デジタル回路の設計フローは、問題整理 - 真理値表 - 簡略化 - 回路図作成、って感じ。
カルノー図を使って簡略化するよ。
真理値表をカルノー図に変換する。
真理値表を作るときは、列を一番上から始める。例えば、[C、B、A] で、結果がZって感じ。
カルノー図は二次元の真理値表で、一般的には0と1でレベルを表すんだ。
もし入力が3つなら、行をB、A、列をCにして、その結果を二次元表に埋めていく。
簡略化の前に知っとくこと
カルノー図の左右と上下は繋がってるんだ。横方向も縦方向もビット (1ビット) 単位で変化するからね。
簡略化
一緒になってる1をひとつの集合としてまとめていく。
行と列の共通点を探す。
もし共通点が0だったら否定演算、つまり文字の上にバーを引く。
例えば
C\BA 00 01 11 10 0 1 1 1 上の表で、共通点はCが0、Aが1だから、式は!C * Aになるね。
簡略化のルール
集合の形は、縦横が1、2、4の長方形 (または正方形) しかダメ。
集合は重ねていいよ。
集合の数は少ないほど、面積は大きいほどいい。
注:左右と上下はひとつの集合として見れるよ。もしこれ以上『集合を作れない』ってなったら、その回路はもうそれ以上簡略化できないってこと。
簡略化したら回路図を描くんだ。全ての式を、前の手順 (3番目から) で描けばOKだよ。
回路の無視 (ドンケア)
入力を決めるとき、バイナリ数の特性上、考慮しなくていい入力が出てくることがあるんだ。
例えば、入力が月だとして、4ビットのバイナリ数を使うと全部で16通りの入力があるけど、そのうち0、13、14、15なんかは考慮しなくていい入力だよね。
こういう入力は、カルノー図では『-』で代用できて、簡略化のときに集合体に入れちゃってもいいんだ。
順序回路の作り方
順序回路を作るには、組み合わせ回路とフリップフロップが必要になるよ。
順序回路の『記憶』についてだけど、例えば自動販売機でお金を投入するとき、今までの合計金額を記憶してるよね。もし記憶がなかったら、最後のコインの額面だけになっちゃう。
フリップフロップを導入するんだけど、例えばクロック (CLK) があって、CLKがトリガーされたときだけ、入力が出力に影響を与えるんだ。それ以外は出力は変わらないよ。
電子サイコロを作るのを例に見てみよう。
状態遷移図を描く。
時間の変化に合わせて、電子サイコロがどう変わっていくか?
もし停止が低レベルなら、1から6、そしてまた1に戻る。
もし高レベルなら、どこかの点でずっと停止する。
バイナリ数で状態を表す。
それぞれの状況、つまり状態をバイナリ数で表して、それから状態遷移表を作るんだ。
状態遷移表から回路図を描くには、Dフリップフロップを使って状態を記憶できるよ。
組み合わせ回路を設計する。
『今の状態』から『次の状態』を決めるっていうのは、実は組み合わせ回路なんだ。