묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결설계독학맛비'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; }
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
no data path질문
full_adder설계 테스트 벤치 설계, 시뮬레이션확인, sdc파일 입력 및 합성을하고 timing analyze를 확인해보는데 계속 no path라고 나옵니다.. 뭘 놓친건지 모르겠습니다. 강의 그대로했는데 뭐가 문제일까요 ㅠㅠ
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
SRAM 강의 modelsim 시뮬레이션에서 inner 메모리를 Objects 리스트에서 찾으려고 하는데 안보입니다.
삼코치님 sram강의에서 waveform에서 inner 메모리를 보기위해서 modelsim에서 Memory List 부분에서 sram인스턴스 네임을 클릭하면 Objects 리스트에서 mem 시그널이 표시된다고 하셨는데 Memory List에서 클릭을 했는데 Objects 목록에서 mem 시그널이 안 뜨는데 어떻게 해야 하나요? 일단 저는 최신 quartus프로그램과 questa를 깔긴했는데 강의에서 처럼 quartus 20.1버전과 modelsim을 깔아서 다시 시뮬레이션을 돌려봐도 mem 시그널이 안보입니다.
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
디스코드 멤버쉽 등업 관련 문제
[2. 질문 내용] : 강의를 구매한지 1주일이 지났으나 아직 멤버쉽 등업이안되었습니다.[3. 시도했던 내용, 그렇게 생각하는 이유] : 10월2일 경에 해당강의와 FPGA강의를 구매하고 form을 작성했으나 아직 등업이 되지 않았습니다.
-
해결됨회로설계 입문자를 위한 디지털, 아날로그 설계와 실무 Project
active load differential amp 설계
삼코치님 따라서 설계를 했는데 값이 이상하게 나왔습니다. 삼코치님께서 약 500mv정도 나왔는데 저는 이상하게 900v정도 나옵니다
-
해결됨FPGA에 UART 구현하기
5장 강의 노트 확인 부탁드립니다.
5. UART TX/RX 모듈 RTL 설계 및 시뮬레이션강좌의 강의 자료를 다운 받으면 ep06_Intergration 자료 입니다.확인 부탁드립니다.
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
DataMem 스펙 질문
안녕하세요 학습 중에 코드를 보고 궁금증이 생겨 질문 드립니다. DataMem spec을 보면 mem 이 4byte짜리로 총 128개로 구성되어 있는데, always 문을 보면 mem[0] ~ mem[63] 까지의 공간을 사용하는 것으로 보입니다. 나머지 mem[64] ~ mem[127] 까지는 사용이 안되는거 같은데, 그러면 굳이 reg [31:0] mem [127:0] 으로 선언한 이유가 있을까요?? 뭔가 제가 파악하지 못한 의도가 있는것인지 궁금하여 질문드립니다!! 감사합니다.
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
BRAM의 Read / Write를 다 수행했는지 확인할 때 사용되는 num_cnt / i_num_cnt 관련 질문
안녕하십니까 Matbi님너무 잘 학습하고 있습니다. [의문사항][1번]Matbi님이 작성하신 코드처럼 num_cnt를 reg로 선언하고always block으로 num_cnt <= i_num_cnt를 하게 되면 clk소모에 따른 delay도 발생하고HW resource도 사용한다는 단점이 있는거라고 생각하는데 맞을까요? [2번]1번이 맞다면단점 외에 장점이 있기 때문에 저렇게 작성하신걸까요?어떤 장점이 있는걸까요? [3번]아래처럼 기술해도 되는걸까요?// 기존 코드 assign is_read_done = o_read && (addr_cnt_read == num_cnt-1); // reg와 always 구문 없이 // input wire로 입력되는 i_num_cnt를 그대로 사용하는 경우 assign is_read_done = o_read && (addr_cnt_read == i_num_cnt-1); 항상 감사합니다!!!
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
Vitis 코드 작성
안녕하세요 Matbi님강의 2회독중입니다.Vitis의 header file은 tool이 자동으로 생성해준다는 것은 이해했습니다. 그리고 main.c의 코드를 직접 작성했다고 하셨습니다.[질문사항]header file에 있는 함수의 기능을 이해하고 계신 건데 그건 따로 공부하신 건가요?예를 들어 C에서 <iostream>의 std::cin, std::cout의 기능을 알아야 쓸 수 있는 것처럼요 따로 공부하신거라면 어떻게 공부하셨을까요? 문서를 통해 공부하신건지... 항상 감사합니다!!
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
Hamming Code 질문
encoder의 경우, output이 [1:21]로 서술되어 있습니다. 근데 tb를 보면 output인 encoded_message가 [21:1] 로 선언되었는데, 이렇게 선언하게 되면 encoded_message 에 들어오는 값은 B[21:1] 로 매칭되서 들어오게 되는건가요? 아니면 tb 코드에서 [21:1]로 잘못 선언한 것인지 궁금합니다! 감사합니다.
-
미해결Verilog ZYNQ Program 1 (Zynq mini 7020)
Zybo z7에서 실습을 진행할 수 있나요?
만약 할 수 없다면 돌아가게 하려면 어떤 작업을 해야하나요?
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
W_CRC 값 질문하기
안녕하세요, 시뮬레이션 결과를 보던 중 이해가 잘 안가는게 있어서 질문드립니다! 여기서 W_CRC는 제가 이해하기로는 '나머지' 에 대응되는 코드로, 나머지가 '0' 이면 오류가 없는 것이고, 나머지가 '0' 이 아니라면 오류가 있음을 알리는 코드로 알고 있습니다. 근데 시뮬레이션 결과를 보면 각 입력 데이터 r_data에 대응되어서 모두 0이 아닌 다른 값으로 update 되는데 그러면 CRC 오류가 있어서 저런 결과가 나오는거로 이해하면 될까요?? 감사합니다!
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
Ubuntu 에서 옆에 라인 수 보는 방법
안녕하세요 🙂[1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요.[2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂[3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.) ================ 다음 내용은 읽어보시고 지우시면 됩니다.=================질문 내용을 작성해주실 때, 위의 3단계로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!!현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)서로 예의를 지키며 존중하는 문화를 만들어가요.질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )먼저 유사한 질문이 있었는지 검색해보세요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.=================hello_world 수업을 듣고 있는데 선생님처럼 옆에 몇번 줄인지 전 안나와서.. 코딩할 때 몇번 줄인지 확인하는게 편하더라구요 어떻게 설정해야하나요?
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
Precharge에 대한 질문
21분쯤 내용을 보면, Write 동작시에도 Write 이후 Pre Charge Stage를 거치는 것을 볼 수 있습니다. 만약 제가 8Bit에 해당하는 하나의 Word 라인을 선택하여,'1001 0001' 이라고 Write를 했을때,1로 선택된 Column은 Write Driver가 값을 밀어 넣어 Cap에 1로 Write가 되었을 것이고,0으로 선택된 Column은 WBL을 통해 방전이 됬을 것입니다. 이러고 ACT를 Low로 내려서 Write 상태를 빠져나가게 되면 제 생각엔, Precharge를 할 필요가 없을 거 같은데 왜 Write 시에도 Precharge를 해주는지 궁금합니다! Read Operation 시에는 RBL과의 Charge Sharing으로 인해서 어느정도 Cap에 저장되어 있던 전하가 소실되기 때문에 읽기 작업이 끝났으면 다시 소실된 전하를 채우기 위해 Refresh하는것은 이해한 상태입니다!
-
미해결Verilog FPGA Program 1 (Zynq mini 7020)
UART 구현 관련 질문
안녕하세요.오랜만에 인사드립니다. UART 구현에 대해 공부를 하고 있는데 대표님께서 구현하신거는 FIFO Generator IP를 적용하여 하셨는데 제가 조사한바로는 Uartlite 또는 Uart16550 IP가 있는데 FIFO로 구현하신 이유가 따로 있으신건지. 아니면 차이를 간단히 설명이 가능하실까요?
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
tpsram spec 질문
tpsram 내부를 보면 오른쪽 처럼 되어있는데, always 구문을 구분해서 사용하는 이유가 있을까요? 왼쪽 구문처럼 하나의 always 문으로 구성해도 동일한 tpsram인지 궁금합니다 !
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
o_done만 reg type으로 선언한 이유
안녕하세요 🙂[1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요.[2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂[3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.) fsm_counter_test 파일에서 처음에 input과 output을 선언하실 때 왜 output 중 o_done만 reg type이고, 나머지 output에 대해서는 reg로 선언하지 않으신 건지에 대한 이유가 궁금합니다. 감사합니다.