본문 바로가기
Digital Design/논리회로

[논리회로] D Latch와 FlipFlop (Design with Verilog)

by 스테고사우르스 2023. 1. 2.

이전 글에서 작성했던 것처럼 FlipFlop은 Latch에 edge detector circuit을 붙여서 사용합니다.

이번 F/F 설명부터는 edge detector circuit을 생략하겠습니다.

 

D Latch (FlipFlop)

Latch의 경우 CLK가 1이면 Q <= D

F/F의 경우 CLK가 rising edge이면 Q <= D

이외에는 Q hold

 

 

Master/Slave D FlipFlop

 

D Latch 2개로 구성되어 있는 M/S FlipFlop입니다.

이 경우 CLK에 inverter가 있어서 0.5주기의 delay 발생합니다.

대신, race 현상이 일부 해결되고 1'st catching problem이 해결됩니다.

 

 


Verilog Code

D FlipFlop을 verilog로 설계하였습니다.

이번에는 clock과 reset을 이용하였습니다.

 

DUT

`timescale 1ns / 1ps

module dff(
i_clk,
i_reset,
i_d,
o_q
    );
    
input      i_clk;
input      i_reset;
input      i_d;
output reg o_q;

always @ (posedge i_clk or negedge i_reset) begin
    if (!i_reset) begin
        o_q <= 1'b0;
    end
    else begin
        o_q <= i_d;
    end
end
    
endmodule

 

 

Testbench

`timescale 1ns / 1ps

module tb_dff();

reg  i_clk;
reg  i_reset;
reg  i_d;
wire o_q;

dff dff ( .i_clk   (i_clk)  ,
          .i_reset (i_reset),
          .i_d     (i_d)    ,
          .o_q     (o_q)    );
          
always #5 i_clk = ~i_clk;
initial begin
    i_clk = 1'b0; i_reset = 1'b1;
    i_d = 1'b0;                    #1
    i_reset = 1'b0;                #1
    i_reset = 1'b1;                #5
    i_d = 1'b1;                    #10
    i_d = 1'b0;                    #10
    i_d = 1'b1;                    #10
    $finish;
end

endmodule

 

Simulation

 

FlipFlop이므로 rising edge에서만 값이 update되는 것을 볼 수 있습니다.

 

 


 

댓글