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

장태영님의 프로필 이미지
장태영

작성한 질문수

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

17장 - FSM COUNTER - num_count 관하여

작성

·

42

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으로 초기화 되는 이유가 궁금합니다!

답변 2

1

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

안녕하세요 🙂

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

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

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

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

0

안녕하세요, 인프런 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 질문: 신호의 업데이트 시점에 대한 클락 엣지 기반 동작 설명이 포함되어 있습니다.

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

장태영님의 프로필 이미지
장태영

작성한 질문수

질문하기