《2022年时序约束技巧推荐 .pdf》由会员分享,可在线阅读,更多相关《2022年时序约束技巧推荐 .pdf(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、一般来讲,添加约束的原则为先附加全局约束,再补充局部约束,而且局部约束比较宽松。其目的是在可能的地方尽量放松约束,提高布线成功概率,减少ISE 布局布线时间。典型的全局约束包括周期约束和偏移约束。在添加全局时序约束时,需要根据时钟频率划分不同的时钟域,添加各自的周期约束;然后对输入输出端口信号添加偏移约束,对片内逻辑添加附加约束。1周期约束周期约束是附加在时钟网路上的基本时序约束,以保证时钟区域内所有同步组件的时序满足要求。在分析时序时,周期约束能自动处理寄存器时钟端的反相问题,如果相邻的同步元件时钟相位相反,则其延迟会被自动限制为周期约束值的一半,这其实相当于降低了时钟周期约束的数值,所以在
2、实际中一般不要同时使用时钟信号的上升沿和下降沿。硬件设计电路所能工作的最高频率取决于芯片内部元件本身固有的建立保持时间,以及同步元件之间的逻辑和布线延迟。所以电路最高频率由代码和芯片两部分共同决定,相同的程序,在速度等级高的芯片上能达到更高的最高工作频率;同样,在同一芯片内, 经过速度优化的代码具有更高的工作频率,在实际中往往取二者的平衡。在添加时钟周期之前,需要对电路的期望时钟周期有一个合理的估计,这样才不会附加过松或过紧的周期约束,过松的约束不能达到性能要求,过紧的约束会增加布局布线的难度,实现的结果也不一定理想。常用的工程策略是:附加的时钟周期约束的时长为期望值的90%,即约束的最高频率
3、是实际工作频率的110% 左右。附加时钟周期约束的方法有两个:一是简易方法,二是推荐方法。简易方式是直接将周期约束附加到寄存器时钟网线上,其语法如下所示: 约束信号 PERIOD = 周期长度 HIGH | LOW 脉冲持续时间 ; 其中, 内的内容为可选项, 中的内容为必选项, “| ”表示选择项。 约束信号 可为“Net net_name”或“TIMEGRP group_name” ,前者表示周期约束作用到线网所驱动的同步元件上,后者表示约束到TIMEGRP 所定义的信号分组上( 如触发器、 锁存器以及 RAM 等)。 周期长度 为要求的时钟周期,可选用 ms、s、ns 以及 ps 等单位
4、,默认值为ns,对单位不区分大小写。HIGH | LOW 用于指定名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - 周期内第一个脉冲是高电平还是低电平。 脉冲持续时间 用于指定第一个脉冲的持续时间,可选用ms 、s、ns 以及 ps 等单位,默认值为ns,如果缺省该项,则默认为50% 的占空比。如语句:Net“ clk_100MHz ” period = 10ns High 5ns;指定了信号 clk_100MHz 的周期为 10
5、ns ,高电平持续的时间为5ns,该约束将被添加到信号clk_100MHz 所驱动的元件上。推荐方法常用于约束具有复杂派生关系的时钟网络,其基本语法为:TIMESPEC “ TS_identifier” = PERIOD“ TNM_reference ” 周期长度 HIGH | LOW 脉冲持续时间 ; 其中, TIMESPEC 是一个基本时序相关约束,用于标志时序规范。“TS_identifier”由关键字 TS 和用户定义的 identifier 表示,二者共同构成一种时序规范,称为TS 属性定义,可在约束文件中任意引用,大大地丰富了派生时钟的定义。在使用时,首先要定义时钟分组,然后再添加
6、相应的约束,如: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 为已定义的时钟, “ 倍数因子 ” 用于给出二者周期的倍数关系,phasev
7、alue 给出二者之间的相位关系。如:定义系统时钟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偏移约束偏移约束也是一类基本时序约束,规定了外部时钟和数据输入输出引脚之间的相对时序关系,只能用名师资料总结 - -
8、-精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - 于端口信号,不能应用于内部信号,包括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 |
9、OUT 说明约束的是输入还是输出。“offset_time”为数据和有效时钟沿之间的时间差,BEFORE | AFTER 表明该时间差是在有效时钟之前还是之后,“clk_name ”为有效时钟的名字, TIMEGRP “group_name ” 是用户添加的分组信号,在缺省时,默认为时钟clk_name 所驱动的所有触发器。偏移约束通知布局布线器输入数据的到达时刻,从而可准确调整布局布线的过程,使约束信号建立时间满足要求。1) “OFFSET IN”偏移约束“OFFSET IN ”偏移约束是输入偏移约束,有OFFSET_IN_AFTER 和 OFFSET_IN_BEFORE 两种,前者定义了输
10、入数据在有效时钟到达多长时间后可以到达芯片的输入管脚,这样可以得到芯片内部的延迟上限, 从而对那些与输入引脚相连的组合逻辑进行约束;后者定义数据比相应的有效时钟沿提前多少时间到来, 是与其相连的组合逻辑的最大延时,否则在时钟沿到来时,数据不稳定, 会发生采样错误。输入偏移的时序关系如图5-10 所示。DATA_IN TIN_AFTER TIN_BEFORE TP CLK_SYS 图 5-10 输入偏移的时序关系例如:NET “ DATA_IN” OFFSET = IN 10.0 BEFORE“ CLK_50MHz ”;表明在时钟信号CLK_50MHz 上升沿到达前的10ns 内,输入信号DAT
11、A_IN 必须到达数据输入管名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - 脚。NET “ DATA_IN” OFFSET = IN 10.0 AFTER“ CLK_50MHz ”;表明在时钟信号CLK_50MHz 上升沿到达后的10ns 内,输入信号DATA_IN 必须到达数据输入管脚。2) “OFFSET OUT ” 偏移约束“OFFSET OUT ” 偏移约束是输出偏移约束,有OFFSET_OUT_AFTER 和 OFFS
12、ET_OUT_BEFORE 两种,前者定义了输出数据在有效时钟沿之后多长时间稳定下来,是芯片内部输出延时的上限;后者定义了在下一个时钟信号到来之前多长时间必须输出数据,是下一级逻辑建立时间的上限。输出偏移的时序关系如图5.3.11 所示。Q_OUT TOUT_BEFORE TOUT_AFTER TP CLK_SYS 图 5-11 输出偏移的时序关系例如:NET “ DATA_OUT ” OFFSET = OUT 10.0 BEFORE “ CLK_50MHz ”;表明在时钟信号CLK_50MHz 上升沿到达前的10ns 内,输出信号DATA_OUT 信号必须离开数据输出管脚。NET “ DAT
13、A_OUT ” OFFSET = OUT 10.0 AFTER “ CLK_50MHz ”;表明在时钟信号CLK_50MHz 上升沿到达后的10ns 内,输出信号DATA_OUT 信号必须一直保持在数据输出管脚上。3分组约束分组约束可有效管理大量的触发器、寄存器和存储器单元, 将其分为不同的组, 每组附加各自的约束,在大型设计中有着广泛的应用。1)TNM/TNM_NET 约束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - TNM
14、/TNM_NET 约束用于选出可构成一个分组的元件,并对其重新命名,然后整体添加约束。除了IBUFG 和 BUFG 外,所有的FPGA 内部元件都可以用TNM 来命名,其语法规则为:NET|INST|PIN“ ob_name” TNM =“ New_name”;其中 “ob_name ” 为 NET、INST 以及 PIN 的名称, New_name 为分组的名称。例如:48. FPGA 开发全攻略 工程师创新设计宝典上册基础篇INST ff1 TNM = MY_FF1; NIST ff2 TNM = MY_FF1; 将实例 ff1 与 ff2 添加到新分组MY_FF1 中。此外, TNM 语
15、法也支持通配符“ ?” 和“*”,提高了在大规模设计中添加分组约束的效率。当 TNM 约束附加在线网上时, 则该路径上所有的同步元件都会被添加到分组中,但不会穿过IBUFG 组件;当 TNM 约束附加到宏或原语的管脚上,则被该引脚驱动的所有同步元件会被添加到新分组中;当TNM 约束附加到原语或宏上,则将原语或宏添加到新的分组中。TNM_NET 约束专门用来完成网线的分组,与 TNM 不同的是, TNM 可以穿越 IBUFG/BUFG 。 因此,如果把 TNM 约束添加到端口上,则只能定义该端口;而要是把TNM_NET 添加到端口上,则可穿越 BUFG ,受该端口驱动的所有组件都将被添加到分组中
16、。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 中除去 Ol
17、d_group2 之外所有的部分。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - 3)TPSYNC 约束TPSYNC 用于将那些不是管脚和同步元件的组件定义成同步元件,以便可以利用任意点来作为时序规范的终点和起点。其相应的语法为:NET|INST|PIN“ ob_name” TPSYNC= “ New_part ”;将 TPSYNC 约束附加在网线上,则该网线的驱动源为同步点;附加在同步元件的输出管脚上,则同步元件中驱动该管脚的
18、源为同步点;附加在同步元件上,则输出管脚为同步点;附加在同步元件的输入管脚上,则该引脚被定义成同步点。4)TPTHRU 约束TPTHRU 用于定义一个或一组路径上的关键点,可使用户定义出任意期望的路径。其相应的语法为:NET|INST|PIN“ ob_name” TPTHRU =“ New_name”;例如,在图 5-12 所示场景中,从A1 到 A2 有两条路径,其中逻辑1 的延迟很大,需要提取出来完成特定的约束:逻辑 1 逻辑 2 D O D O A1 to A2_1 A1 to A2_2 A1 A2 图 5-12 TPTHRU 约束示例场景INST“ A1 ” TNM =“ S”;INS
19、T“ A2 ” TNM =“ E”;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - NET “ A1toA2_1 ” TPTHRU =“ M”;TIMESPEC “ SME” = FROM“ S” THRU“ M” TO“ B” 10;其中第三句指令利用TPTHRU 定义了中间点 “M ”, 然后第 4 句在此基础上定义了通过M 点的整条路径,从两条平行的路径中挑出了期望路径。4局部约束局部约束包括FROM_TO 约束、最大延时约束、最大偏移约束、虚假路径、系统时钟抖动约束、多周期路径和多时钟域约束等。在实际开发中,正如本章前沿所述, 时序是设计出来,而不是靠约束自动得到的,因此这里不再对局部约束作过多讨论。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -
限制150内