카운터와 쉬프트 레지스터

50
1 카카카카 카카카 카카카카

Upload: seven

Post on 24-Jan-2016

98 views

Category:

Documents


0 download

DESCRIPTION

카운터와 쉬프트 레지스터. 단원목차. 1. 디지털 카운터의 기본개념 2. 동기식 카운터 3. 동기식 카운터의 설계 4. 이진 카운터의 VHDL 프로그래밍 5. 동기식 카운터의 제어 옵션 6. 프리세트과 양방향 카운터의 VHDL 프로그래밍 7. 시프트 레지스터 8. 시프트 레지스터 VHDL 프로그래밍 9. 시프트 레지스터 카운터. 카운터와 관련된 용어. 카운터 : 펄스를 계수하는 순서회로 . 용도 : 이벤트 계수 , 주파수 분주 , 타이밍 및 제어동작 . - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 카운터와 쉬프트 레지스터

1

카운터와 쉬프트 레지스터

Page 2: 카운터와 쉬프트 레지스터

2

단원목차1. 디지털 카운터의 기본개념2. 동기식 카운터3. 동기식 카운터의 설계4. 이진 카운터의 VHDL 프로그래밍5. 동기식 카운터의 제어 옵션6. 프리세트과 양방향 카운터의 VHDL 프로그래밍7. 시프트 레지스터8. 시프트 레지스터 VHDL 프로그래밍9. 시프트 레지스터 카운터

Page 3: 카운터와 쉬프트 레지스터

3

카운터와 관련된 용어• 카운터 : 펄스를 계수하는 순서회로 .• 용도 : 이벤트 계수 , 주파수 분주 , 타이밍 및 제어동작

.• 시프트 레지스터 : 저장된 데이터 비트를 특정한

방향으로 이동시키는 순서회로로 , 직렬 데이터 전송 , SIPO/PISO 변환 , 연산 , 지연회로 등에 사용된다 .

• 카운터는 출력이 미리 정해진 패턴으로 진행하는 디지털 회로이다 . 진행은 매 클록 펄스마다 한 단계씩 이루어 진다 .

• 상태도 (State Diagram): 카운터와 같은 순서회로에서 상태의 진행을 보여주는 그래픽 도 .

Page 4: 카운터와 쉬프트 레지스터

4

카운터 모듈러스 (Counter Modulus)

• 카운터의 모듈러스는 한 반복구간에서의 카운터 진행상태의 수를 말한다 .(mod-N)• Mod-12 상승 카운터는 0000 에서 1011 까지 (0~11) 의 12 상태를 계수하고 반복된다 .• Mod-12 하강 카운터는 1011 에서 0000 까지 (11~0) 의 12 상태를 계수하고 반복된다 .

Page 5: 카운터와 쉬프트 레지스터

5

카운터 상태도Figure 9.2

Page 6: 카운터와 쉬프트 레지스터

6

절단된 (Truncated) 카운터• 최대 모듈러스 (2N) 를 계수하는 N-Bit 카운터는 소위 Full Sequence Counter 라 한다 . (Mod-2, Mod-4, Mod-8 등 )• 계수 가능한 최대 모듈러스보다 적은 수를 계수하는 N-Bit 카운터를 Truncated Sequence Counter 라 한다 .(Mod-3 (N=2), Mod-12 (N=4)) • Mod-12 카운터는 0000 에서 1011 까지를 계수하지만 , Mod-16 카운터는 0000 에서 1111까지 계수한다 . 양쪽 카운터는 4-Bit (N=4) 이다 .

Page 7: 카운터와 쉬프트 레지스터

7

타이밍 도• 카운터의 출력 (Q0 Q3) 은 주파수 분주기로 사용될 수 있다 .(Q0 = Clock 2, Q1 = Clock 4, Q2 = Clock 8, and Q3 = Clock 16)

Figure 9.4

Page 8: 카운터와 쉬프트 레지스터

8

동기식 카운터Fig. 9.8 : 동기식 카운터 블록 도

