묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
수강기간 만료
안녕하세요, 삼코치님.강의 잘듣고 있는 수강생입니다. 다만 이 강의 수강기한이 무제한인 것으로 알고 있는데 제 계정에서는 2026.2.2에 만료된다고 나와서 문의드립니다. 무제한으로 변경하려면 어떻게 해야할지 문의드립니다. 감사합니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
16장 mealy 설계.
안녕하세요 🙂[1. 질문 챕터] : 16장[2. 질문 내용] : 맛비님께서 moore(무어)설계를 바탕으로 mealy(밀리) RTL 설계를 진행하였습니다.fsm을 처음 접하면서 공부하고 설계하는거라 제가 생각하는 밀리설계가 맞는지 궁금합니다.코드상 오류나 현업에서의 최적화 관점에서 검토 부탁드립니다. Simulation은 동일한 값을 보이는거 같습니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
14장 Cycle 관련, Testbench 코드.
안녕하세요 🙂[1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요.14장에 tb에 negedge clk 오류?[2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂14장에 53번째 negedge clk 오류? 로 인한 주석 처리 질문을 찾고 input과 ouput의 latency 3cycle로 동작을 확인하였습니다. 여기서, i_vaild와 o_vaild는 시작은 3cycle인데 마지막은 2.5cycle로 동작하는 거 같은데, 3cycle이 의도 된 동작이 맞는거죠? (58번줄 negedge clk도 삭제하고 sim하니 3cycle 동작을 확인하였습니다.)추가로, 제가 tb의 코드를 바꿔가면서 simulation 파형을 보고싶은데 매번 vivado 창을 닫고 리눅스에서 파일을 열어 수정하고 다시 vivado 창을 열고 하는데 로딩시간이 많이 걸립니다. vivado창에서는 tb 코드를 수정하고 저장해도 simulation에는 적용이 안되는거 같은데, 혹시 다른 방법이 있나요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
21강(16장) 초기값 설정이 적용되는 시점 질문
안녕하세요 🙂[1. 질문 챕터] : 21강(16장)코드: 7분 20초(Prevent latch 부분, 코드 라인 = 54, 68)파형: 9:30초(0ns, 5ns에서의 o_done, n_state값)[2. 질문 내용] : 파형에서 o_done 값이 왜 0ns에서 바로 0으로 되지 않고 5ns에서 0으로 되는지 궁금합니다.[3. 시도했던 내용, 그렇게 생각하는 이유] :코드 라인 54, 68 라인을 보면 o_done값과 n_state 모두 똑같이 prevent latch를 위해 값을 0으로 블라킹으로 할당해주었습니다.그러면 둘 다 파형에서 똑같이 0ns에서 바로 0으로 값이 되어야 한다고 생각합니다. 파형에서 n_state를 추가해서 보면 제 생각대로 바로 0ns에서 0으로 설정이 되었습니다. 그럼 o_done도 0ns에서 0으로 설정이 되어야 하는 거 아닌가 하는 생각이 들었습니다. 하지만 파형을 보면 클락 상승 엣지인 5ns에서 0이 되었습니다. 혹시 제가 간과한 부분이 있었는지도 조금 궁금합니다. 예를 들어 always문에 있는 c_state값이 바뀔 때만 always 블록이 실행된다고 치면 o_done이 5ns에서 0이 되는 게 이해가 되지만, 그럼 n_state도 0ns가 아닌 5ns에서 0이 되어야 하는 게 아닌가 그런 생각도 듭니다. 이거는 그냥 시뮬레이터의 우선순위가 다른 개념인 건가요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
20강(15장) - 밀리 머신 관련하여 질문 드립니다.
안녕하세요 🙂[1. 질문 챕터] : 20강(15장) 6분 45초[2. 질문 내용] : 강사님께서 '양방향 Handshake interface'를 사용할 때 밀리 머신을 사용한다고 하셨는데요, 이때의 양방향 Handshake는 다음 1번 2번 3번 중에 3번만 말씀하신 건지, 2번도 말씀하신 건지 궁금합니다. 제미나이한테 물어보니 2번 3번 둘 다 밀리머신으로 설계한다고 하는데 강사님께 여쭤보고싶어서 남깁니다. 1번: 단방향 데이터 + (No Ready) - Moore (이유: 출력 신호가 깨끗하고 타이밍 설계가 쉬움.) 2번: 단방향 데이터 + 핸드셰이크 - Mealy (이유: Ready에 즉각 반응하여 성능(Throughput)을 유지해야 함.)3번: 양방향 데이터 + 핸드셰이크 - Mealy (이유: 상호 통신 시 발생하는 레이턴시를 최소화(0-cycle)하기 위함.)
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
build에러 질문
안녕하세요 🙂[1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요.8분 20초쯤에 나오는 ./build 명령어에서 에러가 뜹니다. ai한테 물어봐서 source 명령어로 해결했는데 다시 껐다가 키면 문제가 반복됩니다 .근본적으로 해결하고 싶은데 어떻게 해결해야 할까요 [2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂[3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.)
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
1장 ./build에서 에러가 나요
안녕하세요 🙂[1. 질문 챕터] : 1장 8분 21초에 나오는 ./build 입력 시 에러가 발생해요.[2. 질문 내용] : ./build를 입력하면 이런 에러가 발생해요[3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.)
-
해결됨회로설계 입문자를 위한 디지털, 아날로그 설계와 실무 Project
single-stage amp 시뮬레이션 해보기 회차에 mosfet 정보가 안뜹니다
시뮬레이션은 진행되는 것 같은데 m1 모스펫 관련 정보가 나오지 않습니다.. 설정을 아무리 바꿔봐도 안나오네요..
-
미해결설계독학맛비's 실전 Verilog HDL Season 2 (AMBA AXI4 완전정복)
fifo의 stall과 퍼포먼스 드랍
암바 강의 25장 6분 10초 질문드려요.hw의 stall은 empty와 full이 발생될 때 일어난다 하셨는데, 강의에서 예시로 들어준,앞단의 입력하는 모듈이 fifo에 write하는 속도가 뒷단의 모듈이 read하는 속도보다 빠른다면 full이 일어나지 않아 하드웨어 성능이 좋아진다 하셨습니다.그러나 이러면 empty도 자주 발생해서 퍼포먼스 드랍 또한 자주 발생되어 하드웨어 성능이 안좋아지는것 아닌가요?
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
보드 추가의 클릭창이 없습니다.
안녕하세요 🙂2025.2 버전 vitis를 설치했습니다. project를 만들 때 보드를 추가하는 과정을 강의를 따라 시도했지만 영상과 달리 보드를 추가하는 클릭 창이 없었습니다. 혹시 보드를 추가하는 다른 방법이 있을까요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
FPGA 강의 보드 문의 드립니다.
안녕하세요 맛비님, 언제나 좋은 내용 감사합니다. 아직 FPGA 수강등록을 하지 않았기에 부득이하게 Verilog 학습 q&a에 질문을 드립니다. 설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계, 강의를 위해 보드를 구매하려 하는데 Zybo z7-20 board가 단종이 되어 해외에서 또는 중고로 구매해야 하는 약간의 Risk가 있습니다. 금액도 생각보다 좀 나가네요. Arty z7 10으로 시작을 하고, 나중에 좀 실력이 생기면 조금 더 비싼 것으로 구매하던지 하는 Safe한 Approach를 하려 하는데요. Arty board를 구매했을 때 수업 내용과 달라서 어려운 점이 예상 되는 부분이 있나요? Board 구매를 한 후 수강을 하려 생각하고 있습니다. 감사합니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
5장 DFF특성에 대한 질문
안녕하세요 🙂[1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요.5장 12분대 시뮬레이션 하는 부분에서 궁금증이 있습니다.[2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂제가 배운 바로는 DFF를 이용하면 input 대비 output이 1clock delay가 일어난다고 알고있습니다. 그런데 sync reset을 보면 clk이 맨 처음 1로 시작할때 posedge가 되어서 reset이 발생하게 되는데 그렇다면 1clock 뒤에 o_value_sync_reset이 1이 되어야 하는게 아닌지 궁금합니다. [3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.) ================ 다음 내용은 읽어보시고 지우시면 됩니다.=================질문 내용을 작성해주실 때, 위의 3단계로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!!현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)서로 예의를 지키며 존중하는 문화를 만들어가요.질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )먼저 유사한 질문이 있었는지 검색해보세요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.==================
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
vivado linux 사용 이유.
안녕하세요 강의를 신청하여 막 듣기 시작했는데 궁금증이 생겨서 문의드립니다. 일단 기존에 개인적인 학습에 의해서 vivado 2020.2를 다운 받아 window 환경에서 vivado tool을 이용해서 사용해왔는데, 강사님께서는 linux를 이용을 하시는 강점이 있을까요? 2020.2에 amd 사이트 다운로드 file에는 bin파일이 없어서 linux환경으로 하기 어려운거 같은데 20.2버전은 삭제하고 다시 22.2로 받아야 하나요?
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
수강 연장 문의
안녕하십니까좋은 강의 감사했습니다. 다름이 아니라, 한 차례 완강 후 복습을 진행하려고하는데 수강기간이 얼마남지 않은것을 확인했습니다. 혹시 수강기간 연장 가능할지 문의드립니다.
-
미해결Verilog를 이용한 FPGA 활용 기초
Verilog를 이용한 FPGA 활용기초 37p 질문입니다.
안녕하세요. 덧셈을 하는 방식에 따라 어떤 것이 더 효율적인지 말씀해주셨습니다. 37page 설명에서는 ex_code3a가 더 효율적인 코드라고 명시되어 있는데 그 이유를 궁금합니다!
-
해결됨회로설계 입문자를 위한 디지털, 아날로그 설계와 실무 Project
SPICE Output Log에 대한 질문
안녕하세요. 수업을 수강하며 궁금한 것이 생겨 질문을 남깁니다.해당 강의에서 Vth를 대략 300mV로 가정하고 진행하는데, SPICE output LOG로 모스펫의 Vth를 확인해보면 다음과 같이 약 500mV 400mV로 나오는 것처럼 확인됩니다.다른 시뮬레이션을 진행할 때엔 동일한 파형이나 결과가 나와서 잘못 시뮬레이션을 진행하고 있는 것 같진 않습니다. 그런데 vth가 만약 500mV라고 생각하면 W를 높여 Vgs를 552mV로 낮춰도 되나라는 의문도 생깁니다. Vth를 확인할 때 이렇게 확인하는 것이 맞는지,,, 무엇을 기준으로 생각하면 될지 혼동이와서 질문드립니다.
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
Edit in IP Packager에서 코드 수정 후 IP 수정하면 simulation에서 수정된 코드로 작동이 안됩니다
안녕하세요 🙂[1. 질문 챕터] : FPGA 12장 Simulation과 Edit in IP Packager 부분 [2. 질문 내용] : 안녕하세요 맛비님! 강의 잘 수강하고 있습니다. 다름이 아니라 FPGA 12장에서 공부를 하던 도중 처음에는 맛비님이 알려주신 코드를 그대로 사용해서 IP를 수정해서 update IP를 하고 시뮬레이션을 하니 결과가 정상적으로 나왔습니다. 그 후에, 다시 조금 코드를 간단히 수정해보고 제가 생각한 결과와 맞게 나오나 결과를 보고싶어서 같은 방식으로 Edit in IP Packager에 들어가서 코드 수정하고 update IP까지 했는데, 결과가 그대로 이길래 이상해서 시뮬레이션 창 내부에서 Source코드를 확인하니 내부 코드 수정이 전혀 안되어있더군요. 분명 Edit in IP Packager로 들어가면 코드가 수정되어 있는데, 제가 시뮬레이션 하려고 시뮬레이션 창으로 들어가면 그 때 사용되는 코드가 제대로 수정이 안되어 있고 기존의 코드를 사용 중에 있어서 이 부분 어떻게 해결하면 좋을지 싶습니다. 나중에도 분명히 시뮬레이션 결과를 보고 다시 코드를 수정하고 싶을 때가 있을 텐데, 이럴 때 어떻게 코드 수정된 부분이 시뮬레이션에 반영되게 하는 지가 궁금합니다. 감사합니다!! [3. 시도했던 내용, 그렇게 생각하는 이유] : GPT에게 물어보니 파일 path가 꼬이거나 .gen 파일을 사용해서 업데이트된 IP를 사용하는 것이 아닌 기존 파일을 사용하는 것 같다고 하던데 제가 생각한 것 보다 그냥 코드 수정하는게 너무 복잡한 것 같아서 이상해서 질문드립니다. 감사합니다!
-
미해결디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
I2C SCL_Synched, SDA_Synched 질문
안녕하세요 코드를 보다 의문점이 들어서 질문 드립니다. input으로 들어오는 SCL 을 그대로 사용하는게 아니라 3단 F/F을 통해 slave 쪽의 clk에 맞춰서 SCL_posedge, SCL_negedge를 사용함으로써 동기화를 하여 Slave의 메인 clk에 맞춰 데이터를 채갈 수 있도록 하는 것은 이해했습니다! 근데 SCL_posedge 및 SCL_negedge 의 경우 '안정화 된' [2:1] 세번째, 두번째 F/F의 결과를 보고 posedge 및 negedge를 출력하기에 SCL은 안정화 된 값을 가지는 것을 이해하엿으나SDA_synched의 경우 [2:0] 총 3개의 F/F 에 대해 AND 를 취한 결과를 사용하고 있습니다. 이렇게 하게 되면 만약 최악의 경우SCL_posedge가 '1'이 되었을때 data_in 에다가 SDA_synched의 값을 넣어야 하는데 SCL_posedge가 1이됨과 동시에 SDA_syncehd[2], SDA_syncehd[1] 이 모두 1이고 SDA_synched[0] 이 0에서 1로 바뀌는 중이라면 결국 data_in에 무엇을 저장해야 할 지 몰라서 meta stable 한 상태에 빠질것이라고 생각됩니다.이를 방지하려면,wire SDA_synched = SDASynch[2] & SDASynch[1] 로 선언해서 사용해야 하는 것 아닌가요?? 감사합니다.
-
미해결Verilog ZYNQ Program 1 (Zynq mini 7020)
8-interrupt 질문
궁금한게 있습니다.교안에서 axi_gpio0를 all Input으로 설정하고 GPIO Width를 1로 설정했습니다.그리고 .xdc 역시 스위치 M20, 하나만 지정해서 입력을 넣구요. 그러면 6-4예제와 같이 k2버튼을 눌러서 로직이겠죠. 그런데 교안 156P를 보면 "K 1 버튼을 누르면 D0 가 Toggling 되고 K 2 버튼을 누르면 D1~D4 On, 떼면 O ff 됩니다 또한 터미널 창에 메시지가 나타납니다" 라고 되어있습니다. 어떻게 xdc와 system에서 입력 하나만을 설정했는데 K1버튼이 동작 로직에 추가되는거죠? vitis 소스코드 상에서는 IntGpioFlag가 k1버튼에 해당하는 로직 변수인거 같은데 이해가 안가서 질문드립니다.
-
미해결Verilog ZYNQ Program 1 (Zynq mini 7020)
P127~129 교안내용
6-4내용 교안에서함수 IntcInitFunction, InterruptSystemSetup에 대해서 정의를 안해줘서 코드가 안돌아갑니다.그리고 KeyIntrHandler 함수에서 if (keyVal == 0)으로 주면 버튼을 눌러야 off처리 되고 때면 on처리가 됩니다. 제 생각에는 if (keyVal)로 해야 교안 방향처럼 버튼을 누르면 on이 되고 떼면 off가 되는 로직이 되는거 같습니다. 맞나요?총 코드는 아래와 같이 작성했습니다. 그러니까 잘 동작하네요:) #include <stdio.h> #include "platform.h" #include "xparameters.h" #include "xscugic.h" #include "xil_exception.h" #include "xgpio.h" #include <unistd.h> #define INTC_DEVICE_ID XPAR_PS7_SCUGIC_0_DEVICE_ID #define KEY_DEVICE_ID XPAR_AXI_GPIO_0_DEVICE_ID #define LED_DEVICE_ID XPAR_AXI_GPIO_1_DEVICE_ID #define INTC_GPIO_INTERRUPT_ID XPAR_FABRIC_AXI_GPIO_0_IP2INTC_IRPT_INTR #define KEY_INT_MASK XGPIO_IR_CH1_MASK XGpio LEDInst; XGpio KEYInst; XScuGic INTCInst; u32 KeyIntRisingFlag = 0; u32 KeyIntFallingFlag = 0; static void KeyIntrHandler(void * InstancePtr); static int IntcInitFunction(u16 DeviceId, XGpio * GpioInstancePtr); static int InterruptSystemSetup(XScuGic * XScuGicInstancePtr); int main() { init_platform(); int status; status = XGpio_Initialize(&KEYInst, KEY_DEVICE_ID); // initial KEY if(status != XST_SUCCESS) return XST_FAILURE; status = XGpio_Initialize(&LEDInst, LED_DEVICE_ID); // initial LED if(status != XST_SUCCESS)return XST_FAILURE; XGpio_SetDataDirection(&KEYInst, 1, 0xFF); XGpio_SetDataDirection(&LEDInst, 1, 0); // set LED IO direction as out XGpio_DiscreteWrite(&LEDInst, 1, 0x00);// at initial, all LED turn off printf(">>Press PL KEY1, and check the PL LED1 \n"); status = IntcInitFunction(INTC_DEVICE_ID, &KEYInst); if(status != XST_SUCCESS)return XST_FAILURE; while (1) { if (KeyIntFallingFlag == 1) { KeyIntFallingFlag = 0; printf(" - interrupt falling occur, led on \r\n"); XGpio_DiscreteWrite(&LEDInst, 1, 0xFF); } if (KeyIntRisingFlag == 1) { KeyIntRisingFlag = 0; printf(" - interrupt rising occur, led off \r\n"); XGpio_DiscreteWrite(&LEDInst, 1, 0); } } cleanup_platform(); return 0; } static void KeyIntrHandler(void * InstancePtr) { u8 keyVal; usleep(10000); // 0.1s sleep, to debounce, in common, the meta-state will sustain no more than 20ms keyVal = XGpio_DiscreteRead(&KEYInst, 1) & 0x0f; if (keyval) KeyIntFallingFlag = 1; else KeyIntRisingFlag = 1; XGpio_InterruptClear(&KEYInst, KEY_INT_MASK); XGpio_InterruptEnable(&KEYInst, KEY_INT_MASK); // Enable GPIO interrupts } static int IntcInitFunction(u16 DeviceId, XGpio * GpioInstancePtr) { XScuGic_Config * IntcConfig; int status; // Interrupt controller initialization IntcConfig = XScuGic_LookupConfig(DeviceId); status = XScuGic_CfgInitialize(&INTCInst, IntcConfig, IntcConfig->CpuBaseAddress); if(status != XST_SUCCESS)return XST_FAILURE; // Call interrupt setup function status = InterruptSystemSetup(&INTCInst); if(status != XST_SUCCESS) return XST_FAILURE; // Register GPIO interrupt handler status = XScuGic_Connect(&INTCInst, INTC_GPIO_INTERRUPT_ID, (Xil_ExceptionHandler)KeyIntrHandler, (void*)GpioInstancePtr); if(status != XST_SUCCESS)return XST_FAILURE; // Enable GPIO interrupts XGpio_InterruptEnable(GpioInstancePtr, 1); XGpio_InterruptGlobalEnable(GpioInstancePtr); // Enable GPIO interrupts in the controller XScuGic_Enable(&INTCInst, INTC_GPIO_INTERRUPT_ID); return XST_SUCCESS; } //---------------------------------------------------------------------------- // Interrupt system setup //---------------------------------------------------------------------------- static int InterruptSystemSetup(XScuGic * XScuGicInstancePtr) { // Register GIC interrupt handler Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, (Xil_ExceptionHandler)XScuGic_InterruptHandler, XScuGicInstancePtr); Xil_ExceptionEnable(); return XST_SUCCESS; }