본문 바로가기

Verilog HDL 설계

D latch, Master-Slave D flip-flop 구현 (gate level)

D latch는 논리회로로는 아래와 같은 회로도처럼 구현할 수 있다.

 

NAND 게이트를 이용한 D latch
AND, NOR을 이용한 D latch

 

진리표의 경우 아래와 같으며, E는 CLK으로 취급할 수 있다. CLK로 취급하는 이유는 나중에 설명할 Master-Slave에서 E를 CLK로 사용하기 때문이다.

 

D flip-flop 진리표


두 경우 전부 다 구현해보겠다.

 

module dlatch1( // nand only
    input D, CLK,
    output Q, Q_
);

wire R, S;

nand na0(S, D, CLK);
nand na1(R, S, CLK);
nand na2(Q, Q_, S);
nand na3(Q_, Q, R);

endmodule

module dlatch2( // and, or, not
    input D, CLK,
    output Q, Q_
);

wire R, S;

and a0(S, ~D, CLK);
and a1(R, D, CLK);
nor no2(Q, Q_, S);
nor no3(Q_, Q, R);

endmodule

 

베릴로그 표준은 nand와 nor을 ~&, ~|로 쓸 수 없다. 애초에 지원이 안된다;;

두 회로는 아주 정확히 똑같은 동작을 한다. Master-Slave 설계와 함께 비교해볼 것이다.

 

Master-Slave는 위에서 구현한 D latch를 두 개 연결한 것이다. 대신 Slave d latch에 입력되는 CLK 신호는 Master의 CLK 신호를 반전한 신호를 넣게 된다. 이렇게 연결하면 클락 신호의 edge(0->1 또는 1->0)에만 값을 저장하는 D flip flop이 된다.

 

Master-Slave D flip flop (negative edge)

 

위의 사진처럼 포트를 연결하면 D flip-flop이 완성된다. 코드를 참조한다. positive edge에 동작하도록 설계하였다.

 

module dff(
    input D, clk,
    output Q, Q_
);

wire Q_M, Q_M_;

dlatch1 MASTER(D, ~clk, Q_M, Q_M_);
dlatch2 SLAVE(Q_M, clk, Q, Q_);

endmodule

 

positive edge는 clk을 반대로 주면 된다.

 

이제 시뮬레이션으로 제대로 돌아가는지 확인해보자.

 

테스트 벤치를 첨부한다.

 

module tb();

reg D, CK;
wire Q1, Q1_;
wire Q2, Q2_;
wire Q3, Q3_;

dlatch1 TEST1(D, CK, Q1, Q1_);
dlatch2 TEST2(D, CK, Q2, Q2_);
dff     TEST3(D, CK, Q3, Q3_);

initial begin
    D <= 0;
    CK <= 0;
    #10
    CK <= 1;
    #10
    D <= 1;
    #10
    CK <= 0;
    #10
    D <= 0;
    #10
    D <= 1;
    #10
    CK <= 1;
    #10
    D <= 0;
    #10
    CK <= 0;
    #10
    CK <= 1;
    #10
    D <= 1;
    #10
    CK <= 0;
    #10
    D <= 0;
    #10
    $finish;
end

endmodule

 

결과 파형

Q1과 Q2는 CK가 1일 때, Q3는 CK의 positive edge(0->1)에 값을 저장한다.

 

이렇게 설계하긴 했지만 실제로 D flip flop은 따로 MOSFET으로 설계한다. 위의 예시는 논리회로 배우는 학생들을 위해 일부러 쉽게 구현한 예시일 뿐이다.

 

레지스터 변수는 따로 특별히 다른 flip flop을 쓴다고 설정 안 하면 D flip flop으로 합성을 하게 된다. 이때 위의 예시 같은 걸 쓰면 면적이 너무 커진다. 그래서 보통 D flip flop은 따로 MOSFET으로 모델링을 해둔다.

 

혹시나 궁금할까봐 회로도를 첨부한다.

 

실제 D flip flop은 이렇게 만든다.

 

이 글은 위키피디아를 참조하여 작성되었습니다.

https://en.wikipedia.org/wiki/Flip-flop_(electronics)

'Verilog HDL 설계' 카테고리의 다른 글

BCD to 7 segment  (0) 2021.04.19
간단한 Deinterleaver  (0) 2021.04.18
8bit Binary to BCD  (0) 2021.04.14
코드 작성을 위한 몇가지 팁(1)  (3) 2021.04.14
MUX  (0) 2021.04.13