コンピュータ・アーキテクチャ 第4回


フリップフロップ

「2つの状態を持ち、入力に応じてそのいずれかの状態をとるように 動作して、1ビットの状態を記憶するようになった」回路を フリップフロップ(flip-flop)と呼びます。

「過去の入力信号によって決まる状態を有し、入力信号と状態によって 次の状態が決まる」ような回路のことを一般に「順序回路」と呼びますが、 フリップフロップは順序回路を形成するための基礎となるものです。

非同期SRフリップフロップ

動作状態入力出力
$S$$R$$Q$$\bar{Q}$
保持 $0$$0$変化なし
セット $1$$0$$1$$0$
リセット $0$$1$ $0$$1$
禁止 $1$$1$ $0$$0$

NOR回路を2個「たすきがけ」に接続した回路を考えます。 この回路はフリップフロップの最も基本的なもので、 SR(セット・リセット)フリップフロップと呼ばれます。 上記のような記号で示されます。

例として、$Q=1$, $\overline{Q}=0$ の場合を考えましょう。 このとき $S=0$, $R=1$ となるとつじつまがあうように 状態が遷移して結局 $Q=0$, $\overline{Q}=1$ となります。


別の例として $Q=0$, $\overline{Q}=1$ の場合を考えましょう。 このとき $S=0$, $R=1$ となるとつじつまがあうように 状態が遷移して結局やはり $Q=0$, $\overline{Q}=1$ となります。


このようにすべての場合を考えると、結局上の真理値表が得られます。

フリップフロップで入力によってその状態が変化することを トリガ(trigger)といいます。上の回路のように入力が与えられると ただちに出力が変化するような回路は「非同期式 (asynchronous) の フリップフロップ」と呼ばれています。

同様な回路は NAND回路を使っても作ることができます。 ただし、この場合は $S$ と $R$ の入力は負論理を与えることに 注意して下さい。 (一般的には、低い電圧を0、高い電圧を1として設定しますが、 これを逆にして 低い電圧を1、高い電圧を0とした設定も 考えられます。前者を「正論理」、後者を「負論理」と呼びます。)


ハザード

たとえば $X$ と $Y$ なる2入力を持つ組合せ回路 $(X + \overline{Y})(\overline{X} + \overline{Y})$を考えましょう。
入力が$(X,Y)=(1,1)$から$(X,Y)=(0,1)$に変化したとすると、 もし回路が同一の速度で動作するならば、 入力変化の前後で出力は$0$のまま変化しません。 しかし、もし$(X + \overline{Y})$の回路に遅延時間が生じると、 この回路の出力には一時的に $1$ が現れてしまいます。 このように回路の動作時間の差によって出力に過渡的な信号が 現れる現象はハザード(hazard)と呼ばれています。

もしフリップフロップの入力にハザードが現れると、不用意に フリップフロップのセット、リセットが行なわれ動作がおかしく なってしまいます。 このような問題を避けるためには、「クロック」信号を使います。 すなわち、クロックがonのときにだけフリップフロップが 入力を受け付けるようにしておきます。 そして、不都合な信号が生じないときにだけクロックをonにして、 フリップフロップに入力を与え、フリップフロップの状態を 変更するわけです (→同期式フリップフロップ、synchronous flip-flop)。


特性表と励起表

フリップフロップのように、「過去の入力信号によって決まる状態を有し、 入力信号と状態によって次の状態が決まる」ような回路は、一般に 「順序回路」と呼ばれます。 順序機械の性質は特性表(characteristic table)と 励起表 (exitation table)によって表すことができます。

特性表は、クロックが与えられたときの $S$, $R$入力にしたがって、 その直後のフリップフロップの状態がどのようになるかを示しています。 励起表は、 $Q_n$ → $Q_{n+1}$ への変化を生じるために、 クロックの与えられる時点において$S$, $R$の入力に 何を与えればよいかを示しています。 ただし、$\phi$は "dont' care" で、0でも1でもどちらでもよいことを 表します。

$S$$R$$Q_{n+1}$
$0$$0$$Q_n$
$0$$1$$0$
$1$$0$$1$
$1$$1$定義されず
$Q_n$$\rightarrow$$Q_{n+1}$$S$$R$
$0$$0$$0$$\phi$
$0$$1$$1$$0$
$1$$0$$0$$1$
$1$$1$$\phi$$0$
記号特性表励起表


いろいろなフリップフロップ


Dフリップフロップ

$D$$Q_{n+1}$
$0$$0$
$1$$1$
$Q_n$$\rightarrow$$Q_{n+1}$$D$
$0$$0$$0$
$0$$1$$1$
$1$$0$$0$
$1$$1$$1$
記号特性表励起表Dフリップフロップの動作

Dフリップフロップではクロックパルスの生じた時点での入力Dによって 出力が決まります。つまり、入力の変化の直後に生ずるクロックまでの遅延を 作ることになります。 このため遅延(delay)フリップフロップ (Dフリップフロップ) と呼ばれます。

この回路は計算機の中で、データの転送のための一時記憶によく 用いられます。 信号をD入力に与え、適当なタイミングでクロックパルスを与えると、 その後入力信号が変化してもDフリップフロップの出力にデータが 保存されます。 そのためDフリップフロップをラッチ (latch; かけがね)と 呼ぶこともあります。

Tフリップフロップ

入力Tが "1"のときには、クロック毎に状態を反転します。 この回路の入力はトグル (toggle)と呼ばれます。

$T$$Q_{n+1}$
$0$$Q_n$
$1$$\overline{Q_n}$
$Q_n$$\rightarrow$$Q_{n+1}$$T$
$0$$0$$0$
$0$$1$$1$
$1$$0$$1$
$1$$1$$0$
記号特性表励起表Tフリップフロップの動作

JKフリップフロップ

JKフリップフロップはSRフリップフロップに似ていますが、 J、Kの入力がともに "1" のときに出力が反転するように 定められている点が異なります。 (入力がともに1のとき次の状態が不定になるという) SRフリップフロップの欠点を除いたものといえます。

$J$$K$$Q_{n+1}$
$0$$0$$Q_n$
$0$$1$$0$
$1$$0$$1$
$1$$1$$\overline{Q_n}$
$Q_n$$\rightarrow$$Q_{n+1}$$J$$K$
$0$$0$$0$$\phi$
$0$$1$$1$$\phi$
$1$$0$$\phi$$1$
$1$$1$$\phi$$0$
記号特性表励起表

上記はクロックが 0 → 1 の変化の時(立ち上り時)に 状態がかわるJKフリップフロップの記号です。 クロックが 0 → 1 の変化の時(立ち下がり時)に状態が変化する場合は、 クロック入力の前に○をつけて書きます。


同期式フリップフロップの回路

同期式SRフリップフロップ同期式Dフリップフロップ
同期式Tフリップフロップ