静态时序分析简明教程(六)]时钟组与其他时钟特性

一、写在前面

一个数字芯片工程师核心竞争力是什么?不同的工程师可能给出不同的答复,有些人可能提到硬件描述语言,有些人可能会提到对于特定算法和协议的理解,有些人或许会提到对于软硬件的结合划分,作者想说,这些说法,其实对也不对,硬件描述语言,翻来覆去无非是always和assign这几个语句的反复使用,而一些基础的协议算法深究起来其实也并不复杂,于作者而言,在常规的技能以外,有两项额外的技能颇为重要,其中之一便为sdc/STA的分析能力,它的重要之处在于作为桥梁建立了前端和后端的连接,虽然对于DE工程师而言,初版交付的sdc往往不甚准确,也没有办法通过这份sdc生成一份无误的timing report,但sdc的内容体现却是完完整整的将时序约束从行为级的描述映射到了gate level这样一个真实的电路层次上面。
写此专栏,一为学习记录,二为交流分享,以犒粉丝读者。

1.1 快速导航链接·

静态时序分析简明教程(一)绪论
静态时序分析简明教程(二)基础知识:建立保持时间,违例修复,时序分析路径
静态时序分析简明教程(三)备战秋招,如何看懂一个陌生的timing report
静态时序分析简明教程(四)时钟常约束
静态时序分析简明教程(五)生成时钟
静态时序分析简明教程(六)时钟组与其他时钟特性
静态时序分析简明教程(七)端口延迟
静态时序分析简明教程(八)虚假路径
静态时序分析简明教程(九)多周期路径
静态时序分析简明教程(十)组合电路路径
静态时序分析简明教程(十一)模式分析与约束管理
静态时序分析简明教程(十二)浅议tcl语言

二、时钟组

2.1 引入时钟组

对于同步电路而言,正确的建立时间和保持时间的检测,就可以确保捕获可靠的数据,但是对于异步时钟而言,我们没有办法确定几个时钟之间的相位关系,因此没有办法使用常规的STA分析方法,对于这样的时序路径,我们需要让时序工具加以忽略,时钟组的引入,给予设计人员这样的机会。

2.2 set_clock_group

对于set_clock_group而言,它的BNF(巴斯科范式)表达式如下

set_clock_groups [-name group_name]
				 [-group clock_list]
				 [-logically_exclusive]
				 [-physically_exclusive]
				 [-asynchronous]
				 [-allow_paths]
				 [-comment comment_string]

我们也将进一步的进行解释

2.2.1 -name

提供时钟组唯一的名称,与时钟常规约束类似,详情可见静态时序分析简明教程(四)时钟常归约束中的3.3节内容,通过-name的形式设定名称。

2.2.2 -group clock_list

-group可以将设定好的单个时钟信号分入各组,案例如下

create_clock -period 10 -name C1 [get_ports A]
#创建一个时钟C1
create_clock -period 13 -name C2 [get_ports B]
#创建一个时钟C2
set_clock_groups -name CLK_GRP -group C1 -group C2
#通过-group的形式把他们放到一个时钟组,时钟组命名为CLK_GRP
2.2.3 -logically_exclusive|-physically_exclusive|-asynchronous

接下来的这三个命令要放到一块进行讨论,原因是这三个命令是互斥的,在命名时钟组的时候只能挑其中一个使用,虽然使用他们的任意一个都代表时钟组内的时序路径不用考虑,但是他们还是有细微的差别如下

-logically_exclusive-physically_exclusive-asynchronous
设计中共存多个时钟,并且电路仅选择一个设计中不能共存多个时钟设计中共存多个时钟,却没有相位关系

有关于-asynchronous的使用最为频繁,对于异步电路而言,我们频繁的需要使用这个指令来拒绝STA工具分析CDC的路径问题

2.2.4 -allow_path

在工艺进入深亚微米后,由于串扰的影响,建立时间和保持时间的检查也会受串扰的影响而产生变动,当用户希望执行串扰分析时,可以使用-allow_path这个选项,这个选项仅可以和–asynchronous一块,代表执行串扰分析而不禁用时钟之间的时序电路路径。
这种串扰的分析确实也不归设计人员管,所以略过这里即可

2.2.5 -comment

