文章目录

  • 1. 前言
  • 2. Vivado工程的编写
    • 2.1 创建自定义IP
    • 2.2 添加自定义IP到工程
  • 3. Vitis工程的编写
  • A. 工程源码下载

1. 前言

Xilinx官方为大家提供了很多IP核,在Vivado的IP Catalog中可以查看这些IP核,用户在构建自己的系统中,不可能只使用Xilinx官方的免费IP核,很多时候需要创建属于自己的用户IP核,创建自己的IP核有很多好处,例如系统设计定制化;设计复用,可以在IP核中加入license,有偿提供给别人使用;简化系统设计和缩短设计时间。用ZYNQ系统设计IP核,最常用的就是使用AXI总线将PS同PL部分的IP核连接起来。本实验将为大家介绍如何在Vivado中构建 AXI总线类型的IP核,此IP核用来产生一个PWM,用这个控制开发板上的LED,做一个呼吸灯的效果。

2. Vivado工程的编写

2.1 创建自定义IP

(1)本实验使用的Vivado工程延用《ZYNQ 串口打印输出——FPGA Vitis篇》中使用的Vivado工程,大家可以查看该文章来了解Vivado工程的建立。

(2)修改Vivado工程,创建自定义IP。点击菜单“Tools->Create and Package IP…”,并点击“Next”。

(3)选择创建一个新的AXI4设备

(4)名称填写AXI_pwm,描述随便填写,然后选择一个合适的位置存放IP。

(5)下面参数可以指定接口类型、寄存器数量等,这里不需要修改,使用AXI Lite Slave接口,4个寄存器。点击“Next”-> “Finish”,完成IP的创建。

(6)重新打开“IP Catalog”,可以看到刚才我们创建的IP。

(7)但这时候的IP并没有PWM功能,只有简单的AXI总线读写寄存器功能。我们需要修改 IP,选择IP,右键“Edit in IP Packager”。在弹出的对话框中,不修改默认信息,点击“OK”。

(8)Vivado打开了一个新的工程。

(9)在Vivado “Flow Navigator”中点击“Add Source”,添加PWM功能代码。这里的PWM功能代码借用的是Alinx公司开发板提供的模块代码,用户也可以根据自己需要更改其它代码。

(10)在Vivado中,修改“AXI_pwm_v1_0.v”文件,增加“pwm”输出端口。

(11)修改“AXI_pwm_v1_0.v”,在例化“AXI_pwm_v1_0_S00_AXI”中添加pwm 端口的例化。

(12)修改“AXI_pwm_v1_0_S00_AXI.v”,添加pwm端口,这个文件是实现AXI4 Lite Slave的核心代码。

(13)修改“AXI_pwm_v1_0_S00_AXI.v”文件,例化我们刚添加的axi_pwm.v文件,并将寄存器slv_reg0和slv_reg1用于pwm模块的参数控制。

(14)在工程源文件“Sources”一栏中双击“component.xml”文件。在“File Groups”选项中点击,“Merge changes from File Groups Wizard”。

(15)同样在“Customization Parameters”选项中点击,“Merge changes from Customization Parameters Wizard”。

(16)点击“Re-Package IP”完成IP的修改。

2.2 添加自定义IP到工程

(1)在Block Design中,点击添加IP,搜索“pmw”,添加“AXI_pwm_v1.0” IP核,并点击“Run Connection Automation”。

(2)导出“pwm”IP核的端口,保存设计,并“Generate Output Products”。

(3)添加“XDC”文件,把pwm_led输出端口分配给ZedBoard上的一个LED灯,编译生成Bit文件。

(4)点击Vivado “Flow Navigator”一栏里的“Generate Bitstream”,等待Vivado生成好bit文件后,在菜单栏“File -> Export -> ExportHardware…”导出硬件信息(.xsa文件),这里就包含了PS端的配置信息。该步骤如有疑问,可以参考以前的文章《ZYNQ串口打印输出——FPGA Vitis篇》。

3. Vitis工程的编写

(1)点击 Vivado 菜单“Tools-> Launch Vitis IDE”,启动 Vitis。
(2)新建 Vitis平台工程。Vitis工程的建立可以参考以前的文章《ZYNQ串口打印输出——FPGA Vitis篇》。
(3)新建 Vitis应用工程,创建一个名为“AXI_UserIPDemo”的工程,工程模板可以选择“Hello World”。
(4)在APP工程的目录下,可以找到对应我们开发IP的AXI_pwm.h的文件,这个头文件里包含里对自定义IP寄存器的读写宏定义。

(5)在“helloworld.c”文件中,修改“main”函数。我们先通过写寄存器 AXI_PWM_S00_AXI_SLV_REG0_OFFSET,控制PWM输出频率,然后通过写寄存器AXI_PWM_S00_AXI_SLV_REG1_OFFSET控制PWM输出的占空比。

(6)编译工程,将工程下载到硬件板卡上(编译和下载方式见《ZYNQ 串口打印输出——FPGA Vitis篇》)。
实验结果为: 板卡上的LED0灯呈呼吸状亮灭;

A. 工程源码下载

如果大家对我们的文章感兴趣,可以关注我们的微信公众号:“图灵研究院”:
该工程对应的源码可以通过关注该微信公众号,在公众号输入 ZYNQ_UserIP 来获取工程的下载链接,工程采用的是Vivado2021.1版本。


