举例解释竞争,冒险,D触发器,D锁存器
一. 竞争与冒险
竞争和冒险存在于组合逻辑电路,在实际电路中由于信号经过门电路有传输延迟,那么就有可能出现竞争,冒险现象。
什么是竞争,在一个组合电路中当某一个信号经过两条以上的路径到达一个汇合点,由于每条路径上传输延迟不同,那么到达汇合点的时间就有先有后,这一现象叫做竞争,这里我们也称作逻辑竞争。下面以逻辑电路图举例,如下图。
通过逻辑电路图可以看出,输入变量A一端连接G1,经过G1逻辑门的延迟后到达G2逻辑门的输入端,而另一端直连G2的输入端,因此我们可以说信号A经过两条路径分别到达G2,且这两个信号到达的时刻有先有后,那么这个现象就称作逻辑竞争。
所谓冒险,就是在出现竞争现象的组合电路中,当某个输入变量出现瞬时性突变,使得输入与输出的逻辑关系或功能遭到短暂破坏,在输出端出现本不该有的尖脉冲,那么这一现象也叫做冒险,在这里我们称之为逻辑冒险。
根据上面的电路图列出真值表,L= A *(~ A) ,按照理想情况,输出L是不可能为1的。下面我们分别给出理想状态的波形图(左)和实际状态的波形图(右)。
如上图,tp就相当于经过一个逻辑门的延迟,初始A和(!A)都是低电平,当A拉高后(!A)在tp延迟后才变低,这就出现了两个信号都为高电平的时间。从右图中还可以看出两处虚线都出现 了逻辑竞争现象,而L只在第一处虚线出现错误输出1,第二处输出仍然为0。因此我们有以下结论,上图中出现竞争现象的原因是G1非门的传输延迟,但是有竞争的地方不一定有冒险。
上述电路从整体来看,输入信号只有一个A信号,以此引发的竞争和冒险现象我们称之为逻辑竞争和逻辑冒险,当多个变量经过两条以上的路径到达输出端时,此时出现的竞争称之为功能竞争,随之也就有功能冒险。
消除功能冒险的方法一般是增加选通信号或者增加滤波电容滤除毛刺,至于用verilog设计代码时如何消除或者较好的避免竞争现象,一般采用同步电路设计的方法,所有触发器在同一时钟下动作,理论上认为消除了竞争,然而实际设计的同步时序电路也存在物理上的延迟,需要用到一些时序约束的技巧尽量去满足触发器的建立时间和保持时间,目前还没有系统的学习到,后面再分享。
二. D触发器和D锁存器
首先我们应该了解什么是时序电路,时序电路中的输出不仅与该时刻的输入有关也与之前时刻的输入信号有关,时序电路是具有记忆功能的。时序电路一般包括两部分,一部分就是组合逻辑电路,一部分就是用来保存输入信息的存储电路。常用的存储电路有两类,一类是锁存器,一类是触发器。
锁存器(Latch)是数字电路中一种具有记忆功能的逻辑元件。锁存器对脉冲电平敏感的存储单元电路,它只在输入脉冲的高电平(或低电平)期间对输入信号敏感并改变状态。在数字电路中可以记录数字信号“0”和“1”。
触发器(Flip-Flop)也是数字电路中的一种具有记忆功能的逻辑元件。触发器对脉冲边沿敏感的存储单元电路,它只在触发脉冲的上升沿(或下降沿)瞬间改变其状态。在数字电路中可以记录数字信号“0”和“1”。
其实通过上面的解释可以看出锁存器和触发器的逻辑功能相同,只是触发方式不同,因此下面给出两个波形图来比较一下D锁存器(左图),D触发器(右图)。
其中C是控制信号,D是输入信号,Q是输出信号。左图中可以看到,当控制信号高电平有效时,Q跟随D变化,其中的空翻现象属于系统的误动作,它使得时序电路不能按照时钟节拍工作,为了解决这一问题就设计出了触发器。在D触发器的波形图中可以看到Q只在控制信号的上升沿跟随一次D,之后保持不变,等待下一个控制信号的上升沿再次触发。这样的话就可以较好的避免无用的毛刺信号以影响电路正常的逻辑输出。
为了后面FPGA时序约束的学习必须从基础学起,而且必须清楚相关的硬件的知识,做到心中有电路,设计代码就不愁没思路。后面再学再分享,主要是FPGA偏向LED或时序约束的知识。
文章学习整理自书籍《HELLO FPGA》