강의

멘토링

커뮤니티

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

주노님의 프로필 이미지
주노

작성한 질문수

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

22장 Vitis C언어 코딩 시 Register map 질문드립니다.

작성

·

236

1

안녕하세요 .

22장에서 BRAM을 하나 더 추가하여서 Core 수를 늘려보자는 취지로 하나 더 늘려보았습니다.

따라서 AXI 코드를

이렇게 설정해주었고 (16bit로 진행했기 때문에 BRAM 하나당 2Core = 4Core 입니다.)

Vitis C언어 상에서도

 

위와 같이 설정해주었습니다.

 

하지만, Vitis serial terminal 상에서는

이처럼 result_2 / result_3 에 관련된 값이 출력되지 않았습니다.

그래서 제가 추측하는 바로는 4'ha 를 0xa로 define하는 방법이 잘못되었나.. 생각이 들면서도 검색해봐도 16진수에 10은 0xa로 c언어상에서 표현한다고 하여 이렇게 궁금하여 질문드립니다.

 

항상 좋은 강의해주셔서 감사합니다.

답변 1

0

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

안녕하세요 🙂

개인적으로 수정하신거라 정확한 답변이 어려운점은 양해 부탁드립니다.

질문을 정확하게 이해하지 못했는데요.

  1. 8b -> 16b 로 확장까지는 이해했습니다.

여기는 이해를 못했습니다. core 수를 늘리자고 했는데, bit 는 확장했고..

image.png


잘 모르는 상태에서 현상만 보았을때는

image.png

연결이 잘못된게 아닐까? 라는 생각도 드네요. 실제로 0 이 read 되는 상태라면..?


따라서 기존에 잘 나오는 result1,2 를 2,3 에 연결해보고 값이 동일하게 잘 나오는지 check 해봐도 좋을 것 같습니다. (result 2,3 의 연결 이슈인지 아닌지를 찾기위함)

주노님의 프로필 이미지
주노
질문자

맛비님 답변 정말 감사합니다.

 

먼저 16Bit로 늘렸던 이유는 8Bit system으로는 정확도가 떨어진다고 생각하여 16Bit로 늘렸고, 그에 따라 32Bit BRAM으로는 Core가 2개로 줄어들기 때문에 BRAM을 하나 더 추가하여 Core 4개를 맞추고자, BRAM을 늘린거였습니다.

 

맛비님의 피드백을 보고, 이것저것 실험해보았습니다.

먼저 Vitis Code 상에서 Define을 변경해보았습니다.

image.pngimage.png

 

또한, 이처럼 그냥 기존에 result2 / result3 값을 계산하는 Core가 계산이 안되는 것인가? 라는 생각을 하게 되었습니다.

Module간에 Result Port도 여러번 확인해보았지만 문제가 없었습니다.

혹시나 Lab22 마지막 쯤에 말씀해주셨던 내용에서 Weight 값을 Update하여 여러번 Core를 돌리면 더 많은 Output Node를 구현할 수 있다고 말씀하셨던것 처럼 Weight를 Update하고 다시 Core를 돌리는 과정에서 BRAM0의 주소를 다시 Clear해야 하는것일까요?

 

Vitis에 먼저 돌리기 전에, Vivado를 통해 Simulation을 했을 당시에는 Result0/1/2/3 모두 동일한 Clock에 동시에 연산되는것처럼 보였기 때문에 이를 신경쓰지 않았지만 시뮬레이션과 다르게 실제 환경에서는 BRAM1에 Weight값 2개가 먼저 들어가고, 연산 후 BRAM2에 있는 Weight값 2개가 들어가는 형태인지 궁금합니다.

 

항상 좋은 강의를 해주셔서 감사합니다.

 

 

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

result0,1 은 잘나오고, 2,3 은 안나오는 상황이라면,

아키텍쳐를 result0,1 의 Core 모듈과 Memory 를 복제하여 result 2,3 을 구현하는 방법이 맞다면, 서로의 dependency 는 없다고 생각이 드는데요.

연결 이슈가 아닐까요?

주노님의 프로필 이미지
주노

작성한 질문수

질문하기