在进行自定义 IP 后,将自定义 IP 添加到当前的工程时,出现如下报错:
[IP_Flow 19-167] Failed to deliver one or more file(s).
[IP_Flow 19-3505] IP Generation error: Failed to generate IP 'ChannelCalculation_0'. Failed to generate 'Synthesis' outputs:
[IP_Flow 19-98] Generate of the IP CORE failed.
Failed to generate IP 'ChannelCalculation_0'. Failed to generate 'Synthesis' outputs:
当看到这个报错时,我一脸懵逼,明明是按照正确的步骤顺序封装 IP 的,但是重复试了三四遍还是出现这个报错信息,经过询问朋友得到的回答是,在准备打包成 IP 的源文件工程最好事先综合一下,以确保RTL是无误的。
于是我便重新生成了新的源工程,并先综合了一下,没有问题边进行 IP 封装,和之前的操作是一致的,在最后封装完毕后,再将 IP 添加到 IP 库中,然后在工程中调用 IP 发现没有报错了,遂解决bug。
总结:
在进行自定义 IP 封装的操作前,为确保 RTL 正确,应该事先将工程综合一下,无误后在封装 IP 的最后一步前,先保存设置,并再进行一遍综合,这一步的目的同样是为了确保工程无误,尤其是再源文件工程中是调用了 Xilinx 官方的 IP 时,这一步最好再综合一次,因为官方的 IP 调用可能会导致工程出错。
自定义 IP 的创建顺序:
- 创建源工程;
- 对工程进行综合,确定无误;
- 将当前工程封装成 IP;
- 在封装 IP 的最后一步之前,再对工程进行综合一次;
- 完成 IP 的封装;
- 在工程中进行调用自定义的 IP。
另外在调用自定义 IP 时,也出现了一个小 bug,就是报错信息为调用官方 IP 的文件夹路径过长,因为路径最大只能到 260 bytes 左右,超过这个值可能就检索不到,导致自定义的 IP 核无法调用,解决办法也很简单,将创建的工程放到更短的路径,或者将源路径所设计的文件夹名称缩短,尽量使用缩写,这样能大大缩短路径的长度。