组合逻辑电路的设计
逻辑电路的概念
若逻辑电路在任何时刻产生的稳定输出值仅仅取决于该时刻各输入值的组合,而与过去的输入值无关,则称为组合逻辑电路.
也就意味着该电路不应存在存储器件以延迟对应的输出.
也不存在反馈回路.
逻辑电路的生成
- 充分了解需求
- 抽象化并写出函数表达式
- 列出真值表(若可行)
- 化简(卡诺图或代数)
- 函数评估
- 电路生成(物理化)
逻辑电路的评估
- 是否完全满足设计需求?是否保证得到预期输出?
- 逻辑电路的级数是否压缩到最小?
- …
无关项
在需求中常存在一些无关项(也就是非法输入),这些取值保证不会出现(至少是表面上保证),在真值表制作时可以将这些项设置为d(即随便输出0或1都行).而这将给函数化简带来一定的便利.
比如下面的真值表:
如果考虑无效项,即将其当作0,那么化简之后的函数为
如果不考虑无效项,也就是把这个当作什么都可以,那就是
明显的,第二个更简单.但也会造成非法输入的输出紊乱.具体还是要看情况分析.
范例:单位累加器及多位累加器的单元
作为二进制,加法器的需求相当简单,就是:
0
+
0
=
0
0
+
1
=
1
+
0
=
1
1
+
1
=
0
0+0=0\\0+1=1+0=1\\1+1=0
0+0=00+1=1+0=11+1=0
(暂时不考虑进位,因为输出就一位)
设输入端信号分别为a,b,那么就是:
F
(
a
,
b
)
=
a
⊕
b
F(a,b)=a\oplus b
F(a,b)=a⊕b
也就是异或.
而对于有若干位的加法器而言呢?
对于一个有"来自低位的进位"和"传输给高位的进位"的加法器,每一位的器件都有三个输入:
a
i
,
b
i
,
c
i
−
1
a_i,b_i,c_{i-1}
ai,bi,ci−1,同时有两个输出:
S
i
,
c
i
S_i,c_i
Si,ci.就有如下真值表:
将两个输出分别进行抽象函数化,则有:
绘制卡诺图化简,得到:
当采用异或门及与或门实现电路时,可对表达式作如下变换:
明显的
S
i
S_i
Si仍然是几个输入的异或.
顺便一提,如果上一级没有相应变量的反变量传下来,为了节约门电路和级数以减少时延,可以设计出没有反变量的电路.当然,会更加复杂.
竞争和险象
竞争和险象出现的几率不小,易对电路产生负面影响.
因为每个器件都会产生一个时延,导致输入稳定的时候输出出现异常(比如0变1,1变0),而这时是相当致命的.
时延长短和门电路的级数,门本身的技术参数,导线有关.
竞争的意思就是从不同路径到达输出端的信号时间存在先后,造成一段时间内最后一个门的某些输入没有信号.
这就容易造成竞争.
竞争有良性的,即对输出无明显影响的;也有恶性的,会造成输出错误并产生尖脉冲.产生的错误输出就叫险象.
比如下面的例子:
红色部分就是出现的险象.而每个输入的时间差
t
p
d
t_{pd}
tpd就是时延.
险象是输出1的称为1型险象,否称为0型
险象的定位和判断
针对前面分析的情况可知,当变量X同时以原变量和反变量的形式出现在函数表达式中,且在一定条件下该函数表达式可简化成
X
+
X
ˉ
X+\bar{X}
X+Xˉ或者
X
⋅
X
ˉ
X\cdot \bar{X}
X⋅Xˉ时,该函数表达式对应的电路在X发生变化时,可能由于竞争而产生险象。
E.g:
F
(
x
,
y
,
z
)
=
A
ˉ
C
ˉ
+
A
ˉ
B
+
A
C
F(x,y,z)=\bar{A}\bar{C}+\bar{A}B+AC
F(x,y,z)=AˉCˉ+AˉB+AC
表达式里面有
A
,
A
ˉ
A,\bar{A}
A,Aˉ,
C
,
C
ˉ
C,\bar{C}
C,Cˉ,也就是说A,C可能会产生险象.接下来遍历B,C的输入空间,考察是否会有形如
A
+
A
ˉ
A+\bar{A}
A+Aˉ的式子存在.
为什么是要求正反变量同时存在呢?因为如果是两个相同的变量形式进行与-或操作,不管第二个输入什么输出的都是正常的信号.只有当取反的时候会出错.比如:
A + A ˉ A+\bar{A} A+Aˉ,当输入为1的项产生延迟时输出会出现一段时间的0,也就是0型险象.所以判断标准是这样.
发现在BC=11时出现险象.
对C也如此操作.
同样还可以用卡诺图判断是否存在险象.
当出现两个圈"相切",即相邻最小项分属两个圈,也即会出现
A
+
A
ˉ
A+\bar{A}
A+Aˉ的情况.这时候出现险象.
比如这个图,看出
(
0101
)
2
和
(
1101
)
2
(0101)_2和(1101)_2
(0101)2和(1101)2出现相切,此时;对于相异项A出现险象.
当然在卡诺图的化简的过程中为了追求圈的最大化,能重叠都尽量重叠了 所以出现不得已的相切多半就是上图这种情况.
险象的消除
为消除险象,最常用的方法是在电路中加入冗余项.
具体来说,就是先观察什么时候会出现险象(在其他变量怎么输入时).如果最后一个门是与且险象类型是0(即异常状况是0),就添加在产生险象的其他变量的真值指派下恒为1的与项;如果最后一个门是或,就添加在产生险象的其他变量的真值指派下恒为0的与项.
比如:
F
(
A
,
B
,
C
)
=
A
B
+
A
ˉ
C
F(A,B,C)=AB+\bar{A}C
F(A,B,C)=AB+AˉC
当B=C=1时,A的变化可能使输出产生“0”型险象。
那么为防止险象,添加一个在B=1C=1下为1的冗余项BC即可消除.
当然从物理层面盛来说,还可以设置一个电容组合电路来过滤杂波.这个属于电路的知识,在此不做讲解.
还有一种更刺激的套路是通过一个开关调节信号来决定什么时候输出信号.就像下图这样.
当选通脉冲不工作时电路无法输出信号.这样就避免的险象对下一级电路的恶性影响.
Conclusion
本篇文章阐述了逻辑电路设计的一些基本原则,还对电路设计中的常见问题之一竞争和险象进行了分析,并提出了一些避免产生恶性影响的方法.