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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/496642.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java常见限流用法介绍和实现

目录 一、现象 二、工具 ​​​​​​1、AtomicInteger,AtomicLong 原子类操作 ​​​​​​2、RedisLua ​​​​​​3、Google Guava的RateLimiter 1) 使用 2) Demo 3) 优化demo 4、阿里开源的Sentinel 三、算法 1、计数限流 &…

Java实现猜数字游戏:编程入门之旅

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

HDFS的Shell操作及客户端配置方法

HDFS进程启停命令 Hadoop HDFS组件内置了HDFS集群的一键启停脚本。 $HADOOP_HOME/sbin/start-dfs.sh,一键启动HDFS集群$HADOOP_HOME/sbin/stop-dfs.sh,一键关闭HDFS集群 执行原理: 在执行此脚本的机器上,启动(关闭&…

二叉树|538.把二叉搜索树换为累加树

力扣题目链接 class Solution { private:int pre 0; // 记录前一个节点的数值void traversal(TreeNode* cur) { // 右中左遍历if (cur NULL) return;traversal(cur->right);cur->val pre;pre cur->val;traversal(cur->left);} public:TreeNode* convertBST(Tre…

阎淑萍:老母猪戴口罩还挺重视这张老脸啊,赵本山:我也相当副科级呀!

阎淑萍:老母猪戴口罩还挺重视这张老脸啊,赵本山:我也相当副科级呀! ——小品《老拜年》(上)的台词 《老拜年》 是赵本山、阎淑萍、王中青、苏杰在《1993年中央电视台春节联欢晚会》上表演的小品&#xff0…

web全栈架构师第16期教程

教程介绍 互联网时代已进入后半场,行业环境发生了显著变化。互联网人,尤其是技术人员,如何在加速更迭的技术浪潮中持续充电,提升自身价值,是当下必须面对的挑战。课程涉及了现下前端实际开发时所需要的各块内容&#…

发现数据异常波动怎么办?别慌,指标监控和归因分析来帮你

企业搭建完善、全面的指标体系是企业用数据指导业务经营决策的第一步。但是做完指标之后,对指标的监控,经常被大家忽视。当指标发生了异常波动(上升或下降),需要企业能够及时发现,并快速找到背后真实的原因…

Xcode删除原本的Git,再添加新的git

本文参考:Xcode怎么删除原本git,在重新设置新的git地址_ios xcode 删除原本git-CSDN博客 开发中会有一个问题。Xcode项目A 提交到Git服务器server1,此时项目A内部已经存在一个Git文件,与server1相关联。 此时你想将项目A提交到 另一个Git…

算法打卡day30|贪心算法篇04|Leetcode 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

算法题 Leetcode 860.柠檬水找零 题目链接:860.柠檬水找零 大佬视频讲解:柠檬水找零视频讲解 个人思路 5元最通用,然后是10元,所以如果是对于20元找零直接先找10元,也涉及到贪心的思想,可以用贪心算法。 解法 贪心法…

加密流量分类torch实践5:TrafficClassificationPandemonium项目更新3

加密流量分类torch实践5:TrafficClassificationPandemonium项目更新3 更新日志 代码已经推送开源至露露云的github,如果能帮助你,就给鼠鼠点一个star吧!!! 我的CSDN博客 我的Github Page博客 3/23日更新…

打造核心竞争力:高效Web系统数据中台的设计与实践_光点科技

在数字化的浪潮中,数据已经成为企业赖以生存和发展的核心资源。一个高效的Web系统数据中台,能够赋予企业在激烈的市场竞争中立于不败之地的能力。本文将深入探讨如何设计和实施一个能够提升企业数据管理水平和支持业务决策的高效数据中台架构。 数据中台…

基于Python实现多功能翻译助手(下)

为了将上述步骤中的功能增强与扩展具体化为代码,我们将实现翻译历史记录功能、翻译选项配置以及UI的改进。 翻译历史记录功能 import json # 假设有一个用于存储历史记录的json文件 HISTORY_FILE translation_history.json # 初始化历史记录列表 translati…

数组---

1、数组的定义 Java中,数组存储固定大小的同类型元素。 数组是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一的管理。 数组的特点: 数组本身是引用数据类型,但数组中的…

Spring使用(一)注解

Spring使用 资源 Spring 框架内部使用 Resource 接口作为所有资源的抽象和访问接口,在上一篇文章的示例代码中的配置文件是通过ClassPathResource 进行封装的,ClassPathResource 是 Resource 的一个特定类型的实现,代表的是位于 classpath …

vue3+Pinia的使用 - 封装

目录: persist.ts 可存储到本地 import { PersistedStateOptions } from "pinia-plugin-persistedstate";/*** description pinia 持久化参数配置* param {String} key 存储到持久化的 name* param {Array} paths 需要持久化的 state name* return per…

基于Transformer的医学图像分类研究

医学图像分类目前面临的挑战 医学图像分类需要研究人员同时具备医学图像分析和数字图像的知识背景。由于图像尺度、数据格式和数据类别分布的影响,现有的模型方法,如传统的机器学习的识别方法和基于深度卷积神经网络的方法,取得的识别准确度…

2024第六届环境科学与可再生能源国际会议能源 (ESRE 2024) 即将召开!

2024第六届环境科学与可再生能源国际会议 能源 (ESRE 2024) 即将举行 2024 年 6 月 28 日至 30 日在德国法兰克福举行。ESRE 2024 年 旨在为研究人员、从业人员和专业人士提供一个论坛 从工业界、学术界和政府到研究和 发展,环境科学领域的专…

Kubernetes 知识体系 系列一

多年前,大多数软件应用程序都是大型的单体,要么作为单个进程运行,要么作为少数服务器上的少量进程运行。这种过时的系统一直延续很久。 它们的发布周期较慢,更新相对较少。 在每个发布周期结束时,开发人员将整个系统…

算法第三十四天-有效数独

有效数独 题目要求 解题思路 一个简单的方法是,遍历9*9书读三次,以确保: 行中没有重复的数字列中没有重复的数字3*3子数独中没有重复的数字 但是,实际上,所有的一切都以可以在一次迭代中完成 可以使用box_index (r…

网约车APP小程序源码代驾顺风拼车货运司乘端安卓苹果源码可二开

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 一、详细介绍 系统是基于Thinkphpuniapp开发的,全开源未加密,这套源码可以拿回去自己做二开 后台用户端司机端 功能详情介绍: 车主实名认证,驾驶证认证,车…