전공지식정리/논리회로

비동기 카운터 응용

TimeSave 2020. 12. 7. 00:04

1. modulo-m 비동기 카운터
 1.1 비동기 10진 카운터(BCD카운터, decade 카운터)
  : 0~9 까지 10개의 수를 카운팅한다.
16개의 상태에서 10~15, 6개를 제거하면 된다.

1.2 방법
 조건 : F/F에 clear기능이 있어야한다.
 원리 :  NAND게이트 1개를 추가해서 최고값+1이되는 순간을 포착하여 전체를 0으로 clear해주어 9까지만 카운팅 한다.

9+1 = 10 = 1010이므로,  Qd =1, Qb = 1 인 순간에 초기화 해주면 된다.
 Qd, Qb를 Nand로 연결하여 clear에 넣어준다.
11인 순간, 0이되고, active low인 CLR단자에 들어가면 clear되어 0부터 시작하게 된다.

1.3 문제점
강제초기화(비동기입력) CLR 때문에, glitch가 생긴다
glitch : 짧은 순간동안 신호가 바뀌어서, 즉, 원하지 않는 값을 잠깐 갖고 있어야 해서 오동작의 위험이 생기는 것. 

2.  3자리 10진 카운터(000~999)
10진 카운터 3개를 ripple의 형태로 연결한다.
주기가 2배로 되면서, 특정 edge에서 윗 비트가 변하므로, 연결만 해주면 숫자가 차근차근 올라가게 된다.

3. 프리셋(preset) 카운터
: 0보다 큰수에서 카운팅 하는 카운터 
 
원리 : Load기능이란 것을 추가해 특정 값으로 preset해준다.
Load가 0때, preset에 1을입력, preset동작 안함 (active low)
load가 1때, preset에 0을 입력, preset동작
load와 NAND하여 원하는 pr값 그대로 preset 된다.

여기서 의문! 시작은 preset에서 출발하는 것이 이해된다. 그렇지만 000으로 다시 돌아가지 않나?
=> 올바른 의문이다.
해결방법 : NOR게이트를 이용하여 출력이 000때, preset해준다.
즉, 최고값에 도달하여 000으로 넘어가는 순간, preset을 다시 실행하여 원하는 결과를 얻는다.

단점: 0에서 preset값 사이를 버리게 되어, 그만큼의 카운팅 상태수가 줄어든다. 즉, (최대 modulus - preset수) 만큼만 카운팅 가능.