本来是准备花一次课(两个课时)好好讲讲这方面的内容的,实验课老师紧催慢催,花了不到一节课就过去了,感觉很多东西都来不及讲,借助这篇简述详细说说,希望对大家能有点帮助。
概述
前面的课程中,我们学习的都是理想情况,即:假设电信号经过线路和每个逻辑门电路时,没有延迟,在这一前提下,得到非常规整的波形图。然而,在现实中,这种情况是不可能存在的(否则,我们学完这门课就能造CPU了),信号经过线路和逻辑门都会有延迟。在IT界,任何分析只要加上时间(有些还会加上空间)这个维度,问题就很难解了,同样,数字电路中只要加上时间,其难度立马就难上一个级别,分析起来比较烧脑。
如果线路延迟和逻辑门的延迟,会有怎样的结果呢?
基本概念
先说基本概念。在组合电路中,同一信号或同时变化的某些信号,经过不同路径到达某一点的时间有先有后,这种现象称为竞争。
由于竞争而引起电路输出发生瞬间错误的现象称为险象(冒险)。表现为输出端出现了原设计中没有的窄脉冲,常称为“毛刺”。在组合电路中,“毛刺”不一定造成严重后果。但当组合逻辑与时序逻辑结合在一起时,险象就可能造成严重错误。特别是当组合逻辑的输出作为时序电路的使能输入时。
竞争是逻辑电路正常工作时也会出现的现象,有竞争的地方不一定会出现险象,而险象一定是竞争的结果。
引起错误输出的竞争称为临界竞争;没产生错误输出的竞争称为非临界竞争。
静态险象
下面以一个例子进行说明:
我们对这个例子进行分析,例子中假设经过线路没有延迟,经过每个门的延迟是一样的,均为td(其实已经很理想化了,但分析起来也很烦)。分析的条件,假设A=B=1,C从1->0。显然,此时:
F = !C + C
理论上,它的值应该为1,但是实际的电路表现呢?当C从1变为0时,!C的值变化需要经过一个td,A!C的值需要经过两个td,BC的值变化需要一个td,F的值变化需要几个td呢?因为产生F的是一个或门,所以,如果BC是1,则不用考虑A!C,可以认为此时F的延迟是两个td;如果BC是0时,则F的值由A!C决定,这时认为F的延迟是三个td。
现在我们具体分析C从1变为0时的情况,分为几个时刻:
| 各门输出\ 时刻| t-1 | t0| t1 | t2 | t3 | t4 |
|:-----------:|:-------------:||:-------------:|:-------:|:-----:|:-----:|:-----:|
| C | 1| 0 | 0 | 0 | 0 | 0 |
| !C | 0| 0 | 1 | 1 | 1 | 1 |
| A!C | 0| 0 | 0 | 1 | 1 | 1 |
| BC | 1| 1 | 0 | 1 | 1 | 1 |
| F | 1| 1 | 1 | 0 | 1 | 1 |
在看上面这个表格时,因为门有延迟,所以!C的在 t1时刻的取值实际上是t0时刻C的值取非(经过一个非门延迟);同理A!C在 t2时刻的值是t1时刻!C的值(因为A取1),其它的类似分析,根据这个表格,我们可以看到F的值有一个毛刺出现(在 t2错误输出0)。大家看的时候,结合电路图可以画上面类似的表格。
现在,我们再分析另一种情况,假设A=B=1,如果C从0变为1呢?会不会有险象呢?还是按照上面来画表:
各门输出 \ 时刻 | t-1 | t0 | t1 | t2 | t3 | t4 |
---|---|---|---|---|---|---|
C | 0 | 1 | 1 | 1 | 1 | 1 |
!C | 1 | 1 | 0 | 0 | 0 | 1 |
A!C | 1 | 1 | 1 | 0 | 0 | 1 |
BC | 0 | 0 | 1 | 1 | 1 | 1 |
F | 1 | 1 | 1 | 1 | 1 | 1 |
显然,当C从0变为1的时候,没有险象产生。
上面的情况是一个变量发生变化的情况,其具体表现有两种可能,如下图所示:
静1险象就是出现“1-0-1”的电路(1为稳态,0为毛刺);静0险象就是“0-1-0”电路(0为稳态,1为毛刺),具体规律为:
- 当F=A+!A时,当A由1-->0时,会产生静1险象
- 当F = A * !A时,当A由0-->1时,会产生静0险象
一个变量变化时产生的险象叫做逻辑险象,两个变量变化产生的险象叫功能险象。还是针对图1中的例子,假设A=1,BC从00-->11,则其变化在卡诺图上的示意图如下所示:
由图可知,BC从00变为11,有两条路径:
- B先从0-->1, 然后C从0-->1,此时,电路的值变化情况如图3中的绿色箭头所示,所经历的都是F值为1的卡诺图方格,不会产生错误输出,不会产生险象;
- C先从0-->1,然后B先从0-->1,此时,电路按照图3中白色箭头变化,会有一个毛刺产生,从而产生险象。
功能险象是电路中不可避免的,静态险象则是我们需要防范的重点。如何防范呢?
静态险象的判断与避免
在上面分析的基础上,其实单从逻辑表达式就可以对是否存在静态险象进行判断。
对于与或表达式F,如果对变量进行适当赋值之后,F能变成:F=A+!A,其对应的卡诺图具有如下特征:
在图4中,F的表达式在A的原变量区和反变量区相切,其对应的语义是:当A从1-->0时,会出现值为0的毛刺,其规避方法为:将相切界面的两个1方格用卡诺圈圈起来,将F变为:
F = !A!C + !AB + AC + BC
对于或与表达式,对变量进行赋值后,F变为 F=A * !A的形式,则其对应的电路图中存在险象,其对应的卡诺图具有如下特征:
在图5中,F在C的原变量区和反变量区相切,对应的语义是:当C从0-->1时,会出现值为1的毛刺,规避方法则是:将相切界面的两个0方格用卡诺圈圈起来,将F变为:
F = (A + C)(B + !C)(!A+!B)
总结
本节主要是了解掌握电路中竞争与险象的基本概念,对电路中存在的各种风险有较为清晰的认识,如何对电路进行测试分析是EE工程相关研究生的一个研究方向,有兴趣的童鞋可以进一步挖坑填坑。