TIMING_02 浅谈时序约束与时序分析

版权声明:本工作室所有博客均为原创,转载请说明出处! https://blog.csdn.net/qq_33486907/article/details/89392630

         由于该系列文章阅读有顺序性,所以请跳转至该系列文章第一篇从头开始阅读,并按照文章末尾指示按顺序阅读,否则会云里雾里,传送门在此:  https://blog.csdn.net/qq_33486907/article/details/89380368   《TIMING_01 时序约束与时序分析引导篇》
 

目录

 

1 时序约束与时序分析

1.1 保证数字电路的正确性

1.2 对时序理解容易出现的误解

1.3 FPGA与FPGA构成的系统

1.4 时序约束和时序分析的关系


1 时序约束与时序分析

         时序分析与时序约束一直以来都是数字电路设计中的重点和难点,即便一个数字电路功能设计的再好,如果实现时存在时序违规,其结果也是失败的。时序违规的背后其实是版图原理与实际电路工艺之间的矛盾,即现有电路工艺无法满足版图原理的时序性能;

        如何解决这个问题呢? 方法很明显:(1)优化版图设计,在不改变电路功能的前提下,优化版图时序性能; (2)改善电路工艺,以满足电路设计的时序性能;

       优化版图设计肯定比改善电路工艺的难度低,每一代电路工艺的进步,都需要大量的投入,尤其是在制成工艺进入7nm的时代,研发新的工艺不论是投入还是技术难度都越来越大。

1.1 保证数字电路的正确性

要保证数字电路设计的正确性其实要从两个方面去考虑:(1)功能设计的正确性;(2)时序的正确性; 前者是功能要求后者则是性能要求,设计时往往考验设计者的经验和能力,设计功能时没有加入对性能的考虑,容易导致设计失败;所以要保证数字电路的正确性不仅仅是要保证功能的正确性,同时也要保证时序的正确性;

1.2 对时序理解容易出现的误解

        数字电路绝大多数都是以时序逻辑电路存在的,纯组合逻辑电路是很少的使用的,这里举一个例子说明;

        使用硬件描述语言代码编写一个UART(异步串口)的电路代码,设计流程走完以后就可以上板进行调试了,如果发现通信有问题,脑海中浮现的第一个想法“是不是时序设计的不正确?”。

        其实这个“时序对不对?”这个说法是有问题的,对于设计的电路来讲,UART能不能完成通信严格来讲是属于功能要求,正确的说法是设计是否满足了UART的协议(比如波特率、起始位、停止位、数据采集、数据接收逻辑处理是否正确);

       “时序对不对?”这句话的正确理解应该是,对于用硬件描述语言设计的这个时序电路是否能在所要求性能的硬件环境下正常运行,而这个问题如果是使用正确的设计流程中,在时序约束和时序分析阶段就应该知道答案,而不是等到上板调试后再来提出这个问题;

         讲到这里,可能又会提出一个疑问,例如一个使用了SPI总线芯片,芯片手册的时序图上也给出了很多关于SPI总线的时序参数,如果这个设计的不对,能不能称之为“时序对不对?” ,其实这个问题要分对象去看,对象不同说法不同。硬件描述语言描述的电路与SPI总线芯片进行通讯:(1)对于SPI总线芯片,时序图上标注的时序参数,实际上是SPI总线芯片对时序性能的要求;(2)而对于硬件描述语言描述的电路,这些时序参数实际上只是逻辑功能的要求罢了,为了去满足SPI总线芯片对时序性能的要求,硬件描述语言描述的电路会考虑如何去满足下游芯片的时钟周期、建立保持时间、数据采样和数据发送的恰当时机,这些时序参数要求与SPI总线协议一起都是对硬件描述语言描述的电路的功能要求;

        当然还有一种情况就是外围芯片与硬件描述语言设计的电路是在同一时钟域时,外围芯片的时序要求也自然成为了硬件描述语言的时序要求,可以把这样的一个系统看作是一个整体去看待,很明显以上举的两个例子都不是属于这种情况。

         以上观点仅代表个人观点,特此在这里提出可能误解的地方。

