【第7回】複雑なデジタル回路も一瞬で!――Custom Logic徹底解説

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp

なぜ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の図

追加した、custom logicのEdit画面を開きます。すると、下のような画面が表示されます。

custom logicのEdit画面

Model Nameには、これから作成する回路に対してつける名前を入力します。 ここでは、MajorityCircuitという名前を付けています。

続いて、Edit Modelをクリックします。
この画面で、モデル(自分が作りたいデジタル回路)を作成していきます。
Edit Modelをクリックして表示される画面

Edit Model

名前の通り、Inputs・Outputsには、それぞれ入力端子・出力端子の名前をカンマ区切りで入力します。
これらの名前は、下の図のように表示されます。
customlogic完成後の図

Info Textは、作成したcustom logicにマウスを当てた時に画面右下に表示される文章を入力します。
今回は、MajorityCircuitと入力しています。

Info Textが表示されている図

Definition

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を出力する」という意味になります。

Column:Definitionの優先順位

011=1,011=0のように矛盾した設定を一つのDefinitionに書くと、どうなるのでしょうか。 custom logicでは、先に書いた設定が優先される決まりになっています。 多数決回路で挙げた例でも、①~④と⑤の設定が矛盾していますが、先に書いた設定が優先されるため、入力が011,101,110,111のときは、⑤の条件が当てはまっていたとしても1が出力されます。

これで多数決回路を作成できました。OKボタンを押して、作成を完了しましょう。

作成したcustom logicを使う-多数決回路

では、作成したcustom logicを使ってみましょう。
追加したcustom logicと論理入力・論理出力の部品を使って下の図のような回路を作成します。

(回路データは、ここの「多数決回路(customlogic).txt」からダウンロードできます。)

回路図

回路作成アニメーション

シミュレーションを実行すると、前回作成した多数決回路と同じ動作をしていることが分かります。

多数決回路がHになっている

多数決回路がLになっている

4進アップカウンタを作る

続いて前回作成した4進アップカウンタをcustom logicで作成してみます。
多数決回路と同様、次の手順で、custom logicを作成します。

  1. custom logicを追加する
  2. Model Nameを入力してEdit Modelをクリック
  3. Inputs,Outputs,Info Text,Definitionを入力してOKボタンを押す
  4. custom logicを使う

2の図

Model Nameは、Counterとしています。

3の図

Definitionの説明-4進アップカウンタ

Definitionの説明

多数決回路のときと異なり、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が出力されることになります。

⑤の?は、クロックがどんな状態であっても、という意味を表します。注意が必要なのは、ここでの?には、クロックの立ち上がり・立ち下がりの状態だけでなく、クロックが変化しないという状態も含まれるという点です。(ただ、多数決回路でもやったように、先に書いた設定が優先されるため、⑤での?は「クロックが立ち上がっていなければ」という意味になります。)

結局、⑤の設定は「クロックが立ち上がっていなければ、出力はそのまま」という意味になります。

Column:?の位置に注意!

前のコラム、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セグメントデコーダーの回路が表示されます。

7セグメントデコーダーの図

この回路は、入力(2進数)の値をディスプレイに表示するものです。ディスプレイの端子a,b,c,d……f,gに1を入力すると、それぞれ対応する部分が点灯する仕組みになっています。
入力とディスプレイの間にある回路が7セグメントデコーダーです。見るとわかりますが、非常に複雑な回路となっています。これをcustom logicで置き換えます。

7セグメントデコーダーのcustom logicを作る

先に作った例を参考にして、7セグメントデコーダーのcustom logicを作ります。
詳細な作り方は、多数決回路と4進アップカウンタの例を参考にしてください。

custom logic作成アニメーション

表示させた図

見切れていて、図では全て見えませんが、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セグメントデコーダーの回路

元々の7セグメントデコーダーと同じように動作していることが分かります。

次回予告

今回のcustom logicの解説は、難しかったと思います。慣れてくれば簡単なのですが……
参考文献の公式マニュアルには、様々な回路が載っているので参考にしてください。

次回は、電圧の波形を音声にして実際に聞くことができる部品Audio Input/Audio Outputを紹介します。

う-ん、よく分からん!

この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。

参考文献

CircuitSimulatorApplet 全電子部品対訳表

CircuitSimulatorApplet上に表示される電子部品の名前は、全て英語です。
英語で書かれた電子部品の名前を見て、すぐに実際の電子部品が思い浮かぶ人はいいかもしれませんが、そうでない人が大半でしょう。

下の記事では、CircuitSimulatorAppletにある全ての部品の日本語訳を載せてあります。
「日本語では○○っていう部品なんだけど、英語では何ていうんだろう?」「この部品、CircuitSimulatorAppletのどこにあるんだ?」という時にお使いください。

terapotan.hatenablog.jp

Custom Logic

Custom Logicの公式マニュアルです。
いくつかの、ここで取り扱っていない回路の例が出ています。 http://www.falstad.com/circuit/customlogic.htmlwww.falstad.com

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp