分析FPGA设计中的毛刺现象
分析FPGA设计中的毛刺现象
在FPGA的设计中,毛刺现象是长期困扰电子设计工程师的设计问题之一,是影响工程师设计效率和数字系统设计有效性和可靠性的主要因素。由于信号在FPGA的内部走线和通过逻辑单元时造成的延迟,在多路信号变化的瞬间,组合逻辑的输出常常产生一些小的尖峰,即毛刺信号,这是由FPGA内部结构特性决定的。毛刺现象在FPGA的设计中是不可避免的,有时任何一点毛刺就可以导致系统出错,尤其是对尖峰脉冲或脉冲边沿敏感的电路更是如此。
因此,克服和解决毛刺问题对现代数字系统设计尤为重要。本文从FPGA的原理结构的角度探讨了产生毛刺的原因及产生的条件,在此基础上,总结了多种不同的消除方法,在最后结合具体的应用对解决方案进行深入的分析。
毛刺产生的原因
以图1的例子分析毛刺产生的起因:图1是一个3位同步加法计数器,当使能端为高电平时,在每个时钟上升沿时刻,QA,QB,QC从000逐步变到111,进入到全1状态后,进位输出端输出半个时钟脉冲宽度的高电平,但从图2仿真结果中可以看到在011变化到100时刻ROC出现了尖脉冲,即毛刺。
FPGA芯片是由可构造的输入输出块(Input/OutputBlock,IOB)、可构造逻辑块(CinfigurableLogicBlock,CLB)和可编程连线资源(ProgrammableInterconnectArray,PIA)3种可构造单元构成的。IOB位于芯片内部四周,在内部逻辑阵列与外部芯片封装引脚之间提供一个可编程接口,他主要由逻辑门、触发器和控制单元组成。CLB组成了FPGA的核心阵列,能完成用户指定的逻辑功能;每个CLB主要有一个组合逻辑、几个触发器、若干个多选一电路和控制单元组成;PIA位于芯片内部的逻辑块之间,经编程后形成连线网络,用于芯片内部逻辑间的相互连接,并在他们之间传递信息。从图3中可以看出,对于不同的输入1、2,到逻辑块(M)的走线可能是不同的,这就造成了输入信号的延迟,假设1、2同时变化,由于延迟的存在,到达M时就有先有后(这种现象称为竞争),在逻辑输出端就可能会有险象(也称冒险),即产生了毛刺。在上述例子中的011状态,假设QA与QB同时从1变化到0,而QC提前了2ns从0变到1,产生一个2ns的高电平,这就是毛刺。也就是说,在FPGA设计中,毛刺产生的根本原因是信号在芯片内部走线时产生的延迟。
毛刺产生的条件
借助同样的例子来分析毛刺产生的条件。QA,QB,QC在每一个时钟上升沿同时发生翻转,但实际中由于延迟的存在,并不能保证QA,QB,QC到D触发器的布线长短一致。如果QC比QA,QB提前了2ns,这就形成了2ns的全1状态,称为“假象全1”,进而导致进位输出产生一个尖脉冲。值得注意的是,在3变到4即011到100时,3位中有2位同时发生翻转,即在同一时刻有大于一个的信号发生改变。由于延迟的作用,多个信号到达终点的时间有先有后,形成了竞争,由竞争产生的错误输出就是毛刺。所以,毛刺发生的条件就是在同一时刻有多个信号输入发生改变。