. JKフリップフロップを用いた順序回路の設計 - 工業大学生ももやまのうさぎ塾 (Momousagi Academy)
JKフリップフロップを用いた順序回路の設計 - 工業大学生ももやまのうさぎ塾 (Momousagi Academy)
JKフリップフロップを用いた順序回路の設計 - 工業大学生ももやまのうさぎ塾 (Momousagi Academy)

うさぎでもわかる論理回路 JKフリップフロップを用いた順序回路の設計

(i) 順序回路を作るために必要なフリップフロップは最低何個か答えなさい。(ii) [1](ii)で定義した状態を各JKフリップフロップの状態に対応させ、励起表 [2] … Continue reading に順序回路の出力値を追記した形の状態遷移表(励起出力表)を完成させなさい。だだし、Don’t Careの場合は X を書くこと。(iii) 各フリップフロップの入力方程式(励起関数)、および出力の方程式(出力)関数を求めなさい。(カルノー図を用いて出来る限り簡単な形で表しなさい)(iv) 回路図を書きなさい。

うさぎでもわかる論理回路 - 順序回路の設計編 状態遷移図・状態遷移表の書き方 こんにちは、ももやまです。 前回は 順序回路に関する基礎知識(フリップフロップなど)順序回路の読み方 など、順序回路を「よむ [1] 状態遷移図・状態遷移表の設計 (i) 入力変数・出力変数を考える

最初、 与えられた問題から必要な入力変数・出力変数を考え、さらに定義する こと を考えます。

今回の場合、与えられた問題文を詳しく書くと、「 1つの入力変数の値 が1であるかどうかをカウントし、1がカウントされた回数が偶数回になるごとに、 1つの出力変数 から1を出力する」となりますね。

  • 入力変数 … 1つ(\( x \) と定義)
  • 出力変数 … 1つ(\( z \) と定義)
(ii) 内部状態を考える

ここで、必要な内部状態を考える際には、 与えられた問題文を満たす回路を作るためにどんな状態を記憶すればよいか を考えます。

  • 1のカウント回数が偶数の状態
  • 1のカウント回数が奇数の状態
(iii) 状態遷移図を考える
  1. 考えた状態に \( q_0 \) などの名前をつける
  2. 状態を並べる
  3. 状態遷移を書く(各入力ごとの状態遷移先[次状態]、および出力を書く)
  • 1のカウント回数が偶数の状態 → \( q_0 \)
  • 1のカウント回数が奇数の状態 → \( q_1 \)

あとは、各状態ごとに各入力 \( x = 0 \), \( x = 1 \) における遷移先(次状態)を書いていけばOKです。

  • 入力 \( x = 0 \) のときは、1の数のカウントは変化しない→ 偶数個 \( q_0 \) のときは偶数個 \( q_0 \)、奇数個 \( q_1 \) のときは奇数個 \( q_1 \) → 1が入力されてないときは、「1の入力回数は増えない」ので、出力は \( z = 0 \)
  • 入力 \( x = 0 \) のときは、1の数のカウントが1増える→ 偶数個 \( q_0 \) のときは奇数個 \( q_1 \)、奇数個 \( q_1 \) のときは偶数個 \( q_0 \) → 偶数個から奇数個になるときは、「1の入力回数が偶数回」とはならないため、出力は \( z = 0 \) → 奇数個から偶数個になるときに、「1の入力回数が偶数回」となるため、出力は \( z = 1 \)

[余談] 状態数の最小化

(iv) 状態遷移表 [2-i] 必要なフリップフロップの数を考える(ここはD-FFと同じ)

今回の場合は、\( q_0 \), \( q_1 \) の2状態を記憶すればOKなので、必要なフリップフロップは1個となります [4] 1個のフリップフロップで2つの状態、2個のフリップフロップで4つの状態、3個のフリップフロップで8つの状態、…、\( n \) 個のフリップフロップで … Continue reading 。

ここで、定義した内部状態の数 \( a \) と必要なフリップフロップの数 \( n \) について復習しましょう。

フリップフロップと記憶できる状態の数

フリップフロップ(D-FF, T-FF, JK-FF, SR-FFの種類は問わない)の個数と、記憶できる状態の最大数の関係を表にしたものを下に記す。

FFの個数記憶できる状態数122438416︙︙\( n \)\( 2^n \)

数学的に考えたい人は、ある \( a \) 個の状態を記憶するために必要なフリップフロップの数 \( n \) は、\[\textcolor> < a \leqq \textcolor>\]を満たすような不等式を満たすような \( n \) を求める、と頭に入れておくのもあり。

\( 2^ \) … フリップフロップが1個不足してギリギリ回路が記憶できない場合 \( 2^ \) … フリップフロップがギリギリ足りている場合

