目的:自定义一个IP并添加到设计中使用(产生PWM波形)
在ZYNQ系统中将许多特定功能的硬件设计模块封装起来称为IP核,类似于库函数。这种方式极大的提高了设计效率。当遇到设计中的一些特殊的需求且官方没有对应的IP时就需要我们自定义IP来使用。
创建步骤:
1、创建新IP
进入vivado之后点击管理IP、新IP,之后点击finish
2、进入界面之后点击tools
如果需要axi的话就选择下面的
点击这个就不用手动添加ip到工程中了
3、右键创建的ip,打开IP编辑界面开始编辑IP
4、打开pwm_ip_v1_0.v添加输入与输出端口并保存
4、打开pwm_ip_v1_0.v下的pwm_ip_v1_0_S00_AXI.v
同样在18行添加端口,401行例化IP
例化完成之后就开始添加IP的源代码
5、添加一个新source文件,注意文件名和文件位置
编写代码后点击综合
6、综合完成之后点击component.xml开始封装IP核
添加zynq7000系列器件
最后点击review and package 更新总结界面
至此IP的设计与封装已经完成
自定义IP使用步骤:
1、首先创建一个vivado工程,将刚刚做好的IP添加到ip列表中,以便后续使用。点击设置来添加ip
2、新建一个BD设计,首先添加zynq IP 配置串口和ddr3,再添加自定义的pwm ip
添加完成后直接自动连线,引出pwm端口
3、连线完成后验证设计,无误后开始生成创建封装与输出文件
4、创建引脚约束
我的板子上led灯连接的是T19引脚,高电平灯亮
5、生成bit流 并导出到sdk
导出->导出到硬件 并包含bit流文件,再打开SDK
6、在sdk中创建一个新的空应用工程,并添加main.c文件
在板级支持里的ip头文件里可以查看ip的函数使用
7、main文件中添加代码:
可以修改第三个参数修改pwm呼吸频率
#include "stdio.h" #include "xparameters.h" #include "xil_printf.h" #include "xil_io.h" #include "pwm_ip.h" #include "sleep.h" #define PWM_IP_BASEADDR XPAR_PWM_IP_0_S00_AXI_BASEADDR //PWM IP基地址 #define PWM_IP_REG0 PWM_IP_S00_AXI_SLV_REG0_OFFSET //PWM IP寄存器地址1 #define PWM_IP_REG1 PWM_IP_S00_AXI_SLV_REG1_OFFSET //PWM IP寄存器地址2 int main(){ xil_printf("PWM_IP Test!\n"); PWM_IP_mWriteReg(PWM_IP_BASEADDR,PWM_IP_REG1,0x0000001f); } |
8、连接串口并烧录程序
再勾选一下核心,开始烧录
系统运行正常:
标签:pwm,自定义,IP,include,添加,ZYNQ,ip,PWM From: https://blog.csdn.net/weixin_51353185/article/details/136702760