测试平台Vivado 2017.2
一、建立一个简单的AXI IP
最简单的封装IP莫过于使用Vivado的Tools菜单下(已有工程打开),Create And Package New IP子项建立:
Vivado提供了4中GUI形式封装IP的方式,分别是打包当前工程、打包一个BD文件、打包特定目录和创造一个自定义的AXI4外设,这4种在后续的操作没有多大区别,此处仅以最后一种作为一个例子。
这是配置AXI4 IP的名字、版本等信息,版本、显示名字和描述在后面可以修改,根据需要填写。
这个是AXI4 IP的配置界面,接口类型提供了Lite、Full和Stream三种可选,此处我添加4个Slave的Lite接口。
最后点击Finish就完成IP创建,由于我需要对代码进行修改,我选择Edit IP,除此之外还有Verify Peripheral IP using AXI VIP和Verify peripheral IP using JTAG interface是两种不同的验证手段, VIP其实就是Altera的Virtual JTAG,而后者是Vivado内带了一个叫Debug Bridge的IP,它可以实现AXI操作JTAG的功能,实现FPGA控制另一块FPGA通过JTAG口,还有一个叫JTAG to AXI master的IP正好反过来,是JTAG控制AXI。
二、如何控制IP端口可配置显示
在IP设计时,最为头疼的是如果我的IP共有40个对外的Port,而我并不需要40个对外的Port总是需要配置连线,我可能只需要20Port。通过配置Parameter可以使其他的20个Port不可见,Vivado提供了这种功能,它就是Enablement Expression功能,它有三个作用:
1.它可以启用或禁用一些端口或BUS
2.它可以启用或禁用自定义的parameter;
3.它可以计算自定义的parameter的值。
本文仅对端口/BUS的启用与禁用进行说明:
打开IP的编辑界面,切换到Ports and Interface选项卡:
可以看到EnablementDependency,如果没有,鼠标移动到Name那一行右键选择Enablement Dependency项,就可以出现。
我对S00_AXI进行编辑,判断条件为C_S00_AXIADDR_WIDTH为0时不显示该总线;双击S00_AXI,会出现S00_AXI总线的编辑界面:
需要将Interface presence项从Mandatory选中切换为Optional选中,在Interface presence下面编辑框填写$C_S00_AXI_ADDR_WIDTH != 0,这是tcl语法,变量引用需要在变量名前添加$符号,点击OK:
切换到Customization GUI选项卡预览效果,预览前需要将C_S00_AXI_ADDR_WIDTH(parameter)设置为可编辑,操作如下:
1.在Customization GUI下
右键C S00 AXI ADDR WIDTH选择Edit Parameter;
2.Editable对应的下拉框选择Yes,同时去掉Specify Range左边的Check Box的勾选,点击OK;
目光转到Preview界面,可以发现C S00 AXI ADDR WIDTH对应的文本编辑框不再处于灰色不可以编辑状态,修改值为0,然后点击其他的文本框使之设置值生效。
可以发现S00_AXI消失了,再对C S00 AXI ADDR WIDTH对应的编辑框设置一个新值:
发现S00_AXI又神奇的出现了,这就是总线的禁用,端口的禁用是类似的。
可能会有疑惑,端口不显示,那么端口会有默认值吗?答案是有的,总线默认值由总线定义时提供, Port默认值由上述Edit Port对话框内的Driver Value给定。