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

coldugs님의 프로필 이미지
coldugs

작성한 질문수

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

[16장] PS에 올라가는 c 코드의 malloc 관련 질문입니다.

해결된 질문

작성

·

452

1

- 강의 내용외의 개인 질문은 받지 않아요 (개별 과제, 고민 상담 등..)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
안녕하세요 맛비님, 강의 잘 보고 있습니다.
 
16장 Zynq PS C 코드에서 malloc 관련해서 질문이 있습니다.
 
main.c 코드의 40~41번 줄에서 write_buf 를 malloc하는데 실제 write_buf가 위치하는 물리적 메모리 주소를 알고싶어서 디버깅으로 값을 확인해봤습니다.
포인터 변수 write_buf는 0x120300 위치에 할당됩니다. 링커스크립트를 확인해보니 base 주소가 0x100000 부터 시작하는 DDR 영역이 맞습니다.
 
그런데 문제는 포인터 변수 write_buf가 가리키는 곳의 주소인데요,
write_buf[0], write_buf[1] 의 주소를 확인해보면 각각 0x0, 0x4 가 나옵니다. (printf -- %p , 디버거 변수로 같은 값인 것 확인)
 
Zynq 문서 UG585 113p 를 확인해보니 메모리 주소 0x0 부터 0x3FFFF 까지는 OCM (on chip memory) 으로 할당되었고,
UG585 732p 를 확인해보니 OCM은 256 KB의 RAM 을 포함한다고 되어있습니다.
 
 
0x0이라는 주소값을 감안하면 동적할당한 변수들은 RAM에 저장된 것 같습니다.
그런데 위와 같은 생각의 결과가 링커스크립트와 차이가 있어서 질문을 남기게 되었습니다.
 
링커스크립트(lscript.ld)에서 heap 영역에 대한 allocation을 확인해보면,
ps7_ddr_0 영역에 배치되어있습니다.
 
 
(서론이 길었습니다만 최종 질문...) write_buf 변수의 동적 할당된 주소 위치가 0x0으로 나오려면
heap 영역은 ps7_ram_0 영역에 allocation 되어야 하는 것 아닌가요??
 
 
아래 첨부한 사진은 컴파일 후 생성된 map파일에서 DDR 영역에 allocate되어 있는 heap 영역입니다.
 
 
 

답변 2

1

coldugs님의 프로필 이미지
coldugs
질문자

먼저 빠른 답변 감사드립니다.

 

답변해주신 내용이 맞았네요.

링커스크립트에서 default로 할당한 heap 영역의 크기가 너무 작아서 DDR에 할당하지 못하고 RAM으로 밀려난 듯 합니다. (왜 되는지(?)에 대한 이유인것 같기도...)

해당 부분 수정해주니 정상적으로 heap 영역에 allocate되네요. 

(Verilog HDL 수강하지 않는데 링크는 들어가졌습니다.)

 

19장 강의에 잘 설명해주셨는데 괜한 질문을... 감사합니다 (_ _)

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

된다니 다행이네요. 

즐공하셔요 :)

0

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

안녕하세요 :)

해당 질문을 물어보실 수 있다니.... 실력자...?!

제가 제대로 이해했는지 모르겠는데요. 해당 이슈는 Mem alloc size 의 문제에서 발생하지 않았을까...? 하는 느낌이 듭니다. 

먼저 16장 영상에 mem alloc 의 버그가 있었습니다.

Verilog HDL 수강중이시면 해당 링크 보이실 수 있는데요.

https://inf.run/CRQT

위 링크 내용을 정리하면 16장 영상에서 vitis 의 default mem alloc size 를 사용중이고, 실제 SW 는 이보다 큰 영역을 사용중이었다. 결국 버그입니다.

19장에서 해당 내용을 다뤘고요. 

19장의 10:50 구간을 보신 이후에, 적용하셔서 다시 Test 부탁드려도 될까요?

HW 엔지니어라 이쪽 부분에는 조금? (많이) 약합니다.

즐공하세요 :)

 

 

coldugs님의 프로필 이미지
coldugs

작성한 질문수

질문하기