데이터를 조건에 따라 저장하고, 필요할 때 언제든지 초기화할 수 있는 플립플롭을 만드는 것이 목적
기능 설명
d : 저장하고자 하는 데이터
clk : 클럭 신호, 상승 엣지에서 작동
reset_p : 비동기 최기회 신호 (양의 엣지에서 q를 0으로 초기화)
enable : 데이터 저장 허용 여부를 제어하는 신호
q : 편재 저장된 데이터 출력
사용 코드
module D_flip_flop_p (
input d, // D 입력: 저장하고 싶은 데이터 (1비트)
input clk, // clk 입력: 클럭 신호 (상승엣지에서 동작)
input reset_p, // reset 입력: 비동기 양의 엣지 리셋 (클럭과 무관하게 즉시 초기화)
input enable, // enable 입력: 1일 때만 D 입력을 Q로 저장
output reg q // 출력 q: 현재 저장된 데이터 (출력은 reg 타입 → 상태 저장용)
); // 주의: reg 타입 + 엣지 트리거 → 순차회로 (Flip-Flop 동작)
// 항상 블록: clk 또는 reset_p가 '양의 엣지(positive edge)'일 때 동작
always @(posedge clk or posedge reset_p) begin
// 비동기 리셋: reset_p가 1이 되면 언제든지 q를 0으로 초기화
if(reset_p)
q = 0; // 리셋 우선 동작 (비동기, 즉시 초기화)
// enable이 1일 때만 D 값을 저장
else if(enable)
q = d; // 클럭 상승엣지에서 enable이 1이면 D값을 q에 저장
// enable이 0이면 아무것도 하지 않음 → q는 이전 값 유지 (Flip-Flop의 기본 특성)
end
endmodule
Simulation
Schematic
Synthesis schematic
결론
이 D_FF은 클럭이 상승 엣지에서 enable이 1일 때, 입력 d를 출력 q에 저장하고, reset_p가 1일 경우엔 즉시 q를 0으로 리셋하는 조건 제어형 비동기 리셋 D_FF이다.