时序约束--多时钟

文章讨论了在数字设计中如何处理同步和异步时钟的约束。同步时钟如分频器产生的时钟,通过设置输入和输出延迟确保正确工作。异步时钟则需要避免跨时钟域路径的时序检查,以减少亚稳态。设计者需明确指定哪些路径不应被工具分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当设计存在多个时钟时,根据时钟的相位和频率关系,分为同步时钟和异步时钟,这两类要分别讨论其约束

1、同步时钟

考虑分频器产生的各个时钟,它们来源于同一个晶振,受主时钟调配。如下图所示,由3GHz的时钟进行9、6、4、3分频产生clka,clkc,clkd,clke。

为了约束我们设计的逻辑N,X和S,需要给出clkc的周期、逻辑N的外部延时,逻辑S的外部延时。

b178fcfe08b64f4a2a05b9814cc93a0a.png

对于逻辑N而言,由clka产生数据,clkc采样数据,在它们周期的最小公倍数内,最严格的时序是3ns产生数据,在4ns采样。只要保证最严格的情形下,电路正常工作,其他时候都没问题

4edcd1afca79485d61c7f672876c6800.png

当我们写时序约束时,只需要创建时钟,其中clka为虚拟时钟,然后set_input_delay通过-clock指定产生数据的时钟,给出clka产生的数据延时(触发器+组合逻辑)

e4dda0bb175842c8010c9a81d2376f9f.png

可见,写约束还是更简单,计算由时序分析工具处理。我们要提供产生数据的时钟和数据延时即可

对于输出数据,可以驱动多个单元。如下图所示,clkc的输出OUT1会经过组合逻辑被clkd和clke采样。设置约束,同样创建外部的虚拟时钟,然后set_output_delay,指定采样时钟和外部延时。另外,增加-add_delay选项避免被覆盖,表示让时序工具计算两条约束,选择更严格的进行分析

f2fd0ad3589565eb4b5d672af55e224c.png

在DC中,所有时钟都是同步的,即create_clock并不能创建异步时钟,异步电路静态时序分析不适合。

db18236446935cb83923d499a1fc7057.png

2、异步时钟

考虑不同时钟源的电路,由于每个时钟源独立工作,它们诸如延迟、转换时间等不一定一致,时钟之间的相位不固定,表现出异步电路。

aa5972d71c5f8faf7637961d35ce271a.png

异步电路要减少亚稳态产生,是设计者负责亚稳态处理,别指望工具帮助处理。我们需要在每个时钟域内约束路径,然后告诉工具不要检查跨时钟域路径。(否则工具会努力让该路径满足要求,导致浪费时间)

下图中,clka驱动的数据被clkb采样。很显然,两个不同时钟的触发器之间的路径都要告诉工具不要检查。

653a48596bba83621e5423fc2c7c6756.png

DC中,使用set_false_path告诉工具不要在指定的路径分析

d1529f47885a43a2a5296e4fea08e1e6.png

通过-from指定路径起点,可以是clock、port、pin和cell,clock作为起点,所有和该clock有关的路径都会被影响。通过-to指定路径终点,类似于from。

约束如下,使用-from clock能够简化,不用将路径一一列举。

763507a060334c9c43d0a748d431c195.png

