강의

멘토링

커뮤니티

Inflearn Community Q&A

dentist1417997's profile image
dentist1417997

asked

Design Self-Study Tastebi's Practical FPGA-Based HW Accelerator Design (From LED Control to Fully Connected Layer Accelerator Design)

[FPGA Chapter 16] Designing a BRAM Data Mover Module Using FSM - Hands-on Practice

datamoverbram모듈질문

Written on

·

20

1

안녕하세요 🙂

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

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

맛비님, data_mover_bram 코드에서 pipeline 부분을 보다가 궁금한 점이 생겼습니다.

BRAM read latency 때문에 mem_data와 r_valid는 같은 cycle에 유효해지는 것으로 이해했습니다.
그런데 r_core_data[0]은 mem_data를 바로 받아서 cycle N+1에 저장되고,
r_core_delay는 r_valid를 한 번 더 거쳐서 cycle N+2에 반영되는 구조라서
data와 valid가 1 cycle 어긋나는 것처럼 보입니다.

이 경우 data와 valid가 정확히 같은 stage에서 정렬되지 않는것으로 보이는데 제 생각이 틀린건지 궁금합니다.

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

 

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

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

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

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

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

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

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

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

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

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

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

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

fpga임베디드

Answer 2

0

semisgdh님의 프로필 이미지
semisgdh
Instructor

안녕하세요! 질문 남겨주셔서 감사합니다.

올려주신 내용을 읽어보니 파이프라인 타이밍에 대해 아주 꼼꼼하게 분석하셨네요!

흐름을 직접 따라가며 고민하시는 모습이 정말 훌륭합니다.

결론부터 말씀드리면, data와 valid는 1 cycle 어긋나지 않고 정확히 같은 cycle로 정렬되어 넘어갑니다.

정확히 이해하신 대로, BRAM의 read latency 때문에 mem_data와 r_valid는 동일한 cycle에 유효해집니다. 그리고 그 다음 파이프라인 스테이지로 넘어갈 때 코드를 보면, r_core_data[0]에는 mem_data가 들어가고 동시에 r_core_delay에는 r_valid가 시프트되면서 들어가게 됩니다.

이 두 동작은 모두 동일한 클럭 엣지(posedge clk)에서 일어납니다. 즉, 같은 cycle에 유효했던 mem_data와 r_valid가 클럭 엣지를 만나 다음 cycle에 각각 r_core_data[0]과 r_core_delay의 첫 번째 비트(LSB)에 동시에 저장되는 구조입니다.

따라서 r_core_delay가 r_valid를 한 번 더 거쳐서 N+2에 반영되는 것이 아니라, mem_data가 r_core_data[0]에 저장되는 타이밍과 완전히 동일하게 N+1에 반영됩니다. 둘 다 플립플롭을 딱 한 번 거치는 구조이기 때문에 완벽하게 정렬된 상태로 파이프라인을 타게 된다고 보시면 됩니다.

이렇게 코드를 보며 타이밍 다이어그램을 머릿속으로 그려보는 연습이 나중에 설계하실 때 정말 큰 자산이 될 거예요. 궁금하셨던 부분이 잘 해결되셨기를 바랍니다.

남은 강의도 화이팅입니다.

즐공하세요!

0

안녕하세요, 인프런 AI 인턴입니다. dentist141님께서 질문하신 내용에 대해 안내드리겠습니다.

질문하신 data_mover_bram 모듈에서 데이터와 valid 신호의 동기화 문제에 대해 설명하자면, 이 부분은 여러 수강생분들이 혼란스러워했던 부분이기도 하지요.

데이터와 Valid 신호의 동기화

  • r_core_data[0]: 이는 mem_data를 바로 받아서 cycle N+1에 저장됩니다.
  • r_core_delay: 이는 r_valid를 한 번 더 거쳐서 cycle N+2에 반영되기 때문에, 데이터와 valid 신호가 1 cycle 어긋나 있는 듯 느껴질 수 있습니다.

이와 관련된 질문이 이미 여러 번 있어, 자세한 답변이 기존에 존재합니다. 아래 링크들을 통해 해당 내용을 더욱 깊이 이해하실 수 있습니다.

관련 질문과 답변 링크

  1. dat_mover_bram 모듈에서의 데이터 타이밍 관련 문제

    • 이 게시물에서 r_core_delay와 r_core_data의 타이밍 차이에 대한 설명을 참고하시면 도움이 될 것입니다.
  2. BRAM Data Mover에서의 딜레이 문제

    • 데이터 이동 간의 딜레이 관련 문제를 다루고 있습니다.

기본적으로 BRAM에서 데이터가 읽어질 때 발생하는 레이턴시와 관련하여 valid 신호와 데이터가 항상 정확하게 맞물리도록 설계되었는지를 확인하는 것이 필요합니다. 신호의 처리 순서나 상태 머신 논리를 재검토하면 좋겠습니다.


질문하신 부분에 대해 유사한 맥락의 답변 링크를 준비해드렸습니다. 참조하시면서, 혹시 추가적으로 궁금한 점이 생기면 주저하지 마시고 추가 질문해 주세요. 지식공유자께서도 곧 답변해 주실 것입니다.

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

dentist1417997's profile image
dentist1417997

asked

Ask a question