时序约束进阶六:Set_Clock_Groups详解

目录

一、前言

二、时钟间关系

2.1 时钟关系分类

2.2 时钟关系查看

三、set_clock_groups设置

3.1 使用格式

3.2 优先级

3.3 约束设置示例

3.4 约束效果查看

四、Exclusive差异说明

4.1 Asynchronous

4.2 Logically_exclusive与Physically_exclusive

4.3  logically_exclusive和physically_exclusive等价场景

五、参考资料


一、前言

     Vivado的时序分析工具默认会分析设计中所有时钟间相关的时序路径,如果对于一些时钟间的路径不需要分析,则可以使用set_clock_groups约束实现。

二、时钟间关系

2.1 时钟关系分类

    两个时钟的关系可以是同步时钟,异步时钟,非扩展时钟。

    同步时钟:  两个时钟的相位关系是可预知的,常见的是两个时钟来源于相同的根时钟或者共同的周期,如生成时钟和主时钟。

    异步时钟:当两个是时钟的相位关系不可预知时,则为异步时钟,例如来源两个晶振的时钟,通过不同的输入端口进入到FPGA内部,无法知道两者的相位关系

    非扩展时钟:当两个时钟在1000个周期内仍无无法找到共同的边沿,在这种情况下,最差的setup关系在超过1000个周期上,但是时序分析工具将无法确认这是最差的情况。典型的例子是两个奇数倍分频的时钟,如clk0和clk1都是由MMCMs产生的生成时钟,周期分别为5.125ns和6.666ns。它们的上升沿在1000个周期内不存在重合。时序分析工具有一个0.01ns的setup路径裕量,尽管两个时钟有已知的相位关系,但它们的波形使得无法进行正确的时序分析。和异步时钟类似,slack值可以按常规方法计算,但计算出的值不一定正确。因此,非扩展时钟通常作为异步时钟。

set_clock_groups使用较多的场景即是对两个为异步时钟关系的时钟进行约束。

2.2 时钟关系查看

时钟Vivado中Report Clock Interaction可以查看时钟间的关系。

read-normal-img

 

    下图颜色方块中,横坐标表示目的时钟,纵坐标表示源时钟,黑色No path表示不存在时序路径,蓝色User ignored Paths为用户设置了不分析的约束,红色Timed(Unsafe)表示异步时钟或非扩展的时钟,颜色块下方的列表也显示了时序的详细信息。

read-normal-img

 

三、set_clock_groups设置

3.1 使用格式

在Timing Constraints窗口中,Clocks列下选择Set Clock Groups,进入Set Clock Groups界面

 

Group name:设置时钟组的名称

Group 1: 添加属于Group 1中的时钟,点击最右侧的“+”可以设置多个组

The specified clocks are: 设置时钟组里的时钟与其他时钟的关系,可为asynchronous,logically exclusive,physically exclusive。

-asynchronous:约束为异步时钟组

-logically_exclusive:约束为逻辑互斥的时钟组

-physically_exclusive:约束为物理线路互斥的时钟组,设计中不能同时存在,最终表现的效果和-logically_exclusive是相同的。

Command:显示对应约束设置的tcl命令

约束命令示例:

set_clock_groups -name clk_group -asynchronous -group [get_clocks {create_clk1 gen_clk_2}]

3.2 优先级

异步时钟和非扩展时钟是没法正确地进行时序分析,它们之间的时序路径在分析时应该使用set_clock_groups进行忽略。相比于其他时序例外的命令,set_clock_groups的优先级最高,如果需要对异步时钟进行分析,则不能对该时钟使用set_clock_groups命令。

3.3 约束设置示例

以设计中存在4个时钟clk1,clk2,clk3,clk4为例,时钟之间均存在可分析的时序路径。对时钟进行不同的时钟组约束,约束后的分析结果如下,Y表示进行时序分析,N表示不进行时序分析,参数使用asynchronous。

a)场景1:单个时钟组clk_group单个时钟clk1

set_clock_groups -name clk_group -asynchronous -group [get_clocks clk1]

