在用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安装文件夹dataipinterfaces
这里面有一系列文件夹,每个描述了一个interface。
随便打开一个iic_v1_0(其实不是我随便选的,因为这个比较简单),里面有两个XML文件。既然是XML就没什么可怕的了,先打开iic.xml看一下:
似乎没什么东西,就是定义了这个interface的基本信息,比如名字、作者什么的。
然后看iic_rtl.xml,文件稍长一些,大致结构是这样的:
前面依然是一些名字什么的定义,后面port的地方有干货了。
每个port是这样定义的:
首先是port的名字和备注说明。
wire里面分成两部分:onMaster和onSlave。顾名思义是当interface被定义为master或slave的时候这个port的表现。
这里插一句,Vivado总是把master interface放在IP框图的右侧(输出),slave interface放在左侧(输入)。这个特性可以用来控制interface的位置。
里面的3个属性都很好理解。
presence可以是required或opTIonal。required表示这根线必须接,opTIonal表示这根线有时候是可以不接的(比如video接口里面的hblank什么的就是可选的)。
width是总线宽度。
direcTIon是端口方向。
至此一个interface的定义就完成了。
自定义一个HDMI interface
先打包(package)出一个需要集成HDMI接口的IP。
在IP所在文件夹下建一个叫interfaces(名字随意)的文件夹。
把I?C那两个XML拷进去,改个名。
编辑my_hdmi.xml的相关部分(就是改名):
编辑my_hdmi_rtl.xml的相关部分(还是改名):
这里比较长就不一一粘代码了,举一个例子
保存文件。
在IP中加入自定义interface
IP接口定义是在IP文件夹下的component.xml中。
这个文件应该是这样的:
我们需要做的是在之间(如果没有的话自己加一个),添加一个busInterface,像这样:
回到顶层Vivado工程中,IP设置的地方Refresh All一下。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)