묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
STOP_WATCH Vitis 에러
안녕하세요 맛비님Season1 프로젝트부분인 STOP_WATCH를 공부하고 있는데 절차대로 모두 하고 vitis에서 build 후 run을 실행하면 다음과 같은 에러가 나오는데 해결을 계속 해보다가 결국 안되서 어떤 부분이 잘못되면 해당 에러가 나올 수 있을지 여쭤봐도 될까요? vivado와 vitis는 2023.2 버전을 사용중이고 해당 보드(Cora-z7)를 다른 사람 컴퓨터로 테스트 해봤을 땐 괜찮았습니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 2 (AMBA AXI4 완전정복)
locked access의 잠금 범위
안녕하세요 🙂좋은 강의 감사드립니다[1. 질문 챕터] : 36강 3:33[2. 질문 내용] : locked access 에서 interconnect 전체를 잠그는 것인가요? 아니면 타겟 slave만 잠그는 것인가요?[3. 시도했던 내용, 그렇게 생각하는 이유] : exclusive access는 slave의 특정 region만 잠그는 것으로 명확하게 이해가 되었습니다. 그런데 locked access 부분에서는 둘 중 어떤 것을 의미하는지를 잘 모르겠습니다. ================ 다음 내용은 읽어보시고 지우시면 됩니다.=================질문 내용을 작성해주실 때, 위의 3단계로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!!현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)서로 예의를 지키며 존중하는 문화를 만들어가요.질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )먼저 유사한 질문이 있었는지 검색해보세요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.==================
-
해결됨FreeRTOS 프로그래밍
펌웨어 설계시 RTOS 적용 여부 질문
안녕하세요몇년전에 회사에서 진행중인 프로젝트에 RTOS를 적용하였다가 퍼포먼스를 만족시키지 못해서펌웨어로 다시 기능 똑같이 만들어서 해보니까 성능을 만족해서펌웨어로 변경해서 작업을 진행한적이 있었는데 메인 기능은 상위제어기로부터 1ms 주기로 패킷을 수신받으면 100us 내로 응답해야하는 조건에 CRC 체크도 해야하는 상황이었고 통신 기능 뿐만아니라 다른 기능에서 사용하고 있는 프리페럴이 많아서 통신 기능외에 주기적으로 us단위의 인터럽트가 많이 발생되는 상황이였구요.RTOS로 만들었던 SW에서는 기본적으로 각각 프리페럴을 담당하는 TASK를 두고 설계를 했었는데RTOS에서는 위에 나왔던 통신주기를 ISR에서 TASK로 이벤트 전달하는과정에서 리얼타임을 만족시킬수 없었습니다.그래서 RTOS를제거하고 그냥 펌웨어로 만들어서 구조는 똑같이하고멀티태스킹을 인터럽트 처리했는데 성능이 만족스럽게 나왔습니다. 제가 생각한 바로는RTOS가 올라간 시스템에서는 기본적으로 스케줄링하는 커널이 들어가서 기본적으로 자원점유도 하고거기에 인터럽트도 관여되면 컨택스트 스위칭이 자주일어나서 오버헤드가 더 심해질수있다.펌웨어는 그냥 풀로 돌면서 인터럽트로 인한 크리티컬 섹션만 신경쓰면 되기에 성능을 만족한게 아닐까 하는 생각이 듭니다.물론 제가 RTOS에 대해 아는게 없어서 SW가 요구사항을 만족시킬수 없었던것일수도 있지만컨택스트 스위칭으로 인한 오버헤드가 리얼타임에 영향을 미치는 가혹한환경이라면 베어메탈 펌웨어를 사용하는게 맞다고 느꼈습니다. 강의에서도 말씀하셨다시피 ISR로도 멀티태스킹이 된다면 RTOS를 적용하지 않아도 된다고 하셨는데SW가 복잡해진다면 FreeRTOS API를 사용할수있으니 유지보수 측면이나 TASK간 동기화에 있어서 편리하다고 생각이 듭니다. 제 질문은펌웨어를 설계할때 RTOS를 적용할지 아니면 베어메탈 펌웨어로 가냐 적용여부를 어떻게 판별해야할까요?일단 저는 인터럽트가 많이 일어나는 시스템에서는 RTOS가 성능에 영향이 있다고 느껴집니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
tick에 관련된 질문입니다.
안녕하세요 🙂[1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요.[2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂[3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.) ================ 다음 내용은 읽어보시고 지우시면 됩니다.=================질문 내용을 작성해주실 때, 위의 3단계로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!!현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)서로 예의를 지키며 존중하는 문화를 만들어가요.질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )먼저 유사한 질문이 있었는지 검색해보세요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.==================질문 챕터 : [Verilog HDL/FPGA 외전1 - 시계만들기] Chapter 2. 시,분,초 만들기 - Part2질문 always @(posedge clk) begin if(reset) begin r_cnt_val <= {P_COUNT_BIT{1'b0}}; o_tick_gen <= 1'b0; end else if (i_run_en & i_tick) begin if(r_cnt_val == P_INPUT_CNT -1) begin r_cnt_val <= 0; o_tick_gen <= 1'b1; end else begin r_cnt_val <= r_cnt_val + 1'b1; end end else begin o_tick_gen <= 1'b0; end end위 코드에서 else if (i_run_en & i_tick)이 부분의 경우 아래 그림과 같이 set up Time(두번째 사진 1) 에 의해 59 -> 0에서 tick이 1로 전달되는게 아니라 그 다음 posedge clk (두번째 사진 2) 0 -> 1일 때 tick이 1로 전달되는게 맞나요?질문 드린게 맞다면 그냥 negedge에서 확인하면 되는게 아닌지 궁금하여 질문 드립니다.
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
AXI의 AW 채널 디버깅 질문
안녕하세요 🙂[1. 질문 챕터] : 19장[2. 질문 내용] : 19장의 실습에서 AXI에 ILA를 추가하여 waveform을 다음과 같이 확인하였습니다.위 화면에서 2가지 질문이 있습니다. AWADDR이 write HS 지점에서는 정확하게 0x0c로 되어있습니다. 맛비님의 레지스터맵에 의하면 정확한 동작임을 확인할 수 있습니다. 그러나, HS가 끝난 후에 AWADDR이 0x10이 되는 이유가 궁금합니다!HS 후에, AW_CNT가 1을 나타내는 것이 AWADDR이 0x10이 된 것과 관련이 있는지 궁금합니다!좋은 강의 감사드립니다 !!
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
8bit 연산 Tb 시뮬레이션 질문
안녕하세요 🙂[1. 질문 챕터] : FPGA 18장, 곱셈코어 시뮬레이션[2. 질문 내용] : 시뮬레이션을 돌릴때 num_cnt를 4096으로 설정했는데도 불구하고 addr0_b0, addr0_b1의 최고값이 7777인 것으로 확인됩니다. 4096까지 돌아야 된다고 생각하는데 왜 7777에서 시뮬레이션이 마무리 되는 것인지 궁금합니다. 좋은 강의 감사드립니다 ㅎㅎ
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
Vitis 2022.1 설치 후 An internal exception has been detected 에러
안녕하세요 🙂Vitis 2022.1을 설치하고 나서 Vivado를 실행하여 보았는데, Open Project를 클릭하여 프로젝트 파일이 있는 폴더로 이동하려고 하면 아래 캡처한 화면과 같이 "An internal exception has been detected. Vivado may be in an unstable state." 에러가 나고 더 이상 진행이 되지 않네요. 혹시 이 오류 해결방법이 있으면 공유 부탁합니다.감사합니다.
-
해결됨[임베디드 입문용] 임베디드 개발은 실제로 이렇게 해요.
FND send_port에 대하여..
void send_port(uint8_t X, uint8_t port) { send(X); send(port); HAL_GPIO_WritePin(FND_RCLK_GPIO_Port, FND_RCLK_Pin, LOW); HAL_GPIO_WritePin(FND_RCLK_GPIO_Port, FND_RCLK_Pin, HIGH); }이렇게 코드를 보면 X, port 를 send하고RCK 라이징 엣지를 만들어서 최종적으로 출력 하는구나를 알 수 있는데 만약 이런 코드 없이 데이터시트를 보고 코드를 만든다고 할 때 X와 port를 함께 send하는것,X, port 순으로 send 해야 한다는 것,위치(port)는 0b0001, 0b0010, 0b0100, 0b1000으로 설정한다는 것 들은 어떻게 알 수 있나요?데이터시트를 통해서 이런 정보까지는 얻을 수 없는 것 같아서요..
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
간단한 질문 하나 드립니다. vitis를 시작하면 자꾸 예전 것이 포함됩니다. vitis를 새롭게 시작하고 싶습니다.
다운로드 아되는 문제가 해결이 안되서 삽질하고 있습니다. vitis를 시작하면 자꾸 예전 것이 포함됩니다. vitis를 새롭게 시작하고 싶습니다. 감사합니다.
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
Hello world 실습을 따라하던 중 Error Launching Program 계속 발생합니다.
안녕하세요. 맛비님 좋은 강의 감사합니다. Vivado 2020.2, Vitis 2020.2 버전입니다. Zybo 20, Zybo 10 모두 테스트 해봤습니다.늘 마지막 단계에서 아래와 같은 에러가 계속 발생합니다. 어떤 것을 살펴봐야 할까요?
-
미해결설계독학맛비's 실전 AI HW 설계를 위한 바이블, CNN 연산 완전정복 (Verilog HDL + FPGA 를 이용한 가속기 실습)
혹시 AI 관련 강의도 Zybo Board가 필요한가요?
혹시 AI 관련 강의도 Zybo Board가 필요한가요?
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
안녕하세요 always 관련해서 질문 있습니다
안녕하세요 맛비님강의 잘 듣고 있는 도중에 always 블럭으로 combination logic을 기술하는 경우 제가 명확하게 알고 있는지 궁금합니다. always로 코드를 작성 할 때, 그 안에 내부 변수는 reg로 사용하고, 이 reg변수는 register,latch(보통의 경우 의도하지 않은), combination logic을 만들 때 사용되는 것으로 알고 있습니다. 저는 always 블럭을 사용할 때, 의도하지 않은 latch가 발생하는 것을 완전히 피하고 싶습니다.그래서 코드 작성 스타일을 이렇게 하면 좋을지 궁금합니다. /*output combination 2*/ reg done; //this is not a register, it is just combination logic circuit reg running; //this is not a register, Do not confuse reg idle; //this is not a register, you must not make latch always@(*)begin done = 0; running = 0; idle = 0; case(c_state) S_IDLE : idle = 1; S_RUN : running = 1; S_DONE : done = 1 default : begin done = 0; running = 0; idle = 0; end endcase end default에 그 외적인 정의되지 않은 동작에 대해 처리하도록 작성하거나case문을 시작하기 전에 각각 초기값을 작성해두면 되는 것으로 알고 있습니다. 하지만 이놈의...chatGPT는 초기값도 작성하고 default문을 둘 다 작성 안하면 latch가 발생할 가능성이 있다고 해서... 이 점이 궁금합니다. 사실 위의 코드처럼 작성하면 정말로 latch가 생길 여지가 없어 보입니다만...아시다시피 번거로움이라는 이슈로... 아 그리고 질문이 하나 더 있습니다.fsm_counter부분에서 state로 동작을 제어한다는 개념을 반복해서 공부하고 있습니다. assign o_done = done; assign o_running = running; assign o_idle = idle; reg [31:0] r_cnt_num; //this is register to capture input value always @(posedge clk or negedge reset_n) begin if(!reset_n)begin r_cnt_num <= 0; end else if(i_run) begin r_cnt_num <= i_cnt_num; end else if(o_running) begin r_cnt_num <= r_cnt_num; end else if(o_done) begin r_cnt_num <= 0; end end reg [31:0] r_cnt_core; assign is_done = o_running&&(r_cnt_core == r_cnt_num -1); /*counter core part*/ always@(posedge clk or negedge reset_n) begin if(!reset_n)begin r_cnt_core <=0; end else if(o_idle)begin r_cnt_core<=0; end else if(o_running)begin r_cnt_core <= r_cnt_core + 1; end else if(is_done)begin r_cnt_core <=0; end end 이 부분은 위에 질문 코드 바로 뒤에 이어지는 코드입니다.바로 위의 블럭에서 첫번째 capture register를 기술하는 부분에서run state일 때도 register가 어떻게 동작해야하는지 꼭 기술해야할까요?이 부분은 맛비님 코드에서 작성되어있지는 않던데, 제가 생각하기에는...run state일 때 register의 동작이 어떻게 될지 예상이 안가서 직접 작성해주는게 좋아보이는데..어떻게 생각하시나요? 두번째 always블럭 또한 같은 맥락으로 idle상태일 때 core 내부에 있는 register의 동작도 기술해주는 것이 필수적일까요? 위의 코드는 수업에 다루신 코드를 제가 schematic을 보고 다시 작성한 코드입니다. 저의 질문은 여기까지입니다. 감사합니다.
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
Arty z7-20 default 프로그램
안녕하세요. 제가 Arty z7 20을 최근 사서 디폴트 상태로 HDMI 포트 연결하고 모니터와 LED 확인해보았는데, LED는 잘 나오는데 모니터에는 아무것도 뜨지 않습니다. 이럴 경우 불량을 의심해봐야 하는 것일까요? (모니터는 평소에 잘 쓰고 있는 모니터이고 현재 vitis 설치 중이라 다른 실습은 해보지 않았습니다ㅎ )감사합니다
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
input node 1,2,3,4 모두 같게 하기 위해서 코드 수정
안녕하세요 🙂[1. 질문 챕터] : 21장 17분 40초[2. 질문 내용] : 기존 질문 에서 추가 질문 남깁니다. 기존 의도대로 4096 개의 input node, 4개의 ouput node를 갖는 딥러닝을 설계하고자 아래와 같이 수정되어야 한다고 생각하는 데, 시도한것이 맞는지 질문드립니다[3. 시도했던 내용, 그렇게 생각하는 이유] : 다음과 같이 C코드 수정for (int i = 0; i < MEM_DEPTH; i++) { // IN_NODE는 MEM_DEPTH만큼 랜덤 생성 후, NUM_CORE만큼 반복 int node_value = rand() % 256; // 0~255 범위의 랜덤값 생성 (8비트) for (int core = 0; core < NUM_CORE; core++) { IN_NODE[core] = node_value; // 동일한 node_value를 NUM_CORE에 반복 할당 IN_WEGT[core] = rand() % 256; // IN_WEGT는 각 core마다 랜덤값 할당 OT_RSLT[core] += IN_NODE[core] * IN_WEGT[core]; fprintf(fp_in_node, "%d ", IN_NODE[core]); // IN_NODE 값을 출력 fprintf(fp_in_wegt, "%d ", IN_WEGT[core]); // IN_WEGT 값을 출력 } fprintf(fp_in_node, "\n"); fprintf(fp_in_wegt, "\n"); } 기존 질문에서 말씀하신대로, node1,2,3,4가 같아야 한다는 것이 이렇게 되어야한다는거 맞을까요??수정없이 강의대로 진행할시, 4096*4개의 input node, 1개의 output node를 갖는 딥러닝 추론을 진행한것이고, 각 코어를 1번 run/done 하여 얻은 4개의 결과를 모두 더하면 1개의 output node의 결과를 얻은것과 같다고 이해해도 될런지 궁금합니다!
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
코어 연산 결과를 바로 모듈로 전달하는 이유
안녕하세요 🙂[1. 질문 챕터] : 21장 9분 25초[2. 질문 내용] : 1. 코어의 연산 결과를 바로 myip_AXI 모듈 내 레지스터에 저장하는 이유가 궁금합니다! 현재까지 BRAM에 데이터를 넣고 꺼내고 하는걸 배웠는데 ,,, 결과 write용 bram2를 안쓰니까 궁금합니다!bram을 거쳐서 데이터를 넣고 꺼내는 시간/ 바로 레지스터로 가도록 하는 시간 중에 뭐가 더 빠른가요??데이터가 많을때도 모듈에 레지스터를 엄청 많이 만들어서 bram을 안쓰는건 어떨까요?? bram을 쓰는 것보다 같은 데이터양 대비 사용 리소스가 많다거나, 시간이 더 오래걸린다는 단점이 있을까용??[3. 시도했던 내용, 그렇게 생각하는 이유] : 21장에서는 코어에서 연산한 데이터가 4개씩이라 적게 나와서 굳이 BRAM을 안쓰는거같다고 생각합니다!
-
해결됨[임베디드 입문용] 임베디드 개발은 실제로 이렇게 해요.
안녕하세요 선생님! 초록불이 들어오지 않습니다!
다른 수강생분들이 쓰셨던 내용들은 다 읽어봤지만, 초록불과 관련된 이야기는 없이 이렇게 글을 남깁니다! ST-Link에는 빨간불이 들어오고, 보드에는 D1 이라고 써져있는곳엔 빨간불이, S1이라는 곳에는 빨간불이 깜박깜박하는데 초록불이 안들어옵니다! 무엇이 문제인지 알려주시면 감사하겠습니다.빠른 답변 주시면 감사하겠습니다!
-
해결됨시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 1부 저자 직강 (2024년 버전)
TRACE32 사용 실습에서 RASPIAN KERNEL DEBUG
3.2.1.4, 5 강의에서 TRACE32 사용 실습을 해주시는데요. 강의 내용을 익히기 위해 범용 레지스터를 설정을 하면서 실습을 해보려고 합니다. 이때 실행하고 계시는 RASPBIAN KERNEL DEBUG를 어떻게 실행하나요?또는 실습을 위해 첨부해주신 T32 파일에서 실행할수 있는 데모앱이 있을까요?
-
미해결디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
QDR에 대한 질문
DDR2에 대한 설명을 해주실 때 QDR이 적용되었다고 설명해주셨는데,SK하이닉스 뉴스룸에서 GDDR DRAM 관련 자료를 찾아보다 GDDR5부터 QDR이 적용되었다고 하는 게시물를 봤습니다.해당 게시물에서는 시스템 클록(CK)과 이를 두 배로 높인 데이터 클록(WCK)을 모두 사용하여 클록 속도를 4배로 높여준다고 설명하고 있습니다.강의에서 설명해주신 페이즈가 다른 클록 2개를 쓰는 QDR과는 조금 다른데 그렇다면 DDR2부터 적용된 QDR과 GDDR5에 적용된 QDR은 용어는 같지만 다른 개념인가요?게시물 링크:https://news.skhynix.co.kr/post/go-beyond-graphics내용: GDDR6의 놀라운 점은 더 있습니다. 바로 고도화된 ‘DDR’입니다. DDR이 클록 한 번에 두 번의 데이터를 내보낸다고 했는데요. GDDR6는 시스템 클록(CK)과 이를 두 배로 높인 데이터 클록(WCK)을 모두 사용하는데, 이 과정에서 클록을 4배로 높여줍니다. ‘쿼드 데이터 레이트(Quad Data Rate·QDR)’ 기술을 이용하는 것이죠. 참고로 QDR는 그래픽 메모리에서 GDDR5부터 적용되기 시작했습니다. 정리하면 GDDR5와 GDDR6의 CK가 1.75Gbps라고 했을 때, GDDR5는 최종 데이터(DQ) 속도가 7Gbps에 그칩니다. 이와 달리 GDDR6의 경우 14Gbps까지 올릴 수 있습니다.
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
TPSRAM 질문있습니다!
SRAM 에서는 Write할 때 입력 data를 넣고 1클럭 뒤에 memory에 저장이되고, Read할 때는 주소를 불러오자마자 바로 Read가 됐던걸 확인할 수 있었는데,질문1) TPSRAM에서의 동작은 wa에 wd를 넣고 1클럭 후에 memory에 write 값이 저장되는 부분은 동일한건가요? 질문2) SRAM에서와 달리 ra에서 rd가 나오기까지 1클럭이 늦게 나오는 이유는 F/F을 하나 거치기 때문인지도 궁금합니다!
-
해결됨[임베디드 입문용] 임베디드 개발은 실제로 이렇게 해요.
main.c 가 나오지 않습니다
main.c가 나오지 않습니다. 어떤게 문제인가요?