clk1只和clk1进行时序分析,不与其他时钟进行分析,其他时钟间依旧进行分析

 

b)场景2:单个时钟组clk_group多个时钟clk1,clk2

set_clock_groups -name clk_group -asynchronous -group [get_clocks {clk1 clk2}]

时钟组clk_group内部的时钟间clk1,clk2间会进行时序分析,和外部的时钟clk3,clk4不会进行时序分析

 

c)场景3:两个时钟组,每个时钟组都只有单个时钟

set_clock_groups -name clk_group -asynchronous -group [get_clocks clk1] -group [get_clocks clk2]

设置多个-group时,groups之间的时钟如clk1和clk2不会进行时序分析

 

d)场景4:多个时钟组,多个时钟

set_clock_groups -name clk_group -asynchronous -group [get_clocks {clk1 clk2}] -group [get_clocks {clk3 clk4}]

设置多个group时,group内部的时钟间会进行时序分析,如第一个-group内的clk1与clk2,第二个-group内的clk3与clk4,group间不会进行时序分析,如clk1和clk3

 

总结:set_clock_group中group内部的时钟只能组内间进行分析,不能跨组或与非约束中的时钟进行时序分析

3.4 约束效果查看

设置了约束后,同样在Clock Interaction中可以查看到约束是否生效,如clk1与clkin1,clkin1和clkin2设置了约束,下图中关系User Ignored Paths,图中蓝色块

 

另一个方式是查看时序报告中User Ignored Paths部分,如clk1和clkin1,在详细路径中Exception可以看到关系为Asynchronous clock Groups,说明设置了set_clock_groups约束

 

四、Exclusive差异说明

    ​Logically_exclusive和Physically_exclusive以及Asynchronous三个参数对于都能实现分析工具不会对设置的时钟组进行分析。

4.1 Asynchronous

    ​Asynchronous表示两个时钟无固定的相位关系,分析工具会进行时钟间的SI(信号完整性),使用场景如下

a) 在异步FIFO中

b) 普通异步路径

4.2 Logically_exclusive与Physically_exclusive

Logically_exclusive是两个时钟物理线路上可同时使用,但逻辑上不会同时存在,如两个时钟经过bufgmux输出。

Physically_exclusive是两个时钟在设计中不会同步存在, 如同一个时钟port定义了多个时钟,一个测试时钟,一个功能时钟,则两个时钟间不存在SI问题。

Logically_exclusive和Physically_exclusive看内容解释都有互斥不分析的含义,效果看都似乎一致,较难区分。

以下图为例,时钟CLK1和CLK2经过一个通过SEL控制的选择器传输到两个寄存器。默认情况,从信号完整性角度看,是会对CLK1和CLK2间的跨电容X4间的串扰进行检查。

 

对于这种情况如果准确的处理方式是使用Set_case_analysis约束,先将SEL设置为0进行分析,然后再设置为1进行分析,可以正确地处理所有串扰,但如果时钟较多时,这种方式不实用。为了能同时分析SEL为0和1的情况,使用set_clock_groups可以达到目的

set_clock_groups -logically_exclusive -group {CLK1} -group {CLK2}

使用Logically_exclusive后时序分析将会忽略CLK1和CLK2间的时序路径检查,效果和在CLK1和CLK2之间设置了set_false_path约束相同。但是,时序分析工具仍会计算CLK1和CLK2间的电容X4的串扰延时。如果两个时钟不会同时在net上出现,此时计算的结果将是过于悲观的。为了使结果更准确,可使用-physically_exclusive,此时将不会计算电容X4的串扰延时。

set_clock_groups -physically_exclusive -group {CLK1} -group {CLK2}

根据上图,虽然消除了电容X4带来的延时影响,但在选择器U1的输入CLK1和CLK2间的电容X1延时未考虑,最终的分析结果将会过于乐观。为了解决X1的影响,将在选择器U1的输出端定义CLK1和CLK2的生成时钟gCLK1和gCLK2,再对两个生成时钟gCLK1和gCLK2设置physically_exclusive关系,即可实现不会忽略CLK1和CLK2间X1电容的延时,忽略电容X4间的时延。

