inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

17장 - FSM COUNTER - num_count 관하여

115

장태영

작성한 질문수 3

1

 

Step.4 num_cnt 캡처 부분에서 클락의 rising edge 일때, i_run이 1인 상태면

 

제가 표기한 부분에서 num_cnt에 i_num의 값인 100이 입력되어야 할 것 같은데,

 

이렇게 한 사이클 뒤의 클락에서 num_cnt에 100이 입력되는 이유가 궁금합니다!

 

125ns 에서는 i_num_cnt의 값이 100으로 천이되고 있는 상태여서 그런걸까요?

 

 

 

 

 

 

마찬가지로

 

 

이 부분에서도 클락의 rising edge와 o_done이 만족되면 num_cnt가 0으로 초기화 되어야 한다면

표기 드린 부분에서 num_cnt가 0이 되어야 할 것 같은데, 한 사이클 이후에 0으로 초기화 되는 이유가 궁금합니다!

verilog-hdl fpga 임베디드

답변 2

1

설계독학맛비

안녕하세요 🙂

이번에는 AI 인턴이 제대로 달아주었는데요.

Simulator 에서 F/F 에 값의 출력값은 1 cycle 뒤에 발생하는 것이 일반적이고, 그것이 waveform 에 보였습니다.

그려주신 타이밍에, 실제 F/F 에 저장이 되고요. 저장과 동시에 출력값이 바로 반영되지 않고, 1 cycle 뒤에 반영되게 됩니다. 디지털 회로는 Clock 동기화 설계이기 때문이에요.

{965589C0-6D45-4B6B-8318-9A7BB778B67E}.png

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 장태영님께서 질문하신 내용과 관련하여 Verilog의 동작 방식과 신호 시뮬레이션에 대해 설명드리겠습니다.

질문에 따른 핵심 포인트는 Verilog에서의 동기적인 동작, 특히 클락 엣지를 기반으로 한 레지스터 업데이트의 타이밍입니다. Verilog는 동기 설계 언어로, 주요 변수들은 클락의 상승 또는 하강 엣지에서 업데이트 됩니다. 이러한 동작 방식이 한 사이클 뒤에 변수가 업데이트되는 이유입니다.

  1. num_cnt가 i_num_cnt로 업데이트되는 시점:

    • num_cnt <= i_num_cnt; 이 구문은 클락의 상승 엣지에서 i_run이 1일 때 실행됩니다. 이 말은 클락의 엣지에서 num_cnt가 갱신된다는 뜻입니다. 따라서 i_num_cnt의 값이 125ns에서 변한다고 해도, 이 값이 num_cnt에 반영되는 시점은 그 다음 클락의 상승 엣지에서 일어나게 됩니다.
  2. num_cnt가 초기화되는 시점:

    • o_done 신호를 조건으로 num_cnt를 0으로 초기화하는 경우에도 마찬가지입니다. 클락 엣지에서 확인되어야 하는 조건이므로, o_done이 1로 변한 시점 이후 첫 클락 상승 엣지에서 num_cnt가 초기화됩니다.

이러한 동작은 F/F의 기본적인 특성으로, 데이터가 클락 엣지에 맞춰 동기적으로 업데이트되는 데에서 기인합니다. 따라서 코드가 의도한 대로 동작하고 있으며, 이러한 지연은 일반적인 설계 패턴으로 이해하시면 좋습니다.

다음과 같은 유사한 질문이 도움이 될 수 있습니다:
- 17장 num_cnt 적용 이유: num_cnt와 관련된 클락 시그널과 업데이트 시점에 대해 비슷한 논의가 이뤄집니다.
- fully connected layer waveform 질문: 신호의 업데이트 시점에 대한 클락 엣지 기반 동작 설명이 포함되어 있습니다.

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

latency 개념 구현

1

84

3

비바도 all os버전

1

67

2

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

1

68

2

다운로드용량

1

68

2

비바도리눅스설치

1

79

2

전체path복사넣기

1

59

2

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

1

142

2

explorer.exe오류

1

99

3

mobaxterm설치오류

1

84

2

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

1

51

2

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

1

122

2

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

0

57

1

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

1

60

3

16장 mealy 설계.

1

71

2

14장 Cycle 관련, Testbench 코드.

1

63

2

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

1

59

1

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

1

63

2

build에러 질문

0

54

2

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

1

70

2

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

1

104

2

5장 DFF특성에 대한 질문

1

73

3

vivado linux 사용 이유.

1

134

2

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

1

102

2

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

1

91

2