RSフリップフロップの論理式

logic

RSフリップフロップの真理値表(表1)から、等価な論理式を求めます。表1の\(Q_{PREV}\)は、現在のRSフリップフロップの値を表します。また、\(Q\)はR,Sと\(Q_{PREV}\)の値から決定される次の値を表します。

真理値表とカルノー図から論理式を作成する題材としてRSフリップフロップを取り上げていますが、実際の論理回路設計で基本ゲートの組み合わせによってRSフリップフロップを実現することはまずありません。

表1: RSフリップフロップの真理値表
入力出力
SR\(Q_{PREV}\)Q
0000
0011
0101
0110
1001
1011
11禁止禁止
11禁止禁止

表1から主加法標準形で直接論理式を作成することもできますが、論理式を最適化できる可能性を検討するために、まずカルノー図を作成します。表1からQについて作成したカルノー図が図1です。セル中の値がQを表します。

RSフリップフロップのカルノー図
図1: RSフリップフロップのカルノー図

図1のg1とg2について、それぞれ最適化を行ます。まず、g1で囲んだ部分の論理式が(1)です。\(Q_{PREV}\)はブール代数の相殺則を適用して省略できます。

$$g1 = S \cdot \overline{R} \cdot Q_{PREV} + S \cdot \overline{R} \cdot \overline{Q_{PREV}} = S \cdot  \overline{R} (Q_{PREV} + \overline{Q_{PREV}}) = S \cdot \overline{R}
\ \ \ \ \ \text{(1)}$$

次に、g2で囲んだ部分の論理式が(2)です。Sはブール代数の相殺則を適用して省略できます。

$$g2 = S \cdot \overline{R} \cdot Q_{PREV} + \overline{S} \cdot \overline{R} \cdot Q_{PREV} = \overline{R} \cdot Q_{PREV}(S + \overline{S} ) = \overline{R} \cdot Q_{PREV} \ \ \ \ \ \text{(2)}$$

よって、RSフリップフロップの論理式は、主加法標準形で(3)になります。

$$Q = g1 + g2 = S \cdot \overline{R} + \overline{R} \cdot Q_{PREV} \ \ \ \ \ \text{(3)}$$

Verilogシミュレーションで動作を確認

(3)の論理式を記述したRSフリップフロップのモジュールを作成し、RとSの値を10ナノ秒単位で切り替えてQの値を確認します。シミュレーションではQの初期値を0としています。

`timescale 1ns/1ns
// RSフリップフロップのモジュール
module rs_ff (
  input S,
  input R,
  output reg Q,
  output Qn
);
 
assign Qn = ~Q;
 
initial Q = 0;  //初期値は0
 
always @*
  Q = (S & ~R) | (Q & ~R);  // Qの論理式
 
 
endmodule
// シミュレーション用モジュール
module top;
  reg S,R;
  wire Q,Qn;
  rs_ff u_rs_ff(.S(S),.R(R),.Q(Q),.Qn(Qn));  // RS-FFのインスタンス
 
  initial begin
    $dumpvars;  // 波形出力
    S = 0;
    R = 0;
    #10;        // 10nS進める
    S = 1;
    R = 0;
    #10;       // 10nS進める
    S = 0;
    R = 0;
    #10;       // 10nS進める
    S = 0;
    R = 1;
    #10;       // 10nS進める
    S = 0;
    R = 0;
    #10;
    $finish;     // 終了
  end
 
endmodule

結果確認

シミュレーションで出力される波形を確認認すると、確かにS=1かつR=0でQ=1、S=0かつR=1でQ=0となっていることがわかります。また、S=0かつR=0でQの状態を保持していることがわかります。このシミュレーションではSやRの値が変化した直後にQの値が変化していますが、実際の回路ではQの値が変化するまでに遅延時間が存在します。

図2: RSフリップフロップのシミュレーション結果波形

module rs_ffは論理式の動作を確認することを目的としたシミュレーション用であり、実際のFPGAやASIC向けの論理設計でこのような記述のTフロップフロップを実装することはまずありません。

タイトルとURLをコピーしました