Latch & Flip-Flop
Latch와 Flip-Flop을 이전 값을 유지하고 있는 저장 소자이다.
* SR Latch
S(set)과 R(reset)으로 set이 on 되었을 경우 Q값이 1로 되고
reset이 on 되었을 경우 Q값이 0으로 출력 한다.
* D Latch
Latch는 Clock이 enable 상태를 유지하는 동안 입력 D 값을 변화를 출력한다.
* D Flip-Flop
Flip-Flop은 Clock이 Rising edge일 경우에서만 D값으로 출력이 바뀐다. 다른 경우는 이전 Q값을 그대로 유지한다.
#Latch와 Flip-Flop의 차이점
SR Latch
module _srlatch(r,s,q,q_bar);
input r,s;
output q,q_bar;
_nor2 U0_nor2(.a(r),.b(q_bar),.y(q));
_nor2 U1_nor2(.a(s),.b(q),.y(q_bar));
endmodule
D Latch
module _dlatch(clk,d,q,q_bar); input clk,d;
output q,q_bar;
wire d_bar,r,s;
_inv U0_inv (.a(d),.y(d_bar));
_and2 U1_and2(.a(clk),.b(d_bar),.y(r));
_and2 U2_and2(.a(clk),.b(d),.y(s));
_srlatch U3_srlatch(.r(r),.s(s),.q(q),.q_bar(q_bar));
endmodule
D Flip-Flop
module _dff(clk,d,q,q_bar);
input clk,d;
output q,q_bar;
wire clk_bar,w_q;
_inv U0_inv (.a(clk),.y(clk_bar));
_dlatch U1_dlatch (.clk(clk_bar),.d(d),.q(w_q));
_dlatch U2_dlatch (.clk(clk),.d(w_q),.q(q),.q_bar(q_bar));
endmodule