
1.4 时序约束与时序分析
1.4.1 时序约束和分析基础
1.时序约束的目的
FPGA设计中常用的约束主要分为三大类,即时序约束、区域约束和其他约束。
时序约束主要用于规范设计的时序行为,表达设计者期望满足的时序要求,指导综合和布局阶段的优化选项等;区域约束是指约定一些逻辑在FPGA中实现的物理位置及面积;其他约束包括引脚位置约束、引脚电平约束、器件约束等系统性约束。
时序约束的目的有以下两个。
(1)提高设计的工作频率。
提高设计的工作频率,意味着单位时间内处理的信息量更大,设计的性能更高。时序约束的条件一般比正常工作时的频率高10%~20%,这类似于CPU的超频工作。
(2)获得正确的时序分析报告。
设计工具分析一项设计的性能和工作频率的方式就是计算各种延时和周期,生成时序分析报告。要想使设计工具能生成正确的时序分析报告(主要是静态时序分析报告),就必须用详细的时序约束来指导设计工具。
2.周期与频率
周期是指时钟或者信号循环出现同一个状态的时间间隔。频率是周期的倒数。频率越高,周期越短。从理论上讲,周期越短,性能越高。时钟周期如图1-33所示,其计算公式如下:
T clk=Micro Tco+Tlogic+Tnet+Micro Tsu-Tclk_skew
式中,Tclk是时钟的最短周期,Micro Tco是寄存器信号输出相对于时钟的固定延时,Tlogic组合逻辑传输延时,Tnet是布线延时,Micro Tsu是采样寄存器要求的信号建立时间,Tclk_skew是时钟偏斜。最大频率fmax=1/Tclk。

图1-33 时钟周期
3.利用Quartus软件进行时序分析
在Quartus软件的时序分析报告中会把各条路径的最大工作频率列出来,如图1-34所示。可以选择一条路径,然后定位到所需的选项。

图1-34 时序分析报告
如果在图1-34中的右键快捷菜单中选择“Report Timing”或者“Report Worst-Case Path”命令,就可以在新打开的窗口中看到具体延时信息,如图1-35所示。

图1-35 查看延时信息
4.数据信号建立时间
数据信号建立时间Tsu是指在接收寄存器的时钟有效沿到来之前,数据信号建立并保持稳定的最短时间,如图1-36所示。其计算公式如下:
T su=Data Delay-Clock Delay+Micro Tsu
式中,Micro Tsu是寄存器固有的信号建立时间,通常保持不变。

图1-36 数据信号建立时间
5.数据信号保持时间
数据信号保持时间Th是指时钟有效沿到来后,数据信号保持不变的最短时间,如图1-37所示。其计算公式如下:
T h=Clock Delay-Data Delay+Micro Th

图1-37 数据信号保持时间
6.数据输出延时
数据输出延时Tco是指从时钟触发开始,经过寄存器传输,到有效数据输出的整个过程中器件内部的延时总和,如图1-38所示。数据输出延时也称寄存器传输时间,是个固定的参数。其计算公式如下:
T co=Clock Delay+Data Delay+Micro Tco

图1-38 数据输出延时
7.引脚到引脚延时
引脚到引脚延时指的是信号从输入引脚经过组合逻辑到达输出引脚的延时,用Tpd表示。
8.Slack
Slack是信号实际传输时间与要求满足的时序时间之间的差值,如图1-39所示。其值有正有负,正值表示满足设计时序要求且有余量,负值表示达不到设计时序要求。其计算公式如下:
Slack=Required Clock Period-Actual Clock Period
Slack=Slack Clock Period-(Micro Tco+Data Delay+Micro Tsu)

图1-39 Slack
9.时钟偏斜
时钟偏斜(Clock Skew)是指时钟边缘位置不固定。
正常的时钟波形如图1-40所示。

图1-40 正常的时钟波形
偏斜的时钟波形如图1-41所示。

图1-41 偏斜的时钟波形
在FPGA中通过优化时钟走线可以减小时钟偏斜。在一些工作频率不高的设计中,可以忽略时钟偏斜。
1.4.2 高级时序分析
1.增加数据信号延时
时钟偏斜会造成数据信号的保持时间违规。在这种情况下,需要用户自己增加数据信号延时来保证保持时间。常用的方法有以下两种。
(1)增加逻辑延时:增加延时单元或者逻辑门。
(2)增加布线延时:手动定位源端和目的端寄存器来增加布线延时。
2.多周期约束
通常信号是在一个时钟周期内传输的,所以只需要在一个时钟周期内分析时序。但在下面三种情况下,必须在多个时钟周期内分析时序。
(1)确定信号延时大于一个时钟周期,也就是慢信号传输,如图1-42所示。

图1-42 慢信号传输
在图1-42中,数据信号在第一个周期从CLK1上升沿出来后,在CLK2的第三个周期的上升沿被采样,而不是在第二个周期被采样。这时把Multicycle设置为2,Multicycle Hold设置为1。这适用于两个时钟同频同相的情况。
(2)两个时钟同频不同相,如图1-43所示。

图1-43 两个时钟同频不同相(一)
在这种情况下,数据在一个时钟周期内传输,但是采样时钟CLK2与源时钟CLK1的相位差小于一个时钟周期,所以不能把最近的这个CLK2时钟沿作为采样时钟沿,而应该延迟到下一个时钟沿。这时把Multicycle设置为2,Multicycle Hold设置为1,如图1-44所示。

图1-44 两个时钟同频不同相(二)
(3)两个时钟之间有倍频关系如图1-45~图1-47所示。

图1-45 两个时钟之间有倍频关系(一)

图1-46 两个时钟之间有倍频关系(二)

图1-47 两个时钟之间有倍频关系(三)
对于有倍频关系的时钟信号传输,需要设定采样周期是几个CLK2时钟周期或者几个CLK1时钟周期。
如果源时钟频率比采样时钟频率高,可以通过设置Source Multicycle和Multicycle做时序分析。
如果源时钟频率低于采样时钟频率,可以通过Multicycle来设置时序约束。
3.切断伪路径
伪路径是指不需要做时序分析的路径。
(1)如图1-48所示,不分析C路径,只分析A路径和B路径。

图1-48 不分析C路径
(2)如图1-49所示,丢弃清零/异步复位信号。

图1-49 丢弃清零/异步复位信号
(3)如图1-50所示,不分析数据从写入RAM到读出RAM的路径。

图1-50 不分析数据从写入RAM到读出RAM的路径
(4)不分析不相关的时钟信号路径。
(5)可以在“Assignments Editor”中切断不需要做时序分析的路径。
4.I/O接口的时序要求
I/O接口的时序需要考虑芯片之间的输入/输出引脚时序是否满足建立时间和保持时间的要求。这需要从板级走线来考虑。主要思想是通过时钟移相来正确地采样数据。