관리 메뉴

드럼치는 프로그래머

[시스템분석및설계] 10장 D 플립플롭, JK 플립플롭 예비레포트 본문

★─Multi Media/☆─2학년 2학기

[시스템분석및설계] 10장 D 플립플롭, JK 플립플롭 예비레포트

드럼치는한동이 2008. 3. 10. 23:44

◎ 실험 목적

D F/FJK F/F의 동작을 VHDL로 기술하고, 시뮬레이션을 통해 동작을 검증한다.

 

◎ 이론 설명

▶ D F/F

① 한 비트 정보를 저장할 때 유용하게 사용되는 것으로 디지털 순차 회로에서 가장 널리 쓰이는 소자 중 하나이다.

② D F/F의 구조는 데이터 입력(d)과 클록(clk)을 갖고 있고, 출력 신호로는 정출력(q)과 부 출력(q_b)이 있다.

③ 클록의 에지(edge)에 의해 동작되며, 그 에지에서 D가 출력에 래치되는 동작을 한다. 상 승 에지 혹은 하강 에지의 2가지 중 하나에서 동작한다.

④ 클리어 신호(clr_b)와 프리셋 신호(pr_b)의 비동기 입력 신호를 갖는 경우도 있다. 이 신 호들을 사용하면 입력 d와 clk에 관계없이 F/F의 출력 신호 q를 클리어(0) 시키거나, 프 리셋(1) 시킬 수 있다.

⑤ 진리표

동작 모드

입 력

출 력

pr_b

clr_b

clk

d

q

비동기 PRESET

0

1

X

X

1

비동기 CLEAR

1

0

X

X

0

금지

0

0

X

X

1

SET

1

1

1

1

RESET

1

1

0

0

⑥ 세 번째 행의 금지 모드는 두 출력을 모두 1로 하는 입력 조건이므로 발생해서는 안된 다. SET과 RESET 모드는 CLK의 상승 에지에서 입력 상태를 출력에 반영하는 동기 동작 모드이다.

 

▶ JK F/F

① JK F/F은 SR F/F과 비슷한 기능을 가지는 것으로서 J 입력이 SET, K 입력이 RESET에 해당한다.

② SR F/F에서는 S=1, R=1인 입력이 금지되어 있으나, JK F/F에서는 J=1, K=1으로 한 경 우 클록 에지에서 출력 Q의 상태가 반전되는 토글(toggle)동작을 한다.

③ 클리어(clr_b) 입력과 프리셋(pr_b) 입력이 있어 출력 q를 비동기적으로 RESET(0), 혹은 SET(1) 시킨다.

④ 진리표

동작 모드

입 력

출 력

pr_b

clr_b

clk

j

k

q(t+1)

비동기 SET

0

1

X

X

X

1

비동기 RESET

1

0

X

X

X

0

불변

1

1

X

0

0

q(t)

SET

1

1

1

0

1

RESET

1

1

0

1

0

Toggle

1

1

1

1

not q(t)

⑤ q(t)는 클록의 에지가 들어오기 전의 출력 값을, q(t+1)은 클록 에지 이후의 값을 나타낸 다. 따라서 ‘불변’이란 JK F/F의 출력 q가 그 전 상태의 값에서 변하지 않는 것을 의미하 고, ‘Toggle' 동작은 출력 q가 그 전 상태의 값에서 반전되는 것을 의미한다.

 

◎ 실험 장비

▶ Xilinx ISE

▶ ModelSIM

▶ Rov-Lab 트레이닝 키트

 

◎ 실험 순서

▶ D F/F

① D F/F의 동작을 VHDL로 기술

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity dff is

Port ( clk : in std_logic;

d : in std_logic;

pr_b : in std_logic;

clr_b : in std_logic;

q : out std_logic;

end dff;

architecture Behavioral of dff is

begin

process( d , clk , pr_b , clr_b )

begin

if pr_b = '0' then q <= '1';

elsif clr_b = '0' then q <= '0';

elsif clk'event and clk = '1' then q <= d;

end if;

end process;

end Behavioral;

 

=> 구조(architecture)문에서는 process문을 사용하고, IF-ELSE 명령문을 사용해 기술하여 보자.

=> clk'event and clk ='1' 이 문장은 clk이라는 신호의 상승 에지를 표현해 주는 구문이다. 구문의 뜻은 clk이라는 신호 값이 변하고(event), 그 변한 값이 1이 되는 순간이란 것이 다. 따라서 하강 에지를 표현하고 싶을 때에는 1의 값을 단순히 0으로 바꾸기만 하면 될 것이다.

② TestBenchWaveform으로 시뮬레이션

주어진 입력(pr_b, clr_b, clk, d)에 따라 출력(q)이

진리표대로 정확하게 출력되는지를 검증

③ 트레이닝 키트로 동작 검증

주어진 입력(pr_b, clr_b, clk, d)에 따라 출력(q)이

진리표대로 정확하게 출력되는지를 검증

 

▶ JK F/F

① JK F/F의 동작을 VHDL로 기술

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity jkff is

Port ( clr_b : in std_logic;

pr_b : in std_logic;

clk : in std_logic;

j : in std_logic;

k : in std_logic

q : inout std_logic);

end jkff;

architecture Behavioral of jkff is

begin

process ( j, k, clk, pr_b, clr_b )

begin

if pr_b = '0' then q <= '1';

elsif clr_b = '0' then q <= '0';

elsif clk'event and clk = '1' then

if j = '0' and k = '1' then q <= '0';

elsif j = '1' and k = '0' then q <= '1';

elsif j = '1' and k = '1' then q <= not q;

end if;

end if;

end process;

end Behavioral;

=> D F/F때와 마찬가지로 구조(architecture)문에서는 process문을 사용하고, IF-ELSE 명 령문을 사용해 기술하여 보자.

=> 출력신호 q의 PORT 형태가 inout임을 유의하기 바란다. 이는 buffer라는 형태와 같은 것이다. 이는 PROCESS 구문 안의 아래와 같은 표현 때문에 해 준 것이다.

q <= not q;

보통 VHDL에서 신호대입문(<=)의 왼편에는 출력 신호가, 오른푠에는 입력 신호들이 나 타나는데, 위의 표현은 출력 신호 q가 양쪽편에 모두 나오고 있다. 따라서 이때에는 출 력 신호 q의 PORT 형태를 inout으로 선언해 주어야 하는 것이다.

② TestBenchWaveform으로 시뮬레이션

주어진 입력(pr_b, clr_b, clk, j, k)에 따라 출력 q(t+1)이 진리표대로 정확하게 출력되는지를 검증

③ 트레이닝 키트로 동작 검증

주어진 입력(pr_b, clr_b, clk, j, k)에 따라 출력 q(t+1)이 진리표대로 정확하게 출력되는지를 검증

Comments