380 likes | 1.25k Vues
8 장 대형 순차회로 문제의 해법. 시프트 레지스터 카운터 ASM 도를 이용한 설계 One Hot encoding 복잡한 예제. 시프트 레지스터. 그림 8.1 간단한 시프트 레지스터. 추적 8.1 시프트 레지스터 타이밍. 부하 (load) 를 줄이는 NOT 게이트가 있는 시프트 레지스터. 클럭 부하 : 1 ( 앞에서는 4) 입력 x 부하 : 1 ( 앞에서는 2). 시프트 레지스터 저장장치.
E N D
8장 대형 순차회로 문제의 해법 • 시프트 레지스터 • 카운터 • ASM 도를 이용한 설계 • One Hot encoding • 복잡한 예제
시프트 레지스터 그림 8.1 간단한 시프트 레지스터 추적 8.1 시프트 레지스터 타이밍
부하(load)를 줄이는 NOT 게이트가 있는 시프트 레지스터 • 클럭 부하: 1 (앞에서는 4) • 입력 x 부하: 1 (앞에서는 2)
시프트 레지스터 저장장치 • LOAD = 0 → 데이터는 n개의 플립 플롭 순회 (circular shift) • LOAD = 1 → 새로운 x값이 저장
74164 직렬입력 병렬출력 시프트 레지스터 • Active low 정적 클리어 입력 • 병렬(parallel) 출력 • 모뎀 입력 포트에사용
병렬입력(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 → 시프트 • 직렬출력
예제 8.1 입력 x가 7 클럭 동안 계속 변경되면 출력 z가 1인 시스템 • 플립 플롭 - 최근 8 클럭 동안 x 값 저장 • 가장 최근 것 A, 가장 오래된 것 H • 6개만 필요
카운터 • 74161 카운터 • 동기식 카운트, 동기식 적재(active low) , 비동기식(active low) 클리어 • 적재(Load = 0) : D = IND • C = INC • B = INB • A = INA • Count (ENP=1, ENT=1) • OV: 오버플로우 출력
8-비트 카운터 (74161 두개를 사용) • 처음 15 클럭 동안: 우측 카운터(낮은 자리) 만 활성화 • 카운터=15(0000 1111) → 오버플로우 출력(OV)=1. 좌측 카운터 활성화 • 다음 클럭 → 우측 카운터 = 0 (OV도 0), 좌측 카운터는 1 증가 (카운터=16) • 다음 15 클럭 동안 → 우측 카운터만 증가 • 카운터=31(0001 1111), → 좌측 카운터 다시 활성화 • 다음 클럭 → 우측 카운터 = 0 (OV도 0), 좌측 카운터는 1 증가 (카운터=32)
예제 8.2 : MOD-120 카운터 (74161: 비동기 클리어) • 74161 카운터 사용,정적 클리어 • 최대값보다 하나 더 카운트하고 클리어 시킨다 • 120 (01111000)에서 NAND 게이트가클리어 신호 생성 • 정적 클리어 때문에 짧은 시간 동안 120 이 나타난다
예제 8.3: MOD-120 카운터 (74163: 동기식 클리어) • 74163 카운터, 동기화된 클리어 • 클리어 입력 활성화, 클럭에 맞추어 모든 플립 플롭이 0 • 119 (01110111) 감지, 다음 클럭 펄스에서 클리어 • 카운터의 120인 상태가 나타나지 않음
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)
예제 8.4 : 9 번째 클럭마다 한 개의 클럭펄스를 출력하는시스템방법 1: 74163 (동기식 클리어 ) 사용 • 0 1 2 3 4 5 6 7 8 0 … • 상태 8인 동안만 D=1 → 카운터 리세트
예제 8.4 방법 2: 74161(비동기식 클리어) 사용 • 9 까지 카운트하고 클리어 • 출력을 D와 clock을 AND하여 발생(방법 1과 같이) • 상태 9의 시작 부분에 glitch 발생 • Glitch 없애기 위해 7이 될 때 출력을 발생
예제 8.4 방법 3: 74163을 이용한 다른 방법 • 동기식적재 • 8, 9, 10, 11, 12, 13, 14, 15, 0, 8 … • 카운터= 0 일 때 출력 1, 카운터에 8 적재
예제 8.4 방법 4: 74163 이용 • OV 출력 이용 • 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, … • 카운터=15→OV 출력 • active low 적재 신호, 카운터에 7 적재(출력 1)
ASM 도를 이용한 설계 • ASM(Algorithmic State Machine) 방법 • Finite machine을 설계할 때 사용되는 방법으로, 상태도와 유사하고 이해하기가 쉽다. • 3가지 기본요소 • 상태(state), 판단(condition check), 조건부 출력(conditional output)
Serial Adder • A, B : 8bit 시프트 레지스터 • 결과: B 레지스터
직렬 덧셈기에 대한 ASM 도 • 신호 s : 덧셈과정 시작 • 신호 d : 계산완료 • N: 3 bit counter
One Hot Encoding • One Hot: 한 bit만 1이 되는 경우 (반대는 One Cold) • Ex) decoder output • 한 bit 만 1이 되도록 encoding 하게 되면 플립플롭 수가 많아지지만 설계가 쉬워진다. • 아래 상태도에서 각 상태에 대하여 A, B, C, D4개의 플립플롭을 할당하면 • A* = x (A+B+C+D) • B* = x A • C* = x B • D* = x (C+D) • z = D
간단한 컴퓨터 설계 • 메모리 : 명령어와 데이터를 저장 • 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
간단한 컴퓨터 설계 • 명령어 형식 • OP: 명령어 코드 • 00 : 메모리에서 레지스터로 로드 • 01 : 레지스터에서 메모리로 저장 • 10 : 메모리 내용과 레지스터 내용을 더함 • 11 : 점프 • N : 레지스터 선택 비트 • 0 : B 레지스터 • 1 : C 레지스터 • M : 주소지정방식 • 0 : 직접 주소지정 • 1 : 간접 주소지정
명령어 실행 단계 • 명령어 fetch • PC 내용을 주소 선으로 보냄 • Read 신호 • 명령어 레지스터 ( R register ) 에 저장 • PC update • 명령어 decode, operand 결정 • Operand 준비 • 실행
복잡한 예제 • 입력으로 들어온 연속적인 1을 추적하여, 같은 수만큼 1을 출력 • AND, OR, NOT 게이트, JK 플립 플롭, 74191 상향/하향 카운터 이용 • 카운터로 연속적인 1의 갯 수를 카운트하고 (카운터 증가), • 1 이 출력되면서 카운터를 감소
방법 1 • x=1 → D/U=0, 카운터 증가 • X=0 → D/U =1,카운터가 0 이 아닌 동안 감소, 출력=1 • 카운터가 15를 넘지 않을 때만 동작
방법 2 • 15개 이상의 입력에도, 최대 15개의 1이 나오도록 출력 제한 • 값=15(1111)→ x=1 이라도 카운터 비활성화
방법 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 Q <- 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) 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)
방법 4: 세 개의 오른쪽/왼쪽 시프트 레지스터 이용 • 12-비트 시프트 레지스터 • x = 1 → S0 =1, S1 = 0, 오른쪽 시프트, 가장 왼쪽 비트에는 1이 들어간다 • x = 0 → 왼쪽 시프트,오른쪽에 0을 적재 • 레지스터 수보다 많은 1 입력도 처리
예제 8.7: 16 상태(1 2 4 7 11 0 6 13 5 14 8 3 15 12 10 9)를 순회하는 카운터 • 카운터 상태표
방법 1: JK 플립 플롭 4개 사용 • JD = C A + C B + B A KD = 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
방법 2: 4-비트 동기식 카운터(74161과 같은)와 디코더 블럭 사용 • 디코더 블럭 진리표
방법 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 → 이 방법이 더 저렴