거북이처럼 천천히

Verilog RTL 설계(6월 25일 - 2, T Flip Flop) 본문

Verilog/Verilog RTL 설계

Verilog RTL 설계(6월 25일 - 2, T Flip Flop)

유로 청년 2024. 6. 28. 14:45

1. T Latch

    • J-K Latch에서 입력값으로 J = 1, K = 1을 주었을 때, 출력값, Q(t+1)은 이전 출력값, Q(t)를 Toggle시켜 출력한다.
    • T Latch는 J-K Latch에서 입력 J와 입력 K을 하나로 묶어서 하나의 T로 동작하는 Latch이다.
    • 따라서 T Latch는 J-K Latch의 동작 중에서 입력값으로 J = 1, K =1이 들어왔을 때, 이전 출력값을 Toggle시켜 출력시키는 기능을 가져와 구현한 Flip Flop이라고도 볼 수 있다.
    • T Latch의 게이트 회로와 블록도는 아래와 같다.

(왼) T Latch의 논리 회로, (중앙) T Latch의 논리 기호, (오른) T Latch의 진리표

 

 

 

 

2. T Flip Flop

  • T Flip Flop은 T Latch에서 CP(Clock Pulse)의 단자에 펄스 전이 검출기를 장착하여 edge에서 동작하는 Flip Flop이다.
  • 따라서 아래와 같이 edge trigger에 대해서 T = 0이면 이전 출력값, Q(t)을 그대로 유지하고, T = 1이면 이전 출력값, Q(t)을 Toggle 시켜 출력한다.

 

 

 

 

 

3.  D Flip Flop으로 T Flip Flop을 만들기.

  • 아래와 같이 D Flip Flop과 XOR Gate를 이용하여 T Flip Flop을 만들 수 있다.

D Flip Flop의 게이트 회로
D Flip Flop으로 만든 T Flip Flop

  • D Flip Flop과 XOR Gate는 아래와 같은 진리표를 갖기 때문에 T 값과 Q(t) 값을 XOR Gate의 입력값으로 넣게 되면 Q(t) 값은 T값에 의해서 Toggle되거나 과거의 출력 값을 유지한다.
  • 따라서 T Flip Flop은 아래와 같은 진리표를 갖는다.

T Flip Flop의 진리표

 

 

 

 

 

4.  D Flip Flop으로 만든 Negative edge sensitive T Flip-Flop

< Source code >

// Behavioral modeling of T Flip Flop (Negative edge)
module Negative_edge_sensitive_T_Flip_Flop(
    input d,
    input clk, t, reset,
    output reg q );
    
    always @(negedge clk or posedge reset) begin
        if(reset) q = 0;
        else begin
            if(t) q = ~q;
            else q = q;
        end
    end
    
endmodule

 

< Simulation >

Negative edge sensitive T Flip-Flop

 

< Analysis >

  • 소스 코드에 대한 분석은 다음과 같다.
    - Negative edge sensitive T Flip Flop을 구현하기 때문에 always 블록의 감지 변수는 clk 변수가 negedge일때 동작하도록 설계.
    - if(t) q = ~q; else q =q; 가 갖는 의미는 "입력 값 t가 1인 경우에는 NOT 연산자를 사용하여 이전 출력값, q를 toggle시켜 출력하고, 입력 값 t가 0인 경우에는 toggle없이 이전 출력값 그대로 출력한다." 이다.

  • 시뮬레이션에 대한 분석은 다음과 같다.
    - 주의) T Flip Flop 시뮬레이션을 하기 전에 출력값, q를 0으로 초기화해야 한다.
    -
    출력값, q을 초기화하지 않는다면 edge에 도달하여 Toggle이 발생한다하더라도 이전 출력값을 모르는 상태에 Toggle을 시킬 수 없기 때문에 반드시 출력값, q를 초기화해줘야 한다.
    - Negative edge일때, T 값이 0인 경우 이전 출력 값,Q(t)을 그대로 출력
    - Negative edge일때, T 값이 1인 경우 이전 출력 값, Q(t)을 Toggle시켜 출력

 

< RTL Analysis >

