카운터는 고정된 순환 회로를 통해 클럭 펄스의 갯수를 처리하기 위한 논리회로입니다.
대표적으로 2진수 값이 1씩 증가하는 2진 카운터가 있으며, n비트의 레지스터를 통해 2n-1 까지 카운트할 수 있습니다. 예를 들어 3비트의 레지스터를 통해서는 0 ~ 7까지 카운트 할 수 있으며 다음과 같이 순환합니다.
카운터에는 동기식 카운터와 비동기식 카운터가 있습니다.
1. 비동기식 카운터
리플 카운터라고도 불리는 비동기식 카운터는 이전 플립플롭의 출력이 다음 플립플롭의 클럭으로 사용되는 카운터 입니다.
보통 J-K 플립플롭 또는 T 플립플롭으로 설계되며, 숫자가 증가하는 상향 카운터(Up Counter)와 숫자가 감소하는 하향 카운터(Down Counter)가 있습니다.
해당 카운터는 카운트가 1씩 증가하는 상향 카운터이며, 다음과 같은 타이밍도로 나타낼 수 있습니다.
Enable이 1인 경우 진리표는 다음과 같습니다.
CLOCK 주기 |
Q2 |
Q1 |
Q0 |
10진수 |
1 |
0 |
0 |
0 |
0 |
2 |
0 |
0 |
1 |
1 |
3 |
0 |
1 |
0 |
2 |
4 |
0 |
1 |
1 |
3 |
5 |
1 |
0 |
0 |
4 |
6 |
1 |
0 |
1 |
5 |
7 |
1 |
1 |
0 |
6 |
8 |
1 |
1 |
1 |
7 |
하향 카운터의 경우 Q’ 출력을 클럭으로 사용하며, 카운트가 1씩 감소합니다.
멀티플렉서를 통해 상하향 카운터를 만들 수도 있습니다.
비동기식 카운터는 동기식 카운터에 비해 회로는 간단하지만 전달지연이 커진다는 단점이 있습니다.
2. 동기식 카운터
동기식 카운터는 비동기식 카운터의 전달지연을 보완하기 위해 플립플롭에 공통의 클럭신호를 사용하는 카운터입니다.
모든 플립플롭은 동일한 클럭신호를 받으며, 이전 플립플롭의 출력이 1인 경우에만 다음 플립플롭이 토글됩니다.
3. 링 카운터
링 카운터는 마지막 플립플롭의 출력이 첫 번째 플립플롭의 입력으로 피드백되는 링 형태로 구성된 카운터를 말합니다.
링카운터는 모든 플립플롭이 0이라면 000만 출력되기 때문에 최소한 1비트는 1로 프리셋할 필요가 있습니다.
|