首页 > 其他分享 >set_false_path和set_clock_groups有什么区别? - 知乎

set_false_path和set_clock_groups有什么区别? - 知乎

时间:2022-11-14 23:00:29浏览次数:45  
标签:set false get CLKA clock clocks path 时钟

时钟之间的关系在静态时序分析(STA)中起着至关重要的作用。由于

1)时钟数量增多

2)不同的时钟产生电路

3)时钟域交互之间的交互

当前ASIC设计具有高度复杂的时钟方案。高效率的时钟关系约束才能产生高效率的STA。

一个设计中可以存在许多时钟。但是,并非所有时钟都相互交互。必须向STA分析工具声明这些时钟之间的关系,以防止分析这些时钟之间的路径。因为默认情况下,所有时钟域都是同步的。

对于异步时钟,当我们书写SDC时,可以使用set_false_path语句来指定由于异步时钟导致的timing exceptions。

set_false_path-from [get_clocks CLKA] -to [get_clocks CLKB]].

只能指定单方向路径的timing exceptions。如果需要指定双向的timing exceptions,则需要

set_false_path -from [get_clocks CLKA]-to [get_clocks CLKB]]

set_false_path -from [get_clocks CLKB]-to [get_clocks CLKA]]

现在有一种更有效的方法来指定设计中的异步时钟关系。 set_clock_groups是一种在Synthesis、P&R和STA工具中指定设计中时钟关系更加有效的方法。

set_clock_groups -asynchronous -group CLKA-group CLKB

此命令有三个选项。

-asynchronous,

-logical_exclusive

-physically_exclusive。

-asynchronous

两个(或多个)时钟是异步时,这意味着它们之间没有相位关系。

set_clock_groups –asynchronous –name my_ASYNC -group {CLKA CLKA_div2} -group {CLK_OSC}

工具不会分析CLKA 和CLK_OSC、CLKA_div2 和 CLK_OSC之间的时序,但是会分析他们之间的Crosstalk。

上述命令意为:

1. CLKA和CLKA_div2相互同步

2. CLKA&CLKA_div2和CLK_OSC相互异步

每个group里面的clocks相互同步,group之间的clocks相互异步

上述,命令等价为

set_false_path-from [get_clocks CLKA] -to [get_clocks CLK_OSC]

set_false_path -from [get_clocks CLKA_div2] -to [get_clocks CLK_OSC]

set_false_path-from [get_clocks CLK_OSC] -to [get_clocks CLKA]

set_false_path-from [get_clocks CLK_OSC] -to [get_clocks CLKA_div2]

-logical_exclusive

当设计中存在两个时钟,但它们之间没有任何路径时,可以说这两个时钟在逻辑上是互斥的( logically exclusive )。

例如下面的示例,通过一个MUX选择两个或多个时钟中的一个。这样的时钟之间将没有任何时序路径。

set_clock_groups – logically_exclusive –name my_MUXED -group {CLKA} -group {CLKB}

上述约束等价于:

#solution 1: set_case_analysis

# mode 1

set_case_analysis 1 [get_portsSEL]

# mode 2

set_case_analysis 0 [get_portsSEL]

#solution 2: use false path

set_false_path-from [get_clocks CLK1] -to [get_clocks CLK2]

set_false_path-from [get_clocks CLK2] -to [get_clocks CLK1]

工具会分析他们之间的Crosstalk

–physically_exclusive

如果时钟不在设计中同时存在。例如时钟在同一主端口上定义,但工作在两种不同的模式下。这些时钟之间将没有SI交互。

set_clock_groups –physically_exclusive -group {SYS_CLK} -group {TEST_CLK} # use physically exclusive

可以通过remove_clock_groups删除clock_groups声明

在大型设计中,可能有数百或数千个时钟。如果使用“set_fase_path”,则每个时钟对将需要2个约束,那么约束的语句将成倍增长!

使用“set_clock_groups”和“set_fase_path”在时序分析效果上一样,但是更干净,更易于维护。

标签:set,false,get,CLKA,clock,clocks,path,时钟
From: https://www.cnblogs.com/amxiang/p/16890855.html

相关文章

  • Spring--依赖注入:setter注入和构造器注入
    依赖注入:描述了在容器中建立Bean于Bean之间依赖关系的过程setter注入在本来已经在service里面引用了bean的相关方法的基础上,再引用之前已经写过的userDao的对象,即在servi......
  • 什么是Session;request.getSession().setAttribute()
    Session:会话控制,是服务器为了保存用户状态而创建的一个特殊的对象。=>用于存储信息的一个对象   当我们在服务端使用session时,首先要获取session,下面这个图就对服务......
  • Objective-C语法之NSSet和NSMutableSet
    NSSet和NSMutableSet是无序的,但是它保证数据的唯一性。当插入相同的数据时,不会有任何效果。从内部实现来说是hash表,所以可以常数时间内查找一个数据。 1、NSSet的使用[NS......
  • spring boot 微服务在进行数据库操作时总是报错Connections reset
    在前端对后台进行数据请求时,访问二,三次后台服务器就报Connectionreset必须重启后才能进行再次访问。最后发现在配置文件中添加如下:spring:r2dbc:pool:ma......
  • 关于memset函数的详解
    一般用于数值和结构体的初始化这里仅仅说明对数组的初始化函数原型void*memset(void*s,intch,unsignedn);作用将s所指向的某一块内存中的每个字节的内容全部......
  • Cython directive 'language_level' not set, using 2 for now (Py2)
    如果你期望编译的版本不是python2,那就指定自己要用哪个版本编译,或者在每个要编译的版本.py文件顶上添加一行指定cython版本,但如果有成千上成个.py或.pyx文件,就不好处......
  • 问:React的useState和setState到底是同步还是异步呢?
    先来思考一个老生常谈的问题,setState是同步还是异步?再深入思考一下,useState是同步还是异步呢?我们来写几个demo试验一下。先看useState同步和异步情况下,连续执行两......
  • Solution Set -「NOIP Simu.」20221113
    \(\mathscr{A}\sim\)游戏  Cover:「ARC087E」Prefix-freeGame.  Tags:「A.博弈-SG函数」「A.数据结构-Trie」  想了半天(\(\ge15~\text{min}\))怎么表述一......
  • 78. Subsets
    样例输入{1,8,5,4}输出[[],[1],[1,4],[1,4,5],[1,4,5,8],[1,4,8],[1,5],[1,5,8],[1,8],[4],[4,5],[4,5,8],[4,8],[5],[5,8],[8]]publi......
  • 73. Set Matrix Zeroes
    ivena m x n matrix,ifanelementis0,setitsentirerowandcolumnto0.Doitinplace.clicktoshowfollowup.//如果某个元素为0,则把该元素所在的行和......