밀리형과 무어형 상태 기계의 차이: 출력·타이밍·상태 수·HDL 작성법 비교

상태 기계(스테이트 머신)는 현재 상태를 기억하는 레지스터, 다음 상태를 정하는 조합 회로, 출력을 정하는 조합 회로로 이루어집니다. 밀리형과 무어형의 차이는 출력이 무엇으로 정해지느냐입니다. 밀리형에서는 출력이 현재 상태와 현재 입력 양쪽으로 정해지며, 입력의 변화가 같은 사이클 안에 출력에 나타납니다. 무어형에서는 출력이 현재 상태만으로 정해지며, 입력의 변화는 클럭으로 상태가 바뀐 뒤에 출력에 나타나므로 반응이 1사이클 늦습니다. 밀리형은 상태가 적고 반응이 빠르다는 점, 무어형은 출력이 안정되고 타이밍을 예측하기 쉽다는 점이 특징입니다.

비교 항목밀리형무어형
출력을 정하는 것현재 상태와 현재 입력현재 상태만
상태 전이도에서 출력을 쓰는 방법전이 화살표에 '입력/출력' 형태로 쓴다상태 원 안에 상태 이름과 함께 쓴다
입력에 대한 반응입력이 바뀌면 클럭을 기다리지 않고 같은 사이클 안에 출력이 바뀐다다음 클럭으로 상태가 바뀐 뒤에 출력이 바뀐다. 밀리형보다 1사이클 늦다
상태 수('101'을 겹침 허용으로 검출하는 예)3상태(아무것도 일치하지 않음, 1까지 일치, 10까지 일치)4상태(출력 1을 나타내는 '101 검출' 상태가 따로 필요)
상태 수(일반)같은 기능이라면 무어형과 같거나 적다밀리형의 상태를 들어오는 전이의 출력마다 나눌 필요가 있어 많아지기 쉽다
글리치와 잡음입력의 글리치나 잡음이 조합 회로를 거쳐 그대로 출력에 나타난다입력의 잡음은 출력에 전달되지 않는다. 출력을 상태 레지스터의 비트에서 직접 꺼내도록 인코딩하면 출력의 글리치도 없앨 수 있다
타이밍 경로입력에서 출력까지 조합 회로가 이어져, 앞뒤 회로를 포함한 경로가 길어진다. 밀리형끼리 연결하면 조합 루프가 생길 수 있다출력은 클럭 에지 뒤의 상태만으로 정해지므로 경로가 레지스터로 끊겨 타이밍을 분석하기 쉽다
HDL 작성법출력을 정하는 조합 회로 블록에서 상태에 더해 입력도 참조한다출력 식은 상태만 참조한다(case 문으로 상태마다 출력을 정하는 등). 출력을 레지스터에서 내는 경우도 많다
적합한 용도입력에 1사이클도 늦지 않고 응답하고 싶은 제어, 상태 수를 줄이고 싶을 때깨끗한 출력이 필요한 제어 신호(다른 클럭의 회로나 칩 밖으로 내보내는 신호 등), 타이밍을 예측하기 쉽게 하고 싶을 때

수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.

상황별 선택 기준

밀리형
입력에 같은 사이클에 응답하고 싶을 때나 상태 수를 적게 하고 싶을 때 적합합니다. 입력은 미리 클럭에 동기화해 두고, 출력은 같은 클럭의 플립플롭으로 받는 등 일시적인 글리치가 문제가 되지 않는 사용법으로 합니다. 출력을 플립플롭으로 다시 받으면 글리치는 사라지지만, 타이밍은 무어형과 마찬가지로 1사이클 늦어집니다.
무어형
출력의 안정성과 타이밍의 예측 용이성을 중시할 때 적합합니다. 입력의 잡음이 출력에 전달되지 않으므로 중요한 제어 신호나 외부로 내보내는 신호에 쓰기 쉬워집니다. 반응이 1사이클 늦는 점과 상태가 늘어나기 쉬운 점을 고려해 고릅니다. 실제 설계에서는 출력마다 밀리형과 무어형을 구분해 쓰거나 조합하기도 합니다.

