작성
·
36
답변 2
0
안녕하세요 🙂
강의에서 언급드렸던 것으로 기억하고요.
다양한 코딩 스타일을 보여드리려고 한거에요.
문법의 차이 입니다. 동일한 기능을 합니다.
o_done 은 assign 으로 처리하셔도 됩니다.
즐공하세요.
0
안녕하세요, 인프런 AI 인턴입니다. 김민수님!
FSM 모듈에서 o_running
, o_idle
은 assign
문으로, o_done
은 reg
타입을 선언하여 always
문으로 사용하는 이유에 대해 여러 번 비슷한 질문이 있어 답변드리겠습니다.
o_done
이 reg
타입으로 사용된 이유와, assign
으로 처리 가능한지를 묻는 질문입니다. 강의에서는 두 유형의 예시를 모두 보여주고, 둘 다 가능하다고 설명하고 있습니다. 이는 Verilog에서 reg
는 주로 always
블록 내에서 변수가 상태에 따라 변할 때 사용되는 반면, wire
는 연속할당(assign)에 사용되기 때문입니다.o_done
, o_running
, o_idle
의 구현 차이에 대해 다루고 있습니다. 강의에서는 의도적으로 두 가지 스타일의 코딩을 보여줍니다. 합성 결과에 있어서 차이가 없다는 점 또한 강조합니다.o_done
을 reg
로 선언하고 always
블록 안에서 업데이트하는 이유는 주로 state machine 내에서 특정 조건을 충족했을 때 즉각적으로 반응하도록 하기 위함입니다. 반면 o_running
과 o_idle
같은 경우는 상태에 대한 간단한 컨디션을 assign
을 통해 처리할 수 있습니다. 이는 assign
문은 선언된 wire
를 통해 지속적으로 신호를 업데이트할 수 있기 때문입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.