FPGA时序要满足要求,这个基本原理大家基本都知道,但是如何使用VIVADO IDE工具进行时序设计、时序分析、判断时序是否满足要求,这个对很多FPGA工程师来说,还是比较抽象,因为时序分析的工具VIVADO IDE很多功能大家就不一定清楚,官方给的英文手册也无法通过清晰的脉络讲清楚。米联客希望通过自己学习整理的笔记给大家一定帮助。 在我们没有学习时序约束前,我们大部分设计都没有详细的时序约束,一般最多也只做个基本的全局时钟周期约束,但是为什么大部分情况代码都能正常运行呢?主要有几下原因: 1、VIVADO的默认策略:打开VIVADO的优化策略,可以看到非常多的策略,即便是我们不进行约束,软件也会采用默认的策略进行。如下图所示: 默认策略的好处是可以软件根据设置采取不同的策略去优化布局布线,坏处是很多时候该严格约束的没有严格起来,该放松的没有放松或者该忽略的没有忽略。毕竟软件不是人,现在还没进入AI时代呢?真正软件有那么牛的时候很多程序员就要事业了。 2、使用VIVADO自带的IP本身自己有写好的约束,如下图所示是一个PLL的IP里面包含了输入时钟约束:
这些都可以认为是软件默认的策略,有了软件默认的策略,可以最大程度让没有FPGA时序约束基础的FPGA程序员写的代码可以正常运行。但是,不一定是最优结果。 默认的策略,在很多情况下还会导致FPGA工程编译过慢,因为VIVADO IDE会产时去布局布线,完成一些不可能成功的事情。VIVADO IDE 只有当穷尽一些办法没有达到设计要求才会给出严重的waring告诉你这条线路存在问题。而有时候这可能是一个无关紧要的时序路径。 以下结合阅读XILINX 官方文档” ug903-vivado-using-constraints.pdf”为笔记,加上自己的理解,分享给大家关于时序约束方面时钟约束的知识,在具体的分析例子前,我们需要了解以下基本的时序约束概念方法,最后再结合几个例子消化这些方法。 1、定义时钟(Defining Clocks) 1)主时钟(Primary Clock) 2)虚拟时钟(Virtual Clock) 3)生成时钟(Generate Clock) 4)时钟组(Clock Groups) 5)时钟延迟、抖动、不确定性(Clock Latency,Jitter,Uncertainty)
2、IO延迟约束(Constraining I/O Delay) 1)输入延迟(Input Delay) 2)输出延迟(Output Delay)
3、时序异常(Timing Exceptions) 1)多周期路径(Primary Clock) 2)无效路径(Virtual Clock) 3)最大最小延迟(Generate Clock) 所以我们的时序篇内容理论部分分3个部分进行,最后通过2个demo来加深这些时序约束的理解和应用。 |
扫描关注,了解最新资讯