자주 묻는 질문

'1사이클 늦는다'는 것은 구체적으로 어떤 뜻인가요?

'101'을 검출하는 회로로 생각하면, 밀리형은 '10까지 일치' 상태에서 입력이 1이 된 사이클 안에 출력을 1로 합니다. 무어형은 그 1을 클럭 에지에서 받아들여 '101 검출' 상태로 옮긴 뒤에 출력이 1이 되므로, 출력이 1이 되는 것은 다음 사이클입니다. 둘 다 같은 입력열을 같은 방식으로 검출하지만, 무어형의 출력은 밀리형보다 1사이클 뒤로 밀립니다.

밀리형과 무어형은 서로 변환할 수 있나요?

할 수 있습니다. 밀리형의 상태를 그곳으로 들어오는 전이의 출력마다 나누어 무어형의 상태로 하면 같은 입출력 관계를 얻을 수 있지만, 상태가 늘어날 수 있고 출력은 1사이클 늦게 나타납니다. 반대로 무어형 각 상태의 출력을 그 상태로 들어오는 전이의 출력으로 고쳐 쓰면 밀리형이 되며, 출력은 1사이클 빨리 나타납니다. 이때 상태를 합칠 수 있는 경우도 있습니다.

HDL 기술에서 밀리형인지 무어형인지는 어디서 정해지나요?

출력을 정하는 식으로 정해집니다. 상태 레지스터를 갱신하는 블록과 다음 상태나 출력을 정하는 조합 회로 블록으로 나누어 썼을 때, 출력 식에 입력이 포함되어 있으면 밀리형, 상태만으로 정해지면 무어형입니다. 조합 회로 블록에서는 모든 조건에서 출력에 값을 대입해 의도하지 않은 래치를 만들지 않도록 합니다.

무어형이라면 출력에 글리치가 나오지 않나요?

입력의 변화나 잡음은 출력에 전달되지 않지만, 상태로부터 출력을 만드는 조합 회로가 있으면 상태가 바뀌는 순간에 여러 비트가 동시에 바뀌어 글리치가 나올 수 있습니다. 출력을 상태 레지스터의 비트에서 그대로 꺼내는 인코딩으로 하거나 출력을 플립플롭으로 다시 받으면, 글리치 없는 출력으로 만들 수 있습니다.

이해도 확인

밀리(Mealy)형 상태 머신의 특징으로 올바른 것은?

  1. A출력이 현재 상태만으로 결정되며, 입력이 바뀌어도 다음 클럭까지 출력은 바뀌지 않는다
  2. B출력이 현재 상태와 입력 모두로 결정되므로, 입력의 변화가 같은 사이클 안에 출력에 나타난다
  3. C상태를 갖지 않는 조합 회로이다
정답과 해설 보기

정답: B. 출력이 현재 상태와 입력 모두로 결정되므로, 입력의 변화가 같은 사이클 안에 출력에 나타난다

밀리형에서는 출력 논리가 현재 상태에 더해 입력도 보므로, 입력이 바뀌면 클럭을 기다리지 않고 출력이 바뀌어 1사이클 빠르게 반응할 수 있습니다. 상태 수가 적어도 되는 경우도 있습니다. 반면 입력에서 출력까지 조합 회로 경로가 이어지므로, 입력의 노이즈가 출력에 나타나거나 타이밍 경로가 길어지기도 합니다. 출력을 플립플롭으로 다시 받아서 사용하기도 합니다.

출력이 현재 상태만으로 결정되는 순차 회로(스테이트 머신)의 유형은?

  1. A밀리형
  2. B무어형
  3. C하버드형
정답과 해설 보기

정답: B. 무어형

