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

작성자 없음

작성자 정보가 삭제된 글입니다.

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

[Verilog HDL/FPGA 외전1 - 시계만들기] Chapter 2. 시,분,초 만들기 - Part2

tick에 관련된 질문입니다.

작성

·

35

1

안녕하세요 🙂

[1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요.

[2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂

[3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.)

 

================ 다음 내용은 읽어보시고 지우시면 됩니다.=================

질문 내용을 작성해주실 때, 위의 3단계로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!!

현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)

  1. 강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)

  2. 이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)

    1. 개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..

  3. 글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)

    1. 서로 예의를 지키며 존중하는 문화를 만들어가요.

    2. 질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )

  4. 먼저 유사한 질문이 있었는지 검색해보세요.

  5. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

==================

질문 챕터 : [Verilog HDL/FPGA 외전1 - 시계만들기] Chapter 2. 시,분,초 만들기 - Part2

질문

		always @(posedge clk) begin
	    if(reset) begin
			r_cnt_val <= {P_COUNT_BIT{1'b0}};
			o_tick_gen <= 1'b0;
	    end else if (i_run_en & i_tick) begin
			if(r_cnt_val == P_INPUT_CNT -1) begin
				r_cnt_val <= 0;
				o_tick_gen <= 1'b1;
			end else begin
				r_cnt_val <= r_cnt_val + 1'b1;
			end
	    end else begin
			o_tick_gen <= 1'b0;
		end
	end

위 코드에서

 else if (i_run_en & i_tick)

이 부분의 경우 아래 그림과 같이 set up Time(두번째 사진 1) 에 의해 59 -> 0에서 tick이 1로 전달되는게 아니라 그 다음 posedge clk (두번째 사진 2) 0 -> 1일 때 tick이 1로 전달되는게 맞나요?

20241001_160216_1.png20241001_161012.png

질문 드린게 맞다면 그냥 negedge에서 확인하면 되는게 아닌지 궁금하여 질문 드립니다.

답변 2

0

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

안녕하세요 🙂

질문이 100% 이해가 되진 않았는데요.

우선 실습에 사용한 Verilog 코드 자체가 posedge clk 기반이기 때문에, 다음 내용은 성립이 불가능합니다.

"질문 드린게 맞다면 그냥 negedge에서 확인하면 되는게 아닌지 궁금하여 질문 드립니다."

 

그려주신 그림은 waveform 을 시뮬레이션을 통해서 볼 수 있어서, 그걸로 대체해서 설명해주시면 이해에 도움이 될 것 같아요.

 

추가 질문 있으시면 남겨주셔요 🙂

0

안녕하세요, 인프런 AI 인턴입니다. BBBBB님.

아래 설명과 링크를 통해 문의주신 tick 신호 전달의 타이밍에 대해 자세히 안내해드리겠습니다.

질문 요약

강의 중 시계만들기 예제에서 always @(posedge clk) 블록 내

else if (i_run_en & i_tick)

이 문장에서 i_tick 신호가 언제 1로 전달되는지 질문 주셨습니다. 즉, setup time에 의해 신호가 전달되는지 혹은 다음 posedge clk에서 전달되는지에 대한 질문과 더불어, posedge 대신 negedge에서 신호를 확인하는 것이 타당한지에 대한 내용입니다.

관련 내용 설명

setup timehold time은 디지털 회로에서 매우 중요한 개념입니다. posedgenegedge는 신호의 상승 에지와 하강 에지를 의미합니다.

관련 질문 링크

유사한 질문과 답변이 논의된 링크들을 공유드립니다:
1. 14강 Tb 질문있습니다.
- Verilog HDL에서 포지티브 및 네거티브 엣지의 타이밍 관련 질문과 상세한 답변이 포함되어 있습니다.

  1. 개념 질문드립니다.
    • 디지털 회로 타이밍 다이어그램 이해와 시뮬레이션 결과 해석에 관한 질문입니다.

풍부한 설명

디지털 회로에서 신호가 클럭 에지(포지티브 또는 네거티브)와 동기화하는 과정은 매우 중요합니다. posedge clk 블록 내의 코드는 클럭의 상승 에지에서 동작합니다. 따라서,

else if (i_run_en & i_tick)

이 조건문 내에서 i_tick 신호가 설정되기를 기대합니다.

실습 예제:

아래의 코드를 통해 네거티브 엣지에서도 동작을 확인하는 방법을 시도할 수 있습니다:

always @(negedge clk) begin
    // Your logic here for negedge clk
end

이를 통해 신호가 예상대로 동작하는지 시뮬레이션 결과를 통해 확인할 수 있습니다.

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

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기