create_generated_clock -name gCLK1 -source [get_ports CLK1] -divide_by 1 -add -master_clock [get_clocks CLK1] [get_pins U1/z]
create_generated_clock -name gCLK2 -source [get_ports CLK2] -divide_by 1 -add -master_clock [get_clocks CLK2] [get_pins U1/z]
set_clock_groups -physically_exclusive -group {gCLK1} -group {gCLK2}

 

4.3  logically_exclusive和physically_exclusive等价场景

对于MMCM/PLL的两个生成时钟clkout0,clkout1,连接到BUFGMUX的两个输入端口时,默认情况下,虽然clkout0和clkout1来自相同的时钟源,并且不会同时存在,但Vivado时序分析工具仍会分析clkout0,clkout1间的时序。

此时使用set_clock_groups约束,-logically_exclusive或-physically_exclusive是等价的,对于ASIC芯片需要考虑信号完整性,但对于FPGA芯片则无需考虑。因此,对于FPGA中set_clock_groups使用中无需过于区分Asynchronous,Logically_exclusive和Physically_exclusive的区别,更多的是在ASIC芯片设计中需要考虑

set_clock_groups -name exclusive_group -physically_exclusive -group clkout0 -group clkout1

五、参考资料

《ug903-vivado-using-constraints-en-us-2022.2》

《PrimeTime user guide》

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧银行反欺诈大数据管控平台方案(一)

智慧银行反欺诈大数据管控平台建设方案的核心在于通过整合先进的大数据技术和深度学习算法,打造一个全面、智能且实时的反欺诈系统,以有效识别、预防和应对各类金融欺诈行为。该方案涵盖数据采集、存储、处理和分析的全流程,利用多元化的数据…

系统架构:MVVM

引言 MVVM 全称 Model-View-ViewModel,是在 MVP(Model-View-Presenter)架构模式基础上的进一步演进与优化。MVVM 与 MVP 的基本架构相似,但 MVVM 独特地引入了数据双向绑定机制。这一创新机制有效解决了 MVP 模式中 Model 与 Vie…

ARM CCA机密计算安全模型之硬件强制安全

