플립플롭은 클럭에 따라서 움직이게되는 순서논리회로입니다. 따라서 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을 그릴수 있습니다.

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플립플롭을 시뮬레이션했을때, 진리표와 동일하게 시뮬레이션이 잘 나와 회로구성이 잘되었음을 알 수 있습니다.
다음은 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 Schmatic입니다. 회로가 잘 구성되어있는지 알고싶어 테스트벤치를 만들어 검증해보겠습니다.

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 Schmatic입니다. 회로가 잘 구성되어있는지 알고싶어 테스트벤치를 만들어 검증해보겠습니다.

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 플립플롭의 진리표와 시뮬레이션을 비교해볼때, 00,01,10,11일때 각각 불변, 0, 1, don't care 가 잘나온것으로보아 회로설계가 정확하게 되었음을 알수 있습니다.
클럭펄스가 있을때의 플립플롭을 알아봤습니다.
다음내용은 다음에
'나의 전자 공부방 > Verilog 공부' 카테고리의 다른 글
| 반감산기를 이용해 전감산기를 만들기 (1) | 2023.05.08 |
|---|---|
| 반감산기, 전감산기 , 4bit 전감산기 만들고 전감산기 테스트벤치로 검증하기. (0) | 2023.04.24 |
| fulladder 4개를 연결하여 4비트 전가산기 만들고 검증하기, 전가산기 4bit 2개 연결 (0) | 2023.04.23 |
| 반가산기(halfadder) 2개로 전가산기(fulladder) 만들기, 테스트벤치짜기 (0) | 2023.04.23 |