时序分析之Clock rise/fall edge边沿对选取解析

目录

一、前言

二、Clock edge的选取逻辑

2.1 设计工程

2.2 同频同相

2.3 同频不同相1

2.4 同频不同相2

2.5 倍频关系(Fclk1>Fclk2)

2.6 倍频关系(Fclk1)<>

2.7 倍频关系存在相移(Fclk1)<>

2.8 非倍频关系无相移(Fclk1)<>

2.9 非倍频关系有相移(Fclk1)<>

三、总结


一、前言

    在对时序报告进行详细查看时,将看到source clock path或destination clock path的第一段延时都是时钟的edge,并且同一段路径的setup和hold也是不一样的,如下图的红色框内容为setup的示例,关于它的值在时序分析中是如何确定的呢?下面将对此进行详细的解答。

 

二、Clock edge的选取逻辑

    首先,还是先看时序分析中setup、hold的定义。通常说setup、hold本质上是对同一个单元(时序单元,如触发器)上两个输入信号到达时间关系的检查,通常是检查数据信号/复位信号与时钟信号的到达先后关系。如果是数据信号与时钟信号,则是setup/hold分析,如果是复位信号与时钟信号,则是recovery/removal检查。

    在用户手册UG906中,setup是对两个时钟延时关系进行最悲观的边沿检查,对时钟的边沿检查默认是发起时钟和捕获时钟边沿间的最小的正delta。 hold检查是确保启动边沿发送数据后,不能够被前一个setup捕获沿捕获。在实际的路径分析中,除了时钟的时延,还需考虑数据传输的时延,就是在报告中看到的完整时序路径。

    上面解释了分析时如何选取发起时钟launch clock和捕获时钟capture clock的边沿,即setup为正的边沿差值,hold尽量为负的差值,下面将结合实际例子来说明,根据发起始终与捕获时钟的频率与相位关系进行分类。

2.1 设计工程

    工程很简单,就是最基础的时序路径,由两个触发器构成

module clk_edge(clk1,clk2,d,rst,out);
input clk1,clk2,d,rst;
output out;
reg ff1,out;

always@(posedge clk1,negedge rst)
    if(!rst)
        ff1<=0;
    else begin
        ff1<=d;
    end


always@(posedge clk2,negedge rst)
    if(!rst)
        out<=0;
    else begin
        out<=ff1;
    end
endmodule

2.2 同频同相

时钟约束,clk1,clk2都是周期为10ns,占空比50%,在0-5ns为高电平

create_clock -period 10.000 -name clk1 -waveform {0.000 5.000} -add [get_ports clk1]
create_clock -period 10.000 -name clk2 -waveform {0.000 5.000} -add [get_ports clk2]

因同频同相,每个周期内的相位关系都是确定的,在一个周期内分析即可,setup边沿的获取根据上述规则选取如下图,hold直接取0时刻的。

 

setup分析,requirement为10ns-0ns=10ns

 

hold分析,requirement为0ns-0ns=0ns

 

2.3 同频不同相1

时钟约束,clk1,clk2都是周期为10ns,相位不同,发起时钟clk1的相位大于clk2

create_clock -period 10.000 -name clk1 -waveform {2.000 7.000} -add [get_ports clk1]
create_clock -period 10.000 -name clk2 -waveform {0.000 5.000} -add [get_ports clk2]

边沿分析如下图,clk1的上升沿在2ns,即clk1和clk2的相位同,因clk1和clk2周期相同,从0ns开始,clk1的第一个上升沿处于clk2的两个上升沿之间。因此,以clk1为中心,寻找前后最靠近的边沿,如下图所示。

 

setup分析,根据边沿分析对可得,requirement为8ns

 

hold分析,根据边沿对关系,可得requirement为-2ns

 

2.4 同频不同相2

时钟约束,clk1,clk2都是周期为10ns,相位不同,发起时钟clk1的相位小于clk2

create_clock -period 10.000 -name clk1 -waveform {0.000 5.000} -add [get_ports clk1] create_clock -period 10.000 -name clk2 -waveform {2.000 7.000} -add [get_ports clk2]

边沿分析如下图,clk2的上升沿在2ns,即clk1和clk2的相位不同,因clk1和clk2周期相同,以clk2为中心,寻找前后最靠近的边沿,如下图所示。

 