Direct the counter to its next state(combinational logic)

Keep the present state(sequential logic)

Page 9: 카운터와 쉬프트 레지스터

9

동기식 카운터 설계• 상태변화와 입 / 출력을 보여주는 상태도를 그린다 .• 상태표 ( 현재와 다음상태 ) 를 생성한다 .• 현재상태는 이진순서대로 , 다음상태는 상태도에 근거하여 리스트를 작성한다 .• 플립플롭의 입력 식을 도출하기 위해 , 현재상태에서 다음상태로의 천이에 근거한 플립플롭 여기표를 작성한다.• 부울식의 간략화 과정을 통해 각 입력식을 최적화 한다 .• 이러한 과정은 매우 지루한 작업이다 .• 카운터 설계를 위한 VHDL 설계방법은 시간이 걸리지 않고 매우 쉽게 구현할 수 있다 .

Page 10: 카운터와 쉬프트 레지스터

10

동기식 카운터 설계 ( 예 9.5)

Fig. 9.18

Page 11: 카운터와 쉬프트 레지스터

11

D3 = /Q3Q2Q1Q0 + Q3/Q2 + Q3/Q1 + Q3/Q0

= /Q3Q2Q1Q0 + Q3(/Q2 + /Q1 + /Q0) = /Q3Q2Q1Q0 + Q3/(Q2Q1Q0) = Q3 XOR Q2Q1Q0

D2 = /Q2Q1Q0 + Q2/Q1 + Q2/Q0

= /Q2Q1Q0 + Q2(/Q1 + /Q0) = /Q2Q1Q0 + Q2/(Q1Q0) = Q2 XOR Q1Q0

D1 = Q1/Q0 + /Q1Q0

= Q1 XOR Q0

D0 = /Q0 = Q0 XOR 1

Page 12: 카운터와 쉬프트 레지스터

12

VHDL 에 의한 이진 카운터 프로그래밍• 순차 카운터는 다음 카운터 상태로의 천이를 제어하기 위해 프로세스 문을 사용한다 .• VHDL Attribute 는 클록에지를 정의하기 위한 식별자 (identifier) 와 함께 사용된다 . • 클럭은 소위 EVENT 로 불리는 Attribute 를 사용한다 . 즉 , 클록 이벤트의 상승에지를 정의하기 위해 (clk’EVENT AND clk=‘1’) 를 사용한다 . INPUTS ACTION RESET=1 CLK=1 CLK’event FALSE FALSE FALSE Unspecified FALSE FALSE TRUE Unspecified FALSE TRUE FALSE Unspecified FALSE TRUE TRUE Q <= D TRUE - - Q <= ‘0’

Page 13: 카운터와 쉬프트 레지스터

13

• Basic Entity for Binary Counter with Asynchronous Clear.

카운터의 행위적 기술 (1)

ENTITY ct_simp IS

PORT( clk, clear : IN BIT;

q : OUT INTEGER Range 0 to 255);

END ct_simp;

-- Counter Outputs (8 Bit) are given as an integer with a

-- range of 0 to 255 (Full Sequence Counter)

Page 14: 카운터와 쉬프트 레지스터

14

ARCHITECTURE a OF ct_simp IS

BEGIN

PROCESS(clk, clear)

VARIABLE count : INTEGER RANGE 0 to 255;

BEGIN

IF(clear = ‘0’) THEN

count := 0;

ELSE

IF(clk’EVENT AND clk = ‘1’) THEN

count := count + 1; -- integer(no quote)

END IF;

END IF;

q <= count;

END PROCESS;

END a;

-- Synchronous resetIF(clk’EVENT AND clk = ‘1’) THEN IF clear = ‘0’ THEN count := 0; ELSE count := count +1; END IF;END IF;

Page 15: 카운터와 쉬프트 레지스터

15

