一般来讲,增加束缚的准则为先附加大局束缚,再弥补部分束缚,并且部分束缚比较宽松。其意图是在或许的当地尽量放松束缚,进步布线成功概率,削减ISE 布局布线时刻。典型的大局束缚包含周期束缚和偏移束缚。在增加大局时序束缚时,需求依据时钟频率区别不同的时钟域,增加各自的周期束缚;然后对输入输出端口信号增加偏移束缚,对片内逻辑增加附加束缚。
1.周期束缚
周期束缚是附加在时钟网路上的根本时序束缚,以确保时钟区域内一切同步组件的时序满足要求。在剖析时序时,周期束缚能主动处理寄存器时钟端的反相问题,假如相邻的同步元件时钟相位相反,则其推迟会被主动限制为周期束缚值的一半,这其实相当于降低了时钟周期束缚的数值,所以在实践中一般不要一起运用时钟信号的上升沿和下降沿。
硬件规划电路所能作业的最高频率取决于芯片内部元件自身固有的树立坚持时刻,以及同步元件之间的逻辑和布线推迟。所以电路最高频率由代码和芯片两部分一起决议,相同的程序,在速度等级高的芯片上能抵达更高的最高作业频率;相同,在同一芯片内,经过速度优化的代码具有更高的作业频率,在实践中往往取二者的平衡。
在增加时钟周期之前,需求对电路的希望时钟周期有一个合理的估量,这样才不会附加过松或过紧的周期束缚,过松的束缚不能抵达功能要求,过紧的束缚会增加布局布线的难度,完结的成果也不一定抱负。常用的工程战略是:附加的时钟周期束缚的时长为希望值的90%,即束缚的最高频率是实践作业频率的110% 左右。
附加时钟周期束缚的办法有两个:一是简易办法,二是引荐办法。简易办法是直接将周期束缚附加到寄存器时钟网线上,其语法如下所示:
[ 束缚信号] PERIOD = { 周期长度} {HIGH | LOW} [ 脉冲继续时刻];其间,[] 内的内容为可选项,{} 中的内容为必选项,“|”标明选择项。[ 束缚信号] 可为“Net net_name”或“TIMEGRP group_name”,前者标明周期束缚作用到线网所驱动的同步元件上,后者标明束缚到TIMEGRP所界说的信号分组上( 如触发器、锁存器以及RAM 等)。{ 周期长度} 为要求的时钟周期,可选用ms、s、ns以及ps 等单位,默许值为ns,对单位不区别大小写。{HIGH | LOW} 用于指定周期内第一个脉冲是高电平仍是低电平。[ 脉冲继续时刻] 用于指定第一个脉冲的继续时刻,可选用ms、s、ns 以及ps 等单位,默许值为ns,假如缺省该项,则默以为50% 的占空比。如句子:
Net“ clk_100MHz” period = 10ns High 5ns;
指定了信号clk_100MHz 的周期为10ns,高电平继续的时刻为5ns,该束缚将被增加到信号clk_100MHz所驱动的元件上。
引荐办法常用于束缚具有杂乱派生联系的时钟网络,其根本语法为:
TIMESPEC“ TS_idenTIfier” = PERIOD“ TNM_reference” {周期长度}
{HIGH | LOW} [ 脉冲继续时刻];
其间,TIMESPEC 是一个根本时序相关束缚,用于标志时序标准。“TS_identifier”由要害字TS 和用户界说的identifier 标明,二者一起构成一种时序标准,称为TS 特点界说,可在束缚文件中恣意引证,大大地丰厚了派生时钟的界说。在运用时,首先要界说时钟分组,然后再增加相应的束缚,如:
NET“ clk_50MHz” =“ syn_clk”;
TIMESPECT“ TS_syn_clk” = PERIOD“ syn_clk” 20 HIGN 10;
TIMESPEC 使用辨认符界说派生时钟的语法为:
TIMESPEC“ TS_identifier2” = PERIOD“ timegroup_name” “ TS_identifier1”
[* | /] 倍数因子 [+| -] phasevalue [ 单位]
其间,TS_identifier2 是要派生界说的时钟,TS_identifier1 为已界说的时钟,“倍数因子”用于给出二者周期的倍数联系,phasevalue 给出二者之间的相位联系。如:
界说体系时钟clk_syn :
TIMESPEC“ clk_syn” = PERIOD“ clk” 5ns;
下面给出其反相时钟clk_syn_180 以及2 分频时钟clk_syn_half :
TIMESPEC“ clk_syn_180” = PERIOD“ clk_180” clk_syn PHASE + 2.5ns;
TIMESPEC“ clk_syn_180” = PERIOD“ clk_half” clk_syn / 2;
2.偏移束缚
偏移束缚也是一类根本时序束缚,规则了外部时钟和数据输入输出引脚之间的相对时序联系,只能用于端口信号,不能使用于内部信号,包含OFFSET_IN_BEFORE,OFFSET_IN_AFTER,OFFSET_OUT_BEFORE,OFFSET_OUT_ AFTER 等4 类根本束缚。偏移束缚的根本语法为:
OFFSET = [IN | OUT]“ offset_time” [units] {BEFORE | AFTER}“ clk_name”
[TIMEGRP“ group_name”];
其间[IN | OUT] 阐明束缚的是输入仍是输出。“offset_time”为数据和有用时钟沿之间的时刻差,{BEFORE| AFTER} 标明该时刻差是在有用时钟之前仍是之后,“clk_name”为有用时钟的姓名,[TIMEGRP “group_name”] 是用户增加的分组信号,在缺省时,默以为时钟clk_name 所驱动的一切触发器。偏移束缚告诉布局布线器输入数据的抵达时刻,然后可精确调整布局布线的进程,使束缚信号树立时刻满足要求。
1)“OFFSET IN”偏移束缚
“OFFSET IN ”偏移束缚是输入偏移束缚,有OFFSET_IN_AFTER 和OFFSET_IN_BEFORE 两种,前者界说了输入数据在有用时钟抵达多长时刻后能够抵达芯片的输入管脚,这样能够得到芯片内部的推迟上限,然后对那些与输入引脚相连的组合逻辑进行束缚;后者界说数据比相应的有用时钟沿提早多少时刻到来,是与其相连的组合逻辑的最大延时,否则在时钟沿到来时,数据不稳定,会产生采样过错。输入偏移的时序联系如图5-10所示。
图5-10 输入偏移的时序联系
例如:
NET“ DATA_IN” OFFSET = IN 10.0 BEFORE“ CLK_50MHz”;
标明在时钟信号CLK_50MHz 上升沿抵达前的10ns 内,输入信号DATA_IN 有必要抵达数据输入管脚。
NET“ DATA_IN” OFFSET = IN 10.0 AFTER“ CLK_50MHz”;
标明在时钟信号CLK_50MHz 上升沿抵达后的10ns 内,输入信号DATA_IN 有必要抵达数据输入管脚。
2)“OFFSET OUT”偏移束缚
“OFFSET OUT”偏移束缚是输出偏移束缚,有OFFSET_OUT_AFTER 和OFFSET_OUT_BEFORE 两种,前者界说了输出数据在有用时钟沿之后多长时刻稳定下来,是芯片内部输出延时的上限;后者界说了鄙人一个时钟信号到来之前多长时刻有必要输出数据,是下一级逻辑树立时刻的上限。输出偏移的时序联系如图5.3.11 所示。
图5-11 输出偏移的时序联系
例如:
NET“ DATA_OUT” OFFSET = OUT 10.0 BEFORE“ CLK_50MHz”;
标明在时钟信号CLK_50MHz 上升沿抵达前的10ns 内,输出信号DATA_OUT 信号有必要脱离数据输出管脚。
NET“ DATA_OUT” OFFSET = OUT 10.0 AFTER“ CLK_50MHz”;
标明在时钟信号CLK_50MHz 上升沿抵达后的10ns 内,输出信号DATA_OUT 信号有必要一向坚持在数据输出管脚上。
3.分组束缚
分组束缚可有用办理很多的触发器、寄存器和存储器单元,将其分为不同的组,每组附加各自的束缚,在大型规划中有着广泛的使用。
1)TNM/TNM_NET 束缚
TNM/TNM_NET 束缚用于选出可构成一个分组的元件,并对其重新命名,然后全体增加束缚。除了IBUFG和BUFG 外,一切的FPGA 内部元件都能够用TNM 来命名,其语法规则为:
{NET|INST|PIN}“ ob_name” TNM =“ New_name”;
其间“ob_name”为NET、INST 以及PIN 的称号,New_name 为分组的称号。例如:
INST ff1 TNM = MY_FF1;
NIST ff2 TNM = MY_FF1;
将实例ff1 与ff2 增加到新分组MY_FF1 中。
此外,TNM 语法也支撑通配符“?”和“*”,进步了在大规模规划中增加分组束缚的功率。
当TNM 束缚附加在线网上时,则该途径上一切的同步元件都会被增加到分组中,但不会穿过IBUFG 组件;
当TNM 束缚附加到宏或原语的管脚上,则被该引脚驱动的一切同步元件会被增加到新分组中;当TNM 束缚附加到原语或宏上,则将原语或宏增加到新的分组中。
TNM_NET 束缚专门用来完结网线的分组,与TNM 不同的是,TNM 能够穿越IBUFG/BUFG。因而,假如把TNM 束缚增加到端口上,则只能界说该端口;而要是把TNM_NET 增加到端口上,则可穿越BUFG,受该端口驱动的一切组件都将被增加到分组中。
2)TIMEGRP 束缚
TIMEGRP 用于分组兼并和拆分,将多个分组构成一个新的分组。其兼并分组的语法为:
TIMEGRP“ New_group” =“ Old_group1” “ Old_group2” … ;
其间,New_group 为新建的分组,而Old_group1 和Old_group2 以及…为要兼并的已有分组。
拆分分组的语法为:
TIMEGRP“ New_group” =“ Old_group1” EXCEPT“ Old_group2”;
其间Old_group2 是Old_group1 的子集,New_group 为Old_group1 中除掉Old_group2 之外一切的部分。
3)TPSYNC 束缚
TPSYNC 用于将那些不是管脚和同步元件的组件界说成同步元件,以便能够使用恣意点来作为时序标准的结尾和起点。其相应的语法为:
{NET|INST|PIN}“ ob_name” TPSYNC=“ New_part”;
将TPSYNC 束缚附加在网线上,则该网线的驱动源为同步点;附加在同步元件的输出管脚上,则同步元件中驱动该管脚的源为同步点;附加在同步元件上,则输出管脚为同步点;附加在同步元件的输入管脚上,则该引脚被界说成同步点。
4)TPTHRU 束缚
TPTHRU 用于界说一个或一组途径上的要害点,可运用户界说出恣意希望的途径。其相应的语法为:
{NET|INST|PIN}“ ob_name” TPTHRU =“ New_name”;
例如,在图5-12 所示场景中,从A1 到A2 有两条途径,其间逻辑1 的推迟很大,需求提取出来完结特定的束缚:
图5-12 TPTHRU束缚示例场景
INST“ A1” TNM =“ S”;
INST“ A2” TNM =“ E”;
NET“ A1toA2_1” TPTHRU =“ M”;
TIMESPEC“ SME” = FROM“ S” THRU“ M” TO“ B” 10;
其间第三句指令使用TPTHRU 界说了中心点“M”,然后第4 句在此基础上界说了经过M 点的整条途径,从两条平行的途径中挑出了希望途径。
4.部分束缚
部分束缚包含FROM_TO 束缚、最大延时束缚、最大偏移束缚、虚伪途径、体系时钟颤动束缚、多周期途径和多时钟域束缚等。在实践开发中,正如本章前沿所述,时序是规划出来,而不是靠束缚主动得到的,因而这儿不再对部分束缚作过多评论。