[VerilogHDL] 19_플립플롭(Flip-Flop)

19_플립플롭

verilogHDL

[VerilogHDL] 19_플립플롭(Flip-Flop)

플립 플롭(Flip-Flop)은 순차 논리 회로에서 주로 사용되는 시퀀셜 디바이스입니다. 플립 플롭은 입력 신호에 따라 상태를 기억하고 출력을 생성합니다. 주로 레지스터, 메모리, 상태 기계 등 다양한 회로에서 사용됩니다. 대표적인 플립 플롭은 D 플립 플롭, RS 플립 플롭, JK 플립 플롭, T 플립 플롭 등이 있습니다.

플립 플롭은 시퀀셜 논리 회로에서 이전 상태 정보를 저장하고, 클럭 신호에 따라 입력을 갱신합니다. 플립 플롭의 출력은 이전 클럭 주기에서의 입력에 의해 결정되며, 다음 클럭 주기에서 변경됩니다. 이러한 특성으로 플립 플롭은 순차 논리 회로에서 상태 기억 및 동기화 기능을 수행합니다.

다양한 종류의 플립 플롭이 있지만, 일반적으로 플립 플롭은 다음과 같은 속성을 가집니다:

  • 입력 (Input): 플립 플롭의 동작을 제어하기 위한 입력 신호
  • 출력 (Output): 플립 플롭이 생성하는 출력 신호
  • 클럭 (Clock): 플립 플롭의 동작을 동기화하기 위한 클럭 신호
  • 비동기(Clear, Reset) 입력: 플립 플롭의 상태를 초기화하는 비동기 신호

플립 플롭은 일반적으로 always @(posedge clock) 또는 always @(negedge clock) 블록 내에서 동작하며, 클럭 신호의 상승(edge) 또는 하강(edge)에 의해 동작이 트리거됩니다. 입력 신호에 따라 플립 플롭의 상태가 변경되고, 출력이 갱신됩니다.

1. D 플립 플롭 (D Flip-Flop)

D 플립 플롭은 가장 기본적인 플립 플롭으로, 단일 데이터(D) 입력과 클럭(Clock) 입력을 가지며, 클럭 신호의 상승(edge)에 따라 입력 데이터를 출력에 복사합니다. D 플립 플롭은 현재 입력 데이터를 다음 클럭 주기에서 출력으로 전달하므로, 데이터를 기억하고 전달하는 역할을 수행합니다.

  • D 입력이 클럭 상승 에지에 도달하면, 현재 D 입력 값을 출력에 복사합니다.
  • 클럭 에지 이외의 시점에서는 출력이 이전 상태를 유지합니다.
  • D 입력이 변경되지 않는 한, 출력은 이전 상태를 유지합니다.
module d_ff(input wire D, input wire clk, output reg Q);
   always @(posedge clk)
   begin
      Q <= D;
   end
endmodule

2. RS 플립 플롭 (RS Flip-Flop)

RS 플립 플롭은 Set(S)과 Reset® 입력을 가지며, 두 입력에 따라 출력 상태가 변경되는 플립 플롭입니다. RS 플립 플롭은 비동기식 플립 플롭으로, S와 R 입력 신호에 따라 특정 상태로 설정하거나 초기화하는 역할을 수행합니다.

  • S 입력이 1로 설정되면, 출력은 1이 됩니다.
  • R 입력이 1로 설정되면, 출력은 0이 됩니다.
  • S와 R 입력이 모두 0으로 설정되면, 이전 상태를 유지합니다.
  • S와 R 입력이 모두 1로 설정되면, 상태가 정의되지 않습니다.
module rs_ff(input wire R, input wire S, input wire clk, output reg Q);
   always @(posedge clk)
   begin
      if (R && !S)
         Q <= 0;
      else if (!R && S)
         Q <= 1;
   end
endmodule

3. JK 플립 플롭 (JK Flip-Flop)

JK 플립 플롭은 J(Jump)와 K(Kill) 입력을 가지며, 이전 출력 상태와 입력에 따라 출력을 변경하는 플립 플롭입니다. JK 플립 플롭은 D 플립 플롭과 RS 플립 플롭의 기능을 포함하고 있으며, 더욱 다양한 동작을 수행할 수 있습니다.

  • J 입력이 1로 설정되면, 출력은 1이 됩니다.
  • K 입력이 1로 설정되면, 출력은 0이 됩니다.
  • J와 K 입력이 모두 0으로 설정되면, 이전 상태를 유지합니다.
  • J와 K 입력이 모두 1로 설정되면, 출력의 상태가 반전됩니다.
module jk_ff(input wire J, input wire K, input wire clk, output reg Q);
   always @(posedge clk)
   begin
      if (J && !K)
         Q <= 1;
      else if (!J && K)
         Q <= 0;
      else if (J && K)
         Q <= ~Q;
   end
endmodule

댓글 쓰기

0 댓글