setup分析,根据边沿分析对可得,requirement为2ns

 

hold分析,根据边沿分析对可得,requirement为-8ns

 

2.5 倍频关系(Fclk1>Fclk2)

时钟约束,clk1周期为10ns,clk2周期为30ns

create_clock -period 10.000 -name clk1 -waveform {0.000 5.000} -add [get_ports clk1]
create_clock -period 30.000 -name clk2 -waveform {0.000 15.000} -add [get_ports clk2]

边沿分析如下图,在0ns,即clk1和clk2的边沿对齐,因此进行hold分析。因clk2周期大,以clk2为的上升沿为中心,寻找前后最靠近的边沿,如下图所示。

 

setup分析,根据边沿分析对可得,requirement为30ns-20ns=10ns

 

hold分析,根据边沿分析对可得,requirement为0-0=0ns

 

2.6 倍频关系(Fclk1<Fclk2)

时钟约束,clk1周期为30ns,clk2周期为10ns

create_clock -period 30.000 -name clk1 -waveform {0.000 15.000} -add [get_ports clk1]
create_clock -period 10.000 -name clk2 -waveform {0.000 5.000} -add [get_ports clk2]

边沿分析如下图,在0ns,即clk1和clk2的边沿对齐,因此进行hold分析,因clk1周期大,以clk1的上升沿为基准,寻找clk2最靠近其上升沿的边沿,结果如下图所示。

 

setup分析,根据边沿分析对可得,requirement为10ns-0ns=10ns

 

hold分析,根据边沿分析对可得,requirement为0-0=0ns

 

2.7 倍频关系存在相移(Fclk1<Fclk2)

时钟约束同上一个例子,clk1周期为30ns,clk2周期为10ns,区别是clk2存在相移,上升沿在3ns位置

create_clock -period 30.000 -name clk1 -waveform {0.000 15.000} -add [get_ports clk1]
create_clock -period 10.000 -name clk2 -waveform {3.000 8.000} -add [get_ports clk2]

边沿分析如下图,因clk1周期大,以clk1的上升沿为基准,在一个周期内,寻找clk2最靠近其上升沿的边沿,结果如下图所示。

 

setup分析,根据边沿分析对可得,requirement为3ns-0ns=3ns

 

hold分析,根据边沿分析对可得,requirement为23-30=-7ns

 

2.8 非倍频关系无相移(Fclk1<Fclk2)

当两个时钟clk1和clk2非倍频关系时,如clk1周期为7.5ns,clk2周期为5ns

create_clock -period 7.500 -name clk1 -waveform {0.000 3.750} -add [get_ports clk1] create_clock -period 5.000 -name clk2 -waveform {0.000 2.500} -add [get_ports clk2]

边沿分析如下图,在0ns出上升沿对齐,进行hold分析,clk1的周期大,以clk1上升沿为基准在clk2寻找最小边沿差。

 

setup分析,根据边沿分析对可得,requirement为10ns-7.5ns=2.5ns

 

hold分析,根据边沿分析对可得,requirement为0-0=0ns

 

2.9 非倍频关系有相移(Fclk1<Fclk2)

当两个时钟clk1和clk2非倍频关系时,如clk1周期为7.5ns,clk2周期为5ns,clk2的上升沿位置在1ns处

create_clock -period 7.500 -name clk1 -waveform {0.000 3.750} -add [get_ports clk1] create_clock -period 5.000 -name clk2 -waveform {1.000 3.500} -add [get_ports clk2]

边沿分析如下图,clk1的周期大,以clk1上升沿为基准在clk2寻找最小边沿差,对于setup分析,在clk1首个上升沿对应的clk2的上升沿偏差最小,hold的寻找方式类似,结果如下图

 

setup分析,根据边沿分析对可得,requirement为1ns-0ns=1ns

 

hold分析,根据边沿分析对可得,requirement为6-7.5=-1.5ns

 

三、总结

    下面再次对时序分钟中边沿对的选取进行一句话总结:假设Tcapture,Tlaunch分别为捕获时钟,发起时钟上升沿位置的时刻,setup边沿对选取规则,当Tcapture>Tlaunch时Min(Tcapture-Tlaunch);hold边沿对选取,在上升沿的时间中,当Tcapture<=Tlaunch时满足MAX(Tcapture-Tlaunch)的边沿对,最大值为0ns

  • 27
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值