在FPGA设计中,我们几乎不可避免地会使用IP。Vivado提供了多样且丰富的IP,同时还允许用户将自己的RTL代码封装为IP以实现设计复用。实际上,Vivado体现的就是以IP为核心的设计理念,既有IP Catalog、IP Integrator(IPI),又有Package IP工具,如下图所示。
对于IP,Vivado提供了两种综合方式:Global综合方式和OOC综合方式,无论IP是在RTL代码中直接实例化还是以Block的形式在IPI中使用,如下图所示。两者的主要区别是:Global综合方式在每次对Vivado工程综合时都会对IP重新综合,不管IP的参数是否发生改变;而OOC方式下,只要IP配置没有发生改变,只需综合一次,后续再对Vivado工程综合时,都无需再对IP综合,这是因为OOC方式会生成独立的DCP文件,可供后续综合复用。显然,OOC综合可有效节省编译时间。这也是Xilinx建议的综合方式。
上述节省编译时间是针对单一的Vivado工程,如果同时进行多个Vivado工程的开发,这时就可以利用IP Cache节省编译时间。IP Cache节省编译时间的原理是:假定现有多个Vivado工程(至少2个),这些工程在开发过程中会使用一些相同的IP,而且这些IP的配置完全相同(用户给IP的命名即IP配置页面的Component Name可以不同)。这样,当工程A使用IP 1且采用OOC综合方式时,如果工程B也使用了IP 1,同时采用OOC综合方式,那么Vivado(对应工程B)就会自动从IP Cache中复制已有的OOC综合结果,从而节省编译时间,这也意味着工程B下的IP 1无需再次综合。那么,如何设定IP Cache呢?
首先,在工程模式下,一旦创建好工程,Vivado就会生成如何工程目录,如下图所示。这里我们就会发现有一个<project_name>.cache的目录(图中红色方框)。
接下来,我们在Vivado Settings界面找到IP,如下图所示,可以看到Cache scope和Cache Location。默认情况下Cache Scope的值为Local,Cache Location的值为上图中的<project_name>.cache对应的目录。实际上,Cache scope有3个可选值,分别为Disabled、Local和Remote。如果当前工程需要用到其他工程的OOC综合结果,就可以将Cache scope的值设定为Remote,同时修正Cache Location的位置(另一个Vivado工程的<project_name>.cache所在目录)。
一旦Vivado发现可以在IP Cache中找到完全相同的IP时,Vivado就会从这个IP Cache中将相应的DCP复制过去(会重新命名和当前IP的component name保持一致),同时会显示如下界面。
如果观察Design Run窗口,在Out-of-Context Module Runs下,可以看到Status列显示的状态为Using Cached IP results,如下图红色方框所示。这样,这个IP无需综合,只需从IP Cache复制即可。从时间角度来看,只有复制时间没有OOC综合时间。
在log文件中也会显示使用IP Cache的相关信息,如下图所示。从这个信息中我们可以看到Cache ID和Cache Size。需要注意的是如果使用的IP比较多,Cache会越来越大。
对于用户自己的RTL代码,如果要封装为IP以达到设计复用,Xilinx建议首先创建一个Vivado工程,然后再进行封装,采用Package Project模式。一旦成为IP,就可以使用IP Cache功能以节省编译时间。
综上所述,我们不难看到使用IP Cache的前提是同时有多个Vivado工程,不同Vivado工程之间使用了一些相同的IP。
没有回复内容