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

 

 

PS PL 구조

< 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 파일에 맞게 자동으로 업데이트됨.

xparameter.h 내부의 device id define 내용

 

 

< 예제 tree >

https://github.com/Xilinx/embeddedsw/tree/master/XilinxProcessorIPLib/drivers