SW 개발 공부/FPGA
[FPGA]예제 분석(AXI GPIO)
Maison
2023. 10. 13. 12:00
1. AND GATE 예제( youtube// https://www.youtube.com/watch?v=AOy5l36DroY&t=244s )
<Soc 구조>
외부 SW0,SW1에서 PL로 데이터를 수신하여 PS에 전달하고, PS는 해당 결과를 수신하여 외부 LED로 출력한다.
- PL Side
* NAND_gate_0
- PS Side
* Zynq PS
Flow map)
Sw-> PL -> Axi Gpio -> PS -> Axi Gpio -> LED
< Application Code >
char a,y;
int main()
{
init_platform();
XGpio gpio_sw,gpio_led;
//initialize xgpio
XGpio_Initialize(&input,XPAR_AXI_GPIO_0_DEVICE_ID);
XGpio_Initialize(&output,XPAR_AXI_GPIO_1_DEVICE_ID);
//data direction set
// input : 1, Output : 0
XGpio_SetDirection(&gpio_sw,1,1);
XGpio_SetDirection(&gpio_led,1,0);
while(1)
{
//read sw result
a=XGpio_DiscreteRead(&gpio_sw,1);
if(a==1)
y=0;
else
y=1;
//set led
XGpio_DiscreteWrite(&gpio_led,1,y);
}
cleanup_platform();
return 0;
}
< 메서드 설명 >
void XGpio_DiscreteWrite(XGpio * InstancePtr, unsigned Channel, u32 Mask) ** Channel 값은 1 or 2 여야만 함. - 한 xgpio는 최대 2개의 채널을 관리 할 수있고, 이를 설정하기 위해선 vivado에서 Multi Channel 설정을 수행해놓아야함. int XGpio_Initialize(XGpio * InstancePtr, u16 DeviceId) - GPIO Initalize 기능 - DeviceId는 vivado의 DeviceId와 매칭되어야함. - 해당 Id는 xparameter.h 에 정의되어있는데, vivado에서 만든 xsa 파일에 맞게 자동으로 업데이트됨. |
< 예제 tree >
https://github.com/Xilinx/embeddedsw/tree/master/XilinxProcessorIPLib/drivers