1. 什么是竞争和冒险?
记得我刚学FPGA那会,恶补基础知识,其中之一就是竞争与冒险,我参考了《FPGA之道》,记录了几篇博客:
第一篇博客中写道了单输入组合逻辑,如下:
这个例子最简单,却最能说明什么是竞争,以及由竞争导致的险象,也即冒险。
输入为A先于not(A)A非到达或门,因此,如果初始令A为1,则NOT(A)为0,之后A变为0,则由于A先到或门,导致有一小段零脉冲出现在输出中,这是非预期的。
波形图如下:
当然,没人会无聊到设计这样的一个电路,但这个电路能说明一些大问题,后面我们会看到,但输入组合逻辑会产生竞争现象也被用来说明问题。
上篇博文中就讲到了多输入组合逻辑,多输入组合逻辑可以按如下方式分析:
多个输入不同时变化:若多个输入变化的间隔比较大,那么可以将其分解为若干个时刻,每个时刻有“多个输入同时变化”,“仅有一个输入变化”,然后再独立分析各个时刻即可;若这些输入变化间隔较小,那么可以将其等效转化为“多个输入同时变化”的问题,因为我们可以将这些输入变化的时间差等效折合到传输路径中的线延迟中去。
多个输入同时变化:
如下图:在多输入组合电路中,有两个及以上个输入变量同时发生了变化,虽然从输入决定输出的理论出发,组合逻辑的输出应该直接变化到新输入对应的输出值,但是由于延迟的存在,现实中情况往往并非如此。
如果A和B同时由A=0、B=1变化到A= 1、B= 0,在理想的情况下输出应该一直为0,但是正是有了线延迟,出现了如下非预期险象:
出现了一个短暂的高电平脉冲,也就是毛刺,这就是竞争导致的险象。
仅有一个输入变化:
如下图:
B和C都是固定值,仅有A变化,属于仅有一个输入变化,但是请看到,A变化后紧接着两个与门的结果会变化,再到达或门,这又变成了有多个输入同时变化问题了。
这篇博文深度剖析了什么是竞争的问题,原书作者独创性地提出了半开关的概念:
门电路的开关特性
下面提到的开关,开代表接通状态,关闭代表断开状态。
非门可以看做一个常开的开关,因此任意一个输入到非门的信号都会被取反输出。
与门具有开关特性,因为它至少由两个输入端,假设有L个输入端,那么如果L-1个输入端置1,那么对于剩下的一个输入端而言,该与门就相当于一个打开的开关,输出取决于最后一个输入端上的值。
如果其中一个输入端为0,那么对于其他L-1个输入端而言,该与门就相当于一个关闭的开关,无论其他输入端是什么,输出总是0.
或门同理!
门电路的半开关特性
非门不具有半开关特性,因为只有一个输入端。
与门具有半开关特性:当且仅当与门中有两个或以上的输入端都是由组合逻辑中的一个输入电信号直接或间接驱动时,称该与门具有半开关性,因为此时,与门的其他输入端(如果有)对该与门仍具有开关性。因此,对于一个具有半开关性的N输入与门来说,它可以等效为一个M(M小于等于N)