Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)
https://www.eefocus.com/antaur/blog/16-11/397749_91373.html
0. 引言
任何最初的入门学习都是以官方参考文档为基础的,所以我的第一个实验也是参考Xilinx公司的官方实验手册为出发点的。
但是官方的文档只是操作手册,只是“授人以鱼”,“使人知其然”,而我这是深入学习笔记,希望“授人以渔”,“使人知其所以然”,不知能否达到这个目的。
这一篇学习笔记在我电脑中的word版的就有38页(当然为了直观形象,图比较多),因此可能要发多个帖子才能发完。请注意标题编号。
1. 简介
通过本实验,学习使用Vivado 开发环境中的IP 封装器(IP Packager)创建一个给予AXI4-Lite 总线接口外设模块,并学习如何将一个用户自定义的外设模块添加到一个现有的SoC 系统中。
2.实验目的
(1)利用Vivade 向导工具创建一个外设IP 的工程框架。
(2)修改该外设IP 的逻辑代码,使其实现特定的功能。
(3)利用IP Packager 将用户设计的功能外设模块封装成满足AXI 总线接口的外设模块
(4)在现有的SoC 工程中添加该外设。
(5)添加新外设的管脚约束。
3. 实验任务描述
本实验需要构建的系统平台如下图所示:
可以看出,本实验是在实验1 的基础上创建一个用户自行编写的外设模块,该模块能根据CPU(Zynq 子系统--》ARM)发送来的数据,控制外设LED的亮灭。
4. 实验流程
Step 1:利用向导创建1 个用户IP 的工程框架
Step 2:在工程框架中修改HDL,使用户模块完成特定的功能
Step 3:在现有工程中添加新的IP 核
Step 4:将硬件配置信息导出到SDK,并编写与用户外设匹配的驱动程序
Step 5:软硬件联合调试,下板测试验证
【说明】:下文对应的实验流程使用的Vivado 版本为2014.4。
5. 用户IP 的设计
5.1 创建IP 工程框架
(1)利用Manage IP 创建一个IP 核的管理工程
由于IP 核的设计通常是独立于SoC 工程之外的,也就是说一个用户设计的IP核将能够应用于不同的SoC 工程。因此,用户IP 核的设计层次是与SoC 工程一样高的,因此业务入口与SoC 工程创建在同样的地方。
打开Vivado 2014.4 软件,在启动界面选择“Manage IP”
或者:
操作步骤如下:
上图中,Part 项目,原先默认是芯片型号,可以选择开发板型号。但是为了更具一般性,感觉还是芯片型号比较好。点击“Finish”就创建了一个manage IP 的工程。在项目文件夹下,多出了一个managed_ip_project 文件夹。
该文件架内部文件结构如下图所示:
但是,这个工程只是一个用户自行设计IP 核的管理工程,是一个空工程,需要用户自行添加想要设计的IP 核。
(2)在管理工程中创建用户自己的IP核
在Tool 菜单中,选择“Create and Package IP...”
上图只是一个说明,只能点击“Next”按钮。该说明提到了向导能够干两个事情,第一个是将用户已经设计好的Module 封装成一个IP 核,第二个是创建一个AXI4 接口的IP 核框架,用户再修改完善该框架的功能。建议按照第二个路子来。
根据上面的说明,这里选择创建一个新的AXI4 的外设IP。
配置该IP 的名称,并且选择该IP 的保存路径。默认的IP 核存放路径与manage IP 的工程路径是一个层次。
这里采用默认的文件层次管理结构。
开始配置IP 核的AXI 从机接口,由于本模块只准备设计一个AXI 从机接口,因此其名称改为S_AXI,将默认名称中接口的标识号00 去掉。
支持的接口类型有三类,分别是Lite,Full,Stream。这里选择Lite。
这三类接口的差别很有必要仔细研究一下,这是个问题。
接口类型是从机,可供选择的还有Master(主机),这里根据需求设计为从机Sl**e。
AXI4-Lite 总线位宽仅能支持32bits。
向导支持的外设寄存器深度最小为4,最大为512。对本实验的应用,其实1个寄存器就够了,这里选择最小的4。
本实验采用的配置结果如下图所示,就改了个名字。
【注意】这里一定要选择“Edit IP”,否则,软件只是生成了框架文件,而不会创建一个关于IP 核的工程,这样对于IP 核的进一步设计很不利,虽然可以人为创建一个工程将相应的文件加入,但是这个需要更强的经验。所以强烈建议这一步选择“Edit IP”。
点击“Finish”完成向导配置,如果选择的是Edit IP,系统会自动切换到为IP和创建的工程edit_AzIP_GPIO_LED_v1_0。
如果不选择Edit IP,向导之后生成AzIP_GPIO_LED_1.0 文件夹,其中是各种文件。但是不会生成edit_AzIP_GPIO_LED_v1_0。
选“Edit IP”和选“Add IP to the repository”生成的AzIP_GPIO_LED_1.0 文件夹中的内容是完全一样的。
而edit_AzIP_GPIO_LED_v1_0 工程只是为了方便对IP 核的修改,修改的就是AzIP_GPIO_LED_1.0 文件夹中的内容。
对应的edit_AzIP_GPIO_LED_v1_0 工程启动后显示如下:
(3)修改用户自定义IP 核的逻辑功能
点开顶层文件AzIP_GPIO_LED_V1.0,显示如下:
可以看到生成的IP 核模板其实是两个v 文件。
双击后可以打开相应的v 文件,可以看到。
【未完待续】