四、时序约束
(1)周期约束
TIMESPEC “TS_identifier” = PERIOD “TNM_reference” {周期长度} {HIGH|LOW} [脉冲持续时间];
TIMESPEC “TS_identifier2” = PERIOD ”timegroup_name” “TS_identifier1” [* | /] 倍数因子 [+|-] phase_value[单位];
TS属性定义,可以用在任意的引用。在使用时要先定义时钟分组,再添加相应的约束,例如:NET "clk_1" TNM_NET ="clk_syn";
TIMESPEC "TS_clk_syn" = PERIOD "clk_syn" 5ns;
NET "clk_2" TNM_NET ="clk_syn_n";
TIMESPEC "TS_clk_syn_n" = PERIOD "clk_syn_n" clk_syn PHASE + 2.5ns;
NET "clk_3" TNM_NET ="clk_syn_m";
TIMESPEC "TS_clk_syn_m" = PERIOD "clk_syn_m" clk_syn /2;
(2)偏移约束
offset= {in|out} "time"[units] {before|after} "clkname" [TIMEGRP groupname];//[]为选填
(3)分组约束
1 TNM和TNM_NET约束
TNM进行分组不可以穿越IBUF和BUFG,而TNM_NET则可以。TNM_NET约束只能用于网线上,否则被忽略。
{NET|INST|PIN} "object_name(signals_name)" TNM/TNM_NET = predefined_group or "identifier(net_name)";
2 TIMEGRP约束
用于使已有的分组合并,构成新的分组,或用排除的方法构成新的分组。已有的分组包括预定义的分组和用户自己定义产生的分组。
TIMEGRP "newgrp_name" = "grp_name1" "grp_name2";(合并)
TIMEGRP "newgrp_name" = "grp_name1" EXCEPT "grp_name2";(1中去除2之外剩余的所有部分)
定义受时钟沿控制的触发器分组,如RISING或FALLING沿触发的分组。
TIMEGRP "newgrp_name" = RISING/FALLING "grp_name1";
定义受门控信号控制的锁存器分组,如TRANSLO或TRANSHI的电平控制的分组
TIMEGRP "newgrp_name" = TRANSLO/TRANSHI "grp_name1";
3 TPTHRU约束
用于定义一个或一组中间点,以便在其它时序约束定义中来进行标识,我认为有点象
电路图中的网络命名。如下
INST FF1 TNM = "start";
INST FF2 TNM = "endpt";
NET “mynet” TPTHRU= “ABC”;
TIMESPEC “TS_path" = FROM "start" THRU "ABC" TO "endpt" 30;
4 TPSYNC约束
{NET|INST|PIN}“ ob_name” TPSYNC=“ New_part”;
将TPSYNC 约束附加在网线上,则该网线的驱动源为同步点;附加在同步元件的输出管脚上,则同步元件中驱动该管脚的源为同步点;附加在同步元件上,则输出管脚为同步点;附加在同步元件的输入管脚
上,则该引脚被定义成同步点。
(4)局部约束
1多周期约束
TIMESPEC “TS_name”= FROM “group1” TO “group2” value; 其中value为延迟时间,可以使具体数值或表达式。