본문 바로가기
나의 전자 공부방/Verilog 공부

클럭펄스 플립플롭 D플립플롭,T플립플롭,JK플립플롭, SR플립플롭

by 나만의생각 2023. 5. 15.

플립플롭은 클럭에 따라서 움직이게되는 순서논리회로입니다. 따라서 vivado의 verilog를 통해 RTL Schemetic과 Simulation으로 검증을 통해 플립플롭의 동작을 알아보겠습니다. 

 

먼저 D플립플롭입니다.

 

D플립플롭의 진리표는 다음과 같습니다.

d Q(t)
0 0(Reset)
1 1(set)

 

위의 D 플립플롭의 진리표를 참고하여 verilog 코드를 작성해보면 아래와 같습니다.

 

module d_ff(

input in_clk, in_d,
output reg out_q = 0
);
always @(posedge in_clk)begin
case (in_d)
	1'b0 : out_q <= 0;
	1'b1 : out_q <= 1;
endcase
end
endmodule

 

이를통해 RTL Schematic을 그릴수 있습니다.

 

D-FlipFlop RTL Schematic

 RTL Schmatic입니다. 회로가 잘 구성되어있는지 알고싶어 테스트벤치를 만들어 검증해보겠습니다.

module tb_d_ff;
  reg in_clk;
  reg in_d;
  
  wire out_q;

  


  d_ff d_ff_inst (
    .in_clk(in_clk),
    .in_d(in_d),
    .out_q(out_q)
  );
  

  initial begin
    in_clk = 1;
    in_d = 0;
    
    

    #10 in_d = 0; 
    #10 in_d = 1; 

    
    #10 $finish; 
  end
      always #5 in_clk = ~in_clk;
 endmodule

위와 같습니다.

 

D FilpFlop Simulation

이를통하여 D플립플롭을 시뮬레이션했을때,  진리표와 동일하게 시뮬레이션이 잘 나와 회로구성이 잘되었음을 알 수 있습니다.

 

 


 

 

다음은 T플립플롭입니다.

 

T플립플롭의 진리표는 다음과 같습니다.

 

T Q(t)
0 Q(t)(유지)
1 `Q(t) (toggle)

위의 T 플립플롭의 진리표를 참고하여 verilog 코드를 작성해보면 아래와 같습니다.

 

module t_ff(

input in_clk, in_t,
output reg out_q = 1
);
always @(posedge in_clk)begin
case (in_t)
	default : out_q <= out_q;
	1'b1 : out_q <= ~out_q;
endcase
end
endmodule

 

T FlipFlop RTL Schematic

 T FlipFlop의 RTL Schmatic입니다. 회로가 잘 구성되어있는지 알고싶어 테스트벤치를 만들어 검증해보겠습니다.

 

T FlipFlop TestBench

T FlipFlop의 out_q의 초기값을 1로 주었기때문에 초기값은 1이나왔고 0후에 1로 토글이 된것으로보아 회로구성이 잘되었다는 것을 알 수 있습니다.

 

 


 

 

다음은 J-K 플립플롭입니다.

 

J-K플립플롭의 진리표는 다음과 같습니다.

 

J K Q(t)
0 0 Q(t) (불변)
0 1 0
1 0 1
1 1 Q`(t) (toggle)

 

위의 J-K 플립플롭의 진리표를 참고하여 verilog 코드를 작성해보면 아래와 같습니다.

 

module jk_ff(

input in_clk, in_j,in_k,
output reg out_q = 0
);

always @(posedge in_clk)begin
case ({in_j,in_k})
	default : out_q <= out_q;
	2'b01 : out_q <= 0;
	2'b10 : out_q <= 1;
	2'b11 : out_q <= ~out_q;
endcase
end
endmodule

 

J-K FlipFlop RTL Schematic

 

 J-K FlipFlop의 RTL Schmatic입니다. 회로가 잘 구성되어있는지 알고싶어 테스트벤치를 만들어 검증해보겠습니다.

 

J-K FlipFlop testbench

clk = 1일때, J=0 K=0, J=0 K=1, J=1 K=0, J=1 K=1이면 out_q가 각각 불변, 0, 1 , toggle이 잘 나온것을 볼수있습니다.

따라서 회로구성이 잘되었다는 것을 알 수 있습니다.

 

 


 

 

마지막으로은 S-R FlipFlop입니다

 

S-R 플립플롭의 진리표는 다음과 같습니다.

 

S R Q(t)
0 0 Q(t) (불변)
0 1 0
1 0 1
1 1 x (don't care)

S-R FlipFlop RTL Schematic
S-R FlipFlop Simulation

S-R 플립플롭의 진리표와 시뮬레이션을 비교해볼때, 00,01,10,11일때 각각 불변, 0, 1, don't care 가 잘나온것으로보아 회로설계가 정확하게 되었음을 알수 있습니다.

 

클럭펄스가 있을때의 플립플롭을 알아봤습니다.

 

다음내용은 다음에