Vivado IP Package自定义总线Interface

在用Vivado制作自己的IP的时候,已经熟悉了将功能关联的一组port组合成一个interface,比如这个M_AXIS:

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第1张

这样可以简化框图设计中IP的显示,

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第2张

方便连线、优化框图设计布局。

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第3张

但一般的 *** 作中只能使用Vivado自带的interface。像上面这个IP中的HDMI接口,Vivado就没有集成合适的interface。分立的port会使得框图设计变的比较凌乱,尤其是像HDMI这样既有输入又有输出的接口。

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第4张

工程庞大的时候,再多加几个这样的接口,框图基本就没法看了……

我们期望的框图是这样:

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第5张

截止到2014.4,Vivado还没有加入自定义interface的界面。在遭受了长期的完美主义煎熬之后,终于打算着手解决一下这个问题了。

Vivado interface 的实现方式

首先Vivado这个interface是在这里定义的(Windows版为例):

Vivado安装文件夹dataipinterfaces

这里面有一系列文件夹,每个描述了一个interface。

随便打开一个iic_v1_0(其实不是我随便选的,因为这个比较简单),里面有两个XML文件。既然是XML就没什么可怕的了,先打开iic.xml看一下:

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第6张

似乎没什么东西,就是定义了这个interface的基本信息,比如名字、作者什么的。

然后看iic_rtl.xml,文件稍长一些,大致结构是这样的:

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第7张

前面依然是一些名字什么的定义,后面port的地方有干货了。

每个port是这样定义的:

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第8张

首先是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(名字随意)的文件夹。

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第9张

把I?C那两个XML拷进去,改个名。

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第10张

编辑my_hdmi.xml的相关部分(就是改名):

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第11张

编辑my_hdmi_rtl.xml的相关部分(还是改名):

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第12张

这里比较长就不一一粘代码了,举一个例子

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第13张

保存文件。

在IP中加入自定义interface

IP接口定义是在IP文件夹下的component.xml中。

这个文件应该是这样的:

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第14张

我们需要做的是在之间(如果没有的话自己加一个),添加一个busInterface,像这样:

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第15张

回到顶层Vivado工程中,IP设置的地方Refresh All一下。

Vivado IP Package自定义总线Interface,Vivado IP Package自定义总线Interface,第16张

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2556759.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-06
下一篇 2022-08-06

发表评论

登录后才能评论

评论列表(0条)

保存