C++
 Computer >> コンピューター >  >> プログラミング >> C++

フリップフロップの種類と相互変換の方法を徹底解説

フリップフロップ(flip-flop)は、順序論理回路の基本要素となるデジタル回路です。フリップフロップにはいくつかの種類があり、本記事では代表的な4種類の特徴と動作、さらに「あるフリップフロップから別のフリップフロップへ変換する」ための具体的な手順を解説します。

フリップフロップには主に以下の4種類があります。

  • SRフリップフロップ
  • Dフリップフロップ
  • JKフリップフロップ
  • Tフリップフロップ

SRフリップフロップとは

SRフリップフロップは、クロック信号の立ち上がりエッジまたは立ち下がりエッジでのみ動作します。一方、SRラッチはイネーブル信号によって動作する点が異なります。SRフリップフロップの回路図を以下に示します。

フリップフロップの種類と相互変換の方法を徹底解説

この回路は2つの入力S・Rと、2つの出力Q(t)・Q(t)'を持ちます。基本的な動作はSRラッチと似ていますが、イネーブル信号の代わりにクロック信号の有効な遷移(立ち上がり)が加わったときだけ出力が更新される点が大きな違いです。

フリップフロップの種類と相互変換の方法を徹底解説

Dフリップフロップとは

Dフリップフロップも、クロック信号の立ち上がりまたは立ち下がりエッジでのみ動作します。Dラッチがイネーブル信号で動作するのに対し、Dフリップフロップの出力はクロックの有効な遷移時以外では入力Dの変化に影響されません。回路図は以下の通りです。

フリップフロップの種類と相互変換の方法を徹底解説

この回路は単一の入力Dと、2つの出力Q(t)・Q(t)'を持ちます。動作の考え方はDラッチとほぼ同じですが、クロックの立ち上がり時にのみ出力へ反映される点が異なります。

フリップフロップの種類と相互変換の方法を徹底解説

JKフリップフロップとは

JKフリップフロップは、SRフリップフロップを改良したものです。クロック信号の立ち上がりまたは立ち下がりエッジでのみ動作します。回路図を以下に示します。

フリップフロップの種類と相互変換の方法を徹底解説

この回路は2つの入力J・Kと、2つの出力Q(t)・Q(t)'を持ちます。動作はSRフリップフロップと似ていますが、SRフリップフロップの入力を S = JQ(t)'R = KQ(t) と置き換えて考えることで、入力の4通りの組み合わせすべてを有効に扱えるようになっています(SRフリップフロップでは禁止されていた S=R=1 の状態も許容されます)。

フリップフロップの種類と相互変換の方法を徹底解説

Tフリップフロップとは

Tフリップフロップは、JKフリップフロップを簡略化したものです。JKフリップフロップの2つの入力に同一の入力「T」を接続することで実現できます。クロック信号の立ち上がりまたは立ち下がりエッジでのみ動作します。回路図は以下の通りです。

フリップフロップの種類と相互変換の方法を徹底解説

この回路は単一の入力Tと、2つの出力Q(t)・Q(t)'を持ちます。動作はJKフリップフロップと同一で、J = T、K = T として考えることで、入力の2通りの組み合わせのみを利用します。そのため、JとKが互いに補数となる残りの2通りの組み合わせはTフリップフロップでは排除されます。

フリップフロップの種類と相互変換の方法を徹底解説

フリップフロップの相互変換

続いて、あるフリップフロップを別の種類のフリップフロップとして動作させる「変換」の方法を見ていきます。まずは、すべてのフリップフロップの励磁表(励起表)を確認しておきましょう。

フリップフロップの種類と相互変換の方法を徹底解説

SRフリップフロップ → Dフリップフロップへの変換

ここでは、手元にあるフリップフロップがSRフリップフロップ、目的のフリップフロップがDフリップフロップです。まず、Dフリップフロップの特性表を考えます。

フリップフロップの種類と相互変換の方法を徹底解説

SRフリップフロップには入力S・Rがあるため、現在状態と次の状態の各組み合わせに対して、SRフリップフロップの励磁値を書き出します。次の表は、Dフリップフロップの特性表にSRフリップフロップの励磁入力を併記したものです。

フリップフロップの種類と相互変換の方法を徹底解説

各入力の簡略化された論理式を求めるために、2変数のカルノー図(Kマップ)を使用できます。SおよびRのKマップは以下の通りです。

フリップフロップの種類と相互変換の方法を徹底解説

簡略化の結果、S = D、R = D' が得られました。Dフリップフロップとして動作させる回路図を以下に示します。

フリップフロップの種類と相互変換の方法を徹底解説

