관리 메뉴

드럼치는 프로그래머

[시스템분석및설계] 11,12장 3비트 2진 카운터, 3비트 시프트 레지스터 예비레포트 본문

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

[시스템분석및설계] 11,12장 3비트 2진 카운터, 3비트 시프트 레지스터 예비레포트

드럼치는한동이 2008. 3. 11. 00:19

◎ 실험 목적

3비트 2진 카운터3비트 시프트 레지스터의 동작을 VHDL로 기술하고, 시뮬레이션을 통해 동작을 검증한다.

 

◎ 이론 설명

▶ 3비트 2진 카운터

① 카운터(Counter)란 들어오는 입력 신호(보통은 클록 신호)의 펄스의 개수를 해아려 그 값을 출력으로 나타내어 주는 회로를 일컫는다.

② 3비트 2진 카운터는 출력 값이 3비트의 2진 값으로 나타내어지는 카운터이다.

③ 카운터 회로에서는 출력 값을 계속 유지할 수 있어야 하기 때문에 저장 소자인 플립플롭 의 사용이 필수적이다. 따라서 카운터는 플립플롭으로 구성되어진다.

④ 카운터가 들어오는 클록 신호의 펄스 수에 따라 출력 값을 1씩 증가시켜 간다는 기능을 한다는 점만 상기하면, 그 설계는 그리 어렵지 않다.

⑤ 카운터는 자기가 나타낼 수 있는 최대값 이후에 다시 펄스가 들어오면 초기값인 0으로 순환된다는 점도 유의해야 한다.

⑥ 상태도
 

사용자 삽입 이미지



⑦ 상태표와 여기표
사용자 삽입 이미지

▶ 3비트 시프트 레지스터

① 레지스터(Register)란 여러 개의 비트 데이터를 저장하는 데 쓰이는 디지털 저장 소자를 말하는데, 실제적으로는 F/F의 그룹으로 구성된다.

② 시프트 레지스터(Shift Register)란 레지스터의 일종으로 그 레지스터에 저장되어 있는 데이터를 클록에 따라 좌, 우 혹은 양방향으로 이동할 수 있도록 되어 있는 레지스터를 말한다.

③ 데이터의 이동이 LSB 쪽에서 MSB 쪽으로 되는지, 아니면 그 반대인지를 잘 이해할 필 요가 있다.

④ 설계자는 데이터의 이동 방향이 MSB, LSB 중 어느 쪽인지를 항상 유의하여야만, 레지 스터에 저장된 데이터를 활용하는 데에 착오가 생기지 않는다.

⑤ VHDL 코드에서 실제 시프트가 일어나도록 하는 구문은 아래와 같다.

if clk'event and clk ='1' then

q ( 2 downto 0 ) <= q ( 1 downto 0 ) & d_in;

-> 이것이 q값이 LSB로부터 MSB쪽으로 이동되는 것을 의미한다.

 

◎ 실험 장비

▶ Xilinx ISE

▶ ModelSIM

▶ Rov-Lab 트레이닝 키트

 

◎ 실험 순서

▶ 3비트 2진 카운터

① 3비트 2진 카운터의 동작을 VHDL로 기술

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity cnt3 is

Port ( pr_b : in std_logic;

clr_b : in std_logic;

clk : in std_logic;

q : inout std_logic_vector(2 downto 0));

end cnt3;

architecture Behavioral of cnt3 is

begin

process( pr_b , clr_b , clk )

begin

if pr_b = '0' then q <= "111";

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

elsif clk'event and clk = '1' then

if q = "111" then q <= "000";

else q <= q+1;

end if;

end if;

end process;

end Behavioral;

 

② TestBenchWaveform으로 시뮬레이션

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

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

 

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

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

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

 

▶ 3비트 시프트 레지스터

① 3비트 시프트 레지스터의 동작을 VHDL로 기술

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity is

Port ( pr_b : in std_logic;

clr_b : in std_logic;

clk : in std_logic;

d_in : in std_logic;

q : inout std_logic_vector(2 downto 0) );

end shift3;

architecture Behavioral of shift3 is

begin

process ( pr_b , clr_b , clk )

begin

if pr_b = '0' then q <= "111";

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

elsif clk'event and clk = '1' then

q(2 downto 0) <= q(1 downto 0) & d_in;

end if;

end process;

end Behavioral;


=>
새로운 q(0)값은 외부로부터의 데이터 입력인 d_in값으로 결정되도록 되어 있다.


② TestBenchWaveform으로 시뮬레이션

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

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

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

Comments