一、能夠存儲1位二值信號的基本單元電路統稱為觸發器(Filp-Flop)
觸發器是構成時序邏輯電路的基本邏輯部件。它有兩個穩定狀態:“0”和“1”。在不同的輸入情況下,它可以被置0狀態或1狀態,當輸入信號消失后,所置成的狀態能夠保持不變。所以觸發器可以記憶1位二值的信號。根據邏輯功能的不同,觸發器可以分為SR觸發器、D觸發器、JK觸發器、T和T'觸發器。按照結構形式的不同,又可分基本SR觸發器、同步觸發器、主從觸發器和邊沿觸發器。
其狀態圖:
a、當觸發器處在0狀態,即Q = 0,若S'R' = 10或11時,觸發器仍為0狀態。若S'R' = 01,觸發器翻轉成為1狀態。
b、當觸發器處在1狀態,即Q = 1,若S'R' = 01或11時,觸發器仍為1狀態。若S'R' = 10,觸發器翻轉成為0狀態。
約束條件是S’R’不能同時為0。
代碼實現:

module RS(rst_n,r,s,q,qn); input rst_n; input r; input s; output q; output qn; reg q; reg i; always @(rst_n or q) if(!rst_n) i = 0; else if(!q) i = 0; else i = 1; always @(rst_n or r or s) if(!rst_n) q = 0; else case(i) 0://置0 if(({r,s} == 2'b01) || ({r,s} == 2'b11)) q = 0; else if(({r,s} == 2'b10)) q = 1; 1://置1 if(({r,s} == 2'b10) || ({r,s} == 2'b11)) q = 1; else if(({r,s} == 2'b01)) q = 0; endcase assign qn = ~q; endmodule
仿真代碼:

`timescale 1ns/1ns module RS_top; reg rst_n; reg r; reg s; wire q; wire qn; initial begin rst_n = 0; #10; rst_n = 1; repeat(5) begin r = 0; s = 1; #20; r = 1; s = 1; #20; r = 1; s = 0; #20; r = 1; s = 1; #20; end end RS rs1( .rst_n(rst_n), .r(r), .s(s), .q(q), .qn(qn) ); endmodule
仿真波形:
可以看到仿真結果是對的。
二、電平觸發SR觸發器,即同步SR觸發器。在基本的SR與非門電路上在加了一個與非門電路。
代碼實現:

module RS(rst_n,clk_en,r,s,q,qn); input clk_en; input rst_n; input r; input s; output q; output qn; reg i; reg q; reg qn; always @(rst_n or q) if(!rst_n) i = 0; else if(!q) i = 0; else i = 1; always @(rst_n or r or s or clk_en) if(!rst_n) begin q = 0; qn = 1; end else if(clk_en)//為1時,RS輸入信號有效 case(i) 0://置0 if(({r,s} == 2'b10) || ({r,s} == 2'b11)) begin q = 0; qn = 1; end else if(({r,s} == 2'b01)) begin q = 1; qn = 0; end 1://置1 if(({r,s} == 2'b01) || ({r,s} == 2'b11)) begin q = 1; qn = 0; end else if(({r,s} == 2'b10)) begin q = 0; qn = 1; end endcase endmodule
仿真代碼:

`timescale 1ns/1ns module RS_top; reg rst_n; reg clk_en; reg r; reg s; wire q; wire qn; initial begin rst_n = 0; #10; rst_n = 1; repeat(500) begin r = 0; s = 1; #20; r = 1; s = 1; #20; r = 1; s = 0; #20; r = 1; s = 1; #20; end end initial begin clk_en = 0; #50; clk_en = 1; #500; clk_en = 0; #100; clk_en = 1; #500; clk_en = 0; end RS rs1( .rst_n(rst_n), .clk_en(clk_en), .r(r), .s(s), .q(q), .qn(qn) ); endmodule
仿真波形:在clk_en低電平時,Q處於保持狀態,只有在clk_en為高時,RS輸入信號才有效。
三、同步D觸發器,是在同步SR觸發器上演變過來的,D一端接到S,經過非門接到R:
代碼實現比較簡單:
if(!d) begin q = 1'b0; qn = 1'b1; end else begin q = 1'b1; qn = 1'b0; end