最近の国内の専門書では,論理回路設計の例題が非常に少なくて本当に困ってしまうんですが,どの専門書もいわば「売りやすさ」を主体で考えから,

  • 字が大きくて

  • 薄くて

  • 安価な


ものが主流になっちゃったような気がします.学生時代,共立出版の400ページにも及ぶ電気回路の分厚い本を勉強しましたが,もうここまで行くと他の参考書など必要ないくらいでした.そんな骨のある専門書は今の時代に合わないのかもしれませんが.

論理回路でも全く事情は同じような気がします.

ま,それはともかく,自販機の設計仕様から論理回路を設計する例題を今日は紹介したいと思います.完全にオリジナルではないですが,海外のサイトを参考に.




簡易自販機の設計仕様


以下のような自販機を考えます.

  1. 販売しているのは150円のジュース一種類のみ

  2. 使用できる硬貨は,100円と50円のみ

  3. 150円入れると,ジュースが出てくる

  4. 200円入れると,ジュースとおつり(50円)が出てくる

  5. 硬貨は必ず1つずつ入れ,同時に複数の硬貨を入れることは出来ない.


このような例題を考えます.似たような例題は海外サイトでもいくつか見かけましたが(たとえばUCBerkeleyの授業スライドはこちら),おつりまで考慮したものはあまりないので,少しだけ改良が入ってます.

先ずは信号を決める


それでは,入力を\(X_1, X_2\),出力を\(Y_1, Y_2\)と置いてみます.それぞれ,以下のように考えます

入力信号:50円硬貨を入って来たことを\(X_1=1\),100円硬貨が入って来たことを\(X_2=1\),何も硬貨が入って来ていない待機待ちを\(X_1=X_2=0\)とします.ちなみに,\(X_1=X_2=1\)は禁止(設計仕様より同時に2つの硬貨が入らないので)

出力信号:ジュースを出すことを\(Y_1=1\),50円のおつりを出すことを\(Y_2=1\)とします.何も動作を起こさないことを\(Y_1=Y_2=0\)とします.\(Y_1=0, Y_2=1\)を禁止とします(ジュースが出ないでお釣りだけ出てくることはないので)

このように考えると,硬貨が入力された状態を自販機の状態として以下のように考えることにします.

状態信号:50円分の硬貨が入力された状態を\(S_{50}\),100円分の硬貨が入力された状態を\(S_{100}\),何も硬貨が入力されていない入力待ちの状態を\(S_0\)とします.

状態遷移を考えてMealy Graphを作成


硬貨は100円と50円のみです.したがって,硬貨が入力されて出力信号が出てくるまでの順番としては,

  • 50 → 50 → 50 (150円になったのでジュースが出る)

  • 50 → 50 → 100 (200円になったのでジュースとお釣りが出る)

  • 50 → 100  (150円になったのでジュースが出る)

  • 100 → 50  (150円になったのでジュースが出る)

  • 100 → 100  (200円になったのでジュースとお釣りが出る)


これがすべての組み合わせとなります.これらの状態遷移がすべて網羅するようにミーリーグラフを描きます.尚,入力/出力は,\(X_1X_2/Y_1Y_2\)と書いてます.

 

 

これで完成.

状態遷移表を書く


ここからが面白くなってきます(笑)

状態は3つ(\(S_0, S_{50}, S_{100}\))あるので,2つのFFを用います.1つ目のFFの出力を\(Q_1\),2つ目のFFの出力を\(Q_2\)とすると,以下のような対応にします.

\(S_0\):\(Q_1=Q_2=0\)

\(S_{50}\):\(Q_1=Q_2=0\)

\(S_{100}\):\(Q_0=Q_2=1\)

ここで,\(Q_2=Q_1=1\)は禁止とします.状態遷移表は以下のようになります.

 

ミーリーグラフを使って空欄を埋めると以下のようになります.

 

論理式を作成し回路図を描く


ここで,状態遷移を表す式と出力の式を求めますが,カルノー図を使います.

 

 

\[
Q_1' =
Q_2' =
Y_1 =
Y_2 =
\]
ここから回路図にするには,D-FFを使うかJK-FFを使うかによって変わって来ますが,簡単なD-FFを用いることにします.D-FFの特性方程式は,\(Q' = D\)なので,\(Q_1', Q_2'\)の右辺の式をそのまま組み合わせ論理回路で表現するだけでOKです.したがって,

 

ふぅ,こんな感じで完成ですね.ちなみに,JK-FFの場合は特性方程式が\(Q' = J\overline{Q} + \overline{K}Q\)なので,その形に変形しなければなりませんので,\(Q_1'\)はこの形になっているので問題ないです.そのまま当てはめると,

\begin{eqnarray}
J_1 &=& \overline{Q}_2 X_2\\
\overline{K_1} &=& \overline{X_1}\overline{X_2}
\end{eqnarray}

となります.\(Q_2'\)の方は,式変形して,

\[
Q_2' =
\]

とすると,特性方程式の形になりますので,

\begin{eqnarray}
J_2 =
K_2 =
\end{eqnarray}

になりますが,せっかくJK-FFを使用してもあまり簡単になりませんね(苦笑).