ZYNQ 自定义IP

本文介绍了如何利用ZYNQ的处理器系统(PS)核心,通过建立AXI接口来访问和控制自定义IP,特别是用于LED控制。首先编辑IP,添加LED接口和相应端口,然后在底层接口定义中将AXI的slv_reg0[0]映射到LED输入。接着在XML中封装IP,并在Vivado及SDK中进行集成和编程。在SDK的C程序中,通过写寄存器控制LED的开关状态。
摘要由CSDN通过智能技术生成

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

建立AXI接口的IP

右键编辑IP

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

例化的位置也相应添加。

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

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

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

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

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

接着在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点亮。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值