Vivado使用(2)——综合运行与OOC

目录

一、综合运行

二、OOC

[2.1 如何设置 OOC 模块](#2.1 如何设置 OOC 模块)

[2.2 存根文件和黑盒属性](#2.2 存根文件和黑盒属性)

[2.3 使用限制](#2.3 使用限制)

[2.4 另一种设置方法](#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 模块

  1. 选择对象:在 Vivado IDE 的"源文件"(Sources)窗口中,找到你想要作为 OOC 模块运行的 HDL 对象。

  2. 设置为 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缓冲,从而便于将模块作为黑盒处理。

相关推荐
XiaoChaoZhiNeng13 小时前
基于Zynq SDIO WiFi移植二(支持2.4/5G)
5g·fpga·zynq·sdio
apple_ttt15 小时前
从零开始讲PCIe(6)——PCI-X概述
fpga开发·fpga·pcie
水饺编程16 小时前
【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,1-2
linux·嵌入式硬件·fpga开发
apple_ttt17 小时前
从零开始讲PCIe(5)——66MHZ的PCI总线与其限制
fpga开发·fpga·pcie
最好有梦想~19 小时前
FPGA时序分析和约束学习笔记(2、FPGA时序传输模型)
fpga开发
IM_DALLA20 小时前
【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL76
学习·fpga开发
诚实可靠小郎君95271 天前
FPGA IO延迟的约束与脚本
fpga开发·fpga·数字电路
日晨难再2 天前
AMBA:APB的历史(从APB1到APB5)
arm开发·arm·硬件工程·fpga·数字ic
GGGLF2 天前
FPGA-UART串口接收模块的理解
fpga开发
北京太速科技股份有限公司2 天前
太速科技-495-定制化仪器户外便携式手提触摸一体机
fpga开发