시프트 레지스터

Download Report

Transcript 시프트 레지스터

8장 대형 순차회로 문제의 해법
1) 시프트 레지스터
2) 카운터
3) ASM 도를 이용한 설계
4) One Hot encoding
5) 복잡한 예제
1
시프트 레지스터
그림 8.1 간단한 시프트 레지스터
추적 8.1 시프트 레지스터 타이밍
2
부하(load)를 줄이는 NOT 게이트가 있는 시프트 레지스터
– 클럭 부하: 1
(앞에서는 4)
– 입력 x 부하: 1
(앞에서는 2)
3
시프트 레지스터 저장장치
– LOAD = 0 → 데이터는 n개의 플립 플롭 순회 (circular shift)
– LOAD = 1 → 새로운 x값이 저장
4
74164 직렬입력 병렬출력 시프트 레지스터
– Active low 정적 클리어 입력
– 병렬(parallel) 출력
– 모뎀 입력 포트에 사용
5
병렬입력(parallel-in) 시프트 레지스터
– 정적인 적재(74165)
• Load’ = 1, CLR’와 PRE’가 모두 1 → 시프트
• Load’ = 0 → 클럭 비활성화, PRE’= IN2’, CLR’= IN2, 플립플롭 출력 = IN2
– 동기적인 적재(74166)
• Enable’ = 0 → 클럭 전달, 아니면 클럭이 인가되지 않음
• Enable’ = 0, Load’ = 0 → IN2가 q2에 저장,
• Load’가 1 → 시프트
– 직렬출력
6
오른쪽/왼쪽 시프트 레지스터(74194)
7
예제 8.1 입력 x가 7 클럭 동안 계속 변경되면 출력 z가 1인 시스템
– 플립 플롭 - 최근 8 클럭 동안 x 값 저장
– 가장 최근 것 A, 가장 오래된 것 H
– 6개만 필요
8
카운터
•
74161 카운터
– 동기식 카운트, 동기식 적재(active low) , 비동기식(active low) 클리어
– 적재(Load  = 0) :
D = IND
C = INC
B = INB
A = INA
– Count (ENP=1, ENT=1)
– OV: 오버플로우 출력
9
8-비트 카운터 (74161 두개를 사용)
– 처음 15 클럭 동안: 우측 카운터(낮은 자리) 만 활성화
– 카운터=15(0000 1111) → 오버플로우 출력(OV)=1. 좌측 카운터 활성화
– 다음 클럭 → 우측 카운터 = 0 (OV도 0), 좌측 카운터는 1 증가 (카운터=16)
– 다음 15 클럭 동안 → 우측 카운터만 증가
– 카운터=31(0001 1111), → 좌측 카운터 다시 활성화
– 다음 클럭 → 우측 카운터 = 0 (OV도 0), 좌측 카운터는 1 증가 (카운터=32)
10
예제 8.2 : MOD-120 카운터 (74161: 비동기 클리어)
– 74161 카운터 사용, 정적 클리어
– 최대값보다 하나 더 카운트하고 클리어 시킨다
– 120 (01111000)에서 NAND 게이트가 클리어 신호 생성
– 정적 클리어 때문에 짧은 시간 동안 120 이 나타난다
11
예제 8.3: MOD-120 카운터 (74163: 동기식 클리어)
– 74163 카운터, 동기화된 클리어
– 클리어 입력 활성화, 클럭에 맞추어 모든 플립 플롭이 0
– 119 (01110111) 감지, 다음 클럭 펄스에서 클리어
– 카운터의 120인 상태가 나타나지 않음
12
74191 Down/Up´ 카운터
13
7493 비동기 이진 카운터
– 7493 16 진 (2 x 8)
• 클럭 X점 연결 → 8진 counter, 출력 D, C, B
• 클럭 Y점 연결, A점 X점 연결 → 16진 counter
– 7490 10진 (2 x 5)
– 7492 12 진 (2 x 6)
14
예제 8.4 : 9 번째 클럭마다 한 개의 클럭펄스를
출력하는시스템
방법 1: 74163 (동기식 클리어 ) 사용
– 0123456780…
– 상태 8인 동안만 D=1 → 카운터 리세트
15
예제 8.4
방법 2: 74161(비동기식 클리어) 사용
- 9 까지 카운트하고 클리어
- 출력을 D와 clock을 AND하여 발생
(방법 1과 같이)
– 상태 9의 시작 부분에 glitch 발생
– Glitch 없애기 위해 7이 될 때 출력을 발생
16
예제 8.4
방법 3: 74163을 이용한 다른 방법
– 동기식 적재
– 8, 9, 10, 11, 12, 13, 14, 15, 0, 8 …
– 카운터= 0 일 때  출력 1, 카운터에 8 적재
17
예제 8.4
방법 4: 74163 이용
– OV 출력 이용
– 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, …
– 카운터=15 → OV 출력
active low 적재 신호, 카운터에 7 적재(출력 1)
18
ASM 도를 이용한 설계
• ASM (Algorithmic State Machine) 방법
– Finite machine을 설계할 때 사용되는 방법으로, 상태도와 유사하
고 이해하기가 쉽다.
• 3가지 기본요소
– 상태(state), 판단(condition check), 조건부 출력(conditional
output)
19
Moore 상태도와 ASM 도
20
Mealy 상태도와 ASM 도
21
Serial Adder
• A, B : 8bit 시프트 레지스터
• 결과: B 레지스터
22
직렬 덧셈기에 대한 ASM 도
• 신호 s : 덧셈과정 시작
• 신호 d : 계산완료
• N: 3 bit counter
23
One Hot Encoding
• One Hot: 한 bit만 1이 되는 경우 (반대는 One Cold)
– Ex) decoder output
• 한 bit 만 1이 되도록 encoding 하게 되면 플립플롭 수가 많아지
지만 설계가 쉬워진다.
• 아래 상태도에서 각 상태에 대하여 A, B, C, D 4개의 플립플롭을
할당하면
–
–
–
–
–
A* = x (A+B+C+D)
B* = x A
C* = x B
D* = x (C+D)
z=D
24
간단한 컴퓨터 설계
• 메모리 : 명령어와 데이터를 저장
– 256(28) words (1 word = 12 bits)
– Address lines: A0, … A7
– r’/w : read/write 제어선
• 레지스터
– 사용자 주소지정 가능한 레지스터: B, C
– 내부 레지스터
• R : 12bit 명령어 레지스터 (교재의 I 와 R은 동일한 것)
• P : Program Counter
• T : 12 bit temporary register
25
간단한 컴퓨터 설계
• 명령어 형식
– OP: 명령어 코드
•
•
•
•
00
01
10
11
:
:
:
:
메모리에서 레지스터로 로드
레지스터에서 메모리로 저장
메모리 내용과 레지스터 내용을 더함
점프
– N : 레지스터 선택 비트
• 0 : B 레지스터
• 1 : C 레지스터
– M : 주소지정방식
• 0 : 직접 주소지정
• 1 : 간접 주소지정
26
명령어 실행 단계
• 명령어 fetch
– PC 내용을 주소 선으로 보냄
– Read 신호
– 명령어 레지스터 ( R register ) 에 저장
•
•
•
•
PC update
명령어 decode, operand 결정
Operand 준비
실행
27
28
One Hot Encoding 방식의 제어기
29
복잡한 예제
•
입력으로 들어온 연속적인 1을 추적하여, 같은 수만큼 1을 출력
– AND, OR, NOT 게이트, JK 플립 플롭, 74191 상향/하향 카운터 이용
– 카운터로 연속적인 1의 갯 수를 카운트하고 (카운터 증가),
– 1 이 출력되면서 카운터를 감소
30
방법 1
– x=1 → D/U=0, 카운터 증가
– X=0 → D/U =1,카운터가 0 이 아닌 동안 감소, 출력=1
– 카운터가 15를 넘지 않을 때만 동작
31
방법 2
– 15개 이상의 입력에도, 최대 15개의 1이 나오도록 출력 제한
– 값=15(1111) → x=1 이라도 카운터 비활성화
32
방법 3: 1의 출력 완료까지 입력 무시
•플립 플롭 Q, 카운터가 감소 중이고 x가 무시
•x = 0
Q=0
count = 0 EN = 0
z=0
D/U = X
•x = 0
Q=0
count = 1 EN = 1
z=1
D/U = 1
•x = 0
Q=0
count > 1 EN = 1
z=1
D/U = 1
•x = 1
Q=0
count ≠ 15 EN = 1
z=0
D/U = 0
•x = 1
Q=0
count = 15 EN = 0
z=0
D/U = X
•x = X
Q=1
count > 1 EN = 1
z=1
D/U = 1
•x = X
Q=1
count = 1 EN = 1
z=1
D/U = 1 Q <- 0
•J = x (D + C + B)
Q <- 1
K = D C B A
•z = Q + x Q (D + C + B + A) = Q + x (D + C + B + A)
•EN = x (A B C D) + z
•D/U = Q + x (D + C + B + A)
33
방법 4: 세 개의 오른쪽/왼쪽 시프트 레지스터 이용
– 12-비트 시프트 레지스터
– x = 1 → S0 =1, S1 = 0, 오른쪽 시프트, 가장 왼쪽 비트에는 1이 들어간다
– x = 0 → 왼쪽 시프트, 오른쪽에 0을 적재
– 레지스터 수보다 많은 1 입력도 처리
34
예제 8.7: 16 상태(1 2 4 7 11 0 6 13 5 14 8 3 15 12 10
9)를 순회하는 카운터
카운터 상태표
35
방법 1: JK 플립 플롭 4개 사용
– JD = C A + C B + B A
– JC = D A + D B
– JB = D + A
KD = C B + C A + B A
KC = D A + D B A
KB = D + A
– JA = D C + D C
KA = D B + C B + D C B
– 2-입력 게이트 18개, 3-입력 게이트 5개 → 50센트 IC 7개, 총 비용=$5.50
36
방법 2: 4-비트 동기식 카운터(74161과 같은)와
디코더 블럭 사용
디코더 블럭 진리표
37
방법 2 계속
–
–
–
–
W = C B A + D B A + C B A + D B A
X = D B + D B
Y = C A + C A
Z = B A + B A
– 2-입력 게이트 9개, 3-입력 게이트 4개, 4-입력 게이트 1개
– 카운터 출력(D, C, B, A) NOT 게이트 4개
– 총 패키지 수=6, 비용= $3.00 + 카운터 비용
– 카운터 비용 < $2.50 → 이 방법이 더 저렴
38