概述
Vivado工程在编译过程中产生很多临时文件,备份文件非常之大,本文粗略说明了Vivado工程目录结构,及版本管理建议文件,并对自定义IP和源码加密进行了简要说明。
Vivado2020.2目录结构与版本管理
Vivado工程完整目录结构
对于20.2版本,对工程管理进行了优化,官方增加了.gen目录用于存放ip、block等生成的中间文件,为最小化工程存储容量,仅需要保存project_name.xpr 和 project_name.srcs 目录即可,其他文件均可重新生成。
为工程保存tcl脚本方法
保险起见,建议生成tcl脚本以便工程破坏后重建,打开Vivado工程,点击Project-Write Project tcl,保存tcl到工程目录,并将src/sdk目录与tcl文件一同压缩备份。
工程复位方法
工程复位是官方提供的一个tcl脚本指令:reset_project,执行后会将工程编译生成的过程文件/最终文件全部清空,复位后备份文件很小,但还原时需要重新编译。
总结
所有版本:
- 均可保存tcl脚本,并需要连同备份src目录,否则还原报错,实际占用空间没有有效减少,
- 工程复位之后占用空间小,但使用时需要重新编译,建议可以对关键文件进行单独备份
- 全部工程备份占用磁盘空间,但还原起来很方便
2020.2版本:
- 仅需备份xpr工程文件和src目录即可
自定义IP及建议发布文件
3种方式:
- IP管理器创建IP(在具有AXI接口的IP建议使用该工具创建IP)
- IP管理器导入某个目录(导入源文件目录和工程目录不在同一位置,引用混乱,且无法仿真,不建议使用)
- 推荐:打包RTL工程
打包RTL工程流程
- 按正常流程创建Vivado工程,工程目录结构与普通工程相同
- 使用“工程打包”命令进行IP打包即可
- 发布IP(除sources_1和sim_1目录外,另在IP_name.srcs目录增加了xgui目录和component.xml文件需一并发布)
自定义IP使用注意
- 在使用了自定义IP的工程中,需要重构工程时,需保证用户IP资源中的SRC目录内相关文件完整可访问,否则编译会报告丢失文件
- 在使用了自定义IP的工程中,自定义IP目录结构与官方IP目录结构一致(2020.2)
IP加密
3种方式
- 推荐:IP源码加密
采用IEEE-1735加密源码的方式可实现知识产权保护,Vivado在2016以后的版本能够支持,但需要EncryptedWriter_v2的Lic,目前还未找到该lic,详情参考:UG1118 - edif网表
- DCP网表
DCP网表
目前网表加密仍是切实可行的加密手段,具体方法如下:
- 将需要生成DCP的模块设置为顶层,打开综合设置,在more option中填入:-mode out_of_context,表示综合模块不含IObuf
- 删除所有约束文件,我直接重建一个临时工程,不含任何约束,只有待加密代码,生成完删除即可
- 综合工程,完成后在:工程名.run\synth_1找到与顶层模块同名的DCP文件即可
- 为保证DCP被正常调用,其内部使用的IP需要设置为Global模式,并在综合完成后,打开综合设计,在tcl中输入:write_checkpoint -force d:/xx/xx.dcp
总结
- 不论用edif网表或者dcp网表文件均不支持定制参数,只能作为综合后的网表来进行调用,与ip使用方式差异太大,因此建议公司内部采用源码IP进行交流
- edif网表调用需要.v引用文件,且嵌套使用问题较多,不建议使用
- DCP网表文件不能够支持在IP中调用,否则调用该IP的工程将提示找不到DCP对应的源文件
- 自定义IP内部可调用官方IP再封装
- 自定义IP内部不可使用DCP网表
测试工程
为进行测试,采用IP方式设计了一个呼吸灯的例子,呼吸灯测试工程,工程信息如下:
- 软件版本:Vivado2020.2
- 硬件平台:PYNQ-Z1
- 功能:实现呼吸灯,并可通过ps写寄存器控制呼吸等频率
主要测试了:
- block design添加IP
- 自定义IP
- 自定义IP嵌套IP