설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
안녕하세요. 강의를 보면서, Processing system에 대해 궁금증이 생겨 질문 드립니다. 일단 저는 Quartus로 Verilog HDL을 조금 배운 학부생 3학년이고, Xilinx Tool은 완전히 처음 접해봅니다. 원래 Vitis HLS에 관심이 생겨서 알아보다 이 강의를 수강하기에 이르렀네요. Vitis에서 C Code를 작성하는 이유가 궁금합니다. Zynq에는 ARM Cortex A9 Processor가 있기 때문에, Vitis에서 C Code를 작성해도 FPGA에 들어갈 수 있는 것인가요? C Code가 Compile되어 ARM Assembly Code가 되고, 그 Assembly Code가 ARM Cortex A9 Processor에서 돌아가는 것인지 궁금합니다. Vitis HLS에서는 C Code가 Logic Gate로? 제가 알기로는 Vitis HLS가 C/C++ Code를 Verilog HDL로 바꾸어준다고 이해하고 있는데, 이 이해가 맞나요? 그러면, 위에서 말한 것처럼 Vitis에서 작성한 C Code와 Vitis HLS에서 작성한 C Code는 완전히 다른 것인가요? 양질의 강의 감사드립니다.
================= 현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ) 강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등) 이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요) 개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등.. 글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.) 서로 예의를 지키며 존중하는 문화를 만들어가요. 질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! ) 먼저 유사한 질문이 있었는지 검색해보세요. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ================== 맛비님, 빌드 실행 하고 나면 WARNING: [XSIM 43-3479] Unable to increase the current process stack size. 위와 같은 WARNING 메시지가 발생 하는데, 원인이 무엇인지 알 수 있을까요?
================= 현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ) 강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등) 이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요) 개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등.. 글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.) 서로 예의를 지키며 존중하는 문화를 만들어가요. 질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! ) 먼저 유사한 질문이 있었는지 검색해보세요. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ================== 안녕하세요. Chapter2 실습 파일을 실습 하기 위해서 make 명령어를 실행 했는데, 아래와 같은 에러 메시지가 나오면서 실행파일이 생성되질 않습니다. 도움 부탁드립니다! make: g++: No such file or directory make: *** [Makefile:15: test] Error 127
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
안녕하세요 ! 다름이 아니라 초보자 입장에서 문득 햇갈리는 부분이 있어서 질문 남겨드립니다. data mover bram 코드 리뷰를 해주셨는데 해당 코드를 testbench를 포함하여 직접 다 작성한 것인지 아니면 templet 코드를 수정한 것인지 궁금합니다. 항상 친절하고 꼼꼼한 강의 감사합니다 !
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
안녕하세요. Vivado Xilinx에서 찾을 수 있는 'xilinx_true_dual_port_no_change_2_clock_ram'의 Verilog 코드를 분석하다가 막힌 부분이 있어서 질문을 드립니다. 이해가 되지 않는 부분은 모듈의 인자값 addra, addrb의 정의부분입니다. 해당코드는 메모리를 정의해주는 코드이기에 메모리의 Depth길이에 따라서 input으로 받는 Address의 길이를 모듈내에 정의된 함수 'clogb2'로 설정합니다. 궁금한것은 모듈내부에 정의된 함수로 모듈 인자값을 설정할 수 있는 것이 궁금합니다. 무엇보다 본 코드는 Xilinx에서 제공한 것인데, RTL코드를 Block Design 모듈로 불러올때 함수를 사용하는 부분에서 Error가 나옵니다. (단, clogb2(RAM_PEPTH-1)를 다른 숫자로 치환하면 Error는 없음) module xilinx_true_dual_port_no_change_2_clock_ram #( parameter RAM_WIDTH = 18, // Specify RAM data width parameter RAM_DEPTH = 2048, // Specify RAM depth (number of entries) parameter RAM_PERFORMANCE = "HIGH_PERFORMANCE", // Select "HIGH_PERFORMANCE" or "LOW_LATENCY" parameter INIT_FILE = "" // Specify name/location of RAM initialization file if using one (leave blank if not) ) ( input [clogb2(RAM_DEPTH-1)-1:0] addra, // Port A address bus, width determined from RAM_DEPTH input [clogb2(RAM_DEPTH-1)-1:0] addrb, // Port B address bus, width determined from RAM_DEPTH input [RAM_WIDTH-1:0] dina, // Port A RAM input data input [RAM_WIDTH-1:0] dinb, // Port B RAM input data input clka, // Port A clock input clkb, // Port B clock input wea, // Port A write enable input web, // Port B write enable input ena, // Port A RAM Enable, for additional power savings, disable port when not in use input enb, // Port B RAM Enable, for additional power savings, disable port when not in use input rsta, // Port A output reset (does not affect memory contents) input rstb, // Port B output reset (does not affect memory contents) input regcea, // Port A output register enable input regceb, // Port B output register enable output [RAM_WIDTH-1:0] douta, // Port A RAM output data output [RAM_WIDTH-1:0] doutb // Port B RAM output data ); reg [RAM_WIDTH-1:0] BRAM [RAM_DEPTH-1:0]; reg [RAM_WIDTH-1:0] ram_data_a = {RAM_WIDTH{1'b0}}; reg [RAM_WIDTH-1:0] ram_data_b = {RAM_WIDTH{1'b0}}; // The following code either initializes the memory values to a specified file or to all zeros to match hardware generate if (INIT_FILE != "") begin: use_init_file initial $readmemh(INIT_FILE, BRAM, 0, RAM_DEPTH-1); end else begin: init_bram_to_zero integer ram_index; initial for (ram_index = 0; ram_index < RAM_DEPTH; ram_index = ram_index + 1) BRAM[ram_index] = {RAM_WIDTH{1'b0}}; end endgenerate always @(posedge clka) if (ena) if (wea) BRAM[addra] <= dina; else ram_data_a <= BRAM[addra]; always @(posedge clkb) if (enb) if (web) BRAM[addrb] <= dinb; else ram_data_b <= BRAM[addrb]; // The following code generates HIGH_PERFORMANCE (use output register) or LOW_LATENCY (no output register) generate if (RAM_PERFORMANCE == "LOW_LATENCY") begin: no_output_register // The following is a 1 clock cycle read latency at the cost of a longer clock-to-out timing assign douta = ram_data_a; assign doutb = ram_data_b; end else begin: output_register // The following is a 2 clock cycle read latency with improve clock-to-out timing reg [RAM_WIDTH-1:0] douta_reg = {RAM_WIDTH{1'b0}}; reg [RAM_WIDTH-1:0] doutb_reg = {RAM_WIDTH{1'b0}}; always @(posedge clka) if (rsta) douta_reg <= {RAM_WIDTH{1'b0}}; else if (regcea) douta_reg <= ram_data_a; always @(posedge clkb) if (rstb) doutb_reg <= {RAM_WIDTH{1'b0}}; else if (regceb) doutb_reg <= ram_data_b; assign douta = douta_reg; assign doutb = doutb_reg; end endgenerate // The following function calculates the address width based on specified RAM depth function integer clogb2; input integer depth; for (clogb2=0; depth>0; clogb2=clogb2+1) depth = depth >> 1; endfunction endmodule
안녕하세요! 강의에서 나온 칩 이름은 TM74HC595인데, 제가 가지고 있는 칩 이름은 74HC595D라 뭐가 다른지 ChatGPT한테 물어보니 제조사만 다른 거라고 하더라고요! 기능은 동일하다고 합니다. 아래는 답변 내용입니다. TM74HC595D와 74HC595D는 모두 8비트 시프트 레지스터입니다. 이 두 개의 부품은 동일한 기능을 가지고 있지만, 제조사에 따라 다를 수 있는 부품 번호 또는 패키지 유형입니다. "TM74HC595D"는 티아이(Texas Instruments)가 제조한 74HC595D 시리즈의 부품을 나타내는 표기입니다. 티아이는 74HC595D를 자사의 브랜드로 표기하기 위해 "TM"을 사용합니다. 따라서 "TM74HC595D"는 티아이의 74HC595D 시리즈에 해당하는 부품을 의미합니다. 반면에 "74HC595D"는 표준적으로 사용되는 부품 번호로, 다양한 제조사에서 생산한 74HC595D 시리즈의 부품을 의미합니다. 예를 들어, 닛세이(NXP) 또는 페어차일드(Fairchild) 등의 다른 제조사에서도 74HC595D를 제조하고 있을 수 있습니다. 따라서 "TM74HC595D"와 "74HC595D"는 기능적으로 동일하지만, 제조사에 따라 부품 번호 표기가 다를 수 있습니다. 요약하자면, "TM74HC595D"와 "74HC595D"는 동일한 8비트 시프트 레지스터를 가리키지만, "TM74HC595D"는 티아이(Texas Instruments)의 부품 번호 표기 방식을 사용하고, "74HC595D"는 표준적으로 사용되는 부품 번호입니다. 혹시나 다른 분들께 참고가 되지 않을까 싶어 남겨봅니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 자주 묻는 질문에 혹시 답이 있을 수 있어요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요 강의중에서 사용하신 미니 오실로스코프 기종에 대해 알고싶습니다.
안녕하세요 User Thread 에서 Privileged Handler로 모드가 바뀌는 경우를 예를 들면 익셉션 상황 (예를 들어 타이머나 DMA로 인한 인터럽트) 에 핸들러모드로 진입 후 핸들러 함수로 분기하여 처리가 되는 것으로 이해를 했습니다. 그러면 Privileged Handler 에서 Privileged Thread로 모드가 바뀌는 경우는 어떤게 있나요?
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
always @(*) begin // Address decoding for reading registers case ( axi_araddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] ) 4'h0 : reg_data_out <= slv_reg0; 4'h1 : reg_data_out <= slv_reg1; 4'h2 : reg_data_out <= slv_reg2; 4'h3 : reg_data_out <= mem0_q1[C_S_AXI_DATA_WIDTH-1:0]; // (lab12) from bram out //4'h3 : reg_data_out <= slv_reg3; 4'h4 : reg_data_out <= slv_reg4; 4'h5 : reg_data_out <= slv_reg5; 4'h6 : reg_data_out <= slv_reg6; 4'h7 : reg_data_out <= slv_reg7; 4'h8 : reg_data_out <= slv_reg8; 4'h9 : reg_data_out <= slv_reg9; 4'ha : reg_data_out <= slv_rega; 4'hb : reg_data_out <= slv_regb; 4'hc : reg_data_out <= slv_regc; 4'hd : reg_data_out <= slv_regd; 4'he : reg_data_out <= slv_rege; 4'hf : reg_data_out <= slv_regf; default : reg_data_out <= 0; endcase end 안녕하세요. 맛비님 LAB13 진행하면서 궁금한 점이 생겼습니다. case ( axi_araddr [ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] ) 위 코드에서 ADDR_LSB = 2, 이고 OPT_MEM_ADDR_BITS = 1이기 때문에 다시 작성하게 되면, case ( axi_araddr [ 3 : 2 ] ) 이렇게 간략할 수 있습니다. 이렇게 되면 case 문으로 판단하는 변수는 2개의 Bit이지 않나요 ?? 근데 4bit의 값에 따라 (4'h0~4'hf) case 구문이 진행되면 어떻게 되는건지 잘 모르겠습니다 ,, 또, 0~15까지의 숫자를 2진수로 적었을 때, 아래와 같이 정리할 수 있습니다. 이렇게 됐을 때, axi_araddr [3] , [2] 의 bit를 가져왔을 때, 0,1,2,3 = 0 0 4,5,6,7 = 0 1 8,9,10,11 = 1 0 12,13,14,15 = 1 1 이렇게 값이 같은 구간이 생기지 않나요 ?? 아직 제가 잘 이해를 하지 못 한 것 같습니다. 조언 부탁드립니다,,, 휴일에도 항상 수고에 감사드립니다.
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
================= 현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ) 강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등) 이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요) 개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등.. 글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.) 서로 예의를 지키며 존중하는 문화를 만들어가요. 질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! ) 먼저 유사한 질문이 있었는지 검색해보세요. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ================== 안녕하세요 맛비님 흥미롭고 좋은 강의 잘 보고 있습니다! 복습하고 있는데, 왜 처음 보는 내용처럼 생소한지 큭큭.. 여하튼 제가 복습하면서 이전까지는 그냥 지나갔는데, 오늘 보니 조금 궁금한 사항이 생겨서 이렇게 질문 게시판에 글을 남기게 되었습니다. 아래 사진을 확인해보시면, W와 R channel의 Handshake가 발생하기 이전부터 default 값으로 4가 인가되고 있습니다. 그런데 Vitis에서도 따로 초기값을 설정해주지 않은 것 같은데 왜 0이 아닌.. 4가 들어오는지 궁금하여 이렇게 질문글을 작성하게 되었습니다. 늘 많이 배우고 있습니다! 유튜브 라방 그리고 HDL season2 기대하겠습니다! 감사합니다 :)
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
안녕하세요 맛비님 좋은 강의 항상 감사합니다.! 먼저 AXI VIP 관련 질문입니다. AXI VIP를 AXI 내부 Custom IP를 포함한 모듈에 대해서 Slave Register Write에 기반한 Custom IP 동작의 결과를 다시 Read하는 동작도 검증하는데 사용할 수 있나요? AXI4-Lite가 아닌 AXI4-Standard 인터페이스에 대한 동작도 검증 가능한가요? 다음으로, AXI4-Lite의 Address, Data Channel의 동작에 대한 질문입니다. 예제에서, Write 동작에 대해서는 Address와 Data에 대한 Handshake가 동시에 발생하고, Read 동작에 대해서는 Address Handshake 이후 Data Handshake가 발생하는데 특별한 차이가 있는지 궁금합니다. 감사합니다. 감사합니다.
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
안녕하세요. 코드리뷰의 강의를 수강 하고 자도 맛비님 처럼 코드를 실횅 시켜보기 위하여 설계독학맛비's 실전 Verilog HDL Season 1 설치강의를 참고하여 설치를 마치고, matbi@DESKTOP-G0O5LTL:~/Chapter_21_prj_fc_core_sim/HW$ ./build 위와 같이 실행해 본 결과 -bash: ./build: Permission denied 위와 같은 에러가 발생 하면서 빌드가 되지 않습니다. chmod -x build chmod -x clear 위와 같이 하고 나서 빌드를 해도 여전히 권한문제로 인해 실행이 되지 않네요 ㅜㅠ 어떻게 해결해야 할까요?
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
안녕하세요. 코드 리뷰편의 코드를 실행 해보기 위해서 /Chapter_21_prj_fc_core_sim/HW$ ./build 위와 같이 실행 한 결과, ./build: Permission denied 와 같은 에러 메시지가 발생 합니다. chmod -x build chmod -x clean 를 하고 난 후에도 권한 문제로 인해 코드 실행이 안되네요 ㅠㅠ 어떻게 해결 해야 할까요?
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
안녕하세요. 설계독학맛비's 실전 Verilog HDL Season 1 강의를 참고 하여 환경을 설치 하고 있는데, 우분투 설치하고 진행 하는 도중 아래와 같은 창이 뜹니다. 어떻게 해결해야 하나요? 추가로, sudo apt-get update 명령어를 실행시 Release file for http://archive.ubuntu.com/ubuntu/dists/focal-updates/InRelease is not valid yet (invalid for another 32min 22s). Updates for this repository will not be applied. 위와 같은 에러 메시지가 나오는데, 이건 어떻게 해결 가능 할까요? +++ 일단 위의 이슈들 무시 하고 나머지 과정 진행 한 결과 Vivado 설치 및 실행되는것 까지는 확인 하였습니다.