和所有的数字电路一样,毛刺也是FPGA电路中的棘手问题,它的出现会影响电路工作的稳定性,可靠性,严重时会导致整个数字系统的误动作和逻辑紊乱。
信号在FPGA器件中通过逻辑单元连线时,一定存在延时。延时的大小不仅和连线的长短和逻辑单元的数目有关,而且也和器件的制造工艺、工作电压、温度等有关。另外,信号的高低电平转换也需要一定的过渡时间,由于存在这两方面的因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号就是“毛刺”。任何组合电路,反馈电路和计数器都可能。
潜在的毛刺信号发生器。
电路布线长短不同造成各端口输入信号延时不一致,有竞争冒险,会产生毛刺。分立元件之间存在分布电容和电感可以滤掉这些毛刺,所以用分立元件设计电路时,很少考虑竞争冒险和毛刺问题,但PLD/FPGA内部没有分布电容和电感,不能滤掉任何毛刺(哪怕不到1ns)。
举个简单的例子:

设计的一个二输入与门,output<=A & B;进行布局布线后仿真(此时没有加管脚约束文件)可看到:

output_obuf_2处有一毛刺出现。毛刺高电平时间维持141ps.


从output_obuf到output输出处,虽消除了毛刺,但不能保证其它情况下都会消除,我想有可能是此处毛刺时间比较小的原因,所以才有output处输出是正常的。
首先毛刺的出现是由于输入端A由1到0和B由0到1的变化引起的。

从静态时序文件中可以看到:A,B到达与门的时间相差141ps,这也正是上述中出现毛刺的原因。
下面将管脚约束文件加进去再进行后仿真:

可看出此时output输出有明显的毛刺出现。
时序分析报告:

对于信号A:(Trace delay of A)+AND gate internal delay=9.139ns;
对于信号B:(Trace delay of B)+AND gate internal delay=5.607ns;
即A和B到达与门的时间相差了3.532ns,下图显示毛刺的时间即正好相符。

毛刺并不是对所有的输入都有危害,如触发器的D输入端,只要数据不出现在时钟的上长升沿,并满足数据的建立保持时间,就不会对系统造成危害,而当毛刺信号成为系统的启动信号,控制信号,握手信号,触发器的清零信号,预置信号,时钟信号,或锁存器的输入信号时就会产生逻辑错误。因此,判断逻辑电路中是否存在冒险以及如何避免冒险是设计人员必须考虑的问题。 |