异步时序电路问题求解解

作为赛灵思用户论坛的定期访客(见 )我注意到新用户往往对时序收敛以及如何使用时序约束来达到时序收敛感到困惑。为帮助 FPGA设计新手实现时序收敛让我们来深入叻解时序约束以及如何利用时序约束实现FPGA 设计的最优结果。

为保证设计的成功设计人员必须确保设计能在特定时限内完成指定任务。要實现这个目的我们可将时序约束应用于连线中——从某 FPGA 元件到 FPGA 内部或 FPGA 所在 PCB 上后续元件输入的一条或多条路径。

每个同步设计要有至少一個PERIOD 约束(时钟周期规格)这是最基本的约束类型,指定了时钟周期及其占空比若设计中有不止一个时钟,则每个时钟都有自己的 PERIOD 约束PERIOD约束决定了我们如何进行布线,来满足设计正常工作的时序要求

为简化时序约束应用过程,常常可将具有类似属性的连线分组为一组總线或一组控制线这样做有助于完成正确为设计约束定义优先级这一关键步骤。

若设计有多重约束则需进行优先次序排列。一般来说约束的一般性越强,其优先级越低相反,约束的针对性越强其优先级越高。举例来说时钟网络上的某个一般性 PERIOD 约束将被特定网络嘚具有更高优先级的 FROM: TO 约束所覆盖。

特定 FROM: TO(或 FROM: THRU:TO)约束在时钟域内任意网络中的重要性均高于一般性约束

为便于进行约束的优先级排列,可運行赛灵思时序分析器(ISE? Design Suite中的静态时序分析工具)并生成时序规格迭代报告,即常说的 .tsi 报告该报告说明了各约束间是如何迭代的,鉯及该工具如何为各约束设置默认优先级
采用 PRIORITY 约束关键词可手动设置任一时序约束的优先级并使其优先于默认的或预先设定的优先级。這对同一路径上的两个或多个时序约束发生冲突时尤为有用这里的优先级指的是同一路径上有两个或多个时序约束时,该应用哪一个其余的低优先级约束则被忽略。优先级可在 -10 ~ +10 的范围内设置

PRIORITY 值越低,优先级越高注意该值不会影响到哪些路径应率先布局和走线,只有當优先级相同的两个约束出现在同一路径上时它才会影响由哪个约束控制该路径。

下面将以 PERIOD 只控制从同步元件到同步元件之间的网络洳 FFS 到FFS 为例来进一步介绍(约束以蓝色显示如下):

该命令的作用是告知工具,确保数据从时序分组“my_from_grp”包含的元件到“my_to_grp”的元件所用时间為 40纳秒时序分析器仍将计算从源分组到目标分组的时钟偏移,不过若时钟关联则优先级较低。也可使用如下预定义分组:

如前所述笁具将自动默认上文所述所有 FROM: TO 约束的优先级高于PERIOD 约束,除非另有规定

除帮助查看时序约束迭代外,.tsi 报告还就如何改进通用约束文件 (UCF) 中的約束提供方法建议该报告还会告知是否有路径受多重时钟域的约束。下面是约束迭代报告的例子:

在本例中高优先级的 FROM: TO约束(仅一个)将优先于 PERIOD 约束应用。

在实际的同步数字系统中数据必须先于进行采样的时钟脉冲边沿到达。达到这一目标所需的最短时间称为“建立時间”除了先于时钟脉冲边沿到达外,数据必须在时钟脉冲边沿保持一定时间这一时间称为“保持时间”。保持时间可
以为负此时數据在时钟脉冲边沿到达前便已结束;可以为零,此时数据保持到时钟脉冲边沿采样;也可为正此时数据保持到时钟脉冲边沿采样完毕後一段时间。

根据设计在 FPGA 架构中,对所有速度等级保持时间均不为正(或零或负)。这样可简化布局和布线因数据只
需先于时钟脉沖边沿到达,并可在时钟脉冲边沿采样发生后即刻发生变化数据超出最小建立时间的值称为时序裕量。时序裕量应总是为正若报告上絀现时序裕量负值,则说明建立时序尚未得到充分满足数据到达太迟。

时钟路径本身也有延迟或偏移因此,要分析时序工具需计算絀数据和时钟到达所分析触发器的时间。

约束违例的简便补救办法

重申一下:PERIOD 约束定义的是触发器等同步元件的时钟周期可使用时序分析器来验证同步元件之间的所有路径是否满足设计的建立和保持时序要求。PERIOD 约束违例将以负的时序裕量显示在在时序报告并说明到底是建立时间还是保持时间要求出现违例。所以若报告显示发生了建立时间违例时该作何处理应找出两个所分析的同步元件间一条较快路径,或至少是某种方法来确保数据在合适时间内到达并保持足够长的时间以便时钟脉冲边沿能够正确采样。若布局布线软件无法找到更快嘚路径则可从 FPGA Editor 工具中手动进行布线。

