目录
一、综合运行
二、OOC
2.1 如何设置 OOC 模块
2.2 存根文件和黑盒属性
2.3 使用限制
2.4 另一种设置方法
一、综合运行
一个“运行(run)”是指定义和配置设计在综合过程中的各方面,包括:使用到约束,针对的器件型号,综合策略,报告方式等,我们可以通过以下的方式来创建一个新的 run 。
通过点击上图中的“+”,我们得到了以下的界面:
我们在这样的界面中选择“综合”,得到下图的界面:
在这个界面中,我们可以对这个“run”进行命名,设置约束集、器件、运行策略等,如果希望该运行为激活状态,则选中Make Active。继续下去,我们会得到如下界面:
Launch directory选择启动运行的目录;Number of jobs设置了可以同时启动多少个运行(run);Generate scripts only表示仅生成运行脚本(Windows下为bat文件,Linux下为sh文件);Do not launch now只会保存先前的设置,暂时不会启动运行。
这样我们就完成了一个运行的创建,它会和我们创建的其他run一起展示在窗口中。
窗口中报告了相关的运行状态(not started、in progress、complete或out-of-date)。修改源文件、约束或工程设置都会导致状态变为out-of-date。
一个“综合”运行可以有多个“实现”运行。我们可以有若干个综合和实现运行,但是在同一时间,只能有一个为active状态。所有的报告显示的都是 active 运行的相关信息。比如Project Summary窗口中的编译、资源等总结信息都属于当前状态为active的运行。选择一个运行,右键->Make Active可以设置活跃状态。同样,Flow Navigator和Flow菜单中的Run Synthesis也是启动状态为Active的运行。如果需要启动其它运行,只能通过Design Runs窗口。
二、OOC
在 Vivado 设计流程中,使用“Out-of-Context (OOC)”流设置自底向上的设计方法是一个高效的策略,特别适用于大型项目或需要重用某些模块的场景。通过将特定的硬件描述语言(HDL)对象设置为独立的 OOC 模块,你可以单独综合和验证这些模块,从而优化整个设计流程的管理和执行效率。
OOC具有如下特点:
- 底层的OOC模块相对于顶层模块独立运行,并且拥有自己的约束集合;
- 运行了OOC模块之后,再运行顶层模块综合时可以直接调用OOC综合结果,而不需要重新运行一次综合(除非修改了RTL设计或约束)。
由于不需要每次综合时都运行整个设计,这项技术可以大大减少顶层模块的综合运行时间。IP核就是典型的采用OOC技术的代表,配置好IP核后可以选择综合模式为global(与顶层设计一起综合)或Out-of-context(作为独立模块综合),最好的做法就是选择后者,以减少整体设计的综合运行时间。
2.1 如何设置 OOC 模块
-
选择对象:在 Vivado IDE 的“源文件”(Sources)窗口中,找到你想要作为 OOC 模块运行的 HDL 对象。
-
设置为 OOC 模块:
- 右击该对象,并选择“设置为 Out-of-Context 模块”(Set as Out-of-Context Module)。
- 在弹出的“设置为 Out-of-Context 模块”对话框中,Clock Constraint File必须创建一个新的XDC文件或在下拉菜单中选择一个已经存在的XDC文件,该约束文件中要有该模块时钟信号的相关约束。点击OK后,该模块会出现在Design Runs窗口的Out-of-Context Module Runs目录中,还有Compile Order窗口的Block Sources目录中。
2.2 存根文件和黑盒属性
当运行了OOC综合后,会产生底层模块的综合网表和存根文件(stub文件)。存根文件仅描述了底层模块的输入和输出,在综合顶层模块时,通过存根文件来调用底层模块,模块内部当作黑盒子看待。运行实现时,Vivado会将OOC模块的综合网表插入到顶层网表中,从而完成设计。
- 存根文件:存根文件是一个简单的 HDL 文件,包含了模块的输入和输出声明,但不包含任何内部实现逻辑。这个文件作为一个“黑盒”(black-box),在顶层模块的综合时使用,允许综合工具了解如何连接到这个模块,而不需要模块的具体实现。
- 黑盒属性:存根文件展示了设置为黑盒属性的输入和输出。默认情况下,这个选项是选中的。如果你取消选择这个选项,那么你必须为运行创建自己的存根文件或组件声明。
该操作将较低层级的模块设置为顶层模块,并对该模块进行合成,同时不创建输入/输出缓冲(I/O buffers)。这种方法特别适用于模块化设计,允许设计者独立验证和优化设计的各个部分。
2.3 使用限制
- 含有IP的低层模块:如果较低层级的模块中包含IP(Intellectual Property,智能属性),则不应使用此流程。因为在 Out-of-Context(OOC)模块中处理IP可能会在后续的设计流程中导致错误。
- 有参数或用户定义类型端口的OOC模块:当OOC模块具有参数或其端口是用户定义的类型时,也不应使用此流程,这些情况同样可能导致后续流程中出现错误。
2.4 另一种设置方法
可以通过修改合成设置中的 -mode
选项为 out_of_context
来实现类似的效果。这个设置确保合成过程不会向该模块插入I/O缓冲,从而便于将模块作为黑盒处理。