分析门电路
尝试分析一下门电路的行为和功能.
![[分析门电路.png]](/images/%E4%B8%80%E7%94%9F%E4%B8%80%E8%8A%AFF3/%E5%88%86%E6%9E%90%E9%97%A8%E7%94%B5%E8%B7%AF.png)
| A | B | P1 | P2 | N1 | N2 | Y |
|---|---|---|---|---|---|---|
| 0 | 0 | 导通 | 导通 | 截止 | 截止 | 1 |
| 0 | 1 | 导通 | 截止 | 截止 | 导通 | 0 |
| 1 | 0 | 截止 | 导通 | 导通 | 截止 | 0 |
| 1 | 1 | 截止 | 截止 | 导通 | 导通 | 0 |
根据上表分析,该电路实现了一个2输入或非门.
或门的晶体管结构
以下是或门的逻辑符号, 尝试画出或门的晶体管结构.

或门可以在上题或非门后串联一个非门电路构成,如下图所示:

对比两种实现的晶体管所需要的数量

左图的使用一个与门和一个与非门实现,与门需要6个晶体管,与非门则需要4个晶体管,故共需要10个晶体管.
右图则仅需6个晶体管.
用其他门电路搭建异或门
尝试在 Logisim 中用上文提到的门电路搭建一个异或门. 搭建后, 通过仿真检查你的方案是否正确.
实现正确后, 计算你的方案使用了多少个晶体管.

如图所示,使用了两个非门,三个与非门,共需16个晶体管
设计同或门
还有另一种操作是"同或"操作, 当输入A和B相同时, 结果为1, 否则为0. 同或操作可以认为是异或操作结果的取反.
尝试在Logisim中用上文提到的门电路搭建一个同或门. 搭建后, 通过仿真检查你的方案是否正确.

搭建2-4译码器
尝试在 Logisim 中用门电路搭建一个2-4译码器, 它有2位输入, 4位输出. 搭建后, 通过仿真检查你的方案是否正确.
如下图所示:

Logisim中的子电路功能
译码器在后续的数字电路设计中会经常用到, 为了避免用户重复设计相同的电路, Logisim 提供了子电路功能, 相应电路只需要设计一次, 后续即可反复实例化. 具体操作方式请阅读官方手册中的Subcircuits(子电路)部分.
子电路如图所示:

译码器的拓展
3-8译码器有3位输入, 8位输出. 尝试实例化若干个2-4译码器(具体数量交给你的思考), 并添加少量门电路, 从而实现3-8译码器的功能. 搭建后, 通过仿真检查你的方案是否正确.
使用2个2-4译码器组成3-8译码器,如图所示:

搭建七段数码管译码器
尝试在Logisim中通过门电路搭建一个七段数码管译码器, 它有4位输入和8位输出, 分别与拨码开关和七段数码管相连. 七段数码管译码器支持十进制数字的显示, 即当输入对应0-9时, 七段数码管显示对应的数字; 对于其他输入, 七段数码管只显示小数点. 搭建后, 通过仿真检查你的实现是否正确.
a
---
f| g |b
---
e| |c
--- .h
d
对于4位输入,共有16种状态,我们可以使用8个4-16译码器分别对应8个数码管,然后在4-16数码管后面接上一个n位或门,将某个数码管对应的译码器的“亮”的状态所对应的输出连接到或门上。比如对于a数码管(假设是数码管排列如上图所示),会在0、2、3、5、6、7、8、9共8种状态中点亮,则将4-16译码器对应的输出连接到8位或门,然后将或门的输出连接到a输出端口。七段数码管译码器如下图所示:

将七段数码管译码器连接数码管:

搭建七段数码管译码器(2)
尝试在Logisim中通过门电路搭建一个支持十六进制数字的七段数码管译码器. 和上述的十进制数字相比, 当输入对应10-15时, 七段数码管分别显示A, b, C, d, E, F. 搭建后, 通过仿真检查你的实现是否正确.
这里只需要在上一题的基础上为各个输出添加10-15状态的连线。(这里没有删除小数点的输出)


搭建编码器
尝试在Logisim中通过门电路搭建一个16-4编码器, 它有16位输入和4位输出, 分别与拨码开关和七段数码管译码器相连, 使得编码器的输出结果通过十六进制数字显示在七段数码管中. 搭建后, 通过仿真检查你的实现是否正确.
16-4编码器门电路如下:

通过七段数码管译码器与七段数码管相连:

搭建4-2优先编码器
根据上述真值表, 尝试列出每一位输出的逻辑表达式. 然后尝试在Logisim中通过门电路搭建一个4-2优先编码器. 搭建后, 通过仿真检查你的方案是否正确.
实现后, 对比4-2编码器和4-2优先编码器所需的门电路数量.
4-2优先编码器如下图所示,其中使用2个或门、一个与门、一个非门。相对应的4-2编码器进去2个或门。

搭建1位2选1选择器
尝试在Logisim中通过门电路搭建一个1位2选1选择器. 搭建后, 通过仿真检查你的方案是否正确.

搭建3位4选1选择器
尝试画出3位4选1选择器的电路结构图, 然后在Logisim中通过门电路搭建一个3位4选1选择器. 搭建后, 通过仿真检查你的方案是否正确.
所谓3位4选1选择器,就是对四个位数为3的数据进行选择输出的组合电路。在此我们复用之前构造的2-4译码器组件。
3位4选1选择器电路结构如下所示:

搭建可切换进位计数制的七段数码管
通过5个拨码开关和1个七段数码管, 实现如下功能: 其中4个拨码开关当作数据输入, 剩下1个拨码开关作为进位计数制的选择, 当选择信号为0时, 七段数码管以十进制方式显示数据; 当选择信号为1时, 七段数码管以十六进制方式显示数据. 在输入数据为10-15时, 两种显示方式有所不同.
在此我们复用之前构造的两个七段数码管译码器模块,然后使用一个8位2选1选择器来实现进制切换的功能,这里直接使用Logisim提供的多路选择器来进行构造。
其中显示逻辑与之前的一致,10进制的情况下当输入非0~9时,只点亮小数点。如下图所示:

搭建比较器
尝试在Logisim中通过门电路搭建一个4位比较器, 然后通过两组拨码开关对比两组数据是否相等, 若相等, 则点亮一个LED灯. 搭建后, 通过仿真检查你的方案是否正确.

搭建1位全加器
尝试列出1位全加器的真值表, 并在Logisim中通过门电路搭建一个1位全加器. 搭建后, 通过仿真检查你的方案是否正确.
1位全加器真值表如下:
| Cin | A | B | S | Cout |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
电路图如下:

搭建4位加法器
尝试在Logisim中通过门电路搭建一个4位加法器, 用七段数码管按十六进制显示加法器的两个输入和结果, 并用一个LED灯指示加法结果是否产生进位. 搭建后, 通过仿真检查你的方案是否正确.
电路如下所示:

搭建4位减法器
根据4位加法器的设计思路, 尝试在Logisim中通过门电路搭建一个4位减法器, 用七段数码管按十六进制显示减法器的两个输入和结果, 并用一个LED灯指示减法结果是否产生借位. 搭建后, 通过仿真检查你的方案是否正确.
按照加法器的思路,我们首先搭建1位全减器(Full Subtractor),全减器的真值表如下,其中Cin表示来自低位的借位,Cout表示向高位结尾,A为被减数,B为减数:
| A | B | Cin | S | Cout |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 0 |
| 1 | 1 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 | 1 |
全减器的电路如下:

然后通过1位全减器搭建4位减法器,如下图所示:
