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

Inflearn Community Q&A

Design Self-study Taste's Practical Verilog HDL Season 2 (AMBA AXI4 Complete Conquest)

[HDL Chapter 38 - Part 2] Mem copy IP. DMA RDMA Design - Practice - Code Review

RDMA 코드에서 불필요한 시그널에 대한 질문

Written on

·

62

1

안녕하세요 🙂

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

[1. 질문 챕터] : 38장-2부 RDMA 코드리뷰

[2. 질문 내용] :
맛비님의 강의와 코드를 토대로 제 스타일의 DMA 코드를 구성해보고 있습니다. 그러던 중, RDMA.v의 코드 중 불필요한 시그널이라고 생각되는 부분이 생겼는데요. 제 지식이 부족한 탓에 필요한 시그널들을 맘대로 없애는 것 아닐까 두려워 질문드립니다.
강의 때 설명해주신 부분인데 제가 듣지 못했던 거라면 정말 죄송합니다...

1) ARLEN_R
해당 시그널은 AR 채널의 FIFO에서 R 채널로 출력되는, R 채널에 버스트 길이를 알려주는 시그널인데요. 버스트의 마지막을 체크하는 로직이 RLAST && r_hs 로 이루어지므로 이 시그널은 코드 내에서 전혀 사용되고 있지 않습니다. 그러므로 AR 채널에서 R 채널에 버스트 길이를 알려주는 행위 자체가 의미가 있는지 의문을 갖게 되었습니다. 어떠한 데이터든 FIFO에 넣어줌으로서 empty_n 시그널만 활성화 시켜줘도 전체 transaction이 끝나지 않았음을 R 채널에 알려줄 수 있지 않을까요?
2) r_burst_cnt_r

always @(posedge ap_clk) begin
	if(ap_rst) begin
		r_burst_cnt_r	<= 'b0;
	end else if (w_s_idle_r | is_burst_done_r) begin
		r_burst_cnt_r	<= 'b0;
	end else if (r_hs) begin
		r_burst_cnt_r	<= r_burst_cnt_r + 1'b1;
	end
end

위와 같은 맥락으로 현재 transaction의 현재 버스트 횟수를 알려주는 해당 시그널도 특별히 사용되는 부분이 없습니다. 디버깅을 위한 코드일까요...?
3) r_hs_data_cnt

always @(posedge ap_clk) begin
	if(ap_rst) begin
		r_hs_data_cnt	<= 'b0;
	end else if (w_s_idle) begin
		r_hs_data_cnt	<= 'b0;
	end else if (ar_hs) begin
		r_hs_data_cnt	<= r_hs_data_cnt + burst_len_ar;
	end
end
always @(posedge ap_clk) begin
	if(ap_rst) begin
		r_ar_hs_cnt	<= 'b0;
	end else if (w_s_idle) begin
		r_ar_hs_cnt	<= 'b0;
	end else if (ar_hs) begin
		r_ar_hs_cnt	<= r_ar_hs_cnt + burst_len_ar;
	end
end

해당 시그널은 위 코드에서 보시다시피 r_ar_hs_cnt와 정확히 같은 메커니즘으로 동작합니다. 그러므로 둘 중 한 시그널로 대체가 가능하다고 생각됩니다.

verilog-hdlfpga임베디드amba

Answer 2

0

semisgdh님의 프로필 이미지
semisgdh
Instructor

안녕하세요!

말씀해 주신대로, 미사용하는 로직들이 같이 있습니다.

일관성 있게 코딩하다보니 불필요하게 붙은거고요.

미사용 로직이니, 삭제하셔도 동작에 문제는 없어보이네요.

즐공하세요!

0

communityai8509님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 이준호님께서 질문하신 RDMA 코드에서의 불필요한 시그널에 관한 궁금증을 해결할 수 있는 정보를 제공해 드리겠습니다.

RDMA 설계에서는 다양한 시그널이 사용되며, 일부는 코드의 가독성을 높이거나 디버깅을 지원하기 위해 사용되기도 합니다. 이 중 몇 가지 시그널의 사용 여부에 대해 의문을 가지신 것 같습니다.

  1. ARLEN_R

    • 이 시그널은 일반적으로 버스트의 길이를 전파하는 데 사용되지만, 실제 코드에서 활용되지 않는 경우도 있습니다. 만약 RLAST와 같은 신호 조합을 통해 버스트의 끝을 처리할 수 있다면, ARLEN_R는 필수적이지 않을 수도 있습니다. 하지만 설계상 수정이 필요한 경우, 전체 코드를 검토하여 다른 의존성에 영향을 미치지 않도록 주의하십시오.
  2. r_burst_cnt_r

    • 이 신호는 주로 각 버스트의 처리 상태를 추적할 때 사용됩니다. 실제 코드에 사용되지 않을 수 있지만, 버스트 진행 상황에 대한 확인이나 설계상의 이유로 포함되어 있을 수도 있습니다. 디버깅이나 코드 가독성을 위한 부분일 가능성이 있습니다.
  3. r_hs_data_cnt와 r_ar_hs_cnt

    • 두 시그널은 동일한 역할을 수행하는 것으로 보이며, 이 경우 하나의 시그널로 통합해도 될 것 같습니다. 하지만, 코드 변경 전에 전체 코드 흐름을 잘 이해하고, 시뮬레이션을 통해 변경 사항이 의도한 대로 작동하는지 확인하는 것이 중요합니다.

다음의 게시물에서 유사한 내용이 다루어지고 있으니 참고하시길 권장드립니다:

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