riple

Stay Hungry, Stay Foolish.

“你好,时序问题,好久不见啊!”

0
阅读(2207)

一直以来,我都认为时序问题很难解决。原因有四:一是时序问题神出鬼没,可重现性差;二是调试时序问题缺乏有效的工具,定位难;三是有的时序问题很难解决,需要特殊处理;四是上述原因给我造成了一种思维上的障碍,不到万不得已,不去考虑时序问题,总要反复论证后才设想出现了时序问题。以上四个原因导致时序问题调试周期很长,而且很痛苦。

“运行良好的电路都是相似的,有问题的电路各有各的问题”。

设计良好的电路不会出现时序问题,原因有两点:一是设计者考虑周全,设计不但正确,而且考虑到了可能的时序变化,设计无懈可击;二是电路本身具有一定的鲁棒性,可以容忍一定限度的时序变化。这是“怎样避免时序问题”的问题,属于事前预防。

时序问题之所以会出现,原因也有两点:一是设计违反了时序要求,设计本来就是错误的;二是特定电路对于特定时序具有一定的敏感性,外部条件稍有变化,电路正常运行的条件就会被干扰。这是“怎样定位和解决时序问题”的问题,属于事后补救。

应对时序问题需要预防和补救相结合。

如果所有设计都是同步的,我们的生活该是多美好啊!

为了避免出现时序问题,最可靠的方法是采用同步设计,由于同步设计方法可以很容易的进行时序约束(即保证寄存器的建立保持时间),布局布线工具可以明确优化的目标,只要最终实现的电路通过了时序分析,并且有一定的运行余量,就不会出现时序问题。

但是实际的设计往往不这么简单,大量存在的情况是FPGA芯片需要和外部芯片连接,在接口处存在时序问题;在某些情况下,FPGA内部被划分为多个时钟域,在信号穿越时钟域边界时存在时序问题。遇到这样的情况,需要设计者格外小心,严格遵守芯片的时序参数,严格遵守跨时钟域处理方法,采用一些特殊的但不是不规范的处理。除了步步为营,别无捷径。

定位已经出现的时序问题,需要大量的时间和精力的投入,大胆假设、小心论证的过程是必不可少的,百折不挠、永不言败的精神也是必需的。

定位后解决时序问题,也需要步步为营,采用特殊的但不是不规范的处理。

“你好,时序问题,好久不见啊!”

从自己的错误中学习,这是高中英语老师教给我的方法。在经验不足、项目开发时间紧的情况下,出现时序问题是在所难免的,对于防不胜防的时序问题,学习和积累有效的解决方法是我们这些逻辑设计新手需要注意的。从实践中学习,只有多遇到、多解决时序问题,才能逐渐认识时序问题的本质,才能在设计早期加以预防。

所以,遇到时序问题不要难过,这是一个认识自己设计思路上存在的缺陷的好机会;遇到非常棘手的时序问题更要高兴,这是一个提升能力、积累经验的好机会。

以前,由于做的项目少,要么是在别人做好的项目上小修小补,遇到的多是逻辑问题;要么接口的芯片时序要求比较宽泛,不需要特殊处理也能过得去。近来,随着接触的项目越来越多,遇到和解决的时序问题也逐渐多了起来,先前对时序问题的畏难情绪也逐渐减弱了,随之而来的是对于时序问题理性的认识和解决的信心。

记得上一次出现时序问题是9个月前,解决那个问题用了我一个月的时间。中间多次反复,时好时坏。那是令人难忘的一个月。

最近的一个项目临近结尾时,又出现了时序问题,先是一个短期重现的,接着就是一个长期重现的。解决这两个问题用了大约两周时间。

在接下来的几篇文章里,我就谈谈遇到的这几个时序问题和具体的解决方法。

一、FPGA 与外部芯片的同步接口产生的时序问题

二、FPGA 与外部芯片的异步接口产生的时序问题

三、FPGA 驱动信号的噪声对外部芯片的干扰导致的时序问题

Baidu
map