この回路はSRフリップフロップとインバータ(NOTゲート)で構成されています。インバータが入力Dの補数を生成するため、回路全体としては単一の入力Dと、2つの出力Q(t)・Q(t)'を持つことになります。これがまさにDフリップフロップです。同様の手順で他の変換も行えます。

Dフリップフロップ → Tフリップフロップへの変換

ここでは、手元にあるフリップフロップがDフリップフロップ、目的のフリップフロップがTフリップフロップです。まず、Tフリップフロップの特性表を考えます。

フリップフロップの種類と相互変換の方法を徹底解説

Dフリップフロップの入力はDのみなので、現在状態と次の状態の各組み合わせに対するDフリップフロップの励磁値を書き出します。次の表は、Tフリップフロップの特性表にDフリップフロップの励磁入力を併記したものです。

フリップフロップの種類と相互変換の方法を徹底解説

この表から、Dのブール関数を直接導き出せます。つまり、Dフリップフロップに加えて2入力の排他的論理和(XOR)ゲートが1つ必要です。Tフリップフロップとして動作させる回路図を以下に示します。

フリップフロップの種類と相互変換の方法を徹底解説

この回路はDフリップフロップとXORゲートで構成されています。XORゲートがTとQ(t)の排他的論理和を出力するため、回路全体としては単一の入力Tと、2つの出力Q(t)・Q(t)'を持つTフリップフロップとなります。

JKフリップフロップ → Tフリップフロップへの変換

ここでは、手元にあるフリップフロップがJKフリップフロップ、目的のフリップフロップがTフリップフロップです。まず、Tフリップフロップの特性表を考えます。

フリップフロップの種類と相互変換の方法を徹底解説

JKフリップフロップには入力J・Kがあるため、現在状態と次の状態の各組み合わせに対するJKフリップフロップの励磁値を書き出します。次の表は、Tフリップフロップの特性表にJKフリップフロップの励磁入力を併記したものです。

フリップフロップの種類と相互変換の方法を徹底解説

2つの入力の簡略化された論理式を求めるために、2変数のKマップを使用します。JおよびKのKマップは以下の通りです。

フリップフロップの種類と相互変換の方法を徹底解説

簡略化の結果、J = T、K = T が得られました。Tフリップフロップとして動作させる回路図を以下に示します。

フリップフロップの種類と相互変換の方法を徹底解説

この回路はJKフリップフロップのみで構成され、追加のゲートは一切不要です。同じ入力TをJとKの両方に接続するだけでよく、回路全体としては単一の入力Tと、2つの出力Q(t)・Q(t)'を持つTフリップフロップになります。

Tフリップフロップ → Dフリップフロップへの変換

ここでは、手元にあるフリップフロップがTフリップフロップ、目的のフリップフロップがDフリップフロップです。Dフリップフロップの特性表をもとに、現在状態と次の状態の各組み合わせに対するTフリップフロップの励磁値を書き出します。次の表は、Dフリップフロップの特性表にTフリップフロップの励磁入力を併記したものです。

フリップフロップの種類と相互変換の方法を徹底解説

この場合も、Tフリップフロップに加えて2入力のXORゲートが1つ必要です。Dフリップフロップとして動作させる回路図を以下に示します。

フリップフロップの種類と相互変換の方法を徹底解説

この回路はTフリップフロップとXORゲートで構成されています。XORゲートがDとQ(t)の排他的論理和を出力するため、回路全体としては単一の入力Dと、2つの出力Q(t)・Q(t)'を持つDフリップフロップとなります。

  1. C++の変数とは?基本の変数宣言と主なデータ型をわかりやすく解説

    変数(へんすう)とは、プログラムが操作できる「名前付きの記憶領域」のことです。C++では、各変数に必ず特定の「型」が割り当てられます。この型によって、次の3つの要素が決まります。変数のメモリ上のサイズと配置そのメモリに格納できる値の範囲その変数に適用できる演算(操作)の種類最もシンプルな変数の例を見てみましょう。int my_val = 5;この例では、int型(整数型)の変数 my_val を宣言し、値として 5 を代入しています。変数の宣言方法C++で変数を定義する一般的な書式は次のとおりです。type variable_name;宣言と同時に初期化したい場合は、以下のように記述します。t

  2. Pythonのデータ型と型変換をわかりやすく解説

    この記事では、Pythonにおける主要なデータ型の種類と、それぞれの使い方、そしてデータ型同士を変換する方法について詳しく解説します。 Pythonの組み込みデータ型一覧 Pythonでは変数を作成・宣言する際に、さまざまなデータ型を持たせることができます。Pythonには以下のような組み込みデータ型が用意されています。 str(文字列) int、float、complex(数値) list、tuple(シーケンス) dict(辞書) set(集合) bool(ブール値) bytes、bytearray(バイナリ) それでは、各データ型の特徴と作成方法を順番に見ていきましょう。 文字列型: