inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

HW와 SW의 속도 차이?

654

ash8663

작성한 질문수 1

1

안녕하세요! 강의 잘 보고 있습니다.

13장을 수강 중에 질문이 있습니다.

  1. C코드는 어셈블러로 바꾸면 같은 기능이 여러줄이 되는 걸로 알고 있습니다. 예를 들어 밑에 코드에 있는 Xil_Out32함수를 수행하려면 여러번의 Clock이 걸릴 것이고/ HW는 데이터를 옮길 때는 1 Cycle이 걸릴테니 데이터 이동 시에 문제가 없는 것 같습니다.

    그런데, 만약 HW가 write동작을 수행하는데 10cycle이 걸리고/ Xil_Out32함수가 register에 쓰는 데 5Cycle이 걸린다면

    HW가 데이터를 BRAM에 다 쓰지 못한 상태에서 Xil_Out32함수 register의 값을 덮어쓰니 문제가 발생할 거 같습니다. 이를 해결하려면 어떻게 해야 하나요?

     

  2. 아래 코드에서 write_buf[i]가 하는 역할이 궁금합니다.

     

  3. 추가적으로... 리눅스에서 tb를 돌리면 어떻게 windows의 vivado창이 뜨는 건가요? (리눅스만 있었다면 안되지만, 윈도우 환경에 리눅스를 깔아서 가능한건가요?)

감사합니당

for(i=0; i< MEM_DEPTH ; i++){
   write_buf[i] = rand();
   Xil_Out32((XPAR_LAB13_MATBI_0_BASEADDR) + (MEM0_DATA_REG*AXI_DATA_BYTE), write_buf[i]);
}

fpga 임베디드

답변 1

1

설계독학맛비

안녕하세요 :)

강의 잘 보고 계시다니 다행이네요. 바로 답변 드리겠습니다!

 

A1. 이 질문은 바로 Sync 와 관련이 되어 있습니다. Handshake 라고 부르는 Channel 을 통해서 AXI4-Lite I/F 를 통해 PS(SW) <-> PL (HW) 로 값을 Read / Write 할 수 있습니다.

그런데, 만약 HW가 write동작을 수행하는데 10cycle이 걸리고/ Xil_Out32함수가 register에 쓰는 데 5Cycle이 걸린다면

예를 들어주신 조건 대로, Xil_Out32() 를 SW 에서 Call 했다고 가정해보겠습니다. (사실 몇 cycle 이 걸릴지는 8 장에서 배운 ILA 를 통해서 확인 가능합니다. )

Xil_Out32() 은 PS -> PL 로 Write 하는 함수이죠.

그러면 SW 는 5 cycle 에 걸쳐서 Write 를 하려고 합니다. 하지만 받는 입장인 PL 은 10 cycle 에 걸쳐서 응답이 가능한 상태이죠. 그렇다면, 이런 Channel 기반의 I/F 는 느린 Cycle 로 Performance align 이 됩니다.

즉 10 cycle 뒤에 Xil_Out32() 이 완료 되겠습니다. valid (SW 에서 보낼려고 함), Ready (HW 에서 값을 받으려고함) 즉, Valid / Ready 가 서로 1 로 handshake 가 될 때 값이 전송됩니다. 그러므로 완벽한 Sync 를 맞출 수 있게 됩니다.

image결론 : Cycle 과 무관하게 Data 는 정상 전송됩니다. SW, HW 둘중 느린 cycle 로 align 되겠죠. Xil_Out32() 은 blocking function 으로 저 handshake 가 완료 되기 전까지는 다음 line 으로 넘어가지 못해요.

A2.

AXI4-Lite 를 통해서 PL(HW) 내의 BRAM 에 값을 Write 하고, Read하는 예제입니다.

random 으로 생성된 값을 쓰고 읽었을때, 값이 같으면 제대로 BRAM 에 Write 하고 Read 가 정상적으로 되었다는 뜻이죠. write_buf[i] 는 그 random 값을 담아두는 SW 상의 메모리 공간입니다.

A3.

MobaXterm tool 을 설치하셨고, Vivado 를 WSL 에 설치했습니다. Vivado 의 waveform 은 GUI 기반입니다. 이 GUI 를 어떻게 Window 까지 가져올 수 있냐면 바로 MobaXterm 의 "X11 Display" 를 통해서 가능합니다.

즐공하세요 :)

UART0, 1 중 선택

1

58

2

datamoverbram모듈질문

1

66

2

vitis 설치엣 alveo kria versal 등 옵션을 끄고 설치를 했습니다.

1

101

2

vitis 설치 관련 질문 있습니다!

1

87

2

FPGA 공식문서 읽는법

1

99

2

보드 추가의 클릭창이 없습니다.

1

72

2

Edit in IP Packager에서 코드 수정 후 IP 수정하면 simulation에서 수정된 코드로 작동이 안됩니다

1

83

2

BRAM의 Read / Write를 다 수행했는지 확인할 때 사용되는 num_cnt / i_num_cnt 관련 질문

1

108

1

Vitis 코드 작성

1

130

2

vivado 및 vitis 리눅스 환경 설치 관련 질문드립니다.

1

295

3

[9장 led 점등 시간 제어 불가]

1

83

2

Platform Invalid 오류

1

153

3

WSL 설치 관련 문의드립니다!!

1

98

2

Vivado 툴, 파일 질문드립니다!

1

157

2

9장 LED 점등 안됨

1

113

3

Edit in IP Packager 이후에

1

88

1

Fpga 로직

1

92

2

pmu-fw is not running

1

128

2

Create Project에 대해서 궁금해요

1

91

2

장치관리자 USB 포트

1

102

2

FPGA 7장 AXI_LITE I/F질문

1

91

1

bram mover에서 합성할때

1

80

2

타이밍 위반 질문

1

81

2

rvalid 초기화

1

68

2