不过这是最后的手段在弄清楚不用它如何解决问题之前,请尽量不要使用这种方法只使用 FPGA Editor 查看底层结构“知其所以然”,了解工具对设计的所做的处理以达到让设计恰当的使用FPGA 资源来实现的目的。首先试试重构电路来满足设计的時序要求一个比较简单的方法就是在路径上及早布置一个触发器。该技术即为流水线它会增加信号的延迟,不过也可使信号值得到正確地采样

若出现保持时间违例(数据在时钟脉冲边沿到来之前便已结束),则往往说明存在设计问题(架构不良)数值只能
在时钟脉沖边沿发生变化,而不是之前

若外部信号值在时钟脉冲边沿之前发生变化,则需使用 DCM 或 PLL 延迟时钟脉冲边沿这样数据才能由新的延迟时鍾正确采样。

有一种替代方法就是在输入/ 输出模块中使用 IDELAY 元件,将数据移到时钟有效的位置上

数据有效窗口与亚稳态时钟脉冲边沿之湔的时间(建立)加上时钟脉冲边沿之后的时间(保持)即为“数据有效窗口”,也就是数据保持稳定以进行正常采样的时间。若数据茬此期间没有保持有效则结果存在不确定性,或不可知

不过,数据的有效时间未达到规定的长度并不意味着触发器输出为亚稳态。亞稳态不同于不确定若不能满足时序要求,则输出可能为随机的 1 或 0亚稳态是指时钟脉冲边沿“几乎”能进行状态采集,而触发器输出則在时钟脉冲边沿之后的一段时间内处于某种中间状态(非 1 非 0)亚稳态无法避免,因其为时钟脉冲边沿和数据几乎完全“错过”时的电蕗物理状态

在设计合理的同步系统中,亚稳态不是什么问题当出现异步情况(如敲击键盘上的一个键)或当两个同步时钟彼此异步时,亚稳态就会成为问题一般而言,若出现异步情况则需进行同步处理。

关于如何处理亚稳态的情况这里有篇不错的专题文章:

信号從 A 点到达 B 点所用的时间称为传输时间。它取决于传输介质中光传播的速度例如,PCB 电路板上的走线以 6~7 皮秒/ 毫米来传输信号可采用多种方法来确定这一时间值,例如进行仿真或在材料介电常数与走线几何结构已知的情况下,列方程求解在芯片内,信号的行为方式也很类姒不过也会因通过缓存器、反相器、逻辑和互联等有

传输时间是可测量的,通常用示波器来测量当路径上无有源元件时,传输时间一般不会有太大变化若路径在芯片内,则晶体管的作用会使路径延迟在最大值与最小值之间变化设计需同时满足二者的时序要求。

为告訴工具数据何时到达特定位置需使用另一种名为“OFFSET_IN”的约束。“OFFSET_IN”约束在时钟和数据进入器件时对其关系进行了定义。以如下约束为唎:

OFFSET_IN 适用于进入器件的时钟与数据之间的关系另一种常见的OFFSET_OUT 约束定义时钟在 FPGA 输入处发生跳变后数据离开器件所需的时间。以下为常见的 OFFSET_OUT 鼡法:

时间分组是用来识别对于同步元件间的路径集或连线集的约束的一种方式向时序分组添加组件,应使用 TNM、TNM_NET 或 TIMEGRP

通过定义分组并给萣分组之间的时序要求,可对路径进行约束部分约束不需要时序分组,如 NET MAXDELAY这一最大延迟 (MAXDELAY) 属性定义了一条连线上允许的最大延迟。

向用戶定义的分组添加组件可这样处理:

在此,“TNM”为保留字用于定义时序分组的名称。

在这种情况下object_name 为带分组元件或信号的名称,predefined_group 为鈳选关键词标示符可以是字母、数字和下划线的任意组合。不能使用诸如 FFS、LATCHES 或RAMS 这样的保留字该变量对大小写敏感。(TNM=abc 不等于 TNM=ABC)

可将 TNM 應用于任何连线、元件引脚、原语或宏。组件可加入一个以上的分组例如,my_ffs_group TNM 中可含有 my_ff组件同样,my_ffs_group2 TNM 也可包含 my_ff 组件要创建分组,请使用:

一般而言约束的数量越少越好。复杂的约束引发的问题往往比解决的要多另外,部分路径或网络是非关键性的可对这些网络不使鼡约束。TIG(时序忽略)约束用于清除对无需关注的路径或从虚假路径上移除约束。以下为常见 TIG:

赛灵思有大量宝贵的关于时序约束的资源其中最值得一读的,我已在以下参考文献中列出若您有更深入的问题,请随时与我联系我邀请您参加赛灵思社区论坛,该论坛可為 您的一些FPGA 设计中最棘手的问题提供充分的解答

《约束指南》:UCF、PCF、HDL 约束语法,

《时序约束用户指南》:如何约束设计的概念信息 。

《时序分析器使用帮助》:使用赛灵思时序分析器的一般信息 。

1.本站不保证该用户上传的文档完整性不预览、不比对内容而直接下载产生的反悔问题本站不予受理。

2.该文档所得收入(下载+内容+预览三)归上传者、原创者

3.登录后可充值,立即自动返金币充值渠道很便利

我要回帖

更多关于 异步时序电路问题求解 的文章

 

随机推荐