1.3 FPGA与FPGA构成的系统

        前面的做了很长的内容铺垫,其实就为了能引出FPGA,FPGA与FPGA构成的系统仍然是数字电路的范畴,文章后续也是以FPGA与FPGA构成系统的时序约束与时序分析为主要内容,别的范畴在本文内容里也不在做过多的讨论;

         自XILINX推出VIVADO和7系列FPGA以来,时序约束的文件从ISE的.UCF变成了业界标准的.XDC,约束的方法也进行转变,对于FPGA开发者来说这是一件好事,因为Altera和XILINX两大平台的约束统一也就不在那么难了,可以说学会一个平台的约束,那么另一个平台你也就会了。(ISE的约束方式虽然方法不太一样,但原理是一致的,时序分析的内容也值得参考),本篇文章的内容将结合示例,将时序分析原理、时序约束、时序分析、约束流程等进行一次较为全面的讲解。

1.4 时序约束和时序分析的关系

        “好的时序性能是设计出来的,而不是约束出来的”;这句话是需要深刻体会一下的,为什么会这么说呢?

        下面先来了解一下,时序约束到底在整个研发流程中都干了什么?

        如图所示是vivado的界面,功能排布上是按照标准的设计流程排版的,这里简述一下FPGA的开发流程,设计输入 → 功能仿真(Simulation)→ RTL分析(RTL Analysis)→ 综合(Synthesis) → 实现(Implementation) ,具体如下图所示:

        当然这幅图中的约束文件还包含了物理约束,这里只讨论时序约束;

        时序约束通常在设计综合和设计实现里起作用。 在设计综合阶段,将优化过的RTL电路映射到FPGA的资源上,如何使用FPGA资源去映射才能更好的满足时序约束的条件,综合工具会尽力完成,同时在综合完毕以后会给出相应的时序报告; 在设计实现阶段,就是将综合阶段所映射的资源,在FPGA内部采用合适的布局和布线方式,来满足时序约束的条件;

        这里可以总结出时序约束的第一个目的:告诉EDA工具需要的时序性能,EDA工具会竭尽所能满足;  可以肯定的是时序约束会影响电路的映射和布局布线,但是工具所能改善毕竟有限的,如果设计很糟糕,工具竭尽所能也没有满足要求的时序性能,那么这时就应该去优化设计,而不是约束,约束则不是解决时序违例的根本办法。

        可能会提出另外一个问题,既然时序约束不能从源头解决时序违例问题,改善的作用很有限,那么为什么还要进行时序约束呢?  这就是时序约束的第二个目的:EDA工具会根据要求的时序性能,分析设计中的每一条时序路径是否满足要求,并告知不满足时序的路径,为优化设计提供依据,其实这个过程就是时序分析。  如果不进行时序约束,EDA工具将按照默认设置进行分析,能不能满足实际使用时的时序性能就不得而知了; 所以时序约束是时序分析的前提,没有约束就没有分析;

         简单总结时序约束的作用:

        (1)使EDA工具优化综合策略与布局布线,以满足时序约束条件; (2)为时序分析提供参考依据;

        第2条的作用往往比第1条的作用要大的多,在设计时序很紧张时,或许EDA工具的尽力,可以勉强使设计能正常工作,但是这样的设计鲁棒性很差(Robus),同时也不便于维护升级,后期即使一个很小的改动也会导致时序异常。但是好的设计就不会有这样的问题,好的设计可以通过以下几个方面获得保证:(1)设计者的经验;(2)良好的设计风格;(3)以时序分析工具分析结果为参考依据,通过优化设计解决所有关键路径的时序违例问题;所以“好的时序性能是设计出来的,而不是约束出来的”;

不要急着跑,干货在后面,下一篇文章传送门在此:

https://blog.csdn.net/qq_33486907/article/details/89393007

《TIMING_03 时序分析原理》

 

猜你喜欢

转载自blog.csdn.net/qq_33486907/article/details/89392630