安全之安全(security)博客目录导读 [要求 R0004] Arm 强烈建议所有 CCA 实现都使用硬件强制的安全(CCA HES)。本文件其余部分假设系统启用了 CCA HES。 CCA HES 是一个可信子系统的租户——一个 CCA HES 主机(Host),见下图所示。它将以下监控安全域服务从应用处理元件(P…

【电子通识】失效分析的流程和方法

在文章:【电子通识】失效分析的基本概念-CSDN博客 中我们讲到失效分析是是指产品失效后,根据失效的现象/模式,通过分析和验证,模拟重现失效的现象,找出失效的原因,挖掘出失效的机理的活动。 同时还讲到失效模式和失效机理,并且以LED和贴片电阻做为举例。 失效模式是失效…

Flutter:页面滚动

1、单一页面,没有列表没分页的,推荐使用:SingleChildScrollView() return Scaffold(backgroundColor: Color(0xffF6F6F6),body: SingleChildScrollView(child: _buildView()) );2、列表没分页,如购物车页,每个item之间…

facebook欧洲户开户条件有哪些又有何优势?

在当今数字营销时代,Facebook广告已成为企业推广产品和服务的重要渠道。而为了更好地利用这一平台,广告主们需要理解不同类型的Facebook广告账户。Facebook广告账户根据其属性可分为多种类型,包括个人广告账户、企业管理(BM&#…

WEB攻防-通用漏洞CSRFSSRF协议玩法内网探针漏洞利用

CSRF构造工具,也可以用bp构造 选中要保存的请求,点击Generate HTML,生成带有添加用户请求的html文件,然后将构造的html放在网站上,生成访问地址,诱导管理员点击链接,就会添加用户 start Recording之后就会…

C#面向对象之访问限制,类基础,继承

文章目录 1 访问限制1.1 简介 2 类基础讲解2.1 类定义2.2 构造函数2.2.1 构造函数2.2.2 静态构造函数2.2.3 初始化顺序2.2.4 对象初始化器 2.3 析构函数2.4 类的静态成员2.5 匿名对象2.5.1 定义2.5.2 匿名对象的创建 3 继承3.1 基类和派生类3.2 基类初始化3.3 Partial类3.3.1 定…

代码之丑第一期-缩进

各位小伙伴们,大家好!咱今天就算是正式开张了。实不相瞒,第一期的内容早已写好,但唯独这开篇方式,笔者想了好些时间,包括但不限于如下风格: 斗破苍穹式(已经三刷)&#…

JVM 性能调优 -- JVM常用调优工具【jps、jstack、jmap、jstats 命令】

前言: 前面我们分析怎么去预估系统资源,怎么去设置 JVM 参数以及怎么去看 GC 日志,本篇我们分享一些常用的 JVM 调优工具,我们在进行 JVM 调优的时候,通常需要借助一些工具来对系统的进行相关分析,从而确定…

linux上离线部署Mysql5.7.22

官网下载地址: https://downloads.mysql.com/archives/community/ Mysql安装步骤: 1.上传mysql安装包 上传 mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz 到服务器指定目录 2.解压缩 tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz 3.修改名称 mv mysq…

日志与线程池

这里写自定义目录标题 日志Log.hpp测试main.cpp结果 线程池线程池的种类ThreadPool.hpp测试 Task.hpp 和 main.cppTask.hppmain.cpp结果 线程池的单例模式实现方式SignalThreadPool.hpp测试main.cpp 线程安全与重入问题死锁死锁的四个必要条件 日志 日志需要包含的信息 • 时间…

1.1 数据结构的基本概念

1.1.1 基本概念和术语 一、数据、数据对象、数据元素和数据项的概念和关系 数据:是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。 数据是计算机程序加工的原料。 数据对象:是具有相同性质的数据元素的集合&…

泷羽sec学习打卡-shell命令5

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都 与本人无关,切莫逾越法律红线,否则后果自负 关于shell的那些事儿-shell5 字符串运算符逻辑运算符之布尔运算符实践是检验真理的唯一标准 字符串运算…

Elasticearch索引mapping写入、查看、修改

作者:京东物流 陈晓娟 一、ES Elasticsearch是一个流行的开源搜索引擎,它可以将大量数据快速存储和检索。Elasticsearch还提供了强大的实时分析和聚合查询功能,数据模式更加灵活。它不需要预先定义固定的数据结构,可以随时添加或修…

Mybatis Plus 增删改查方法(一、增)

先定义一个简单的测试表,执行脚本如下: create table user(id bigint primary key auto_increment,name varchar(255) not null,age int not null default 0 check (age > 0) ); 根据Spingbootmybatisplus的结构根据表自行构建结构,大致…

本地部署 WireGuard 无需公网 IP 实现异地组网

WireGuard 是一个高性能、极简且易于配置的开源虚拟组网协议。使用路由侠内网穿透使其相互通讯。 第一步,服务端(假设为公司电脑)和客户端(假设为公司外的电脑)安装部署 WireGuard 1,点此下载(…

unity中添加预制体及其基本设置

unity中添加预制体及其基本设置 Unity 中使用预制体的好处使用示例代码解释 Unity 中使用预制体的好处 1. 提高代码复用性 预制体可将一个游戏对象及其所有组件、子对象和设置存储在一个资源文件中,然后在项目中多次使用这个资源。这大大提高了代码的复用性&#x…

给定一个整数可能为正,0,负数,统计这个数据的位数.

题目描述 给定一个整数可能为正,0,负数,统计这个数据的位数. 例如1234567输出7位; -12345678输出8位;0输出1位 代码实现 int main() { long long m; long long n; scanf("%lld",&n); mn; int count0;//位数 do { count; n/10;//舍弃个位 }while(n!0); printf(&…

Linux:文件系统inode

早期,存储文件的设备是磁盘(当下的市场几乎都是SSD),但大家习惯的把它们都称为磁盘,磁盘是用来表示区分内存的存储设备。而在操作系统看来,这个存储设备的结构就是一个线性结构,这一点很重要。 …