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

김석희님의 프로필 이미지
김석희

작성한 질문수

설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)

[FPGA 12장] AXI4-Lite I/F 를 사용하여 Register 가 아닌 메모리에 Write / Read 해보기 - 코드리뷰편

코드 질문입니다.

작성

·

103

1

안녕하세요 🙂

[1. 질문 챕터] : BRAM부분 myip의 AXI4부분입니다.

image.png

 

[2. 질문 내용] :

mem0_axi_addr = 1000 (binary)

mem0_axi_data = 1100 (binary)

mem0_addr_reg = S_AXI_WDATA 값 저장

mem0_data_reg = S_AXI_WDATA 값 저장

mem0_addr_write_hit = slv_reg_wren && (

axi_awaddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] == mem0_axi_addr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB])

여기서 axi_awaddr[5:2] == mem0_axi_addr[5:2]) 는 axi_awaddr[5:2] == 10 이니까 axi_awaddr[5:2] == 2 (decimal) 일때 1이되는건데

awaddr는 write address 채널인데 그러면 reg의 주소가 8이고 slv_reg_wren값 즉, write 허가가 났을때 mem0_addr_write_hit = 1 이되는것이 맞나요?

같은 맥락으로 그러면 data_write_hit는 reg의 주소가 h이면서 wren=1일때 hit이되는거고, data_read_hit는 reg_rden=1이면서 reg의 주소가 h일때 hit가 되는건가요?

그렇다면 이 주소를 사용하는 레지스터 외 다른 레지스터들은 아무 의미가 없는건가요? (그렇다면 레지스터를 굳이 16개나 만들어놓은 이유를 잘 모르겠습니다.)

 

그리고 바로 밑 코드도 이해가 잘 안가는데,

mem0_addr_write_hit가 1일때 cnt값에 mem0_addr_reg값이 할당되는데 이 값은 S_AXI_WDATA로 주소에쓸 data값아닌가요? 주소에 쓰는 데이터값을 왜 count값으로 사용하는지 잘 이해가 안갑니다.

mem0_addr_reg와 mem0_data값 왜 S_AXI_WDATA로 넣었는지 잘 이해가 안갑니다. 주석으로 이 값이 count값이라고 적어주셨는데 이해가 잘 안갑니다.

처음에 좀 해보고 잘 안되면 다음날보고 그래도 잘 안되면 그 다음날 또 보고 공부를 하고 있는데 이 부분만 유독 이해가 잘 안가서 처음으로 질문글 올려봅니다.

사실 코딩부분은 제가 이해를 스스로 해야한다고 생각하는데 죄송합니다.

 

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

 

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

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

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

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

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

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

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

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

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

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

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

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

답변 1

0

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

안녕하세요. 🙂

질문글이 잘 이해가 안되서.. ㅠ 완벽하게 답변이 가능할지 모르겠네요.

한 줄씩 적어볼께요.

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

awaddr는 write address 채널인데 그러면 reg의 주소가 8이고 slv_reg_wren값 즉, write 허가가 났을때 mem0_addr_write_hit = 1 이되는것이 맞나요?

네 맞습니다.

같은 맥락으로 그러면 data_write_hit는 reg의 주소가 h이면서 wren=1일때 hit이되는거고, data_read_hit는 reg_rden=1이면서 reg의 주소가 h일때 hit가 되는건가요?

주소가 h 라는 말이.. 이해는 잘 안되지만, (h 라는 값이 어떤 값일까요?) 앞선 질문과 같은 원리입니다.

그렇다면 이 주소를 사용하는 레지스터 외 다른 레지스터들은 아무 의미가 없는건가요? (그렇다면 레지스터를 굳이 16개나 만들어놓은 이유를 잘 모르겠습니다.)

네 맞습니다. 현재 코드에서는 활성화 된 주소는 16개를 전부 사용하지 않습니다.

불필요하다고 판단되는 부분은 지우시면 됩니다. (당연히 안쓰면 지워도 됩니다. 누군가는 미래? 를 위해서 남겨두고 싶어할 수 있고요. 설계자의 영역같아요.)

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

mem0_addr_write_hit가 1일때 cnt값에 mem0_addr_reg값이 할당되는데 이 값은 S_AXI_WDATA로 주소에쓸 data값아닌가요? 주소에 쓰는 데이터값을 왜 count값으로 사용하는지 잘 이해가 안갑니다.

mem0_addr_reg와 mem0_data값 왜 S_AXI_WDATA로 넣었는지 잘 이해가 안갑니다. 주석으로 이 값이 count값이라고 적어주셨는데 이해가 잘 안갑니다.

시뮬레이션에서는 Count 값을 곧 주소로 사용했지만 Random Access 가 가능한 코드입니다.

hit 가 되었을때, Address 시작점을 저장하죠. address hit 가 없다면, 1 증가해서 사용하는 코드입니다. "왜?" 가 궁금 하시다고 하시면, mem 전체 address 에 값을 R/W 해보고 싶었어요.

image.png

이해에 도움이 되셨기를 바래요.

즐공하세요 🙂

김석희님의 프로필 이미지
김석희

작성한 질문수

질문하기