参考文献:
[1] http://www.alinx.com.cn/.
[2] Zynq-7000 SoC Technical Reference Manual(UG585). Xilinx官方文档
[3] ZYNQ 串口打印输出——FPGA Vitis篇. 图灵研究院

自定义AXI IP核实验——FPGA Vitis篇相关推荐

  1. ZYNQ AXI GPIO中断实验——FPGA Vitis篇

    文章目录 1. 前言 2. Vivado工程的编写 2.1 Block Design工程设计 2.2 创建XDC管脚约束 3. Vitis工程的编写 4. 实验小结 5. 工程源码下载 1. 前言 使 ...

  2. ZYNQ HDMI输出实验——FPGA Vitis篇

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1. 前言 1.1 HDMI介绍 1.2 TMDS介绍 1.3 HDMI传输周期 2. Vivado工程的编写 3. Vit ...

  3. ZYNQ PS端MIO的使用——FPGA Vitis篇

    文章目录 1. 前言 2. MIO介绍 3. Vivado工程编写 4. Vitis工程编写 5. 实验小结 A. 附录 B. 工程源码下载 1. 前言 本实验介绍如何使用ZYNQ芯片PS端的MIO. ...

  4. 开发自定义AXI总线外设IP核——以LED和开关为例

    http://www.eefocus.com/nightseas/blog/12-10/287343_15762.html ZedBoard学习手记(二) 开发自定义AXI总线外设IP核--以LED和 ...

  5. [网络安全自学篇] 九十一.阿里云搭建LNMP环境及实现PHP自定义网站IP访问 (1)

    这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步.本文主要分享作阿里云搭建LNMP环境及实现PHP自定义网站IP访问,同时详细介绍走过 ...

  6. VIVADO 自定义封装ip核(超详细)

    版本:vivado 2018.3 vivado 自定义封装ip核,可以将ip核封装成带AXI总线,也可将ip核封装成不带AXI总线. 本次设计介绍,如何将当前工程封装成ip核(不带AXI总线) 目录 ...

  7. ZYNQ学习之路3. 定制AXI IP核

    ZYNQ最大的优点就是硬核A9处理器与FPGA的结合,处理器可以扩展出任何使用者想要的外设(数字逻辑外设),FPGA与处理器通过AXI高速总线进行连接,提供了处理器到FPGA的高速带宽(ZYNQ700 ...

  8. 芯片IP,SOC,FPGA智能卡

    芯片IP,SOC,FPGA智能卡 华夏芯(北京)通用处理器技术有限公司(以下简称"华夏芯")是创新的异构处理器 IP 提供商和芯片解决方案提供商,集团总部在北京,并分别在上海.纽约 ...

  9. Altera 的SOC器件之将自定义的IP挂在ARM硬核下(通过avalon总线),实现arm核与IP之间的通信

    Altera 的SOC器件之将自定义的IP挂在ARM硬核下(通过avalon总线),实现arm核与IP之间的通信 软件: Quartus II 17.0 芯片: ALTERA Cyclone5 5CG ...

最新文章

  1. 关于Oracle数据库19c中的关键字和保留字的说明
  2. 基于便签纸的无限延生学习方法
  3. Mckinsey insights 2
  4. 如何在SQL Server 2017中实现图形数据库
  5. np实现sigmoid_【强基固本】基础算法:使用numpy实现逻辑回归随机梯度下降(附代码)...
  6. git提交本地代码到新分支
  7. 有人认为,“中文编程”是解决中国程序员效率的秘密武器,请问它是一个“银弹”么?...
  8. android向web提交数据,中文乱码
  9. element table多选和单选
  10. mysql 协议还原_mysql备份还原方案xtrabackup
  11. 管理感悟:代码缺的不是注释,而是自解释
  12. 桌面云之深信服VMP平台搭建
  13. 通达\铭心联手,共探企业信息化营销新机遇
  14. Git命令使用出现Cannot update paths and switch to branch xxx at the same time解决方法
  15. Scrum立会报告+燃尽图(Beta阶段第七次)
  16. 堡垒机的主要功能是什么?为什么需要堡垒机?
  17. 程序员开发什么小程序挣钱_作为程序员赚钱的5种独特方式
  18. Opencv2.4.9源码分析——Stitching(四)
  19. 解决-画图程序无法读取-无效的位图文件
  20. 【安装Linux系统】

热门文章

  1. 无法启动此程序,因为计算机中丢失xinput1-3.dll,绝地求生计算机中丢失xinput1_3.dll解决方法...
  2. 解决xshell6需要更新才能打开的问题
  3. word2013删除下载的模板
  4. 十月末婚礼展示:“美好Lan图”派对式小型婚礼【奥帆婚礼顾问】
  5. AS9100航空航天质量管理体系认证
  6. ubuntu 20.04中sources.list文件恢复系统默认源
  7. [Node]如何查看安装的node包的官方使用指南,以及淘宝镜像原理和使用
  8. 使用yocto搭建 i.MX8QXP Linux 4.14.98_ga 板级开发包编译环境
  9. Oracle查询速度慢的原因总结
  10. 修改计算机名并加入工作组