[2-ii] 励起表と出力値を合体させた表を書く(励起出力表)

必要なフリップフロップの数を考えたあとは、つぎに、「フリップフロップの現状態 \( Q \) ・各入力」から「フリップフロップの次状態 \( Q \)」 に遷移させるためには、JK-FFの入力値をどのようにすればよいかを考えていきます。

そこでJK-FFの入力値を考えるために、先ほど説明した 「各フリップフロップの現状態・入力」 に対して、 「次状態と、次状態を満たすためのFFの入力(と順序回路の出力)」 を下のように表にしたものを書きます。励起出力表と名付けることにしましょうか。

Step1. 定義した状態を、フリップフロップの状態の値に割り当てる
  • 状態 \( q_0 \) → \( Q = 0 \)
  • 状態 \( q_1 \) → \( Q = 1 \)

※ フリップフロップの数が複数のときは、各状態を複数個のフリップフロップの組み合わせで割り当てます。(割り当ての例: 状態 \( q_0 \) → \( (Q_1,Q_2) = (0,0) \)。)

Step2. 状態遷移表から励起表の次状態・出力を埋める(ここまでD-FFと同じ流れ) Step3. 次状態からFFの入力値を求める

あとは、励起出力表にある残りの空白であるJK-FFの入力値 \( J \), \( K \) を、現状態と次状態の値から次の2つのステップで求めます。

  1. 現状態 \( Q \) が0, 1かを確認し、\( J \), \( K \) のどちらがX (Don't Care)になるかを確認
  2. 現状態 \( Q \) と次状態 \( Q \) の変化を確認し、Xではない方の値を埋める

1) 現状態から、Don't Careが \( J \), \( K \) どちらであるかを確認

