FPGA设计中毛刺信号及其消除
本帖最后由 fpgaw 于 2011-5-22 09:46 编辑在组合逻辑电路中,信号要经过一系列的门电路和信号变换。由于延迟的作用使得当输入
信号发生变化时,其输出信号不能同步地跟随输入信号变化,而是经过一段过渡时间后才
能达到原先所期望的状态。这时会产生小的寄生毛刺信号,使电路产生瞬间的错误输出,
造成逻辑功能的瞬时紊乱。在FPGA内部没有分布电感和电容,无法预见的毛刺信号可通过
设计电路传播,从而使电路出现错误的逻辑输出。
任何组合电路、反馈电路和计数器都可能是潜在的毛刺信号发生器。毛刺并不是对所有输
入都有危害,如触发器的D输入端,只要毛刺不出现在时钟的上升沿并满足数据的建立保
持时间,就不会对系统造成危害。而当毛刺信号成为系统的启动信号、控制信号、握手信
号,触发器的清零信号(CLEAR)、预置信号(PRESET)、时钟输入信号(CLK)
或锁存器的输入信号就会产生逻辑错误。任何一点毛刺都可能使系统出错,因此消除毛刺
信号是FPGA设计中的一个重要问题。毛刺问题在电路连线上是找不出原因的,只能从逻辑
设计上采取措施加以解决。消除毛刺的一般方法有以下几种:
(1)利用冗余项消除毛刺
函数式和真值表所描述的是静态逻辑,而竞争则是从一种稳态到另一种稳态的过程。因此
竞争是动态过程,它发生在输入变量变化时。此时,修改卡诺图,增加多余项,在卡诺图
的两圆相切处增加一个圆,可以消除逻辑冒险。但该法对于计数器型产生的毛刺是无法消
除的。
(2)取样法
由于冒险出现在变量发生变化的时刻,如果待信号稳定之后加入取样脉冲,那么就只有在
取样脉冲作用期间输出的信号才能有效。这样可以避免产生的毛刺影响输出波形。
(3)吸收法
增加输出滤波,在输出端接上小电容C可以滤除毛刺,如图3所示。但输出波形的前后沿
将变坏,在对波形要求较严格时,应再加整形电路,该方法不宜在中间级使用。
4)延迟办法
因为毛刺最终是由于延迟造成的,所以可以找出产生延迟的支路。对于相对延迟小的支路
,加上毛刺宽度的延迟可以消除毛刺。但有时随着负载增加,毛刺会继续出现,因而这种
方法也是有局限性的。而且采用延迟线的方法产生延迟更会由于环境温度的变化而使系统
变不可靠。
(5)锁存办法
当计数器的输出进行相"与"或相"或"时会产生毛刺。随着计数器位数的增加,毛刺的数量
和毛刺的种类也会越来越复杂。毛刺在计数器电路输出中的仿真结果如图4所示,从图中
可发现有毛刺出现。此时,可通过在输出端加D触发器加以消除。接D触发器后仿真结果
如图5所示。
从图5可以看到,数据中的毛刺被明显消除。当FPGA输出有系统内其它部分的边沿或电平
敏感信号时,应在输出端寄存那些对险象敏感的组合输出。对于异步输入,可通过增加输
入寄存器确保满足状态机所要求的建立和保持时间。对于一般情况下产生的毛刺,可以尝
试用D触发器来消除。但用D触发器消除时,有时会影响到时序,需要考虑很多问题。所
以要仔细地分析毛刺产生的来源和毛刺的性质,采用修改电路或其它办法来彻底消除。 6
页:
[1]