【第7回】複雑なデジタル回路も一瞬で!――Custom Logic徹底解説
- なぜcustom logicを使うのか?
- custom logicとは?
- custom logicを作ってみる
- 作成したcustom logicを使う-多数決回路
- 4進アップカウンタを作る
- custom logicで7セグメントデコーダーを作ってみる
- 次回予告
- う-ん、よく分からん!
- 参考文献
なぜcustom logicを使うのか?
前回、多数決回路と4進アップカウンタを作成しました。
回路の仕組みを理解したい場合は、前回のように一から自分で部品を組み合わせて、回路を作っても構いませんが、ただその回路の機能だけが欲しい場合、たくさんの部品を使う必要があって、正直、面倒です。
custom logicという名前の部品を使えば、この面倒をなくすことができます。
custom logicとは?
custom logicとは、下のような文字を入力するだけで、多数決回路・JK-FF・カウンタ回路などのデジタル回路を作ることができる部品です。
+ 00=01 + 01=10 + 10=11 + 11=00 ? AB=AB
custom logicを作ってみる
では、custom logicを作成してみましょう。 今回は、前回も作成した「多数決回路」をcustom logicで作成していきます。
モデルを作成する
custom logicは、Digital Chips - Add Custom Logicから追加できます。
追加した、custom logicのEdit画面を開きます。すると、下のような画面が表示されます。
Model Nameには、これから作成する回路に対してつける名前を入力します。 ここでは、MajorityCircuitという名前を付けています。
続いて、Edit Model
をクリックします。
この画面で、モデル(自分が作りたいデジタル回路)を作成していきます。
Edit Model
名前の通り、Inputs・Outputsには、それぞれ入力端子・出力端子の名前をカンマ区切りで入力します。
これらの名前は、下の図のように表示されます。
Info Textは、作成したcustom logicにマウスを当てた時に画面右下に表示される文章を入力します。
今回は、MajorityCircuitと入力しています。
Definition
Definitionで、回路の動作を定義します。
上の図は、Definitionの内容とその説明を一つにまとめたものです。
入力がどのような状態のときに、出力をどのような値にするのかを一行(011=1,101=1……と書いてある)で設定しています。
=の左側は入力端子、右側は出力端子を表しています。各端子は、Inputs・Outputsで設定した端子に左から順に対応しています。
例えば、InputsにA,B,C,D、OutputsのE,Fを指定して0101=10と指定した場合、Aが0、Bが1、Cが0、Dが1のときに、Eに1、Fに1を出力するという意味になります。
Definitionの説明-多数決回路
上図①~④は、入力が011,101,110,111(0よりも1の数が多い)のとき1を出力するように設定しています。
では、⑤の入力にある?
は何でしょうか。これは、入力がどんな値であってもという意味です。
ですから、⑤はA2,A1,A0の入力がどんな値であったとしても、Eqに0を出力するという意味になります。
ただ、下のコラムでも説明しているように、先に書いた設定の方が優先されるため、結果としてこの設定は「上の4つの設定以外の入力値になっていたら、0を出力する」という意味になります。
011=1,011=0のように矛盾した設定を一つのDefinitionに書くと、どうなるのでしょうか。 custom logicでは、先に書いた設定が優先される決まりになっています。 多数決回路で挙げた例でも、①~④と⑤の設定が矛盾していますが、先に書いた設定が優先されるため、入力が011,101,110,111のときは、⑤の条件が当てはまっていたとしても1が出力されます。
これで多数決回路を作成できました。OKボタンを押して、作成を完了しましょう。
作成したcustom logicを使う-多数決回路
では、作成したcustom logicを使ってみましょう。
追加したcustom logicと論理入力・論理出力の部品を使って下の図のような回路を作成します。
(回路データは、ここの「多数決回路(customlogic).txt」からダウンロードできます。)
シミュレーションを実行すると、前回作成した多数決回路と同じ動作をしていることが分かります。
4進アップカウンタを作る
続いて前回作成した4進アップカウンタをcustom logicで作成してみます。
多数決回路と同様、次の手順で、custom logicを作成します。
- custom logicを追加する
- Model Nameを入力してEdit Modelをクリック
- Inputs,Outputs,Info Text,Definitionを入力してOKボタンを押す
- custom logicを使う
Model Nameは、Counterとしています。
Definitionの説明-4進アップカウンタ
多数決回路のときと異なり、4進アップカウンタは、入力の値だけでなく現在の出力も踏まえて、次の出力の値を決める必要があります。
custom logicでは、=の左側に入力端子の数を超えて、文字(0,1,+,-など)を入力すると、出力の条件に現在の出力を、含めることができます。
例えば、InputsをA,B、OutputsをC,Dとしたとき、0011=10と入力すると、入力A,Bが0,0、現在の出力C,Dが1,1のとき、出力C,Dに1,0を出力するという意味になります。
①~④の+は、クロックの立ち上がりを示しています。(逆に-だと、クロックの立下りを示す。)
⑤の現在の出力にある、A,Bは、それぞれ現在の出力のQ1の値・Q0の値を示しています。 そのため、=の右側にあるA,Bも現在の出力のQ1の値、Q0の値を表すことになります。もしA,Bに0,1と入っていたとしたら、出力にも0,1が出力されることになります。
⑤の?は、クロックがどんな状態であっても、という意味を表します。注意が必要なのは、ここでの?には、クロックの立ち上がり・立ち下がりの状態だけでなく、クロックが変化しないという状態も含まれるという点です。(ただ、多数決回路でもやったように、先に書いた設定が優先されるため、⑤での?は「クロックが立ち上がっていなければ」という意味になります。)
結局、⑤の設定は「クロックが立ち上がっていなければ、出力はそのまま」という意味になります。
前のコラム、Definitionの優先順位でも取り上げた通り、custom logicは先に書いた設定が優先されます。そのため、一番最初の行に?を使った設定(例えば???=111)を書いてしまうと、 後の行に、どんな設定を書いたとしても、その設定が動作に反映されなくなってしまいます。注意してください。
作成したcustom logicを使う-4進アップカウンタ
多数決回路と同じ手順で、4進アップカウンタを使ってみます。
多数決回路と同様に、追加したcustom logicと論理入力・論理出力・クロックの部品を使って下の図のような回路を作成します。
(回路データは、ここの「4進アップカウンタ(customlogic).txt」からダウンロードできます。)
シミュレーションを実行すると、前回作成した4進アップカウンタと同じ動作をしていることが分かります。
custom logicで7セグメントデコーダーを作ってみる
これで、custom logicの解説は終わりました。ここからは、複雑な回路である7セグメントデコーダー
をcustom logicで作成してみます。
7セグメントデコーダーって?
文章で長々説明するより、図を見たほうが早いでしょう。Circuit Simulator Appletの画面上部にある、Circuitsをクリックして、Combinational Logic-7 Segment LED Decoderをクリックすると、 7セグメントデコーダーの回路が表示されます。
この回路は、入力(2進数)の値をディスプレイに表示するものです。ディスプレイの端子a,b,c,d……f,gに1を入力すると、それぞれ対応する部分が点灯する仕組みになっています。
入力とディスプレイの間にある回路が7セグメントデコーダー
です。見るとわかりますが、非常に複雑な回路となっています。これをcustom logicで置き換えます。
7セグメントデコーダーのcustom logicを作る
先に作った例を参考にして、7セグメントデコーダーのcustom logicを作ります。
詳細な作り方は、多数決回路と4進アップカウンタの例を参考にしてください。
見切れていて、図では全て見えませんが、7セグメントデコーダーのDefinitionは、下のようになっています。
0000=1111110 0001=0110000 0010=1101101 0011=1111001 0100=0110011 0101=1011011 0110=0011111 0111=1110000 1000=1111111 1001=1110011 ????=0000000
0~9のいずれでもないときは、消灯するように設定しています。
11行もあって、複雑そうに見えますが、入力が0000(0)のとき、出力はこう、入力が0001(1)のとき、出力はこう……というのを設定しているだけです。
パターンとしては、多数決回路に似ています。
作成したcustom logicをもともとある7セグメントデコーダーに置き換えて動かしてみます。
(回路データは、ここの「7セグメントデコーダー(customlogic).txt」からダウンロードできます。)
元々の7セグメントデコーダーと同じように動作していることが分かります。
次回予告
今回のcustom logicの解説は、難しかったと思います。慣れてくれば簡単なのですが……
参考文献の公式マニュアルには、様々な回路が載っているので参考にしてください。
次回は、電圧の波形を音声にして実際に聞くことができる部品Audio Input/Audio Outputを紹介します。
う-ん、よく分からん!
この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。
参考文献
CircuitSimulatorApplet 全電子部品対訳表
CircuitSimulatorApplet上に表示される電子部品の名前は、全て英語です。
英語で書かれた電子部品の名前を見て、すぐに実際の電子部品が思い浮かぶ人はいいかもしれませんが、そうでない人が大半でしょう。
下の記事では、CircuitSimulatorAppletにある全ての部品の日本語訳を載せてあります。
「日本語では○○っていう部品なんだけど、英語では何ていうんだろう?」「この部品、CircuitSimulatorAppletのどこにあるんだ?」という時にお使いください。
Custom Logic
Custom Logicの公式マニュアルです。
いくつかの、ここで取り扱っていない回路の例が出ています。
http://www.falstad.com/circuit/customlogic.htmlwww.falstad.com