当前位置: 首页 > news >正文

Vivado时序报告之CDC详解大全

目录

一、前言

二、Report CDC

2.1 Report CDC

2.2 配置界面

2.3 CDC报告

2.3.1 General Information

2.3.2 Summary

2.3.3 CDC Details

2.4 Waiver    

2.4.1 设置Waiver

2.4.2 报告查看

2.4.3 去除Waiver设置

三、工程设计

四、参考资料

一、前言

    前面已经针对Vivado时序Timing报告相关的如Minimum pulse width,datasheet等进行了详解,本文再对其中的Report CDC使用进行解说。

二、Report CDC

2.1 Report CDC

    CDC(Clock Domain Crossings)中文含义为跨时钟域,也即时序路径的launch clock和capture clock为不同的时钟,可以报告潜在的不安全的跨时钟域路径(如可能导致亚稳态或数据一致性问题)。在生成CDC报告前,必须确保设计约束合理,无缺失的时钟约束,Report CDC只会分析和报告源时钟和目的时钟被约束了的路径。

2.2 配置界面

    通过菜单栏“Reports->Timing->Report CDC”进入到Report CDC界面

配置界面如下图

相关配置项的含义如下

Results name(报告名称):为CDC报告设置一个名称,将在Vivado的结果窗口显示

Clocks(时钟):设置要进行跨时钟分析的时钟

a)From(起点): 指定分析的发起时钟,双击后面的选择图标(三个点)可以进入到发起时钟的设置窗口

 b)To:指定分析的捕获时钟,双击后面的选择图标(三个点)可以进入到捕获时钟的设置窗口,同发起时钟类似

Report from Cells(报告单元): 限制CDC报告中分析包含指定单元cells的时序路径。

File Output(文件输出):将CDC报告结果以txt文件导出到指定路径下,默认是Overwrite,即覆盖已存在的报告文件,如果选择Append则是将新的报告结果追加到已有内容的后面

Options(选项):

  a)Suspend message limits during command:勾选则表示忽略Messages数量限制。

  b)Ignore command errors (quiet mode):  勾选表示当执行Report CDC命令时忽略错误。

Apply Waivers(使用Waivers): 该设置为默认配置,当生成CDC报告时,会将所有Waivers用于设计中,也可以使用Create Waiver命令将Waivers添加到设计中。

Report only waived paths:   执行CDC报告时仅有CDC路径中创建了Waiver的路径  

Ignore waivers(忽略Waivers): 分析所有的CDC路径时忽略设计中所有定义的Waivers。

Open in a new tab: 执行时序报告后是否在一个新的标签中打开,如果没有勾选,新的报告结果将会覆盖旧的结果

Open in Timing Analysis layout:  执行完CDC分析后是否打开布局窗口(Device窗口) 

2.3 CDC报告

CDC报告内容由General Information,Summary,CDC Detail三个部分组成

2.3.1 General Information

General Information中包含了报告类型,设计名称,器件,Vivado版本,报告运行时间,以及生成CDC报告的命令。

2.3.2 Summary

Summary分Clock pair,Type,waived三个方向来展示CDC报告

1) clock pair

Clock pair是根据时序对来分析跨时钟域路径。详细内容表格如下图

Severity:对CDC路径的风险等级分类,有Critical和Warning和Info三个级别

Source Clock:源时钟

Destination Clock:目的时钟

CDC Type:CDC类型,No common primary clock表示无共同的主时钟,Safely Timed表示有共同的主时钟,如生成时钟与主时钟的关系

Exceptions:显示源时钟与目的时钟间是否存在时序例外约束,Exceptions对应的值含义如下图

Endpoints:源时钟与目的时钟的路径上终点的数目

2) By type

Summary(by type)展示的报告如下图

Severity:跨时钟域影响大小,分为Info(信息级), Warning(告警级), Critical(严重级)

ID:不同的ID代表不同的类型,如CDC-1表示1比特跨时钟域,CDC-4表示多比特跨时钟域,CDC-10表示在同步器前检测到组合逻辑。

Count:对应CDC ID的跨时钟域数量

Description:对CDC类型含义进行说明

常见的CDC类型见下图,CDC1-3为单比特场景,CDC4-6为多比特场景,CDC7-9为异步复位,CDC10为组合逻辑等

默认情况下,Report CDC仅报告每个终点和时钟对的单个违例,当一个终点存在多个违例时,优先报告优先级更高的CDC,不同CDC的优先级如下图,从上往下优先级依次降低。

2.3.3 CDC Details

CDC Details报告了设计中所有的跨时钟域路径,按照时钟对来展示

Severity/ID/Description:解释同上

Depth:同步器的数量

Exception: CDC路径上的时序例外约束,如下图设置了false path

Source/Destination:源时钟和目标单元

