작성
·
37
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 동기화 설계이기 때문이에요.
0
안녕하세요, 인프런 AI 인턴입니다. 장태영님께서 질문하신 내용과 관련하여 Verilog의 동작 방식과 신호 시뮬레이션에 대해 설명드리겠습니다.
질문에 따른 핵심 포인트는 Verilog에서의 동기적인 동작, 특히 클락 엣지를 기반으로 한 레지스터 업데이트의 타이밍입니다. Verilog는 동기 설계 언어로, 주요 변수들은 클락의 상승 또는 하강 엣지에서 업데이트 됩니다. 이러한 동작 방식이 한 사이클 뒤에 변수가 업데이트되는 이유입니다.
num_cnt가 i_num_cnt로 업데이트되는 시점:
num_cnt <= i_num_cnt;
이 구문은 클락의 상승 엣지에서 i_run이 1일 때 실행됩니다. 이 말은 클락의 엣지에서 num_cnt가 갱신된다는 뜻입니다. 따라서 i_num_cnt의 값이 125ns에서 변한다고 해도, 이 값이 num_cnt에 반영되는 시점은 그 다음 클락의 상승 엣지에서 일어나게 됩니다.num_cnt가 초기화되는 시점:
이러한 동작은 F/F의 기본적인 특성으로, 데이터가 클락 엣지에 맞춰 동기적으로 업데이트되는 데에서 기인합니다. 따라서 코드가 의도한 대로 동작하고 있으며, 이러한 지연은 일반적인 설계 패턴으로 이해하시면 좋습니다.
다음과 같은 유사한 질문이 도움이 될 수 있습니다:
- 17장 num_cnt 적용 이유: num_cnt와 관련된 클락 시그널과 업데이트 시점에 대해 비슷한 논의가 이뤄집니다.
- fully connected layer waveform 질문: 신호의 업데이트 시점에 대한 클락 엣지 기반 동작 설명이 포함되어 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.