Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

https://www.eefocus.com/antaur/blog/16-11/397749_91373.html

0. 引言
       任何最初的入门学习都是以官方参考文档为基础的,所以我的第一个实验也是参考Xilinx公司的官方实验手册为出发点的。

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

       但是官方的文档只是操作手册,只是“授人以鱼”,“使人知其然”,而我这是深入学习笔记,希望“授人以渔”,“使人知其所以然”,不知能否达到这个目的。
       这一篇学习笔记在我电脑中的word版的就有38页(当然为了直观形象,图比较多),因此可能要发多个帖子才能发完。请注意标题编号。

1. 简介

  通过本实验,学习使用Vivado 开发环境中的IP 封装器(IP Packager)创建一个给予AXI4-Lite 总线接口外设模块,并学习如何将一个用户自定义的外设模块添加到一个现有的SoC 系统中。

2.实验目的

(1)利用Vivade 向导工具创建一个外设IP 的工程框架。

(2)修改该外设IP 的逻辑代码,使其实现特定的功能。

(3)利用IP Packager 将用户设计的功能外设模块封装成满足AXI 总线接口的外设模块

(4)在现有的SoC 工程中添加该外设。

(5)添加新外设的管脚约束。

3. 实验任务描述

本实验需要构建的系统平台如下图所示:

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

 

  可以看出,本实验是在实验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”

 

 

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

  或者:

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

 操作步骤如下:

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

  上图中,Part 项目,原先默认是芯片型号,可以选择开发板型号。但是为了更具一般性,感觉还是芯片型号比较好。点击“Finish”就创建了一个manage IP 的工程。在项目文件夹下,多出了一个managed_ip_project 文件夹。

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

 该文件架内部文件结构如下图所示:

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

但是,这个工程只是一个用户自行设计IP 核的管理工程,是一个空工程,需要用户自行添加想要设计的IP 核。

 

(2)在管理工程中创建用户自己的IP核

   在Tool 菜单中,选择“Create and Package IP...”

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

  上图只是一个说明,只能点击“Next”按钮。该说明提到了向导能够干两个事情,第一个是将用户已经设计好的Module 封装成一个IP 核,第二个是创建一个AXI4 接口的IP 核框架,用户再修改完善该框架的功能。建议按照第二个路子来。

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

  根据上面的说明,这里选择创建一个新的AXI4 的外设IP。

 

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

  配置该IP 的名称,并且选择该IP 的保存路径。默认的IP 核存放路径与manage IP 的工程路径是一个层次。

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

 这里采用默认的文件层次管理结构。

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

  开始配置IP 核的AXI 从机接口,由于本模块只准备设计一个AXI 从机接口,因此其名称改为S_AXI,将默认名称中接口的标识号00 去掉。

  支持的接口类型有三类,分别是Lite,Full,Stream。这里选择Lite。

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

 

  这三类接口的差别很有必要仔细研究一下,这是个问题。

  接口类型是从机,可供选择的还有Master(主机),这里根据需求设计为从机Sl**e。

  AXI4-Lite 总线位宽仅能支持32bits。

  向导支持的外设寄存器深度最小为4,最大为512。对本实验的应用,其实1个寄存器就够了,这里选择最小的4。

  本实验采用的配置结果如下图所示,就改了个名字。

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

  【注意】这里一定要选择“Edit IP”,否则,软件只是生成了框架文件,而不会创建一个关于IP 核的工程,这样对于IP 核的进一步设计很不利,虽然可以人为创建一个工程将相应的文件加入,但是这个需要更强的经验。所以强烈建议这一步选择“Edit IP”。

  点击“Finish”完成向导配置,如果选择的是Edit IP,系统会自动切换到为IP和创建的工程edit_AzIP_GPIO_LED_v1_0。

 

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

  如果不选择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 工程启动后显示如下:

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

(3)修改用户自定义IP 核的逻辑功能

  点开顶层文件AzIP_GPIO_LED_V1.0,显示如下:

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

可以看到生成的IP 核模板其实是两个v 文件。

双击后可以打开相应的v 文件,可以看到。

Zynq构建SoC系统深度学习笔记-02-在现有SoC系统中添加用户自定义的外设IP(1)

【未完待续】