参见静态时序分析简明教程(四)时钟常约束中3.6的内容,使用-comment的尾缀增加时钟注释。

三、其他时钟特性

3.1 过渡时间

理想的时钟边沿,从0到1和从1到0,时间为均0,但是实际上的clk,从0到1和从1到0会在一个有限的时间内完成,我们使用过渡时间来描述信号从一个状态转变为另一个状态时间,当然什么样的摆幅算0,什么样的摆幅算1,其实是由设计人员决定的,我们可以在30%到70%的区间上定义过渡时间。
在这里插入图片描述
时钟的过渡时间使用set_clock_transition来描述,该指令的BNF为

set_clock_transition [-rise]
					 [-fall]
					 [-max]
					 [-min]
					 clock_list
					 transition_time

需要注意的是,该指令仅用于预布局阶段,在时钟树生成之后,该指令不应再用于时序分析
该指令的案例如下:

#设置C1的上升沿过渡时间
set_clock_transition -rise 0.2 [get_clocks C1]


#设置C2的下降沿最大和最小的过渡时间
set_clock_transition -fall -min 0.2 [get_clocks C2]
set_clock_transition -fall -max 0.4 [get_clocks C2]


#设计所有时间的过渡时间
set_clock_transition 0.3 [all_clocks]

3.2 偏移与抖动

抖动:由于晶振本身稳定性,电源以及温度变化等原因造成了时钟频率的变化,指的是时钟周期的变化
偏斜:同样的时钟产生的多个子时钟信号,他们之间存在的延时差异。是时钟相位上的不确定
抖动和偏斜,都会影响建立时间和保持时间检查的要求,为了应对这种不确定性,我们可以使用set_clock_uncertainty去进行偏移与抖动的约束,它的BNF表达式如下所示

set_clock_uncertainty [-from|rise_from |-fall_from from_clock]
					  [-to|-rise_to|-fall_to to_clock]
					  [-setup]
					  [-hold]
					  [-rise]
					  [-fall]
					  [object_list]
					  Uncertainty_value

我们可以通过上面的语句,分别设置上升沿/下降沿的不确定度,亦或是设置建立时间/保持时间的不确定度,同样可以设置某两个点之间的不确定度,比如

# 从C1到C2的建立时间和保持时间的不确定度
set_clock_uncertainty -from C1 -to C2 -setup 0.5
set_clock_uncertainty -from C1 -to C2 -hold 0.5

而通常情况下,作为SDC交付的第一版,在同步电路中,DE人员也可以简略的将不确定度设置为

set_clock_uncertainty 0.5 [get_clocks CLK]

3.3 时钟延迟

时钟延迟主要是指,源时钟(通常为PLL)和时钟触发的设备之间的延迟,它有两个来源,分别是源延迟和网络延迟,一个形象的图片描述如下
在这里插入图片描述
我们可以通过set_clock_latency来建模网络延迟,不需要建模源延迟的原因是它的延迟与时钟树相关,要在布局布线后才能得到,该指令的BNF为

set_clock_latency [-rise]
				  [-fall]
				  [-min]
				  [-max]
				  [-source]
				  [-late]
				  [-early]
				  [-clock clock_list]
				  delay
				  object_list

通过-rise/fall来指定上升沿和下降沿的延迟,通过-min和-max指定最小延迟和最大延迟,通过-source指定设置延迟的源组件,通过-late/-early来设置最长路径延迟和最短路径延迟

四、总结

