一直以来,我都认为时序问题很难解决。原因有四:一是时序问题神出鬼没,可重现性差;二是调试时序问题缺乏有效的工具,定位难;三是有的时序问题很难解决,需要特殊处理;四是上述原因给我造成了一种思维上的障碍,不到万不得已,不去考虑时序问题,总要反复论证后才设想出现了时序问题。以上四个原因导致时序问题调试周期很长,而且很痛苦。 riple
“运行良好的电路都是相似的,有问题的电路各有各的问题”。 riple
设计良好的电路不会出现时序问题,原因有两点:一是设计者考虑周全,设计不但正确,而且考虑到了可能的时序变化,设计无懈可击;二是电路本身具有一定的鲁棒性,可以容忍一定限度的时序变化。这是“怎样避免时序问题”的问题,属于事前预防。 riple
时序问题之所以会出现,原因也有两点:一是设计违反了时序要求,设计本来就是错误的;二是特定电路对于特定时序具有一定的敏感性,外部条件稍有变化,电路正常运行的条件就会被干扰。这是“怎样定位和解决时序问题”的问题,属于事后补救。 riple
应对时序问题需要预防和补救相结合。 riple
如果所有设计都是同步的,我们的生活该是多美好啊! riple
为了避免出现时序问题,最可靠的方法是采用同步设计,由于同步设计方法可以很容易的进行时序约束(即保证寄存器的建立保持时间),布局布线工具可以明确优化的目标,只要最终实现的电路通过了时序分析,并且有一定的运行余量,就不会出现时序问题。 riple
但是实际的设计往往不这么简单,大量存在的情况是FPGA芯片需要和外部芯片连接,在接口处存在时序问题;在某些情况下,FPGA内部被划分为多个时钟域,在信号穿越时钟域边界时存在时序问题。遇到这样的情况,需要设计者格外小心,严格遵守芯片的时序参数,严格遵守跨时钟域处理方法,采用一些特殊的但不是不规范的处理。除了步步为营,别无捷径。 riple
定位已经出现的时序问题,需要大量的时间和精力的投入,大胆假设、小心论证的过程是必不可少的,百折不挠、永不言败的精神也是必需的。 riple
定位后解决时序问题,也需要步步为营,采用特殊的但不是不规范的处理。 riple
“你好,时序问题,好久不见啊!” riple
从自己的错误中学习,这是高中英语老师教给我的方法。在经验不足、项目开发时间紧的情况下,出现时序问题是在所难免的,对于防不胜防的时序问题,学习和积累有效的解决方法是我们这些逻辑设计新手需要注意的。从实践中学习,只有多遇到、多解决时序问题,才能逐渐认识时序问题的本质,才能在设计早期加以预防。 riple
所以,遇到时序问题不要难过,这是一个认识自己设计思路上存在的缺陷的好机会;遇到非常棘手的时序问题更要高兴,这是一个提升能力、积累经验的好机会。 riple
以前,由于做的项目少,要么是在别人做好的项目上小修小补,遇到的多是逻辑问题;要么接口的芯片时序要求比较宽泛,不需要特殊处理也能过得去。近来,随着接触的项目越来越多,遇到和解决的时序问题也逐渐多了起来,先前对时序问题的畏难情绪也逐渐减弱了,随之而来的是对于时序问题理性的认识和解决的信心。 riple
记得上一次出现时序问题是9个月前,解决那个问题用了我一个月的时间。中间多次反复,时好时坏。那是令人难忘的一个月。 riple
最近的一个项目临近结尾时,又出现了时序问题,先是一个短期重现的,接着就是一个长期重现的。解决这两个问题用了大约两周时间。 riple
在接下来的几篇文章里,我就谈谈遇到的这几个时序问题和具体的解决方法。 riple
用户1335338 2010-3-7 22:10
用户131284 2008-7-26 10:36
用户60965 2006-10-25 16:08
很不错,谢了
用户65770 2006-10-25 15:13
不错的资料,收藏一下。