如何正确的约束时钟

作者:Balachander Krishnamurthy

现在的硬件设计中,大量的时钟之间彼此相互连接是很典型的现象。为了保证Vivado优化到关键路径,我们必须要理解时钟之间是如何相互作用,也就是同步和异步时钟之间是如何联系。

同步时钟是彼此联系的时钟。例如,由MMCM或PLL生成的两个相同周期的时钟是典型的同步时钟。如果MMCM或PLL生成了不同周期的时钟,那么我们最好把他们当作异步时钟处理,需要用到相应的同步技术。你可以通过运行report_clock_interaction生成报告,然后看报告中的“Path Req (WNS)”列、“Clock Pair Classification”列和 “Clock Pair Classification”列可以容易的辨别出同步时钟。下面是3个场景,你需要使用合适的时钟约束处理异步时钟之间的关系。

1. 如果时钟互联报告有很多(或者一个)红色的"Timed (unsafe)" 或者还有桔色的"Partial False Path (unsafe)"方框,那你应该是没有正确地对异步时钟约束。如果你的设计中有大量的跨时钟域的异步时钟,那么你需要对那些时钟互联约束。

2. 在时钟互联报告中看"Clock Pair Classification" 和 "Inter-Clock Constraints"这两列。如果时钟对类型是"No Common Clock" 或者 "No Common Period"或者Inter-clock约束显示"Timed (unsafe)",就要把这种互联当作异步时钟。

3. 如果“Path Requirement (WNS)”列显示时序非常紧,典型的是小于1ns,或者“Inter-Clock Constraints”列标记为时序“Unsafe”,或者“Partial False Path (unsafe)”,那么你需要把这种时钟互联看作异步时钟。

如果“WNS Path Requirement (ns)”这一列的值是合理的(>1 ns), 并且"Inter-Clock Constraints”是满足的,同时,“Clock Pair Classification”是“干净”的,那么这样的时钟互联可以被看作是同步的,你不需要添加任何时序约束。时序工具会自动的把那些路径当作同步路径处理。

为了正确约束跨时钟域的路径,需要考虑以下4个方面:
1. 如果两个时钟之间没有路径,在两个时钟之间可以简单的使用set_clock_groups 或者set_false_path约束
2. 如果跨时钟域路径都是一位的,那么你可以在两个时钟之间使用set_clock_groups 或者 set_false_path。
3. 如果路径都是多位的路径,你需要考虑延迟和数据位的偏移,然后使用set_max_delay –datapath_only 和set_bus_skew约束。
4. 如果在两个时钟域之间存在单位和多位混合的跨时钟域路径,那么对于单位的跨时钟域路径要明确的对每一条路径设置伪路径来约束,对于多位的跨时钟域路径,使用set_max_delay –datapath_only 和 set_bus_skew约束。

如果时钟是同步的,不需要任何约束。vivado的静态时钟分析工具会自动的设定路径的时序。

作者简介:
Balachander Krishnamurthy是SDSoC的高级产品营销经理。 他负责赛灵思Vivado SDx设计软件的产品规划,营销执行等。 他拥有圣何塞州立大学电气工程硕士学位。 他曾在SUN系统公司和Altera工作多年,担任验证,RTL设计,首次芯片和电路板调试以及ASIC产品经理等多个角色。 他在GPU,CPU,ASIC和FPGA行业拥有超过17年的经验。 他目前的工作重点是关注FPGA的综合,实现和时序收敛设计。

原文链接:
https://forums.xilinx.com/t5/Vivado-Expert-Series-Blog/How-to-Constrain-...

声明:本文来源于Vivado Expert Series Blog,由创新网赛灵思中文社区编译,转载请注明作者、出处及原文链接