时序约束之时钟约束详解

 
 
关注、星标公众号,直达精彩内容

来源:littbi

        在同步电路设计中,各功能逻辑单元之间的数据传输由一个同步信号控制,这个执行统一指挥的信号就是时钟信号,因此需要在设计之初创建时钟,基于该时钟频率进行优化设计,使设计性能达到时序收敛的目的。

        创建时钟

        时钟信号为一个周期性信号,定义时钟需要包括以下主要信息:

        (1)时钟源点

        时钟源点可以根据情况定义为设计中一个端口,一个网络,也可以是一个逻辑单元的PIN脚。为端口时用[get_ports  端口名],为网络时用[get_nets  网络名],为PIN脚时用[get_pins  引脚名]。

        (2)时钟周期

        时钟周期定义为时钟的震荡周期,为时钟频率的倒数。时钟周期是时序分析中最基本的、最小的时间单元。用{-period  period_value}表示

        (3)时钟占空比

        时钟占空比主要定义时钟高低电平在一个时钟周期内的分布情况。用-[waveform edge_list]表示

        通过使用SDC命令creat_clock来创建时钟,比如通过该命令定义一个从CLK端口输出并且时钟周期为10、占空比为50%的时钟信号,命令如下。

        creat_clock  -period  10  -waveform { 0  5 }  [ get_ports  clk ]

93ff12bf0a1574e3df0ae2bd3019d878.png

        如上图所示,该命令可以对所有内部触发器到触发器类型的路径进行约束。

        (4)命名时钟

        每个时钟定义都会给时钟信号命名。用 -name选项可以指定一个字符串作为时钟名称。当-name选项没有明确指定字符串并且时钟已被声明时,工具将指定自己的名字给时钟信号命名。时钟信号一旦被定义并且命名,所有其他依赖于此时钟信号的SDC指令只需要提到时钟信号的名称,而不用提供其他任何特征。当提到时钟信号名字的时候,时钟信号的所有特征就都知道了。时钟名称提供了更加简单的方法来统称时钟信号的所有特征。

        下面以定义一个占空比不是50%的时钟为例。

     creat_clock  -name  BDYCLK  -period  15  -waveform  {5  12}  [get_ports  CLK]

        时钟信号波形如下图所示。 

f8e231430d5a23986dd56ea47f6e2053.png

        (4)时钟转换延时

        时钟转换延时定义时钟在高低电平状态下切换所需要的延时。

        通过SDC命令set_clock_transition来定义时钟转换延时信息,示例命令如下:

        set_clock_transition  -rise  0.1  [get_clocks  clk]

        set_clock_transition  -fall  0.12  [get_clocks  clk]

        以上命令定义名为clk的时钟信号上升转换延时为0.1ns,下降转换延时为0.12ns。

06ea9698fbe405623a223f553be98c87.png

        (5)时钟不确定性

        由于实际时钟本身与理想时钟有一定的误差,所以通过时钟不确定来涵盖这些实际的导致误差的因素,比如时钟抖动、时钟偏斜等因素。

        由于芯片内部各个触发器的位置不同,导致每个触发器到时钟源点的距离不相同,所以时钟源点的时钟信号到达每个触发器的时间与理想情况的时间有误差。如下图所示,假设路径P1的时间为0.5ns,路径P2的时间为1ns,路径P3的时间为1.2ns,路径P4的时间为1.3ns。那么,时钟不确定性的延时为0.8ns。

7ea8af530ede3d972e7c300d90a26082.png

        通过使用SDC命令set_clock_uncertainty来定义时钟不确定性信息,示例如下:

        set_clock_uncertainty  -setup  0.2  [get_clocks  clk]

        set_clock_uncertainty  -hold  0.05  [get_clocks  clk]

        以上命令定义名为CLK时钟信号的不确定性为:建立时间为0.2ns,保持时间为0.05ns。其结果如下图所示。

93a2fe7934a0506fab8a6b674c3dce02.png

        设计中可能存在由不同的时钟信号驱动的时序路径,如下图所示。

c533f7673a246101d3842ed17938f9e3.png

        不同时钟域之间也可以定义时钟不确定性,示例命令如下:

        set_clock_uncertainty  -from  CLK1  -to  CLK2  -hold  0.05

        set_clock_uncertainty  -from  CLK2  -to  CLK1  -hold  0.05

        set_clock_uncertainty  -from  CLK1  -to  CLK2  -setup  0.1

        set_clock_uncertainty  -from  CLK2  -to  CLK1  -setup  0.1

       以上命令定义名为CLK1和CLK2时钟之间的不确定性为:建立时间为0.1ns,保持时间为0.05ns。

        (6)时钟延迟

        时钟信号从时钟源输出端到达时序单元时钟输入端是需要传播时间的。时钟延迟由时钟源点到达时钟定义的端口的延时(source latency)和时钟定义的端口到时序单元时钟输入端的延时(network latency)两部分组成,如下图所示。

875557e01997f248b0c0777cfee44a0c.png

        通过使用SDC命令set_clock_latency来定义时钟延迟信息,示例命令如下:

        set_clock_latency  1.8  -rise  [all_clocks]

        set_clock_latency  2.1  -fall  [all_clocks]

        以上命令定义了时钟网络延迟:上升延迟为1.8ns,下降延迟为2.1ns。

        set_clock_latency  0.851  -source  -min  [get_clocks  CLK]

        set_clock_latency  1.322  -source  -max  [get_clocks  CLK]

        以上命令定义了时钟源信号到达时钟CLLK输出端的延时,最大延迟为1.322ns,最小延迟为0.851ns。

        时钟网络延迟与时钟源延迟的一个明显区别是,时钟网络延迟是时钟树生成前的设置。当实际时钟树生成后,时钟网络延迟的设置将会通过命令set_propagated_clock被时钟树的实际结果替代,而时钟源延迟会一直存在,即使使用实际的时钟树传播延时信息。

‧  END  

  • 3
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
set_clock_uncertainty是一个设置时钟不确定性的命令,它用于定义时钟的不确定性范围。在引用中,set_clock_uncertainty -setup 0.2 [get_clocks CLK_CONFIG]表示设置CLK_CONFIG时钟的建立时间不确定性为0.2,而set_clock_uncertainty -hold 0.05 [get_clocks CLK_CONFIG ]表示设置CLK_CONFIG时钟的保持时间不确定性为0.05。 set_clock_latency是一个设置时钟延迟的命令,它用于定义时钟信号的传输延迟。在引用中,set_clock_latency 0.8 [get_clocks CLK_CONFIG]表示设置CLK_CONFIG时钟的传输延迟为0.8,而set_clock_latency 1.9 -source [get_clocks SYS_CLK]表示设置SYS_CLK时钟的传输延迟为1.9。此外,set_clock_latency 0.851 -source -min [get_clocks CFG_CLK]和set_clock_latency 1.322 -source -max [get_clocks CFG_CLK]分别表示设置CFG_CLK时钟的最小和最大传输延迟为0.851和1.322。 set_clock_uncertainty和set_clock_latency都是在时钟设计和时序分析中使用的命令。set_clock_uncertainty用于考虑时钟不确定性,以确保电路在时序要求下正常工作。而set_clock_latency用于考虑时钟延迟,以确保时钟信号在各个时序路径中被正确地传输。两者都对于时钟和时序的稳定性和可靠性至关重要。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [数字电路静态时序分析基础三](https://blog.csdn.net/weixin_45799954/article/details/114948996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值