ZYNQ学习之旅--自定义AXI总线的IP核

这里写目录标题

简介

在 zynq 系统的设计中,我们将许多实现特定功能的硬件设计模块封装起来,称之为 IP 核。这种方式极大的提高了设计效率,降低了设计门槛,让设计人员不需要在每次需要某个功能时多次重复相同的工作,或者需要某个功能时去自行研究实现方法,只需要添加实现该功能的 IP 核即可。在添加 IP 核的列表即可看出 xilinx 官方提供了非常丰富的 IP 资源供我们使用。但在实际设计中总会遇到一些特殊的需求,这种时候就需要我们自行设计并封装 IP 核,将它运用到各个系统中。在本次实验中,我们将创建一个能产生 PWM 波形的 IP 核,在开发板上实现呼吸灯的功能。该 IP 核带有 AXI 总线,可以通过 PS 端访问 IP 核内部寄存器,实现 PS 端对于 IP 核的控制。

BD设计

首先这里需要自己创建一个AXI_LITE总线的IP核,然后加入自己的逻辑代码。
在这里插入图片描述
在这里插入图片描述
在这里将PWM的模块例化,这里使用了寄存器0的低十位作为PWM的步进值。
最终的BD原理图如图所示:
在这里插入图片描述

软件设计

/*
 * main.c
 */
#include <AXI_PWM.h>
#include <xparameters.h>
#include <stdio.h>
#include <sleep.h>

#define		AXI_PWMBASEADDR		XPAR_AXI_PWM_0_S00_AXI_BASEADDR
#define		REG0				AXI_PWM_S00_AXI_SLV_REG0_OFFSET

int main()
{
	print("AXI_PWM test\n");
	AXI_PWM_mWriteReg(AXI_PWMBASEADDR,REG0,0x000001ff);
	sleep(10);
	AXI_PWM_mWriteReg(AXI_PWMBASEADDR,REG0,0x0000005f);
	print("test finsh\n");

	return 0;
}

这里的代码很简单,就是将步进值写入寄存器0,以此来改变PWM的步进值。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值