Vivado IP Package 自定义总线 Interface
目前新版本的 Vivado 已经有了 Create Interface 功能,这个文章已不适用。
背景
在用Vivado制作自己的IP的时候,已经熟悉了将功能关联的一组port组合成一个interface,比如这个M_AXIS:
这样可以简化框图设计中IP的显示,
方便连线、优化框图设计布局。
但一般的操作中只能使用Vivado自带的interface。像上面这个IP中的HDMI接口,Vivado就没有集成合适的interface。分立的port会使得框图设计变的比较凌乱,尤其是像HDMI这样既有输入又有输出的接口。
工程庞大的时候,再多加几个这样的接口,框图基本就没法看了……
我们期望的框图是这样:
截止到2014.4,Vivado还没有加入自定义interface的界面。在遭受了长期的完美主义煎熬之后,终于打算着手解决一下这个问题了。
Vivado interface 的实现方式
首先Vivado这个interface是在这里定义的(Windows版为例):
Vivado安装文件夹\data\ip\interfaces
这里面有一系列文件夹,每个描述了一个interface。
随便打开一个iic_v1_0
(其实不是我随便选的,因为这个比较简单),里面有两个XML文件。既然是XML就没什么可怕的了,先打开iic.xml
看一下:
<?xml version="1.0" encoding="UTF-8"?>
<spirit:busDefinition xmlns:xilinx="http://www.xilinx.com"
xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<spirit:vendor>xilinx.com</spirit:vendor>
<spirit:library>interface</spirit:library>
<spirit:name>iic</spirit:name>
<spirit:version>1.0</spirit:version>
<spirit:directConnection>false</spirit:directConnection>
<spirit:isAddressable>false</spirit:isAddressable>
<spirit:extends spirit:vendor="xilinx.com"
spirit:library="interface"
spirit:name="iic"
spirit:version="1.0"/>
<spirit:maxMasters>1024</spirit:maxMasters>
<spirit:maxSlaves>1024</spirit:maxSlaves>
<spirit:description>IIC Interface</spirit:description>
</spirit:busDefinition>
似乎没什么东西,就是定义了这个interface的基本信息,比如名字、作者什么的。
然后看iic_rtl.xml
,文件稍长一些,大致结构是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<spirit:abstractionDefinition xmlns:xilinx="http://www.xilinx.com"
xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<spirit:vendor>xilinx.com</spirit:vendor>
<spirit:library>interface</spirit:library>
<spirit:name>iic_rtl</spirit:name></