目录
一、前言
二、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