무어형에서는 출력이 현재 상태만으로 결정되고, 밀리형에서는 상태와 입력 모두로 결정됩니다. 무어형은 출력이 클록 에지 이후에만 바뀌고 입력의 변화나 글리치가 출력에 직접 전달되지 않으므로 안정적이며 타이밍도 예측하기 쉬운 반면, 입력에 대한 반응이 1클록 늦고 상태 수가 늘어나기 쉽습니다. 밀리형은 상태 수를 줄일 수 있고 입력에 즉시 반응하지만 입력의 변화가 출력에 직접 전달됩니다. 실제 설계에서는 둘을 조합하여 사용합니다.

HDL로 작성하는 상태 머신(스테이트 머신)의 기본 구성으로 올바른 것은?

  1. A상태를 기억하는 메모리만 있고 논리 회로는 사용하지 않는다
  2. B출력을 결정하는 회로만 있고 상태는 기억하지 않는다
  3. C현재 상태를 기억하는 레지스터, 다음 상태를 결정하는 조합 회로, 출력을 결정하는 조합 회로
정답과 해설 보기

정답: C. 현재 상태를 기억하는 레지스터, 다음 상태를 결정하는 조합 회로, 출력을 결정하는 조합 회로

상태 머신은 현재 상태를 플립플롭 레지스터에 기억해 두고, 현재 상태와 입력으로부터 다음 상태를 조합 회로로 결정하며, 클럭 에지에서 상태를 갱신합니다. 출력은 현재 상태(와 입력)로부터 조합 회로로 결정합니다. 통신 절차 제어나 자동판매기, 신호등 제어처럼 절차에 따라 동작하는 회로 대부분은 상태 머신으로 기술됩니다.

  1. 상태 머신의 상태 부호화에서 원핫(one-hot) 부호화의 특징으로 올바른 것은?
  2. 3개의 상태를 가진 상태 머신에서 상태를 기억하는 데 필요한 플립플롭 수의 조합으로 올바른 것은?(바이너리 부호화/원핫 부호화)
  3. 순차 회로에 대한 설명으로 올바른 것은?

HDL과 검증 문제 풀기

주요 용어 설명

밀리형(Mealy Machine)
출력이 현재 상태와 입력 모두로 결정되는 상태 기계. 입력 변화가 같은 사이클에 출력에 나타나지만 입력의 잡음도 출력에 전달되기 쉽다. 출력이 상태만으로 결정되는 것은 무어형.
순차 회로(Sequential Circuit)
플립플롭 등으로 상태를 기억하며, 출력이 입력과 과거 상태 모두에 의해 결정되는 논리 회로. 카운터, 레지스터 등이 있다.
조합 회로
출력이 그 시점의 입력만으로 결정되는 논리 회로. 가산기, 멀티플렉서, 디코더 등.
플립플롭(flip-flop)
1비트의 정보를 유지하는 순차 회로의 기본 소자. D형은 클록의 에지에서 입력을 받아들인다.
글리치(glitch)
신호 경로별 지연 차이 등으로 출력에 순간적으로 나타나는 불필요한 펄스. 조합 회로에서는 해저드라고도 하며 DA 변환기에서는 코드가 바뀔 때 발생한다.
원핫 인코딩(One-hot Encoding)
상태 기계의 상태마다 하나의 플립플롭을 할당하고 항상 하나만 1로 하는 부호화. 논리가 간단하고 빨라지기 쉬워 FPGA에서 자주 사용된다.
조합 루프(Combinational Loop)
플립플롭을 거치지 않고 조합 회로의 출력이 자신의 입력으로 돌아오는 구조. 발진하거나 값이 정해지지 않고 타이밍 분석도 할 수 없으므로 피한다.
의도하지 않은 래치(Unintended Latch)
조합 회로를 의도한 기술에서 특정 조건일 때 출력에 대한 대입이 없어, 값을 유지하는 래치가 논리 합성에서 만들어져 버리는 것.

관련 비교