ooc(out of context)是在Vivado当中非常常用的概念。在ug1118中关于ip_core OOC模式下的约束文件的描述中有两点:
- OOC约束的USED_IN属性应该同时设置synthesis,implementation,out_of_context而不是只设置out_of_context;(page16)
- OOC约束在编译的时候,处理顺序早于非OOC约束的文件,甚至早于PROCESSING_ORDER设置成EARLY的情况。(page16)
概述
这个方面最详细的内容在ug896的page36。Global和OOC本身是作为IP Package的generate output的生成选项存在的。
简单一句话来概括两者的关系就是:在OOC模式下,IP成为了一个完全的黑盒结构,它会以网表结构参与整个工程的综合;而在Global模式下,IP核与顶层逻辑一起进行综合,也被称为Global synthesis,对原始文件的任何更改需要对整个工程和该IP进行重新综合。(参见ug939(v2016.1) Page30)
OOC是默认的IP生成产物的生成方式,生成产物包括:XCI文件,dcp文件,changelog,行为仿真文件(<ip_name>_sim_netlist.v,应该是用来封装网表黑盒的文件,此时应该只使用单独语言种类的仿真器(没说是不是应该对应)page40)。
DCP文件在其中最为重要(但是不能是只有dcp文件,见ug896,page36),dcp文件是一个容器,其中包含了网表和约束文件(_ooc.file和_in_context.xdc)。
在BD当中的OOC
Block design可以看做是IP的可视化的集合,相当于一个大的IP。这个东西也支持OOC模式,并且支持三个选项(参见ug995,v2016.4,page33),分别是Global,Out-of-Context per IP以及Out-of-context per BD。