对于电子工程师来说,毛刺是数字电路设计中存在的麻烦问题,它的存在会影响电路工作的稳定性个可靠性,严重时甚至会干扰到整个数字电路系统的误动作和逻辑运行。所以工程师是如何来消除数字电路的毛刺问题?
1、在输出端增加D触发器
这是工程师普遍使用的传统解决方法,原理上是用一个D触发器去读带毛刺的信号,利用D触发器对输入信号的毛刺不敏感的特点,去除信号中的毛刺,在简单逻辑电路处理效果明显,但若毛刺信号发生在时钟信号的跳变沿,D触发器的效果大打折扣(经过D触发器后的输出仍有毛刺),除此之外,D触发器的缺点是延时,特别是在系统级数较多的情况下,延时也将更严重,因此若是采用D触发器去除毛刺,一定要视情况而定。
2、信号同步法
设计数字电路时采用同步电路可大大减少毛刺,这是由于大多数的毛刺较短,只要毛刺不出现在时钟跳变沿,毛刺信号无法对系统造成影响,所以只要在整个系统中用同一个时钟即可实现系统同步,但时钟信号在FPGA器件中传递是有延时的,我们无法预知时钟跳变沿的精确位置,也就无法保证在某个时钟的跳变沿读取的数据是稳定的,尤其是在多级设计中,所以做到真正的“同步”才是关键,方法如下:
①信号延时同步法
信号延时法,原理是在两极信号传递的过程中加一个延时环节,从而保证在下一个模块中读取到的数据是稳定的,不包含毛刺信号,需要注意的是,这里所指的信号延时可以是数据信号的延时,也可以是时钟信号的延时。
②状态机控制
使用状态机也可实现信号的同步和消除毛刺的目的,在数据传递比较复杂的多模块系统中,由状态机在特定的时刻分别发出控制特定模块的时钟信号或模块使能信号,状态机的循环控制即可使整个系统协调运作,同时减少毛刺信号,那么只要在状态机的出发时间上加以处理,即可避免竞争毛线,从而抑制毛刺的产生。
3、格雷码计数器
对于一般的二进制或十进制计数器,在计数时,将有多位信号同时跳变。举个例子,一个3bit二进制计数器,从“111”转变到“000”时,必将产生毛刺,此时使用格雷码计数器将避免毛刺的出现,因为格雷码计数器的输出每次只有一位跳变。