논리회로 CH 12. Register & Counter

Alpha, Orderly·2023년 5월 2일
0

논리회로

목록 보기
11/12

레지스터

  • CPU 안에 있는 저장장치
  • 임시 저장장치
int a;
int b;
int c = a + b;
  • 여기서 c를 계산하기 위해선 a와 b를 레지스터로 가져와야 한다.

4-bit 레지스터의 구현

  • D 플립플롭 4개를 사용한다.
  • LOAD ( Write ) 신호를 이용해 레지스터에 값을 새로 설정할 타이밍을 정할수 있다.
    • LOAD가 0일시 값이 변하지 않고 유지된다.
  • 각각의 flip-flop 또한 preN과 clrN 통해 값을 설정할수 있다.

  • 모든 레지스터의 output은 ALU에 연결되기도 하는데, 공유버스에서 여러 레지스터가 얽히는것을 방지 하기 위해
    tri state buffer를 설치한다.
  • 이를 통해 버스 중재를 한다.

Shift register

  • n-bit 레지스터에 Shift bit 입력을 받아 레지스터 동작 또는 시프트 동작을 하도록 할수 있다.

  • 개별 입력에 4*1 MUX를 구성하고

    • Sh : 0 / L : 0 일시 원래 값 유지 >> Q 출력을 그대로 가져와 D 입력에 넣는다.
    • Sh : 0 / L : 1 일시 새로운 값 load >> 새로운 값을 병렬로 입력 받는다.
    • Sh : 1 / L : ? 일시 직렬 입력을 받는다 >> 즉 맨 왼쪽은 새로운 비트 입력, 나머지에는 쉬프트가 일어난다.

Binary counter

  • Counter
    • 숫자를 세는것
  • Binary Counter
    • 한번 동작 시 마다 2진수가 1씩 증가하는 카운터.
    • 3bit counter의 동작 예시
      • 000 > 001 > 010 > 011 > 100 > 101 > 110 > 111 > 000
      • 다시 0으로 되돌아온다.

    3-bit Binary counter의 구현

  • 3개의 T Flip-flop을 사용한다.
  • 3번째 비트 : 계속 반전되기 때문에 1을 넣는다.
  • 2번째 비트 : 이전의 3번째 비트가 1일때 반전되기에 3번째 비트를 그대로 넣는다
  • 1번째 비트 : 이전의 2, 3 번째 비트가 둘 다 1일때 반전되기에 둘을 AND 하여 넣는다.

용도

  • 프로그램 카운터에 사용될수 있다.
    • 분기 명령어에 도달할시 임시 값으로 지정할수도 있다.

3-bit Binary counter 구현의 접근

1. 트랜지션 테이블의 작성

  • 이전 상태의 3비트와 다음 상태의 3비트 및 변화를 위해 필요한 T 플립플롭의 입력을 테이블로 작성한다..

2. 카르노 맵 만들기

  • 이를 각각 C, B, A 입력에 대한 TCT_C, TBT_B, TAT_A 출력으로 간주해 카르노맵을 작성한다.

TA=1T_A = 1
TB=AT_B = A
TC=ABT_C = AB

3-bit Binary counter를 3개의 D Flip-flop 으로 구현하기

DC=CBA+CB+CAD_C = CBA + CB' + CA'
DB=BA+BAD_B = B'A + BA' - B와 A의 XOR 과 동일하다.
DA=AD_A = A'

SR / JK 플립플롭에 대해 카운터 구성하기

  • CC 에서 C+C^+ 로 값이 변하는데 사용되는 ScS_cRcR_c 비트를 찾으면 된다, 즉 최우측의 길이가 2배가 된다.
  • 여기서 중요한 점은 각각의 Transition에 사용되는 S와 R 비트인데
  • Transition시 두가지의 SR 비트가 존재하는 경우가 있는데, 이 경우
  • S나 R중 다르게 사용되는 비트를 Don't care로 간주하면 된다.
  • 0이나 1중 아무거나 들어와도 상관이 없기 때문이다.

  • 결과
    이를 이용해 SR 플립 플롭으로 커스텀 카운터를 구현한 예시

010과 011은 상태에 포함되지 않아 전부 Don't care로 되어 있다
Don't care를 고려해 카르노맵을 작성 및 Prime implicant를 뽑아낸다

JK 플립플롭 또한 사용되는 J/K 비트를 확인해 Don't care로 바꿀 필요가 있다.


Counter

  • 임의의 순서로 반복하는 카운터 또한 만들수 있다.
    • Ex. 000 > 100 > 111 > 010 > 011 > 000 ( 반복 )
  • 위의 방식대로 트랜지션 테이블과 카르노맵을 이용해 구현할수 있다.
  • 입력으로 들어올수 없는 / 상태로 될수 없는 경우는 Don't care로 처리한다.
profile
만능 컴덕후 겸 번지 팬

0개의 댓글