跳转至

组合逻辑⚓︎

组合逻辑器件⚓︎

加法器(Adders)⚓︎

加法器分为半加器(The Half-Adder)和全加器(The Full-Adder)。

半加器⚓︎

半加法器

对于半加法器,其接受两个输入\(A\)\(B\),其有两个输出\(\Sigma\)\(C\textrm{out}\)表示算数结果和进位结果。其逻辑表达式为

\[ \Sigma = A\oplus B,\qquad C\textrm{out}=AB. \]

全加器⚓︎

全加器

对于全加器,其具有三个输入,其中还包含一个接受是否进位的输入\(C_\textrm{in}\)。其逻辑表达式为

\[ \Sigma = (A\oplus B)\oplus C_\textrm{in},\qquad C_\textrm{out}=AB+(A\oplus B)C_\textrm{in}. \]
如何理解

进位条件是:输入信号\(A\)\(B\)都是高电平,或者只有一个为高电平但进位信号为高电平。

并行加法器(Parallel Adders)⚓︎

可以使用\(n\)个全加器实现多位加法的运算器。但需要注意,个位数字的加法器的\(C_\textrm{in}\)端要接地以保证输入低电平。

由这种方法构成的加法器存在延迟:假设单个全加器从信号输入到进位信号输出的时间间隔为\(t_p\),则\(n\)位加法器的延时为

\[ t=nt_p. \]

超前进位加法器(The Look-Ahead Carry Adder)⚓︎

假设第\(i\)位运算的输入为\(A_i\)\(B_i\),输出为\(\Sigma _i\)\(C_i\),则:

如果\(A_iB_i=1\),则不论前一位输出\(C_{i-1}\)的值如何,输出\(C_i=1\)必然成立;又若\(A\oplus B=1\),则不论前一位输出\(C_{i-1}\)的值如何,输出\(C_i=C_{i-1}\)必然成立。

我们称前一种情况为Carry Generation,后一种情况为Carry Propagation。我们定义:

\[ G=AB, \]
\[ P=A\oplus B, \]

则超前进位加法器的运算可以由下面的逻辑表达式表示:

\[ \Sigma _i=P_i\oplus C_{i-1}, \]
\[ C_i=G_i+P_iC_{i-1}. \]

如图所示为四位超前进位加法器的一种型号,其中,\(1\)对应输入的LSB,\(4\)对应输入的MSB.

比较器(Comparators)⚓︎

上述是比较器的示意图,当且仅当\(A=B\)时,输出\(X=0\)

对于多位数的比较器实现,可以将多个比较器的输出结果取非后进行与运算,即

\[ X=\prod_{i}\overline{X_i}. \]

输出为\(X=1\)时,证明多位数相等。


另一种比较器带有三个输出端口,他们的逻辑表达式分别是:

\[ \begin{cases} Y_{A>B}=A\overline{B},\\ Y_{A=B}=AB+\overline{A}\overline{B},\\ Y_{A<B}=\overline{A}B. \end{cases} \]

运用这种比较器比较多位数时,遵从先比较高位数的原则。

编码器(Encoder)⚓︎

将一系列信号转换成二进制代码。对于\(n\)位二进制代码,其有\(2^n\)中不同的组合方式。以下介绍 16-line-to-4-line 的编码器。

上图中,

  • \(EI\)为输入使能端,当其有效时(图中表现为低电平),输出端才有可能有效;

  • \(EO\)为输出使能端,当\(EI\)有效且其余输入口都无效时,其输出有效值;

  • \(GS\)端当且仅当\(EI\)端有效且所有其余输入口都有效时,其才输出有效值。

使用多片74F148实现大于8的数字编码器可以采用如下的连接方式。

解释

当高于\(7\)的数字\(n\)被按下时,右侧的\(EO\)输出无效,于是得到了数字\(n-8\)的二进制表示,此时只要在最高位\(A_3\)输出有效值即可。当按下的数字\(n\leqslant 7\)时,\(EO\)输出有效值,因此此时的输出就是\(n\)的二进制表示。注意,由于或门输出端为高电平有效,因此此处输出了原码。

除了上面的型号外,还有74HC147,是一种 Decimal-to-BCD 编码器。

由于逻辑表达式组成的原因,有时没有零对应的输入端。但这不影响结果。

为什么不影响结果

根据真值表不难得到逻辑表达式:

\[ \begin{cases} A_3=X_8+X_9,\\ A_2=X_4+X_5+X_6+X_7,\\ A_1=X_2+X_3+X_6+X_7,\\ A_0=X_1+X_3+X_5+X_7+X_9.\\ \end{cases} \]

上面从未出现\(X_0\),因此是不影响结果的。

这种编码器常用于键盘的设计。

解码器(Decoder)⚓︎

将比特位的信号转化为数字的电路模块叫做解码器,又称译码器。图示是一种3bit解码器。

根据真值表,我们不难得出:

\[ Y_i=m_i.\quad (m_i\text{是最小项}) \]

因此,这种解码器又称为最小项发生器

对于输入信号与输出信号之间的关系,我们称之为解码函数


上图是一种三位转八位解码器的实现。其中,当且仅当\(S_1,S_2,S_3\)都有效时输出端才会有输出。

利用上面的解码器,我们可以将之拓展为4转16解码器,其结构如下。

为什么可以?

对于相同的\(D_2,D_1,D_0\)输入,当\(D_3\)不同时,两种结果相差\(8\)。于是当\(D_3\)有效时,可以使左边模块不工作,通过右边模块输出\((D_2D_1D_0)_{(2)}+8_{(10)}\);当\(D_3\)输入无效时,直接在左边模块输出\((D_2D_1D_0)_{(2)}\),即可。

继续扩展,还可以得到如下的模块。

后续扩展方法类似。


十进制解码器如下图。由于BCD转十进制时存在伪码(即之前提到过的"Don't Care" Conditions),当输入是伪码时,输出均为无效。


最后更新: March 12, 2023
创建日期: March 12, 2023

评论