まずは現状態 \( Q \) に着目しましょう。ここで、

  • 現状態 \( Q = 0 \) のとき … \( K \) が0だろうが1だろうが \( J \) の値だけで次状態 \( Q \) の値が決まる→ \( K \) の値はどうでもいい
  • 現状態 \( Q = 1 \) のとき … \( J \) が0だろうが1だろうが \( K \) の値だけで次状態 \( Q \) の値が決まる→ \( J \) の値はどうでもいい
  • 現状態 \( Q = 0 \) のとき → \( K \) が X (Don't Care)
  • 現状態 \( Q = 1 \) のとき … \( J \) が X (Don't Care)

2) 現状態と次状態の変化を確認

次に、現状態 \( Q \) と次状態 \( Q \) の変化に着目します。ここで、

現状態 \( Q \) と次状態 \( Q \) が同じとき→ Don't Careではない方のFF入力は0 現状態 \( Q \) と次状態 \( Q \) が異なるとき→ Don't Careではない方のFF入力は1

現状態 \( Q \) = 次状態 \( Q \) → Don't Careではない方のFF入力に0 現状態 \( Q \) ≠ 次状態 \( Q \) → Don't Careではない方のFF入力に1

[2-iii] 励起関数(FFの入力方程式)・順序回路の出力方程式を作る

ここで、\( J \), \( K \) には X (Don't Care) が含まれているので、カルノー図を用いて簡略化することにしましょう [5] JK-FFの場合、\( J \), \( K \) ともにDon't … Continue reading 。ただし \( z \) はカルノー図を書かなくても励起出力表から \( z = Q x \) とすぐにわかる [6] \( z \) については、X (Don't Care) が一切含まれていない上に、1がついている箇所が1箇所なため。 ので、今回はカルノー図は省略します。

カルノー図を書き終わったら、\( J \), \( K \) を簡略化していきましょう。

[2-iv] 順序回路を設計する

[2-iii]で作った励起関数 \( J = x \), \( K = x \) と、出力方程式 \( z = Q \cdot x \) を使って、順序回路を作れば設計完了です!

[例題2] 自動販売機の設計

例題2 自動販売機の設計
  • 100円硬貨のみを受け付け、投入金額が200円になると商品が出てくる。
  • 返却ボタンを搭載する。返却ボタンを押すと、投入された硬貨がすべて返却され、投入金額がリセットされる。
  • 商品が出たかどうか、硬貨が返却されたかどうかをこの回路で判定すること。
  • 1度に2枚以上の硬貨が投入されることは考えなくてよい。
  • 硬貨の投入と、返却ボタンを押す動作が同時に生じることは考えなくてよい。

(i) 入力変数、出力変数は最低何個必要か答えなさい。(ii) 内部状態は最低何個必要か答えなさい。(状態遷移図を書くために定義する必要がある状態は最低何個か?)(iii) 状態遷移図を書きなさい。(iv) 状態遷移表を書きなさい。

(i) 順序回路を作るために必要なフリップフロップは最低何個か答えなさい。(ii) [1](ii)で定義した状態を各JKフリップフロップの状態に対応させ、励起表に順序回路の出力値を追記した表を書きなさい。(Don’t Careの場合は X を書くこと)(iii) 各フリップフロップの入力方程式(励起関数)、および出力の方程式(出力)関数を求めなさい。ただし、カルノー図を用いて最簡形にすること。(iv) 回路図を書きなさい。

[1] 状態遷移図・状態遷移表の設計 (i) 入力変数・出力変数を考える
  • 入力変数(2個)
    • 100円硬貨が投入されたかを表す変数 \( x \)(投入されていない → 0、投入された → 1)
    • 返却ボタンが押されたかを表す変数 \( y \)(押されていない→ 0、押された → 1)
    • 商品が出たかを表す変数 \( z \)(出なかった → 0、出た → 1)
    • 硬貨が返却されるかを表す変数 \( r \)(返却される → 0、返却されない → 1)
    (ii) 内部状態を考える

    そのため、今回は最後に商品が出てから投入された合計金額を100円単位 [7] 100円硬貨以外の硬貨は入ってこないため、合計金額は必ず100円単位となる。 で記憶すればOKですね。(+商品が出る or 返却ボタンが押されると、投入金額の合計は0円にリセットされる)

    • 最後に商品が出てから合計0円投入された状態(硬貨が投入されていない状態)
    • 最後に商品が出てから合計100円投入された状態
    (iii) 状態遷移図の設計
    • 合計0円投入された状態 → \( q_0 \)
    • 合計100円投入された状態 → \( q_1 \)
    • \( x = 0 \), \( y = 0 \) が入力された場合
      • 硬貨も投入されておらず、返却ボタンも押されていないため、合計金額(状態)が変わらない。 → 商品が出ず、硬貨の返却もないためので出力は \( z = 0 \), \( r = 0 \)。(現状態と次状態が同じ)
      • \( q_0 \) : 合計金額が100円アップ → \( q_0 \) から \( q_1 \) に遷移
      • \( q_1 \): 合計が200円になるので、 商品が出てくる。 投入金額も0円にリセットされる。 → \( z = 1 \) を出力 し、次状態は \( q_0 \) に遷移
      • 投入金額が0円 \( q_0 \) のとき→ お金が投入されていないので、お金が返却されない(何も起こらない)。よって、\( r = 0 \) で、状態は \( q_0 \) のまま
      • 投入金額が100円 \( q_1 \) のとき → お金が投入されているため、お金が返却され、投入金額が0円(状態 \( q_0 \))にリセットされる。よって、\( r = 1 \) で、状態は \( q_0 \) に遷移

      [iii] 状態遷移図(入力 / 出力 = \( xy \) / \( zr \))

      ※ 入力・出力がともに複数あるので、変数をどの順番で書くかも明記しましょう。今回は「入力 / 出力 = \( xy \) / \( zr \)」で表すことにします。

      (iv) 状態遷移表の設計 [2-i] 必要なフリップフロップの数を考える [2-ii] 励起表と出力値を合体させた表(励起出力表)を書く
      • 「JKフリップフロップの現状態 \( Q \) ・各入力 \( J \), \( K \)」からどの「JKフリップフロップの次状態 \( Q \)」 に遷移すればよいか([1]で作った状態遷移表を見ながら)
      • 現状態 \( Q \) から次状態 \( Q \) に遷移させるためには、JKフリップフロップの入力 \( J \), \( K \) をどうすればよいか

      の2つを下のように、励起表に出力値 \( z \), \( r \) を含んだ表を書くことで示します。

      Step1. 定義した状態を、フリップフロップの状態の値に割り当てる
      • 状態 \( q_0 \) → \( Q = 0 \)
      • 状態 \( q_1 \) → \( Q = 1 \)

      ※ 割り当て方は自由なので、\( q_0 \) → \( Q = 1 \)、\( q_1 \) → \( Q = 0 \) としてもOKです。

      Step2. 状態遷移表から励起表の次状態・出力を埋める

      ここで、入力が \( (x,y) = (1,1) \) のときは考えなくてよいので、このときは次状態、出力をともにDon't Care(つまりX)とします。

      Step3. 次状態からFFの入力値を求める
      1. 現状態 \( Q \) が0, 1かを確認し、\( J \), \( K \) のどちらがX (Don't Care)になるかを確認
      2. 現状態 \( Q \) と次状態 \( Q \) の変化を確認し、Xではない方の値を埋める

      ※ 硬貨の投入 \( x = 1 \) と、返却ボタンを押す動作 \( y = 1 \) が同時に生じることは考えなくてよいため、\( (x,y) = (1,1) \) のときは、FFの入力 \( J \), \( K \) および出力 \( z \), \( r \) はDon't Careとなります。

      1) 現状態から、Don't Careが \( J \), \( K \) どちらであるかを確認

      • 現状態 \( Q = 0 \) のとき → \( K \) に X (Don't Care)
      • 現状態 \( Q = 1 \) のとき … \( J \) に X (Don't Care)

      2) 現状態と次状態の変化を確認

      現状態 \( Q \) = 次状態 \( Q \) → Don't Careではない方のFF入力に0 現状態 \( Q \) ≠ 次状態 \( Q \) → Don't Careではない方のFF入力に1

      [2-iii] 励起関数(FFの入力方程式)・順序回路の出力方程式を作り、簡略化する

      励起出力表(完成Ver)

      \( J \), \( K \), \( z \), \( r \) ともにDon't Careが含まれていて複雑なので、カルノー図を使って励起関数(FFの入力方程式)\( D \) と順序回路の出力方程式 \( z \), \( r \) を簡略化することを考えましょう。

      [2-iv] 励起関数(FFの入力方程式)・順序回路の出力方程式を作り、簡略化する

      最後に、[2-iii]で作成した励起関数 \( J \), \( K \) 、出力方程式 \( z \), \( r \) の式\[\beginJ & = x \\K & = x + y \\z & = Q x \\ r & = Q y\end\]を用いて、順序回路を作れば設計完了です!

      [練習問題1] 4進アップカウンタの設計

      練習1 カウンタの設計

      (i) 入力変数、出力変数は最低何個必要か答えなさい。(ii) 内部状態は最低何個必要か答えなさい。(状態遷移図を書くために定義する必要がある状態は最低何個か?)(iii) 状態遷移図を書きなさい。(iv) 状態遷移表を書きなさい。

      (i) 順序回路を作るために必要なフリップフロップは最低何個か答えなさい。(ii) [1](ii)で定義した状態を各JKフリップフロップの状態に対応させ、励起表に順序回路の出力値を追記した励起出力表を完成させなさい。(Don’t Careとなる部分には X を書くこと)(iii) 各フリップフロップの入力方程式(励起関数)、および出力の方程式(出力)関数を最簡形で求めなさい。(iv) 回路図を書きなさい。(CLKの配線は省略してよい)

      [1] 状態遷移図・状態遷移表の設計 (i) 入力変数・出力変数を考える
      • 入力変数(1個)
        • 0, 1を入力する変数 \( x \)
        • 1が4回入力されたかを判定する変数 \( z \)(4回入力されていない → 0、4回入力された → 1)
        (ii) 内部状態を考える
        • 最後に1が出力されてから1が0回入力された状態(1が入力されていない状態)
        • 最後に1が出力されてから1が1回入力された状態
        • 最後に1が出力されてから1が2回入力された状態
        • 最後に1が出力されてから1が3回入力された状態

        の4個を定義する必要があります [9] … Continue reading 。

        (iii) 状態遷移図の設計
        • 最後に1が出力されてから1が0回入力された状態: \( q_0 \)
        • 最後に1が出力されてから1が1回入力された状態: \( q_1 \)
        • 最後に1が出力されてから1が2回入力された状態: \( q_2 \)
        • 最後に1が出力されてから1が3回入力された状態: \( q_3 \)
        • 0が入力された場合:1が入力された回数が変化しないため、状態が変わらず、出力は0(現状態と次状態が同じ)
        • 1が入力された場合:
          • \( q_0 \) ~ \( q_2 \): 1の数が1個増えた状態に遷移
          • \( q_3 \): 1の数が5個になるので、 1を出力 し、1の回数を0回にリセット。
          (iv) 状態遷移表の設計 [2-i] 必要なフリップフロップの数を考える

          4つの状態を記憶させるためには、最低でも2ビットの記憶領域が必要ですね。そのため、最低でも 2 つのフリップフロップが必要です。

          [2-ii] 励起表と出力値を合体させた表を書く
          • 「Dフリップフロップの現状態 \( Q \) ・各入力」からどの「Dフリップフロップの次状態 \( Q \)」 に遷移すればよいか([1]で作った状態遷移表を見ながら)
          • 現状態 \( Q \) から次状態 \( Q \) に遷移させるためには、Dフリップフロップの入力をどうすればよいか

          の2つを下のように、励起表に出力値 \( z \)を含んだ状態遷移表で示します。

          Step1. 定義した状態を、フリップフロップの状態の値に割り当てる

          今回、フリップフロップは2つなので、2つのフリップフロップの値 \( Q_1 \), \( Q_2 \) を組み合わせて各状態に割り当てていきましょう。

          ※ JKフリップフロップはDon't Careが多いので、状態をFFの値に割り当てるときに、あまり工夫をする必要はありません [10] \( q_2 \) を \( (Q_1,Q_2) = (1,1) \)、\( q_3 \) を \( (Q_1,Q_2) = (1,0) \) と工夫した場合、\[\beginJ_1 & = Q_2 x \\ K_1 & = \bar x \\J_2 & = … Continue reading 。

          Step2. 状態遷移表から励起表の次状態・出力を埋める Step3. 次状態からFFの入力値を求める
          1. 現状態 \( Q \) が0, 1かを確認し、\( J \), \( K \) のどちらがX (Don't Care)になるかを確認
          2. 現状態 \( Q \) と次状態 \( Q \) の変化を確認し、Xではない方の値を埋める

          1) 現状態から、Don't Careが \( J \), \( K \) どちらであるかを確認

          • 現状態 \( Q_1 = 0 \) のとき → \( K_1 \) に X (Don't Care)
          • 現状態 \( Q_2 = 0 \) のとき → \( K_2 \) に X (Don't Care)
          • 現状態 \( Q_1 = 1 \) のとき … \( J_1 \) に X (Don't Care)
          • 現状態 \( Q_2 = 1 \) のとき … \( J_2 \) に X (Don't Care)

          2) 現状態と次状態の変化を確認

          つぎに、状態 \( Q_1 \), \( Q_2 \) それぞれに対して、

          現状態 = 次状態 → Don't Careではない方のFF入力に0 現状態 ≠ 次状態 → Don't Careではない方のFF入力に1

          [2-iii] 励起関数(FFの入力方程式)・順序回路の出力方程式を作り、簡略化する

          励起出力表(完成Ver)

          まず、出力 \( z \) は1がある箇所が1箇所なのと、Don't Careが存在しないので、カルノー図を書かなくても主加法標準形を求めるだけで、\( z = Q_1 \overline x \) と最簡形を求めることができます。

          しかし、FFの入力 \( J \), \( K \)、および出力 \( z \), \( c \) にDon’t Careが多く含まれるため、下のようにカルノー図を書いて最簡形の励起関数を求めることをおすすめします。

          [2-iv] 励起関数(FFの入力方程式)・順序回路の出力方程式を作り、簡略化する

          最後に、[2-iii]で作成した最簡形の励起関数 \( J \), \( K \)、および出力方程式 \( z \), \( c \) の式\[\beginJ_1 & = Q_2 x \\ K_1 & = Q_2 x \\J_2 & = x \\ K_2 & = x \\ z & = \end\]を用いて、順序回路を作れば設計完了です!

          練習問題2. 自動販売機の設計

          練習2 自動販売機の設計
          • 100円硬貨と 500円硬貨 を受け付け、投入金額が合計200円になると商品が出てくる。
          • 投入金額が200円を超えた場合は、おつりが返って来る。
          • 商品が出たかどうか、おつりが返ってきたかどうかをこの回路で判定すること。
          • 1度に2枚以上の硬貨が投入されることは考えなくてよい。

          (i) 入力変数、出力変数は最低何個必要か答えなさい。(ii) 内部状態は最低何個必要か答えなさい。(状態遷移図を書くために定義する必要がある状態は最低何個か?)(iii) 状態遷移図を書きなさい。(iv) 状態遷移表を書きなさい。

          (i) 順序回路を作るために必要なフリップフロップは最低何個か答えなさい。(ii) [1](ii)で定義した状態を各JKフリップフロップの状態に対応させ、励起表に順序回路の出力値を追記した励起出力表を書きなさい。ただし、Don’t Careとなる部分には X を書くこと。(iii) 各フリップフロップの入力方程式(励起関数)、および出力の方程式(出力)関数を求めなさい。ただし、カルノー図で最簡形にすること。(iv) 回路図を書きなさい。(CLKの配線は省略してよい。)

          [1] 状態遷移図・状態遷移表の設計 (i) 入力変数・出力変数を考える
          • 入力変数(2個)
            • 100円硬貨が投入されたかを表す変数 \( x \)(投入されていない → 0、投入された → 1)
            • 500円硬貨が投入されたかを表す変数 \( y \)(投入されていない → 0、投入された → 1)
            • 商品が出たかを表す変数 \( z \)(出なかった → 0、出た → 1)
            • おつりが出たかを表す変数 \( c \)(出なかった → 0、出た → 1)
            (ii) 内部状態を考える
            • 最後に商品が出てから合計0円投入された状態(硬貨が投入されていない状態)
            • 最後に商品が出てから合計100円投入された状態
            (iii) 状態遷移図を考える
            • 合計投入金額が0円: \( q_0 \)
            • 合計投入金額が100円: \( q_1 \)
            • \( x = 0 \), \( y = 0 \) が入力された場合(硬貨が投入されなかった場合)
              • 投入が入力されていないため、合計金額(状態)が変わらない。 → 商品もおつりも出ないので出力は \( z = 0 \), \( c = 0 \)。(現状態と次状態が同じ)
              • \( q_0 \) : 合計金額が100円に(\( q_0 \) から \( q_1 に遷移)
              • \( q_1 \): 合計が200円になるので、 商品が出てくる。 投入金額が0円にリセットされる。 → \( z = 1 \) を出力 し、次状態は \( q_0 \) に遷移
              • 500円硬貨が投入されるため、現在の合計金額(状態)に関わらず必ず合計金額300円を超えるし、おつりも発生する。 → どんな場合でも出力は \( z = 1 \), \( c = 1 \) となり、合計金額は0円にリセットされる(次状態は \( q_0 \) となる)。
              (iv) 状態遷移表を考える [2-i] 必要なフリップフロップの数を考える [2-ii] 励起表と出力値を合体させた表を書く
              • 「JKフリップフロップの現状態 \( Q \) ・各入力」からどの「JKフリップフロップの次状態 \( Q \)」 に遷移すればよいか([1]で作った状態遷移表を見ながら)
              • 現状態 \( Q \) から次状態 \( Q \) に遷移させるためには、JKフリップフロップの入力をどうすればよいか

              の2つを下のように、励起表に出力値 \( z \), \( c \) を含んだ遷移出力表の空欄を埋めていくことで示します。

              Step1. 定義した状態を、フリップフロップの状態の値に割り当てる
              • 状態 \( q_0 \) → \( Q = 0 \)
              • 状態 \( q_1 \) → \( Q = 1 \)

              ※ 割り当て方は自由なので、\( q_0 \) → \( Q = 1 \)、\( q_1 \) → \( Q = 0 \) としてもOKです。

              Step2. 状態遷移表から励起表の次状態・出力を埋める Step3. 次状態からFFの入力値を求める
              1. 現状態 \( Q \) が0, 1かを確認し、\( J \), \( K \) のどちらがX (Don't Care)になるかを確認
              2. 現状態 \( Q \) と次状態 \( Q \) の変化を確認し、Xではない方の値を埋める

              ※ 100円硬貨の投入 \( x = 1 \) と、500円硬貨の投入 \( y = 1 \) が同時に生じることは考えなくてよいため、\( (x,y) = (1,1) \) のときは、FFの入力 \( J \), \( K \) および出力 \( z \), \( r \) はDon't Careとなります。

              1) 現状態から、Don't Careが \( J \), \( K \) どちらであるかを確認

              • 現状態 \( Q = 0 \) のとき → \( K \) に X (Don't Care)
              • 現状態 \( Q = 1 \) のとき … \( J \) に X (Don't Care)

              2) 現状態と次状態の変化を確認

              現状態 \( Q \) = 次状態 \( Q \) → Don't Careではない方のFF入力に0 現状態 \( Q \) ≠ 次状態 \( Q \) → Don't Careではない方のFF入力に1

              [2-iii] 励起関数(FFの入力方程式)・順序回路の出力方程式を作り、簡略化する

              励起出力表(完成Ver)

              今回はFFの入力 \( J \), \( K \)、および出力 \( z \), \( c \) にDon’t Careが多く含まれるため、下のようにカルノー図を書いて最簡形の励起関数を求めることをおすすめします。

              [2-iv] 励起関数(FFの入力方程式)・順序回路の出力方程式を作り、簡略化する

              最後に、[2-iii]で作成した最簡形の励起関数 \( J \), \( K \)、および出力方程式 \( z \), \( c \) の式\[\beginJ & = x \\ K & = x + y \\z & = y + Qx \\ c & = y\end\]を用いて、順序回路を作れば設計完了です!

              [まとめ] JKフリップフロップを用いた順序回路の設計手順

              JK-FFによる順序回路の設計手順
              1. 必要な入力変数・出力変数は何かを考える。
              2. 必要な内部状態(状態)を考え、\( q_0 \), \( q_1 \) などの名前を付ける。
              3. 状態遷移図・状態遷移表を書く(必要があればここで状態の最小化を行う)
              1. 内部状態の数から、Dフリップフロップが何個必要かを考える。(内部状態が \( a \) 個の状態のとき、必要なフリップフロップの数は \( 2^ < a \leqq 2^n \) を満たす \( n \) と等しい)
              2. [1]で作った内部状態をDフリップフロップに割り当て、下の1-3の手順に従い、「励起表に出力値を加えた表」を作成する。
                1. 状態遷移表から励起表の次状態・出力を埋める
                2. 現状態を確認し、\( J \), \( K \) のどちらが X (Don't Care) かを確認する
                3. 現状態と次状態が等しいか異なるかを確認し、\( J \), \( K \) の X (Don't Care) ではない方の値を埋める
                1. 「励起表に出力値を加えた表」から、励起関数(FFの入力方程式)と順序回路の出力方程式を作り、カルノー図で簡略化する。
                2. 励起関数(FFの入力方程式)と順序回路の出力方程式から、順序回路を実際に設計する。
                注釈 ↑ 1 入力 \( J \), \( K \) および現状態 \( Q_n \) から次状態 \( Q_ \) がどのようになるかを表にしたもの ↑ 2 「それぞれのフリップフロップの現状態の各入力」対する「フリップフロップの次状態、フリップフロップの入力値、順序回路の出力値」を示した表。 ↑ 3 偶数に1を足すと必ず奇数に、奇数に1を足すと偶数になるため、具体的に1が何回入力されたかをカウントする必要はない。 ↑ 4 1個のフリップフロップで2つの状態、2個のフリップフロップで4つの状態、3個のフリップフロップで8つの状態、…、\( n \) 個のフリップフロップで \( 2^n \) 状態を記憶できることを思い出しましょう。また、\( a \) 個の状態を記憶するために必要なフリップフロップの数は、\[2^ < a \leqq 2^n\]を満たす \( n \) と等しくなるので、この不等式を解くことで求めてもOKですね。 ↑ 5 JK-FFの場合、\( J \), \( K \) ともにDon't Careが必ず含まれるので、励起出力表を見ながらカルノー図を作成し、入力方程式を簡略化する方法を強くおすすめします。 ↑ 6 \( z \) については、X (Don't Care) が一切含まれていない上に、1がついている箇所が1箇所なため。 ↑ 7 100円硬貨以外の硬貨は入ってこないため、合計金額は必ず100円単位となる。 ↑ 8 合計200円投入すると商品が出てくるため、「最後に商品が出てから合計300円投入された状態」を記憶する必要はありません。 ↑ 9 「最後に1が出力されてから1が3回入力された状態」を記憶している際に1を入力すると、1の入力が4回となり、出力が1になる。そのため、最後に1が出力されてから1が入力された回数は0に戻る。そのため、「最後に1が出力されてから1が4回入力された状態」を記憶する必要はない(このときは「1が0回入力された状態」を記憶すればOK) ↑ 10 \( q_2 \) を \( (Q_1,Q_2) = (1,1) \)、\( q_3 \) を \( (Q_1,Q_2) = (1,0) \) と工夫した場合、\[\beginJ_1 & = Q_2 x \\ K_1 & = \bar x \\J_2 & = \textcolor x \\ K_2 & = \textcolor x \end\]となります。工夫せずに \( q_2 \) を \( (Q_1,Q_2) = (1,1) \)、\( q_3 \) を \( (Q_1,Q_2) = (1,0) \) とした場合\[\beginJ_1 & = Q_2 x \\ K_1 & = Q_2 x \\J_2 & = x \\ K_2 & = x \end\]よりもなぜか、工夫して割り当てた方が式が少し複雑な形となります。 公開日: 2022年7月20日 更新日: 2024年5月14日 この記事を書いた人 コメント一覧 コメントはありません。 関連記事 基本情報対策 うさぎでもわかるセキュリティ 前編 うさぎでもわかる画像処理 Part02 トーンカーブと画像処理 [Python・MATLABコード付き] うさぎでもわかるC言語のポインタ講座 うさぎでもわかる2分探索木 前編 2分探索木の基礎(表現・追加・削除) 【基本情報】うさぎでもわかるソフトウェア工学 Part03 プロジェクトマネジメントとPMBOK うさぎでもわかる計算機システム Part09 組み合わせ回路・順序回路 うさぎでもわかる計算機システム(基本情報対応) Part18 プロセスの3状態・スケジューリングアルゴリズム うさぎでもわかるアルゴリズム 動的計画法 うさぎでもわかる論理回路 Dフリップフロップを用いた順序回路の設計 うさぎでもわかる論理回路 順序回路の状態数最小化

                カテゴリー

                各種便利ツール・問い合わせ
                • 【完全無料】離散数学演習ツール・計算機まとめ
                  • 【離散数学】ハッセ図の述語論理(∀・∃)真偽判定ツール
                  • 【離散数学】べき集合 2^A・P(A) 自動計算&全列挙ツール
                  • 【離散数学】上界/下界・最大元/最小元・極大元/極小元・上限(最小上界)/下限(最大下界) 判定ツール
                  • 【離散数学】真理値表 自動作成ツール(途中式あり)
                  • 【離散数学】集合の「∈・⊆」真偽チェッカー(答え合わせ用)
                  • 【離散数学テスト対策】真理値表の穴埋めガチ演習ツール
                  • 【離散数学テスト対策】集合の「∈・⊆」ガチ演習! 弱点分析つき○×ドリル
                  【真理値表マスター】うさぎでもわかる離散数学 第2羽 ブール代数と論理演算 うさぎでもわかる離散数学 第5羽 順序関係とハッセ図・重要な8つの性質 【新入生必見】ここだけは押さえよう! 大学生活完全ガイド 10日で完成! うさぎでもわかる統計的な推測 8日目 イカサマを見抜け! 仮説検定のいろは うさぎでもわかる確率・統計 重回帰分析 【統計学】出口調査の仕組みを理解するためのいろは

                  目次

                  1. [復習] JKフリップフロップとは
                    1. (1) JKフリップとは
                    2. (2) JKフリップフロップの励起表
                    1. [1] 状態遷移図・状態遷移表の設計
                      1. (i) 入力変数・出力変数を考える
                      2. (ii) 内部状態を考える
                      3. (iii) 状態遷移図を考える
                      4. (iv) 状態遷移表
                      1. Step1. 定義した状態を、フリップフロップの状態の値に割り当てる
                      2. Step2. 状態遷移表から励起表の次状態・出力を埋める(ここまでD-FFと同じ流れ)
                      3. Step3. 次状態からFFの入力値を求める
                      1. [1] 状態遷移図・状態遷移表の設計
                        1. (i) 入力変数・出力変数を考える
                        2. (ii) 内部状態を考える
                        3. (iii) 状態遷移図の設計
                        4. (iv) 状態遷移表の設計
                        1. Step1. 定義した状態を、フリップフロップの状態の値に割り当てる
                        2. Step2. 状態遷移表から励起表の次状態・出力を埋める
                        3. Step3. 次状態からFFの入力値を求める
                        1. [1] 状態遷移図・状態遷移表の設計
                          1. (i) 入力変数・出力変数を考える
                          2. (ii) 内部状態を考える
                          3. (iii) 状態遷移図の設計
                          4. (iv) 状態遷移表の設計
                          1. Step1. 定義した状態を、フリップフロップの状態の値に割り当てる
                          2. Step2. 状態遷移表から励起表の次状態・出力を埋める
                          3. Step3. 次状態からFFの入力値を求める
                          1. [1] 状態遷移図・状態遷移表の設計
                            1. (i) 入力変数・出力変数を考える
                            2. (ii) 内部状態を考える
                            3. (iii) 状態遷移図を考える
                            4. (iv) 状態遷移表を考える
                            1. Step1. 定義した状態を、フリップフロップの状態の値に割り当てる
                            2. Step2. 状態遷移表から励起表の次状態・出力を埋める
                            3. Step3. 次状態からFFの入力値を求める

                             工業大学生ももやまのうさぎ塾 (Momousagi Academy)

                            コンピュータグラフィックス コンピュータビジョン
                            1. [復習] JKフリップフロップとは
                              1. (1) JKフリップとは
                              2. (2) JKフリップフロップの励起表
                              1. [1] 状態遷移図・状態遷移表の設計
                                1. (i) 入力変数・出力変数を考える
                                2. (ii) 内部状態を考える
                                3. (iii) 状態遷移図を考える
                                4. (iv) 状態遷移表
                                1. Step1. 定義した状態を、フリップフロップの状態の値に割り当てる
                                2. Step2. 状態遷移表から励起表の次状態・出力を埋める(ここまでD-FFと同じ流れ)
                                3. Step3. 次状態からFFの入力値を求める
                                1. [1] 状態遷移図・状態遷移表の設計
                                  1. (i) 入力変数・出力変数を考える
                                  2. (ii) 内部状態を考える
                                  3. (iii) 状態遷移図の設計
                                  4. (iv) 状態遷移表の設計
                                  1. Step1. 定義した状態を、フリップフロップの状態の値に割り当てる
                                  2. Step2. 状態遷移表から励起表の次状態・出力を埋める
                                  3. Step3. 次状態からFFの入力値を求める
                                  1. [1] 状態遷移図・状態遷移表の設計
                                    1. (i) 入力変数・出力変数を考える
                                    2. (ii) 内部状態を考える
                                    3. (iii) 状態遷移図の設計
                                    4. (iv) 状態遷移表の設計
                                    1. Step1. 定義した状態を、フリップフロップの状態の値に割り当てる
                                    2. Step2. 状態遷移表から励起表の次状態・出力を埋める
                                    3. Step3. 次状態からFFの入力値を求める
                                    1. [1] 状態遷移図・状態遷移表の設計
                                      1. (i) 入力変数・出力変数を考える
                                      2. (ii) 内部状態を考える
                                      3. (iii) 状態遷移図を考える
                                      4. (iv) 状態遷移表を考える
                                      1. Step1. 定義した状態を、フリップフロップの状態の値に割り当てる
                                      2. Step2. 状態遷移表から励起表の次状態・出力を埋める
                                      3. Step3. 次状態からFFの入力値を求める