• 프로세스는 clk 나 clear 에서 변화가 있을 때 실행하는 것을 규정한다 .• 비동기식 클리어는 ‘ clk EVENT’ 앞에 위치한다 .• clk attribute (EVENT) 는 상승에지로 규정된다 . • 다음상태로의 천이는 단순히 정수가산 (count := count +1) 에 의해 제어된다 .• 이와 같은 접근방법은 다른 하드웨어 ( 곱셈기 , 제산기 등 ) 설계에서도 적용할 수 있다 .• 예에서 , 변수 ‘ count’ 는 정수동작 (increment) 을 위해 사용되었다 . • 이 경우 신호할당 연산자 (<=) 대신 변수신호 할당 연산자 (:=) 를 사용하였다 .

카운터의 행위적 기술 (2)

Page 16: 카운터와 쉬프트 레지스터

16

Variable vs. Signal

Variable( 변수 ) 는 PROCESS 문에서만 사용할 수 있다 . 즉시 할당의 개념임 . wire 요소를 나타낼 수 없음 .

Signal :PROCESS ( ) B <= A; C <= B;END PROCESS; -- PROCESS 종료시점 평가됨 . 따라서 프로세스 종료 후에는 -- B = A(original), C = B(original)

Variable :PROCESS ( ) B := A; C := B;END PROCESS; -- 즉시 평가됨 . 따라서 프로세스 종료 후에는 -- B = A(original), C = A(original)

Page 17: 카운터와 쉬프트 레지스터

17

LPM 카운터 (1)

• 알테라 LPM(Library of Parameterized Modules) 카운터는 VHDL 에서 카운터 설계를 생성하기 위해 사용될 수 있다 .• 이것은 설계계층에서 하나의 컴포넌트로 LPM-Counter 를 활용하는 구조적 설계 접근 방법이다 .• LPM 카운터는 구조적 설계에서 사례화된다 .• ‘width’ 와 같은 LPM 카운터의 기본 파라미터들은 ‘ Generic Map’ 와 함께 정의된다 .• ‘Port Map’ 은 LPM 카운터 I/O 를 실제 VHDL 설계 엔티티에 연결시키기 위해 사용된다 .• lpm 카운터를 이용 시 ‘ behavioral description’ 은 필요 없다 .

Page 18: 카운터와 쉬프트 레지스터

18

LPM 라이브러리 선언과 엔티티

• 통상의 STD_LOGIC 에 Altera LPM Library 를 추가한다 . • The ieee library must be declared before the LPM library.

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

LIBRARY LPM

USE lpm.lpm_components.ALL;

• Entity for an 8-Bit Mod-256 Counter. • LPM requires the use of STD_LOGIC data types.

ENTITY lpm_simp IS

PORT( clk, clear : IN STD_LOGIC;

q : OUT STD_LOGIC_VECTOR(7 downto 0));

END lpm_simp;

Page 19: 카운터와 쉬프트 레지스터

19

LPM Architecture(1)• Architecture 는 폭이 8- 비트로 정의되고 , LPM I/O 에 clk, clear, q 가 매핑되는 Generalized LPM 카운터를 사용한다 .• 이 경우 , 계수를 위한 어떤 정수표현과 클럭 또는 비동기를 제어하는 프로세스 (process) 도 필요하지 않다 . 이들은 프로그램이 가능한 ‘ width counter’ 로 매핑된다 . _instance_name : _component_name GENERIC MAP (_parameter_name => _parameter_value, _parameter_name => _parameter_value) PORT MAP (_component_port => _connect_port, _component_port => _connect_port);-- component_name : LPM component name-- parameter_name : name defined in LPM component-- component_port : LPM port name-- connect_port : name declared in the entity or as signals or variables

Page 20: 카운터와 쉬프트 레지스터

20

LPM Architecture(2)ARCHITECTURE count OF lpm_simp IS SIGNAL clrn : STD_LOGIC; -- for inverting active level of LPM_clear

BEGIN

count8 : lpm_counter

GENERIC MAP(LPM_WIDTH => 8)

PORT MAP(clock => clk,

aclr => clrn,

q => q(7 downto 0));