第二章中,我们讨论了一个复杂的电路设计不可能只存在一个时钟域,面对不可避免地多时钟域问题,我们采用时钟组的方式来描述不同时钟之间的关系。
而在第三章中,我们使用SDC命令去约束和描述那些非理想的时钟特性,如过渡时间、偏移、抖动、延迟等。
虽然说在布局布线完成后,他们的数值或者形态会发生改变,但这些约束依旧值得学习,因为他们在整个芯片设计的前面阶段为我们提供了重要的参考

  • 10
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 静态时序分析是一种用于验证电子系统设计的方法,主要用于确定系统中各个组件之间的时序关系和时钟限制。在静态时序分析中,虚拟时钟和I/O延迟约束是两个重要的概念。 虚拟时钟是一种用于描述系统中各个时钟域之间的关系的概念。在一个设计中,可能存在多个时钟域,每个时钟域都有自己的时钟信号。这些时钟域之间可能存在数据传输和通信,而虚拟时钟可以用于描述这些时钟域之间的数据传输时序关系。通过定义虚拟时钟之间的约束,可以确保数据在不同的时钟域之间正确传输,保证整个系统的正常运行。 I/O延迟约束是指输入输出接口的传输延迟需要满足的要求。在一个电子系统中,各种输入输出接口可能会存在不同的延迟。这些延迟会对系统的总体性能产生影响。静态时序分析可以帮助我们确定每个I/O接口的传输延迟,并通过设置延迟约束来保证系统能够在规定的时间内完成数据的传输以及响应。 综上所述,静态时序分析中的虚拟时钟和I/O延迟约束是为了确保电子系统的正常运行和性能优化而引入的概念。虚拟时钟用于描述不同时钟域之间的数据传输时序关系,而I/O延迟约束则用于确保输入输出接口传输延迟能够满足系统的要求。通过静态时序分析,可以提前发现潜在的时序问题,并进行相应的优化和调整,从而提高电子系统的可靠性和性能。 ### 回答2: 静态时序分析是一种用于验证电路设计中时序性能的方法,其中包括虚拟时钟和I/O延迟约束两个关键概念。 虚拟时钟是一种用于解决时序约束和时序分析问题的技术。在电路设计中,各个逻辑电路的时钟信号可能存在频率不一致、相位偏移等问题,需要将这些不同的时钟信号转化为一个相对统一的虚拟时钟进行分析。通过将不同的时钟信号都映射到虚拟时钟上,可以简化时序分析的复杂度,使得设计人员能够更好地评估电路的性能。虚拟时钟在设计过程中的应用也能够帮助设计人员优化时序性能,提高电路运行的稳定性。 I/O延迟约束是指在电路设计中对输入和输出端口的延迟进行限制,以确保系统能够满足时序要求。在实际应用中,电路的输入输出时序要求非常重要,尤其是对处理高频信号的系统来说。通过设置I/O延迟约束,可以确保系统在特定时间内响应输入信号,并在规定的时间内输出正确的结果。设计人员可以根据I/O延迟约束的要求进行时序分析,确定逻辑电路的运行速度,以便满足系统的时序需求。 综上所述,虚拟时钟和I/O延迟约束是静态时序分析中的关键概念。通过使用虚拟时钟将不同的时钟信号统一到一个时钟源上,可以简化时序分析的复杂度。而通过设置I/O延迟约束,可以确保电路在输入输出过程中满足时序要求。这些方法对于电路设计的时序性能和稳定性非常重要,能够提高产品的质量和可靠性。 ### 回答3: 静态时序分析是一种用来分析数字电路的时序行为的方法。在静态时序分析过程中,虚拟时钟和I/O延时约束是两个重要的概念。 虚拟时钟是一种用来描述数字电路中各个部件之间时钟延迟关系的概念。在数字电路中,时钟信号用来同步各个部件的操作,虚拟时钟可以根据时钟延迟来推导出各个部件之间的相对时间关系。通过虚拟时钟,可以检查电路在不同时钟周期下的性能以及时序约束是否能够被满足。例如,在设计中,我们可以设置最大的时钟延迟,而根据虚拟时钟分析,若某些部件所需的时钟延迟超过了这个设定的最大值,就意味着设计不满足时序约束。 I/O延时约束是指在数字电路中,与外部设备之间的输入输出时序关系。在实际应用中,数字电路通常需要与外部设备进行数据通信,而这些设备通常有自己的时钟速度限制,因此需要根据外部设备的时钟信号来对输入输出操作进行时序约束。例如,在设计中,如果某个输入信号需要在外部设备的时钟上升沿到达之前到达,就需要设置相应的I/O延时约束。静态时序分析可以通过分析虚拟时钟和I/O延时约束,来评估电路的性能和稳定性。 综上所述,虚拟时钟和I/O延时约束是静态时序分析中的两个重要概念。虚拟时钟可以用来描述数字电路中各个部件之间的时钟延迟关系,而I/O延时约束用来限制数字电路与外部设备之间的输入输出时序关系。通过对虚拟时钟和I/O延时约束的分析,可以评估电路在不同时钟周期下的性能和稳定性,并满足时序约束的要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张江打工人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值