묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Verilog ZYNQ Program 1 (Zynq mini 7020)
기초예제 파일 불러오기 문의
안녕하십니까 템플릿을 만들어서 챕터를 하나씩 작성해보는 중입니다.5-2에서 bitstream이 generate되지않아 문제를 해결해보려다가 기존에 제공되는 완성된 예제파일을 열어서 비교를 하려했습니다.프로젝트 폴더 위치는 C:\Users\rnfkd\Desktop\CSG\reference documents\ch_05_2\ZynqTop인데 VIVADO에서 파일을 찾을때 다른 폴더를 잡고 찾는듯합니다.어떻게 해결하면 좋을까요?
-
해결됨FPGA에 UART 구현하기
Zybo 환경에서 PL RTL UART 보드 검증 방법
안녕하세요, 강의 수강 중 문의드립니다. * 저는 아직 이해가 부족한 부분이 많아 질문 내용을 AI의 도움을 받아 정리하였습니다. Zybo Z7-20 보드로 실습을 진행하던 중 UART 보드 검증 단계에서 문제가 발생했습니다.강의에서는 IO Planning에서 uart_tx/rx 핀을 매핑한 후 PuTTY로 Loopback 테스트를 진행하셨는데, Zybo Z7-20은 온보드 USB-UART 브리지(FT2232HQ)가 PS MIO 핀에만 연결된 구조여서 순수 PL RTL 설계에서는 해당 핀에 접근이 불가능한 것으로 파악했습니다. (첨부 이미지 Figure 7.1 참고)강의 기준 보드는 uart_tx/rx가 PL 핀에 직접 연결되어 XDC에서 바로 매핑이 가능한 것으로 보입니다. 제가 파악한 내용이 맞는지 확인 부탁드립니다.(AI는 USB-to-UART 변환 모듈을 별도 구매하면 해결 가능하다고 설명하고 있습니다. 다만 우선은 제가 파악한 내용이 맞는지 확인이 먼저라 생각되어 문의드리게 되었습니다. 확인 후 여유가 된다면 해당 방법도 시도해볼 예정입니다.) 감사합니다.
-
미해결Verilog ZYNQ Program 1 (Zynq mini 7020)
혹시 별도의 자료가 있나요?
페이지 하나하나마다 클릭해서 넘어가기가 너무 불편한데 강의내용이 모두 들어있는 하나의 PDF가 있는지 여쭤보고 싶습니다.
-
미해결FPGA에 UART 구현하기
7강에서 실습하려면 FPGA 보드가 필요한지 궁금합니다.
7강에서 실습하려면 FPGA 보드가 필요한지 궁금합니다. 아님 맨처음에 설정에서 보드 설정이 있는데 그걸로도 가능한지 궁금합니다.
-
미해결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 보드를 쓰는게 상관이 있나 싶습니다..며칠 째 해결하지 못해서 과제도 못하는 중입니다.. 제발 살려주세요...