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

目录

一、综合运行

二、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 模块

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

相关推荐

  1. vivado $clog2函数

    2024-03-29 17:22:02       39 阅读
  2. vivado】ILA使用

    2024-03-29 17:22:02       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-29 17:22:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-29 17:22:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-29 17:22:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-29 17:22:02       18 阅读

热门阅读

  1. SSL证书部署完成后仍然不安全是怎么回事?

    2024-03-29 17:22:02       17 阅读
  2. 浏览器中的HttpOnly是什么

    2024-03-29 17:22:02       16 阅读
  3. postcss安装和使用

    2024-03-29 17:22:02       18 阅读
  4. 用python调用VideoReTalking实现电影后期制作

    2024-03-29 17:22:02       15 阅读
  5. js和jquery的区别

    2024-03-29 17:22:02       15 阅读
  6. 挡住程序员去路的不是年龄

    2024-03-29 17:22:02       19 阅读
  7. 计算机网络中---基本概念

    2024-03-29 17:22:02       16 阅读
  8. golang 使用redis

    2024-03-29 17:22:02       18 阅读
  9. Golang基础-4

    2024-03-29 17:22:02       15 阅读
  10. 顺序表的查找

    2024-03-29 17:22:02       15 阅读