vivado综合选项——out of context per ip & Gloabal
在vivado中定制IP的时候,会有一个综合方式的选择,如上图
vivado默认是第二种
Out of context per IP是指让vivado在综合的时候对IP进行单独综合,生成.dcp文件,然后再工程要用到IP的时候,只需从.dcp文件中解析出对应IP的网表文件即可,而不需对IP进行重新综合,这样的方式可以加快综合的速度;
Gobal是每次工程综合的时候,IP核都会和工程一起综合,这样综合的时间就很长,而且Global选项不会产生.dcp文件,因为工程综合的时候是对IP核的源码进行综合的。
两种综合方式的flow如下所示:
OOC的优势:
通过综合实现某个模块的快速迭代,不用综合系统的其余部分,整个设计的迭代更快了;
利于系统其余部分的快速迭代,如果某部分确定稳定不变了,可以对这个模块进行OOC综合操作,保留这个综合版本,这样就可以方便迭代其余部分;
OOC将会产生”_sim_netlist.v” 或者 “_sim_netlist.vhdl”仿真文件,如果我们在使用只支持某种语言的仿真器,而IP不提供该语言的RTL文件,我们就可以直接用这些仿真文件进行IP仿真。
关于高阻态和OOC(out of context)综合方式
如果设计中存在三态(高阻态),OOC综合操作就会受到影响,FPGA仅支持I/O输出端口的高阻态,在器件内部是不允许的,如果你使用OOC综合方式,Vivado工具并不知道某个具体 的信号是连接I/O输出还是在器件内部进行连接,最后,综合工具会将这个高阻信号转换为某个逻辑值,而不是最为高阻态进行综合。
例如
assign a = b?c:1'bz
通过OOC方式综合后,a的值就不会是高阻值Z了, Vivado会选择不保留三态。
如果a信号只连接到外部输出I/O,希望能够使用OOC方式对这部分模块进行综合,同时保留三态。可以在RTL中实例化一个三态缓存(buffer)。
OBUF u1(.l(c), .T(n_enable), .O(a);