본문 바로가기
[Nexys4 DDR]

[Nexys4 DDR 프로젝트] Flip Flop 만들기

by choice1219 2019. 3. 16.

안녕하세요. Verilog입니다.


오늘은 Sequential Circuit인 Flip-Flop들을 코딩으로 만들어 보려고 합니다. 


Flip-Flop은 메모리의 가장 기본적인 파트로 이전상태를 기억하는 회로 입니다. 


오늘 만들어 볼 플립플롭은 D Flip Flop과 T Flip Flop을 만들어 보겠습니다.



D 플립플롭의 회로와 Truth Table은 아래 그림과 같습니다. 





클락에 맞춰서 Output Q는 D의 결과를 따라가는 플립플롭입니다. 


D Flip Flop은 Behavioral Modeling을 통해서 작성할 수 있습니다. 


코드는 아래와 같습니다. 


-------------------------------------------------------------------------------

module D_FF (

input clk, 

input D, 

input reset, 

output reg Q  // Behavioral Modeling을 사용하기 때문에 reg 타입으로 선언

);


always @ (posedge clk)    // clock의 rising edge마다 활성화

begin

if(reset)                    // reset이 1인 경우, output은 D에 상관없이 0으로 초기화

Q <= 1'b0;

else

Q <= D;

end

endmodule


-------------------------------------------------------------------------------


위와 같이 간단하게 작성할 수 있습니다. 


그렇다면, 이제는 T-Flip Flop을 작성해볼까요?


T-Flip Flop은 D와 유사하지만, T의 값이 1일 때마다, 이전 결과값의 반대 값을 출력해주는 플립플롭입니다. 


아래 회로도와 진리표를 보시면 쉽게 이해하실 수 있습니다. 



T-Flip Flop 코드는 아래와 같습니다. 


-------------------------------------------------------------------------------

module T_FF (

input clk, 

input T, 

input reset, 

output reg Q  // Behavioral Modeling을 사용하기 때문에 reg 타입으로 선언

);


initial Q <= 1'b0;             // output의 초기값 설정 필요


always @ (posedge clk)    // clock의 rising edge마다 활성화

begin

if(reset)                    // reset이 1인 경우, output은 D에 상관없이 0으로 초기화

Q <= 1'b0;

else if (T)                 // T가 1인 경우, 이전 결과의 반대 값을 출력

Q <= ~ Q;

end

endmodule


-------------------------------------------------------------------------------


D Flip Flop과 유사하게 작성할 수 있습니다. 


하지만, 여기서 유의하셔야 할 점은, T Flip Flop의 경우, 이전 값의 반대 값을 출력하는 회로이기 때문에,


이전 값이 정의 되어 있지 않다면, unknown(1'bx) 값이 출력이 될 것입니다.


따라서, 초기 값을 정의해주는 initial Q <= 1'b0; 부분이 필요합니다. 



오늘은 Sequential Circuit인 플립플롭을 verilog로 작성해보는 시간을 가졌습니다.


다음 시간에는 T 플립 플롭을 이용하여, BCD Counter를 만들어보겠습니다.