묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결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; }
-
해결됨FPGA에 UART 구현하기
5장 강의 노트 확인 부탁드립니다.
5. UART TX/RX 모듈 RTL 설계 및 시뮬레이션강좌의 강의 자료를 다운 받으면 ep06_Intergration 자료 입니다.확인 부탁드립니다.
-
미해결Verilog ZYNQ Program 1 (Zynq mini 7020)
Zybo z7에서 실습을 진행할 수 있나요?
만약 할 수 없다면 돌아가게 하려면 어떤 작업을 해야하나요?
-
해결됨FPGA에 UART 구현하기
RTL
RTL이 Veliog인거같은데 vhdl 버전은 없나요 ?
-
해결됨FPGA에 UART 구현하기
멀티바이트프레임 로직 예시
FIFO를 이용하여 멀티바이트프레임 로직 구문을 작성 및 처리하는 참조 할 만한 로직 예시 가 있을까요
-
미해결
vivado 2017.4 webpack 설치
vivado 2017.4 webpack 설치 를 하려고 하는데 vivado 홈페이지에 들어가서 아카이브-> 2017.4를 눌러도 웹팩이 안뜨고 파일 크기가 큰 애들만 뜨는데,, 어떻게 설치해야하나요?
-
미해결Verilog ZYNQ Program 1 (Zynq mini 7020)
PYNQ보드로도 예제 실행이 가능한지요?
안녕하세요.인프런 예제 실행해보고 있는데... 자꾸 문제가 생겨 여쭙고자 연락드립니다.zynq mini 7020보드를 기준으로 설명해주셨는데, pynq z1보드에서 ch_05예제를 실행해보고자 합니다.예제 실행 시 오류는 발생하지 않으나 실행이 되지 않습니다.Zynq mini 7020보드와 pynq z1보드의 차이를 찾아보아도 설정 상(zynq코어, ddr 등) 큰 차이가 없어보이는데... 혹시 다른 문제가 있는건지요.계속 찾아보고 수정해보고 있지만 입문자라 잘 안 됩니다... 혹시 추가로 고려해야될 사항이 있을까요?감사합니다.
-
미해결Verilog ZYNQ Program 1 (Zynq mini 7020)
인프런 자료실이 어디에 있나요??
이제 막 41 page 학습 중인데 자료실을 찾으려니 보이지가 않습니다.
-
미해결Verilog ZYNQ Program 1 (Zynq mini 7020)
FSBL 관련
Vitis2024.1.0 사용 하고 있고, ZynqMini 7020 으로 공부하고 있습니다. 1, 정상적으로 Boot 이미지를 만들고, 2 ,정상적으로 Flash에 Download 한 것 같습니다.그런데.. 스위치 변경 하여 QSPI 모드로 다시 시작하는데 QSPI Boot로 동작 안되는 것 같습니다. 어디를 봐야 할까요??? vitis에서 zynqmin7020 물리고 jtag mode 에서는 run 또는 debug 동작은 잘 됩니다.
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
vivado 2023.2.2 schematic 오류
안녕하세요, 맛비님!vivado schemetic을 실행하는 과정에서 오류가 생겨 오래 잡고있다 해결이 안되서 질문 남깁니다.vivado를 이용해서 zybo-z7-20 led점등하는 코드를 입력하고 Schematic을 누르니 로딩이 되다가 vivado창이 닫혀버립니다.windows 11에서 vivado 버전은 2023.2.2를 사용중이고 관리자 권한으로도 실행해본 상태입니다. 사용하는 pc 스펙은 아래와 같습니다.감사합니다.
-
미해결Verilog ZYNQ Program 1 (Zynq mini 7020)
6.4.2 강의노트 125쪽 // 제조사 sample 코드관련
6.4.2 강의노트 125쪽에 제조사 sample 코드가 자료실에 있다고 나와있는데 아무리 찾아봐도 없는것 같습니다. 확인 한번만 부탁드립니다.
-
미해결Verilog ZYNQ Program 1 (Zynq mini 7020)
42p .elf 파일 저장위치
안녕하세요.Run As나 Debug As 의 Launch Hardware로 실행했을 때, .elf 파일이 저장되는 위치가 Zynq와 연결된 DDR에 저장이 되는 것인지 Zynq 칩 내부의 RAM이 따로 있는 것 인지 궁금합니다. 또 저장되는 번지수는 정해져 있는 건지도 궁금합니다. ps의 memory map이 따로 영역이 지정 되어있는 걸까요?
-
미해결Verilog ZYNQ Program 1 (Zynq mini 7020)
40page project build 관련하여 error가 있는데 해결을 못하고 있습니다.
강의안 40page 관련하여 질문이 있습니다.40page project build 관련하여 error가 있는데 해결을 못하고 있습니다.xsa 파일 불러와서 Hello World 예제 그대로 생성하였는데 저는 #include "xil_printf.h"가 제대로 링크되어 있지 않습니다.어떻게 해결해줘야할 지 모르겠습니다..15:19:55 **** Build of configuration Debug for project zcu_1226_App2 ****make all Building file: ../src/helloworld.cInvoking: ARM v8 32 Bit gcc compilerarm-none-eabi-gcc -Wall -O0 -g3 -c -fmessage-length=0 -MT"src/helloworld.o" -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard -I/home/jhsong/Desktop/zcu_1226/system_wrapper/export/system_wrapper/sw/system_wrapper/standalone_psu_cortexa53_0/bspinclude/include -MMD -MP -MF"src/helloworld.d" -MT"src/helloworld.o" -o "src/helloworld.o" "../src/helloworld.c"../src/helloworld.c:50:10: fatal error: xil_printf.h: No such file or directory 50 | #include "xil_printf.h" | ^~~~~~~~~~~~~~compilation terminated.make: *** [src/subdir.mk:26: src/helloworld.o] Error 115:19:56 Build Finished (took 660ms)분명 xil_printf.h 헤더파일은 프로젝트 파일 내부 폴더 안에 여러개 생성되어있는 것도 확인했습니다../system_wrapper/psu_cortexa53_0/standalone_psu_cortexa53_0/bsp/psu_cortexa53_0/libsrc/standalone_v7_3/src/common/xil_printf.h./system_wrapper/psu_cortexa53_0/standalone_psu_cortexa53_0/bsp/psu_cortexa53_0/libsrc/standalone_v7_3/src/xil_printf.h./system_wrapper/psu_cortexa53_0/standalone_psu_cortexa53_0/bsp/psu_cortexa53_0/include/xil_printf.h./system_wrapper/zynqmp_fsbl/zynqmp_fsbl_bsp/psu_cortexa53_0/libsrc/standalone_v7_3/src/common/xil_printf.h./system_wrapper/zynqmp_fsbl/zynqmp_fsbl_bsp/psu_cortexa53_0/libsrc/standalone_v7_3/src/xil_printf.h./system_wrapper/zynqmp_fsbl/zynqmp_fsbl_bsp/psu_cortexa53_0/include/xil_printf.h
-
미해결
왕초보 대학교 과제 Verilog 코드 질문
안녕하세요? 대학교 과제로 Up and Down game을 만들어보려고 코드를 짜봤는데 모델심에서 시뮬레이션을 돌리면 에러가 떠서 이렇게 도움을 받고자..질문드립니다 동작만 가능하게 만들면 되어서 마음껏 수정하셔도 괜찮아요 (뭔가 제가 짠 게 비효율적인 것 같아서요..)아래는 제가 짠 코드들 이구요, 전체적인 동작은 다음과 같습니다. 1. State0에서 module LSFR을 불러와서 난수 rnd를 저장하고 State1로 넘어간다. 2. State1에서는 사용자에게 fpga보드의 스위치를 통해 4비트의 이진수 sw을 입력받고 bcd에 저장한다. 그러고나서 module bcd_seven을 불러와서 fpga보드의 숫자판에 seven을 출력하고 State2로 넘어간다. 3. State3는 rnd와 bcd 값을 비교하는 부분이다. 만약 rnd > bcd인 경우, led 에서 Red 불빛을 키고 다시 State1로 간다. 그렇지 않고 만약 rnd < bcd인 경우, led에서 Blue 불빛을 키고 State1로 간다. 그렇지 않고 rnd = bcd인 경우, led에서 Green 불빛을 키고 다시 State0으로 간다. ㄱ. 사용자로부터 입력받은 4bit 스위치 값을 fpga보드 위에 숫자판에 0~9까지의 숫자로 표시하는 bcd_seven 모듈`timescale 1ns/1nsmodule bcd_seven input [3:0] bcd; output [6:0] seven; reg [6:0] seven; always @(bcd) begin case (bcd) 4'b0000 : seven = 7'b0111111; 4'b0001 : seven = 7'b0000110; 4'b0010 : seven = 7'b1011011; 4'b0011 : seven = 7'b1001111; 4'b0100 : seven = 7'b1100110; 4'b0101 : seven = 7'b1101101; 4'b0110 : seven = 7'b1111101; 4'b0111 : seven = 7'b0000111; 4'b1000 : seven = 7'b1111111; 4'b1001 : seven = 7'b1101111; default : seven = 7'b0000000; endcase endendmodule ㄴ. 0~9까지의 숫자 중 하나를 랜덤으로 뽑아 rnd에 저장하는 LSFR 모듈`timescale 1ns/1nsmodule LFSR (input clk, input rst, output [3:0] rnd);reg [3:0] random, random_next, random_done;reg [2:0] count, count_next;wire feedback = random[3] ^ random[2];always @(posedge clk or posedge rst) beginif (rst) begin random <= 4'hF; count <= 0;endelse if (count == 3) begin count <= 0; // if (random < 10) // Limit the range to 0 to 9 random_done <= random % 10; endelse begin random <= random_next; count <= count_next; endendalways @(*) begin random_next = random; count_next = count; random_next = {random[2:0], feedback}; count_next = count + 1;endassign rnd = random_done;endmodule ㄷ. rnd와 bcd 값을 비교해서 led 불빛을 표시하는 Upanddown 모듈`timescale 1ns/1nsmodule Upanddown ( input clk, input rst, input [3:0] sw, output reg red_led, output reg blue_led, output reg green_led);reg [3:0] rnd;reg [3:0] bcd;reg [1:0] state, next_state;// Instantiate LSFR and bcd_seven modulesLSFR lsfr_inst ( .clk(clk), .rst(rst), .rnd(rnd));bcd_seven bcd_seven_inst ( .bcd(sw), .seven());always @(posedge clk or posedge rst) begin if (rst) begin state <= 2'b00; // Initial state: State0 end else begin state <= next_state; endendalways @(posedge clk) begin case (state) 2'b00: begin // State0: Generate rnd using LSFR lsfr_inst; // Call LSFR module rnd <= lsfr_inst.rnd; // Store the generated rnd next_state = 2'b01; // Move to State1 end 2'b01: begin // State1: Get user input from switch and display on 7-segment display bcd_seven_inst.bcd <= sw; bcd_seven_inst.seven(); // Call bcd_seven module bcd <= bcd_seven_inst.bcd; next_state = 2'b10; // Move to State2 end 2'b10: begin // State2: Compare rnd and user input, update LEDs, and go to the next state if (rnd > bcd) begin red_led = 1; blue_led = 0; green_led = 0; next_state = 2'b01; // Move to State1 end else if (rnd < bcd) begin red_led = 0; blue_led = 1; green_led = 0; next_state = 2'b01; // Move to State1 end else begin red_led = 0; blue_led = 0; green_led = 1; next_state = 2'b00; // Move to State0 end end default: begin next_state = 2'b00; // Default: Move to State0 end endcaseendendmoduleㄹ. rnd>bcd, rnd<bcd, rnd=bcd 등 전체적인 동작을 확인할 수 있는 테스트벤치`timescale 1ns/1nsmodule Upanddown_Tb;reg clk;reg rst;reg [3:0] sw;wire red_led, blue_led, green_led;// Instantiate Upanddown moduleUpanddown upanddown_inst ( .clk(clk), .rst(rst), .sw(sw), .red_led(red_led), .blue_led(blue_led), .green_led(green_led));// Clock generationinitial begin clk = 0; forever #5 clk = ~clk;end// Initial valuesinitial begin rst = 1; sw = 4'b0000; // Apply reset #10 rst = 0; // Scenario 1: rnd > bcd #20 sw = 4'b0010; // User input: 0010 #30 $display("Scenario 1: rnd > bcd, Expect Red LED: %0d, Blue LED: %0d, Green LED: %0d", red_led, blue_led, green_led); // Scenario 2: rnd < bcd #40 sw = 4'b1001; // User input: 1001 #50 $display("Scenario 2: rnd < bcd, Expect Red LED: %0d, Blue LED: %0d, Green LED: %0d", red_led, blue_led, green_led); // Scenario 3: rnd = bcd #60 sw = 4'b1101; // User input: 1101 #70 $display("Scenario 3: rnd = bcd, Expect Red LED: %0d, Blue LED: %0d, Green LED: %0d", red_led, blue_led, green_led); #100 $finish; // End simulation after some timeendendmodule
-
미해결
vivado를 새로 설치했습니다
강의실 pc로 vivado를 새로 설치해서 사용했을때는 별 다른 오류 없이 모든 과정이 다 잘 수행되어서 FPGA보드에서 구현까지 별 탈 없이 성공했었습니다.그런데 집의 개인 pc로 새로 설치하고나서 간단한 회로 구성 후 RTL schematic을 해봤는데로딩 중에 아무런 전조와 error code도 없이 vivado가 툭 꺼져버립니다.다시 키면 아무 일도 없었다는 듯이 잘 있고요. 그리고 synthesis를 하면 위와 같이 툭 꺼지긴 하는데,다시 켜보면 error가 떴다고 표시는 해줍니다. 상세하게 어떤 error가 떴는지는 안 떠있고요..컴퓨터 사양은 부족할게 없습니다. 강의실 pc와 다른점은 windows11을 vivado 2023.1에서 지원한다고는 하지만 살짝 꺼림칙하기도 하고, 만에 하나 DDR5 보드를 쓰는게 상관이 있나 싶습니다..며칠 째 해결하지 못해서 과제도 못하는 중입니다.. 제발 살려주세요...
-
미해결
vivado 실행 오류
vivado에서 코드를 입력하고 RTL ANALYSIS에서 Open Elaborated Design을 눌러 실행하면 비바도 프로그램이 아예 나가져요ㅜㅜ용량은 충분히 남았고, 윈도우 이름, 경로 모두 영어로 되어있습니다.vivado 2022.2 사용하다가 오류가 해결되지 않아 삭제 후 2023.1 설치하였는데도 같은 문제가 발생합니다. 해결 방법을 알 수 있을까요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
vivado 설치 시 source 관련 문제입니다.
안녕하세요 맛비님. 오늘 시작한 수강생입니다. 다름이 아니라 linux 환경에서 vivado 설치 중 source 입력 과정에서 어려움을 겪고 있습니다.정확히 어디인지 말씀드리자면,맛비님의 설치 가이드 google doc 중, 파란색 하이라이트 부분을 입력한 후, 위 사진과 같이 "No such file ro directory"라는 구문이 떴습니다. 이 문제를 해결하고자 커뮤니티에 "source"라는 키워드를 검색하고 저와 비슷한 사례를 찾아본 결과, https://www.inflearn.com/questions/570658/source-%EA%B3%BC%EC%A0%95%EC%97%90%EC%84%9C-x27-no-such-file-or-directory-x27-%EC%97%90%EB%9F%AC이 수강생분께서 질문하셨던 것과 비슷한 맥락의 경로 문제를 겪고 있는 것 같다고 생각이 들었습니다. 따라서, 경로 재설정을 하면 되려나?라는 생각으로 방법을 구글링을 해보았으나 정말로 그 문제인지 판단이 서지 않아 질문을 올려봅니다.제 컴퓨터와 노트북에서 동시에 설치를 진행하였고 노트북에선 "vivado &"까지 실행된 것으로 보아, 컴퓨터에서 설치 과정 중 복사 붙여넣기 할 때 제 실수로 인해 발생한 것 같습니다. 위 문제에 대해 해결책을 제시해주시면 정말 감사할 것 같습니다. 강의 설명에 말씀해주신 것처럼 리눅스 환경 입문이랑 설치 과정부터 정말 어려운 것 같습니다. verilog hdl, fpga뿐만 아니라 linux 또한 1타 선생님이신 것 같습니다. 좋은 강의 앞으로 열심히 수강하겠습니다! 좋은 주말 되세요.
-
해결됨설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
Vivado 2022.1과 보드에 관련된 질문입니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요안녕하세요 맛비님! HDL 강의 유익하게 잘 들었고 이제 FPGA 강의에 초입에 있습니다! 다름이 아니라 Vivado 버전과 보드에 대한 질문이 있어서 글을 남기게 되었습니다. 이하는 질문입니다! 1. 제가 Zybo z7 보드 구매가 현실적으로 어려워서 어디선가 얻어온(?) Basys3를 이용하려고하는데요! 혹시 문제가 있을까요? (ex. 해당 FPGA강좌 수강의 어려움 or 향후 맛비 유니버스 강좌에 대한 어려움 등등) 2. Vivado2022와 Vivado2020.2가 달라서 board를 install하는 GUI가 없더라구요 그래서 이것저것 만져보다 basys3를 install한 것 같은데 맞게 했는지 모르겠습니다! 확인부탁드립니다! 혹시 몰라서 제가 가지고 있는 board도 보여드릴게요!! 앞으로도 많이 배우겠습니다 !!
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
vivado 삭제
안녕하세요. 노트북에 용량이 간당간당했는데 설치를 완료 하고 설치된 파일을 확인해 보는데 아래 캡처와같이 필요한 파일들이 없습니다. 지우고 용량 확보를 하고 다시 설치를 하려고 하는데 윈도우 설정 - 앱 메뉴에서는 vivado나 xilinx가 안보이더라구요 ㅠㅠ 삭제는 어떻게 해야 하나요 ??