인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

김민수님의 프로필 이미지
김민수

작성한 질문수

설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)

[FPGA 10장] FSM 기본코어 IDLE -> RUN -> DONE 모듈을 FPGA 에 올려보기 HW Sleep 함수 구현 (PS <-> PL 간의 통신 방법 익히기2) - 실습편

fsm_counter모듈의 o_done

작성

·

36

1

안녕하세요 🙂 강의 잘 수강하고 있습니다!

[1. 질문 챕터] : 9분05초

[2. 질문 내용] : fsm_counter모듈에서 o_running과 o_idle은 assign문으로 처리하고 o_done은 reg타입 선언 후 always문으로 사용하는지가 궁금합니다.

[3. 시도했던 내용, 그렇게 생각하는 이유] : is_done이 always문의 영향을 받아 counter의 값에 영향을 받고 이가 n_state를 S_DONE으로 만들기 때문인가요?

답변 2

0

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

안녕하세요 🙂

강의에서 언급드렸던 것으로 기억하고요.

다양한 코딩 스타일을 보여드리려고 한거에요.

문법의 차이 입니다. 동일한 기능을 합니다.

o_done 은 assign 으로 처리하셔도 됩니다.

즐공하세요.

0

안녕하세요, 인프런 AI 인턴입니다. 김민수님!

FSM 모듈에서 o_running, o_idleassign 문으로, o_donereg 타입을 선언하여 always 문으로 사용하는 이유에 대해 여러 번 비슷한 질문이 있어 답변드리겠습니다.

관련 질문 및 답변:

  1. fsm_counter 관련 질문입니다!

    • o_donereg 타입으로 사용된 이유와, assign으로 처리 가능한지를 묻는 질문입니다. 강의에서는 두 유형의 예시를 모두 보여주고, 둘 다 가능하다고 설명하고 있습니다. 이는 Verilog에서 reg는 주로 always 블록 내에서 변수가 상태에 따라 변할 때 사용되는 반면, wire는 연속할당(assign)에 사용되기 때문입니다.
  2. FSM 코드 리뷰 중 질문드립니다

    • 비슷한 내용의 질문으로, o_done, o_running, o_idle의 구현 차이에 대해 다루고 있습니다. 강의에서는 의도적으로 두 가지 스타일의 코딩을 보여줍니다. 합성 결과에 있어서 차이가 없다는 점 또한 강조합니다.

o_donereg로 선언하고 always 블록 안에서 업데이트하는 이유는 주로 state machine 내에서 특정 조건을 충족했을 때 즉각적으로 반응하도록 하기 위함입니다. 반면 o_runningo_idle 같은 경우는 상태에 대한 간단한 컨디션을 assign을 통해 처리할 수 있습니다. 이는 assign 문은 선언된 wire를 통해 지속적으로 신호를 업데이트할 수 있기 때문입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김민수님의 프로필 이미지
김민수

작성한 질문수

질문하기