밀리머신
밀리머신은 출력이 현재 상태와 입력에 모두 관련되는 경우입니다.
현재 상태가 무엇이고, 그때의 특정 입력이 무엇이냐에 따라 출력이 화살표에 표시됩니다.
직렬 덧셈기 회로
직렬 덧셈기는 두개의 n비트 2진수
병렬 덧셈기와의 차이점은 입력이 순차적으로 들어오고,
그에 따른 출력도 순차적으로 나간다는 점입니다.
상태는 덧셈의 결과로 생성되는 1비트의 캐리 값으로 잡으면,
필요한 FF의 개수는 1개임을 알 수 있습니다.
또한 덧셈을 할 수 있는 Full Adder와 함께 구성해보겠습니다.
우선 진리표 먼저 구성해보겠습니다.

상태를 다음과 같이 구성하고, 상태도를 그려보겠습니다.

이에 따른 다음 상태(
다음 상태( |
||
00 | 0 | 0 |
01 | 0 | 1 |
11 | 1 | 1 |
10 | 0 | 1 |
덧셈 결과( |
||
00 | 0 | 1 |
01 | 1 | 0 |
11 | 0 | 1 |
10 | 1 | 0 |
이에 따라 얻은 논리식은 다음과 같습니다.
이는 Full Adder와 같고, FF의 출력은
이에 적당한 FF은 D-FF입니다.
따라서 구성된 직렬 덧셈기 회로는 다음과 같습니다.


밀리타입 회로의 출력 오류 현상
밀리머신은 무어머신과 다르게 클럭입력의 에지에서만 출력이 변하는 것이 아니라
입력또한 출력에 관여하기 때문에 오류가 있을 가능성이 있습니다.
예시를 보여드리겠습니다.

위와 같이 출력(
사용한 FF은 JK-FF이기 때문에 특성식
이제 현재상태(
00 | 00 | 01 | 0 | 1 |
01 | 01 | 11 | 1 | 0 |
11 | 11 | 00 | 0 | 1 |
10 | 10 | 01 | 0 | 1 |
FF이 2개이므로 상태는 총
이에 따라 상태 테이블을 재구성하면 다음과 같습니다.
현재상태 | 다음상태 | 현재출력 | ||
0 | 1 | |||
1 | 0 | |||
0 | 1 | |||
0 | 1 |
위의 상태 테이블에 맞춰 작성한 상태도는 다음과 같습니다.(화살표의 라벨은 입력/출력,

이제 타이밍도를 보면서 어떤 문제가 있는지 확인해보겠습니다.

빨간 동그라미가 쳐진 곳을 보면, 클럭입력의 하강에지가 아닌 부분에서
출력
하나하나 분석해보겠습니다.
1. 첫번째 클럭입력 전
클럭입력이 들어오기전
따라서 출력
2. 첫번째 클럭입력의 하강에지
예정대로
3. 첫번째 클럭입력 후,
첫번째 클럭입력 이후
이때는 상태변화가 이루어지지 않기 때문에
타이밍도에서 갑자기 출력이 0으로 바뀌었다가 다시 1로 바뀌는 현상이 생기게 됩니다.
이런 현상을 Glitch 라고 합니다.
4. 세번째 클럭입력의 하강에지
예정대로
5. 세번째 클럭입력 후,
세번째 클럭입력 이후
이때도 마찬가지로 상태변화가 이루어지지 않기 때문에
타이밍도에서 갑자기 출력이 1로 바뀌었다가 다시 0으로 바뀌는 현상이 생기게 됩니다.
이런 현상을 Spike 라고 합니다.
'CS > 논리회로' 카테고리의 다른 글
[논리회로] 무어머신과 순차 패리티 체커 회로 (0) | 2022.06.11 |
---|---|
[논리회로] 카운터 (0) | 2022.06.11 |
[논리회로] 레지스터 (0) | 2022.06.10 |
[논리회로] 플립플롭 (0) | 2022.06.10 |
[논리회로] 래치와 투과성 문제 (0) | 2022.06.10 |