설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
안녕하세요 맛비님. 저는 맛비님 강의를 수강중인 취준생입니다. 다름이 아니라 면접과정에서 궁금증이 생겨서 질문을 남기게 되었습니다. 저는 전자공학과를 전공으로 했으며 3학년 까지 임베디드 관련 프로젝트를 하고 수상도 했습니다. 그런데 4학년에 rtl 엔지니어에 관심이 생겨서 공부를 시작했습니다. 유튜브나 전공 강의들을 통해서 verilog의 기초 문법을 다지고 디지털 로직에 관한 기초를 쌓았습니다. 하지만 기업 면접에서는 3학년때까지 임베디드 관련 활동을 했으면서 왜 1년도 안되는 경험으로 rtl 엔지니어로 지원하느냐는 질문을 받았습니다. 그래서 반도체에 관심이 많았고 설계에도 관심이 있어서 rtl에 지원하게 되었다고 말씀드렸습니다. 그리고 추가로 유튜브와 사설강의를 통해서 부족한 부분을 보완하고 있다고 말씀드렸습니다. 면접관님은 이 답변을 들으시고 기업에서는 저런 수준의 공부량으로는 같이 일을 할 수 없다는 말을 들었습니다. 그래서 궁금한점이 실제로 회사에서 일을 하기 위해서는 높은 수준의 능력이 필요한지 궁금합니다. 참고로 제가 지원한 회사는 중소기업입니다. 설계독학 맛비님의 강의들을 따라해보고 학교 강의인 디지털 집적 회로 강의도 복습하고 있는데 이 수준으로는 택도 없을까요..?
설계독학맛비's 실전 AI HW 설계를 위한 바이블, CNN 연산 완전정복 (Verilog HDL + FPGA 를 이용한 가속기 실습)
안녕하세요 맛비님. On-chip memory와 Off-chip memory에 대해서 질문드립니다. Off-Chip memory와 가속기 사이에 On-chip memory가 있는 이유? on-chip memory에 accumulator만 존재하면 되지 않을까요? (dram에서 read되는 data -> On chip의 accumulator -> 가속기). 이런 순서로 데이터가 이동하면 sram read delay가 없어도 되지 않을까요? (On-chip memory가 sram이라는 가정하) 병목 현상으로 이 중 가장 느린 device인 DRAM의 속도에 맞춰질 텐데, DRAM에서 주는 data를 accumulator만 거쳐서 바로 가속기에 넣을 수는 없을까요? 제가 알기로는, 병목 현상을 방지하기 위해서 빠른 device는 빠른 device 들끼리 묶어서 속도가 빠른 BUS를 사용하고, 느린 device는 느린 device들끼리 묶어서 속도가 느린 BUS를 사용한다고 알고 있는데, 만약 이 말이 맞다면, 빠른 device들과 느린 device들의 연결은 어떻게 해주는지 궁금합니다. Off-chip memory는 chip 외부에 있기 때문에 메모리 내 데이터를 read write 할 때 power 소모가 on-chip 대비 크다라고 말씀하셨는데, 왜인지 잘 모르겠습니다. Chip 내에서만 power 소모가 일어나는 건가요? power 소모의 주체는 누구인지 궁금합니다. 감사합니다.
안녕하세요 수업듣고 심도있게 학습하고 있는 학생입니다. 인터럽트 처리를 공부하고 있는데 질문이 있습니다. exti가 여러 개인 경우 어떻게 처리하는지 궁금합니다. 저의 처리방식은 인터럽트gpio가 4개로 가정했을때 char 전역변수; void 콜백함수(gpio) { if(gpio==1){전역변수+=1;} if(gpio==2){전역변수+=2;} if(gpio==3){전역변수+=4;} if(gpio==4){전역변수+=8;} vTaskNotifyGiveFromISR(xHandle1, &xHigherPriorityTaskWoken); portYIELD_FROM_ISR(&xHigherPriorityTaskWoken); } 이런식으로 하고자 하여 전역변수를 뮤택스로 묶으려 했는데 isr에서는 뮤택스를 사용하면 안된다고 하신 걸로 학습했습니다. 다른 여러 자료를 찾아보아도 예시를 찾기가 어려워 질문드리게 되었습니다. 제가 질문드리고자 하는 핵심은 여러 인터럽트를 동시에 사용할경우 어떻게 사용해야하는지 궁금합니다.
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
질문글은 환영합니다!!! 작성하시기 전에 다음을 확인 부탁드려요 :) ============================================================================ 강의에서 다룬 내용들의 질문들을 부탁드립니다!! (강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등) 이런 질문은 부담스러워요.. 개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등.. 글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.) 서로 예의를 지키며 존중하는 문화를 만들어가요. 질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! ) 먼저 유사한 질문이 있었는지 검색해보세요. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. =============================================== ============================= can't connect to X11 window server using '10.0' 라고 뜨면서 vivado 실행이 갑자기 안되네요 원래 잘됐었는데 뭐가문제인지모르겠습니다.ㅜㅠ
설계독학맛비's 실전 AI HW 설계를 위한 바이블, CNN 연산 완전정복 (Verilog HDL + FPGA 를 이용한 가속기 실습)
안녕하세요, 강의 잘 듣고 있습니다. 질문이 있는데요, Lab2 Practice 1의 3분 13초 에서 빨간색 네모 박스가 앞선 연산과 동일하다고 말씀하셨어요. 앞선 연산은 필터의 크기 (KX, KY)와 동일한 크기를 가지는 CI개 채널 입력에 대한 CO개 만큼의 출력을 생성하는 연산으로 이해됩니다. 그러면 빨간 네모 박스 연산이 위 연산과 동일하려면 첫 번째 라인의 for문이 지금처럼 (y, E: 출력 픽셀 y축 위치) 에 대한 for문이 아니라 출력 채널의 수 (m, M: 출력 채널 수) 가 되어야 하는 것 아닌지요? (C코드에서의 m 이 연산 그림에서의 CO로 이해됩니다.) 감사합니다.
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
강의를 듣던 중 코드에 대한 이해가 부족해서 그런데, 위의 사진에서의 코드를 보면 for(i=0; i<100; i = i+1) begin @(negedge clk); i_valid = 1; i_value = i; @(posedge clk); end 에서 @(negedge clk);와 @(posedge clk);를 사용하는 이유를 알 수 있을까요?? 추가로 @(posedge clk);, @(negedge clk);에 대한 문법이 이해가 안됩니다. 설명 부탁드립니다 ㅠㅠ
설계독학맛비's 실전 AI HW 설계를 위한 바이블, CNN 연산 완전정복 (Verilog HDL + FPGA 를 이용한 가속기 실습)
안녕하세요. 항상 좋은 강의 잘 수강하고 있습니다. CNN을 fpga에 올리는 강의를 따라서 진행하고 있는데 아래와 같이 uart 통신 결과가 출력됩니다. 그래서 레퍼런스 문서들을 읽어보면서 이리저리 해보다 아래 사진의 파란색 부분을 qspi와 jtag를 연결하도록 하고나니 정상적으로 작동했습니다. 그 후에 몇가지 실험을 해보니 fpga 프로그래밍을 하기 위해서는 sd와 qspi가 연결되어 있어야했고 실제 동작할 때는 qspi와 jtag 연결한 상태이어야만 했습니다. sd, sqpi, jtag에 대한 문서를 읽어봐도 제대로 이해가 가지 않아서 혹시 sd, qspi, jtag에 어떻게 연결하는지가 무엇을 의미하는지 알 수 있을까요?? 감사합니다. zybo z720을 사용하고 있고 강의 영상과 다른 점 없이 잘 진행되었는데 무엇이 문제인지 몰라 질문 드립니다. 감사합니다.
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
안녕하세요 맛비님! FPGA 10강을 수강하던 중 질문사항이 생겨 문의드립니다! 보드에 설계를 올린 후 read 과정에서 reg0에 100MHz 값을 넣었기 때문에 reg0 만 read 하신걸로 알고있는데, 실습을 따라하던 중, reg1,2,3 값이 궁금하여 read 해보았는데 아래와 같은 값을 읽어왔습니다. 혹시 이 값들은 무엇을 의미하는건지, 아무것도 저장을 하지 않았다면 왜 reg1 에만 5라는 값이 저장되어있던건지 궁금합니다!
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
안녕하세요 맛비님! 9장 axi 를 이용한 led점등 프로젝트를 수행하던 중 궁금한 점이 생겨 질문드립니다. 제공해주신 코드가 1ns/1ps 의 timescale 을 가지는 것으로 확인하였는데, vitis terminal 을 통하여 넘긴 100,000,000 과 같은 수는 0.1s (==100,000,000ns) 이므로 0.1s 마다 깜빡거려야하는 것 아닌가요?? 기본적인 내용이지만 조금 헷갈려서 질문드립니다!
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
안녕하세요 맛비님. 위 코드에서 read 용 FSM과, write 용 FSM을 구분하신 이유가 있을까요? c_state, n_state로 o_read, o_write를 구하는 방법과의 차이가 있을까요? (register를 더 사용해서) 또 다른 이유가 있으시다면 말씀해주시면 감사하겠습니다!
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
안녕하세요 맛비님. [FPGA 22장] 프로젝트 Fully Connected Layer 설계 - 실습편 강의 중 질문사항이 생겨 문의드립니다. HW 가속기의 연산 시간은 BRAM 0에 input을 넣는 962 us + BRAM 1에 weight를 넣는 963 us + fc 연산 41.68 + 결과값 받아오기 0.88 us 여서 총 1968 us 라는 점 이해 잘 됐습니다. BRAM 0과 BRAM 1에 데이터를 넣는 과정은 순차적으로 (bram 0에 다 넣고, bram 1에 넣기 시작) 진행되는거라서 둘의 연산 시간을 더해주는 건가요? 그렇다면 두 연산을 병렬로 처리할 수는 없나요? HW 가속기의 장점은 병렬연산이 가능한 것인데, 혹시 AXI를 통해 PS에서 BRAM으로 데이터를 전송하는 과정들은 병렬 처리가 불가능한건지 궁금합니다. 전체 run의 수를 늘려서 output node의 수를 4개가 아닌 더 많이 생산할 수 있다고 배웠습니다. 이때 run을 1024번을 하여 output node를 4096개 만드는 경우, 맛비님께서 전체 HW 연산 시간에서 BRAM 0에 input을 넣는 시간인 962.46us는 배제해도 된다고 하셨습니다. (나머지 3개 연산 시간만 더하면 그게 전체 HW 연산 시간이라고 들었습니다.) 하지만 해당 부분을 배제하면 안되는 것 아닌가요? (혹시 1024번의 RUN을 실행하면 962.46us 너무 작은 숫자라 배제해도 된다는 뜻인건가요..?) 항상 좋은 강의 제작해주셔서 감사합니다. 새해 복 많이 받으세요!
설계독학맛비's 실전 AI HW 설계를 위한 바이블, CNN 연산 완전정복 (Verilog HDL + FPGA 를 이용한 가속기 실습)
안녕하세요 맛비님. 26:25초에 weight의 개수에 대해서 질문드립니다. layer1에서 weight가 6개 (2*3) 쓰였고, layer2에서 weight가 6개 (3*2) 쓰였고, layer3에서 weight가 4개 (2:2) 쓰였으면, 총 weight의 개수는 6+6+4 = 16개 아닌가요? 어떻게 2*3*2*2 = 24개인지 질문드립니다. 감사합니다.
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
질문글은 환영합니다!!! 작성하시기 전에 다음을 확인 부탁드려요 :) ============================================================================ 강의에서 다룬 내용들의 질문들을 부탁드립니다!! (강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등) 이런 질문은 부담스러워요.. 개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등.. 글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.) 서로 예의를 지키며 존중하는 문화를 만들어가요. 질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! ) 먼저 유사한 질문이 있었는지 검색해보세요. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ============================================================================ 회사에 ZC702 보드가 있길래 일단은 이 보드로 시도해보고 있습니다. 일전에 다른 수강생이 했던 질문을 참고하여 xdc파일은 설치한 상태이지만, 아직 정확한 포트 맵핑을 하지 않은 상태입니다. 당연히 Bitstream에서는 오류가 발생했구요 ,, 일단 보드가 잘 작동하는지 확인해보고 싶어, Auto connect를 해봤는데 보드를 인식하지 못 하네요 ,, 장치관리자에서는 보드가 연결됐다고 나와있습니다. 원래 Bitstream이 끝나야만 Auto connect가 가능한걸까요 ??
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
안녕하세요 좋은 강의 잘 보고 있습니다. 다름이 아니라 [FPGA 22장] 프로젝트 Fully Connected Layer 설계 - 실습편을 진행하던 도중 아래 사진과 같이 vitis 상에서 에러가 발생하여 질문 드립니다. 해당 과정을 수행하면 위와 같은 에러가 나오는데 구글링을 해보아도 마땅한 해결방안을 찾지 못하겠습니다. 제가 사용하는 보드가 pynq-z2 보드인데 zybo 보드와 호완 가능한 것으로 알고 있습니다. 혹시 보드가 달라서 생기는 문제라면 개인적으로 해결해보겠습니다. 즐거운 연휴 보내세요. 감사합니다.
설계독학맛비's 실전 AI HW 설계를 위한 바이블, CNN 연산 완전정복 (Verilog HDL + FPGA 를 이용한 가속기 실습)
안녕하세요 맛비님 제가 이쪽 (NPU) 관련 자료들을구글에서 참고해 독학을 하였습니다. 맛비님 강의를 들어보니, 제가 그동안 찾았던 자료 중 틀린 부분이 몇 가지 보였습니다. 그리고 놀라웠던 점이, 교육 자료 중 이미지, 개념 정리가 너무 완벽하게 되신 것이 놀랍습니다. (흐름...) 아직 대학교 4학년 (많이 늦었지만..) 저도 나중에 어떤 것을 찾고 이해한 내용을 바탕으로 발표를 해야할텐데, 맛비님 강의의 교육자료의 출처가 어디인지 궁금합니다. (추천하시는 책 or 사이트가 있는지도 궁금합니다.) 그리고, 영어로 된 사이트가 더 신뢰하기 편한가요? 저는 영어로 된 사이트보다 한국말로 된 사이트가 좋아서 참고했었는데, 생각보다 한국말로 된 블로그에서 틀린 점이 많았습니다.
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
https://github.com/dorssel/usbipd-win/releases 들어가서 usbipd-win_[버전].msi를 설치한다. 제대로 설치 안됐을 수도 있어 파워셀상에서 한번 더 설치한다. winget install --interactive --exact dorssel.usbipd-win [출처: https://learn.microsoft.com/ko-kr/windows/wsl/connect-usb ] 그리고 WSL상에서 sudo apt install linux-tools-virtual hwdata sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20 [출처: https://choiseokwon.tistory.com/354 ] 전부 설치 완료되면 WSL은 일단 나가고 파워셀을 나갔다 다시 들어간다. 파워셀상에서 usbipd list 하면 이게 뜬다 맨 왼쪽 BUSID를 주목한다. 3-1에 Serial이라고 써져있는거 보니 이거를 WSL에 연결하면 될 것 같다. usbipd bind --force -b 3-1 3-1을 윈도우상에서 사용 중이면 연결이 안되기 때문에 bind명령을 통해 usbipd가 usb 장치를 먼저 점유하도록 한다. usbipd wsl attach -b 3-1 attach 명령으로 3-1을 WSL에 연결한다. 제대로 연결 되었는지 확인하기 위해 usbipd list 맨 오른쪽에 STATE를 주목한다 Attached라고 써져있는 것을 보니 제대로 연결되었다 WSL에 다시 들어간다. lsusb Bus 001 Device 002에 제대로 잡힌 것을 볼 수 있다. Vivado상에서 USB가 잡히는지 테스트 해본 결과 Hardware manager에서 [사용자 계정]에서는 USB가 안 잡히고 루트계정에서만 USB가 잡힌다. 그러므로 루트계정의 .bashrc도 수정해서 루트계정상에서 Vivado를 실행할 수 있도록 한다. su vi ~/.bashrc vi 에디터에 들어가서 source /home/[사용자 계정]/tools/xilinx/Vivado/2022.2/settings64.sh 를 맨 밑에 추가해준다 vivado 실행하고 FPGA 1장의 예제로 테스트 해보았다. Vivado에서 제대로 잘 잡히는지 Zybo에 업로드가 잘 되는지도 확인해본다. 잘 된다. 잘못된 정보 있으면 피드백 부탁드립니다. 감사합니다!