【Vivado/FPGA】包含Fifo或者BRam等xci文件的IP封装注意

少女dtysky

世界Skill

时刻2015.04.12

Vivado提供了全新的设计模式,其中一项就是用户自己可以封装IP,然后在其他工程中方便地调用,用户可以自己设计IP界面等等,IP的文件结构我已经很清晰了,不过不会在这里写出,将会在之后的毕业论文中同步写出一个系列。此片博文主要记录了在封装IP中的一个问题,这个问题将会引起严重警告[filemgmt 20-1741]和[Synth 8-2488]。


1.问题描述

我封装的某些IP中使用到了官方IP库中的Fifo和BlockRam,在封装时包含了它们的xci文件,由于需求问题,我封装的IP形式如下:

Rows8x512和Rows1x512

这二者的区别在于它们内部实例化的Fifo的位宽,一个是8位,一个是1位,为了方便起见,我将两个IP内的Fifo都实例化为了“Fifo”这个名字,也就是说两个IP内包含的、依赖于xci文件的子IP拥有着相同的名字。
随后我在一个工程中同时实例化了这两个IP,综合后出现了以下警告:

[filemgmt 20-1741] File 'Fifo.vhd' is used by one or more modules, but with different contents, and may lead to unpredictable results:
Fifo (b:/Complex_Mind/Graduation_Project/ProjectBuilt/Gobang/Gobang.srcs/sources_1/bd/Gobang/ip/Gobang_Rows8x512_0_0/sources_1/ip/Fifo/synth/Fifo.vhd)
Fifo (b:/Complex_Mind/Graduation_Project/ProjectBuilt/Gobang/Gobang.srcs/sources_1/bd/Gobang/ip/Gobang_Rows8x512_1_0/sources_1/ip/Fifo/synth/Fifo.vhd)
* Fifo (b:/Complex_Mind/Graduation_Project/ProjectBuilt/Gobang/Gobang.srcs/sources_1/bd/Gobang/ip/Gobang_Rows1x512_0_0/ip/Fifo/synth/Fifo.vhd)
Please reset and regenerate these modules to resolve the differences, or synthesize them independently.

[Synth 8-2488] overwriting existing primary unit fifo ["b:/Complex_Mind/Graduation_Project/ProjectBuilt/Gobang/Gobang.srcs/sources_1/bd/Gobang/ip/Gobang_Rows1x512_0_0/ip/Fifo/synth/Fifo.vhd":59]

一开始并没有在意这种问题,但是实际测试的失败让我不得不回来查找问题的所在之处,在查看综合后的原理图之后我发现了以下问题:


很显然,Rows8x512中位宽为8的Fifo被覆盖了,覆盖成了位宽为1的Fifo,所以in_data直接被削减为了1位,这是由于两个IP钟Fifo子IP的名字是一致的,因为xci只会生成一个总的子IP文件,而不会为每个IP单独生成。


2.解决方案

解决方案就是改名,将不同的IP中依赖的子IP起上不同的名字就好,这样虽然改起来麻烦点,但却可以保证IP中只包含子IP的xci文件,这是十分轻量的做法,予以推荐,当然这种做法并不能保证百分百得完美,毕竟工程大了之后重名的可能性也会提高不少,但没有其他办法。

如果不是自己的创作,少女是会标识出来的,所以要告诉别人是少女写的哦。