<think>好的,我现在要回答用户关于SDC中时钟约束的set_clock_uncertainty和clock edges的问题。首先,我需要确认自己对这些概念的理解是否正确,然后结合提供的参考资料进行整理。 首先,用户提到了两个主要部分:set_clock_uncertainty和clock edges的概念及应用场景。根据引用[3],时钟定义是SDC的基础,所以理解这些命令很关键。 关于clock edges,我记得在定义时钟波形时,使用create_clock命令的-waveform参数需要指定边沿时间。例如,引用[2]中的create_clock命令格式提到了-waveform edge_list,这里的edge_list应该是指上升沿和下降沿的时间点。比如,一个周期为10ns的时钟,波形可能从0ns开始上升,5ns下降,再10ns上升,因此边沿列表是0 5。这说明clock edges是用来描述时钟信号翻转的时间点,这样工具才能正确计算时序路径。 接下来是set_clock_uncertainty。根据引用[1],set_clock_transition是用来设置时钟的过渡时间,而uncertainty应该和时钟的抖动、偏移有关。set_clock_uncertainty的作用是给时钟添加一个时间裕量,考虑实际中的不确定因素。比如,时钟到达不同寄存器的时间可能存在偏差(时钟偏斜),或者时钟本身有抖动,这些都需要在时序分析时预留一定的余量。应用场景可能包括建立时间和保持时间的检查,确保在最坏情况下电路仍能正常工作。 需要验证这些理解是否正确。引用[2]中create_clock的-waveform参数确实需要两个或更的边沿时间,所以clock edges用于定义波形。而set_clock_uncertainty的用法可能类似于在时序分析中设置一个保守的余量,防止因实际物理因素导致时序违规。 然后,考虑用户的问题,需要分别解释这两个概念的定义、参数以及应用场景。例如,clock edges在定义时钟时的具体用法,如何影响时序分析;set_clock_uncertainty如何影响建立和保持时间的计算,可能用在预布局阶段或不同分析模式(如min/max)下。 最后,生成相关的问题,比如时钟约束的其他命令、波形定义对分析的影响,以及uncertainty和transition的区别等。</think>### SDC时钟约束中`set_clock_uncertainty`与`clock edges`详解 #### 1. **`clock edges`的定义与用法** **概念** `clock edges`(时钟边沿)用于定义时钟信号的波形,通过指定上升沿和下降沿的时间点来描述时钟周期行为。在SDC中,通常通过`create_clock`命令的`-waveform`参数实现[^2]。 **语法与示例** ```tcl create_clock -name clk -period 10 -waveform {0 5} [get_ports clk] ``` - `-waveform`参数接收一个包含偶数个时间点的列表,格式为`{上升沿时间 下降沿时间 上升沿时间 ...}`。 - 上述示例表示:时钟周期为10ns,第一个上升沿在0ns,下降沿在5ns,下一个上升沿在10ns(即下一周期起点)。 **应用场景** - **非对称时钟波形**:若时钟高电平占3ns,低电平占7ns,则波形定义为`-waveform {0 3 10}`。 - **周期时钟定义**:复杂时钟(如分频时钟)需通过个边沿时间点描述其行为。 #### 2. **`set_clock_uncertainty`的含义与应用** **概念** `set_clock_uncertainty`用于设置时钟信号的时间不确定性,包括时钟抖动(jitter)、时钟偏斜(skew)等无法精确预测的时序偏差。它为时序分析提供安全裕量,确保设计在物理实现中可靠。 **语法与参数** ```tcl set_clock_uncertainty -setup 0.5 [get_clocks clk] set_clock_uncertainty -hold 0.3 [get_clocks clk] ``` - `-setup`:影响建立时间检查的裕量。 - `-hold`:影响保持时间检查的裕量。 - 若不指定`-setup/-hold`,默认同时作用于两者。 **应用场景** - **预布局阶段**:在早期设计阶段,时钟树尚未生成,需预留较大裕量(如1ns)补偿未知的时钟延迟差异[^3]。 - **模式分析**:在`-min`(最佳情况)和`-max`(最差情况)分析中设置不同不确定性值,覆盖工艺、电压、温度(PVT)变化的影响。 #### 3. **命令对比与关联** - **`set_clock_transition` vs `set_clock_uncertainty`** - `set_clock_transition`:定义时钟信号边沿的**过渡时间**(如上升/下降时间),影响单元延迟计算[^1]。 - `set_clock_uncertainty`:定义时钟信号的**时间容差**,直接影响建立/保持时间检查的严格性。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值