1 8 장 대형 순차회로 문제의 해법 1) 시프트 레지스터 2) 카운터 3)ASM 도를 이용한 설계 4)One Hot encoding 5) 복잡한 예제
2 시프트 레지스터 그림 8.1 간단한 시프트 레지스터 추적 8.1 시프트 레지스터 타이밍
3 부하 (load) 를 줄이는 NOT 게이트가 있는 시프트 레지스터 – 클럭 부하 : 1 ( 앞에서는 4) – 입력 x 부하 : 1 ( 앞에서는 2)
4 시프트 레지스터 저장장치 –LOAD = 0 → 데이터는 n 개의 플립 플롭 순회 (circular shift) –LOAD = 1 → 새로운 x 값이 저장
직렬입력 병렬출력 시프트 레지스터 –Active low 정적 클리어 입력 – 병렬 (parallel) 출력 – 모뎀 입력 포트에 사용
6 병렬입력 (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 → 시프트 – 직렬출력
7 오른쪽 / 왼쪽 시프트 레지스터 (74194)
8 예제 8.1 입력 x 가 7 클럭 동안 계속 변경되면 출력 z 가 1 인 시스템 – 플립 플롭 - 최근 8 클럭 동안 x 값 저장 – 가장 최근 것 A, 가장 오래된 것 H –6 개만 필요
9 카운터 카운터 – 동기식 카운트, 동기식 적재 (active low), 비동기식 (active low) 클리어 – 적재 (Load = 0) :D = IN D C = IN C B = IN B A = IN A –Count (ENP=1, ENT=1) –OV: 오버플로우 출력
10 8- 비트 카운터 (74161 두개를 사용 ) – 처음 15 클럭 동안 : 우측 카운터 ( 낮은 자리 ) 만 활성화 – 카운터 =15( ) → 오버플로우 출력 (OV)=1. 좌측 카운터 활성화 – 다음 클럭 → 우측 카운터 = 0 (OV 도 0), 좌측 카운터는 1 증가 ( 카운터 =16) – 다음 15 클럭 동안 → 우측 카운터만 증가 – 카운터 =31( ), → 좌측 카운터 다시 활성화 – 다음 클럭 → 우측 카운터 = 0 (OV 도 0), 좌측 카운터는 1 증가 ( 카운터 =32)
11 예제 8.2 : MOD-120 카운터 (74161: 비동기 클리어 ) –74161 카운터 사용, 정적 클리어 – 최대값보다 하나 더 카운트하고 클리어 시킨다 –120 ( ) 에서 NAND 게이트가 클리어 신호 생성 – 정적 클리어 때문에 짧은 시간 동안 120 이 나타난다
12 예제 8.3: MOD-120 카운터 (74163: 동기식 클리어 ) –74163 카운터, 동기화된 클리어 – 클리어 입력 활성화, 클럭에 맞추어 모든 플립 플롭이 0 –119 ( ) 감지, 다음 클럭 펄스에서 클리어 – 카운터의 120 인 상태가 나타나지 않음
Down/Up´ 카운터
비동기 이진 카운터 – 진 (2 x 8) 클럭 X 점 연결 → 8 진 counter, 출력 D, C, B 클럭 Y 점 연결, A 점 X 점 연결 → 16 진 counter – 진 (2 x 5) – 진 (2 x 6)
15 예제 8.4 : 9 번째 클럭마다 한 개의 클럭펄스를 출력하는시스템 방법 1: ( 동기식 클리어 ) 사용 – … – 상태 8 인 동안만 D=1 → 카운터 리세트
까지 카운트하고 클리어 - 출력을 D 와 clock 을 AND 하여 발생 ( 방법 1 과 같이 ) – 상태 9 의 시작 부분에 glitch 발생 예제 8.4 방법 2: 74161( 비동기식 클리어 ) 사용 –Glitch 없애기 위해 7 이 될 때 출력을 발생
17 – 동기식 적재 –8, 9, 10, 11, 12, 13, 14, 15, 0, 8 … – 카운터 = 0 일 때 출력 1, 카운터에 8 적재 예제 8.4 방법 3: 을 이용한 다른 방법
18 예제 8.4 방법 4: 이용 –OV 출력 이용 –7, 8, 9, 10, 11, 12, 13, 14, 15, 7, … – 카운터 =15 → OV 출력 active low 적재 신호, 카운터에 7 적재 ( 출력 1)
ASM 도를 이용한 설계 19 ASM (Algorithmic State Machine) 방법 –Finite machine 을 설계할 때 사용되는 방법으로, 상태도와 유사하고 이해하기가 쉽다. 3 가지 기본요소 – 상태 (state), 판단 (condition check), 조건부 출력 (conditional output)
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(2 8 ) words (1 word = 12 bits) –Address lines: A 0, … A 7 –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
30 복잡한 예제 입력으로 들어온 연속적인 1 을 추적하여, 같은 수만큼 1 을 출력 –AND, OR, NOT 게이트, JK 플립 플롭, 상향 / 하향 카운터 이용 – 카운터로 연속적인 1 의 갯 수를 카운트하고 ( 카운터 증가 ), –1 이 출력되면서 카운터를 감소
31 방법 1 –x=1 → D/U=0, 카운터 증가 –X=0 → D/U =1, 카운터가 0 이 아닌 동안 감소, 출력 =1 – 카운터가 15 를 넘지 않을 때만 동작
32 방법 2 –15 개 이상의 입력에도, 최대 15 개의 1 이 나오도록 출력 제한 – 값 =15(1111) → x=1 이라도 카운터 비활성화
33 방법 3: 1 의 출력 완료까지 입력 무시 플립 플롭 Q, 카운터가 감소 중이고 x 가 무시 x = 0Q = 0count = 0EN = 0z = 0D/U = X x = 0Q = 0count = 1EN = 1z = 1D/U = 1 x = 0Q = 0count > 1EN = 1z = 1D/U = 1Q <- 1 x = 1Q = 0count ≠ 15 EN = 1z = 0D/U = 0 x = 1Q = 0count = 15 EN = 0z = 0D/U = X x = XQ = 1count > 1EN = 1z = 1D/U = 1 x = XQ = 1count = 1EN = 1z = 1D/U = 1Q <- 0 J = x (D + C + B)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)
34 방법 4: 세 개의 오른쪽 / 왼쪽 시프트 레지스터 이용 –12- 비트 시프트 레지스터 –x = 1 → S0 =1, S1 = 0, 오른쪽 시프트, 가장 왼쪽 비트에는 1 이 들어간다 –x = 0 → 왼쪽 시프트, 오른쪽에 0 을 적재 – 레지스터 수보다 많은 1 입력도 처리
35 예제 8.7: 16 상태 ( ) 를 순회하는 카운터 카운터 상태표
36 방법 1: JK 플립 플롭 4 개 사용 –JD = C A + C B + B AKD = C B + C A + B A –JC = D A + D B KC = D A + D B A –JB = D + 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
37 방법 2: 4- 비트 동기식 카운터 (74161 과 같은 ) 와 디코더 블럭 사용 디코더 블럭 진리표
38 방법 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, 비용 = $ 카운터 비용 – 카운터 비용 < $2.50 → 이 방법이 더 저렴