可以通过以下几种方法来消除毛刺:
1、输出加 D触发器
这是一种比较传统的去除毛刺的方法。原理就是用一个 D 触发器去读带毛刺的信号, 利用 D 触发器对输入信号的毛刺不敏感的特点,去除信号中的毛刺。在实际中,对于简单 的逻辑电路,尤其是对信号中发生在非时钟跳变沿的毛刺信号,去除效果非常的明显。
但是如果毛刺信号发生在时钟信号的跳变沿,D 触发器的效果就没有那么明显了(加 D 触发器以后的输出 q,仍含有毛刺)。另外,D 触发器的使用还会给系统带来一定的延时, 特别是在系统级数较多的情况下,延时也将变大,因此在使用 D 触发器去除毛刺的时候, 一定要视情况而定,并不是所有的毛刺都可以用 D 触发器来消除。
2、信号同步法 设计数字电路的时候采用同步电路可以大大减少毛刺。由于大多数毛刺都比较短(大
概几个纳秒),只要毛刺不出现在时钟跳变沿,毛刺信号就不会对系统造成危害了。因此一 般认为,只要在整个系统中使用同一个时钟就可以实现系统同步。但是,时钟信号在 FPGA 器件中传递时是有延时的,我们无法预知时钟跳变沿的精确位置。也就是说我们无法保证在 某个时钟的跳变沿读取的数据是一个稳定的数据,尤其是在多级设计中,这个问题就更加突 出。因此,做到真正的"同步"就是去除毛刺信号的关键问题。所以同步的关键就是保证在时 钟的跳变沿读取的数据是稳定的数据而不是毛刺数据。以下为两种具体的信号同步方法。
(1)信号延时同步法 信号延时法,它的原理就是在两级信号传递的过程中加一个延时环节,从而保证在下一
个模块中读取到的数据是稳定后的数据,即不包含毛刺信号。这里所指的信号延时可以是数 据信号的延时,也可以是时钟信号的延时。
(2)状态机控制 使用状态机也可以实现信号的同步和消除毛刺的目的。在数据传递比较复杂的多模块系
统中,由状态机在特定的时刻分别发出控制特定模块的时钟信号或者模块使能信号,状态机 的循环控制就可以使得整个系统协调运作,同时减少毛刺信号。那么只要我们在状态机的触 发时间上加以处理,就可以避免竞争冒险,从而抑制毛刺的产生。
3、格雷码计数器
对于一般的二进制或十进制计数器,在计数时,将有多位信号同时跳变。例如一个 3bit
二进制计数器,由’111’转换为’000’时,必将产生毛刺。此时,使用格雷码计数器将避免毛