Vivado 中自定义IP的使用(IP packager)

本文介绍如何使用Vivado的IP Packager工具,将设计封装为IP,并解决了dcp文件不支持嵌套的问题。通过IP Packager,设计者可以轻松地将自定义模块与Xilinx提供的IP一同使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自http://blog.chinaaet.com/detail/37169

首先,要指出,本文不描述任何IP的功能与使用。


在开发一个大型FPGA项目时,多人协作是必不可少的。这个时候,如何提交设计给负责集成的人,是项目开发中最关键的问题之一。


常用的一个方法是,提交网表。网表的提交可以算是相当方便的操作了,这在ISE的时期还体会不到,但到了Vivado中,正如amazing icecream在博文http://blog.chinaaet.com/detail/37153中描述的,dcp的引入,让网表这一非常好用的功能发挥了其应有的作用。对于部分设计,直接使用dcp提交设计,已经足够。


但正如amazing icecream在博文http://blog.chinaaet.com/detail/37165中描述的,dcp不支持嵌套这一问题,成为Vivado在工程化管理中最严重的问题之一。比如,如果遇到如下的设计

设计中包含了两个IPxci。如果IP使用的OOC模式,则和dcp模块一样,都使用网表提交给顶层ADC_SPI。如果再将ADC_SPI模块打包成dcp,就会出现dcp文件的嵌套。调用ADC_SPI这个dcp网表时,会出现错误,无法读取其中的dcp模块的信息。


这就意味着,使用dcp的模块,只能是纯代码的模块,无法使用任何IP,哪怕是FIFOBRAM之类的简单IP。另外,dcp也无法多次提交,所有开发者只能提交一次dcp网表,而无法层级提交dcp网表。



所以,本文介绍一下IP Packager这个工具,来解决上述的工程问题。目前的IP Packager仍然不支持包含dcp网表,但是生成子dcp网表的工程也可以封装为IP,所以可以用IP的方法来层级嵌套。



IP Packager,用来将自己的设计打包,封装成IP。然后在IP Catalog中导入后就可以与Xilinx提供的IP一起使用。其操作相对简单,难度低,可操作性很强。该工具为Vivado独有,ISE似乎没有类似的工具可以使用。


如何使用呢?首先,准备一个设计,由于IP Packager在封装IP时并不会检查设计是否有问题,比如是否有源文件确实等,需要开发者自己确认设计是否完整。

然后在菜单栏中选择“Tool->Create and Package IP…”,如下图所示。




弹出如下界面,有兴趣可以自行阅读说明或参考相关文档,点击Next


在下一个界面中,选择第一项,然后点击Next。这里说明一下,第一项是将工程封装成IP,第二是将某个目录下的源文件封装成IP,第三项是封装AXI4的外设,有兴趣可以自行阅读说明文字或查询文档。




下一界面选择IP的路径,用于日后导入IP文件,同时选择仅包括xci文件还是包括所有IP已经生成的网表。这里选择“Include .xci files



最后一页点击Finish即可


设置完成之后,可以发现在Project Manager窗口下的Hierarchy标签中,会多一个IP-XACT,下面会有一个component.xml,其中保存着封装IP的信息。


Package IP的主界面里,列出了IP的定制化选项



在第一项中,可以设置IP的信息,其中Categories是导入后IP存放的位置,默认为BaseIP,及IP Catalog导入后,可以再BaseIP中找个该IP


需要注意的是第二项“IP Compatibility”,点开后如下图所示。



从图中可以看到,此IP在封装时是兼容Zynq系列的,但是不兼容其他系列,为了让其支持其他系列的FPGA,可以右键弹出菜单,点击“Add Family”。


在弹出的“Choose Family Support”中选择希望添加的FPGA


在最后一步“Review and Package”中,点击下方的edit packaging settings, 可以打开设置界面。


在蓝色框中,勾选“Create archive IP”即可生成zip压缩文件,用来保存IP信息,便于存档及使用。点击OK后回到Vivado主界面,然后点击Re-package IP即可刷新输出文件。

此时, IP封装的工作已经全部完成。

 

IP封装好以后,下一步就是如何调用该IP。首先打开IP Catalog。无论是单独建一个管理IP的工程,还是在Project Manager中点击IP Catalog,都可以。

进入IP Settings,界面如下图所示




在“Repository Manager”标签中,点击“Add Repository…,如上图蓝框所示。

添加好刚才进行IP封装的路径后,即可自动识别出IP



点击OK返回IP Catalog主界面,即可在IP Catalog中找到相关IP。注意,只有IP兼容FPGA芯片时,该IP才会显示在IP Catalog中。比如IP封装式选择的是V7,主工程是K7,则无法使用;但是IP封装中添加兼容K7后,主工程是K7时就可以在IP Catalog中找到该IP

 

IP Packager的问题是,代码无法加密,不具有类似dcp的不可读功能。

考虑到Vivado目前仍然比较新,不排除在今后的版本中添加IP Packager的加密功能和dcp的嵌套功能。

如有兴趣,赶快去定制自己的IP Core吧。

### 创建和配置Vivado自定义AXI IP核 #### 工具准备与环境搭建 为了创建并配置自定义AXI IP核,在启动Vivado之后,需建立一个新的项目或打开已有项目。确保所选板级支持包(BSP)适用于目标硬件平台。 #### AXI接口理解 深入理解AXI总线协议对于成功构建IP至关重要。AXI是一种高性能、高带宽、低延迟的互连架构,广泛应用于现代FPGA设计之中[^1]。熟悉其读写通道特性以及地址映射规则有助于更好地规划后续的设计工作。 #### 新建工程与添加文件 通过菜单栏依次点击`File -> New Project...`,按照向导提示完成新项目的初始化过程。当涉及到具体实现时,可以采用Verilog 或 VHDL作为描述语言来编写RTL代码,并将其加入到当前工程下[^2]。 #### 使用IP Integrator工具 利用内置的IP Integrator图形化界面简化复杂系统的集成操作。在此阶段主要任务包括但不限于: - 将所需标准组件拖拽至画布上; - 定义各模块间的连接关系; - 配置参数选项以满足特定应用场景需求; 一旦完成了上述布局设定,则可进一步执行综合、实现直至最终生成位流文件(Bitstream). #### 编辑现有IP核 针对已有的IP库成员进行调整优化同样重要。“Edit in IP Packager”的右键快捷方式允许开发者轻松进入打包模式,从而能够自由更改内部结构而不影响外部调用接口的一致性和兼容性[^4]. 修改完成后记得保存变更并更新关联版本号以便于管理和追踪历史记录. #### 添加自定义IP到Block Design 确认本地存储位置已被正确注册为有效查找路径的一部分后,即可顺利地将自制好的IP实例引入到顶层框架图(Block Design)当中参与整体联调测试环节[^3]. ```verilog // 示例 Verilog 代码片段展示简单寄存器读取逻辑 module axi_lite_reg ( input wire aclk, input wire aresetn, // ...其他信号声明... ); always @(posedge aclk or negedge aresetn) begin if (!aresetn) reg_data <= 0; else if (write_enable && write_address == REG_ADDR) reg_data <= write_data; end assign read_data = reg_data; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值