Chapter 16 FSM 관련 질문
42
2 câu hỏi đã được viết
Chapter 16 코드 중
Step1 과 2를 아래 그림과 같이 합쳐서 사용하는 방식은 잘 쓰지 않나요?
Localparam을 따로 설정하지 않고 직관적으로 state가 바뀌는게 더 잘 보이는 방식으로 따로 만들었는데 이러한 방식 잘 사용하지 않나요?(상세 문법 같은 건 틀렸을수도 있으니 흐름만 봐주십쇼)
두 질문 모두 모듈이 많아지거나 코드가 복잡해지면 검토(추적성)시에 힘들어서 그런건지 궁금합니다.

Câu trả lời 2
0
안녕하세요. 맛비입니다.
질문자님이 짚으신 이유가 핵심입니다. 코드가 복잡해졌을 때 디버깅과 추적성이 급격히 떨어지는 것이 가장 큰 이유입니다.
추가로 실무에서 이 방식을 쓰지 않는 대표적인 이유를 정리해 드립니다.
FSM 3-Step 분리 이유 (1-Always 구조를 피하는 이유)
설계 명확성: State 업데이트(Sequential)와 Next State 계산(Combinational), Output 제어를 분리해야 HW 구조가 한눈에 들어옵니다.
의도치 않은 Latency 방지:
always @(posedge clk)안에서 조합논리 조건까지 한 번에 처리하면, 원하는 시점보다 1 클락 늦게 동작하거나 의도치 않은 F/F이 생기기 쉽습니다.
localparam과 연산자(
+1) 미사용 이유가독성과 디버깅: Waveform 분석 시 숫자(
0,1)보다S_IDLE,S_RUN같은 이름이 직관적입니다.FSM 확장성 및 최적화: 상태는 순차적으로만 넘어가지 않고 분기(Branching)하는 경우가 많습니다.
c_state + 1구조는 예외처리가 어렵고, 합성 툴(Synthesis Tool)이 One-hot 같은 FSM 최적화를 수행하는 데 걸림돌이 됩니다.
간단한 예제에서는 직관적으로 보일 수 있지만, 확장성과 유지보수를 위해 강의에서 다룬 표준 3-Step 방식과 localparam 사용을 권장합니다.
즐공하세요.
0
안녕하세요, 인프런 AI 인턴입니다. 백승민님.
Verilog 코드를 작성하면서 FSM(Finite State Machine) 설계를 최적화하는 방법에 대한 질문을 주셨군요. FSM의 설계 방식은 실제 코딩 스타일과 설계자의 편의에 따라 달라질 수 있지만, 기본적인 원칙들은 여전히 유지됩니다. 여기서 주신 두 가지 방법에 대해 설명 드리겠습니다.
Step1 과 2를 합치는 방식:
- 두 단계를 합쳐서 사용하는 방식도 가능합니다. 그러나 이 경우에도 상태 전환을 명확하게 정의하고 코드의 가독성을 유지하는 것이 중요합니다. 코드를 분석하거나 디버깅할 때 각 스텝이 분리되어 있으면, 문제를 개별적으로 파악하기가 더 쉬울 수 있습니다.
- 두 단계를 합쳐서 사용하는 방식도 가능합니다. 그러나 이 경우에도 상태 전환을 명확하게 정의하고 코드의 가독성을 유지하는 것이 중요합니다. 코드를 분석하거나 디버깅할 때 각 스텝이 분리되어 있으면, 문제를 개별적으로 파악하기가 더 쉬울 수 있습니다.
Localparam 없이 상태 정의:
- Localparam을 사용하지 않고 상태를 직접적으로 정의하는 것도 가능합니다. 이러한 방식은 코드를 간결하게 만들 수 있지만, 명확한 식별자 없이 숫자로 상태를 정의할 때 코드를 읽고 이해하는 데 시간이 더 걸릴 수 있습니다. 특히 모듈이나 코드가 복잡해질수록 가독성 면에서 불리할 수 있습니다. 따라서, 대규모 프로젝트에서는 state를 정의하는 데 있어 가독성을 고려해 Localparam을 사용하는 것이 권장됩니다.
관련되는 질문의 FSM case문 default 와 latch 관련 질문이 있습니다. 이 질문에서 case문의 default 사용과 latch 방지에 대해 설명되어 있습니다.
- Localparam을 사용하지 않고 상태를 직접적으로 정의하는 것도 가능합니다. 이러한 방식은 코드를 간결하게 만들 수 있지만, 명확한 식별자 없이 숫자로 상태를 정의할 때 코드를 읽고 이해하는 데 시간이 더 걸릴 수 있습니다. 특히 모듈이나 코드가 복잡해질수록 가독성 면에서 불리할 수 있습니다. 따라서, 대규모 프로젝트에서는 state를 정의하는 데 있어 가독성을 고려해 Localparam을 사용하는 것이 권장됩니다.
FSM 설계는 설계자의 스타일과 프로젝트의 요구사항에 따라 달라질 수 있습니다. 각자의 스타일에 맞게 효율적이고 가독성 높은 코드를 작성하는 것이 중요합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
강의 환경(linux) 관련 질문
1
47
2
Arty Z10 관련 문의
1
46
2
13장 파이프라인 질문 드립니다.
1
84
2
Ubuntu 20.04.5 설치관련 문의드립니다
1
95
2
git hub 404 error 도움 부탁드립니다.
1
66
2
latency 개념 구현
1
144
3
비바도 all os버전
1
117
2
초기화를 reset_n 이 '1'일 때가 아닌 '0' 일 때 실행시키는 이유 질문
1
131
2
다운로드용량
1
105
2
비바도리눅스설치
1
117
2
전체path복사넣기
1
90
2
Vivado 2025.2 리눅스 설치 후 실행 에러와 솔루션 (libxv_commontasks.so)
1
255
2
explorer.exe오류
1
159
3
mobaxterm설치오류
1
135
2
./build시, waveform 'divide color' 사용
1
83
2
Latch와 관련하여 (Time borrowing, Latch-based design)
1
206
2
clean 명령어가 안되는데, 따로 저장해줘야 하는지 궁금합니다.
0
89
1
안녕하세요 설치 관련 질문 드립니다.
1
99
3
16장 mealy 설계.
1
105
2
14장 Cycle 관련, Testbench 코드.
1
108
2
21강(16장) 초기값 설정이 적용되는 시점 질문
1
85
1
20강(15장) - 밀리 머신 관련하여 질문 드립니다.
1
91
2
build에러 질문
0
87
2
1장 ./build에서 에러가 나요
1
100
2

