ZYNQ 自定义IP

今天的任务是用ZYNQ的PS核心,取访问自定义IP。

建立AXI接口的IP

右键编辑IP

ZYNQ 自定义IP_第1张图片

在顶层,添加相应端口,这里就放一个LED接口

ZYNQ 自定义IP_第2张图片

例化的位置也相应添加。

ZYNQ 自定义IP_第3张图片

接下来,修正下一层,就是接口定义层。把AXI的slv_reg0[0]作为breath_led的输入。

ZYNQ 自定义IP_第4张图片

添加breath_led这个就是我们真正执行的程序了。

module breath_led(
  input ctrl,
  output led
    );
    
 assign led = ctrl;   
 
endmodule

好了以后,进入xml开始封装IP

ZYNQ 自定义IP_第5张图片

点击Re-package IP完成IP封装。

ZYNQ 自定义IP_第6张图片

接着在vivado里添加这个IP,过程省略了。最后看下SDK里面的程序。

#include "stdio.h"
#include "xparameters.h"
#include "xil_printf.h"
#include "breath_led_ip.h"
#include "xil_io.h"
#include "sleep.h"


int main()
{
    xil_printf("SPI ON!\n");
    while(1)
    {
        BREATH_LED_IP_mWriteReg(XPAR_BREATH_LED_IP_0_S0_AXI_BASEADDR,BREATH_LED_IP_S0_AXI_SLV_REG0_OFFSET,1);
        xil_printf("LED ON--------!\n");
        sleep(1);
        BREATH_LED_IP_mWriteReg(XPAR_BREATH_LED_IP_0_S0_AXI_BASEADDR,BREATH_LED_IP_S0_AXI_SLV_REG0_OFFSET,0);
        xil_printf("LED OFF--------!\n");
        sleep(1);
    }
}

像BREATH_LED_IP_mWriteReg(XPAR_BREATH_LED_IP_0_S0_AXI_BASEADDR,BREATH_LED_IP_S0_AXI_SLV_REG0_OFFSET,1);就是写寄存器的值,对应的话就是把LED点亮。

以上,因为其中有很多细节比较繁琐就不一一列举了,有问题可以留言。

你可能感兴趣的:(FPGA,fpga开发)