Category:CDC路径的安全性分类,分为安全safe,不安全unsafe,未知Unknown,No Async_Reg等

2.4 Waiver    

    在前面的小节中提到了Waiver相关的设置项,Waiver不仅针对CDC路径有效,对设计规则检查DRC,检查违例的方法也有效。如果路径被设置了Waiver,在report_cdc,report_drc, or report_methodology结果中不会被分析   

在未对路径设置Waiver时,CDC报告中Summary(by waived endpoints) 中内容为空

2.4.1 设置Waiver

    在设置Waiver前可以先查看CDC路径的方案图Schematic,进入CDC Details中

选中路径后可以通过Schemaic或快捷键F4进入方案图中,看出clk_group2和clk_group1的关系

设置Waiver同样在选中路径后的右键菜单中进行

进入Create Waiver,user为用户名,Description为创建的waiver设置说明

设置完后该路径自动置灰

点击rerun后,该路径将不会存在CDC Details中,将出现在Summary(by waiver)中

Create Waiver也支持同时对多条CDC设置,只要在CDC Details中同时选中多条路径即可

tcl command preview中同时显示了两条create_waiver命令

Summary(by waived endpoints)中Waived endpoints为2。

2.4.2 报告查看

方法1:在tcl console中执行report_cdc -waiver可以查看设置的waiver详情

也可使用report_waiver命令

方法2:执行Report CDC时Waivers中勾选Report only waived paths

此时Summary或CDC Details中都只会报告设置了waivers的路径

方法3:tcl console中使用report_cdc -details -show_waiver,无论CDC是否设置Waiver都会被报告

2.4.3 去除Waiver设置

在设置了waiver后会发现菜单栏和工具栏都没有相关的取消Waiver的操作,此时须在tcl console使用命令delete_waivers [get_waivers -type cdc]可以移除所有设置的waiver

也可只移除指定CDC类型的Waiver,如移除类型为CDC-1中设置的Waiver

命令为:delete_waivers [get_waivers -filter {ID == CDC-1}]

三、工程设计

module all_timing(CLKIN1,CLKIN2,CLKINSEL,CLKFBIN,d1,rst,clk_group1,clk_group2,ff_group2_a,clk_false,clk_max,clk_multi,ff_false,ff_group,ff_group2,ff_pll,ff_max,ff_multi);
input CLKIN1,CLKIN2,CLKINSEL,CLKFBIN,d1,rst;
input clk_group1,clk_group2,clk_false,clk_max,clk_multi;
output reg ff_false,ff_group,ff_group2,ff_group2_a,ff_pll,ff_max,ff_multi;
reg ff1;
wire CLKOUT0;PLLE2_ADV #(.BANDWIDTH("OPTIMIZED"),  // OPTIMIZED, HIGH, LOW.CLKFBOUT_MULT(8),        // Multiply value for all CLKOUT, (2-64).CLKFBOUT_PHASE(0.0),     // Phase offset in degrees of CLKFB, (-360.000-360.000).// CLKIN_PERIOD: Input clock period in nS to ps resolution (i.e. 33.333 is 30 MHz)..CLKIN1_PERIOD(0.0),.CLKIN2_PERIOD(0.0),// CLKOUT0_DIVIDE - CLKOUT5_DIVIDE: Divide amount for CLKOUT (1-128).CLKOUT0_DIVIDE(1),.CLKOUT1_DIVIDE(2),.CLKOUT2_DIVIDE(4),.CLKOUT3_DIVIDE(5),.CLKOUT4_DIVIDE(1),.CLKOUT5_DIVIDE(1),// CLKOUT0_DUTY_CYCLE - CLKOUT5_DUTY_CYCLE: Duty cycle for CLKOUT outputs (0.001-0.999)..CLKOUT0_DUTY_CYCLE(0.4),.CLKOUT1_DUTY_CYCLE(0.5),.CLKOUT2_DUTY_CYCLE(0.5),.CLKOUT3_DUTY_CYCLE(0.5),.CLKOUT4_DUTY_CYCLE(0.5),.CLKOUT5_DUTY_CYCLE(0.5),// CLKOUT0_PHASE - CLKOUT5_PHASE: Phase offset for CLKOUT outputs (-360.000-360.000)..CLKOUT0_PHASE(0.0),.CLKOUT1_PHASE(0.0),.CLKOUT2_PHASE(0.0),.CLKOUT3_PHASE(0.0),.CLKOUT4_PHASE(0.0),.CLKOUT5_PHASE(0.0),.COMPENSATION("EXTERNAL"),   // ZHOLD, BUF_IN, EXTERNAL, INTERNAL.DIVCLK_DIVIDE(1),        // Master division value (1-56)// REF_JITTER: Reference input jitter in UI (0.000-0.999)..REF_JITTER1(0.0),.REF_JITTER2(0.0),.STARTUP_WAIT("FALSE")    // Delay DONE until PLL Locks, ("TRUE"/"FALSE"))PLLE2_ADV_inst (// Clock Outputs: 1-bit (each) output: User configurable clock outputs.CLKOUT0(CLKOUT0),   // 1-bit output: CLKOUT0.CLKOUT1(CLKOUT1),   // 1-bit output: CLKOUT1.CLKOUT2(CLKOUT2),   // 1-bit output: CLKOUT2// Feedback Clocks: 1-bit (each) output: Clock feedback ports.CLKFBOUT(CLKFBOUT), // 1-bit output: Feedback clock// Clock Inputs: 1-bit (each) input: Clock inputs.CLKIN1(CLKIN1),     // 1-bit input: Primary clock.CLKIN2(CLKIN2),     // 1-bit input: Secondary clock// Control Ports: 1-bit (each) input: PLL control ports.CLKINSEL(CLKINSEL), // 1-bit input: Clock select, High=CLKIN1 Low=CLKIN2.RST(rst),           // 1-bit input: Reset// Feedback Clocks: 1-bit (each) input: Clock feedback ports.CLKFBIN(CLKFBIN)    // 1-bit input: Feedback clock);// End of PLLE2_ADV_inst instantiationalways@(posedge CLKOUT0,negedge rst)if(!rst)beginff1<=1'b0;endelse beginff1<=d1;endalways@(posedge CLKIN1,negedge rst)if(!rst)ff_pll<=1'b0;else beginff_pll<=ff1;endalways@(posedge clk_group1,negedge rst)if(!rst)ff_group<=1'b0;else beginff_group<=d1;endalways@(posedge clk_group2,negedge rst)if(!rst)ff_group2<=1'b0;else beginff_group2<=ff_group;endalways@(posedge clk_group2)if(rst)ff_group2_a<=1'b0;else beginff_group2_a<=ff_group;endalways@(posedge clk_false,negedge rst)if(!rst)ff_false<=1'b0;else beginff_false<=ff_group2;endalways@(posedge clk_max,negedge rst)if(!rst)ff_max<=1'b0;else beginff_max<=ff_group2;endalways@(posedge clk_multi,negedge rst)if(!rst)ff_multi<=1'b0;else beginff_multi<=ff_group2;end
endmodule 

