동기 D Flip-Flop 과 비동기 D Flip-Flop
■ 동기형 D Flip-Flop
· RS의 Flip-Flop의 문제점인 입력 S와 R에 각각 1을 못 넣게 만들어 놓은 회로이다. 데이터 전송용으로 많이 쓰인다. CPU 내에서 많이 사용된다.
입력 |
출력 |
CLK D |
Q(t+1) |
1 0 1 1 0 0 |
0 1 Q(t) |
[진리표]
- Verilog
module dff2(Clk,D,Q,Qbar ); input Clk,D; output Q,Qbar; wire D_s, D_r, Q_1, Q_2, Qbar_1, Qbar_2; reg Q,Qbar;
assign D_s = D, D_r = !D; nand(Q_1,D_s,Clk); //nand(output,input1,input2) nand(Qbar_1,D_r,Clk); nand(Q_2,Q_1,Qbar_2); //nand(output,input1,input2) nand(Qbar_2,Qbar_1,Q_2); //assign Q=Q_2, Qbar=Qbar_2; always@(posedge(Clk)) begin Q=Q_2;Qbar=Qbar_2; end endmodule ---------------------------------------------------------------------------- module bench2; // Inputs reg Clk; reg D; // Outputs wire Q; wire Qbar; // Instantiate the Unit Under Test (UUT) dff2 uut ( .Clk(Clk), .D(D), .Q(Q), .Qbar(Qbar) ); initial begin Clk = 1; forever #5 Clk = !Clk; end
initial begin D = 0; forever #3 D = !D; end endmodule |
- 동기식 D Flip-Flop 파형
■ 비동기식 D Flip-Flop
- Verilog
module dff(Clk,D,Q,Qbar ); input Clk,D; output Q,Qbar; wire D_s, D_r, Q_1, Q_2, Qbar_1, Qbar_2;
assign D_s = D, D_r = !D;
nand(Q_1,D_s,Clk); //nand(output,input1,input2) nand(Qbar_1,D_r,Clk);
nand(Q_2,Q_1,Qbar_2); //nand(output,input1,input2) nand(Qbar_2,Qbar_1,Q_2);
assign Q=Q_2, Qbar=Qbar_2; endmodule ------------------------------------------------------------------ module dff_bench; // Inputs reg Clk; reg D; // Outputs wire Q; wire Qbar; // Instantiate the Unit Under Test (UUT) dff uut ( .Clk(Clk), .D(D), .Q(Q), .Qbar(Qbar) ); initial begin Clk = 0; forever #5 Clk = !Clk; //5ns 후에 5ns 마다 clk의 값을 반전 시킨다. end initial begin D = 0; forever #3 D = !D; //5ns 후에 5ns 마다 clk의 값을 반전 시킨다. end
endmodule |
- 비동기식 D Flip-Flop 파형