Custom IP
1.Introduction
在 Vivado 软件中,通过创建和封装 IP 向导的方式来自定义 IP 核,支持将当前工程、工程中的模块或者指定文件目录封装成 IP 核,当然也可以创建一个带有 AXI4 接口的 IP 核,用于 PS 和 PL 的数据通信。本次实验选择常用的方式,即创建一个带有 AXI 接口的 IP 核,该 IP 核通过 AXI 协议实现 PS 和 PL 的数据通信。AXI 协议是一种高性能、高带宽、低延迟的片内总线,关于该协议的详细内容,可以在我之前的篇节看到。
系统框图

框图中的 UART 用于打印信息,Breath LED IP 核为自定义的 IP 核,PS 通过 AXI 接口为 LED IP 模块发送配置数据,从而来控制 PL LED 灯。 (本实验基于正点原子ZYNQ嵌入式开发指南)
实验任务
本章的实验任务是通过自定义一个 LED IP 核,来控制 PL LED 呈现呼吸灯的效果,并且 PS 可以通过AXI 接口来控制呼吸灯的开关和呼吸的频率。
2.Hardware Design
step1.创建一个新的ip核
1-1 打开 Vivado,进入 Vivado 界面后,点击“Tasks”栏中的“Manage IP”。在弹出的选项中选择“New IP Location…”。
1-2 在弹出的界面中选择“Next”,然后设置 Manage IP 核的属性,在“IP Location:”一栏指定工程的路径,路径为:F:/ZYNQ/ Embedded_System/custom_ip,其它保持默认即可。点击“Finish”完成 Manage IP工程的创建。
1-3 工程创建完成后,运行创建和封装 IP 向导。点击菜单栏的“Tools”,选择“Create and Package New IP”,在弹出的界面中,点击“NEXT”。
1-4 接下来选择封装 IP 或者创建一个带 AXI4 接口的 IP 核,我们这里选择创建一个带 AXI 接口的 IP核,选中“Creat a new AXI4 peripheral”,并点击“NEXT”按钮。因为我们实验任务是需要用到AXI总线去从PS端传数据到PL端。
1-5 接下来分别设置 IP 核名称(Name)、版本号(Version)、显示名(Display name)、描述(Description)和路径(IP location)。在 Name 一栏设置 IP 核的名称,本次实验的功能是控制 PL LED 呈现呼吸灯的效果,因此这里在 Name 一栏,将名称改为“breath_led_ip”,此时 Display name 一栏会自动更改为 “breath_led_ip_v1.0”。其它的设置直接保持默认即可,点击“NEXT”按钮。
1-6 接下来对 AXI 接口进行设置。
Name(名称):这里修改成 S0_AXI。
Interface Tpye(接口类型):共三种接口类型可选,分别是 Lite、Full 和 Stream。AXI4-Lite 接口是简化版的 AXI4 接口,用于较少数据量的存储映射通信;AXI4-Full 接口是高性能存储映射接口,用于较多数据量的存储映射通信;AXI4-Stream 用于高速数据流传输,非存储映射接口。本次实验只需少量数据的通信,因此接口类型选择默认的 Lite 接口。
Interface Mode(接口模式):接口模式有 Slave(从机)和 Master(主机)两种模式可选,AXI 协议是主机和从机通过“握手”的方式建立连接,这里选择默认的 Slave 接口模式,因为AXI总线是在PL端接收PS端的数据,所以设置为Slave。
Data Width(数据宽度):数据位宽保持默认,即 32 位位宽。
Memory Size(存储器大小): 在 AXI4-Lite 接口模式下,该选项不可设置。
Number of Registers(寄存器数量):用于配置 PL LED 呼吸灯寄存器的数量,这里保持默认,它的范围是[4-512],所以最低的也需要四个寄存器,但本次实验中我们只需要两个寄存器,剩下两个就可以先不用管。
点击“Next”按钮。
1-7 最后弹出封装接口的总结描述和下一步操作选项的界面。这里保持默认,即将 IP 添加至 IP 库中,点击“Finish”按钮完成 IP 核的创建和封装。
1-8 创建好 IP 核后,我们接下来对 breath_led_ip_v1.0 IP 核进行编辑。右击 breath_led_ip_v1.0 IP 核,选择“Edit in IP Packager”,在弹出的界面中点击“OK”。
打开 breath_led_ip_v1_0.v (顶层)文件后,接下来开始编辑代码,来添加控制 PL LED 呼吸灯所需要的参数和端口信号。
1-9 在breath_led_ip_v1_0.v下有个AXI传输数据的子模块breath_led_ip_v1_0_S0_AXI ,它实现了 AXI4 协议下的读写寄存器的功能,我们只需要对该模块稍作修改,即可实现控制 PL LED 呼吸灯的功能。
1-10 在此需要在子模块breath_led_ip_v1_0_S0_AXI下面建立呼吸灯模块,breath_led.v 文件用于实现呼吸灯的功能,点击“Create File ” 创 建 一 个 新 的 文 件 , 在 弹 出 的 界 面 输 入 名 称 breath_led 路径放置在工程文件夹下面