四、参考资料

《ug906-vivado-design-analysis-en-2023.2.pdf》

相关文章:

Vivado时序报告之CDC详解大全

目录 一、前言 二、Report CDC 2.1 Report CDC 2.2 配置界面 2.3 CDC报告 2.3.1 General Information 2.3.2 Summary 2.3.3 CDC Details 2.4 Waiver 2.4.1 设置Waiver 2.4.2 报告查看 2.4.3 去除Waiver设置 三、工程设计 四、参考资料 一、前言 前面已经针对…...

【研赛A题成品论文】24华为杯数学建模研赛A题成品论文+可运行代码丨免费分享

2024华为杯研究生数学建模竞赛A题精品成品论文已出&#xff01; A题 风电场有功功率优化分配 一、问题分析 A题是一道工程建模与优化类问题&#xff0c;其目的是根据题目所给的附件数据资料分析风机主轴及塔架疲劳损伤程度&#xff0c;以及建立优化模型求解最优有功功率分配…...

华为OD机试 - 小明的幸运数(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…...

嵌入式学习——进程间通信方式(3)—— 共享内存

一、基本概念 什么是共享内存&#xff0c;顾名思义&#xff0c;就是将共享一片内存空间&#xff0c;共享内存允许多个不同的进程访问同一片内存空间。他们对这个内存直接进行操作&#xff0c;不需要经过内核的处理&#xff0c;因此共享内存是IPC通信方式中效率最高的。那如何实…...

python开发讯飞星火

一、讯飞星火网址 星火认知大模型Web API文档 | 讯飞开放平台文档中心 二、pycharm安装 pip3 install --upgrade spark_ai_python...

自然语言处理(jieba库分词)

1、完全切分法、正向最大匹配算法、逆向最大匹配算法和双向最大匹配算法 一、实验内容 一个好的NLP系统一定要有完备的词典&#xff0c;用于判断算法分出的词是否是具有实际意义的词。自定义一个词典&#xff0c;比如dic ["项目", "研究", "目的&q…...

MYSQL-查看函数创建语句语法(五)

SHOW CREATE FUNCTION 语句 SHOW CREATE FUNCTION func_name此语句类似于 SHOW CREATE PROCEDURE 的方法&#xff0c;但用于存储过程。 mysql> show create function world.sum \G *************************** 1. row ***************************Function: sumsql_mode:…...

图解IRF

FW1 配置思路 ① 配置IRF优先级 确认设备的主次 ② 设置批量操作的接口方便后续操作 interface range name fw-irf interface GigabitEthernet1/0/2 to GigabitEthernet1/0/3 ③ 接口 showdown 关闭接口 ④ 创建的IRF 1/1 成员的对应的接口的是 GE1/0/2 GE/1/0/3 ⑤ 开放IRF对…...

关于Chrome浏览器F12调试,显示未连接到互联网的问题

情况说明 最近笔者更新下电脑的Chrome浏览器&#xff0c;在调试前端代码的时候&#xff0c;遇到下面一个情况&#xff1a; 发现打开调试面板后&#xff0c;页面上显示未连接到互联网&#xff0c;但实际电脑网络是没有问题的&#xff0c;关闭调试面板后&#xff0c;网页又能正…...

南沙csp-j/s一对一家教 解一本通题: 1937:【06NOIP普及组】数列

【题目描述】 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列&#xff0c;例如&#xff0c;当k3时&#xff0c;这个序列是&#xff1a; 1&#xff0c;3&#xff0c;4&#xff0c;9&#xff0c;10&#xff0c;12&#xff0c;13&a…...

【分布式微服务云原生】K8s(Kubernetes)基本概念和使用方法

Kubernetes简称K8S,是一个强大的开源容器编排平台&#xff0c;用于自动化部署、扩展和管理容器化应用程序。它最初由Google设计&#xff0c;并由Cloud Native Computing Foundation&#xff08;CNCF&#xff09;维护。以下是Kubernetes的一些基本概念和使用方法。 基本概念 集…...

引入Scrum激发研发体系活力

引言 在当今快速变化的技术环境中&#xff0c;IT企业面临着持续的市场压力和竞争&#xff0c;传统的瀑布式开发模式已经难以满足现代企业的需要。瀑布模型过于僵化&#xff0c;缺乏灵活性&#xff0c;导致项目经常延期&#xff0c;成本增加&#xff0c;最终可能无法达到预期效果…...

JAVA开源项目 技术交流分享平台 计算机毕业设计

本文项目编号 T 053 &#xff0c;文末自助获取源码 \color{red}{T053&#xff0c;文末自助获取源码} T053&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 新…...

Linux学习笔记之重点概念、实用技巧和常见问题解答。

Linux学习笔记的内容涵盖了从基础知识到高级应用的各个方面&#xff0c;包括重点概念、实用技巧和常见问题解答。以下是对这些内容的详细描述&#xff1a; 一、重点概念 1. Linux简介&#xff1a;Linux是一种自由和开放源代码的类UNIX操作系统&#xff0c;由林纳斯本纳第克特托…...

“数字武当”项目荣获2024年“数据要素×”大赛湖北分赛文化旅游赛道一等奖

9月26日&#xff0c;由国家数据局、湖北省人民政府指导的首届湖北省数据要素创新大会暨2024年“数据要素”大赛湖北分赛颁奖仪式在湖北武汉举行。由大势智慧联合武当山文化旅游发展集团有限公司参报的武当山“数字武当”项目&#xff0c;荣获文化旅游赛道一等奖。 据悉&#x…...

开箱即用的大模型应用跟踪与批量测试方案

背景介绍 最近抽空参加了一个讯飞的 RAG 比赛&#xff0c;耗时两周终于在最后一天冲上了榜首。 整体的框架是基于 RAG 能力有点弱弱的 Dify 实现。在比赛调优的过程中&#xff0c;经常需要批量提交几百个问题至 Dify 获取回答&#xff0c;并需要跟踪多轮调优的效果差异。借助…...

在MySQL中,要查询所有用户及其权限,您可以使用以下命令:

文章目录 1、查询所有用户1.1、登录数据库1.2、select user,host from mysql.user; 2、查看用户的权限 1、查询所有用户 1.1、登录数据库 [rootlocalhost ~]# docker exec -it spzx-mysql /bin/bash rootab66508d9441:/# mysql -uroot -p123456 mysql: [Warning] Using a pas…...

VMware下载安装教程

目录 一.下载二.安装 一.下载 官网地址&#xff1a;官网 下载的时候选择Workstation Player&#xff0c;这个是免费的&#xff0c;当然你也可以选择下载Workstation Pro。 二.安装 下载完成之后点击安装包按照需要安装即可。 安装之后启动&#xff0c;可以看到这个能够免费使…...

AI跟踪报道第58期-新加坡内哥谈技术-本周AI新闻: OpenAI动荡时刻和Meta从未如此动人

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

深入理解 Nuxt.js 中的 app:error:cleared 钩子

title: 深入理解 Nuxt.js 中的 app:error:cleared 钩子 date: 2024/9/28 updated: 2024/9/28 author: cmdragon excerpt: Nuxt.js 中的 app:error:cleared 钩子的用途及其实现方式。这个钩子为开发者提供了一种优雅的方式来处理错误清除后的状态恢复和用户反馈。 categor…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...