随着半导体技术的飞速发展,fpga(field programmable gate array)的计算能力、容量以及可靠性也有了很大的提高。它正以高度灵活的用户现场编程功能、灵活的反复改写功能、高可靠性等优点,成为数字电路设计、数字信号处理等领域的新宠。但和所有的数字电路一样,毛刺也是fpga电路中的棘手问题。它的出现会影响电路工作的稳定性、可靠性,严重时会导致整个数字系统的误动作和逻辑紊乱。因此,如何有效正确的解决设计中出现的毛刺,就成为整个设计中的关键一环。 本文就fpga设计中出现的毛刺问题,根据笔者自己的经验和体会,提出了几种简单可行的解决方法和思路,供同行供交流与参考。 fpga电路中毛刺的产生 我们知道,信号在fpga器件中通过逻辑单元连线时,一定存在延时。延时的大小不仅和连线的长短和逻辑单元的数目有关,而且也和器件的制造工艺、工作环境等有关。因此,信号在器件中传输的时候,所需要的时间是不能精确估计的,当多路信号同时发生跳变的瞬间,就产生了“竞争冒险”。这时,往往会出现一些不正确的尖峰信号,这些尖峰信号就是“毛刺”。另外,由于fpga以及其它的cpld器件内部的分布电容和电感对电路中的毛刺基本没有什么过滤作用,因此这些毛刺信号就会被“保留”并传递到后一级,从而使得毛刺问题更加突出。 可见,即使是在最简单的逻辑运算中,如果出现多路信号同时跳变的情况,在通过内部走线之后,就一定会产生毛刺。而现在使用在数字电路设计以及数字信号处理中的信号往往是由时钟控制的,多数据输入的复杂运算系统,甚至每个数据都由相当多的位数组成。这时,每一级的毛刺都会对结果有严重的影响,如果是多级的设计,那么毛刺累加后甚至会影响整个设计的可靠性和精确性。下面我们将以乘法运算电路来说明毛刺的产生以及去除,在实验中,我们使用的编程软件是quartus ii2.0,实验器件为cyclone ep1cf400i7。需要说明一点,由于示波器无法显示该整数运算的结果,我们这里将只给出软件仿真的结果。而具体的编程以及程序的下载我们在这里也不再详述,可以参考相关的文献书籍。 毛刺的消除方法 首先,我们来设计一个简单的乘法运算电路。运算电路如图1所示。
图 1 乘法运算运算电路及结果 |