clrn <= NOT clear;

END count;

Page 21: 카운터와 쉬프트 레지스터

21

동기식 카운터를 위한 제어 옵션

• Parallel Load: 특정 이진 값을 카운터로 동기 또는 비동기식으로 로딩하는 것을 허용하는 함수.• Clear: 비동기 또는 동기식 리셋• Preset: 동기 또는 비동기 세트• Counter Enable: 카운터가 카운터 동작을 진행할 지 또는 정지할 지를 제어하는 함수 . • BiDirectional: 카운터가 상승 카운트에서 하강 카운트로 변환되는 것을 제어하는 함수 .

Page 22: 카운터와 쉬프트 레지스터

22

4- 비트 병렬 로드 카운터 (1)• 프리셋 카운터 (Parallel Load) 는 4- 비트 병렬 데이터 입력을 동기적으로 또는 비동기적으로 로드 할 수 있는 추가입력 (Load) 을 가진다 .

Page 23: 카운터와 쉬프트 레지스터

23

동기식 로드 카운터 (1) Fig. 9.23 synchronous load function

Fig. 9.24 counter element(msb in fig9.19) with syn. load

Page 24: 카운터와 쉬프트 레지스터

24

동기식 로드 카운터 (2)

Fig. 9.25 Counter Element with Synchronous Load/ Asynchronous Reset(sl_count)

General counter element

Page 25: 카운터와 쉬프트 레지스터

25

동기식 로드 카운터 (3)

Fig. 9.26 4-bit counterwith synchronous load and asynchronous reset

Refer to Fig. 9.27 Simulation results

Page 26: 카운터와 쉬프트 레지스터

26

비동기식 로드 카운터 (1)Fig. 9.29

Fig. 9.30(al_count)

Page 27: 카운터와 쉬프트 레지스터

27

비동기식 로드 카운터 (2)

Fig. 9.31

Page 28: 카운터와 쉬프트 레지스터

28

비동기식 로드 카운터 (3)

Fig. 9.32Simulation of a 4-bit counter with asynchronous load and reset

Page 29: 카운터와 쉬프트 레지스터

29

Count Enable 로직 (1)Fig. 9.33

Page 30: 카운터와 쉬프트 레지스터

30

Count Enable 로직 (2)Fig. 9.34 Simulation of a 4-bit counter with synchronous load, asynchronous reset, and count enable

Page 31: 카운터와 쉬프트 레지스터

31

T-FF 를 사용한 양방향 카운터 (1)

• Adds a Direction Input(DIR) to the counter and the Control Logic for Up or Down Counting.

Fig. 9.37 Synchronous counter element(T-FF)

Page 32: 카운터와 쉬프트 레지스터

32

Bidirectional Counter (Fig. 9.38)

Page 33: 카운터와 쉬프트 레지스터

33

양방향 카운터 (2)

Fig. 9.39 Simulation of 4-bit bidirectional counter

Page 34: 카운터와 쉬프트 레지스터

34

카운터 출력의 디코딩

Fig. 9.40

Page 35: 카운터와 쉬프트 레지스터

35

4-to-16 디코더의 VHDL 코드

Base specifier(string사용 시 ) 2 진 : bit_vector, B 8 진 : O 16 진 : X

Ex) a <= X“7A” (a <= “01111010”)

A <= O“76”(a <= “111110”)

Page 36: 카운터와 쉬프트 레지스터

36

4-to-16 디코더 시뮬레이션

Page 37: 카운터와 쉬프트 레지스터

37

카운터 종료 (Terminal Count) 디코더

Page 38: 카운터와 쉬프트 레지스터

38

RCO 를 갖는 4-bit 양방향 카운터

Page 39: 카운터와 쉬프트 레지스터

39

RCO 를 갖는 4-bit 양방향 카운터의 시뮬레이션

Page 40: 카운터와 쉬프트 레지스터

40

-- 8-bit presettable counter with asynchronous clear and load and terminal count decodingENTITY pre_ct8a IS PORT( clk, count_ena : IN BIT; clear, load, direction : IN BIT; p : IN INTEGER RANGE 0 TO 255; max_min : OUT BIT; qd : OUT INTEGER RANGE 0 TO 255);END pre_ct8a;ARCHITECTURE a OF pre_ct8a IS BEGIN PROCESS (clk, clear, load) -- clear and load are asynchronous and independent on clock VARIABLE cnt : INTEGER RANGE 0 TO 255; BEGIN

IF (clear = '0') THEN -- Asynchrnous clear, clear is firstly checked because of the highest priority cnt := 0;ELSIF (load = '1' and clear = '1') THEN -- Asynchronous load, the second priority cnt := p;ELSE IF (clk'EVENT AND clk = '1') THEN

IF (count_ena = '1' and direction = '0') THEN cnt := cnt - 1; ELSIF (count_ena = '1' and direction = '1') THEN cnt := cnt + 1; END IF; END IF;END IF;qd <= cnt;-- Terminal count decoderIF (cnt = 0 and direction = '0') THEN max_min <= '1';ELSIF (cnt = 255 and direction = '1') THEN max_min <='1';ELSE max_min <='0';END IF;

END PROCESS;END a;

Page 41: 카운터와 쉬프트 레지스터

41

-- 8-bit presettable counter with synchronous clear and load and terminal count decodingENTITY pre_ct8s IS

PORT(

clk, count_ena : IN BIT;

clear, load, direction : IN BIT;

p : IN INTEGER RANGE 0 TO 255;

max_min : OUT BIT;

q : OUT INTEGER RANGE 0 TO 255);

END pre_ct8s;

ARCHITECTURE a OF pre_ct8s IS

BEGIN

PROCESS (clk)

VARIABLE cnt : INTEGER RANGE 0 TO 255;

BEGIN

IF (clk'EVENT AND clk = '1') THEN -- A clock event is firstly checked because of synchronous clear.

IF (clear = '0') THEN -- Synchronous clear

cnt := 0;

ELSIF (load = '1') THEN -- Synchronous load

cnt := p;

ELSIF (count_ena = '1' and direction = '0') THEN

cnt := cnt - 1;

ELSIF (count_ena = '1' and direction = '1') THEN

cnt := cnt + 1;

END IF;

END IF;

qd <= cnt;

- Terminal count- decoder

IF (cnt = 0 and direction = '0') THEN

max_min <= '1';

ELSIF (cnt = 255 and direction = '1') THEN

max_min <= '1';

ELSE

max_min <= '0';

END IF;

END PROCESS;

END a;

Page 42: 카운터와 쉬프트 레지스터

42

8-bit 양방향 카운터 RCO

Page 43: 카운터와 쉬프트 레지스터

43

Asynchronous load and clear

Synchronous load and clear

Page 44: 카운터와 쉬프트 레지스터

44

Priority of counter enable, asynchronous load and clear

Priority of counter enable, synchronous load and clear

Page 45: 카운터와 쉬프트 레지스터

45

LPM 카운터

기본적으로 사용하는 port 는 clock, q[ ], eq[ ], parameter 는 LPM_WIDTH 임 .그 외에 나머지는 option임 .

LPM_WIDTH 를 제외한 모든Parameter들은 double quote.

Page 46: 카운터와 쉬프트 레지스터

46

LPM 카운터 예 (1) – 8-bit updown counter

Page 47: 카운터와 쉬프트 레지스터

47

LPM 카운터 예 (2) – Mod-500 down-counter

9-bit: 29 = 512

Page 48: 카운터와 쉬프트 레지스터

48

Mod-500 down-counter

Page 49: 카운터와 쉬프트 레지스터

49

LPM 카운터 예 (3) – 12-bit counter with aclr and sset

Page 50: 카운터와 쉬프트 레지스터

50

LPM 카운터 예 (3) – Sim. of a 12-bit counter with sset