clk^은 c의 rising edge를 의미한다. 다른 조건은 안보고 clk^ 이면 무조건 넘겨준다는 것이다.
현재 state 에 따라서 결과를 출력하므로 무어 머신이다.
다시 말해서, 출력할 때 현재 조건 (x) 을 보지 않고 현재 state (Off/On) 만 보고 있다.
다음은 연속적으로 1이 들어오는 상태를 detect 하는 문제이다.
state 개수를 설계하는 것이 중요하다.
이때, A에서 w에 0이 들어오면 A로 돌아오고, 1이 들어오면 B로 넘어간다.
B에서 w에 0이 들어오면 A로 돌아가고, 1이 들어오면 C로 넘어간다.
C에서 w에 0이 들어오면 A로 돌아가고, 1이 들어오면 C로 돌아온다.
이처럼 외부 입력이 들어왔을 때 최대 1 clock cycle 만큼 delay 돼서 반영된다.
one hot encoding 으로 구현할지 binary encoding 으로 구현할지 결정한다.
또한, D-FF 를 사용할지 T-FF 를 사용할지도 정한다.
A, B, C 를 binary encoding 으로 풀어써준다. 그리고 D-FF 를 2개 사용해서 표현 가능 상태는 총 4개인데, 상태 하나가 남으니 이거를 Don't care's로 활용해준다.
⭐ 참고로, one hot encoding으로 진행 시 D-FF를 더 사용하게 되지만, combination logic은 간단화 할 수 있다.
다음과 같이 최적화 해본다.
이처럼 D-FF의 등장으로 clock cycle 에 따라서 어떤 타이밍에 따라 흐름제어를 하면서 sequential한 circuit 흐름도 디자인할 수 있게 됐다.