4.3 加入一个用户IP
在FPGA中创建嵌入式系统的一个重要优点是能够包含用户IP,并把IP与处理器相连接。这部分指导将描述必要的步骤来包含用户IP核。
4.3.1 生成一个用户IP
在XPS中,
1) 选择Hardware → Create or Import Peripheral… 来打开创建和引入外设向导。
2) 点击Next。选择Create templates for a new peripheral。
默认情况下新的外设将被存在project_directory/pcores目录下。这能够使XPS在嵌入式系统设计时找到可用的核。
3) 单击Next。在Create Peripheral - Name and Version对话框中,输入my_ip作为外设的名字。见图 4.3.1。

图 4.3.1 创建自定义外设—外设名和版本号
4) 点击Next。在 Create Peripheral – Bus Interface 对话框中,选择PLB,这是新的外设将要连接的总线。
5) 点击Next。Create Peripheral – IPIF Services 对话框能够在几种service中选择。想了解关于每个service的更多情况,选择More Info。
接下来选择User logic S/W register项。

图 4.3.2 创建自定义外设—IPIF服务
6) 点击 Next。
7) 点击 Next。在Create Peripheral – User S/W Register 对话框中,更改Number of software accessible registers 为4。

图 4.3.3 Create Peripheral - User S/W Register
8) 点击Next。出现Create Peripheral – IP Interconnect (IPIC)。
9) 点击Next。在Create Peripheral – (OPTIONAL) Peripheral Simulation Support对话框中,能够产生总线功能模块Bus Functional Model (BFM) 仿真环境。BFM 仿真不在这次指导范围内。保持无效。
10) 点击Next。
11) 在Create Peripheral – (OPTIONAL) Peripheral Implementation Support 对话框, 让Generate ISE and XST project files to help you implement the peripheral using XST flow无效。
12) 点击Next 然后Finish。
4.3.2 用户IP样本目录
Create or Import Peripheral Wizard 产生一个新的名称为my_ip_v1_00_a的目录。新目录包含以下:

图 4.3.4 用户目录结构
以下是在每个目录下的文件的一些介绍:
- HDL 源文件
MB_tutorial\pcores\my_ip_v1_00_a\hdl
- vhdl/my_ip.vhd
这是外设顶层设计实体的样本文档。它设定和例示了你在向导中需要的相应的IPIF单元,并把它连接到用于配置用户逻辑的主体上。除了在某些特定标记的用来添加用户特定属性和端口的地方,一般是无需修改的。
- vhdl/user_logic.vhd
这是用户逻辑设计主体的实体样本文档,可支持VHDL或者Verilog语言。它用于配置实际的功能性。它提供一些示例代码用于展示。
- vhdl/my_ip.vhd
- XPS接口文件
MB_tutorial\pcores\ my_ip_v1_00_a\data
- my_ip_v2_1_0.mpd
该微处理器外设描述文档(Microprocessor Peripheral Description file)包含了外设接口的信息,因此其他EDK工具能够识别出外设。
- my_ip_v2_1_0.pao
该外设分析命令文档(Peripheral Analysis Order file)定义了所有用来编译你外设的HDL源文件的分析命令。
- my_ip_v2_1_0.mpd
- 驱动源文件
MB_tutorial\drivers\ my_ip_v1_00_a\src:
- my_ip.h
这是软件驱程头文件样本。它包含了外设中软件可寻址寄存器的地址偏移和一些常用的掩码,像简单的寄存器存取宏单元和功能声明。
- my_ip.c
这是软件驱程源文件,用来定义所有的适用驱动程序功能。
- my_ip_selftest.c
这是软件驱程自检文件样例,包含了用来检测外设各种硬件技术特点的样例代码。
- makefile
这是用来编译软件驱程的驱程脚本。
- my_ip.h
4.3.3 修改用户IP实现功能
现在样本已经产生了,user_logic.vhd 必须改成包含用户IP功能。
(1) 打开user_logic.vhd。 现在代码提供了一个能读写4个32位寄存器的样例。这次指导代码将不会被修改。
(2) 关闭user_logic.vhd。
(3) 为了让XPS能加载新的用户IP核到设计中去,pcores 目录必须被重新扫描。这能够通过选择Project → Rescan User Repositories完成。当工程打开时XPS也会自动扫描pcores 目录。
用Platform Studio 修改设计。
(4) 双击System Assembly View 中任意列出的IP能够修改该特定IP。
System Assembly View 有如下过滤器:
- 总线接口过滤器Bus Interface filter: 当总线接口激活的时候,在System Assembly View 左边的patch panel 被激活。当IP层被展开时,总线与核的连通性也被显示出来。
- 端口过滤器Ports filter: 当这个过滤器工作时,IP层被展开时端口连接也显示出来。要添加外部端口,你需要激活该过滤器。
- 地址过滤器Addresses filter: 当展开IP时IP地址能显示。这里你可以产生IP的地址。
IP Catalog 标签显示所有可用于EDK工程的IP。想添加新IP:
- 选择IP Catalog标签。
- 展开IP库层次。
- 拖曳IP到 System Assembly View 或者双击IP。

图 4.3.5 插入IP
(5) 当总线接口过滤器激活时,按下Connection Filter 按钮并选择所有。
展开my_ip_0实例。
高亮显示slave PLB连接(SPLB)
(6) 选择No Connection下拉菜单并改成my_plb。

图 4.3.6 修改总线连接
(7) 现在选择端口过滤器
点Connection Filter 按钮并选择所有
展开my_ip_0实例
高亮显示PLB_Clk端口
选择Default Connection下拉菜单 并把时钟连接改成sys_clk_s

图 4.3.7 修改端口连接
注意:在System Assembly View的名称栏右击能提供更多的过滤器选择。
(8) 选择地址过滤器来为一个新添的用户IP外设定义一个地址。地址能通过输入Base Address 或者工具来分配地址。在这次指导中,将用工具来分配地址。
将dlmb_cntlr和 ilmb_cntlr 的大小改成8K.
点击Generate Addresses。
当地址表产生成功时在控制窗口会有一个消息显示。设计现在将要用来配置了。

图 4.3.8 为用户IP分配地址


