fivebythree.net

SOCDクリーナー 回路2 "後押し優先"

2023-08-20
Abstract
左右同時押し時に、後から押されたボタンの方向を優先して出力するSOCD クリーナー回路の回路の例を挙げ、動作を説明します。

左右同時押し 後押し優先動作

動作

「左右同時押し 後押し優先動作」は字義通りで、左右が同時に押された時に、 後から押された方向キーが優先される事を意味しています。

前の動作 左右同時押し 実際の動き
右 → 左を押して同時押し ←→ 左 ← に進む 後から押した左に進む
左 → 右を押して同時押し ←→ 右 ← に進む 後から押した左に進む

右を押した状態で、更に左を押して同時押し状態になった場合、後から押した左方向に進むということです。

個人的には、左右同時押しニュートラルより直感的で分りやすいと思いますが、どうでしょうか。

この記事では、この動作を実現する論理回路の例を導出したいと思います。

状態遷移図

この動作は、前述の左右同時押しニュートラルと違って、動作させるためには記憶素子が必要になります。

記憶素子の入出力と時系列変化を含めて、何も無い状態から真理値表に書き起すのは結構難しいため、状態遷移図を書くことで、動作をもうすこし具体的に理解することから始めたいと思います。

各状態を円を中心線で区切った記号で表します。

円の上半分には状態名を、下半分には各状態にとどまっているときのキー出力を記します。

遷移は入力状態に応じて発生します。矢印で表しています。

以下が、左右同時押しの後押し優先の状態遷移図です。

T-フリップフロップを使った回路例

状態遷移図には状態が5つありますので、順序論理回路には5つの状態を識別するのに最低限に必要な記憶回路が必要です。 同様に、記憶回路は現在の状態を典型的に表しているほうが、回路の構成を掴みやすいでしょう。

そこで、T-FFを3回路分用意し、それぞれに「QL:左に移動している」「QR:右に移動している」「QS:同時押し状態」という役割を持たせることにします。

今回想定した、入力、内部状態、及び出力を列挙したものが以下のようになります。

  • 入力
    • L - コントローラー左方向キー
    • R - コントローラー右方向キー
  • 内部状態
    • QL - 左に移動している
    • QR - 右に移動している
    • QS - 左右が同時に押されている
  • 出力
    • OL - (=QL) コントローラー左方向出力
    • OR - (=QR) コントローラー右方向出力

状態遷移表の Q0 ~ Q4 と、QL, QR, QS の状態の関係以下の通りです。

QR QL QS
Q0 0 0 0
Q1 0 1 0
Q2 1 0 0
Q3 0 1 1
Q4 0 0 1

真理値表とカルノー図

状態遷移図から、入力、内部状態の遷移関係およびそれを実現するためのT-FFの入力から真理値表を書き起こしました。

T-FFの入力 TL, TR, TS それぞれに対してカルノー図を作成し、論理式を導いたものが以下になります。

$$ T_L = \overline{L} \cdot Q_L \cdot \overline{Q_R} + \ L \cdot \overline{Q_L} \cdot Q_R \cdot \overline{Q_S} + \ R \cdot Q_L \cdot \overline{Q_R} \cdot \overline{Q_S} + \ L \cdot \overline{R} \cdot \overline{Q_L} \cdot \overline{Q_S} + \ L \cdot \overline{R} \cdot \overline{Q_L} \cdot Q_R $$

$$ T_R = \overline{R} \cdot \overline{Q_L} \cdot Q_R + \ R \cdot Q_L \cdot \overline{Q_R} \cdot \overline {Q_S} + \ \overline{L} \cdot R \cdot \overline{Q_R} \cdot \overline{Q_S} + \ L \cdot \overline{Q_L} \cdot Q_R \cdot \overline{Q_S} + \ \overline{L} \cdot R \cdot Q_L \cdot \overline{Q_R} $$

$$ T_S = L \cdot R \cdot \overline{Q_L} \cdot Q_R \cdot \overline{Q_S} + \ L \cdot R \cdot Q_L \cdot \overline{Q_R} \cdot \overline{Q_S} + \ \overline{L} \cdot \overline{Q_L} \cdot Q_R \cdot Q_S + \ \overline{L} \cdot Q_L \cdot \overline{Q_R} \cdot Q_S + \ \overline{R} \cdot \overline{Q_L} \cdot Q_R \cdot Q_S + \ \overline{R} \cdot \overline{Q_L} \cdot Q_R \cdot Q_S + \ $$

論理回路とシミュレーション結果

あとは論理式を一気に論理回路に書き起こします。

シミュレーションは CircuitJS を用いて行いました。 ここに書くと冗長なので、CircuitJS のファイルを以下に置いておきます。

T-FF SOCD Cleaner 回路左右同時押し 後押し優先回路

まとめ

SOCD回路にて、後押し優先処理を T-FF を使った順序論理回路で設計してみました。

ですが、一応設計はできるのですが、素子数を見るに作りはちょっと面倒だということも分かると思います。

入力数と出力数は合わせても4つと少ないので、順序論理回路作成しなければならない場合は、市販しているホビー用途のマイコンボードを使うのがより実践的です。

References

CircuitJS - Circuit Simulator written in javascript