# FSM (finite-state machine)
- 유한 상태 기계라는 뜻으로, 많은 디지털 시스템에서 System 및 Data Flow Path의 동작을 제어하는 데 사용되는 Sequential 회로이다. 현재상태 Current state와 input에 따라서 다음 상태 Next state가 결정이 된다. FSM을 통해서 HW를 Control 하는데 사용된다.
한 번에 오로지 하나의 상태만을 가지게 되며, 현재상태란 임의의 주어진 시간의 상태를 칭한다. 이러한 기계는 어떠한 사건에 의해 한 상태에서 다른 상태로 변화할 수 있으며 이를 전이라고 한다.
IDLE : "놀고있는"이라는 뜻으로 Core가 놀고 있고, 즉 Run이 가능한 상태를 말한다
RUN : Core가 현재 실행중인 상태를 말한다.
DONE : Core가 현재 끝났음을 의미한다.
Q: verilog에서 FSM으로 코드를 짜는 이유가 뭘까? 간단한건 FSM으로 안해도되잖아 FSM의 로직으로 설계했을때의 장점은 뭘까?
좋은 질문이에요, 다훈님! Verilog에서 FSM(Finite State Machine)으로 코드를 작성하는 이유는 설계의 복잡성과 명확성 때문입니다. 간단한 논리라면 굳이 FSM 구조를 사용할 필요가 없을 수 있지만, 복잡한 시스템의 경우 FSM 방식은 여러 가지 장점을 제공합니다. FSM의 장점
설계의 명확성: FSM은 상태 기반 설계를 하므로, 시스템이 어떤 상태에 있고, 특정 입력에 따라 어떻게 변할지를 명확히 표현할 수 있습니다. 이는 디버깅과 유지보수를 훨씬 쉽게 만듭니다.
복잡한 제어 로직 구현: 순차적 동작이나 조건부 흐름이 많은 설계에서는 FSM 구조가 체계적이고 적합합니다. 특히, 신호가 특정 순서로 동작해야 하거나 다양한 이벤트를 처리해야 할 때 효과적입니다.
모듈화와 확장성: FSM은 상태를 중심으로 설계를 나누므로, 새로운 상태나 로직을 추가하는 과정이 비교적 간단합니다. 시스템 확장 시 유용하죠.
자동화 도구와의 호환성: 현대의 FPGA 설계 도구는 FSM 기반 코드를 잘 이해하고 최적화합니다. 따라서 FSM 구조를 사용하면 효율적인 하드웨어 구현이 가능합니다.
문서화 용이성: FSM은 상태 다이어그램으로 표현할 수 있어, 동작을 시각적으로 이해하기 쉽게 만듭니다. 이는 팀 내 협업 시 큰 장점이 됩니다.
결론적으로, 설계하려는 시스템이 간단하다면 FSM 없이도 충분하지만, 복잡한 동작이나 명확한 상태 관리가 필요할 땐 FSM 방식이 매우 유용해요. 어떤 설계를 생각하고 계신가요? 제가 더 도와드릴 수 있을까요? 😊
# Mealy Machine (based on FSM)
즉 출력 값은 입력 값과 현재 상태 모두에 의존한다.
output Logic에서 입력값과 현재 상태 모두 체크해야하므로 타이밍적으로 손해를 보게 된다. 그리고 안정성이 떨어진다
보통의 FSM에서는 단방향으로 흘러가는 Moore 머신을 많이 사용하지만 Mealy머신을 사용해야하는 경우는 양방향 핸드쉐이크 인터페이스를 사용하게 되는 경우 대표적으로 사용된다.
# Moore Machine (based on FSM)
출력값은 현재 상태에 의존한다.
# 실습과제
FSM 실습과제 Wave form
현재 상태의 입력에 따라 출력이 달라지는 모습, 현재 상태에 따라 다음상태가 결정됨
현재 상태가 done 상태가 되면 무조건 다음상승엣지에 디폴트로 돌아옴
# 실습 응용 (User가 입력한 숫자만큼 Counting을 하는 모듈)
# 혼자 설계해본 결과
> rtl file
> testbench file
현재 상태가 i_run에 따라 바뀜에 따라 idle 상태에서 running상태로 변환, 상승엣지마다 카운팅을 하기 시작함
현재 상태가 done이 되었으면 다음 클럭에 count값을 0으로 초기화 하고 현재상태를 IDLE(초기상태)로 다시 되돌림