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

sam716님의 프로필 이미지
sam716

작성한 질문수

설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)

[HDL 15장] HW 의 동작을 제어하는 FSM 을 이해해보자. (이론편) - (원리만 깨달으면 자판기, 시계는 금방 설계합니다.)

FSM Code 질문입니다!

작성

·

387

1

안녕하세요 맛비님 고생많으십니다.

맛비님께서 알려주신 코드는 위와 같으며, 위와 같이 설계할 경우

예를 들어

c_state 가 A 일 때 output 이 B가 된다고 가정한다면,

n_state가 A로 바뀌면 다음 clock에 c_state는 A가 됩니다. 이 때 바로 output이 B가 되지 않습니다. output은 그 다음 clock에 B가 c_state가 A가 됨을 알아차리고 B가 됩니다.

 

이렇게 Timing 적으로 출력값이 밀릴 바에

위 사진처럼 바꾸는 것은 어떨까요? (n_state를 없애는 겁니다)

 

  1. 위로 했을 때의 문제점과

  2. 문제가 있다면 clock이 안밀리고 위 예시에서 n_state가 바뀔 때 output이 바뀌도록 설계하려면 어떻게 해야할까요?

답변 1

0

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

안녕하세요 :)

  1. 위로 했을 때의 문제점과

    1. 동작여부는 잘 모르겠어요. 환경은 전부 드렸으니, 직접 확인해보시는 좋은 방법이 있습니다. :)

    2. syntax error 같은데요..? c_state 를 blocking, non-blocking assign 둘다 사용하셨네요.

  2. 문제가 있다면 clock이 안밀리고 위 예시에서 n_state가 바뀔 때 output이 바뀌도록 설계하려면 어떻게 해야할까요?

    1. n_state 를 보고 output 을 출력하면 됩니다.

    2. ex. 하기 코드를 a -> b 로 수정. 그러면 n_state 에 맞춰서 output 이 출력될꺼에요.

      1. assign o_running = (c_state == S_RUN);

      2. assign o_running = (n_state == S_RUN);

즐공하세요 :)

sam716님의 프로필 이미지
sam716
질문자

답변 감사합니다 :)

맛비님 말씀대로 a->b로 수정되면 c_state는 필요없다고 생각되는데, c_state없이 combinational logic으로 표현된 n_state만 가지고 설계하게 된다면, 이를 FSM이라고 할 수 있을까요?

1)     밀리머신

외부 출력 결정 시 입력과 현재 상태 모두에 영향을 받는다.

 

2)     무어머신

외부 출력 결정 시 입력이 개입하지 않는다. 현재의 상태만을 보고 출력한다.

 

만약 c_state 없이 (sequential logic) n_state만 쓰게 된다면 무어머신을 활용한 FSM이라고 봐야하나요?

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

이 한줄이면, 충분한 답이 될 것 같아요.

imagec_state 는 필요합니다. (현재 상태를 저장해야죠.)

image

sam716님의 프로필 이미지
sam716
질문자

맛비님 코드에서는 c_state에 따라 출력값을 결정하던데

엄밀하게 말하자면, 본인이 설계하고자 하는 IP에 따라 c_state, n_state가 출력값을 결정해도 되나요??

(예를 들어 출력값이 A와 B가 있다고 했을 떄

A는 c_state에 의해 결정되고

B는 n_state에 의해 결정되는 식으로 코드를 짜도 되겠네요?!?!)

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

설계 스펙에 맞춰서, (설계자 책임) 정상 동작하도록 설계 하시면 됩니다.

방법의 정답은 없다. 말씀드리고 싶어요 :)

sam716님의 프로필 이미지
sam716
질문자

감사합니다!! 도움이 많이 되었습니다!!

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

즐공하셔요! :)

sam716님의 프로필 이미지
sam716

작성한 질문수

질문하기