inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

FSM Code 질문입니다!

476

sam716

작성한 질문수 10

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이 바뀌도록 설계하려면 어떻게 해야할까요?

verilog-hdl 임베디드 fpga

답변 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);

즐공하세요 :)

0

sam716

답변 감사합니다 :)

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

1)     밀리머신

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

 

2)     무어머신

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

 

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

0

설계독학맛비

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

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

image

0

sam716

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

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

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

A는 c_state에 의해 결정되고

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

0

설계독학맛비

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

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

0

sam716

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

0

설계독학맛비

즐공하셔요! :)

latency 개념 구현

1

92

3

비바도 all os버전

1

76

2

초기화를 reset_n 이 '1'일 때가 아닌 '0' 일 때 실행시키는 이유 질문

1

75

2

다운로드용량

1

74

2

비바도리눅스설치

1

84

2

전체path복사넣기

1

63

2

Vivado 2025.2 리눅스 설치 후 실행 에러와 솔루션 (libxv_commontasks.so)

1

156

2

explorer.exe오류

1

107

3

mobaxterm설치오류

1

92

2

./build시, waveform 'divide color' 사용

1

57

2

Latch와 관련하여 (Time borrowing, Latch-based design)

1

134

2

clean 명령어가 안되는데, 따로 저장해줘야 하는지 궁금합니다.

0

64

1

안녕하세요 설치 관련 질문 드립니다.

1

65

3

16장 mealy 설계.

1

74

2

14장 Cycle 관련, Testbench 코드.

1

64

2

21강(16장) 초기값 설정이 적용되는 시점 질문

1

60

1

20강(15장) - 밀리 머신 관련하여 질문 드립니다.

1

70

2

build에러 질문

0

58

2

1장 ./build에서 에러가 나요

1

74

2

FPGA 강의 보드 문의 드립니다.

1

110

2

5장 DFF특성에 대한 질문

1

77

3

vivado linux 사용 이유.

1

139

2

메모리의 형태가 전체설계에 미치는 영향이 궁금합니다.

1

105

2

디스코드 멤버쉽 등업 관련 문제

1

92

2