인프런 커뮤니티 질문&답변
fsm 설계 방식에 대한 질문
작성
·
31
1
L0 - P11번 문제의 FSM설계에 대한 의문점이 있습니다. (강의 10분 20초)
맛비님이나 강의처럼 항상 reg로 현재의 state와
다음 state인 n_state를 선언하시고,
이후에 매 clk마다 state <= n_state;
이런식으로 state를 두 번 정의하시는데 이러는 방식에 이유가 있을까요? 제가 다음과 같이 풀어서 문제를 맞추었는데 이러면 안되는 이유가 있다면 그것도 궁금합니다.

답변 2
0
안녕하세요 miro11님.
열강 중이시군요! 캡처해 주신 것처럼, 해당 문제에서 miro11님처럼 풀어서 안 되는 이유는 없습니다.
다만 실무에서는 FSM이 복잡해지는 경우가 대다수인데요, 결국 리더빌리티(즉, 코드를 보기 편한가)가 좋기 때문이라고 생각됩니다.
다시 말하면, 코딩/디버깅 시 현재 상태와 다음 상태를 구분할 경우 디버깅할 때 용이한데요, 현재 상태가 무엇이고 다음 상태가 무엇인지 알면 현재 조건의 상태에서 다음 상태가 내가 원하는 상태로 가는지, 다음 상태를 보고 바로 알 수 있죠.
또한 논블로킹 로직(현재 상태)과 블로킹 로직(다음 상태)이 코드상에서 구분되어 있으니, 블로킹 로직만 코딩/디버깅하면 되어서 이 또한 리더빌리티 측면에서 좋다고 생각합니다.
오히려 제 답변보다 인프런 AI 인턴의 답변이 더 전문적으로 보이기도 하네요.
저도 처음엔 이게 왜 더 명확하다는 건지 선배들이 설명해 줘도 이해가 잘 안 됐습니다.
하지만 디자인 경험을 수년간 하다 보니 “아, 분리하는 게 리더빌리티를 포함한 여러 측면에서 유리하구나”라는 생각을 하게 됐죠.
시즌 1(Level 0,1)에서는 이 부분에 대해서 피부에 와닿지 않을 수도 있습니다.
올해 오픈 예정인 시즌 2(Level 2,3) 면접 예상 문제들을 풀어 보시다 보면, 조금이나마 코딩/디버깅 측면에서의 장점을 느끼실 거라 생각됩니다.
열강해주셔서감사합니다! 좋은 곳에서 훌륭한 엔지니어가 되시길 응원합니다!
혹 이해를 돕기 위한 추가적인 설명이 필요하시면 말씀 부탁 드립니다.
0
안녕하세요, 인프런 AI 인턴입니다. miro11님.
FSM(有限状态机, Finite State Machine) 설계에서 state와 n_state를 사용하는 이유는 설계 구조를 보다 명확하고 직관적으로 유지하기 위함입니다. 이 방식은 다음 이유로 일반적입니다:
작업 분리: 마지막 상태(
state)와 계산된 다음 상태(n_state)를 분리하는 것은 FSM의 명확성을 높이며, 기능의 변경이나 확장 시 오류를 줄여줍니다.클럭 동작과의 연계: 클럭 엣지에서 기존 상태를 n_state로 전환하는 것은 설계 구조상 안정성과 신뢰성을 높이는 데 도움을 줍니다. 이는 모든 상태 전환이 클럭 엣지를 기준으로 일어나도록 보장함으로써 타이밍이나 레이시 조건의 문제를 줄입니다.
유연한 상태기술: n_state는 현재 상태와 입력에 기반한 다음 상태를 쉽게 계산할 수 있어, 복잡한 상태 전환 로직을 보다 관리하기 쉽게 만듭니다.
물론, 질문에서 제시하신 방법처럼 한 번에 상태 변화를 처리할 수도 있지만 이는 단순한 설계에는 문제가 없을 수 있으나, 복잡한 시나리오에서는 읽기 힘들고 잠재적 오류를 더 쉽게 초래할 수 있습니다.
아래 유사한 질문과 관련된 기존 답변을 확인해 주시면 더 도움이 될 것입니다:
FSM에서 state와 n_state 사용법의 차이점은 무엇인가요?
- FSM 설계에서 상태 전환을 더욱 제어하고 분리하여 클럭 동작과의 결합을 명확히 하는 데 중점을 둡니다.
- FSM 설계에서 상태 전환을 더욱 제어하고 분리하여 클럭 동작과의 결합을 명확히 하는 데 중점을 둡니다.
-
- FSM 설계 시 n_state와 state를 별도로 구분하는 패턴에 대해 설명하고, 그 필요성을 강조합니다.
- FSM 설계 시 n_state와 state를 별도로 구분하는 패턴에 대해 설명하고, 그 필요성을 강조합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




