完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 seduce 于 2015-2-3 14:20 编辑
关于约束 今天在研究时序约束这一块,于是想着上来和大家分享一下心得,同时和大家交流交流,互相成长,欢迎批评指正。首先说一下什么时候需要时序约束,当我们将verilog程序编写完成了,也就是完成了功能测试以后,要进行后仿真,布局布线了,这个时候为了使布局布线满足时序,使最终加载到板子上的程序满足时钟同步上的要求,需要对时序做一些约束,实际上就是对软件布局布线提出一些要求,让布局布线的过程按照要求来,当然,这一点是非常有必要的,所以,研究时序约束最好是在有一块FPGA的板子的情况下进行,这样,你能理解的更透彻。 下面是正文,我用的软件是ise12.1,版本,芯片是spartan-6,在ise环境下进行约束主要分为时钟约束,输入输出约束,以及特殊情况的约束这三项。 我今天只分析前两项,后面的要根据具体情况来分析研究,比较深入。 首先是时钟约束,时钟约束可以约束时钟所涉及到的全局,但是有四种情况是约束不到的,纯组合逻辑,输入,输出,无关联时钟触发器。 粗算约束时钟最高周期为逻辑40%和布线延时60%,有这样的根据才能去更好的估计最高频露。 下面说一下在ise环境下进行时序约束的方法。 通过约束编辑器的文本编辑窗口,可以采用以下两种方式的UCF语句来做时钟约束。 (1)period_item PERIOD=period{HIGH|LOW} [high_or low_item] 其中,period_item可以是NET或tiMEGRP,分别代表时钟线名称net name或元件分组名称group-name。用NET表示PERIOD约束作用到名为“net name”的时钟网线所驱动的同步元件上,用TIMEGRP表示PERIOD约束作用到TiMEGRP所定义的分组(包括FFS、LATCH和 RAM等同步元件)上。period是目标时钟周期,单位可以是ps、ns、μS和ms等。HIGH|LOW指出时钟周期中的第1个脉冲是高电平还是低电 平,high_or_low_time为HIGH LOW指定的脉冲的持续时间,默认单位是ns。如果没有该参数,时钟占空比是50%。例如, NET SYS_CLK PERIOD=10 ns HIGH 4ns (2)NET“clock netname”TNM_NET=“timing groupname”; TIMESPEC“TSidentifier”=PERIOD “TNMreference”period {HIGH LOW} [high_or low_item] 下面举个例子来说明如何设置周期约束。考虑图3所示的电路设计范例1,输入时钟的周期是10ns,并且是上升沿动作,占空比为45%高电平,55%低电平。 我们可以用这样的UCF语旬来定义这个时钟: NET“SysClk” TNM_NET =“SysClk”; TIMESPEC “to ̄ SysClk ” = PERIOD "SysClk" 10 ns HIGH 45%; 图3 周期约束设计范例一 这个例子首先在时钟网线上附加了TNM_NET约束,把Clk驱动的所有同步元件定义成一个名为“sys_clk”的分组,然后使用TIMESPEC 约束定义时钟周期。这种定义时钟周期的方法使用了标识符,在定义其他时钟周期时可以引用这个标识符,大大方便了派生时钟的定义。 一种特殊情况的周期约束是相关时钟。前面提到周期约束不会覆盖异步路径,如图1所示的D路径。但是如果两个时钟是“相关”的,则实现工具和时序分析工具会考虑这个路径。因此对这样的路径不需要再设置FROM TO约束,相关内容包括自动相关和人为相关。我们来分别看看几种情况。 (1)图4所示的相关时钟约束1为两个时钟来自于同一个DCM,我们只需对DCM的输入时钟执行周期约束,则DCM输出的两个时钟就会通过DCM自动关联,它们之间的路径就会自动地被分析。 图4 相关时钟约束1 例如,我们做如下约束: NET "CLKIN"TNW_NET = "CLKIN"; TIMESPEC "TS_CLKIX" = PERTOD "CLK△N"10.O nsHIGH 50%; 则两个时钟之间的路径就会被这样分析: Slack: 3.926ns Source: DataRegSlow._d2_3 (FF) Destination: DataRegFast_d3_3 (FF) Requirement : 5.OOOns Data Path Delay : 0.874ns (Levels of Logic = 0) Clock Path Skew: 0.000ns SourceClock: C=CLK1X rising at O.000ns Destination Clock: CLKZX_DCM rising at 5.000ns Clock Uncertainty : 0.200ns (2)如刚才的电路可以不对DCM输入时钟做约束,而分别对两个时钟单独做周期约束,如图5所示。由于CLK2X的周期是基于CLK1X的周期定义的,所以这样两个时钟就被人为地关联起来,它们之间的路径也会自动地被分析。 图5 相关时钟约束2 例如,我们做如下约束: NET"CLKI1X"TNM_NET = "CLK1X"; NET"CLK2X"TNM_NET = "CLK2X"; TIMESPEC "TS_CLK1X" = PERIOD "CLK1X" lO.O ns HIGH 50%; TIMESPEC "TS_CLK2X" = PERTOD "CLK2X" TS_CLX△CLK1X/2; 则其之间的路径就会被这样分析: Slack: 3.926ns Destination : DataRegSlow_d2_3 (FF) Requirement : DataRegSlow_d2_3 (FF) Data Path Delay : 0.874ns (Levels of Logic=0) Clock Path Skew: 0.0O0ns Source Clock : CLK1X rising atO.000ns Destination Clock: CLK2X rising at5.000ns Clock Uncertainty : 0.200ns (3)两个时钟都是从FPGA外面送进来的,如图6所示,也可以对它们单独设置的周期约束,但是CLK2X的周期是基于CLK1X的周期定义。通过这种方式可以把两个时钟人为关联起来,它们之间的路径也会自动地被分析。 图6 相关时钟约束3 例如,我们做如下约束: NET "CLK1X" TNM NET = "CLK1X"; NET "CLK2X" TNM NET = "CLK2X"; TIMESPEC "TS_CLK1X" = PERTOD "CLK1X"10.O ns HIGH 50%; TIMESPEC "TS_CLK2X" = PERTOD "CLK2X" TS_CLK1x/2; 则两个时钟之间的路径就会被这样分析: Slack: 3.926ns Source: DataRegSlow_d2_3 (FF) Destination:DataRegFast_d2_3 (FF) Requirement:5.OOOns Data Path Delay: 0.874ns (Levels of Logic =0)0.OOOns Clock Path Skew: 0.0OOns source clock:CLK1X rising at 0.000ns Destination Clock: CLK2X rising at5.000ns Clock Uncertainty:0.200ns (4)两个时钟都是从FPGA外面送进来的,而且还有特定的相位关系。这种情况也可以单独做周期约束,但是CLK2X的周期是基于CLK1X的周期定义,同时需要再加上相位关系。通过这种方式可以把两个时钟人为地关联起来,它们之间的路径也会自动地被分析,如图7所示。 图7 相关时钟约束4 例如,我们做如下约束: NET "ClklX" TNM_NET = "ClklX" NET "Clk2X180" TNM_NET = "Clk2X180"; TIMESPEC "TS_Clk1X" = PERIOD "ClklX"10.0ns; TIMESPEC "TS_Clk2X180" =PERTOD "Clk2X180" TS_ClklX/2 PHASE+2.5 nS: 则该路径会被按照2.5 ns来分析。 |
|
|
|
1693 浏览 1 评论
1447 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
1661 浏览 0 评论
943 浏览 0 评论
2451 浏览 0 评论
1507 浏览 38 评论
5706 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 05:14 , Processed in 0.953207 second(s), Total 64, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号