記憶素子
3.4 記憶素子(フリップフロップ)
前述のように順序回路を構成するには記憶素子が必要となるが,通常はフリップフロップ(FFと略記される)と呼ばれる記憶素子が用いられる.最初に記憶素子の概念を最も簡単なモデルから説明する.NOT回路を2個直列に接続し,出力を入力に返したものを図3.5に示す.何らか手段により1個目のNOT回路の入力を0としたなら,2個目のNOT回路は1となり, その出力は0,これを入力に返せば回路は常に0を出力し続けることになる. もし,1個目のNOT回路の入力を1とすることができたら,同様の考えで1を出力し続けることができる.つまり,0または1の状態を記憶することができることになる.しかし,このままでは記憶状態を意図的に変化させることはできない.
図3.5 記憶回路の原理図
実際に記憶状態を変化させるための入力を備えた回路例を図3.6(a)に示す.これはR-Sフリップフロップと呼ばれる回路であり,図3.6(b)のように表現される.入力端子SとRを持ち, Sをセット端子,Rをリセット端子という.出力端子はQで,その反転出力も備えている. 入力と出力の関係は表1.15に示すように,セット端子のみに1が加えられたとき,出力がセットされ1に,リセット端子のみに1が加えられたとき,出力がリセットされ0になる.両方の入力端子が0のとき,値は不変である.両方の入力端子に1が加えたれたときは値が確定しないため,無定義とされ,このような入力は避けなければならない.
図3.6 R-Sフリップフロップ
表3.3 R-Sフリップフロップ
同期回路に用いるフリップフロップは同期信号入力も備えている. クロック端子付きR-Sフリップフロップの回路例,回路記号を図3.7に示す.図3.6のセット,リセット端子の入力のNOT回路をクロック端子とのNAND回路に交換することにより,クロック端子がよってセットまたはリセット端子入力が有効となる.
図3.7 クロック端子付きR-Sフリップフロップ
また,図3.8はクロック端子付きR-Sフリップフロップに対する入出力の時間的な変化の一例を示したものである. このような時間経過を示す図をタイムチャートという.セットまたはリセット端子の入力が確定した後,クロック信号の入力により状態の変化が起こることがわかる.実際に使用されるフリップフロップは,動作を確実にし,クロック信号の立ち上り,または立ち下りのみを検出するなどのためにより複雑な回路構成となっている.
図3.8 クロック端子付きR-Sフリップフロップのタイムチャート
その他,よく使われるフリップフロップとして,J-Kフリップフロップ,Tフリップフロップ,Dフリップフロップなどがある. J-Kフリップフロップは図3.9(a)に示すように,R-Sフリップフロップと同様にセット端子とリセット端子に相当するJ,K端子を持つが,両入力端子に1が与えられたときは出力を反転させるように作られている.入出力の関係を表3.4に示す.
図3.9 J-Kフリップフロップ,Tフリップフロップ,Dフリップフロップ
Tフリップフロップは図3.9(b)のように入力端子(T)は1つだけで,この端子に1が加えられると出力が反転する.入出力の関係を表3.5に示す. Dフリップフロップは図3.9(c)に示すように1つの入力端子(D)を持ち,これに加えられる0か1の入力をそのまま記憶する回路である.これは入力信号を遅延させることにも相当する.入出力の関係は表3.6に示す通りである.
ESP32 Wifi Bluetooth開発ボード |
Arduino Nano Every |
Raspberry Pi pico |
FPGA XILINX Artix-7 |