You are on page 1of 78

IP 만들기!

Custom Logic 만들기!


19. 07. 30
doksg
System 구성을 위한 AI IP 만들기?
• Zynq에 붙일 Logic을 만들고 연결해서 사용해본다.
Top system Diagram
Zynq PS

DDR ARM
Memory (Host) BRAM
Memory

BRAM
Controller
AXI-4 Lite
Slave

ARM AXI
(Host) Master
PS : Processing System
PL : Programmable Logic
Zynq PL
Arty Z7-20 LED 조절하는 IP 만들기

button 0 ARM LED 0


LED IP
Processor
button 1
GPIO LED Register LED 1
버튼 입력

button 2 LED IP에 명령 LED 2


전달

button 3 LED 3

32 bit
[31:4] [3] [2] [1] [0]
LED LED LED LED
Reserved 3 2 1 0
Manage IP 클릭하고 New IP Location 클릭
본인이 사용하는 보드를 선택해줍니다.
저는 Arty Z7-20을 사용해서 왼쪽과 같이 선택했습니다.
Vivado IP Catalog에 new IP Package를 넣는다.

새로운 AXI4 Peripheral을 만든다


Lite vs Full vs Stream

차이는?

AXI Bus의 pin 차이


lite가 pin수가 적고 간단함
lite는 여러 개를 연결하기 어려움
우클릭
더블클릭
코드 추가(파라미터)
parameter integer LED_WIDTH=4,
parameter 추가

Output port 추가

Logic 추가
더블 클릭
잘 있는지 확인만
#include "xparameters.h"
#include "xgpio.h"
#include "myip.h"

int main(void)
{
XGpio btns;
u32 btns_status;
u32 ledip_BaseAddress = XPAR_MYIP_0_S00_AXI_BASEADDR;

xil_printf("LED IP TEST START \r\n");

XGpio_Initialize(&btns, XPAR_AXI_GPIO_0_DEVICE_ID);
XGpio_SetDataDirection(&btns, 1, 0xffffffff);

while(1)
{
btns_status = XGpio_DiscreteRead(&btns, 1);
MYIP_mWriteReg(ledip_BaseAddress, 0, btns_status);
xil_printf("Button Status: %08x\r\n", btns_status);
}
}
Arty Z7-20 LED 조절하는 IP 만들기

button 0 ARM LED 0


LED IP
Processor
button 1
GPIO LED Register LED 1
버튼 입력

button 2 LED IP에 명령 LED 2


전달

button 3 LED 3

32 bit
[31:4] [3] [2] [1] [0]
LED LED LED LED
Reserved 3 2 1 0
Example 2:
LED 0

button 0 ARM
LED IP LED 1
Processor
button 1
GPIO LED Register LED 2
버튼 입력

button 2 LED IP에 명령


전달 LED 3

button 3
3C-LED0

SW 0
3C-LED1

32 bit
SW 1
[31:30] [29:11] [10:8] [7] [6:4] [3] [2] [1] [0]
3C- Reser 3C- LED LED LED LED
mode Reserved LED1 ved LED0 3 2 1 0

mode
{SW0=0, SW1=0} -> Button0-4 : LED0-4 제어
{SW0=1, SW1=0} -> Button0-3 : 3C-LED0 제어
{SW0=0, SW1=1} -> Button0-3 : 3C-LED1 제어
Manage IP 클릭하고 New IP Location 클릭
잘 있는지 확인만
axi gpio 두개

led ip 만든거 하나

zynq7 하나

이렇게 3개를 추가 합니다.

gpio 하나는 btns4


gpio 하나는 sws2에 연결합니다.
이어서 generate bit stream

그리고 HW export하고 SDK로 이동


#include "xparameters.h"
#include "xgpio.h"
#include "led_ip2.h"

int main(void)
{
XGpio btns;
XGpio sws;
u32 btns_status;
u32 sws_status;
u32 ledip_BaseAddress = XPAR_LED_IP2_0_S00_AXI_BASEADDR;

xil_printf("LED IP TEST START \r\n");

XGpio_Initialize(&btns, XPAR_AXI_GPIO_0_DEVICE_ID);
XGpio_Initialize(&sws, XPAR_AXI_GPIO_1_DEVICE_ID);
XGpio_SetDataDirection(&btns, 1, 0xffffffff);
u32 value=0;

while(1)
{
btns_status = XGpio_DiscreteRead(&btns, 1);
sws_status = XGpio_DiscreteRead(&sws, 1);
if(sws_status==1){
value = ((btns_status&0x7)<<4);
}else if(sws_status==2){
value = ((btns_status&0x7)<<8);
}else{
value = (btns_status);
}
value = value +(sws_status<<28);
LED_IP2_mWriteReg(ledip_BaseAddress, 0, value);
xil_printf("Button Status: %08x\r\n", value);
}
return 0;
}

You might also like