Verilog 코드를 기반으로 설계

 

  • 출력값, Q값을 invertor시켜 (=Toggle시켜) 다시 D Flip-Flop의 D값으로 전달한다.
  • 이렇게 되면 edge sensitive 되었을 때, 반전된 Q값을 D Flip-Flop이 받아서 출력한다.
  • 이때, T값이 1인경우, D 값과 Q 값은 CLK에 따라 동작하지만, PDT (Propagation delay time)이 발생하는데, 
    자세한 내용은 아래에 별도로 설명한다.

 

< Sysnthesis >

LUT (Look up table)을 통한 설계
D Flip Flop의 출력 값, Q(t)와 T 값을 XOR의 입력값으로 넣은 뒤, 출력값을 D Flip Flop의 D 값을 넣는다.
LUT2의 진리표와 진리표를 통한 LUT 설계

 

  • Sysnthesis을 동작하게 되면 FPGA가 갖고 있는 D Flip-Flop을 기반으로 T Flip-Flop을 만들게 된다.
  • Sysnthesis을 보게 되면 D Flip-Flop의 출력값, Q와 T값을 LUT2에 넣은 뒤, LUT2의 출력값을 D Flip-Flop의 입력값, D로 넣게 된다.
  • LUT2의 진리표를 보게 되면 LUT2가 XOR Gate임을 확인할 수 있다. 즉, D Flip-Flop과 XOR 게이트를 이용하면 T Flip-Flop을 만들 수 있음을 확인할 수 있다.
  • 하지만, FPGA는 LUT을 통해 회로를 구현하기 때문에 XOR Gate를 LUT으로 구현하면 LUT2처럼 구현이 가능하며, 이를 사용하여 XOR Gate를 대체한다.

 

 

 

 

5.  D Flip Flop으로 만든 Positive edge sensitive T Flip-Flop

< Source code >

module Positive_edge_sensitive_T_Flip_Flop(
    input d,
    input clk, t, reset,
    output reg q);
    
    always @(posedge clk or posedge reset) begin
        if(reset) q = 0;
        else begin
            if(t) q = ~q;
            else q = q;
        end
    end
    
endmodule

 

< Simulation >

Positive edge sensitive T Flip-Flop

< Analysis >

  • 소스를 분석하면 다음과 같다.
    - clk 값이 Positive edge sensitive이기 때문에 clk값이 0 ▶ 1로 변하면 always 문이 동작
    - t 값이 1이면 출력 값, q를 Toggle시켜 출력한다.
  • 시뮬레이션을 분석하면 다음과 같다.
    - 10ms 동안 reset 값을 1로 설정하여 출력 값,q를 0으로 초기화한다.
    - positive edge 때, t값을 읽어서 t값이 1이면 출력값, q를 toggle시키고, 0이면 출력값, q는 이전 출력을 그대로 출력한다.

 

< RTL Analysis >

Verilog 코드를 기반으로 설계

 

  • 출력값, Q은 invertor를 거쳐 Toggle시킨 뒤, 다시 D Flip-Flop의 입력값, D로 다시 넣는다.

 

< Sysnthesis >

LUT (Look up table)을 통한 설계

  • Negative edge sensitive T Flip-Flop과 동일하게 D Flip Flop의 출력값, Q값와 T값을 XOR의 입력값으로 넣은 뒤, XOR 게이트의 출력값을 다시 D Flip-Flop의 입력값, D로 넣게 된다.
  • 하지만, FPGA는 게이트 및 논리 함수를 MUX를 통해 구현하기 때문에 LUT로 구현하면 위와 같은 회로도를 갖는다.

 

 

 

 

6.  Propagation Delay Time (PDT)

  • T Flip Flip내에는 D Flip Flop과 XOR로 구성되어 있기 때문에 입력값이 들어가면 바로 출력값이 출력되는 것이 아니라 PDT를 가지고, 약간의 delay를 갖고 출력된다.
  • 이를 Timing Diagram으로 표현하면 다음과 같다.

edge에서 출력값과 입력값은 즉각 변하지 않고, PDT를 갖고 변한다.

  • 출력 값, Q이 입력 값, D까지의 과정은 다음과 같은 과정을 거친다.
    출력 Q → Invertor → D Flip Flop의 입력 D
  • 위 과정을 보면 알 수 있듯이 다양한 소자들을 거치기 때문에 PDT (전파 지연 시간)이 생길 수 밖에 없으며, 회로 설계시, 이를 고려할 필요가 있다.