안녕하세요. 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를 만들어보겠습니다.
'[Nexys4 DDR]' 카테고리의 다른 글
[Nexys4 DDR프로젝트] Function Generator (18) | 2019.04.15 |
---|---|
[Nexys4DDR 프로젝트] Clock Divider Module 설계 (4) | 2019.04.02 |
[Nexys4 DDR 프로젝트] Multi 7-Segment 구현 (2) | 2019.03.10 |
[Nexys4 DDR 프로젝트] Behavioral Modeling (4) | 2019.02.21 |
[Nexys4 DDR 프로젝트] Dataflow Modeling (2) | 2019.02.21 |