FPGA/PLD 中毛刺问题
和可靠性有关的几个概念
建立时间和保持时间
图1
建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间, 如果保持时间不够,数据同样不能被打入触发器。 如图1。 数据稳定传输必须满足建立和保持时间的要求,当然在一些情况下,建立时间和保持时间的值可以为零。 PLD/FPGA开发软件可以自动计算两个相关输入的建立和保持时间(如图2)
竞争和冒险
几乎所有关于数字电路的教材,都会提到数字电路中的竞争和冒险问题,但是这个问题往往被我们忽略。我们可以先来回顾一下关于竞争和冒险的一些基本概念。
我们在使用分立元件设计数字系统时,由于PCB走线时,存在分布电感和电容,所以几纳秒的毛刺将被自然滤除,而在PLD内部决无分布电感和电容,所以在PLD/FPGA设计中,竞争和冒险问题将变的较为突出。
FPGA中的冒险现象
信号在FPGA器件内部通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、 工作电压、温度等条件的影响。信号的高低电平转换也需要一定的过渡时间。由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑 的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号称为"毛刺"。如果一个组合逻辑电路中有"毛刺"出现,就说明该电路存 在"冒险"。(与分立元件不同,由于PLD内部不存在寄生电容电感,这些毛刺将被完整的保留并向下一级传递,因此毛刺现象在PLD、FPGA设计中尤为突 出)
图6.21给出了一个逻辑冒险的例子,从图6.22的仿真波 形可以看出,"A、B、C、D"四个输入信号经过布线延时以后,高低电平变换不是同时发生的,这导致输出信号"OUT"出现了毛刺。(我们无法保证所有连 线的长度一致,所以即使四个输入信号在输入端同时变化,但经过PLD内部的走线,到达或门的时间也是不一样的,毛刺必然产生)。可以概括的讲,只要输入信 号同时变化,(经过内部走线)组合逻辑必将产生毛刺。 将它们的输出直接连接到时钟输入端、清零或置位端口的设计方法是错误的,这可能会导致严重的后果。 所以我们必须检查设计中所有时钟、清零和置位等对毛刺敏感的输入端口,确保输入不会含有任何毛刺
图6.21 存在逻辑冒险的电路示例
图6.22 图6.21所示电路的仿真波形
冒险往往会影响到逻辑电路的稳定性。时钟端口、清零和置位端口对毛刺信号十分敏感,任何一点毛刺都可能会使系统出错,因此判断逻辑电路中是否存在冒险以及如何避免冒险是设计人员必须要考虑的问题。
判断一个逻辑电路在某些输入信号发生变化时是否会产生冒险,首先要判断信号是否会同时变化,然后判断在信号同时变化的时候,是否会产生冒险,这可以通过逻辑函数的卡诺图或逻辑函数表达式来进行判断。对此问题感兴趣的读者可以参考有关脉冲与数字电路方面的书籍和文章。
如何处理毛刺
我们可以通过改变设计,破坏毛刺产生的条件,来减少毛刺的发生。例如,在数字电路设计中,常常采用格雷码计数器取代普通的二进制计数器,这是因为格雷码计数器的输出每次只有一位跳变,消除了竞争冒险的发生条件,避免了毛刺的产生。
毛刺并不是对所有的输入都有危害,例如D触发器的D输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害,我们可以说D触发器的D输入端对毛刺不敏感。 根据这个特性,我们应当在系统中尽可能采用同步电路,这是因为同步电路信号的变化都发生在时钟沿,只要毛刺不出现在时钟的沿口并且不满足数据的建立和保持时间,就不会对系统造成危害。 (由于毛刺很短,多为几纳秒,基本上都不可能满足数据的建立和保持时间)
以 上方法可以大大减少毛刺,但它并不能完全消除毛刺,有时,我们必须手工修改电路来去除毛刺。我们通常使用"采样"的方法。 一般说来,冒险出现在信号发生电平转换的时刻,也就是说在输出信号的建立时间内会发生冒险,而在输出信号的保持时间内是不会有毛刺信号出现的。如果在输出 信号的保持时间内对其进行"采样",就可以消除毛刺信号的影响。
有两种基本的采样方法:一种方法是在输出信号的 保持时间内,用一定宽度的高电平脉冲与输出信号做逻辑"与"运算,由此获取输出信号的电平值。图6.23说明了这种方法,采样脉冲信号从输入引 脚"SAMPLE"引入。从图6.24的仿真波形上可以看出,毛刺信号出现在"TEST"引脚上,而"OUT"引脚上的毛刺已被消除了.
图6.23 消除毛刺信号的方法之一
图6.24 图6.23所示电路的仿真波形
上 述方法的一个缺点是必须人为的保证sample信号必须在合适的时间中产生,另一种更常见的方法是利用D触发器的D输入端对毛刺信号不敏感的特点,在输出 信号的保持时间内,用触发器读取组合逻辑的输出信号,这种方法类似于将异步电路转化为同步电路。 图6.25给出了这种方法的示范电路,图6.26是仿真波形。
图6.25 消除毛刺信号方法之二
图6.26 图6.25所示电路的仿真波形
在仿真时,我们也可能会发现在FPGA器件对外输出引脚上有输出毛刺,但由于毛刺很短,加上PCB本身的寄生参数,大多数情况下,毛刺通过PCB走线,基本可以自然被虑除,不用再外加阻容滤波。
如 前所述,优秀的设计方案,如采用格雷码计数器,同步电路等,可以大大减少毛刺,但它并不能完全消除毛刺。 毛刺并不是对所有输入都有危害,例如D触发器的D输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害。因此我们可 以说D触发器的D输入端对毛刺不敏感。但对于D触发器的时钟端,置位端,清零端,则都是对毛刺敏感的输入端,任何一点毛刺就会使系统出错,但只要认真处 理,我们可以把危害降到最低直至消除。下面我们就对几种具体的信号进行探讨。
时钟信号
最关键的信号之一,有专门的论述,请参阅关于时钟问题的探讨
清除和置位信号
清除和置位信号要求象对待时钟那样小心地考虑它们,因为这些信号对毛刺也是非常敏感的。正如使用时钟那样,最好的清除和置位是从器件的引脚单直接地驱动。 有一个主复位Reset引脚是常用的最好方法,主复位引脚给设计项目中每个触发器馈送清除或置位信号。几乎所有PLD器件都有专门的全局清零脚和全局置 位。如果必须从器件内产生清除或置位信号,则要按照“门控时钟”的设计原则去建立这些信号,确保输入无毛刺。
若采用门控清除或者门控置位,则单个引脚或者触发器作为清除或置位的源,而有其它信号作为地址或控制线。在清除或复位的有效期间,地址或控制线必须保持稳定图4.2.13示出4个容许的清除和复位配置的实例。决不能用多级逻辑或包含竞争状态单级逻辑产生清除或置位信号。更详细的考虑见4.2.5节“竞争状态”。
组合逻辑输出
当PLD输出引脚给出系统内其它部分的边沿敏感信号或电平敏感信号时,这些出信号必须象内部时钟、清除和置位信号一样小心地对待。只要可能就应在PLD输出端寄存那些对险象敏感的组合输出。如果你不能寄存险象敏感的输出,则应符合“门控时钟”中讨论的门控时钟的条件。决不能用多级逻辑驱动毛刺敏感的输出。
异步输入信号
按照定义,异步输入不是总能满足(它们所馈送的触发器的)建立和保持时间的要求。因此,异步输入常常会把错误的数据锁存到触发器,或者使触发器进入亚稳定的状态,在该状态下,触发器的输出不能识别为l或0。如果没有正确地处理,亚稳性会导致严重的系统可靠性问题。
图4.2.14示出具有异步信号控制使能输入的二进制计数器。当使能输入违反计数;的建立时间或保持时间的约束条件时,计数器的每一位会有错误的动作。一 位在加法:数器而另一位在保持状态,造成计数器进入无效状态。此外,各位中的任何一位都可1变成亚稳定的,使电路的其它部分出现各种问题。
采用附加触发器同步使能信号的方法可保证不违反计数器的建立时间,从而解决可靠性的问题。图4.2.15示出一种同步化的方法。虽然同步触发器仍会感受到 亚稳性,但它在下一个时钟边沿之前是稳定的。通常,为在EPLD中避免亚稳性问题,决不能把一个异步信号输出到器件内两个或更多的触发器中。同步异步输入 的另一种方法示于图4.2.16。输入驱动一个触发器的时钟,该触发器的数据输入接到Vcc。这个电路对于检测短于一个时钟周期的异步事件是有用的。
寄存异步输入信号
亚 稳定状态。图4.4.10示出了一个具有异步输入的状态机。图乙4.10 带有异步输入的状态机图4.4。1l表明了如何通过增加输入寄存器,以确保满足状态机所要求的建立时间和保持时间。虽然增加的寄存器仍然要面对可能出现的 c违反建立和保持时间的现象,但是已防止状态寄存器进入亚稳态,状态机也不会进入未定义的状态。
posted on 2009-09-19 10:09 Homography Matrix 阅读(1064) 评论(0) 编辑 收藏 举报