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

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

장태영님의 프로필 이미지

작성한 질문수

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

17장 - FSM COUNTER - num_count 관하여

작성

·

72

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 인턴님의 프로필 이미지

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

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