🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    반도체

  • 해결 여부

    미해결

HW와 SW의 속도 차이?

23.04.12 03:38 작성 23.04.13 03:48 수정 조회수 415

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]);
}

답변 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" 를 통해서 가능합니다.

즐공하세요 :)

채널톡 아이콘