FPGA工程师必备的技能(一):毛刺的产生原因及其消除办法

最近做项目做得有点头晕,没学好的矩阵来报复我来了。
之前有看过对于不同层次FPGA开发者的技术要求,于是决定新开一个系列从简单到困难逐个讲解FPGA工程师的必备技能。

第一期:数字电路稳定性

数字电路存在不稳定的原因,归根到底是“信号的传输速率是非理想的”这个原因造成的:因为温度、工艺、路径、逻辑门的各种影响,传输速率不是理想的,所以就会造成某些信号在我们想让他为高的时候它还是低,或者反之,进而就会影响数字电路的输出结果。

我们把出现了信号到达端口的时间不一样这种状况成为“竞争”,把它产生的输出错误的现象叫做“冒险”。竞争可能引起冒险

错误造成的输出信号,一般在电气特性上表现为高频率的尖脉冲信号,所以我们把它叫做毛刺
在这里插入图片描述
在组合时序电路和异步时序电路中我们经常能见到毛刺

①先说组合逻辑电路:

在这里插入图片描述

就拿与门举个例子,比如我们设定一个时间轴t,A,B初态皆为0,原本按照我的设计,A,B应该在5ns的时候同时翻转为1,那么Y也应该在t=5ns时从0翻转为1。但是由于A,B信号源存在差异,导致A比B提前2ns,那么我们的高电平起始时间就会变化,持续时间也会变化。

那么在组合逻辑电路中我们该如何消除毛刺呢?
在数电课程中我们书本上可能讲到过:
1.增加冗余项 2.输出端增加电容
首先这两个办法,其一,冗余项只能消除逻辑险象,不能消除功能险象,其二,增加电容会导致系统速度变慢。而且,在FPGA设计中,这两种办法显然是不可行的,所以我们要介绍另一种方法:

选通法:
在这里插入图片描述
也就是增加额外的选通脉冲,运用与门的结构来实现的数字开关,对输入或者输出信号进行管理,这样就从源头上防止了毛刺的产生。

②然后说一下异步时序电路中的毛刺:
在这里插入图片描述

产生原因:若多个状态寄存器同时变化,那么时序电路就已经处于竞争之中,而当电路最终的稳态与状态寄存器变化的先后次序有关,那么此时就已经产生了竞争了。

解决办法:
1.延迟元件法:直接让某个状态寄存器延迟,以达到我们想要的输出。这个方法没有直接解决毛刺问题,只是利用了竞争。
2.多次转移法:如果A->D有竞争,那么我们可以尝试A->C->D(此时两个步骤都没有竞争冒险存在)
3.改造为同步电路:经过刚刚两个方法,大家可能会理解:异步电路没办法做到真正意义上的毛刺消除,只能改造为同步电路才能处理毛刺问题。在ASIC中同步时序比异步时序占用的面积大,但是在FPGA中,电路面积意味着逻辑单元,这样的话,同步和异步电路的资源差不多,不会造成不可承受的浪费。

本期的介绍就到这里,谢谢观看。

猜你喜欢

转载自blog.csdn.net/weixin_43824941/article/details/108439816
今日推荐